【发布时间】:2017-03-19 20:25:54
【问题描述】:
我需要生成所有可能的 N 选择 K N 位数字,其中设置了 K 位。 我能想到的最好和最简洁的选择非常慢:
def kbits(n, k):
result = set()
for bits in itertools.combinations(range(n), k):
s = 0
for bit in bits:
s |= 1 << bit
result.add(s)
return result
kbits(25, 12) 在我的机器上花了 8.3 秒。
我怎样才能让它更快?例如,也许有一种方法可以批量设置所有位,而不需要遍历所有位?
【问题讨论】:
-
你实际上想用这个结果来实现什么?您有什么性能要求?
-
嗯,这是使用 DP 解决旅行商问题的一部分。我正在生成城市的所有 2**(n-1) 个子集,然后遍历它们。实际上,除了让它尽可能快之外,对我没有任何性能要求:)
标签: python algorithm python-3.x binary combinations