置换生成器与返回函数

时间:2016-05-08 18:41:14

标签: python algorithm recursion generator

所以这是我的两个函数,它们返回字符串的所有排列。

def permutations(sequence):
    if len(sequence) <= 1:
        return [sequence]        
    else:
        l = []
        perms = permutations(sequence[1:])
        for perm in perms:
            for index in xrange(len(perm)+1):
                l.append(perm[:index]+sequence[0]+perm[index:])
        return l

def permutations_gen(sequence):
    if len(sequence) <= 1:
        yield sequence
    else:
        for perm in permutations_gen(sequence[1:]):
            for index in xrange(len(perm)+1):
                yield perm[:index] + sequence[0] + perm[index:]

在我看来,第二个 - 生成器 - 应该比第一个更快,特别是在使用大字符串运行时。毕竟,一个长度为11的字符串有39916800个排列,看起来,因为第一个函数在内存中存储了这么多列表,所以生成器会快得多。

但是当我计算这两个时,第一个几乎总是更快,但它们非常接近。为什么发电机不会更快?

另外,我一直试图想出一种迭代生成排列的方法,没有递归调用,但却想不出办法。我该怎么做呢?

0 个答案:

没有答案