Python数据结构与算法(18)---检索算法
Posted 李元静
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据结构与算法(18)---检索算法相关的知识,希望对你有一定的参考价值。
检索算法
数据结构的排序算法,到17篇归并排序就彻底讲解完成。从今天开始,我们将进入全新的数据结构知识,它的名字叫查找算法,也叫检索算法。
检索算法又分为排序检索与非排序检索。排序检索顾名思义就是先排序在进行查找,在数据库的查找中,我们往往都是这么做的。当然非排序检索也存在,只不过效率非常低。
检索算法包括线性查找、二分查找、插值查找、斐波拉契查找、分块查找、哈希查找以及回溯查找7个算法。所以,从18到24篇都是检索算法的内容知识。
下面,我们来介绍今天第1个要讲解的查找算法:线性查找。
线性查找
线性查找,又名Linear Search,顾名思义就是一种顺序的查找方算法,也是所有查找算法中最简单的一个算法。
其具体的原理:从第1个元素开始依次查找比较,若查找成功,返回其元素的索引;若查找失败,则返回查询无果。
当然,线性查找即可以从数列左边开始,也可以从数列右边开始。同时,它的原始数据既可以是排序好的列表,也可以是非排序列表。
图解线性查找
还是与前面的排序算法一样,我们也将查找算法用图解的方式给大家一一展示出来,这样更方便初学者的理解与学习,具体原理图解图下:
如上图所示,我们在该列表中查询元素等于3的索引位置。这里,我们从左边i=0开始查找,如果查找成功,则返回对应的索引位置。
实战:线性查找
因为线性查找太过于简单,我们这里实现2中线性查找,一种是从左边开始查找,一种是从右边开始查找。具体示例如下:
# 从左线性查找
def lef_linear_search(my_list, num):
n = len(my_list)
i = 0
while i < n:
if my_list[i] == num:
return i
i += 1
return "None"
# 从右线性查找
def right_linear_search(my_list, num):
n = len(my_list)
i = n - 1
while i >= 0:
if my_list[i] == num:
return i
i -= 1
return "None"
if __name__ == "__main__":
my_list = [8, 0, 4, 3, 2, 1]
print("线性查找的原始数列:", my_list)
print("从左边开始线性查找:", lef_linear_search(my_list, 3))
print("从右边开始线性查找:", lef_linear_search(my_list, 3))
运行之后,效果如下:
以上是关于Python数据结构与算法(18)---检索算法的主要内容,如果未能解决你的问题,请参考以下文章