此功能的复杂性是什么???
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) = T(n)/n!
G(n) = G(n-1) + O(1/(n-1)!)
这给了G(n) = Theta(1)。
G(n) = Theta(1)
这样T(n) = Theta(n!)。
T(n) = Theta(n!)
假设打印恰好发生在n!时间上,我们得到的时间复杂度为
n!
Theta(n * n!)