zoukankan      html  css  js  c++  java
  • 二分搜索查找

    一、对数

      

    二、代码

      

     1 def binary_search(lists, item):
     2     # low和high用于跟踪要在其中查找的列表的部分
     3     low = 0
     4     high = len(lists)-1
     5 
     6     while low <= high:  # 只要范围没有缩小到只包含一个元素
     7         mid = (low + high)/2 #就检查中间的元素
     8 
     9         guess = lists[mid]
    10         if guess == item: #找到元素
    11             return mid
    12         if guess > item: # 猜的数字大了
    13             high = mid-1
    14         else:            # 差的数字小了
    15             low = mid+1
    16     #  没有指定的元素
    17     return None
    18 
    19 my_list = [1, 3, 5, 7, 9]
    20 print(len(my_list))
    21 print (binary_search(my_list, 3))
    22 print (binary_search(my_list, -1))

    三、运行时间

      如果列表包含100个元素,最多要猜7次;

      如果列表包含40亿个数字,最多需猜32次。二分查找的运行时间为对数时间(或log时间)

      

      

    四、大O表示法

      大O表示法是一种特殊的表示法,指出了算法的速度有多快。

      大O表示法指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为O(n)。

      单位秒呢?没有——大O表示法指的并非以秒为单位的速度。

      大O表示法让你能够比较操作数,它指出了算法运行时间的增速

      下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。

      1、O(log n),也叫对数时间,这样的算法包括二分查找。
      2、O(n),也叫线性时间,这样的算法包括简单查找。
      3、O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
      4、O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
      5、O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。

    说明

      1、仅当列表是有序的时候,二分查找才管用。

      2、谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。

      3、算法的运行时间用大O表示法表示。

      4、O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多。

      5、算法运行时间并不以秒为单位。

      参考书籍:算法图解

  • 相关阅读:
    在 Anaconda下解决国内安装tensorflow等下载慢和中断,出错,异常问题的一点思路
    关于指针和结构体的一点教训
    ARM cortexM4中断优先级的一点理解。
    ubuntu16下的/etc/resolv.conf重置的解决方案
    linux安装dpkg安装缺少依赖项的解决
    莲藕的简单凉菜制作总结
    单片机一种简便的printf调试方案。
    usart下位机输出使用printf的格式化技巧
    关于xp操作系统下使用VC6++编写的上位机软件在win10中运行的问题
    百度面试两板斧:手写算法问基础
  • 原文地址:https://www.cnblogs.com/hyunbar/p/10267339.html
Copyright © 2011-2022 走看看