我想知道这个大O符号会是什么。我知道for循环是O(n)。我不确定if语句是否为O(n log n)。如果是这样,那不会使运行时复杂度(n)*((n log n)^ 3)。或者是((n ^ 2)(log ^ 3n))?另外我知道数组中的存储是O(n),并且想知道同一数组中的调用元素是否为O(n)或者具有不同的运行时复杂度。 (用Java eclipse编写)
for (i=0;i<numberOfProblems;i++){
String string1= ap.nextString("P or NP?");
if(string1=P){
pOrNPValue[i]=0;
}else{
pOrNPValue[i]=1;
String string2 = ap.nextString("Best Case Run Time?");
if(string2==ok){
bestCaseValue[i]=0;
}else if(string2=oLogLogN){
bestCaseValue[i]=1;
} else if(string2=oLogN){
bestCaseValue[i]=2;
}else if(string2=oNC){
bestCaseValue[i]=3;
}else if(string2=oN){
bestCaseValue[i]=4;
}else if(string2=oNLogStarN){
bestCaseValue[i]=5;
}else if(string2=oNLogN){
bestCaseValue[i]=6;
}else if(string2=oNK){
bestCaseValue[i]=7;
}else if(string2=oCN){
bestCaseValue[i]=8;
}else if(string2=oNFactorial){
bestCaseValue[i]=9;
}
String string3 = ap.nextString("Average Case Run Time?");
if(string3=ok){
averageCaseValue[i]=0;
}else if(string3=oLogLogN){
averageCaseValue[i]=1;
} else if(string3=oLogN){
averageCaseValue[i]=2;
}else if(string3=oNC){
averageCaseValue[i]=3;
}else if(string3=oN){
averageCaseValue[i]=4;
}else if(string3=oNLogStarN){
averageCaseValue[i]=5;
}else if(string3=oLogLogN){
averageCaseValue[i]=6;
}else if(string3=oNK){
averageCaseValue[i]=7;
}else if(string3=oCN){
averageCaseValue[i]=8;
}else if(string3=oNFactorial){
averageCaseValue[i]=9;
}
String string4 = ap.nextString("Worst Case Run Time?");
if(string4=ok){
worstCaseValue[i]=0;
}else if(string4=oLogLogN){
worstCaseValue[i]=1;
} else if(string4=oLogN){
worstCaseValue[i]=2;
}else if(string4=oNC){
worstCaseValue[i]=3;
}else if(string4=oN){
worstCaseValue[i]=4;
}else if(string3=oNLogStarN){
worstCaseValue[i]=5;
}else if(string4=oLogLogN){
worstCaseValue[i]=6;
}else if(string4=oNK){
worstCaseValue[i]=7;
}else if(string4=oCN){
worstCaseValue[i]=8;
}else if(string4=oNFactorial){
worstCaseValue[i]=9;
答案 0 :(得分:0)
字符串比较需要的时间与两个字符串中较长字符串的长度成比例(在最坏的情况下,您只需要比较字符直到该点)。由于此处所做的所有字符串比较都是针对常量字符串的,因此每次比较都需要时间O(1)。由于只有固定数量的比较,如果为真,每个都进行O(1)工作(数组访问需要时间O(1)而不管索引如何),所有比较所需的总时间为每次迭代O(1) 。因此,完成的工作总量是O(n):有O(n)循环迭代,并且每个循环迭代都进行O(1)工作。
(从技术上讲,你需要考虑从用户那里读取字符的工作,这可能是无限制的,因为用户可以无限期地按住一个键。我现在将忽略它,假设有一个固定的限制用户在每次提示时可以输入的字符总数。)
一般来说,比较本身需要O(1)时间,真正的问题是评估布尔表达式需要多少工作。
希望这有帮助!