From: Are there any better methods to do permutation of string?
what is the complexity of this function???
void permute(string elems, int mid, int en
Without looking too deeply at your code, I think I can say with reasonable confidence that its complexity is O(n!). This is because any efficient procedure to enumerate all permutations of n distinct elements will have to iterate over each permutation. There are n! permutations, so the algorithm has to be at least O(n!).
Edit:
This is actually O(n*n!). Thanks to @templatetypedef for pointing this out.
Ignoring the print, the recurrence relation satisfied is
T(n) = n*T(n-1) + O(n)
If G(n) = T(n)/n!
we get
G(n) = G(n-1) + O(1/(n-1)!)
which gives G(n) = Theta(1)
.
Thus T(n) = Theta(n!)
.
Assuming that the print happens exactly n!
times, we get the time complexity as
Theta(n * n!)
long long O(int n)
{
if (n == 0)
return 1;
else
return 2 + n * O(n-1);
}
int main()
{
//do something
O(end - mid);
}
This will calculate complexity of the algorithm.
Actualy O(N) is N!!! = 1 * 3 * 6 * ... * 3N