如何找到程序的复杂性来查找最大子字符串的长度?

时间:2013-06-09 10:24:21

标签: algorithm time-complexity

我写了一个示例javascript程序来查找给定字符串的最大子字符串的长度,它可以工作。我无法计算其时间复杂度。有人能帮我吗? 我知道有两个循环的程序是二次复杂度,三个循环具有立方复杂性,依此类推。这总是如此吗? 这个程序有两个循环。我可以说它的复杂性是O(n ^ 2)吗?

function AllSubStrings()
{
    var myString = prompt("Enter the string");
    var arr = myString.split("");
    var tempArr = [];
    var maxLength = 0;

    for(var i = 0; i<arr.length; i++)
    {
        temp = null;

        for(var j = i; j<arr.length; j++)
        {
            if(j === i)
            {
                tempArr.push(arr[j])
                temp = arr[j];
            }
            else
            {
                temp = temp + arr[j];
                if(temp.length > maxLength)
                {
                    maxLength = temp.length;
                }
                tempArr.push(temp);
            }
        }
    }
    document.write("All SubStrings are: "+tempArr+"<br/>");
    document.write("Length of the largest substring is: "+maxLength);
}

3 个答案:

答案 0 :(得分:1)

你有两个n阶的嵌套循环(其中n是字符串的长度),所以O(n * n)= O(n 2 )。

还有一些其他操作在计算大O时并不重要,例如Split,取O(n),但与O(n 2 )相比并不重要,或者推送和弹出, ...在每个for循环中需要O(1),但如果我们有多个O(1)操作则不重要。

详细说明:我们知道第一个循环运行n次,但是关于第二个循环,它将运行O(ni)时间,因此总运行时间为:

Σ(n-i)=Σn - Σi= n 2 - n(n-1)/ 2 = O(n ^ 2)。

答案 1 :(得分:1)

由于你有两个N阶循环,复杂度为O(N2)。

答案 2 :(得分:0)

简单回答:由于您有两个嵌套循环,每个循环按n的顺序运行,因此总运行时间为O(n * n)。

稍微详细一点:第一个循环从0到n-1,第二个循环从i到n-1。 因此对于每个i内部循环运行n + n-1 + n-2 + ... 1 = n *(n + 1)/ 2 = O(n * n)