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)---检索算法的主要内容,如果未能解决你的问题,请参考以下文章

python数据结构与算法(18)

《Python自然语言处理实战:核心技术与算法》PDF新书推介,附带链接地址

数据库中的数据结构与算法,如何实现高效的检索能力

预告:大数据与机器学习入门之四:聚类算法第三讲 (10月30日18:00周二B1熊猫馆)

《数据结构与算法之美》18——哈希算法分布式应用

Python3.8+Qt5.0感知哈希算法实现图像检索系统