arrays - 使用此算法在最坏情况下二分查找将进行多少次比较?

标签 arrays algorithm complexity-theory binary-search

您好,下面是我的二进制搜索实现的伪代码:

Input: (A[0...n-1], K)
begin
   l ← 0; r ← n-1
   while l ≤ r do
      m ← floor((l+r)/2)
      if K > A[m] then l ← m+1
      else if K < A[m] then r ← m-1 else return m
      end if 
   end while
   return -1 // key not found
end

我只是想知道如何计算此实现在最坏情况下对大小为 n 的排序数组进行比较的次数?

请问比较次数=lgn+1?还是不同的东西?

最佳答案

在这种情况下最坏的情况是,如果元素 K 不存在于 A 中并且小于 A 中的所有元素。那么我们在每个步骤中进行两次比较:K > A[m]K < A[m] .

因为在每一步中,数组都被分成两部分,每个部分的大小为 (n-1)/2 ,我们最多有 log_2(n-1)步骤。

这导致总共 2*log_2(n-1)比较,渐近地确实等于 O(log(n)) .

关于arrays - 使用此算法在最坏情况下二分查找将进行多少次比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10571170/

相关文章:

java - 将数组从一个类调用到另一个类

algorithm - 随机排序的复杂性

algorithm - 对程序的总复杂度求和时处理常量

JavaScript - 比较两个数组

python - 根据颜色值将多维 Numpy 数组转换为二维数组

image - 编写颜色配置文件以跨多个扫描仪标准化颜色

c# - Dictionary.Add 方法如何进行 O(1) 摊销?

c++ - 我如何有效地遍历多种类型的树?

java - LibGDX 平铺 : Tile map as 2D array

java - 我的转换方法全错了,我不知道如何解决