递归字符串置换函数的复杂度
问题内容:
此功能的复杂性是什么???
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);
}
}
}
问题答案:
忽略打印,满足的重复关系是
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!)