【发布时间】:2024-08-06 23:40:01
【问题描述】:
我正在准备面试,我正在努力记住 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
这个算法是一个非常有名的生成排列的算法。它简洁快速,与代码一起生成组合。
问题是:我不喜欢死记硬背,我总是尽量保留概念以便以后“推断”算法。
这个算法真的很不直观,我无法找到一种方法来向自己解释它是如何工作的。
谁能告诉我为什么和如何这个算法在生成排列时按预期工作?
【问题讨论】:
-
我知道这是旧的,但我在他的网站上找到了 Ruslan Ledesma-Garza 的一个很好的解释:ruslanledesma.com/2016/06/17/why-does-heap-work.html
标签: algorithm language-agnostic permutation pseudocode heaps-algorithm