Python学习算法系列(1):算法基础与复杂度分析
1. 引言
在计算机科学中,算法(Algorithm) 是解决问题的一组有限且有序的指令。掌握算法不仅能提高编程能力,还能优化代码性能,提升面试通过率。
本系列的第一篇文章将介绍:
- 什么是算法
- 如何衡量算法的优劣
- 时间复杂度与空间复杂度
- Python 中的基本性能测试
2. 什么是算法?
算法(Algorithm) 是一组清晰的指令,用于解决特定问题。例如,如何在一组数中找到最大值:
def find_max(arr):
max_value = arr[0]
for num in arr:
if num > max_value:
max_value = num
return max_value
print(find_max([3, 1, 7, 5, 9, 2])) # 输出 9
📌 解释
- 遍历数组,每次更新最大值
- 时间复杂度 是 O(n)(遍历
n个元素)
3. 如何衡量算法的优劣?
衡量算法的标准:
- 正确性:能否正确解决问题?
- 时间复杂度:算法运行所需时间
- 空间复杂度:算法占用的额外存储空间
- 可读性:代码是否易读易维护?
4. 时间复杂度(Time Complexity)
时间复杂度 代表输入规模 n 增大时,算法运行时间的增长趋势,常见复杂度如下:
| 复杂度 | 示例 | 描述 |
|---|---|---|
| O(1) | 直接访问数组元素 | 常数时间 |
| O(log n) | 二分查找 | 对数时间 |
| O(n) | 遍历数组 | 线性时间 |
| O(n log n) | 归并排序 | 线性对数时间 |
| O(n²) | 嵌套循环 | 平方时间 |
📌 示例:O(n) VS O(n²)
# O(n) - 线性复杂度
def linear_search(arr, target):
for num in arr:
if num == target:
return True
return False
# O(n²) - 二重循环
def find_duplicates(arr):
duplicates = []
for i in range(len(arr)):
for j in range(i + 1, len(arr)):
if arr[i] == arr[j]:
duplicates.append(arr[i])
return duplicates
✅ linear_search() 运行时间与 n 成正比
❌ find_duplicates() 运行时间随着 n² 增长
5. 空间复杂度(Space Complexity)
空间复杂度 衡量算法使用的额外空间。例如:
📌 示例
# O(1) - 只使用一个变量
def sum_numbers(n):
total = 0
for i in range(1, n + 1):
total += i
return total
# O(n) - 使用额外数组
def generate_list(n):
return [i for i in range(n)]
✅ sum_numbers() 只用了 total 变量,空间复杂度 O(1)
❌ generate_list() 生成了 n 长度的数组,空间复杂度 O(n)
6. Python 代码性能测试
使用 timeit 测试算法运行时间
import timeit
code_to_test = """
def find_max(arr):
max_value = arr[0]
for num in arr:
if num > max_value:
max_value = num
return max_value
find_max([3, 1, 7, 5, 9, 2])
"""
execution_time = timeit.timeit(code_to_test, number=100000)
print(f"执行时间:{execution_time} 秒")
✅ 可以用 timeit 评估不同算法的性能
7. 总结
✅ 算法衡量标准
- 时间复杂度 影响运行速度
- 空间复杂度 影响存储需求
✅ Python 性能测试
timeit测试代码执行时间- 选择合适的算法,优化程序性能
📢 下一篇 Python学习算法系列(2):Python 递归算法,敬请期待!🚀
💡 如果你喜欢这篇文章,欢迎点赞、收藏,并关注本系列!

被折叠的 条评论
为什么被折叠?



