这里整理面向算法竞赛和小数据验证的 Python 笔记。默认读者熟悉 C++,文章重点放在如何快速表达数据、状态和枚举过程。
内容
- 用 Python 快速编写算法暴力验证程序:点对、区间、子集、排列、回溯、BFS 和记忆化等常见验证模型。
- Python 暴力代码大模板:输入输出、常用导入、枚举、DFS、BFS 和辅助函数集中在一个可复制文件中。
- Python 竞赛输入输出与字符串处理:读取整数和字符串、按 token 解析、格式化输出。
- Python OJ 输入输出速查:按常见题面格式查找可直接套用的输入输出代码,并解释每种写法。
- 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:深入理解高阶函数思想以及在数据聚合与映射中的应用。
- 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 解包操作符 * 和 **:写更少做更多:扩展解包、合并列表、矩阵转置、合并字典。