我正在尝试从列表中查找与列表大小相同或小于列表的所有排列。
例如:
>>>allPermutations([a,b])
[[a,b], [b,a], [a], [b]]
这是我目前在 python 中的迭代代码。我不确定它目前的效率如何。
import itertools
def getAllPossibleSubSchedules( seq ):
fullSet = set()
curSet = set()
curSet.add(tuple(seq))
for i in reversed(range(1, len(seq) + 1)):
permutations = set()
for curTuple in curSet:
permutationsList = list(itertools.permutations(curTuple, i))
for permutation in permutationsList:
permutations.add(permutation)
curSet = set()
for permutation in permutations:
curSet.add(permutation)
fullSet.add(permutation)
return fullSet
我很确定该算法会产生n 的总和!从 1 -> n排列增长很快。到目前为止,我已经创建了一种非常慢的递归方式,因为它执行了许多重复操作。我一直在尝试通过迭代来做到这一点,但我不知道如何限制重复操作。我正在使用 python,但伪代码也会对我有很大帮助。任何帮助,将不胜感激。提前致谢!