笨办法学 Python · 续 练习 21:二分搜索
练习 21:二分搜索
原文:Exercise 21: Binary Search
译者:飞龙
协议:CC BY-NC-SA 4.0
自豪地采用谷歌翻译
二分搜索算法是一个简单方法,在已排序的元素列表中查找元素。它很容易描述为接受排序列表,并将其分成两半,直到找到它或遍历完。如果你完成了练习 20,那么这个练习应该比较容易。
如果我们想在已排序的数值列表中找到数字X
,我们将这样做:
- 获取列表中间的数字(
M
)并将其与X
进行比较。 - 如果
X == M
,你就完成了。 - 如果
X > M
,则在M + 1
到列表末尾的区间内寻找。 - 如果
X < M
,则在列表开头到M - 1
的区间内寻找。 - 重复它,直到找到
X
或者区间为空。
这适用于任何可以比较相等性的东西。它适用于字符串,数字和任何你可以排序的东西。
挑战练习
你的BSTree应该已经有了一个get
操作,类似于二分搜索。不同的是BSTree
已经分块了,所以没有必要再这么做了。在本练习中,你将为DoubleLinkedList
和Python list
实现二分搜索,并将其与BSTree.get
的性能进行比较。你的目标是学习以下内容:
- 对于简单的寻找元素,
BSTree
与 Python 的list
相遇效果如何? DoubleLinkedList
的二分搜索有多糟糕?BSTree
的病态情况是否也会对list
的二分搜索造成问题?
分析性能时,请不要包含排序数字所需的时间。这在进行全局优化时很重要,但在这种情况下,你只需要关心二分搜索的工作速度。你也可以使用 Python 内置列表的排序算法对list
进行排序,因为这不是重点。这个练习完全关于,三种数据结构之间的搜索速度有多快。
研究性学习
- 找出该算法需要执行的,最大的可能的比较数量。首先尝试自己弄清楚,然后研究算法来找出真正的答案。之后记住真正的答案。
- 这里的任何优化可以应用于排序算法吗?
- 尝试在每个数据结构中,可视化该算法正在做什么。例如,在
DoubleLinkedList
中,你几乎可以将其视为来回遍历,直到找到结果。 - 为了给自己一个额外的挑战,尝试使
DoubleLinkedList
成为一个有序的链表,其中每次插入始终在排序后的位置。现在编写你的性能分析,包括添加元素和排序数字列表,来了解如何提高总体性能。
深入学习
研究其他搜索算法,特别是字符串。因为 Python 的字符串的实现方式,其中许多将很难在 Python 中实现,但是试一试吧。
笨办法学 Python · 续 练习 21:二分搜索相关推荐
- 笨办法学 Python · 续 中文版
笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...
- 笨办法学 Python · 续 练习 33:解析器
练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...
- 笨办法学 Python · 续 练习 0:起步
练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...
- 笨办法学 Python · 续 第二部分:简单的黑魔法
第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...
- 笨办法学 Python · 续 练习 52:`moreweb`
练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...
- 笨办法学 Python · 续 练习 24:URL 快速路由
练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...
- 笨办法学 Python · 续 练习 32:扫描器
练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...
- 笨办法学 Python · 续 练习 22:后缀数组
练习 22:后缀数组 原文:Exercise 22: Suffix Arrays 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我想告诉你一个关于后缀数组的故事.在一段时间里, ...
- python描述器 有限状态机_笨办法学 Python · 续 练习 30:有限状态机
练习 30:有限状态机 每当你阅读一本关于解析的书,都有一个可怕的章节,关于有限状态机(FSM).他们对"边"和"节点"进行了详细的分析,每个可能的" ...
最新文章
- mysql中有哪些数值型函数_mysql数值型函数汇总
- 经典C语言程序100例之六零
- 上拉加载_如何用Vue + Mint UI实现上拉加载更多
- python prettytable格式设置_Python prettytable模
- 【转】网站ICP备案和公安备案流程
- 主动降噪ANC(Active Noise Control)
- 使用阿里云对象存储OSS搭建网盘
- 如何在 Python 中使用 Plotly 创建太阳系的 3D 模型 (教程含源码)
- 【FreeSwitch开发实践】freeswitch配置wss证书问题 Encrypted Alert/Certification Unknown
- Cent OS7基础 第五节
- Java项目:毕业设计管理系统(java+SSM+jsp+mysql+maven)
- 计算机网络连接显示678是什么意思,WinXP宽带连接提示错误代码678怎么办?
- JVM参数-XX:+HeapDumpOnOutOfMemoryError使用方法
- Linux环境打包Qt程序并部署到Docker容器
- 安防百科-单了解ONVIF 协议
- jQuery插件综合应用(四)头像设置
- 二维数组求周长的问题
- u盘锁计算机,简单几步将U盘打造成电脑登录“密码锁”,不插入就别打开!
- SQL server 数据库多列分组查询
- Aqwa 带你掌握船舶与海洋工程水动力理论与工程应用