Python基础查找算法

简介: Python基础查找算法

一  顺序查找


1 在列表中顺序查找特定的值key,如果找到返回该值在列表中的索引号,如果没有找到返回“不存在”


def sequential_search(lst, key):
    length = len(lst)
    for i in range(length):
        if lst[i] == key:
            return i
    else:
        return "不存在"
def main():
    alist = [5,3,7,2,12,45,16,23]       #测试列表
    print("所要查找的元素的位置是:",sequential_search(alist, 12)) #查找数据12
    print("所要查找的元素的位置是:",sequential_search(alist, 36)) #查找数据36
main()  #调用main函数

运行结果:

image.png



2 在列表中顺序查找最大值和最小值。


def max_min(lst):
    max = min = lst[0]
    for i in range(len(lst)):
        if lst[i] > max:
            max = lst[i]
        if lst[i]< min:
            min = lst[i]
    return (max,min)
def main():
    alist = [5,3,7,2,12,45,16,23]       #测试列表
    print("列表中元素的(最大值,最小值)=",max_min(alist)) #查找列表的最大值最小值
main()

运行结果:

image.png



二  二分查找  


1 针对有序表的二分查找,非递归实现。


def binary_search(lst, key):
    low = 0                    #左边界
    high = len(lst) - 1        #右边界
    time = 0                   #记录查找次数
    while low <= high:           #左边界小于等于右边界,则循环
        time += 1
        mid = (low + high)//2
        if  lst[mid]>key:        #中间位置元素大于要查找的值
            high = mid - 1
        elif lst[mid]<key:
            low = mid + 1
        else:
            print("折半查找的次数: %d" % time)
            print("所要查找的值在列表中的索引号是:", end='')
            return mid
    print("折半查找的次数: %d" % time)
    return '未找到'         #查找不成功,'未找到'
def main():
    alist = [5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92]
    result = binary_search(alist, 13)
    print(result)
main()

运行结果:

image.png



2 针对有序表二分查找,递归实现。


def binary_search(lst, low, high, key):
    mid = int((low + high)/2)
    if high < low:
        return False
    elif lst[mid]==key:
        print("所要查找的值在列表中的索引号是:", end='')
        return mid
    elif lst[mid]> key:
        high = mid - 1
        return binary_search(lst, low, high, key)
    else:
        low = mid + 1
        return binary_search(lst, low, high, key)
if __name__=="__main__" :
    alist = [5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92]
    low = 0
    high = len(alist) - 1
    result = binary_search(alist, 0, high, 21)
    print(result)

运行结果:


image.png


三 插值查找


插值查找是在二分查找的基础上改进,二分查找中分点的计算公式:mid=(low+high)/2,即 mid=low+1/2*(high-low)


插值查找改进为:mid=low+(key-lst[low])/(lst[high]-lst[low])*(high-low)


插值查找代码的实现:


def interpolation_search(lst, low, high, key):
    time = 0   #用来记录查找次数
    while low < high:
        time += 1
        # 计算mid值是插值算法的核心代码
        mid = low + int((high - low) * (key - lst[low])/(lst[high] - lst[low]))
        print("mid={0}, low={1}, high={2}".format(mid, low, high))
        if lst[mid] > key:
            high = mid - 1
        elif lst[mid] < key:
            low = mid + 1
        else:
            print("插值查找%s的次数:%s"%(key, time))  #打印插值查找的次数
            return mid
    print("插值查找%s的次数:%s"%(key, time))
    return False
def main():
    alist = [5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92]
    low = 0
    high = len(alist) - 1
    interpolation_search(alist, low, high, 13)
main()

运行结果:

image.png



四 总结:


这是用python实现基础的查找算法,每个算法的复杂度不同,运行效率也不同,由于时间问题没有仔细给出每个算法的复杂度,如果有兴趣的小伙伴可以去自己试一试每个算法的复杂度。



目录
相关文章
|
2月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
|
2月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
63 1
|
2月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
72 4
|
4月前
|
算法 Python
Apriori算法的Python实例演示
经过运行,你会看到一些集合出现,每个集合的支持度也会给出。这些集合就是你想要的,经常一起被购买的商品组合。不要忘记,`min_support`参数将决定频繁项集的数量和大小,你可以根据自己的需要进行更改。
163 18
|
4月前
|
存储 机器学习/深度学习 算法
论上网限制软件中 Python 动态衰减权重算法于行为管控领域的创新性应用
在网络安全与行为管理的学术语境中,上网限制软件面临着精准识别并管控用户不合规网络请求的复杂任务。传统的基于静态规则库或固定阈值的策略,在实践中暴露出较高的误判率与较差的动态适应性。本研究引入一种基于 “动态衰减权重算法” 的优化策略,融合时间序列分析与权重衰减机制,旨在显著提升上网限制软件的实时决策效能。
127 2
|
5月前
|
算法 数据可视化 Python
Python中利用遗传算法探索迷宫出路
本文探讨了如何利用Python和遗传算法解决迷宫问题。迷宫建模通过二维数组实现,0表示通路,1为墙壁,&#39;S&#39;和&#39;E&#39;分别代表起点与终点。遗传算法的核心包括个体编码(路径方向序列)、适应度函数(评估路径有效性)、选择、交叉和变异操作。通过迭代优化,算法逐步生成更优路径,最终找到从起点到终点的最佳解决方案。文末还展示了结果可视化方法及遗传算法的应用前景。
149 5
|
5月前
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
146 7
|
5月前
|
存储 监控 算法
员工电脑监控场景下 Python 红黑树算法的深度解析
在当代企业管理范式中,员工电脑监控业已成为一种广泛采用的策略性手段,其核心目标在于维护企业信息安全、提升工作效能并确保合规性。借助对员工电脑操作的实时监测机制,企业能够敏锐洞察潜在风险,诸如数据泄露、恶意软件侵袭等威胁。而员工电脑监控系统的高效运作,高度依赖于底层的数据结构与算法架构。本文旨在深入探究红黑树(Red - Black Tree)这一数据结构在员工电脑监控领域的应用,并通过 Python 代码实例详尽阐释其实现机制。
109 7
|
5月前
|
运维 监控 算法
基于 Python 迪杰斯特拉算法的局域网计算机监控技术探究
信息技术高速演进的当下,局域网计算机监控对于保障企业网络安全、优化资源配置以及提升整体运行效能具有关键意义。通过实时监测网络状态、追踪计算机活动,企业得以及时察觉潜在风险并采取相应举措。在这一复杂的监控体系背后,数据结构与算法发挥着不可或缺的作用。本文将聚焦于迪杰斯特拉(Dijkstra)算法,深入探究其在局域网计算机监控中的应用,并借助 Python 代码示例予以详细阐释。
124 6

热门文章

最新文章

推荐镜像

更多