如何得到大小为{n,n1,n2。。。1} 从n码列表中有效吗?

2024-10-02 02:34:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个列表中找到与列表大小相同或更小的所有排列。在

例如:

>>>allPermutations([a,b])
[[a,b], [b,a], [a], [b]]

这是我目前用python编写的迭代代码。我不确定它目前的效率有多高。在

^{pr2}$

我很确定算法会产生n的和!从1->;n排列中快速增长。到目前为止,我已经创建了一种递归的方法来完成它,它的速度非常慢,因为它要执行许多重复的操作。我一直试图通过迭代来实现,但我不知道如何限制重复操作。我正在使用python,但是psuedo代码也会对我有很大帮助。任何帮助都将不胜感激。提前谢谢!在


Tags: 方法代码gt算法列表速度效率psuedo
3条回答

可能会对所有可能大小的列表遍历所有排列。澄清:

def all_permutations(input_list):
    for i in xrange(len(input_list)):
        sublist = input_list[:i]
        for variant in permutations(sublist):
            yield variant

我很确定你的permutations.add()curSet.add()fullSet.add()调用会导致你的例程很快停止。如果你一直改变数组的大小,分配的内存将“耗尽空间”,必须找到一个新的位置。这意味着整个数组被复制。然后再加入另一个元素-冲洗并重复。在

您需要计算所需元素的数量,并预先为其分配空间。因此,如果你有5个元素,你需要分配(5!+5*4!+10*3!+10*2!+5)最终结果x 5个元素-中间结果更少。然后在不乱排内存块的情况下填充这些数组;这将使速度显著加快。在

以下措施应该有效:

from itertools import permutations

def allPermutations(seq):
    return (x for i in range(len(seq),0,-1) for x in permutations(seq, i))

例如:

^{pr2}$

相关问题 更多 >

    热门问题