比較のバイナリサーチの実行時間

LIOR:

私はこのコードを持っています:

public static int compare(String s1, String s2) {
    int n = Math.min(s1.length(), s2.length());
    for (int i = 0; i < n; i++) {
        char c1 = s1.charAt(i);
        char c2 = s2.charAt(i);
        int diff = c1 - c2;
        if (diff != 0) {
            return diff; 
        }
    }
    return s1.length() - s2.length();
}

public static boolean exists(String word, String[] dict) {
    int left = 0;
    int right = dict.length-1;
    while (left <= right) {
        int middle = (left + right) / 2;
        int comparison = compare(dict[middle], word); 
        if (comparison < 0) {
            left = middle+1;
        } 
        else if (comparison > 0) {
            right = middle-1;
        } else {
            return true;
        } 
    }
    return false; 
}

私は存在している機能の複雑さを計算する必要があります。
I Nは、アレイ内の要素の数であり、Kは、単語内の文字の数でありながら、それは、O(K * logN個)だと述べました。
答えはO(logN個)で、それは私が含まれるようになっていませんでした意味はcompare、私の計算では、関数の複雑さを?

コーダ:

あなたのアルゴリズムが実行されるO(logn)場所回n = dict.lengthとすべての反復のためにそれが必要とするO(K)ところKである最大(*)の単語の長さ。したがって乗法原則(または使用した製品のルールを、自分のアルゴリズムが必要でO(K*logn)、時間の複雑さを。

(*)上記私はあなたの関数内であなたがmath.minを使用していますが、二番目に大きいとの最大の単語を比較し、両方がある場合を考えていても最大の長さを述べたO(K)ことがありますので、最悪のシナリオでは、長さのO(maximum length)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=16887&siteId=1