这里整理面向算法竞赛和小数据验证的 Python 笔记。默认读者熟悉 C++,文章重点放在如何快速表达数据、状态和枚举过程。
内容
- 用 Python 快速编写算法暴力验证程序:点对、区间、子集、排列、回溯、BFS 和记忆化等常见验证模型。
- Python 暴力代码大模板:输入输出、常用导入、枚举、DFS、BFS 和辅助函数集中在一个可复制文件中。
- Python 竞赛输入输出与字符串处理:读取整数和字符串、按 token 解析、格式化输出。
- Python OJ 输入输出速查:按常见题面格式查找可直接套用的输入输出代码,并解释每种写法。
- Python 切片位置记忆法:把切片数字看成元素之间的切割线,快速理解前缀、后缀和半开区间。
- Python 排序与顺序验证:
sorted、key、多关键字排序,以及用全排列验证排序贪心。 - Python 竞赛常用容器:
Counter、defaultdict、deque、dict 和 set。 - Python 生成器表达式:惰性计算、一次性消费以及
any、all、next 的短路。 - Python itertools 实用组合:
pairwise、accumulate、chain、repeat 和 zip_longest。 - 用 Python 生成可复现的随机测试数据:固定种子、随机数组、排列、区间、树和简单图。
- Python 验证代码中的常用数学工具:整数平方根、最大公约数、浮点比较和精确分数。
- Python 函数式编程三剑客:map、filter 与 reduce:深入理解高阶函数思想以及在数据聚合与映射中的应用。
- 把 Haskell 的思考方式带到 Python OJ:用 pattern、guard 和 pipe 先分类与串联思路,再落地为适合 Python 提交的实现。
- Python flow:快速搭建 OJ 思路原型与随机验证:用轻量数据流组织原型、短路状态、追踪中间值,并通过暴力随机差分寻找反例。
- Python functools.partial:预先绑定位置参数或关键字参数,把通用函数快速配置成新的可调用对象。
- C++ 选手转 Python 竞赛的 4 个血泪坑点:浅拷贝灾难、回溯存答案为空、闭包赋值报错与性能陷阱。
- Python 组合数学神器:有放回的组合与隔板法:利用
combinations_with_replacement 秒杀无限背包暴力与非严格递增序列构造。 - Python 暴力验证:含有重复元素的全排列去重:原理解析
unique_permutations 及其核心的同级枝剪算法。 - 组合去重的核心哲学:有序唯一性:从算法“术”到数学“道”,一统组合 DFS 与去重排列的底层思想。
- Python 隐式图 BFS 最短路径模板:通用
bfs_shortest 函数在数轴、网格迷宫、八数码与单词接龙中的用法。 - Python 子集和判定:记忆化 DFS 与 @cache:暴力指数级搜索加上缓存,和 C++ 全局数组记忆化一一对照。
- Python 竞赛中的字典经典用法:dict、defaultdict、Counter 三件套覆盖竞赛 30% 的数据结构需求。
- Python 解包操作符 * 和 **:写更少做更多:扩展解包、合并列表、矩阵转置、合并字典。
- Python 函数传参:对象引用绑定与参数排布:位置/关键字、默认参数陷阱、
*args/**kwargs、/ 与 *,以及对象引用传递。 - Python set:哈希集合的核心操作与竞赛用法:创建盲区、交并差、增删、
frozenset,以及 O(1) 查找带来的复杂度降维。 - Python 比赛实战:字符串子串匹配(内置方法、正则与手速版 KMP):
s.find()、正则前瞻断言 (?=...) 查找所有匹配,以及 15 行极简 KMP 模板。 - Python 算法思路快速验证指南:全武器库与四层验证法:内置语法糖、标准库黑魔法、调试对拍与本地第三方库(SymPy、NetworkX、Z3)。
学习资源