itertools.combinations如何在Python中扩展?

dee*_*eek 1 python combinations python-itertools

我正在做一个蛮力的方法试图找到一个拼图的扩展组合.

我试图获得大量的组合,然后测试每个组合,看看它们是否符合某些标准.我使用Python优秀的itertools生成组合,基本上这给了我一个迭代器,我可以过去测试每一个.

这很快就会返回并给我91390种组合来检查:

itertools.combinations(range(1, 40), 4)
Run Code Online (Sandbox Code Playgroud)

这需要几分钟时间,并给我198792594组合测试:

itertools.combinations(range(1, 122), 5)
Run Code Online (Sandbox Code Playgroud)

当我进入下一个级别时,我需要答案:

itertools.combinations(range(1, 365), 6)
Run Code Online (Sandbox Code Playgroud)

当我进入一组364的6路组合时......需要很长时间.年龄.我天生就要求大量的组合吗?它如何扩展?

Dou*_*gal 6

你要求365选择6 =(365*364*...*360)/(6*5*...*2*1)= 3,151,277,509,380组合.那是很多.在Python中桌面上不会发生超过3万亿个元素的循环 - 没办法.

如果您只是在寻找应该有多少,那么在不考虑所有这些的情况下直接计算它的公式就在维基百科上.

编辑:我只是看了看问题,看起来你正试图通过考虑所有可能的权重组合来解决它,看看它们是否有效.在这种情况下,明确强制它不会起作用 - 你必须考虑一个更聪明的解决方案.