-1

Pythonでの順列生成には次の実装があります。

def perms(v):
    '''
    Generates permutations for sequence v
    :param v: sequence for permutations
    '''
    if not v:
        yield ()
    else:
        for p in perms(v[1:]):
            for i in range(len(v)):
                yield p[:i] + (v[0],) + p[i:]

それは itertools.permutations よりも高速に動作します (また、少ないことも知っています)。より高速な(またはよりコンパクトな)実装はありますか。ベクトルの挿入/削除で実装しようとしましたが、遅いようです。

4

1 に答える 1

3
>>> timeit.timeit("sum([1 for i in permutations([1, 2, 3, 4, 5])])", setup="from itertools import permutations", number=1000)
0.0829811965812155

>>> timeit.timeit("sum([1 for i in perms([1, 2, 3, 4, 5])])", setup="from test import perms", number=1000)
0.4672438746438843

この単純な例では、実装が 5 倍以上遅いようです。何か不足していますか?

于 2013-07-21T11:57:16.027 に答える