当前位置: 首页 > news >正文

线性表查找:Python 实现与性能分析

引言

在数据处理领域,查找操作是一项基础且关键的任务。线性表作为一种常见的数据结构,其查找算法的效率直接影响程序的性能。本文将深入探讨线性表查找的原理、Python 实现以及性能分析,为你揭示如何在 Python 中高效地进行线性表查找。

一、线性表查找原理

(一)顺序查找

  1. 算法思想
    • 顺序查找适用于顺序表或线性链表表示的静态查找表,且表内元素无需有序。其基本思想是从表头开始,逐个将元素与待查找的关键字进行比较,直到找到相等的元素或遍历完整个线性表。
  2. Python 实现
def sequential_search(lst, key):for i in range(len(lst)):if lst[i] == key:return i + 1return 0

(二)折半查找

  1. 算法思想
    • 折半查找要求线性表采用顺序存储结构且元素有序。查找过程中,每次将待查区间中间位置的元素与关键字比较,若相等则查找成功;若关键字小于中间元素,则在左半区间继续查找;若关键字大于中间元素,则在右半区间继续查找,不断缩小查找区间直至找到或确定查找失败。
  2. Python 实现
def binary_search(lst, key):low = 0high = len(lst) - 1while low <= high:mid = (low + high) // 2if lst[mid] == key:return mid + 1elif key < lst[mid]:high = mid - 1else:low = mid + 1return 0

(三)分块查找

  1. 算法思想
    • 分块查找要求表是分块有序的,即分成若干子表,每个子表内元素无序,但子表之间是有序的(前一块中的最大值小于后一块中的最小值)。同时,需要建立一个索引表,索引表中包含每个子表的最大关键字和起始地址。查找时,先在索引表中折半查找确定待查关键字所在的子表,然后在该子表内顺序查找。
  2. Python 实现
def block_search(lst, index, key):low = 0high = len(index) - 1while low <= high:mid = (low + high) // 2if key <= index[mid][0]:high = mid - 1else:low = mid + 1if high < 0:sublist = lst[:index[0][1]]elif low >= len(index):sublist = lst[index[-1][1]:]else:sublist = lst[index[high][1]:index[low][1]]for i in range(len(sublist)):if sublist[i] == key:return index[high][1] + i + 1return 0

二、性能分析

(一)顺序查找

  1. 空间复杂度
    • 顺序查找只需要一个辅助空间来遍历线性表,因此空间复杂度为 O (1)。
  2. 时间复杂度
    • 在查找成功时,平均查找长度 ASLs (n) = (1 + 2 + … + n)/n = (n + 1)/2,时间复杂度为 O (n)。在查找不成功时,需要遍历完整个线性表,时间复杂度也为 O (n)。顺序查找算法简单,但当线性表规模较大时,查找效率较低。不过,对于小规模数据或数据无序的情况,顺序查找仍然是一种可行的选择。

(二)折半查找

  1. 空间复杂度
    • 折半查找同样只需要少量的辅助空间来存储查找区间的上下界等信息,空间复杂度为 O (1)。
  2. 时间复杂度
    • 折半查找每次将查找区间缩小一半,查找成功时比较次数不超过树的深度 d = ⌊log₂n⌋ + 1,时间复杂度为 O (log₂n)。其查找效率明显高于顺序查找,但要求线性表必须是有序的且采用顺序存储结构,不适用于频繁插入和删除元素导致表结构动态变化的情况。

(三)分块查找

  1. 空间复杂度
    • 分块查找除了存储线性表本身外,还需要额外的空间来存储索引表,因此空间复杂度为 O (m),其中 m 为索引表的长度(即子表的个数)。
  2. 时间复杂度
    • 分块查找的查找效率取决于索引表的查找和子表内的查找。索引表查找采用折半查找,时间复杂度为 O (log₂m);子表内查找采用顺序查找,平均查找长度为 s/2(s 为每块内部的记录个数)。因此,分块查找的平均查找长度 ASL = Lb + Lw = O (log₂m) + s/2。分块查找在一定程度上结合了顺序查找和折半查找的优点,适用于线性表既要快速查找又经常动态变化的情况,但需要合理选择分块的大小以平衡索引表查找和子表内查找的开销。

线性表查找的不同算法在不同场景下各有优劣。顺序查找简单但效率较低,适用于小规模或无序数据;折半查找效率高但对表结构有要求,适用于有序且静态的顺序表;分块查找则在动态变化且需要一定查找效率的情况下表现较好。在实际应用中,需要根据数据的特点和操作需求选择合适的查找算法,以达到最优的性能。

