我正在准备采访,我正在努力记住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)
该算法非常着名,可以生成排列.它简洁快速,与代码密切配合,生成组合.
问题是:我不喜欢记住事情,我总是试图让概念在以后"推断"算法.
这个算法真的不直观,我找不到解释它如何对我自己起作用的方法.
有人可以告诉我为什么以及如何在生成排列时该算法按预期工作?