Python 所有算法汇总:从基础到高级的完整指南
摘要本文系统性地汇总了 Python 中常用的算法涵盖数据结构、排序、搜索、图论、动态规划、字符串处理、数学算法等多个领域。每个算法都配有核心思想、Python 实现代码和应用场景说明旨在为开发者提供一个全面的算法参考手册。1. 数据结构基础算法1.1 数组与列表操作最大子数组和Kadane算法def max_subarray_sum(nums): max_current max_global nums[0] for i in range(1, len(nums)): max_current max(nums[i], max_current nums[i]) max_global max(max_global, max_current) return max_global 示例 nums [-2, 1, -3, 4, -1, 2, 1, -5, 4] print(max_subarray_sum(nums)) # 输出: 6数组旋转def rotate_array(nums, k): n len(nums) k % n nums[:] nums[-k:] nums[:-k] 示例 arr [1, 2, 3, 4, 5, 6, 7] rotate_array(arr, 3) print(arr) # 输出: [5, 6, 7, 1, 2, 3, 4]1.2 链表算法反转链表class ListNode: def __init__(self, val0, nextNone): self.val val self.next next def reverse_list(head): prev None current head while current: next_node current.next current.next prev prev current current next_node return prev检测链表环Floyd判圈算法def has_cycle(head): slow fast head while fast and fast.next: slow slow.next fast fast.next.next if slow fast: return True return False1.3 栈与队列括号匹配def is_valid_parentheses(s): stack [] mapping {): (, ]: [, }: {} for char in s: if char in mapping.values(): stack.append(char) elif char in mapping: if not stack or stack[-1] ! mapping[char]: return False stack.pop() return not stack 示例 print(is_valid_parentheses(()[]{})) # True print(is_valid_parentheses(([)])) # False2. 排序算法2.1 比较排序快速排序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 result2.2 非比较排序计数排序def counting_sort(arr): if not arr: return [] max_val max(arr) count [0] * (max_val 1) for num in arr: count[num] 1 result [] for i in range(len(count)): result.extend([i] * count[i]) return result3. 搜索算法3.1 二分查找def binary_search(arr, target): left, right 0, len(arr) - 1 while left right: mid left (right - left) // 2 if arr[mid] target: return mid elif arr[mid] target: left mid 1 else: right mid - 1 return -13.2 深度优先搜索DFSdef 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) 示例图 graph { A: [B, C], B: [D, E], C: [F], D: [], E: [F], F: [] } dfs(graph, A) # 输出: A B D E F C3.3 广度优先搜索BFSfrom collections import deque def bfs(graph, start): visited set() queue deque([start]) visited.add(start) while queue: vertex queue.popleft() print(vertex, end ) for neighbor in graph[vertex]: if neighbor not in visited: visited.add(neighbor) queue.append(neighbor) bfs(graph, A) # 输出: A B C D E F4. 图论算法4.1 最短路径Dijkstra算法import heapq def dijkstra(graph, start): distances {node: float(inf) for node in graph} distances[start] 0 pq [(0, start)] while pq: current_dist, current_node heapq.heappop(pq) if current_dist distances[current_node]: continue for neighbor, weight in graph[current_node].items(): distance current_dist weight if distance distances[neighbor]: distances[neighbor] distance heapq.heappush(pq, (distance, neighbor)) return distances/code/pre 4.2 最小生成树 Prim算法 def prim_mst(graph): import heapq mst [] visited set() start_node list(graph.keys())[0] visited.add(start_node) edges [(weight, start_node, to) for to, weight in graph[start_node].items()] heapq.heapify(edges) while edges: weight, frm, to heapq.heappop(edges) if to not in visited: visited.add(to) mst.append((frm, to, weight)) for next_to, next_weight in graph[to].items(): if next_to not in visited: heapq.heappush(edges, (next_weight, to, next_to)) return mst/code/pre 5. 动态规划 5.1 背包问题 0-1背包 def knapsack_01(weights, values, capacity): n len(weights) dp [[0] * (capacity 1) for _ in range(n 1)] for i in range(1, n 1): for w in range(1, capacity 1): if weights[i-1] w: dp[i][w] max(dp[i-1][w], values[i-1] dp[i-1][w-weights[i-1]]) else: dp[i][w] dp[i-1][w] return dp[n][capacity]/code/pre 5.2 最长公共子序列LCS def longest_common_subsequence(text1, text2): m, n len(text1), len(text2) dp [[0] * (n 1) for _ in range(m 1)] for i in range(1, m 1): for j in range(1, n 1): if text1[i-1] text2[j-1]: dp[i][j] dp[i-1][j-1] 1 else: dp[i][j] max(dp[i-1][j], dp[i][j-1]) return dp[m][n]/code/pre 6. 字符串算法 6.1 KMP模式匹配 def kmp_search(text, pattern): def build_lps(pattern): lps [0] * len(pattern) length 0 i 1 while i len(pattern): if pattern[i] pattern[length]: length 1 lps[i] length i 1 else: if length ! 0: length lps[length-1] else: lps[i] 0 i 1 return lps lps build_lps(pattern) i j 0 while i len(text): if pattern[j] text[i]: i 1 j 1 if j len(pattern): return i - j elif i len(text) and pattern[j] ! text[i]: if j ! 0: j lps[j-1] else: i 1 return -1/code/pre 6.2 字符串编辑距离 def edit_distance(word1, word2): m, n len(word1), len(word2) dp [[0] * (n 1) for _ in range(m 1)] for i in range(m 1): dp[i][0] i for j in range(n 1): dp[0][j] j for i in range(1, m 1): for j in range(1, n 1): if word1[i-1] word2[j-1]: dp[i][j] dp[i-1][j-1] else: dp[i][j] 1 min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) return dp[m][n]/code/pre 7. 数学算法 7.1 素数筛选 def sieve_of_eratosthenes(n): is_prime [True] * (n 1) is_prime[0] is_prime[1] False p 2 while p * p n: if is_prime[p]: for i in range(p * p, n 1, p): is_prime[i] False p 1 return [i for i in range(2, n 1) if is_prime[i]] 7.2 最大公约数欧几里得算法 def gcd(a, b): while b: a, b b, a % b return a def lcm(a, b): return abs(a * b) // gcd(a, b) 8. 贪心算法 8.1 活动选择问题 def activity_selection(start, finish): activities list(zip(start, finish)) activities.sort(keylambda x: x[1]) selected [activities[0]] last_finish activities[0][1] for i in range(1, len(activities)): if activities[i][0] last_finish: selected.append(activities[i]) last_finish activities[i][1] return selected/code/pre 9. 回溯算法 9.1 N皇后问题 def solve_n_queens(n): def is_safe(board, row, col): for i in range(row): if board[i] col or board[i] - i col - row or board[i] i col row: return False return True def backtrack(row, board, result): if row n: result.append(board[:]) return for col in range(n): if is_safe(board, row, col): board[row] col backtrack(row 1, board, result) board[row] -1 result [] board [-1] * n backtrack(0, board, result) return result/code/pre 10. 分治算法 10.1 最近点对问题 import math def closest_pair(points): def distance(p1, p2): return math.sqrt((p1[0]-p2[0])**2 (p1[1]-p2[1])**2) def brute_force(points): min_dist float(inf) pair None n len(points) for i in range(n): for j in range(i1, n): dist distance(points[i], points[j]) if dist min_dist: min_dist dist pair (points[i], points[j]) return min_dist, pair def closest_split_pair(px, py, delta): mid_x px[len(px)//2][0] sy [p for p in py if mid_x - delta p[0] mid_x delta] best delta best_pair None for i in range(len(sy)): for j in range(i1, min(i7, len(sy))): dist distance(sy[i], sy[j]) if dist best: best dist best_pair (sy[i], sy[j]) return best, best_pair def closest_pair_rec(px, py): if len(px) 3: return brute_force(px) mid len(px) // 2 qx px[:mid] rx px[mid:] qy [p for p in py if p[0] lt; px[mid][0]] ry [p for p in py if p[0] gt; px[mid][0]] d1, pair1 closest_pair_rec(qx, qy) d2, pair2 closest_pair_rec(rx, ry) delta min(d1, d2) d3, pair3 closest_split_pair(px, py, delta) if d3 lt; delta: return d3, pair3 elif d1 lt; d2: return d1, pair1 else: return d2, pair2 px sorted(points, keylambda p: p[0]) py sorted(points, keylambda p: p[1]) return closest_pair_rec(px, py)/code/pre 总结 本文汇总了 Python 中常用的十大类算法涵盖了从基础数据结构操作到高级图论和动态规划的完整知识体系。每个算法都提供了清晰的 Python 实现和简要说明可以作为算法学习和面试准备的参考资料。在实际应用中应根据具体问题选择合适的算法并考虑时间复杂度和空间复杂度的平衡。

