我需要迭代一组整数的排列.必须通过在每一步交换一对元素来生成订单.
我找到了用于Heap算法的维基百科文章(http://en.wikipedia.org/wiki/Heap%27s_algorithm),它应该这样做.伪代码是:
procedure generate(n : integer, A : array of any):
if n = 1 then
output(A)
else
for i := 1; i ? n; i += 1 do
generate(n - 1, A)
if n is odd then
j ? 1
else
j ? i
swap(A[j], A[n])
Run Code Online (Sandbox Code Playgroud)
我试图在python中为此编写一个生成器:
def heap_perm(A):
n = len(A)
Alist = [el for el in A]
for hp in _heap_perm_(n, Alist):
yield hp
def _heap_perm_(n, A):
if n == 1:
yield A
else:
for …Run Code Online (Sandbox Code Playgroud)