我如何计算此算法的时间复杂度?外部for循环运行n次。 for循环内部在每次迭代后运行n-1,n-2,n-3,n-4,... n-n次。
/*
* isUniqueBrute - This algorithm uses the brute force approach by comparing each character
* in the string with another. Only a single comparison is made per pair of characters.
*/
bool isUniqueBrute(string str)
{
char buffer;
for (int i = 0; i < str.length(); i++)
{
for (int j = i+1; j < str.length(); j++)
{
if (str[i] == str[j])
return false;
}
}
return true;
}
答案 0 :(得分:2)
您可以通过数学运算来执行计算:
outer loop runs n times: O(n)
inner loop runs n-1, n-2, n-3, ... 0 times.
所以你打破了迭代:
1 + 1 + 1 + 1 + ... n times = outer loop
n-1 + n-2 + n-3 + ... n times = inner loop
重新排列:
1+n-1 = n
1+n-2 = n-1
1+n-3 = n-2
... n times
添加它们,你得到1..n中所有数字的总和。我相信你现在知道这个公式,但是:
n *(n + 1)/ 2
如果扩展它,则包含n²作为主要元素。所以这个函数是 O(n²)。