美文网首页二叉树之下
Binary Search - 二分查找

Binary Search - 二分查找

作者: 捡个七 | 来源:发表于2018-08-07 22:40 被阅读21次

    之前趁当当网大折扣的时候,和朋友一起凑数,买了一本《grokking algorithms》。最近有空翻开,发现里面的讲解深入显出,很适合算法小白。而且书中配合着漫画一起讲解很是有趣。在这里记录学习这本算法书的一些笔记。

    算法是一组完成任务的指令。任何代码片段都可以视为算法。--《grokking algorithms》

    算法说明

    二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回 null 。

    拿一个具体的例子来说明,比如要猜测 1-100 中的一个数字。

    • 第一种方法:
      从 1 开始按顺序猜,对方会给与“大了”或者“小了”的回答。猜“1”,“小了”;接着猜“2”,“小了”;...... 直到猜到对的数为止。这种方法称为简单查找。更确切的说法是“傻找”。因为如果正确数字为 99 的话总共要猜测 99 次才能正确。
    • 第二种方法:
      每次都从中间的数开始猜测。第一次猜“50”,“小了”。这样会排出掉 1-50 的数,即排除了一半的数。再接着猜“75”,“大了”,这样又会排除掉一半的数字。如此猜测,最终会快速的猜测出正确答案。这种方法就是二分查找。猜 1- 100 中的一个数字最多需要 7 步,即要猜中正确数字的话,在 7 次之内都能猜到。
      一般而言,对于包含 n 个元素的列表,用二分查找最多需要 log2n 步。

    Python 代码实现

    def binary_search(list, item):
        
        low = 0 
        high = len(list) - 1
        
        while low <= high :
            mid = (low + high) % 2 
            guess = list[mid]
            
            if guess == item:
                return mid
            if guess > item:
                high = mid - 1 
            else:
                low = mid + 1 
        
        return None 
    
    -------------------------------------------------------
    >>> num_list = [1, 3, 5, 7, 9]
    >>> binary_search(num_list, 3)
    1
    

    相关文章

      网友评论

        本文标题:Binary Search - 二分查找

        本文链接:https://www.haomeiwen.com/subject/tfszvftx.html