Python 中实现线性搜索算法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。

前言

线性搜索算法,也称为顺序搜索算法,是一种简单但常用的搜索技术,用于查找特定元素是否存在于一个集合中。在本文中,将深入研究线性搜索算法,并演示如何在 Python 中实现它。将提供详细的算法描述、示例代码以及应用案例。

目录

前言

什么是线性搜索算法?

线性搜索算法的步骤

Python 中的线性搜索实现

示例:使用线性搜索查找元素

 示例 1:查找整数

 示例 2:查找字符串

 示例 3:查找自定义对象

应用案例:联系管理系统

总结


什么是线性搜索算法?

线性搜索算法是一种基本的搜索技术,用于查找目标元素是否存在于一个集合(通常是列表或数组)中。该算法的工作原理非常简单:它从集合的第一个元素开始逐个检查,直到找到目标元素或遍历完整个集合。

线性搜索算法适用于任何类型的数据,但它的效率相对较低,特别是当集合很大时。它的时间复杂度为 O(n),其中 n 是集合中元素的数量。因此,在处理大型数据集时,可能需要考虑使用更高效的搜索算法。

线性搜索算法的步骤

  1. 从集合的第一个元素开始,逐个检查每个元素。

  2. 检查当前元素是否等于目标元素。

  3. 如果找到目标元素,返回其位置(索引)。

  4. 如果遍历完整个集合仍未找到目标元素,表示目标元素不存在,返回一个特定的标记(如 -1)。

Python 中的线性搜索实现

下面是一个简单的 Python 函数,实现了线性搜索算法:

def linear_search(arr, target):
    for i, element in enumerate(arr):
        if element == target:
            return i
    return -1

上述函数接受两个参数:一个列表 arr 和一个目标元素 target 。它使用 enumerate 函数来遍历列表,并在找到目标元素时返回其索引,否则返回 -1。

示例:使用线性搜索查找元素

 示例 1:查找整数

numbers = [1, 3, 5, 7, 9, 11, 13]
target = 7

result = linear_search(numbers, target)
if result != -1:
    print(f"{target} 在列表中的索引为 {result}")
else:
    print(f"{target} 未在列表中找到")

上述代码演示了如何在整数列表中查找目标元素 7,并返回其索引。

 示例 2:查找字符串

fruits = ["apple", "banana", "cherry", "date", "fig"]
target_fruit = "cherry"

result = linear_search(fruits, target_fruit)
if result != -1:
    print(f"{target_fruit} 在列表中的索引为 {result}")
else:
    print(f"{target_fruit} 未在列表中找到")

这个示例展示了如何在字符串列表中查找目标字符串 "cherry",并返回其索引。

 示例 3:查找自定义对象

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

people = [
    Person("Alice", 25),
    Person("Bob", 30),
    Person("Charlie", 35)
]

target_person = Person("Bob", 30)

result = linear_search(people, target_person, key=lambda p: p.name)
if result != -1:
    print(f"{target_person.name} 在列表中的索引为 {result}")
else:
    print(f"{target_person.name} 未在列表中找到")

在这个示例中,定义了一个自定义对象 Person ,并在对象列表中查找一个具有特定属性的对象。

应用案例:联系管理系统

考虑一个实际的应用场景,使用线性搜索算法来实现一个简单的联系管理系统。用户可以添加联系人,并根据姓名查找联系人的详细信息。

class Contact:
    def __init__(self, name, phone_number):
        self.name = name
        self.phone_number = phone_number

contacts = []

def add_contact(name, phone_number):
    contact = Contact(name, phone_number)
    contacts.append(contact)

def find_contact(name):
    for contact in contacts:
        if contact.name == name:
            return contact
    return None

# 添加联系人
add_contact("Alice", "123-456-7890")
add_contact("Bob", "987-654-3210")

# 查找联系人
search_name = "Alice"
result_contact = find_contact(search_name)
if result_contact is not None:
    print(f"姓名: {result_contact.name}, 电话号码: {result_contact.phone_number}")
else:
    print(f"{search_name} 未在联系列表中找到")

在这个示例中,定义了一个 Contact 类来表示联系人,然后创建了一个联系人列表。用户可以使用 add_contact 函数添加联系人,并使用 find_contact 函数根据姓名查找联系人的详细信息。

总结

线性搜索算法是一种基本的搜索技术,适用于小型数据集或需要进行少量搜索操作的情况。尽管其效率相对较低(时间复杂度为 O(n)),但在某些情况下仍然非常有用。在实际应用中,可以根据需求选择适当的搜索算法,以提高效率。

本文提供了线性搜索算法的详细描述、Python 实现示例以及一个实际应用案例。希望这些信息能帮助dajia 理解线性搜索算法的工作原理,并在需要时有效地使用它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/389439.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMwareWorkstation17.0虚拟机安装Windows2.03完整详细步骤图文教程

VMwareWorkstation17.0虚拟机安装Windows2.03完整详细步骤图文教程 第一篇 下载Windows2.03第二篇 配置Windows2.03虚拟机机器环境第三篇 启动Windows2.03系统 第一篇 下载Windows2.03 1.Windows2.0原版软盘下载地址是 暂不提供,后续更新 2.Windows2.03虚拟机镜像下…

P1228 地毯填补问题题解

题目 相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,…

MATLAB知识点:poissrnd函数(★★☆☆☆)生成泊松分布的随机数

讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章:课后习题讲解中拓展的函数 在讲解第三…

开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)

