if语句的Big-O表示法?

时间:2013-10-02 16:24:41

标签: java complexity-theory conditional-statements big-o

我想知道这个大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;

1 个答案:

答案 0 :(得分:0)

字符串比较需要的时间与两个字符串中较长字符串的长度成比例(在最坏的情况下,您只需要比较字符直到该点)。由于此处所做的所有字符串比较都是针对常量字符串的,因此每次比较都需要时间O(1)。由于只有固定数量的比较,如果为真,每个都进行O(1)工作(数组访问需要时间O(1)而不管索引如何),所有比较所需的总时间为每次迭代O(1) 。因此,完成的工作总量是O(n):有O(n)循环迭代,并且每个循环迭代都进行O(1)工作。

(从技术上讲,你需要考虑从用户那里读取字符的工作,这可能是无限制的,因为用户可以无限期地按住一个键。我现在将忽略它,假设有一个固定的限制用户在每次提示时可以输入的字符总数。)

一般来说,比较本身需要O(1)时间,真正的问题是评估布尔表达式需要多少工作。

希望这有帮助!