相关文章:

线性表查找:Python 实现与性能分析

引言 在数据处理领域&#xff0c;查找操作是一项基础且关键的任务。线性表作为一种常见的数据结构&#xff0c;其查找算法的效率直接影响程序的性能。本文将深入探讨线性表查找的原理、Python 实现以及性能分析&#xff0c;为你揭示如何在 Python 中高效地进行线性表查找。 一…...

QT3学习之进阶理解信号和槽:如何自定义一个类信号,供其它类调用槽函数

下面是QWidget源码&#xff0c;定义了两个事件 /*!This event handler can be reimplemented in a subclass to receivewidget enter events.An event is sent to the widget when the mouse cursor enters thewidget.\sa leaveEvent(), mouseMoveEvent(), event() */void QWi…...

(Image Signal Processor)ISP简介

文章目录 ISP功能简介ISP的主要功能ISP的主要模块1. **黑电平校正&#xff08;Black Level Correction, BLC&#xff09;**2. **噪声去除&#xff08;Denoise&#xff09;**3. **色彩校正&#xff08;Color Correction Matrix, CCM&#xff09;**4. **自动曝光&#xff08;Auto…...

upload-labs靶场保姆级攻略

第一关&#xff1a;删除前端js校验 写一个一句话木马&#xff0c;命名为1.php 一句话木马 浏览上传 我们发现不可以上传&#xff0c;右键检查&#xff0c;依次点击 找到return checkFile()删掉&#xff0c;再上传 去看一下是否已经写入进去一句话木马 页面什么也没有&#xff…...

02、10个富士胶片模拟的设置

二色彩 1、色彩的加减控制全局的饱和度增减&#xff1b; 2、色彩效果只提升暖色系饱和度&#xff1b; 3、FX蓝色大幅度提升蓝色系饱和度&#xff1b; 4、三个参数都不改变颜色的色相。 2.1 色彩 色彩调整的是拍摄画面整体的色彩饱和程度 2.2色彩效果 调整的是画面中暖色…...

大模型呼出机器人详解

大模型呼出机器人详解 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 大模型呼出机器人是基于大规模深度学习模型构建的智能化客服系统&#xff0c;它能够处理海量数据并学习其中的规律&#xff0c;从而实现高…...

