浅谈算法-二分查找

Posted 面向奶酪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈算法-二分查找相关的知识,希望对你有一定的参考价值。


浅谈算法-二分查找

先简单说明一下二分查找的工作原理。

举个栗子,猜中一个1到100之间的数字,你的目标是以最少的次数猜中这个数字

如果你从1开始依次猜测,1...2...3...4...7,这种称为简单查找。每次猜测只能排除掉一个数字。

如果数字是99,你得猜99次才能猜到!

最佳得查找方式

还是从上面的例子开始,1到100之间的数字。从50开始!

浅谈算法-二分查找


小了,但排除了一般的数字!至此,你知道1~50都小了。接下来,你猜75

浅谈算法-二分查找


又排除了一般的,美滋滋!使用二分查找时,你猜测的是中间的数字,每次都将余下的数字排除一半。接下来你猜63(50和75中间的数字)。


                   


每次猜测排除的数字如下

100→50→25→13→7→4→2→1  使用二分查找时,每次都会排除一般的数字

一般而言,对于包含n个元素的列表,使用二分查找最多需要log2N,而简单查找需要n步。

代码如下:

def binary_search(list,item):
  low = 0                            
  high= len(list)-1          
  while low <=high:          
     mid = (low+high)        
     guess = list[mid]  
     if guess == item:
         return mid
     if guess > item:
         high = mid-1
     else:
         low = mid +1
  return None

my_list = [1,3,5,7,9]
print(binary_search(my_list,7))


练习:

假设有一个包含128个名字的有序列表,你要使用二分查找在其中查找一个名字,请问最多需要几步才能找到?





以上是关于浅谈算法-二分查找的主要内容,如果未能解决你的问题,请参考以下文章

浅谈二分查找

浅谈二分

浅谈二分

技术15期:浅谈Hbase中的数据结构和算法

浅谈二分和二分答案

PHP实现二分查找算法(代码详解)