arrays - 5*12 网格中所有唯一组合的算法
问题描述
我正在寻找一种算法或我的问题的名称(我认为这是非常古老的并且没有什么新东西)。我想在 5x12 网格中找到 5 个填充单元格的所有独特组合。
例子:
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
1|0|0|0|0|0|0|0|0|0|0|0
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
1|0|0|0|0|0|0|0|0|0|0|0
-----------------------
0|0|1|0|0|0|0|0|0|0|0|0
1|1|1|1|1|0|0|0|0|0|0|0
-----------------------
0|0|0|0|0|0|0|0|0|0|0|0
-----------------------
0|0|0|0|0|0|0|0|0|0|0|0
-----------------------
0|0|0|0|0|0|0|0|0|0|0|0
-----------------------
0|0|0|0|0|0|0|0|0|0|0|0
this is also valid
等等。每个占用的单元格将表示为 (X,Y)-Tuple
唯一组合数量的相应公式是 n over k - 二项式系数(或类似的东西),如果我没记错的话,这将是 510 万个唯一组合。
此处或其他平台上的大多数其他类似问题都以某种方式限制了每一行必须恰好有一个单元格被占用。对于我的特殊情况,那不是真的,也是我的问题的原因。
这是我在这里的第一个问题,我希望有人可以帮助我解决这个问题,因为我找不到系统方法的想法
解决方案
我建议你使用这个简单易懂的解决方案:首先,给每个单元格一个索引,这样我们就可以讨论 60 个单元格长度列表而不是二维板。我希望您初始化这样一个索引列表: [1, 2, 3... 59, 60] 现在,您基本上需要这些索引的每个 k 大小(在您的情况下是五个)组合。其余的很容易。使用此代码:
def findsubsets(s, n):
return list(itertools.combinations(s, n))
虽然 s 是您的列表,而 n 是 k(为您提供 5 个)。此函数从列表中返回 5 个数字的所有可能组合。使用每种组合将正确的单元格填充为 1,其余的单元格填充为 0。希望对您有所帮助。祝你好运!
推荐阅读
- python - Python Pandas 中的距离矩阵
- python - Python 模块导入
- c# - 如何在 C# 中创建泛型方法以返回多个列表
- c# - 从 SQL 数据库中删除未连接的节点
- php - 在 Codeigniter 3 中使用 Google 日历
- rx-java2 - 为什么 IoScheduler 使用 ScheduledExecutorService 且 poolCoreSize 为 1?
- javascript - 在浏览器上,有没有办法以编程方式为 iCal 创建日历事件,而无需创建 .ics 文件并手动下载?
- javascript - 如何在javascript中的多个不同数组中查找值
- python - 获取 Firebase 网络中的孩子数
- python - 无法从 python web scraper 获取数据,因为应用程序正在新窗口中打开页面