我正在研究递归算法的时间复杂度,并且想知道生成n个对象的所有可能排列的堆算法的复杂度。
procedure generate(k : integer, A : array of any):
if k = 1 then
output(A)
else
// Generate permutations with kth unaltered
// Initially k == length(A)
generate(k - 1, A)
// Generate permutations for kth swapped with each k-1 initial
for i := 0; i < k-1; i += 1 do
// Swap choice dependent on parity of k (even or odd)
if k is even then
swap(A[i], A[k-1]) // zero-indexed, the kth is at k-1
else
swap(A[0], A[k-1])
end if
generate(k - 1, A)
end for
end if
我认为它的时间复杂度为O(n * n!),但我不确定。 所有帮助将不胜感激。谢谢。