文章目录 前言源码获取一、认识PDFBox二、导入依赖三、基础功能demo1:读取pdf所有内容demo2:读取所有页内容(分页)demo3:添加页眉、页脚demo4:添加居中45文字水印demo5:添加图片到右上角 参考文…

(四)【Jmeter】 JMeter的界面布局与组件概述

JMeter的界面布局 中文版: 英文版: JMeter的主界面包括菜单栏、工具栏、树形结构面板、视图面板等部分。 菜单栏:菜单栏包含了文件(File)、编辑(Edit)、查找(Search)、选项(Options)、工具(Tools)、帮助(Help)等菜单项,用于对…

WordPress作者页面链接的用户名自动变成16位字符串串插件Smart User Slug Hider

WordPress默认的作者页面URL链接地址格式为“你的域名/author/admin”,其中admin就是你的用户名,这样的话就会暴露我们的用户名。 为了解决这个问题,前面boke112百科跟大家分享了『如何将WordPress作者存档链接中的用户名改为昵称或ID』一文…

推荐在线图像处理程序源码

对于喜爱图像编辑的朋友们来说,Photoshop无疑是处理照片的利器。然而,传统的Photoshop软件不仅需要下载安装,还对电脑配置有一定的要求,这无疑增加了使用的门槛。 现在,我们为您带来一款革命性的在线PS修图工具——基…

紫微斗数双星组合:廉贞破军在卯酉

文章目录 前言内容总结 前言 紫微斗数双星组合:廉贞破军在卯酉 内容 紫微斗数双星组合:廉贞破军在卯酉 性格分析 廉贞星、破军星二星同宫,具有冒险开创的精神和领导能力,忍耐力强,工作积极稳重,冲劲大&a…

(17)Hive ——MR任务的map与reduce个数由什么决定?

一、MapTask的数量由什么决定? MapTask的数量由以下参数决定 文件个数文件大小blocksize 一般而言,对于每一个输入的文件会有一个map split,每一个分片会开启一个map任务,很容易导致小文件问题(如果不进行小文件合并&…

软件实例分享,药店进销存软件医药系统进销存教程

软件实例分享,药店进销存软件医药系统进销存教程 一、前言 以下软件程序教程以 佳易王药店进销存管理系统V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 软件可以对药品的有效期进行管理,可以查询还有多少天到期的…

如何查找Windows的桌面文件夹?这里提供详细步骤

当你的电脑上有不同的用户时,Windows 11、10、…上的桌面文件夹或桌面目录特别有用,那么哪里才是真正的桌面文件夹目录。 自己的Windows桌面目录 1、启动Windows资源管理器 2、按F4键并输入%UserProfile% 3、点击桌面 这是你个人桌面的正确文件夹路径…

【数据分享】1980s~2020年青藏高原中分辨率土地覆被数据

各位同学们好,今天和大伙儿分享的是1980s~2020年青藏高原中分辨率土地覆被数据。如果大家有下载处理数据等方面的问题,您可以私信或评论。 吴炳方. (2023). 青藏高原中分辨率土地覆被数据(1980s-2020). 国家青藏高原数据中心. 1 …

【STM32 CubeMX】I2C查询方式

文章目录 前言一、CubeMX配置IIC二、查询方式的使用2.1 分析一种情况2.2 Master模式2.3 Mem模式 总结 前言 在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的查询方式是一种简单而常见的通信方式。通过查询方式,微…

【并发编程】AQS原理

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳中求进,晒太阳 1. 概述 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点: 用 state 属性来表示资源的状…

【漏洞复现】某情侣飞行棋源码未授权访问漏洞

Nx01 产品简介 情侣飞行棋源码是一款专为情侣设计的互动游戏。通过游戏的方式,它可以帮助情侣们建立共同兴趣,增加互动,增进了解,培养默契,并创造美好的回忆。 Nx02 漏洞描述 某情侣飞行棋源码存在未授权访问漏洞&…

讲解用Python处理Excel表格

我们今天来一起探索一下用Python怎么操作Excel文件。与word文件的操作库python-docx类似,Python也有专门的库为Excel文件的操作提供支持,这些库包括xlrd、xlwt、xlutils、openpyxl、xlsxwriter几种,其中我最喜欢用的是openpyxl,这…

[嵌入式系统-16]:RT-Thread -2- 主要功能功能组件详解与API函数说明

目录 一、RT-Thread主要功能组件 二、内核组件 2.1 概述 2.2 API 三、设备驱动 3.1 概述 3.2 API 四、通信组件 4.1 概述 4.4 API 五、网络组件 5.1 概述 5.2 API 5.3 补充:MQTT协议 六、文件系统 6.1 概述 6.2 API 七、GUI 组件 7.1 概述 7.2 …

小米米家智能摄像头mp4多碎片手工恢复案例

小米米家智能摄像头mp4多碎片手工恢复案例 智能摄像头品牌中小米算是绝对的大厂,其采用的方案也是比较成熟比较典型的:日志截图1分钟1个文件。小米米家的智能摄像头之前处理过很多,这次来讲一个比较特殊的案例。 故障存储: 32G TF卡 fat…

机器学习和统计学的区别?

1、本质区别: 目标:机器学习的核心目标是建立一个可以自动学习和改进的模型,以预测未知数据。它更关注结果的准确性和模型的泛化能力,通常不关心模型是否可以解释。而统计学的目标是探究变量之间的关系,理解数据的内在…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-信号量semaphore

目录 一、信号量基本概念二、信号量运行机制三、信号量开发流程四、信号量接口五、代码分析(待续...)坚持就有收获 一、信号量基本概念 信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务间同步或共享资源的…