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/8/7 22:42:26 阅读更多 →
解决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/8/7 22:42:26 阅读更多 →
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/8/7 22:42:26 阅读更多 →

最新新闻

Spring Boot集成Netty构建高性能TCP服务:解决粘包拆包问题实战

Spring Boot集成Netty构建高性能TCP服务:解决粘包拆包问题实战

1. 从单体应用到高并发:为什么选择Spring Boot Netty? 如果你正在开发一个需要处理大量实时、长连接的网络应用,比如一个物联网设备管理平台、一个在线游戏服务器,或者一个高频的金融交易网关,那么传统的基于Servlet的…

2026/8/7 23:44:55 阅读更多 →
3步打造实时图表协作:开源Mermaid Live Editor的架构决策手册

3步打造实时图表协作:开源Mermaid Live Editor的架构决策手册

3步打造实时图表协作:开源Mermaid Live Editor的架构决策手册 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…

2026/8/7 23:44:55 阅读更多 →
如何在macOS上快速重签名iOS应用:iOS App Signer终极指南

如何在macOS上快速重签名iOS应用:iOS App Signer终极指南

如何在macOS上快速重签名iOS应用:iOS App Signer终极指南 【免费下载链接】ios-app-signer This is an app for OS X that can (re)sign apps and bundle them into ipa files that are ready to be installed on an iOS device. 项目地址: https://gitcode.com/g…

2026/8/7 23:44:55 阅读更多 →
预训练模型:从自监督学习到微调实战,解析AI通用知识迁移的核心技术

预训练模型:从自监督学习到微调实战,解析AI通用知识迁移的核心技术

1. 从“白纸”到“通才”:预训练的本质是什么?如果你刚接触深度学习或大模型,听到“预训练”这个词,可能会觉得它高深莫测,仿佛是什么魔法。其实,它的核心思想非常朴素,甚至可以说是一种“偷懒”…

2026/8/7 23:44:55 阅读更多 →
开发环境搭建实战:从环境变量到工具链,避开新手必踩的坑

开发环境搭建实战:从环境变量到工具链,避开新手必踩的坑

为什么你跟着教程一步步操作,环境变量也配了,软件还是报错?为什么别人的开发环境丝滑流畅,你的却总在安装配置环节卡住?这可能是大多数开发者入行时都踩过的坑——工具链的“第一公里”问题。编程本身是逻辑的艺术&…

2026/8/7 23:44:55 阅读更多 →
养基宝APP request-sign算法分析

养基宝APP request-sign算法分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口 等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间点击头像看简介或…

2026/8/7 23:43:54 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →