一尘不染

递归字符串置换函数的复杂度

algorithm

此功能的复杂性是什么???

void permute(string elems, int mid, int end)
{
    static int count;
    if (mid == end) {
        cout << ++count << " : " << elems << endl;
        return ;
    }
    else {
    for (int i = mid; i <= end; i++) {
            swap(elems, mid, i);
            permute(elems, mid + 1, end);
            swap(elems, mid, i);
        }
    }
}

阅读 218

收藏
2020-07-28

共1个答案

一尘不染

忽略打印​​,满足的重复关系是

T(n) = n*T(n-1) + O(n)

如果G(n) = T(n)/n!我们得到

G(n) = G(n-1) + O(1/(n-1)!)

这给了G(n) = Theta(1)

这样T(n) = Theta(n!)

假设打印恰好发生在n!时间上,我们得到的时间复杂度为

Theta(n * n!)

2020-07-28