排列:将713 0和31 1划分为744个不同的位置

时间:2019-11-26 19:33:35

标签: python python-3.x itertools

因此,我需要找出所有可能的排列,以将744个位置上的31 1和713 0分开(所有零和一完全相同)。我创建了以下代码来创建0和1在744个位置上的所有排列,我的想法是删除那些总和不等于31的行,但会导致内存溢出。有什么办法可以更有效地做到这一点?

from itertools import product
comb = list(product([0,1], repeat=744))    
print(comb)

1 个答案:

答案 0 :(得分:1)

这听起来像是组合问题。找到所有排列似乎对于您要处理的数字来说将是非常昂贵的,因为它确实很大。有一些设计用于确定排列的算法,例如Heap算法。在这种情况下,您可以运行算法,并且仅保留总计为31的位置的表示形式。您可能需要存储这些内容,但这可能会导致相同的错误。问题的很大一部分是您试图保留所有可能的所有可能性。

您还可以尝试从仅包含31个1的数组开始,然后需要对其进行混洗以获得排列。与至少存储所有排列相比,这在空间上会更便宜。

如果您打算查找潜在组合的数量?

如果是这种情况,您可以考虑选择k,例如744选择31。