【问题标题】:Time Complexity of this algorithm? [closed]这个算法的时间复杂度? [关闭]
【发布时间】:2013-09-12 12:37:22
【问题描述】:

需要帮助确定使用 Big-O 表示法的该算法的时间复杂度。干杯。

int binarySearch(int[] array, int key) {
    int lo = 0, mid, hi = array.length-1;
    while (lo <= hi) {
        mid = (lo + hi)/2;
        if (key < array[mid])
            hi = mid - 1;
        else if (array[mid] < key)
            lo = mid + 1;
        else return mid; // success
    }
    return -1; // failure
}

【问题讨论】:

  • 没有展示任何尝试解决方案的努力。

标签: search time binary big-o time-complexity


【解决方案1】:

如果将数组中的元素数量加倍,则预期的步数会增加 1。因此它是 O(log(N));其中 log 以 2 为底。

【讨论】:

  • 嘿,我知道它的 O(log(n)...我想知道为什么...
  • @subzerok;你的意思是我的回答不足以解释?
【解决方案2】:

如果您没有找到您搜索的内容,则每次您搜索的范围都会缩小两倍。例如,64 -> 32 -> 16 等。也就是说,您最多需要迭代 lb(n)。因此,运行时间为 O(lb(n)),其中 lb(n) 是 n 以 2 为底的对数。

【讨论】:

  • 嘿,我知道它的 O(log(n)...我想知道为什么...
  • 不是一个真正的解释:(
猜你喜欢
  • 2019-03-21
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多