Reputation: 47
I have the following implementation for permutation generation in 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:]
It works faster than itertools.permutations (it also does less, I know). Is there a faster (or alternatively more compact) implementation. I tried implementing it with vector insert/delete and it seems slower.
Upvotes: 0
Views: 2501
Reputation: 117380
>>> 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
it looks like your implementation is more than 5 times slower on this simple example. Am I missing something?
Upvotes: 3