我需要证明堆算法生成排列的正确性。它的伪代码如下:
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
??
我只是不确定如何完成感应步骤。我什至在正确的轨道上吗?任何帮助将不胜感激。