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

Python 中的数据结构与算法:从基础到应用

Python 中的数据结构与算法从基础到应用1. 背景介绍数据结构与算法是计算机科学的核心基础它们决定了程序的效率和性能。在 Python 中掌握常用的数据结构和算法不仅可以提高代码质量还能解决复杂问题。本文将深入探讨 Python 中常用的数据结构和算法通过实验数据验证其性能并提供实际项目中的最佳实践。2. 核心概念与联系2.1 常用数据结构对比数据结构时间复杂度 (访问/插入/删除)空间复杂度适用场景列表 (List)O(1)/O(n)/O(n)O(n)随机访问字典 (Dict)O(1)/O(1)/O(1)O(n)键值查找集合 (Set)O(1)/O(1)/O(1)O(n)去重操作队列 (Queue)O(n)/O(1)/O(1)O(n)FIFO 操作栈 (Stack)O(n)/O(1)/O(1)O(n)LIFO 操作堆 (Heap)O(1)/O(log n)/O(log n)O(n)优先级队列二叉树 (Binary Tree)O(log n)O(n)有序数据图 (Graph)O(VE)O(VE)网络关系3. 核心算法原理与具体操作步骤3.1 排序算法冒泡排序通过相邻元素的比较和交换来排序。实现原理重复遍历要排序的数列比较相邻的两个元素如果它们的顺序错误就交换它们直到没有再需要交换的元素时间复杂度O(n²) 平均情况使用步骤遍历数组比较相邻元素交换顺序错误的元素重复直到排序完成3.2 搜索算法二分查找在有序数组中查找目标值。实现原理找到数组的中间元素与目标值比较如果相等则返回如果目标值小于中间元素在左半部分查找如果目标值大于中间元素在右半部分查找时间复杂度O(log n)使用步骤确定搜索范围左边界和右边界计算中间位置比较中间元素与目标值调整搜索范围重复直到找到目标值或搜索范围为空3.3 图算法深度优先搜索 (DFS)优先访问子节点的搜索算法。实现原理从起始节点开始访问当前节点递归访问所有未访问的相邻节点时间复杂度O(VE)使用步骤选择起始节点标记为已访问递归访问所有未访问的相邻节点重复直到所有节点都被访问4. 数学模型与公式4.1 时间复杂度分析大 O 表示法O(1)常数时间O(log n)对数时间O(n)线性时间O(n log n)线性对数时间O(n²)平方时间O(2ⁿ)指数时间4.2 空间复杂度分析空间复杂度$$S(n) O(f(n))$$其中 f(n) 是算法所需的额外空间。4.3 排序算法性能比较算法最好情况平均情况最坏情况空间复杂度稳定性冒泡排序O(n)O(n²)O(n²)O(1)稳定选择排序O(n²)O(n²)O(n²)O(1)不稳定插入排序O(n)O(n²)O(n²)O(1)稳定快速排序O(n log n)O(n log n)O(n²)O(log n)不稳定归并排序O(n log n)O(n log n)O(n log n)O(n)稳定堆排序O(n log n)O(n log n)O(n log n)O(1)不稳定5. 项目实践代码实例5.1 常用数据结构实现# 栈的实现 class Stack: def __init__(self): self.items [] def push(self, item): self.items.append(item) def pop(self): if not self.is_empty(): return self.items.pop() return None def peek(self): if not self.is_empty(): return self.items[-1] return None def is_empty(self): return len(self.items) 0 def size(self): return len(self.items) # 队列的实现 class Queue: def __init__(self): self.items [] def enqueue(self, item): self.items.append(item) def dequeue(self): if not self.is_empty(): return self.items.pop(0) return None def is_empty(self): return len(self.items) 0 def size(self): return len(self.items) # 二叉树的实现 class TreeNode: def __init__(self, value): self.value value self.left None self.right None class BinaryTree: def __init__(self, root): self.root TreeNode(root) def preorder(self, start, traversal): if start: traversal str(start.value) - traversal self.preorder(start.left, traversal) traversal self.preorder(start.right, traversal) return traversal def inorder(self, start, traversal): if start: traversal self.inorder(start.left, traversal) traversal str(start.value) - traversal self.inorder(start.right, traversal) return traversal def postorder(self, start, traversal): if start: traversal self.postorder(start.left, traversal) traversal self.postorder(start.right, traversal) traversal str(start.value) - return traversal5.2 排序算法实现# 冒泡排序 def bubble_sort(arr): n len(arr) for i in range(n): swapped False for j in range(0, n-i-1): if arr[j] arr[j1]: arr[j], arr[j1] arr[j1], arr[j] swapped True if not swapped: break return arr # 快速排序 def quick_sort(arr): if len(arr) 1: return arr pivot arr[len(arr) // 2] left [x for x in arr if x pivot] middle [x for x in arr if x pivot] right [x for x in arr if x pivot] return quick_sort(left) middle quick_sort(right) # 归并排序 def merge_sort(arr): if len(arr) 1: return arr mid len(arr) // 2 left merge_sort(arr[:mid]) right merge_sort(arr[mid:]) return merge(left, right) def merge(left, right): result [] i j 0 while i len(left) and j len(right): if left[i] right[j]: result.append(left[i]) i 1 else: result.append(right[j]) j 1 result.extend(left[i:]) result.extend(right[j:]) return result5.3 搜索算法实现# 二分查找递归 def binary_search_recursive(arr, target, low, high): if low high: return -1 mid (low high) // 2 if arr[mid] target: return mid elif arr[mid] target: return binary_search_recursive(arr, target, low, mid-1) else: return binary_search_recursive(arr, target, mid1, high) # 二分查找迭代 def binary_search_iterative(arr, target): low 0 high len(arr) - 1 while low high: mid (low high) // 2 if arr[mid] target: return mid elif arr[mid] target: high mid - 1 else: low mid 1 return -1 # 深度优先搜索 def dfs(graph, start, visitedNone): if visited is None: visited set() visited.add(start) print(start, end ) for neighbor in graph[start]: if neighbor not in visited: dfs(graph, neighbor, visited) return visited # 广度优先搜索 def bfs(graph, start): visited set() queue [start] visited.add(start) while queue: vertex queue.pop(0) print(vertex, end ) for neighbor in graph[vertex]: if neighbor not in visited: visited.add(neighbor) queue.append(neighbor) return visited5.4 算法性能测试import time import random # 生成随机数组 def generate_random_array(size): return [random.randint(0, 10000) for _ in range(size)] # 测试排序算法性能 def test_sorting_algorithms(): sizes [1000, 5000, 10000] algorithms { 冒泡排序: bubble_sort, 快速排序: quick_sort, 归并排序: merge_sort, 内置排序: sorted } for size in sizes: print(f\n测试数组大小: {size}) arr generate_random_array(size) for name, func in algorithms.items(): test_arr arr.copy() start_time time.time() func(test_arr) end_time time.time() print(f{name}: {end_time - start_time:.4f} 秒) # 测试搜索算法性能 def test_search_algorithms(): size 100000 arr sorted(generate_random_array(size)) target arr[size // 2] # 确保目标存在 print(f测试数组大小: {size}) # 线性搜索 start_time time.time() for i, num in enumerate(arr): if num target: break end_time time.time() print(f线性搜索: {end_time - start_time:.6f} 秒) # 二分查找递归 start_time time.time() binary_search_recursive(arr, target, 0, size-1) end_time time.time() print(f二分查找递归: {end_time - start_time:.6f} 秒) # 二分查找迭代 start_time time.time() binary_search_iterative(arr, target) end_time time.time() print(f二分查找迭代: {end_time - start_time:.6f} 秒) # 运行测试 if __name__ __main__: test_sorting_algorithms() test_search_algorithms()6. 性能评估6.1 排序算法性能对比算法数组大小 1000数组大小 5000数组大小 10000冒泡排序0.07 秒1.73 秒6.92 秒快速排序0.00 秒0.01 秒0.02 秒归并排序0.01 秒0.03 秒0.06 秒内置排序0.00 秒0.00 秒0.01 秒6.2 搜索算法性能对比算法数组大小 100000平均时间线性搜索1000000.0025 秒二分查找递归1000000.0000 秒二分查找迭代1000000.0000 秒6.3 数据结构操作性能操作列表字典集合堆访问O(1)O(1)O(1)O(1)插入O(n)O(1)O(1)O(log n)删除O(n)O(1)O(1)O(log n)查找O(n)O(1)O(1)O(n)7. 总结与展望数据结构与算法是计算机科学的基础掌握它们对于编写高效的 Python 代码至关重要。通过本文的介绍我们了解了从基本数据结构到高级算法的各种知识。主要优势效率提升选择合适的数据结构和算法可以显著提高程序效率代码质量良好的算法设计使代码更易读、维护问题解决强大的算法能力可以解决复杂问题面试优势数据结构与算法是技术面试的重要内容性能优化通过算法优化可以解决性能瓶颈应用建议选择合适的数据结构根据具体需求选择最适合的数据结构算法复杂度分析在实现算法前分析其时间和空间复杂度使用内置实现优先使用 Python 内置的数据结构和算法考虑实际场景根据数据规模和操作频率选择合适的算法优化热点代码对性能关键部分进行算法优化未来展望数据结构与算法的发展趋势并行算法利用多核处理器提高算法性能分布式算法处理大规模数据的分布式计算机器学习算法结合 AI 技术优化算法设计量子算法探索量子计算中的算法设计算法可视化通过可视化工具理解算法原理通过深入学习和应用数据结构与算法我们可以编写更高效、更可靠的 Python 程序。无论是处理大规模数据还是解决复杂问题良好的算法设计都是成功的关键。对比数据如下快速排序在处理 10000 个元素时仅需 0.02 秒而冒泡排序需要 6.92 秒性能差异达到 346 倍二分查找在 100000 个元素的数组中几乎瞬间完成而线性搜索需要 0.0025 秒。这些数据清晰地展示了算法选择对性能的重要影响。

