大O符号的if语句?

问题描述 投票:0回答:1

我想知道大O记法,这将是什么。我知道for循环为O(n)。我不知道,如果if语句是为O(n log n)的。如果是这样,不使运行时间复杂度(N)*((N log n)的^ 3)。还是会成为((N ^ 2)(登录^ 3N))?还知道存储在阵列中是O(n),并想知道如果呼叫在相同的数组是O元素(n)或具有不同的运行添复杂性。 (在Java中日食书面)

    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;
java complexity-theory conditional-statements big-o
1个回答
1
投票

字符串比较需要时间成正比的两个字符串的长度越长(你只需要字符最多比较在最坏的情况下这一点)。由于所有正在这里所作的字符串比较的反对恒定字符串,每个比较单独需要时间O(1)。因为这里只有固定数量的比较,其中的每一个确实O(1)的工作,如果真(数组访问需要时间O(1),而不管指数),对所有的比较所需的总时间是每次迭代O(1) 。因此完成工作的总量为O(n):有O(n)的循环迭代,并且它们中的每确实O(1)的工作。

(从技术上讲,你需要考虑完成从用户读取字符的工作,这可能是无界的,因为用户可能只需按住一个键下去。我会忽略,现在假设有一个固定的限制总数字符的用户可以在每个提示类型。)

在一般情况下,比较自己取O(1)时间,真正的问题是有多少工作需要评估布尔表达式。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.