私は面接の準備をしており、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
このアルゴリズムは、順列を生成するための非常に有名なアルゴリズムです。簡潔で高速で、コードと連携して組み合わせを生成します。
問題は、私は物事を暗記するのが好きではなく、後でアルゴリズムを「推測」するために常に概念を保持しようとしていることです.
このアルゴリズムは本当に直感的ではなく、それがどのように機能するかを自分自身に説明する方法を見つけることができません.
順列を生成するときに、このアルゴリズムが期待どおりに機能する理由と方法を教えてください。