【发布时间】:2019-08-28 08:32:33
【问题描述】:
大家好,对于我的数据结构作业,我必须找到最有效的方法(big-o wise)来计算对象列表的排列。
我在网上找到了递归示例,但这似乎不是最有效的方法;我尝试了自己的代码,但后来我意识到,当我计算可能排列的数量时,我实际上是在制作我的算法 O(!n)。有什么建议? .-.
from random import sample
import time
start = time.time()
testList = list(x for x in range(7))
print('list lenght: %i objects' % len(testList))
nOfPerms = 1
for i in range(1,len(testList)+1):
nOfPerms *= i
print('number of permutations:', nOfPerms)
listOfPerms = []
n = 1
while n <= nOfPerms:
perm = tuple(sample(testList, len(testList)))
listOfPerms.append(perm)
permutations = set(listOfPerms)
if len(permutations) == len(listOfPerms):
n += 1
else:
del(listOfPerms[-1])
end = time.time() - start
print('time elapsed:', end)
输出:
list lenght: 7 objects
number of permutations: 5040
time elapsed: 13.142292976379395
如果我输入 8 或 9 或 10 而不是 7,那么这些是排列的数量(我不会显示时间,因为它花费的时间太长):
list lenght: 8 objects
number of permutations: 40320
list lenght: 9 objects
number of permutations: 362880
list lenght: 10 objects
number of permutations: 3628800
【问题讨论】:
标签: python-3.x big-o permutation memory-efficient