如何阅读Heap的算法?

时间:2016-11-08 02:10:24

标签: algorithm recursion permutation

我想要生成字母A - G(七)的所有可能的排列,而Heap的算法据称可以实现这一点。

但是,当我查看Wikipedia page中的伪代码时,我看到了这一点:

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

....并且不知道它意味着什么。

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

意思是,当G在最后时,它会找到A-F的所有可能的permations,直到每个字母结束为止。

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

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

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

非常感谢帮助!!

0 个答案:

没有答案