在编程学习中,算法是解决问题的核心逻辑。掌握基础算法不仅能提升代码效率,更能培养结构化思维。本文将通过原理讲解、代码实现和应用场景分析,详细介绍Python中五个常用的基础算法。
一、快速排序(分治思想)
原理
快速排序采用分治策略:选择一个基准值,将数组分为小于基准和大于基准的两部分,递归处理子数组。
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) # 示例 print(quick_sort([3,6,8,10,1,2,1])) # 输出 [1, 1, 2, 3, 6, 8, 10]
特点
-
平均时间复杂度:O(n log n)
-
适合处理大规模数据
-
应用场景:数据排序、排行榜生成
二、二分查找(减治思想)
原理
在有序数组中,通过不断缩小搜索范围定位目标值,每次比较将范围减半。
def binary_search(arr, target): left, right = 0, len(arr)-1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # 示例 arr = [1,3,5,7,9] print(binary_search(arr, 5)) # 输出 2(索引位置)
关键点
-
必须作用于有序数组
-
时间复杂度:O(log n)
-
应用场景:大型数据库查询、游戏分数匹配
三、递归算法(斐波那契数列)
原理
通过函数自调用分解问题,经典案例是斐波那契数列:F(n) = F(n-1) + F(n-2)
def fibonacci(n): if n <= 1: return n return fibonacci(n-1) + fibonacci(n-2) # 示例 print(fibonacci(10)) # 输出 55
注意
-
需设置递归终止条件
-
存在重复计算问题(可用记忆化优化)
-
应用场景:树结构遍历、分形图形生成
四、动态规划(背包问题)
原理
将复杂问题分解为重叠子问题,存储中间结果避免重复计算。以0-1背包问题为例:
def knapsack(values, weights, capacity): n = len(values) 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] # 示例 values = [60, 100, 120] weights = [10, 20, 30] print(knapsack(values, weights, 50)) # 输出 220
- 应用场景:资源分配、投资决策等
五、广度优先搜索(BFS)
原理
以层序遍历方式探索图或树结构,使用队列实现,保证先访问离起点最近的节点。
from 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) # 示例 graph = {'A': ['B','C'], 'B': ['D'], 'C': [], 'D': []} bfs(graph, 'A') # 输出 A B C D
特点
-
时间复杂度:O(V+E)
-
应用场景:社交网络好友推荐、最短路径查找
总结
算法 | 核心思想 | 最佳场景 | 时间效率 |
---|---|---|---|
快速排序 | 分治 | 大数据排序 | O(n log n) |
二分查找 | 减治 | 有序数据查询 | O(log n) |
递归算法 | 自相似分解 | 树状结构处理 | 视具体问题 |
动态规划 | 最优子结构 | 资源优化问题 | 多项式时间 |
BFS | 层级遍历 | 最短路径搜索 | O(V+E) |
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
👉Python学习视频合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。