小编Dea*_*ean的帖子

排列的堆算法

我正在准备采访,我正在努力记住Heap的算法:

procedure generate(n : integer, A : array of any):
    if n = 1 then
          output(A)
    else
        for i := 0; i < n; 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
    end if
Run Code Online (Sandbox Code Playgroud)

该算法非常着名,可以生成排列.它简洁快速,与代码密切配合,生成组合.

问题是:我不喜欢记住事情,我总是试图让概念在以后"推断"算法.

这个算法真的不直观,我找不到解释它如何对我自己起作用的方法.

有人可以告诉我为什么以及如何在生成排列时该算法按预期工作?

language-agnostic algorithm permutation pseudocode

12
推荐指数
1
解决办法
4705
查看次数