Python算法学习分享

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

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

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

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

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

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

五个最常用的Python算法

1. 线性查找

python 复制代码
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. 二分查找

python 复制代码
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. 冒泡排序

python 复制代码
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. 递归

python 复制代码
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. 斐波那契数列

python 复制代码
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倍)
python 复制代码
# 对比不同算法的速度
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提供了清晰的语法让你专注于算法逻辑本身,这是学习算法的绝佳起点。

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

相关推荐
Draina14 分钟前
CBC填充预言攻击-CBC Padding Oracle Crypto Attack
python·安全·web安全·网络安全·密码学·安全性测试
Angel Q.40 分钟前
特征提取 | DINO 到 DINOv3
图像处理·python
不如语冰1 小时前
AI大模型入门-pytorch-张量2 tensor创建
python
NPE~1 小时前
[AI]Agent开发——ADK框架使用
人工智能·python·ai·教程·adk·agent开发
矮个史蒂芬1 小时前
统计verilog .v文件中output 的bit数
python
gwf2162 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
爱吃提升2 小时前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
审小匠OpenCPAi2 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
元Y亨H3 小时前
Pandas 解析 Excel 导致的内存溢出(MemoryError)
python·excel
金銀銅鐵4 小时前
[Python] 用 turtle 来绘制瑞典国旗
python