順列を生成するヒープのアルゴリズムが正しいことを証明する必要があります。その擬似コードは次のとおりです。
HeapPermute(n)
//Implements Heap’s algorithm for generating permutations
//Input: A positive integer n and a global array A[1..n]
//Output: All permutations of elements of A
if n = 1
write A
else
for i ←1 to n do
HeapPermute(n − 1)
if n is odd
swap A[1] and A[n]
else swap A[i] and A[n]
(Levitin によるアルゴリズムの設計と分析の概要から引用)
その正しさを証明するために帰納法を使用する必要があることはわかっていますが、その方法が正確にはわかりません。私は数式を証明しましたが、アルゴリズムは証明しませんでした。
証明はこんな感じになると思っていたのですが…
1) For n = 1, heapPermute is obviously correct. {1} is printed.
2) Assume heapPermute() outputs a set of n! permutations for a given n. Then
??
誘導ステップを終了する方法がわかりません。私はここで正しい軌道に乗っていますか?どんな助けでも大歓迎です。