算法是什么?打个比喻就是“做菜的步骤”
想象一下你要做番茄炒蛋:
1. 打鸡蛋
2. 切番茄
3. 热锅放油
4. 先炒鸡蛋
5. 再加番茄
6. 调味出锅
这个步骤清单就是“算法”——解决特定问题的明确步骤。在编程中,算法就是告诉计算机如何解决问题的“菜谱”。
为什么学算法?三个简单理由
五个最常用的Python算法
1. 线性查找
def linear_search(items, target): """在列表中逐个查找目标值""" for i in range(len(items)): if items[i] == target: return i # 找到了,返回位置 return -1 # 没找到
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 timedef 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提供了清晰的语法让你专注于算法逻辑本身,这是学习算法的绝佳起点。
开始写你的第一个算法吧!