文字 A - G (7) のすべての可能な順列を生成したいのですが、ヒープのアルゴリズムがこれを可能にすると言われています。
ただし、ウィキペディアのページの疑似コードを見ると、次のように表示されます。
procedure generate(n : integer, A : array of any):
if n = 1 then
output(A)
else
for i := 0; i < n - 1; i += 1 do
generate(n - 1, A)
if n is even then
swap(A[i], A[n-1])
else
swap(A[0], A[n-1])
end if
end for
generate(n - 1, A)
end if
……意味がわからない。
したがって、7 つの文字 (AG) がある場合、最初の 6 文字のすべての可能な順列を見つけるように見えますが、最後の文字は同じままです。
つまり、G が最後にある間に AF のすべての可能な順列を見つけ、各文字が最後になるまでそれを行います。
つまり、「N」は奇数なので、常に最後の文字 (7 番目の文字) を最初のスロットにある文字と入れ替えます。
しかし(これがどのように機能するかはわかっていますが、それが私が得ているすべてです)それは、同じ2文字が常に交換され、異なる順列がなくなるだけではありませんか?
過去 4 時間にわたって Google の結果を精査しましたが、上記の疑似コードを 1 行ずつ説明するものは見つかりません。
助けていただければ幸いです!!