首页 > 编程语言 >Python中的搜索算法。 #Python 系列 - 9

Python中的搜索算法。 #Python 系列 - 9

时间:2022-08-31 09:13:12浏览次数:88  
标签:系列 Python 元素 list 搜索算法 列表 索引 搜索 my

Python中的搜索算法。 #Python 系列 - 9

所以 到目前为止,我们已经学习了python的基础知识。但是,我们从未见过这些基本原理的应用。在本文中,我们将看到两种处理在列表中搜索数字的简单算法。如果您是算法的初学者和新手,那么开始使用算法可能会非常棘手,本文将为您减轻负担。让我们开始吧。

在搜索算法方面,有两种算法在编码社区中非常有名(即线性搜索和二进制搜索)。

线性搜索

根据维基百科,线性搜索的定义是“ 线性搜索 或者 顺序搜索 是一种在列表中查找元素的方法。它会依次检查列表中的每个元素,直到找到匹配项或搜索到整个列表。”

简而言之,从列表(Index-0)开始,逐个搜索,直到找到要搜索的元素。比如我需要在列表[7,2,0,7,2,3,5,9,5]中找到3

List-1

我们从索引 0 开始,

是 3 存在于索引 0 → 否,

是 3 存在于索引 1 → 否,

是 3 存在于索引 2 → 否,

是 3 存在于索引 3 → 否,

是 3 存在于索引 4 → 否,

在 index-5 中是 3 → 是的。 停止返回索引号,即 5

在最坏的情况下,您需要查找的号码可能不在列表中。当您到达列表末尾时,只需返回 -1。

让我们在 python 代码中尝试同样的方法。

 def binary_searching(my_list, element):  
 我 = 0  
 当我 < len(my_list):  
 如果 my_list[i] == 元素:  
 返回我  
 我 = 我 + 1  
 别的:  
 返回 -1  
  
  
 如果 __name__ == "__main__":  
 my_list = [7, 2, 0, 7, 2, 3, 5, 9, 5]  
 元素 = 3  
 idx = binary_searching(my_list,元素)  
 打印(idx)

线性搜索的时间复杂度是 上) 因为它在最坏的情况下会遍历整个列表。

相同的空间复杂度是 O(1) 因为除了输入列表之外它不占用任何空间。

二进制搜索

与线性搜索相比,二分搜索高效且快速,但主要缺点是为了执行二分搜索,我们需要对列表进行排序。

二进制搜索工作在两个指针方法中,我们需要两个指针在列表的两个极端索引上说 开始结尾 .

根据 start 和 end,我们找到 mid =(start + end) / 2。现在,我们将 mid 索引值与要查找的元素进行比较。

情况1: 如果中间索引中的值等于元素,那么我们只返回中间索引。

案例2: 如果 mid Index 中的值大于 element,则调整 结束 = 中 - 1 .原因是如果中间索引中的值大于元素,那么从中间索引到结束索引的所有值都大于我们正在搜索的元素。所以,我们可以忽略这些指标。

案例3: 如果 mid Index 的值小于 element,即使这样我们也需要调整 开始 = 中间 + 1 .原因显而易见。如果中间索引中的值较小,则中间索引以下的所有值也较小。

我们将继续此操作,直到起始值小于结束值。如果它们相互交叉,那么我们退出循环,然后通过返回 -1 说没有找到我们正在搜索的元素。

用于二进制搜索的 Python 代码

 def binary_searching(my_list, element):  
 开始 = 0  
 结束 = len(my_list) - 1  
 而开始<=结束:  
 mid = (start + end) // 2 # 整数除法  
 如果 my_list[mid] < 元素:  
 开始 = 中间 + 1  
 elif my_list[mid] > 元素:  
 结束 = 中 - 1  
 别的:  
 return mid # my_list[mid] == 元素  
 别的:  
 返回 -1  
  
  
 如果 __name__ == "__main__":  
 my_list = [1, 4, 6, 8, 9, 10, 14, 17, 18]  
 元素 = 19  
 ans = binary_searching(my_list,元素)  
 打印(回答)

二分搜索的时间复杂度是 O(登录) 对于列表中的 100 个元素,我们在循环中仅迭代 6-8 个项目。这些时间复杂度有数学推导,我们将在以后的文章中介绍。

空间复杂度为 O(1),除了变量,我们还没有创建任何数据结构。

很快再见到你的排序算法......

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/3000/58273108

标签:系列,Python,元素,list,搜索算法,列表,索引,搜索,my
From: https://www.cnblogs.com/amboke/p/16641746.html

相关文章

  • 解决方案:有效的字谜(Python)
    解决方案:有效的字谜(Python)给定两个字符串s和吨,返回真的如果吨是一个字谜s,和错误的否则.一个字谜是通过重新排列不同单词或短语的字母而形成的单词......
  • 你需要知道的 Python 基础知识:数据结构
    你需要知道的Python基础知识:数据结构数据结构是一种存储、组织和处理数据的格式,它允许您有效地对其执行操作Photoby保罗花冈on不飞溅例如,存储人们的电子邮件地......
  • 机器学习和 Python 中的决策树算法
    机器学习和Python中的决策树算法→决策树是一种树形算法,用于确定行动过程,树的每个分支代表一个可能的决策、发生或反应。让我们看一下术语:-熵——熵是数据集中“随......
  • python lambda函数
    lambda匿名函数python中使用lambda关键字声明一个匿名函数,什么叫做匿名函数?匿名函数就是没有名字的函数lambda函数语法lambdaargument(s):expressionlambda函数可......
  • (开集检测系列)MDETR - Modulated Detection for End-to-End Multi-Modal Understandin
    caption数据+DETR做开集检测1、动机1、只在固定object和属性上训练,解决不了长尾的问题/开集2、方法2.1优势1、MDETR仅依赖于文本和对齐的框作为图像中概念形式进......
  • Python面向对象模板
    内容概要面向对象面向对象前戏对象与类的创建对象独有的数据对象独有的功能动静态方法面向对象三大特性之继承面向对象三大特性之封装property伪装属性面向对象三大......
  • 《笨办法学Python3 》PDF高清版入坑必备!!!
      《笨办法学Python3》PDF高清版免费下载地址 ↑ ↑  ↑ ↑  ↑  ↑  ↑  点击即可下载   内容简介······本书是一本Python......
  • Python-常用内置模块
    常用内置模块数学计算模块math函数说明ceil(x)返回大于或等于x的最小整数floor(x)返回小于或等于x的最大整数sqrt(x)返回x的平方根pow(x,y)返......
  • python的django写页面上传文件以及遇到的问题
    首先上结构mynode->app5->urls.py&views.py           |->templates->5->upload.html           |->mynode->urls.py   ......
  • Python - 处理 requets 请求接口时, 传输中文数据乱码问题
     #使用  ensure_ascii=False data={'name':'测试名称'}url="https://api.weixin.qq.com/xxx/"data=json.dumps(data,ensure_ascii=False)head......