相关文章:

Python 中的数据结构与算法:从基础到应用

Python 中的数据结构与算法:从基础到应用 1. 背景介绍 数据结构与算法是计算机科学的核心基础,它们决定了程序的效率和性能。在 Python 中,掌握常用的数据结构和算法不仅可以提高代码质量,还能解决复杂问题。本文将深入探讨 Pytho…...

PostgreSQL 二进制安装全流程详解

1. 为什么选择二进制安装PostgreSQL 第一次接触PostgreSQL时,我也纠结过到底该用哪种安装方式。源码编译、包管理器、二进制安装各有优劣,但实测下来,二进制安装是最适合新手的方案。它既不像源码编译那样需要处理复杂的依赖关系,…...

OpenBMC实战:phosphor-bmc-code-mgmt仓库代码逻辑全解析(附避坑指南)

OpenBMC实战:phosphor-bmc-code-mgmt仓库代码逻辑全解析(附避坑指南) 在嵌入式系统开发领域,BMC(Baseboard Management Controller)固件的可靠更新机制是确保服务器稳定运行的关键环节。作为OpenBMC项目的核…...

哪款工具能把AI率从80%降到20%?实测3款对比

这篇文章的起点是一个具体问题:AI率80%以上的论文,用哪款工具降,能稳定降到20%以下? 我用3篇不同专业、不同AI率的论文(AI率分别为82%、86%、91%),分别测试了嘎嘎降AI、比话降AI、率零三款工具…...

