0

文字 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 行ずつ説明するものは見つかりません。

助けていただければ幸いです!!

4

0 に答える 0