我写了一个示例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);
}
答案 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)