同一篇80%AI率的论文,3种方法降完效果对比

为了给同学一个有说服力的参考,我用同一篇论文做了一个完整对比实验: 同一篇知网AI率80%的论文(经济学,3万字),分别用3种方法处理,然后统一检测,看最终结果。 下面是完整数据。 论…...

率零测评:AI率83%的文章降完是什么效果

率零(www.0ailv.com)最大的特点是便宜——3.2元/千字,在主流工具里价格最低,还有1000字免费体验。这让很多AI率高的同学把它作为第一选择。 它的实际效果怎么样?这篇文章来说清楚。 测试基本情况 测试论文&#xff…...

AI率90%用指令降和用工具降,效果对比实测

网上有很多"降AI率神奇指令",什么"用这个提示词让ChatGPT改写,AI率直接降到5%"。 真的能做到吗?对于AI率已经90%的论文,这类指令能不能用?和专业工具相比差距多大? 我测试了&#xf…...

Flightmare性能调优指南:从卡顿到丝滑的4个突破点

Flightmare性能调优指南:从卡顿到丝滑的4个突破点 【免费下载链接】flightmare An Open Flexible Quadrotor Simulator 项目地址: https://gitcode.com/gh_mirrors/fl/flightmare 你是否曾遇到这样的困境:精心设计的四旋翼控制算法在Flightmare仿…...

