外观
01 数学基础:渐进记号与递推式求解
本章对应考试中的:判断题第 1~11 条(渐进记号性质)、选择题第 10 题(大 O 定义)、简答 Q14(函数增长率排序,三个版本)、简答 Q15(证明
)、递推式 T1~T5、填空题第 2、3 题(算法性质与评价标准)、作业题 O2(HeapPermute 复杂度)。 这一篇是整套体系的数学地基。后面每一道分治、减治大题最后都要"分析时间复杂度",靠的就是本章的渐进记号和递推式。先把这篇吃透,后面会轻松很多。
核心考点
这一章其实只考四件事,全部都是"会套用就能拿分"的题:
- 看懂三个记号
、 、 ,并判断一句话是对是错(判断题)。 - 把一串函数按"增长快慢"排序(Q14)。
- 写出"某函数
"的证明(Q15),就是找两个常数。 - 解递推式(T1~T5),即给定一个"自己表示自己"的式子,求出它等于多少、是什么复杂度。
这四件事都有固定套路,下面逐一拆解。
从零开始的前置知识
什么是"增长率"和"阶"
增长率(growth rate):当输入规模
举一个具体的对比。下面是三个函数在
| 约 |
可以看到:
为什么只看 很大的时候、为什么忽略常数倍
两个关键约定,贯穿整章:
第一,只看
第二,忽略常数倍数和低阶项。
渐进记号
核心理论与方法
一、三种渐进记号的定义与判断方法
1. 大 O 记号(上界,"不超过")
定义:称
逐个符号解释:
这正是选择题第 10 题的原文定义:存在正常数
和自然数 ,当 时 ,记作 ,即 的阶不高于(答案 A) 的阶。
怎么判断
例:判断
方法二:看比值极限法。 计算
- 极限为有限值(包括
) 。 - 极限为
比 严格低阶。 - 极限为有限正数
与 同阶,即 。 - 极限为
比 高阶, 。
例:
2. 大 记号(下界,"不低于")
定义:称
含义:从某处往后,
例:
3. 大 记号(同阶,"差不多")
定义:称
含义:
一句话记忆:
是" 的阶", 是" 的阶", 是" 的阶"。
二、大 O 的运算性质(判断题就考这些)
下面每条性质都直接对应判断题,记住结论和"为什么"。
性质 1(自反性):
性质 2(加法取较大阶):
性质 2 的错误变体:
性质 3(
性质 4(
性质 4 的错误变体:若
性质 5(
性质 6(指数的处理):
,取 即可,所以 。关键点:指数上 只是乘了个常数 ,不改变阶。 显然,所以 。(判断题 8)
性质 6 的错误变体:
性质 7(算法复杂度是问题复杂度的上界):若求解问题
性质 8(最坏情况比平均情况好算):通常算法的最坏情况时间复杂度比平均情况时间复杂度容易计算。对。 最坏情况只需找"最糟的那个输入";平均情况要对所有可能输入按概率分布求期望(加权平均),数学上更复杂。(判断题 11)
三、函数增长率的"标准梯子"与比较技巧
把常见函数按增长率从小到大排成一排,这就是排序题(Q14)的依据。记号
逐段说明这把梯子的"分界线",这是排序的核心规律:
- 常数
对数 多项式 指数 阶乘 ,这是五个大档次,跨档次直接判定。 - 任何对数的幂都低于任何正次幂的
: (只要 )。例: ,虽然看着前者指数大,但 的任意正次幂最终都赢。 - 任何
的幂都低于任何底大于 的指数: ( )。例: 。
当两个函数看不出谁大时,用下面两招:
技巧一:取对数比较。 如果
例:比较
技巧二:看比值极限。 算
四、解递推式的三种方法
递推式(recurrence):用"规模更小时的值"来表示"规模为
方法一:迭代展开法(最通用)
做法:把递推式右边的项一层层往里代入展开,写出前几步找出规律,一直展开到边界条件,再把所有项加起来。
例:解
观察规律:系数是
方法二:主定理(Master Theorem,最快)
适用形式:
判别步骤(三步走):
- 算出"分水岭"指数
,得到参照函数 。 - 把
和 比大小。 - 按下表对号入座:
| 情况 | 条件( | 结论 |
|---|---|---|
| 情况 1 | ||
| 情况 2 | ||
| 情况 3 |
怎么记:谁的阶大就听谁的;如果一样大,结果再多乘一个
代入数字的例子:
(归并排序): , , ,恰好与 同阶,属情况 2, 。 : , , 高于 ,属情况 1, 。 : , , 低于 ,属情况 3, 。 (二分查找): , , 与 同阶,属情况 2, 。
方法三:课件"定理 1"(给精确公式,HW1 用)
定理 1(题库 T5 给出的原文):设
的解是:
怎么套用:把你的递推式和标准形
代入例子:
三种方法怎么选:考场首选主定理(最快,且大多数大题的递推式都是
形);递推式是"减一"型(如 )主定理不适用,用迭代展开;题目明确要求"由定理 1 导出"就用定理 1。
答题模板
模板一:函数增长率排序题
第1步:把每个函数归到"标准梯子"的某一档(常数/对数/多项式/指数/阶乘/n^n)。
第2步:同档的用"取对数"或"看比值极限"比较。
第3步:从阶最低到最高写出排序,并对每对相邻函数补一句"为什么前者低于后者"。
(题目要求:若 f 排在 g 后面,则 g = O(f),即越靠后阶越高。)模板二:渐进记号证明题(证 )
目标:找一对常数 c>0 和 n0,使 n≥n0 时 f(n) ≤ c·g(n)。
第1步:把 f(n) 的每一项都放大成 g(n) 的倍数(小项用大项盖住)。
第2步:把这些倍数加起来得到 c。
第3步:写明"取 c=__, n0=__,对一切 n≥n0 有 f(n)≤c·g(n),故 f(n)=O(g(n))"。∎模板三:递推式求解题
第1步:判断形状。
- 形如 a·T(n/b)+f(n) → 用主定理:算 p=log_b a,比 f(n) 与 n^p,套三种情况。
- 题目要求"定理1" → 读出 a,b,c,d,x,判断 a 与 c^x,代入公式。
- 形如 T(n-1)(减一型)→ 用迭代展开,找规律求和。
第2步:写出复杂度 Θ(...);若要"非递归表达式",给出精确闭式。
第3步:(如要求)代回边界条件验证一两个小值,确保没算错。逐题精解
判断题 1~11(渐进记号性质)
下面把第 1~11 条的题面、答案、一句话理由汇总(详细理由见上面"运算性质"一节):
| 题号 | 题面(简记) | 答案 | 一句话理由 |
|---|---|---|---|
| 1 | ✓ 对 | 大 O 自反,取 | |
| 2 | ✓ 对 | 和的阶由大者定 | |
| 3 | ✗ 错 | 应取 | |
| 4 | ✓ 对 | "不低于"可传递 | |
| 5 | ✓ 对 | ||
| 6 | ✗ 错 | 应是 | |
| 7 | ✓ 对 | 非负下两者同阶 | |
| 8 | ✓ 对 | 指数 | |
| 9 | ✗ 错 | ||
| 10 | 算法复杂度 | ✓ 对 | 一个算法给出一个上界 |
| 11 | 最坏情况比平均情况易算 | ✓ 对 | 平均要对分布求期望 |
⚠️ 最爱挖的坑是第 3、6、9 条:把
选择题第 10 题
已在上文"大 O 定义"处给出:答案 A(不高于)。
简答 Q14:函数增长率排序(三个版本)
版本 A(来源 样题1 试卷1 试卷3)。原题函数:
逐对判断(令
是对数档,最低。 :与 比, 远大于 ,故 ;与 比, 远大于 ,故 。所以 夹在 和 之间。 是多项式档,低于指数 。 与 : , ,后者远大,故 。
最终排序:
版本 B(来源 2011期末 试卷4)。原题函数:
逐对判断:
最终排序:
版本 C(来源 样题2 试卷2,原卷部分识别模糊)。原题大致为
其中
简答 Q15:证明
完整书写(直接套模板二):
当
取
易错点:很多人卡在"
递推式 T1~T5
T1(来源 样题2 试卷2):
这是"减一型",用迭代展开 + 待定法。设通解
T2(来源 样题1 试卷1 试卷3):
设
T3(来源 2011期末):
主定理:
精确求解(设
验证:
⚠️ 题库勘误:题库给的精确式写作
,但代入 得 ,与真实值 不符;正确闭式应为 。两者的渐进阶都是 ,考试只要答 即得分,但若要写精确式请用 。
T4(来源 试卷4):
主定理:
精确求解(设
验证:
T5(来源 HW1,要求用定理 1):
套用定理 1:对照标准形
⚠️ 关于精确常数:若严格解原递推(带上
),精确闭式是 (验证: 时 ✓)。题库写的 在 时得 ,与真实值 略有出入。三者渐进复杂度都是 ,这是本题的得分点;题目要求"由定理 1 导出",按定理 1 写 即可。
填空题第 2、3 题(算法的性质与评价标准)
第 2 题:算法是由若干条指令组成的有序序列,具有( )、( )、( )和( )的性质。 答案:输入、输出、确定性、有限性。(有些教材还会列"可行性/正确性",按本课答案填这四个。)逐个解释:输入指有零个或多个外部数据;输出指至少产生一个结果;确定性指每一步的含义明确无歧义;有限性指执行有限步后一定结束。
第 3 题:评价算法的标准包括( )、( )以及正确性、简单性等。 答案:时间复杂性、空间复杂性。即"跑得快不快"和"占内存多不多"。
作业题 O2:HeapPermute 全排列算法的正确性与时间效率
原题算法(来源 HW1):
text
HeapPermute(n)
//输入:正整数 n 和全局数组 A[1..n];输出:A 的全排列
if n = 1
write A
else
for i ← 1 to n do
HeapPermute(n-1)
if n is odd: swap A[1] and A[n]
else: swap A[i] and A[n]正确性:用数学归纳法。可证明:当 HeapPermute(n) 输出全部排列后,数组相当于循环移动了一位;当 for 的每一次循环都能把"前
时间效率:设 write 与 swap)次数,递推为
含义:外层循环 swap(共
高频陷阱 / 易错点小结
- 加法取
不是 (判断 3)。 。 - 对偶方向:
;由 得到的是 ,别写成 (判断 6)。 - 指数
常数 vs 常数: 对(差常数倍); 错( ,比值趋于无穷)(判断 8、9)。 - 排序题方向:题目要求"
排在 后面则 ",即越往后阶越高,别写反。 - 主定理三种情况别记混:阶大者胜;同阶时结果多乘一个
。 - 减一型递推(含
)不能用主定理,要用迭代展开。 - 复杂度记号写规范:写
而不是 "nlogn",写 而不是 "n^2"。
自测清单
能不看答案做到下面几条,本章就过关:
- [ ] 默写
、 、 三个记号的定义(各含 和 )。 - [ ] 说出判断题 1~11 每条的对错和一句话理由(尤其 3、6、9)。
- [ ] 把版本 A、B 的函数从小到大排出来,并说出每对的比较理由。
- [ ] 完整写出
的证明(找出 )。 - [ ] 用主定理秒答:
、 、 、 各是什么阶。 - [ ] 写出 T1~T5 的求解过程和最终复杂度。
- [ ] 说出算法的四条性质和两条主要评价标准。