Python算法学习分享

算法是什么?打个比喻就是“做菜的步骤”

想象一下你要做番茄炒蛋:

  1. 打鸡蛋
  2. 切番茄
  3. 热锅放油
  4. 先炒鸡蛋
  5. 再加番茄
  6. 调味出锅

这个步骤清单就是“算法”——解决特定问题的明确步骤。在编程中,算法就是告诉计算机如何解决问题的“菜谱”。

为什么学算法?三个简单理由

  1. 好的算法就像坐高铁,差的算法就像骑自行车
  2. 学会一个算法,可以在很多地方使用
  3. 很多公司会考察算法能力

五个最常用的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()

给初学者的实用建议

  1. 先明白算法为什么这样工作
  2. 可以在纸上画出示意图辅助学习
  3. 先用少量数据测试

常见问题解答

Q: 一定要学算法吗?
A: 就像司机不一定懂修车,但懂的话能开得更好、更安全。

Q: 算法很难吗?
A: 开始可能有点难,但每个算法都是解决实际问题的智慧结晶。

Q: 每天学多久?
A: 每天30分钟,理解一个概念或写一个算法,效果比周末突击更好。

记住:学习算法就像学游泳,开始时可能喝几口水,但一旦掌握,就能自由遨游。Python提供了清晰的语法让你专注于算法逻辑本身,这是学习算法的绝佳起点。

开始写你的第一个算法吧!

posted @ 2026-01-14 15:01  深圳蔓延科技有限公司  阅读(3)  评论(0)    收藏  举报