计算机基础知识——数据结构与算法(三)(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据结构与算法…...

【Unity功能集】TextureShop纹理工坊(三)图层(下)

项目源码&#xff1a;在终章发布 索引 图层渲染绘画区域图层Shader 编辑器编辑模式新建图层设置当前图层上、下移动图层删除图层图层快照 图层 在PS中&#xff0c;图层的概念贯穿始终&#xff08;了解PS图层&#xff09;&#xff0c;他可以称作PS最基础也是最强大的特性之一。…...

基于 SSM 框架 Vue 电脑测评系统:引领电脑评测新方向

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

Android笔记【19】

具体示例 run: val result someObject.run {// 这里可以使用 thisthis.someMethod() }let: val result someObject?.let {// 这里使用 itit.someMethod() }with: val result with(someObject) {// 这里使用 thissomeMethod() }apply: val obj SomeClass().apply {// 这里使…...

Redis 中 IntSet 底层数据结构

IntSet 底层数据结构 序言: 像字符串 SDS 只是保存了一个变量的值&#xff0c;但是像 Redis 中也是需要保存一些集合元素的&#xff0c;这里就介绍一下其中一种集合 IntSet&#xff0c;由于是 Set 所以也有 Set 的一些特性&#xff0c;不过也多加了一些特性&#xff1a; ● 唯…...

自然语言处理:我的学习心得与笔记

Pytorch 1.Pytorch基本语法 1.1 认识Pytorch 1.2 Pytorch中的autograd 2.Pytorch初步应用 2.1 使用Pytorch构建一个神经网络 2.2 使用Pytorch构建一个分类器 小节总结 学习了什么是Pytorch. 。Pytorch是一个基于Numpy的科学计算包,作为Numpy的替代者,向用户提供使用GPU强大…...

Altair: 轻松创建交互式数据可视化

Altair: 轻松创建交互式数据可视化 Altair 是一个基于 Vega-Lite 的 Python 数据可视化库&#xff0c;它旨在简化数据可视化的创建过程&#xff0c;尤其适用于统计图表的生成。Altair 强调声明式编码方式&#xff0c;通过简单的语法&#xff0c;用户能够快速创建复杂的交互式图…...

【NLP】序列到序列(seq2seq)建模工具fairseq使用详解

文章目录 一、fairseq简介二、安装方式2.1 pip安装2.2 源码安装 三、fairseq命令工具3.1 fairseq-preprocess3.2 fairseq-train3.3 fairseq-generate3.4 fairseq-interactivate3.5 fairseq-score3.6 fairseq-eval-lm 4. 常见报错报错1 参考资料 一、fairseq简介 fairseq 是 Fa…...

[极客大挑战 2019]HardSQL 1

[极客大挑战 2019]HardSQL 1 打开实例&#xff0c;发现是个登陆页面&#xff0c;查看源代码&#xff0c;发现又是GET提交check.php 万能密码尝试 不太行&#xff0c;怀疑字段或者空格被过滤&#xff0c;尝试闭合不加其他东西 确认空格、union、and等都被过滤了&#xff0c;尝试…...

天空分割代码

目录 依赖项: 分割源代码: 依赖项: groundingdino Grounded-Segment-Anything 分割源代码: generate_sky_mask.py import os, syssys.path.append(os.getcwd()) # Change to your folder here sys.path.append(Grounded-Segment-Anything)import argparse import os…...

Leetcode 三角形最小路径和

算法思想与代码详解 这段代码采用的是**动态规划&#xff08;Dynamic Programming&#xff09;**的思想&#xff0c;用来解决“120. 三角形最小路径和”问题。动态规划通过将问题分解成更小的子问题&#xff0c;并通过保存子问题的解来避免重复计算&#xff0c;从而提高效率。…...

[Unity]Unity跨平台开发之Android入门

安卓环境配置 安装依赖项 推荐使用Unity Hub进行安装&#xff0c;安装时勾选Android Build Support、Android SDK & NDK Tools、OpenJDK。或者指定已安装的依赖项。&#xff08;注意&#xff1a;指定的依赖项需要是从UnityHub安装的。比如之前安装Unity2022时勾选了上述依…...

搭建Flume

title: 搭建Flume date: 2024-11-30 23:59:00 categories: - 服务器 tags: - Flume - 大数据搭建Flume 本次实验环境&#xff1a;Centos 7-2009、JDK 8、Flume-1.11.0 开始安装 1. 下载安装文件到服务器 # 使用wget命令下载flume文件&#xff08;二选一&#xff09; wget …...

【从零开始入门unity游戏开发之——C#篇10】循环结构——while、do-while、for、foreach的使用

文章目录 一、while 循环1、语法&#xff1a;2、示例&#xff1a; 二、 do-while 循环1、语法&#xff1a;2、示例&#xff1a; 三、for 循环1、语法&#xff1a;2、示例&#xff1a; 四、foreach 循环1、语法&#xff1a;2、示例&#xff1a; 五、总结对比六、注意事项七、使用…...

flask flask-socketio创建一个网页聊天应用

应用所需环境&#xff1a; python 3.11.11 其他 只需要通过这个命令即可 pip install flask3.1.0 Flask-SocketIO5.4.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 最好是用conda创建一个新的虚拟环境来验证 完整的pip list如下 Package Version ----…...

MVCC了解

MVCC&#xff08;多版本并发控制&#xff09;学习指南及代码示例 一、学习MVCC前先了解什么 1. MVCC的定义和作用 MVCC是一种并发控制机制&#xff0c;用于解决并发事务访问数据库时可能出现的问题&#xff0c;如脏读、不可重复读和幻读。它通过为每个数据行维护多个版本来实…...

LabVIEW随机扫描成像系统

利用LabVIEW开发了一套随机扫描成像系统&#xff0c;利用硬件时钟实现声光偏转器&#xff08;AOD&#xff09;的频率控制与信号采集之间的高速时间同步。系统利用了高精度的时钟同步技术&#xff0c;确保了成像精度和重复性&#xff0c;从而有效提高了成像速度和质量。 项目背景…...

系统移植——Linux 内核顶层 Makefile 详解

一、概述 Linux Kernel网上下载的版本很多NXP等有自己对应的版本。需要从网上直接下载就可以。 二、Linux内核初次编译 编译内核之前需要先在 ubuntu 上安装 lzop 库 sudo apt-get install lzop 在 Ubuntu 中 新 建 名 为 “ alientek_linux ” 的 文 件夹 &#xff0c; …...

【一文了解】C#重点-委托1

本篇文章来学习一下C#的委托&#xff0c;委托是C#中的一个重要概念&#xff0c;它允许将方法作为参数传递给其他方法。C#中的委托类似于C或C中的函数指针&#xff0c;并且类型安全。 委托 1.委托的定义 委托&#xff08;delegate&#xff09;是方法的代理/代表&#xff0c;委托…...

LeetCode hot100-87

https://leetcode.cn/problems/longest-increasing-subsequence/?envTypestudy-plan-v2&envIdtop-100-liked 300. 最长递增子序列 已解答 中等 相关标签 相关企业 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列&a…...

项目26:简易在线论坛 --- 《跟着小王学Python·新手》

项目26&#xff1a;简易在线论坛 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Pyth…...

知乎 PB 级别 TiDB 数据库集群管控实践

以下文章来源于知乎技术专栏 &#xff0c;作者代晓磊 导读 在现代企业中&#xff0c;数据库的运维管理至关重要&#xff0c;特别是面对分布式数据库的复杂性和大规模集群的挑战。作为一款兼容 MySQL 协议的分布式关系型数据库&#xff0c;TiDB 在高可用、高扩展性和强一致性方…...

Intel(R) Iris(R) Xe Graphics安装Anaconda、Pytorch(CPU版本)

一、Intel(R) Iris(R) Xe Graphics安装Anaconda 下载网址&#xff1a;https://repo.anaconda.com/archive/ 双击Anaconda3-2024.10-1-Windows-x86_64&#xff0c;一直下一步&#xff0c;选择安装的路径位置&#xff0c;一直下一步就安装完成了。打开Anaconda PowerShell Promp…...

RK3588 , mpp硬编码rgb, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBUbuntu x64 架构, 交叉编译aarch64 FFmpeg mppCode Init MppMPP_RET init_mpp...

揭开 Choerodon UI 拖拽功能的神秘面纱

01 引言 系统的交互方式主要由点击、选择等组成。为了提升 HZERO 系统的用户体验、减少部分操作步骤&#xff0c;组件库集成了卓越的拖拽功能&#xff0c;让用户可以更高效流畅的操作系统。 例如&#xff1a;表格支持多行拖拽排序、跨表数据调整、个性化调整列顺序&#xff1…...

常用网络协议简述

网络协议是计算机网络中规定数据交换格式和交换规则的一套标准。以下是一些常用的网络协议及其简要解释&#xff1a; HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09; 用于从网络传输超文本数据到本地浏览器的传输协议。基于TCP协议&…...

本地电脑使用命令行上传文件至远程服务器

将本地文件上传到远程服务器&#xff0c;在本地电脑中cmd使用该命令&#xff1a; scp C:/Users/"你的用户名"/Desktop/environment.yml ws:~/environment.yml 其中&#xff0c;C:/Users/“你的用户名”/Desktop/environment.yml是本地文件的路径&#xff0c; ~/en…...

笔记day2

文章目录 1 NavigationDuplivated警告错误2 Home模块组件拆分3 三级联动组件完成4 完成其余静态组件5 POSTMAN测试接口6 axios二次封装6.1 为什么需要进行二次封装axios&#xff1f;6.2 在项目中经常API文件夹【axios】6.3 axios基础不好&#xff0c;可以参考git|NPM关于axios文…...

排序算法(3)——归并排序、计数排序

目录 1. 归并排序 1.1 递归实现 1.2 非递归实现 1.3 归并排序特性总结 2. 计数排序 代码实现 3. 总结 1. 归并排序 基本思想&#xff1a; 归并排序&#xff08;merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff0…...

【5】C#期末复习第5套

1.int a[3][2]{2,4,6,8,10.12};则*&#xff08;a[1]1&#xff09;的值是8 指向&#xff08;a[1]的第二个元素&#xff09; 再* 2.合并字符串库函数strcat 3.比较字符串库函数strcmp 4.执行结果是x3&#xff0c;y3 int x3,y; int *px&x; y*px; (优先级高于*) 5.*p[5]没…...

jquery虚拟键盘插件jqkeyboard

jqKeyboard是一款jquery虚拟键盘插件。该虚拟键盘插件依赖于jquery ui&#xff0c;通过该插件&#xff0c;可以在页面中生成一个扁平风格的虚拟键盘面板。 在线预览 下载 安装 可以通过npm来安装jqKeyboard虚拟键盘插件。 npm install jq keyboard --save 使用方法 在页面…...

IMX6ULL开发板把屏幕刷黑(黑屏)的程序

承接博文 IMX6ULL开发板基础实验:Framebuffer驱动程序的简单应用实例代码详细分析 很容易写出把屏幕刷黑的程序… Ubuntu中的目录/home/book/mycode下新建目录C0003_draw_lcd_black&#xff0c;然后把把博文中的源码/home/book/mycode/C0002_show_pixel复制到目录C0003_draw_l…...

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL &#xff1a;只检索最外面的轮廓&#xff1b;RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中&#xff1b;RETR_CCOMP&#xff1a;检索所有的轮廓&#xff0c;并将他们组…...

C语言学习day24:DLL给程序打上窗口破解补丁

简言 在上一章节我们知道了DLL&#xff0c;编写DLL以及最重要的导出DLL&#xff0c;这一章节我们学习如何给应用打上窗口破解补丁&#xff08;DLL&#xff09;。 流程 工具&#xff1a;studyPE 操作&#xff1a; 把要补丁的程序拖入PE中点击导入菜单&#xff0c;导入dll函…...

大模型呼出机器人的应用场景

大模型呼出机器人的应用场景 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 大模型呼出机器人的应用场景十分广泛&#xff0c;涵盖了多个行业和服务领域。以下是对其应用场景的详细归纳&#xff1a; 一、客户…...

el-date-picker筛选时间日期选择范围

el-date-picker 选择时间日期范围-> 昨天 近7天 30天<template><div class"main"><div class"header"><el-form :model"form" label-width"auto"><el-button plain click"setTimeToYesterday&q…...

【Apache Paimon】-- 10 -- Paimon 0.9.0 集成 Hive 3.1.3

参考官方 0.9.0 版本文档:https://paimon.apache.org/docs/0.9/engines/hive/ 1、下载依赖包到 hive lib 下 $ cd $HIVE_HOME/$ mkdir auxlib$ cd auxlib$ wget https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-hive-connector-3.1/0.9.0/paimon-hive-connec…...

vue2如何写一个轮播图

需求描述 写一个轮播图&#xff0c;可以实现如下效果&#xff1a; 页面上展示三个轮播图元素默认状态下&#xff0c;进行自动轮播&#xff0c;循环播放一旦鼠标移入轮播图范围内&#xff0c;并停留在元素a上&#xff0c;则轮播图停止自动播放&#xff0c;同时将元素a放大 核…...

基础库httpx的使用

urllib 库和 requests 库的使用&#xff0c;已经可以爬取绝大多数网站的数据&#xff0c;但对于某些网站依然无能为力。什么情况?这些网站强制使用HTTP/2.0协议访问&#xff0c;这时 urllib 和requests 是无法爬取数据的&#xff0c;因为它们只支持 HTTP/1.1&#xff0c;不支持…...

MYSQL 利用concat函数 生成更新或者插入SQL

有时候需要批量运维一批数据&#xff0c;一条一条写SQL比较麻烦&#xff0c;可以使用下面的方法批量生成select sales_order_number,a.sog_line_id,actual_price,sales_goods_unit_price,b.id,concat(update your_table set actual_price, sales_goods_unit_price, where id,b…...

Backend For Frontend的学习分享

晚上公司开了一个技术分享会&#xff0c;主要内容就是公司的项目架构&#xff0c;会中讲解了项目整体架构是BFF架构&#xff0c;就是在微服务之上多加了一层。 除此之外&#xff0c;还讲解了DDD设计思想&#xff0c;主要用于各个业务中台&#xff0c;如订单中台、用户中台等。…...

KS曲线python实现

目录 实战 实战 # 导入第三方模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt# 自定义绘制ks曲线的函数 def plot_ks(y_test, y_score, positive_flag):# 对y_test重新设置索引y_test.index np.arange(len(y_test))# 构建目标数据集target_dat…...

【GO环境安装】mac系统+GoLand使用

文章目录 下载安装包环境配置GoLandGo Modules 下载安装包 地址&#xff1a;GO下载地址 下载好后直接进行安装&#xff1a; 进入terminal&#xff0c;查看是否安装成功&#xff1a; 环境配置 在文稿下面创建工作目录&#xff1a; 在文稿下新建Go_Works文件夹&#xff0c;在…...

2025年入职/转行网络安全,该如何规划?网络安全职业规划

网络安全是一个日益增长的行业&#xff0c;对于打算进入或转行进入该领域的人来说&#xff0c;制定一个清晰且系统的职业规划非常重要。2025年&#xff0c;网络安全领域将继续发展并面临新的挑战&#xff0c;包括不断变化的技术、法规要求以及日益复杂的威胁环境。以下是一个关…...