0

我想生成字母 A - G(七)的所有可能排列,据称 Heap 的算法使这成为可能。

但是,当我查看Wikipedia 页面上的伪代码时,我看到了:

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

....不知道这意味着什么。

所以,我知道如果我有七个字母(AG),它显然会找到前六个字母的所有可能排列,而最后的字母保持不变。

意思是,它会在 G 位于末尾时找到 AF 的所有可能排列,并一直这样做直到每个字母都位于末尾。

鉴于,我有七个字母,这意味着“N”是奇数,因此我总是将结束字母(第七个)与第一个插槽中的字母切换。

但是(我知道这不是它的工作原理,但这就是我从中得到的全部)不会导致相同的两个字母不断交换并且没有不同的排列吗?

在过去的 4 个小时里,我搜索了谷歌搜索结果,但找不到任何可以逐行解释上述伪代码的内容。

非常感谢您的帮助!

4

0 回答 0