一尘不染

使用这种算法,在最坏的情况下二进制搜索会进行多少次比较?

algorithm

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

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的排序数组的最坏情况下进行的比较次数?

比较次数是否等于lg n + 1?还是不同的?


阅读 406

收藏
2020-07-28

共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))

2020-07-28