第3章 排序与查找——从确定性到概率性的思想跃迁
一个关于"极限"的故事
2023年,某搜索团队的工程师小张接到一个任务:优化搜索排序服务。
现有系统对 10^8 条数据做相关性排序,耗时约 2.6 秒。产品经理问:"能更快吗?"
小张分析了一下,n = 10^8,lg n ≈ 26,快排需要约 n lg n ≈ 2.6 × 10^9 次比较。他问 Cursor:"有没有更快的排序?"
Cursor 回答:"试试计数排序,O(n) 线性时间。"
小张照做了。测试环境用 100 条数据,完美通过。他满怀信心地部署上线。
系统崩溃了。
问题出在哪里?
计数排序要求键值范围 k ≤ n。但搜索排序的键是浮点数相关性得分,范围远超 n。Cursor 不知道这个前提条件,小张也没问——两人都错了。
这个故事的教训是:算法有理论极限,也有适用条件。知道极限在哪里,才知道什么时候"能突破",什么时候"不能突破"。
确定性排序的理论极限是 Ω(n lg n)。想突破这个极限,必须引入额外信息(比如键值范围有限)或接受概率性保证(比如期望复杂度)。
而"接受概率性保证",正是理解 LLM 采样策略的关键。Temperature > 0 引入随机性,不是缺陷,是设计——就像哈希函数引入随机性,用期望 O(1) 换取可能的最坏 Θ(n)。
这一章的核心叙事
这一章的独特逻辑不是"排序算法有哪些",而是从确定性到概率性的思想跃迁。
确定性排序 → 理论极限 → 必须引入随机性 → 随机化作为设计 → LLM采样
3.1 排序理论极限 (Ω(n lg n))
↓ "确定性排序有其理论极限,要突破必须引入随机性"
3.2-3.4 确定性算法(插入、归并、快排、堆排序)
↓ "快排期望 O(n lg n) 但依赖输入分布"
3.3 随机化快排
↓ "随机化消除对输入分布的依赖"
3.5 线性时间排序(逃逸下界)
↓ "非比较排序可以突破 Ω(n lg n)"
3.7 哈希(随机化作为设计原则)
↓ "哈希不是技巧,是随机化算法"
→ LLM 采样策略(随机性是设计,不是缺陷)学完这一章,你将理解:
- 为什么确定性排序有 Ω(n lg n) 的下界,什么时候能突破
- 随机化如何消除对输入分布的依赖
- 哈希为什么是"随机化算法",不是"数据结构技巧"
- LLM 的 Temperature、Top-k、Top-p 采样如何继承随机化算法的设计哲学
如何阅读这一章
这一章的内容需要你有一定编程基础。如果你已经熟悉排序算法,可以重点关注:
- 3.1 理论极限:决策树下界的证明,信息论视角
- 3.3 分治排序:快排期望分析,指示器随机变量的巅峰应用
- 3.7 哈希:Skiena 的视角转换——哈希是随机化算法
- 3.11 LLM 连接:哈希设计原则如何应用于采样策略
每节都有三层练习:
- 层次一(基础):手工计算、证明验证
- 层次二(LLM 协同):让 agent 实现,你审查和评判
- 层次三(Agent 设计):设计一个 Skill 或策略选择器
本章各节
- 3.1 排序的理论极限 —— 决策树下界 Ω(n lg n)
- 3.2 插入排序与循环不变式 —— 确定性算法的完整证明
- 3.3 分治排序:归并与快排 —— 期望分析与随机化
- 3.4 堆排序 —— 原地排序与最坏保证
- 3.5 线性时间排序 —— 逃逸决策树下界
- 3.6 顺序统计量 —— 选择比排序容易
- 3.7 哈希:随机化作为设计原则 —— 核心章节
- 3.8 字符串匹配 —— 从朴素到 KMP
- 3.9 二分查找与超越 —— O(log n) 到 O(log log n)
- 3.10 综合练习 —— 三层练习设计
- 3.11 从哈希到 LLM 采样 —— 核心章节
关键参考文献
本章引用的主要教材和论文:
- CLRS, Introduction to Algorithms, 4th ed., Chapters 6-11, 25
- Skiena, The Algorithm Design Manual, 3rd ed., Chapters 4-5
- Sedgewick & Wayne, Algorithms, 4th ed., Chapters 2-4
- "The Probability Spaces of QuickSort", arXiv 2025-06
- "Structure Development in List-Sorting Transformers", arXiv 2025-01
- "Top-H Decoding: Bounded Entropy", arXiv 2025-09