这个算法的时间复杂度是多少?计算角色的唯一性

时间:2017-02-11 19:51:49

标签: algorithm

我如何计算此算法的时间复杂度?外部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;
}

1 个答案:

答案 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

如果扩展它,则包含作为主要元素。所以这个函数是 O(n²)。