Permutations by swapping: Difference between revisions

Undo revision 141500 by Spoon! One moment ...
(→‎Python: recursive: unrolled the recursion)
(Undo revision 141500 by Spoon! One moment ...)
Line 307:
Perm: (1, 0, 2, 3) Sign: -1</pre>
 
===Python: simplerrecursive===
After spotting the pattern of highest number being inserted into each perm of lower numbers from right to left, then left to right, I developed this simpler iterativerecursive function:
<lang python>def s_permutations(n):
def s_perm(items = [[]]):
for j in range(n) if items <= 0:
new_items = return [[]]
for i, item in enumerate(items)else:
ifnew_items i= % 2:[]
for i, item in #enumerate(s_perm(items step- down1)):
new_itemsif += [item[:i] +% [j] + item[i2:] \
# step for i in range(len(item), -1, -1)]down
new_items += [item[:i] + [items - 1] + item[i:] \
else:
# step up for i in range(len(item), -1, -1)]
new_items += [item[else:i] + [j] + item[i:] \
# step for i in range(len(item) + 1)]up
items = new_items += [item[:i] + [items - 1] + item[i:] \
for i in range(len(item) + 1)]
else:return new_items
 
return [(tuple(item), -1 if i % 2 else 1)
for i, item in enumerate(itemss_perm(n))]</lang>
 
;Sample output:
Anonymous user