笨办法学 Python · 续 练习 21:二分搜索

简介: 练习 21:二分搜索 原文:Exercise 21: Binary Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译二分搜索算法是一个简单方法,在已排序的元素列表中查找元素。

练习 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 中实现,但是试一试吧。

相关文章
|
1月前
|
Python
Python:函数篇(每周练习)
Python:函数篇(每周练习)
79 1
|
2月前
|
机器学习/深度学习 人工智能 算法
【Python】编程练习的解密与实战(一)
【Python】编程练习的解密与实战(一)
37 0
|
2天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
21 0
|
24天前
|
数据采集 搜索推荐 数据挖掘
使用Python制作一个批量查询搜索排名的SEO免费工具
最近工作中需要用上 Google SEO(搜索引擎优化),有了解过的朋友们应该都知道SEO必不可少的工作之一就是查询关键词的搜索排名。关键词少的时候可以一个一个去查没什么问题,但是到了后期,一个网站都有几百上千的关键词,你再去一个一个查,至少要花费数小时的时间。 虽然市面上有很多SEO免费或者收费工具,但免费的基本都不能批量查,网上免费的最多也就只能10个10个查询,而且查询速度很慢。收费的工具如Ahrefs、SEMrush等以月为单位收费最低也都要上百美刀/月,当然如果觉得价格合适也可以进行购买,毕竟这些工具的很多功能都很实用。今天我给大家分享的这个排名搜索工具基于python实现,当然肯定
37 0
|
1月前
|
数据采集 存储 搜索推荐
使用Python构建自定义搜索引擎:从数据抓取到索引与搜索
使用Python构建自定义搜索引擎:从数据抓取到索引与搜索
51 0
|
2月前
|
Python
Python猜字游戏是一种常见的编程练习
Python猜字游戏是一种常见的编程练习
24 2
|
2月前
|
JSON API 数据格式
关键词搜索拼多多商品列表数据接口Python
关键词搜索拼多多商品列表数据接口Python
19 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【Python】编程练习的解密与实战(四)
【Python】编程练习的解密与实战(四)
38 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【Python】编程练习的解密与实战(二)
【Python】编程练习的解密与实战(二)
48 0
|
3月前
|
算法 人工智能 缓存
CSDN官方创作助手InsCode AI 教你分分钟搞定一篇好文章
CSDN官方创作助手InsCode AI 教你分分钟搞定一篇好文章
43 0
CSDN官方创作助手InsCode AI 教你分分钟搞定一篇好文章

热门文章

最新文章