📜  DAA-二进制搜索

📅  最后修改于: 2021-01-12 03:32:14             🧑  作者: Mango


在本章中,我们将讨论另一种基于分而治之的算法。

问题陈述

二进制搜索可以在排序的数组上执行。在这种方法中,确定元素x的索引是否该元素属于元素列表。如果数组未排序,则使用线性搜索来确定位置。

在此算法中,我们要查找元素x是否属于存储在数组number []中的一组数字。其中, lr表示应在其中执行搜索操作的子数组的左右索引。

Algorithm: Binary-Search(numbers[], x, l, r)
if l = r then  
   return l  
else 
   m := ⌊(l + r) / 2⌋ 
   if x ≤ numbers[m]  then 
      return Binary-Search(numbers[], x, l, m) 
   else 
      return Binary-Search(numbers[], x, m+1, r) 

分析

线性搜索以O(n)时间运行。二进制搜索以O(log n)时间生成结果

T(n)n个元素数组中最坏情况下的比较次数。

因此,

$$ T(n)= \ begin {cases} 0&if \:n = 1 \\ T(\ frac {n} {2})+ 1&else \ end {cases} $$

使用此递归关系$ T(n)= log \:n $。

因此,二进制搜索使用$ O(log \:n)$时间。

在此示例中,我们将搜索元素63。

二元搜寻