使用平方修改二进制搜索

时间:2015-10-03 16:26:55

标签: algorithm time-complexity complexity-theory binary-search

我试图用平方来做二进制搜索的修改版本。我已经完成了代码,它完美无缺。这里我使用2的平方来找到键变得小于arr [mid]的位置。当这变为真时,我从旧的mid(存储在lo中)到当前的mid中线性平方以搜索键。

我知道第一部分是O(logN),因为我使用正方形找到mid,但我不确定整个算法是否是OlogN),有人可以帮忙解决这个问题。线性扫描显然不是O(N),因为它在最坏的情况下仅覆盖介于2 ^ k到2 ^ k + 1之间的范围。 我如何计算其大O复杂度。

以下是代码:

public int search(int key, int arr[]) {
    int lo = 0, mid = 1;
    while (mid < arr.length) {
        if (key < arr[mid]) {
            break;
        } else if (key > arr[mid]) {
            lo = mid + 1;
        } else if (key == arr[mid]) {
            return mid;
        }
        mid *= 2;
    }

    while (lo < arr.length && lo < mid) {
        if (key == arr[lo])
            return lo;
        lo++;
    }
    return -1;
}

如果我使用斐波那契数字,逻辑是否正确?由于没有平方成分。

0 个答案:

没有答案