1

我正在研究递归算法的时间复杂度,我想知道生成 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!) 但我不确定。所有的帮助将不胜感激。谢谢你。

4

0 回答 0