我正在准备面试,我正在努力记住 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
这个算法是一个非常有名的生成排列的算法。它简洁而快速,并与代码一起生成组合。
问题是:我不喜欢背诵一些东西,我总是试图保留这些概念以便以后“推断”算法。
这个算法真的很不直观,我无法找到一种方法来向自己解释它是如何工作的。
有人可以告诉我在生成排列时该算法为何以及如何按预期工作?