相关新闻

5分钟上手Poly Haven Assets插件:让Blender资产获取变得前所未有的简单

5分钟上手Poly Haven Assets插件:让Blender资产获取变得前所未有的简单

5分钟上手Poly Haven Assets插件:让Blender资产获取变得前所未有的简单 【免费下载链接】polyhavenassets A Blender add-on to integrate our assets natively in the asset browser 项目地址: https://gitcode.com/gh_mirrors/po/polyhavenassets 还在为Bl…

2026/10/18 12:22:00 阅读更多 →
解决cmp-nvim-lsp-signature-help常见问题:开发者必看的排错指南

解决cmp-nvim-lsp-signature-help常见问题:开发者必看的排错指南

解决cmp-nvim-lsp-signature-help常见问题:开发者必看的排错指南 【免费下载链接】cmp-nvim-lsp-signature-help cmp-nvim-lsp-signature-help 项目地址: https://gitcode.com/gh_mirrors/cm/cmp-nvim-lsp-signature-help cmp-nvim-lsp-signature-help是一款…

2026/10/18 1:34:47 阅读更多 →
Windows 7 SP2:让经典系统在现代硬件上重获新生

Windows 7 SP2:让经典系统在现代硬件上重获新生

Windows 7 SP2:让经典系统在现代硬件上重获新生 【免费下载链接】win7-sp2 UNOFFICIAL Windows 7 Service Pack 2, to improve basic Windows 7 usability on modern systems and fully update Windows 7. 项目地址: https://gitcode.com/gh_mirrors/wi/win7-sp2 …