计算机毕业设计:Python地铁运营数据多维分析与智能管理平台 Django框架 数据分析 可视化 大数据 机器学习 深度学习(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...

PINN 融合机器学习重构科学计算范式,物理先验赋能神经网络高效求解偏微分方程

PINN 即物理信息神经网络,将物理定律(如偏微分方程、边界条件)以约束损失形式嵌入机器学习框架,实现数据驱动与物理先验的融合。它依托神经网络的拟合能力,在训练中同时最小化观测数据误差与物理方程残差,无…...

计算机毕业设计:Python二手车分析与定价系统 Django框架 可视化 线性回归 数据分析 机器学习 深度学习 AI 大模型(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...

计算机毕业设计:Python地铁线路客流与票价数据可视化系统 Django框架 数据分析 可视化 大数据 机器学习 深度学习(建议收藏)✅

博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

读硕士是否有必要?

一、研究方法说明 数据来源 本报告数据来源于以下公开渠道(2024-2025年),所有结论均有真实数据支撑:来源说明麦可思研究院《2025年中国本科生就业报告》权威第三方教育研究机构猎聘《2025人才供需洞察》《2025上半年人才供需洞察报…...

SeaTunnel Web安装踩坑记:从MySQL驱动到Hazelcast配置,我都经历了什么

SeaTunnel Web安装踩坑记:从MySQL驱动到Hazelcast配置,我都经历了什么 那天下午,当我第一次尝试在Linux服务器上部署SeaTunnel Web时,完全没想到会开启一段长达6小时的"排雷之旅"。作为一款强大的数据集成平台&#xff…...

01_Neo4j知识体系之原生图数据库架构全景与技术定位

01_Neo4j知识体系之原生图数据库架构全景与技术定位 体系 基础概念层:原生图数据库定位、属性图模型、索引自由邻接、与关系型数据库对比延伸阅读方向:Cypher 查询、图数据科学、向量索引、GraphRAG、企业级集群适用对象:架构师、数据平台负…...

Kazumi插件扩展完全指南:从安装到高级配置

Kazumi插件扩展完全指南:从安装到高级配置 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi Kazumi作为一款基…...

AI Agent 时代工程范式革命全解(非常详细),Harness Engineering 从入门到精通,收藏这一篇就够了!

如果你最近在关注 AI 编程领域,一定刷到过这个词:Harness Engineering。 这个新概念正在以惊人的速度取代 Prompt Engineering 和 Context Engineering,成为 AI Agent 工程优化的正解。 今天这篇文章,我用自己的理解帮你理清楚。…...

Claude Code 里,Subagents 和 Agent Teams 到底怎么选?有什么区别?

之前我写过几篇关于Multi-Agent的文章,介绍了Multi-Agent的一些模式。但是前不久Claude Code推出了Agent Team模式,当时我觉得,这不就是Multi-Agent的模式的一种新实现而已。后面详细拆解后,看到了 todo.md,task-list.…...

多LLM查询扩展框架实战指南(非常详细),RAG优化新范式从入门到精通,收藏这一篇就够了!

🎯 一句话总结:本文提出一套完全自动化的领域自适应查询扩展框架,无需人工编写Prompt或选择示例,通过BM25-MonoT5 pipeline构建领域内示例池,再用LLM精化多LLM扩展结果,显著提升检索性能。 📖 为…...

新手福音:在快马平台通过生成式提示零基础学懂lstm情感分析

今天想和大家分享一个特别适合深度学习新手的实践项目——用LSTM做文本情感分析。作为一个刚入门NLP的小白,我最初看到"长短期记忆网络"这个词就头大,直到在InsCode(快马)平台上通过生成式提示直接获得了可运行的代码项目,才真正理…...

兼容FX3U源码的增强版:支持以太网与串口下载,集成MODBUS-TCP协议,实现相对定位与绝...

18650锂电池高温热失控一、模块概述 FX3U系列PLC CAN网络通信模块是基于STM32F10x系列微控制器开发的专用通信组件,旨在实现多节点PLC设备间的可靠数据交互。该模块采用STM32F10x CAN外设硬件资源,结合自定义应用层协议,支持主从式网络架构&a…...

2025最权威的五大降重复率工具推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理以及机器学习算法的AI论文查重系统,会去分析文本语义&#xff0…...

2025届必备的降AI率神器推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 此刻知网已然集成了AI检测功能,是针对学术文本里的人工智能生成痕迹去做识别的。…...

2025届学术党必备的五大降AI率工具横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是想降低AIGC检测率,那就得从内容生成与后期修饰这两个关键的方面开始着手。在…...

看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳

看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳摘要卡尔・波普尔提出的可证伪性标准,被学界长期奉为科学与非科学的核心划界原则。该原则主张:一个命题若具备被经验事实反驳的逻辑可能,即可归入科学命题范畴。然而,…...

终极指南:3天快速上手ALOHA开源双臂机器人系统,从零到实战操作

终极指南:3天快速上手ALOHA开源双臂机器人系统,从零到实战操作 【免费下载链接】aloha 项目地址: https://gitcode.com/gh_mirrors/al/aloha ALOHA(A Low-cost Open-source Hardware System for Bimanual Teleoperation)是…...

Linux命令-ncftp(增强的的FTP工具)

ncftp 是 Linux 中一个功能强大的 FTP 客户端,提供了比传统 ftp 命令更丰富的功能和更友好的界面。它支持自动登录、断点续传、递归传输、书签管理等功能,是 FTP 操作的强大工具。 📖 基本语法 ncftp [选项] [主机名] ncftpget [选项] 主机名…...

3个技巧让N_m3u8DL-RE流媒体下载更高效

3个技巧让N_m3u8DL-RE流媒体下载更高效 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 还在为喜欢的在线视频无…...

FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透

🧐 第一部分:为什么是PostgreSQL?你可以把PostgreSQL想象成一个“极度守规矩的档案管理员”——数据完整性、ACID、复杂查询支持得滴水不漏。相比MySQL,它对JSON、全文检索、地理空间数据的支持更原生,而且这几年性能优…...

如何通过arknights-ui实现明日方舟界面定制?解锁个性化游戏体验新方式

如何通过arknights-ui实现明日方舟界面定制?解锁个性化游戏体验新方式 【免费下载链接】arknights-ui H5 复刻版明日方舟游戏主界面 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-ui arknights-ui是一个基于H5CSS技术的开源项目,它提供…...