【发布时间】:2013-12-11 14:21:59
【问题描述】:
我使用整数中的两位数字来表示一个元素。 IE。 3345512 代表四个元素 [3,34,55,12]。接下来,我重复地将一个整数加到一个整数上以获得另一个元素序列。当生成这样的序列时,我得到相同序列的排列,即3341255 = [3,34,12,55],在我的情况下,它相当于数字3345512 = [3,34,55,12]。所以我想避免我已经遇到的序列的排列。我不想存储这些数字,因为它们变得非常大(10^30 等等)。我尝试使用布隆过滤器,但它无法处理元素的数量。是否有一个简单的解决方案来生成没有排列的序列?
[编辑] 这是一个很小的 python 脚本,应该可以工作。为了更好地理解,我使用if s[idx] == 9: 的单个数字而不是if s[idx] == 99:
如果您有更简单的解决方案,我会接受它作为答案。
import time
s = [1]
while True:
idx = 0
while not idx+1 == len(s) and not s[idx] < s[idx+1]:
s[idx] = 1
idx += 1
if s[idx] == 9:
s[idx] = 1
s.append(1)
else:
s[idx] += 1
print repr(s)
time.sleep(0.7)
【问题讨论】:
-
如果您想避免重复序列,它们是彼此的排列,请仅选择其中一种排列作为代表,例如元素形成非递减序列的排列。
-
Chill 的想法很好,从 0 开始计数。否则,您可能会错过一些序列。例如,如果您从
5050开始计数,即使您从未遇到过4951,也会跳过5149。 -
你想要combinations而不是排列。
-
@Jim:“计算多子集”部分似乎很合适,尽管没有关于如何实现它的建议。
标签: algorithm math permutation