2026/10/20 1:17:45 阅读更多 →

最新新闻

木门产品知识全解析:从分类、材质到测量安装避坑指南

木门产品知识全解析:从分类、材质到测量安装避坑指南

简介:这是一份面向木门行业从业者(销售、门店人员、安装技工)的产品知识培训资料,以单份doc文档收录,共1个文件,压缩包约3.28MB。内容从门的文化内涵、历史演变切入,系统梳理门按材质、开启方式…

2026/10/20 2:02:14 阅读更多 →
AGI时代开发者指南:大模型应用、RAG与Agent工程实践

AGI时代开发者指南:大模型应用、RAG与Agent工程实践

如果只看表面的技术动态,AGI时代给人的感觉是“模型又变强了”;但站在开发者角度,我更愿意把它理解为一次开发范式的变化:以前我们通过编写规则让软件工作,现在越来越多的工作变成了通过提示词、检索、工具调用和智能体…

2026/10/20 2:02:14 阅读更多 →
把AO接回来:黑线与白底之间差了多少空间关系

把AO接回来:黑线与白底之间差了多少空间关系

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 2:02:14 阅读更多 →
ISO质量认证体系文件落地指南:从PDF到可执行框架与内审闭环

ISO质量认证体系文件落地指南:从PDF到可执行框架与内审闭环

简介:这份PDF资料围绕ISO质量认证体系展开,面向企业质量管理人员、体系推行专员及备考质量管理相关认证的学习者,帮助读者系统理解质量体系认证的起源、标准框架与落地要点。内容从1903年英国“BS”风筝标志讲起,梳理质量认证从产…

2026/10/20 2:02:14 阅读更多 →
OpenCV人脸识别实战:从环境配置到LBPH阈值调优

OpenCV人脸识别实战:从环境配置到LBPH阈值调优

简介:这份资源面向具备Python基础、希望入门机器视觉与人脸识别的开发者与学习者,以OpenCV为核心工具,围绕明星人脸检测与识别这一具体场景展开实战。压缩包共120个文件,以110张jpg与5张jpeg人脸样本图片为主体,另含2个…

2026/10/20 2:02:14 阅读更多 →
EfficientNetV2架构深度解析:tf_efficientnetv2_b3.in1k为何能又快又小?

EfficientNetV2架构深度解析:tf_efficientnetv2_b3.in1k为何能又快又小?

【免费下载链接】tf_efficientnetv2_b3.in1k 项目地址: https://ai.gitcode.com/hf_mirrors/timm/tf_efficientnetv2_b3.in1k 点击查看 免费下载 本文以开源预训练模型 tf_efficientnetv2_b3.in1k 为例,带你快速看懂这个图像分类模型:它仅用…

2026/10/20 2:01:14 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →