【第一天】算法图解 之 二分查找

持续更新算法图解笔记内容!

·算法图解阅读笔记之二分查找

1.二分查找是一种算法,其输入是一个有序的元素列表

2.对于包含n个元素的列表,用二分查找最多需要logn步,而简单查找最多需要n步

3.代码示例

def binary_search(list, item):
    low = 0                        # low 和 high 用于跟踪要在其中查找的列表部分
    high = len(list)-1
    while low <= high:                # 只要范围没有缩小到只包含一个元素
        mid = (low + high)         # 就检查中间的元素
        guess = list[mid]
        if guess == item:             # 找到了元素
            return mid
        elif guess > item:         #猜的数字大了
            high = mid - 1
        else:                         # 猜的数字小了
            low = mid + 1
    return None                    # 没有指定的元素

测试:

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

运行结果:

1              # 返回索引,索引从0开始,第二个位置索引为 1
None       # None表示空,表示没有找到指定元素

4.练习

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

logn = 128    n = 7     7步

②列表长度翻倍后,最多需要几步才能找到?

logn = 128 * 2    n = 8     8步

5.运行时间

简单查找:最多需要猜测的次数与列表长度相同,这被称为线性时间

二分查找:运行时间为对数时间(或log时间)

6.大O表示法

大O表示法是一种特殊的表示法,指出了算法的速度有多快,仅知道算法需要多长时间才能运行完毕还不够,而需知道运行时间如何随列表增长而增加

大O表示法指出了算法有多快,它指的并非以秒为单位的速度,大O表示法让你能够比较操作数,它指出了算法运行时间的增速

* 例如:检查长度为n的列表,二分查找需要执行logn次操作,用大O表示法表示:O(logn)

基本形式: O(n)   指出了算法需要执行的操作数

7.常见的大O运行时间(从快到慢)

① O(logn)          对数时间,包括二分查找

② O(n)               线性时间,包括简单查找

③ O(n*logn)       快速排序 —— 一种速度较快的排序算法

④ O(n^2)            选择排序 —— 一种速度较慢的排序算法

⑤ O(n!)       旅行商问题的解决方案 —— 一种非常慢的算法

 8.注意

①算法的速度指的并非时间,而是操作数的增速

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

③算法的运行时间用大O表示法表示

④O(logn)比O(n)快,当需要搜索到元素越多时,前者比后者快的越多

⑤大O表示法说的是最糟的情形,简单查找的运行时间不可能超过O(n),除最糟情况下的运行时间外,还应考虑平均情况的运行时间,这很重要

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Outlier_9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值