Python算法学习分享
算法是什么?打个比喻就是“做菜的步骤”
想象一下你要做番茄炒蛋:
- 打鸡蛋
- 切番茄
- 热锅放油
- 先炒鸡蛋
- 再加番茄
- 调味出锅
这个步骤清单就是“算法”——解决特定问题的明确步骤。在编程中,算法就是告诉计算机如何解决问题的“菜谱”。
为什么学算法?三个简单理由
- 好的算法就像坐高铁,差的算法就像骑自行车
- 学会一个算法,可以在很多地方使用
- 很多公司会考察算法能力
五个最常用的Python算法
1. 线性查找
def linear_search(items, target):
"""在列表中逐个查找目标值"""
for i in range(len(items)):
if items[i] == target:
return i # 找到了,返回位置
return -1 # 没找到
# 使用示例
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print(linear_search(fruits, "橙子")) # 输出:2(第3个位置)
2. 二分查找
def binary_search(numbers, target):
"""在有序列表中快速查找"""
left, right = 0, len(numbers) - 1
while left <= right:
middle = (left + right) // 2 # 找中间位置
if numbers[middle] == target:
return middle
elif numbers[middle] < target:
left = middle + 1 # 目标在右边
else:
right = middle - 1 # 目标在左边
return -1
# 使用示例(注意:列表必须先排序!)
scores = [65, 72, 80, 88, 95, 100]
print(binary_search(scores, 88)) # 输出:3
3. 冒泡排序
def bubble_sort(numbers):
"""把大的数像气泡一样'冒'到后面"""
n = len(numbers)
for i in range(n - 1):
for j in range(n - 1 - i):
if numbers[j] > numbers[j + 1]:
# 交换位置
numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
return numbers
# 使用示例
unsorted = [64, 34, 25, 12, 22, 11, 90]
print("排序前:", unsorted)
print("排序后:", bubble_sort(unsorted.copy()))
4. 递归
def factorial(n):
"""计算n的阶乘:n! = n × (n-1) × ... × 1"""
if n == 1: # 基础情况:最小套娃
return 1
else: # 递归情况:打开一个套娃,里面还有套娃
return n * factorial(n - 1)
# 使用示例
print(f"5! = {factorial(5)}") # 输出:120
5. 斐波那契数列
def fibonacci(n):
"""生成斐波那契数列:每个数是前两个数之和"""
fib_sequence = [0, 1] # 开始有一对兔子宝宝
for i in range(2, n):
next_value = fib_sequence[-1] + fib_sequence[-2]
fib_sequence.append(next_value)
return fib_sequence[:n]
# 使用示例
print("前10个斐波那契数:")
print(fibonacci(10))
# 输出:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
算法复杂度:快慢的衡量标准
- O(1):闪电速度(不管数据多少,时间不变)
- O(n):线性增长(数据翻倍,时间翻倍)
- O(n²):平方增长(数据翻倍,时间变4倍)
# 对比不同算法的速度
import time
def test_speed():
big_list = list(range(10000))
# 测试线性查找
start = time.time()
linear_search(big_list, 9999)
linear_time = time.time() - start
# 测试二分查找(需要先排序)
sorted_list = sorted(big_list)
start = time.time()
binary_search(sorted_list, 9999)
binary_time = time.time() - start
print(f"线性查找: {linear_time:.6f}秒")
print(f"二分查找: {binary_time:.6f}秒")
test_speed()
给初学者的实用建议
- 先明白算法为什么这样工作
- 可以在纸上画出示意图辅助学习
- 先用少量数据测试
常见问题解答
Q: 一定要学算法吗?
A: 就像司机不一定懂修车,但懂的话能开得更好、更安全。
Q: 算法很难吗?
A: 开始可能有点难,但每个算法都是解决实际问题的智慧结晶。
Q: 每天学多久?
A: 每天30分钟,理解一个概念或写一个算法,效果比周末突击更好。
记住:学习算法就像学游泳,开始时可能喝几口水,但一旦掌握,就能自由遨游。Python提供了清晰的语法让你专注于算法逻辑本身,这是学习算法的绝佳起点。
开始写你的第一个算法吧!

浙公网安备 33010602011771号