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提供了清晰的语法让你专注于算法逻辑本身,这是学习算法的绝佳起点。

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

相关推荐
10年前端老司机20 分钟前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_1 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰1 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain
卷无止境1 小时前
百万 token 时代的真相:主流大模型上下文窗口与最大输出的横向对比分析
人工智能·python
用户298698530142 小时前
Python 实战:将 HTML 批量转换为 Markdown
python·html·markdown
hhcgchpspk2 小时前
flask服务端页面预防被爬措施
后端·python·flask·网络爬虫·防爬
小小张说故事2 小时前
Python 里 copy.copy() 和 deepcopy() 到底差在哪:拆开 __copy__、__deepcopy__ 和那个防止无限递归的 memo 字典
python
vipxieliang2 小时前
Python collections:高效容器与实战案例
后端·python
青少儿编程课堂2 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
特创数字科技3 小时前
写了个 Windows 下载器:一键拉 GitHub / Gitee 源码,带 SHA256 校验
python·github