排序与二分查找的隐藏考点:Maths, CS & AI Compendium算法篇深度解读
【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium
在 Maths, CS & AI Compendium 这本开源教材的第 14 章"数据结构与算法"中,排序与二分查找(Binary Search)是面试出现频率最高的两大板块。本文带你拆解这一章的隐藏考点:排序算法的稳定性陷阱、O(n log n) 下界证明思路,以及"在答案上二分查找"这一元模式,帮你把死记硬背的考点变成可迁移的解题直觉。
📊 一张表看懂 7 种排序算法的复杂度
第 14 章 05. sorting and search.md 开篇就给出了一张高频速查表,面试中常被要求"现场对比":
| 算法 | 最优 | 平均 | 最差 | 空间 | 稳定? |
|---|---|---|---|---|---|
| 冒泡排序 | O(n) | O(n²) | O(n²) | O(1) | ✅ |
| 插入排序 | O(n) | O(n²) | O(n²) | O(1) | ✅ |
| 归并排序 | O(n log n) | O(n log n) | O(n log n) | O(n) | ✅ |
| 快速排序 | O(n log n) | O(n log n) | O(n²) | O(log n) | ❌ |
| 堆排序 | O(n log n) | O(n log n) | O(n log n) | O(1) | ❌ |
| 计数排序 | O(n+k) | O(n+k) | O(n+k) | O(k) | ✅ |
| 基数排序 | O(d(n+k)) | O(d(n+k)) | O(d(n+k)) | O(n+k) | ✅ |
考点提示:面试官最爱追问"为什么快速排序平均最快却是不稳定的"——答案就在 排序算法章节:它通过交换元素破坏等值元素的相对顺序,而归并排序用<还是<=决定合并时的稳定性。
🔑 隐藏考点 1:稳定性与多关键字排序
教材用一句话点破了多数人忽略的考点:稳定意味着等值元素保持相对顺序,这在多关键字排序时至关重要。
- 面试中"先按部门排序、再按薪资排序"这类题目,必须依赖稳定排序(归并排序、Python 的
sorted)才能保住第一关键字的顺序; - 归并排序合并时若误写成
<而非<=,右半部分的等值元素会"插队"到左半部分之前——这是典型的隐藏 off-by-one 级陷阱。
🔑 隐藏考点 2:O(n log n) 下界为什么成立?
比较排序存在Ω(n log n) 下界,教材用决策树证明:任何比较排序必须区分全部 n! 种排列,因此比较次数至少是 log₂(n!) = Ω(n log n)。而计数排序、基数排序靠"不比较元素"绕过下界——但代价是 k ≫ n 时的内存浪费。这个"下界 vs 绕过"的对比,是算法面试区分候选人的分水岭。
🔍 二分查找:从"找数字"到"找答案"
大多数教程只教"有序数组找目标值",但教材把二分查找升维为一条通用模板:在单调条件上搜索(search on a monotonic condition),见 二分查找模板。
三个难度的考点梯度
- 简单 · 标准二分:核心是
lo <= hi与lo < hi、hi = mid与hi = mid - 1的区别——前者决定找精确值,后者决定找边界(lower_bound)。 - 中等 · 旋转有序数组:关键洞察是"每次总有一半是有序的",判断目标落在哪个半区再收缩。注意
nums[lo] <= nums[mid]中的<=不能写成<,否则两元素边界场景会误判。 - 困难 · 两个有序数组的中位数:你不是在搜索一个值,而是在搜索一个划分点(partition point),使得左半部分全部小于右半部分。这是全书公认最难的分二分题之一。
元模式:在答案上二分(Binary Search on Answer)
这是整章最值得收藏的"隐藏考点":很多看似与二分无关的题目,只要答案是一个数值、且存在单调的is_feasible(x)判定函数,就可以对答案本身二分。经典例题是"货船在 d 天内运送完包裹的最小运力"——对运力候选值二分,每次用贪心检验可行性,见 完整实现。掌握这个模式后,Koko 吃香蕉、运送货物等题目都是同一副面孔。
⚠️ 高频踩坑清单(官方 Pitfalls 总结)
教材在 常见陷阱汇总表 中列出了 8 个高频错误,挑出最致命的 3 个:
| 陷阱 | 后果 | 修复 |
|---|---|---|
二分中lo <= hi与lo < hi混用 | 越界 / 漏掉边界 | 根据 hi 是闭区间还是开区间选择 |
| 一维 0/1 背包从左往右遍历 | 物品被重复使用(变成完全背包) | 容量维度必须从右往左 |
回溯中直接append(path) | 所有结果指向同一个列表 | 必须append(path[:])拷贝 |
🧭 学习路径:先理解模式,再刷隐藏考点
第 14 章的 00. foundations.md 强调全书方法论:算法题只有约 15~20 个核心模式,面试官会把同一模式改头换面("两数和"可以是分子结合能,也可以是账户余额)。建议的学习顺序:
- Big O 直觉:先建立"n = 10⁵ 时 O(n²) 必超时"的复杂度量感,见 增长率对照表;
- 递归与回溯:掌握"选择 → 探索 → 撤销"三步模板;
- 动态规划:状态定义、转移方程、边界条件五步法;
- 排序 + 二分:对照本文的隐藏考点逐个击破;
- 配套练习:章节末尾的 Take-Home 问题清单 按二分 / 贪心 / DP / 回溯分类,覆盖从简单到困难的完整梯度。
💡一句话总结:排序与二分查找的考点不在算法本身,而在稳定性、边界 off-by-one、单调性识别这三个维度。把这三个维度吃透,第 14 章的隐藏考点就再无盲区。
【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考