概述
文章目录
- 顺序查找
- 1. 无序表的顺序查找
- python代码实现
- 算法分析
- 2. 有序表的顺序查找
- python代码实现
- 算法分析
顺序查找
如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系。
在Python List中,这些数据项的存储位置称为下标(index),这些下标都是有序的整数,从零开始,到n-1结束(n为数据项的数量)。
通过下标,我们就可以按照顺序来访问和查找数据项,这种技术称为“顺序查找”。
1. 无序表的顺序查找
对于无序表的查找,首先从列表的第1个数据项开始,按照下标增长的顺序,逐个比对数据项,如果到最后一个都未发现要查找的项,那么查找失败。
python代码实现
def sequential_search(a_list, item):
"""
无序表的顺序查找
:param a_list: 被查找列表
:param item: 目标元素
:returns: 元素是否在列表中被找到
"""
# 从列表中一个个取出元素进行比较
for i in a_list:
# 找到值相同的元素,说明查找成功
if i == item:
return True
# 所有元素都取完还未找到,说明查找失败
return False
算法分析
在查找算法中,基本计算步骤就是进行数据项的比对,对比的次数决定了算法复杂度。
无序表中的数据项并没有按值排列顺序,而是随机放置在列表中的
各个位置。换句话说,数据项在列表中各处出现的概率是相同的:
- 最好的情况下,目标元素被放在列表的第一个位置,第1次比对就找到。
- 最坏的情况下,目标元素被放在列表末尾或者根本不在列表中,那就需要n次比对。
- 因为数据项在列表中各个位置出现的概率是相同的。所以平均状况下,比对的次数是n/2。
情况 | 最好情况 | 最坏情况 | 平均情况 |
---|---|---|---|
元素存在 | 1 | n | n/2 |
元素不存咋在 | 1 | n | n/2 |
所以,顺序查找的算法复杂度是 O ( n ) O(n) O(n)。
2. 有序表的顺序查找
当数据项存在时,比对过程与无序表完全相同不同之处在于,如果数据项不存在,比对可以提前结束。
比如,列表从小到大排列,我们要查找31,当我们查找到32(或者更大的数字)的时候还没有找到,那么就没有必要再去后面查找了。
python代码实现
我们以从小到大排序的列表为例。
def ordered_sequential_search(a_list, item):
"""
有序表的顺序查找
:param a_list: 被查找列表
:param item: 目标元素
:returns: 元素是否在列表中被找到
"""
for i in a_list:
# 对比当前元素是否已经大于目标元素,如果是则提前返回
if i > item:
return False
if i == item:
return True
return False
算法分析
无序表的顺序查找和有序表的顺序查找基本相同。只是在数据项不存在的时候,有序表的查找能节省一些比对次数,但并不改变其数量级。
情况 | 最好情况 | 最坏情况 | 平均情况 |
---|---|---|---|
元素存在 | 1 | n | n/2 |
元素不存在 | 1 | n | n/2 |
所以算法复杂度仍然是 O ( n ) O(n) O(n)。
最后
以上就是精明老鼠为你收集整理的数据结构与算法——10. 顺序查找顺序查找的全部内容,希望文章能够帮你解决数据结构与算法——10. 顺序查找顺序查找所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复