Ran Wei/数学系列
English
计算机科学与人工智能的数学基础 — Ran Wei

数列、求和、渐近分析与递推关系

计算算法操作数,证明其增长,并求解递归成本模型。区分精确操作、渐近界、测量时间、最坏情况与摊还成本。

10 小时4 个时段3 个实验12 道练习与 2 道拓展10 道自测题

完成后你能够

  • 带边界推导等差、等比与望远镜有限和。
  • 按量化定义证明 O、Omega、Theta 与小 o。
  • 声明成本模型并推导矩形、三角与倍增循环计数。
  • 展开等子问题递推并用归纳核对结果。
  • 检查主定理条件并区分摊还、最坏与平均成本。

开始之前

模块 01 与 04:有限求和、对数、归纳与终止。模块 05 的计数帮助理解可选多项式与指数比较,不是核心路线先修。

目录

学习计划

10 小时

时间包含练习,是估计值;可按需要拆分时段。可选拓展练习额外需要 25 分钟。进度保存在当前浏览器,中英文版本共享。

1

操作计数是工作量模型

两个嵌套循环都可称二次增长,却分别执行 n 平方与 n(n−1)/2 次主体。运行时间还含解释器、分配、表示和具体输入。渐近界描述成本模型随规模增长,相关数量不能互换。

先精确计数,再证明增长并求递归成本。明确收费操作、输入规模,以及最坏、最好或序列总成本。O 应为论证结论,不能先凭印象贴标签。

回忆检查:展开双重和、用对数逆转幂、写完整归纳。按需复习模块 01与模块 04。核心仅需它们;可选二项式增长论证另用模块 05。输入有限、基本操作会终止。

2

等差、等比与望远镜求和

数列为允许整数索引赋值。等差差值固定 d,ai=a0+ida_i=a_0+id。零到 n−1 的 n 项和为 na0+d n(n−1)/2na_0+d\,n(n-1)/2。零项两部分为零。先写起始索引,零基与一基切换会改变常数。

一到 n 的和是 n(n+1)/2。反向排列并逐项相加,每对 n+1、共 n 对,因此原和的两倍 n(n+1)。模块 04 也用归纳证明。两方法覆盖同域,都不依靠成功样例图外推。

例题详解
三角循环的精确主体数

i 从零到 n−1,j 从零到 i−1,内主体 i 次,总 ∑i=0n−1i=n(n−1)/2\sum_{i=0}^{n-1}i=n(n-1)/2。零或一时主体零次。若内范围包含 i,则每行 i+1,总 n(n+1)/2。边界决定精确式。

等比数列固定比 r,项 a,ar,ar2,…a,ar,ar^2,\ldots。n≥0 且 r≠1:

∑i=0n−1ari=a1−rn1−r.\sum_{i=0}^{n-1}ar^i=a\frac{1-r^n}{1-r}.

令和 S,乘 r 后相减,中间项抵消,得 (1−r)S=a(1−rn)(1-r)S=a(1-r^n),除法要求 r≠1;r=1 时 na。零项公式零。r=0 也符合有限式,但首项不应被未检查的歧义表示替换。

层成本倍增给 1+2+⋯+2h−1=2h−11+2+\cdots+2^{h-1}=2^h-1,等成本给 h 倍,逐层减半总不超过首项两倍。这解释后面递归树,都是有限和,不使用无限级数定理。

望远镜和把项写相邻差:∑i=0n−1(bi+1−bi)=bn−b0\sum_{i=0}^{n-1}(b_{i+1}-b_i)=b_n-b_0。展开三项查看抵消与边界,改范围也要改端点。

例题详解
写明端点的望远镜和

例如 i≥1 时 1/(i(i+1))=1/i−1/(i+1)1/(i(i+1))=1/i-1/(i+1),一到 n 和 1−1/(n+1)1-1/(n+1)。域内分母非零;零项空和也与端点式一致。这里是有限代数,不需要积分。

和线性分拆要求相同索引域。如果某项只在更小范围定义,要补定义或拆范围。成本模型可相加不交类别,但不能把同一事件无意收费两次。

检验理解

按推导计算 ∑i=042i\sum_{i=0}^{4}2^i 与 ∑i=141/(i(i+1))\sum_{i=1}^{4}1/(i(i+1)),为何分别五项与四项?

查看答案

分别 25−1=312^5-1=31 与 1−1/5=4/51-1/5=4/5。数学端点包含,Python 停止边界需翻译。

3

增长率与对数底

增长分析比较输入增大时的非负函数:常数、对数、n、n log n、多项式、指数。表有直觉但不证明任意足够大输入的比较;下一节量化定义说明义务与常数。

| n | log⁡2n\log_2n | n | nlog⁡2nn\log_2n | n2n^2 | 2n2^n | |---|---|---|---|---|---|---| | 2 | 1 | 2 | 2 | 4 | 4 | | 4 | 2 | 4 | 8 | 16 | 16 | | 8 | 3 | 8 | 24 | 64 | 256 | | 16 | 4 | 16 | 64 | 256 | 65536 |

增长数量比较n 为 4、8、16 时分别列对数、线性、n log n、平方与指数的精确数值。相同 n,不同增长;数值并非运行秒数nlog₂ nnn log₂ nn²2ⁿ424816168382464256164166425665536有限表说明数量;无限增长关系仍需证明。
图 6.1

表与曲线比较数学成本函数,不是秒。规模与坐标轴有标注;改变轴尺度改变外观,不改变函数。

固定大于一的底只差正常数,log⁡bn=ln⁡n/ln⁡b\log_b n=\ln n/\ln b,渐近同类。但精确循环仍有底差与取整差;二倍与三倍循环均对数增长,却非相同整数次数。不能因 Theta 忽略常数就删精确式的底。

次数决定多项式渐近,常数可支配小输入。1000n 在 n=10 大于 n²,在 n>1000 后反过来。交点取决于常数,最终增长不承诺每实际数据上的实现速度。

指数最终超过固定次数多项式。可选模块 05 论证:固定整数 k≥0,n≥2(k+1) 时 2n≥(nk+1)≥(n/2)k+1/(k+1)!2^n\ge\binom n{k+1}\ge(n/2)^{k+1}/(k+1)!,每分子因子至少 n/2。除 nᵏ 得随 n 线性增长的下界,可超过任何固定常数。k 固定,若随 n 变就是另一主张。

规模需定义。图可依赖顶点与边,矩阵乘依赖三个维度,训练还依赖批大小与迭代数。未声明关系就压成一符号会隐藏成本;后面线性代数保留形状参数。

位长也是规模。数值 N 约需 log₂N 二进制位;N 次迭代在 N 为二幂时,对位长是指数。数值与表示长度不能等同。本实验 n 为明确次数参数,主体计数非完整位复杂度。

内存、比较、算术、通信可有不同成本。固定主体次数仍可能做成本随操作数位长增长的大整数乘法。单位成本模型有用,但要说明分析层次与限制。

检验理解

渐近忽略底是否说 log⁡2n=log⁡10n\log_2n=\log_{10}n?在 n=1000 时线性例与平方如何,超过交点呢?

查看答案

两对数正常数倍非相等。1000 处两成本相等,小于时 1000n 大,大于时 n² 大,最终比较不决定全部小输入时间。

4

O、Omega、Theta 与小 o 的见证

f、g 最终非负,g 最终正。f∈O(g)f\in O(g) 意为存在固定 c>0、n₀,使全部 n≥n₀ 满足 f(n)≤cg(n)f(n)\le cg(n)。常数先固定再覆盖后续全部输入,不能每 n 换 c。常见写 f=O(g) 是类归属简写。

f∈Ω(g)f\in\Omega(g) 给固定正 c 与阈值下的下界。f∈Θ(g)f\in\Theta(g) 同时给上下,即 c1g(n)≤f(n)≤c2g(n)c_1g(n)\le f(n)\le c_2g(n) 对全部后续 n,两个正常数。O 上界,Theta 双向紧增长类。

例题详解
明确常数证明二次增长

f(n)=3n2+7n+2f(n)=3n^2+7n+2,n≥1 时下界 3n²,因 n≤n²、1≤n²,上界 12n²。取 c1=3,c2=12,n0=1c_1=3,c_2=12,n_0=1 得 Theta(n²)。不必最小常数,只需有效且不依赖 n。

同 f 也 O(n³),正确但较弱。把 O 当精确会错误解释两个描述。f=n 是 O(n²) 却非 Theta(n²),因为正常数乘平方不能永在 n 下。上界不供紧性。

小 o更强:任意 ε>0,都存在 n₀,使所有后续 n 满足 f(n)<εg(n)f(n)<\varepsilon g(n)。相对 g 最终小于任意比例;阈值可依 ε,但固定后覆盖全部后续 n。

n 对 n²,选整数 n₀>1/ε,后续比 1/n<ε,故 n=o(n²)。平方对自身 O 却非小 o,ε=1/2 不可能。直接不等式不需要模块 15 的极限记法。

O 与小 o 的量词O 先存在一个正常数;小 o 为每个正 epsilon 选阈值,两者都覆盖全部后续 n。量词顺序控制界的强度O(g): ∃c > 0 ∃n₀ ∀n ≥ n₀固定一个比例,覆盖全部后续输入o(g): ∀ε > 0 ∃n₀(ε) ∀n ≥ n₀(ε)任意小比例,都能选后续范围
图 6.2

O 固定 c、阈值再覆盖后续;小 o 允许任意 ε 并为它选阈值。

量词顺序接模块 02:O 是存在 c、n₀ 再全称 n,小 o 是全称 ε、存在 n₀、全称 n。换顺序改变要求。有限比值图提示常数,证明仍需覆盖无限尾。

先明确 f。最坏为规模 n 允许输入的最大成本,最好为最小,平均需输入概率分布。各函数可分别有 O、Omega、Theta。O 不自动是最坏,Omega 不自动是最好;输入模型选函数,渐近符号描述界。

证明后可省低阶与常数,模型前不能。固定字长改任意精度,预建数据改即时构造,收费基本成本可能变;重新审模型,不应迁移旧标签。

检验理解

给 5n+9∈O(n)5n+9\in O(n) 常数并解释为何也 O(n²) 却非二次 Theta。

查看答案

n≥1 时至多 14n,c=14、阈值一。也至多 14n²,但正线性上下界给 Theta(n),正常数二次下界不可能最终成立。

5

精确循环与输入依赖成本

先选收费操作。实验一每进入主体一次收费一,不单独计条件、增量、访问、指令。此模型理解循环形状,完整模型加类别会改精确常数;主体若非恒成本也可能改增长。

矩形 n 外乘 n 内有 n²。三角各 i 次有 n(n−1)/2。最终都 Theta(n²),但精确不同且三角 n=1 零。渐近阈值可排小例,不否定其实际行为。

例题详解
倍增循环需要取整与边界

i 从一开始、i≤n 时倍增。n≥1 访问 1,2,4,…,2h1,2,4,\ldots,2^h,h=⌊log⁡2n⌋h=\lfloor\log_2n\rfloor,主体 h+1。n=8 四次,n=0 一开始条件假零次。“log₂n 次”漏取整、首项、零情况。

条件多检查一次,因此正 n 条件 h+2,零 n 一次。都对数增长但精确类别不同,应标公式计什么。

首次搜索非空首匹配只一次,缺失或末匹配 n 次,最坏 n、最好一。平均不能只由两极推,需要目标位置与存在分布。

最坏上界覆盖全部输入,紧性要有输入族达规模。搜索不重复检查,故至多 n;缺失族每规模达 n。最好要给达最小的输入,不能改允许域。假设首项匹配是不同约定,不是通用搜索最坏改进。

m 行 n 项扫描有 mn,m 固定正数时对 n 线性,m=n 时平方。矩阵 AI 常保留多形状与迭代数,声明缩放关系后才化一参数。

时间观察依机器、解释器、输入与范围。常数查询若含列表构造,收费了预建模型不含的设置。缓存、调度、编译、位长也影响。重复描述变化不自行证明无限渐近。

报告范围、输入族与预测操作,观测不符先审设置、隐藏工作与基本成本。后续数值模块扩展到准确性与可复现性。

纳秒时间戳不保证逐纳秒分辨。极短查询可能起止读数相同、测为零,这是测量限制,不是零工作。批量多次使可测,但也含循环与调用开销,应报告范围而非当完美隔离成本。

实验故意展示短时间,取七次最小是选定观察,不是平均或分布保证。更强实验会记录环境、多规模几何递增、分离设置、保留重复观测并比较理论预测。改善实验不改变有限观察与最终界证明的逻辑区别。

检验理解

计时首项比较前先创建 n 项列表,若按构造项收费,整体常数吗?写两个范围。

查看答案

查询一比较,设置加查询 n+1,整体线性。不同范围回答不同问题。

6

递推、展开与递归树

递推用更小成本与当前工作定义成本,需基础、允许规模域及算法依据。等半先限制 n=2ʰ,h≥0,减半恰到一。其他大小的取整需另论证,不能默算分数问题规模。

T(n)=2T(n/2)+nT(n)=2T(n/2)+n、T(1)=1,两子问题半大小,n 非递归工作。展开一层 4T(n/4)+2n4T(n/4)+2n;第 j 层 2j2^j 子问题各 n/2jn/2^j,总层工作 n,叶深 h=log₂n。

例题详解
平衡递推的精确解

h 非叶层各 n,加 n 个单位叶,T=n(1+log⁡2n)T=n(1+\log_2n)。按 h 归纳核对:零时一,代半大小公式给 2(n/2)(1+log⁡2(n/2))+n=n(1+log⁡2n)2(n/2)(1+\log_2(n/2))+n=n(1+\log_2n)。精确解在 n≥2 上 Theta(n log n)。

按层计算递归工作输入八,三非叶层各成本八,八单位叶另成本八,合计三十二。T(n) = 2T(n/2) + n,T(1) = 1,n = 88j=0= 844j=1= 82222j=2= 811111111j=3= 8三非叶层各八 + 八单位叶 = 32
图 6.3

n=8 非叶层 1、2、4 个问题,每层总八,八叶再八,T(8)=32。

一个半子递推层成本减半,非叶 n+n/2+⋯+2=2n−2n+n/2+\cdots+2=2n-2,叶一,T=2n−1。四半子层倍增,非叶 n(n−1),叶 n²,T=2n²−n。

这是数学工作模型。带记忆的数值求解程序复用相同子问题,不执行全部被建模操作。实验缓存算成本数字,运行时间不是 T 描述的算法时间,混淆会误解释。

减一也可展开:T(n)=T(n−1)+nT(n)=T(n-1)+n、T(0)=0,得一到 n 和,n(n+1)/2。深度 n 非对数,n−1 非固定比例子问题,后面等比定理不直接适用。

代入验证假设小规模界,推当前且覆盖基础。平衡两子猜 T≤Cn,得 2C(n/2)+n=(C+1)n2C(n/2)+n=(C+1)n,不能闭合,需要累积层的对数。单子 T≤2n 可以闭合,精确 2n−1 另保基础修正。跟踪大小因子与当前工作。

递推还要求子数、大小正确。代码不均衡、额外复制或输入依赖停止,要重建模型。平均平衡树不证明可极不均分算法的最坏界,先推实际递推再分类。

检验理解

单半子递推 T(1)=1 在 n=8 的解?缓存求此数为何不必做同数量操作?

查看答案

T=2n−1,十五。该数字是被建模工作,缓存求值通过算术复用计算,具有不同操作成本。

7

主定理条件与摊还分析

证明一个清楚的主定理(Master theorem)特例:T(n)=aT(n/b)+cndT(n)=aT(n/b)+cn^d,T(1) 固定正,a≥1 整数、b>1 固定整数、c>0、d≥0,n=bʰ。p=log_b a,第 j 层 cnd(a/bd)jcn^d(a/b^d)^j,叶 Theta(nᵖ),有限等比和给:

比较 层模式 结果
d<p 向叶增长 Theta(nᵖ)
d=p 每非叶同规模 Theta(nᵖ log n)
d>p 从根向下减小 Theta(nᵈ)

q=a/bᵈ>1 时末层支配,ndqh=npn^dq^h=n^p;q=1 时 h 同成本层给对数;q<1 时总上下由根成本常数倍界。叶项不改变分类,结论依明确条件。

更一般版本用 f(n),常见基本版比较 f 与 nᵖ:O(nᵖ⁻ε)、Theta(nᵖ)、Omega(nᵖ⁺ε),ε>0;第三还要求最终 af(n/b)≤c0f(n)af(n/b)\le c_0f(n),c₀<1 的正则条件。声明版本,平衡不等于任何稍小或稍大,纯幂证明不自动涵盖任意振荡 f。

边界 T=2T(n/2)+n/log⁡2nT=2T(n/2)+n/\log_2n,T(1)=1,非叶项仅 n≥2。n=2ʰ,第 j 层 n/(h−j),故精确 T=n(1+Hh)T=n(1+H_h),Hh=1+1/2+⋯+1/hH_h=1+1/2+\cdots+1/h。基本 f=Theta(n) 不适用,f 也不比 n 多项式地小,应展开或用适用定理。精确式足够实验,进一步渐近可选。

摊还分析(amortised analysis)界操作序列总成本再除操作数,无需概率。个别昂贵仍可常数摊还,只要整体足够便宜。单次最坏、分布平均、序列摊还不同。

例题详解
倍增容量的总计数

空数组容量一,追加写新项,满时容量倍增并复制旧项。m≥1 次追加复制为 1、2、4 到严格小于 m 的最大旧容量,几何总少于 2m;新写 m,总少于 3m,每追加 O(1) 摊还。单次扩容仍可 Theta(m)。模型仅计复制与写,排分配/初始化;加入线性分配改常数仍保几何总论证。

复制突发与总成本容量一开始,九次追加成本依次一、二、三、一、五、一、一、一、九,总二十四。追加主体:写一项,扩容时再复制旧项112233415561718199追加编号(柱高为本次复制 + 新写)九次总成本 24 < 27;第九次本身成本九。
图 6.4

复制突发在容量 1、2、4、8,单次不同,但前缀总复制加写被长度常数倍界。

交互演示

选一、二、四半大小子问题,改变二幂输入,查看各层、叶与总。n=8 为十五、三十二、一百二十。上文推导无需脚本。

摊还须覆盖模型中全部允许序列。仅追加使容量几何增;每次删除都收缩可能反复扩缩,原证明不涵盖任意交替操作。复用结论前明确操作族。

检验理解

一次昂贵扩容为何不反驳常数摊还?需要均匀随机追加吗?写总界。

查看答案

m≥1 前缀复制加写少于 3m,单次可线性。无随机性,几何容量对全部仅追加序列成立。

8

常见误解

症状 原因 修复
O 当精确时间或紧界 上界混淆相等/Theta 给见证并另证下界
Omega 自动称最好 界方向混输入选择 先定义成本函数
三角精确写 n² 忽略内范围 加实际行长
递推漏基础或复制 模型不完整 推全部工作与停止
n/log n 强套基本主定理 漏多项式差或平衡条件 展开或用适用定理
快查询含设置 改计时范围 分开描述与测量
昂贵追加反驳摊还 单次混总计 界前缀总复制与写
9

实验设置与成本记账

Python 3.11 或更新,无需包,见入门。@cache 复用相同参数的数值结果,求成本值而非执行所有被建模工作。计时跨机器/构建变化,两版显示同一次实际捕获。每次解释十分:预测三、模型四、诊断三。

10

实验 1 计三个循环主体

五十分钟:预测零、一、四、八、十六全部输出,区分矩形、三角、倍增。正整数 bit_length() 等于 floor(log₂n)+1,零主体零。把三角内止改 i+1 更新精确式;条件收费会改精确数,不自动改增长。

下载 lab1_loop_counts.py

"""Charge one operation per body entry, not elapsed time or every instruction."""


def counts(n):
    rectangular = triangular = doubling = 0
    for _ in range(n):
        for _ in range(n):
            rectangular += 1
    for i in range(n):
        for _ in range(i):
            triangular += 1
    i = 1
    while i <= n:
        doubling += 1
        i *= 2
    assert rectangular == n * n
    assert triangular == n * (n - 1) // 2
    assert doubling == n.bit_length()
    return rectangular, triangular, doubling


def main():
    print("n | rectangular body | triangular body | doubling body")
    for n in (0, 1, 4, 8, 16):
        print(n, "|", " | ".join(map(str, counts(n))))
    print("Body-entry counts exclude loop guards and integer-operation bit costs.")


if __name__ == "__main__":
    main()
输出
n | rectangular body | triangular body | doubling body
0 | 0 | 0 | 0
1 | 1 | 0 | 1
4 | 16 | 6 | 3
8 | 64 | 28 | 4
16 | 256 | 120 | 5
Body-entry counts exclude loop guards and integer-operation bit costs.
11

实验 2 核对递推解

五十分钟:预测八行并推三完整解,基础一。运行比较一、二、四子。改基础二,先推新叶贡献。保持二幂,脚本不分析任意 n 取整。解释记忆化求模型为何不自动加速所有实际递归算法。

下载 lab2_recurrences.py

"""Exact recurrences for powers of two; the multiplier counts identical children."""
from functools import cache


@cache
def cost(n, branches):
    if n == 1:
        return 1
    return branches * cost(n // 2, branches) + n


def main():
    print("n | T1(n) | T2(n) | T4(n)")
    for exponent in range(7):
        n = 2 ** exponent
        values = [cost(n, branches) for branches in (1, 2, 4)]
        assert values == [2 * n - 1, n * (exponent + 1), 2 * n * n - n]
        print(n, "|", " | ".join(map(str, values)))
    print("All bases T(1)=1, all non-leaf work=n, all child sizes=n/2.")
    print("Caching computes the numerical model; it is not the runtime of a real recursive algorithm.")


if __name__ == "__main__":
    main()
输出
n | T1(n) | T2(n) | T4(n)
1 | 1 | 1 | 1
2 | 3 | 4 | 6
4 | 7 | 12 | 28
8 | 15 | 32 | 120
16 | 31 | 80 | 496
32 | 63 | 192 | 2016
64 | 127 | 448 | 8128
All bases T(1)=1, all non-leaf work=n, all child sizes=n/2.
Caching computes the numerical model; it is not the runtime of a real recursive algorithm.
12

实验 3 诊断计时与定理陷阱

五十分钟:指出含列表设置的计时,独立于纳秒预测精确比。零/微小时间可能分辨率限制。n/log₂n 不在基本平衡,比较调和精确式。预测八、九次追加复制,解释昂贵扩容与少于 3m 总界兼容。分配与初始化未收费。

下载 lab3_cost_traps.py

"""Measured scope, a borderline recurrence, and aggregate doubling-array costs."""
from fractions import Fraction
from time import perf_counter_ns


def measure(call):
    best = None
    for _ in range(7):
        start = perf_counter_ns()
        call()
        elapsed = perf_counter_ns() - start
        best = elapsed if best is None else min(best, elapsed)
    return best


def append_cost(m):
    storage, size, copies, writes = [None], 0, 0, 0
    for value in range(m):
        if size == len(storage):
            larger = [None] * (2 * len(storage))
            for i in range(size):
                larger[i] = storage[i]
                copies += 1
            storage = larger
        storage[size] = value
        writes += 1
        size += 1
    assert storage[:size] == list(range(m))
    assert m == 0 or copies + writes < 3 * m
    return copies, writes


def main():
    print("Timing scope: the query reads the first entry; setup creates n entries.")
    for n in (1000, 4000):
        items = list(range(n))
        query_only = measure(lambda: items[0] == 0)
        with_setup = measure(lambda: list(range(n))[0] == 0)
        print(f"n={n}: one comparison; query-only best={query_only} ns; including setup best={with_setup} ns")
    print("Times vary by run/machine; no asymptotic claim follows from these four measurements.")
    print("Borderline: T(2^h)=2*T(2^(h-1))+2^h/h, T(1)=1")
    total, harmonic = Fraction(1), Fraction(0)
    for h in range(1, 6):
        n = 2 ** h
        total = 2 * total + Fraction(n, h)
        harmonic += Fraction(1, h)
        assert total == n * (1 + harmonic)
        print(f"h={h}, n={n}: T/n={total/n}; exact=1+H_h")
    print("The basic balanced f(n)=Theta(n) case does not apply to n/log2(n).")
    for m in (0, 1, 2, 3, 4, 5, 8, 9, 16, 17):
        copies, writes = append_cost(m)
        print(f"appends={m}: copies={copies}, writes={writes}, charged total={copies+writes}")
    print("Charge model counts copies+writes, excluding allocation/initialisation costs.")


if __name__ == "__main__":
    main()
输出
Timing scope: the query reads the first entry; setup creates n entries.
n=1000: one comparison; query-only best=100 ns; including setup best=3700 ns
n=4000: one comparison; query-only best=0 ns; including setup best=15400 ns
Times vary by run/machine; no asymptotic claim follows from these four measurements.
Borderline: T(2^h)=2*T(2^(h-1))+2^h/h, T(1)=1
h=1, n=2: T/n=2; exact=1+H_h
h=2, n=4: T/n=5/2; exact=1+H_h
h=3, n=8: T/n=17/6; exact=1+H_h
h=4, n=16: T/n=37/12; exact=1+H_h
h=5, n=32: T/n=197/60; exact=1+H_h
The basic balanced f(n)=Theta(n) case does not apply to n/log2(n).
appends=0: copies=0, writes=0, charged total=0
appends=1: copies=0, writes=1, charged total=1
appends=2: copies=1, writes=2, charged total=3
appends=3: copies=3, writes=3, charged total=6
appends=4: copies=3, writes=4, charged total=7
appends=5: copies=7, writes=5, charged total=12
appends=8: copies=7, writes=8, charged total=15
appends=9: copies=15, writes=9, charged total=24
appends=16: copies=15, writes=16, charged total=31
appends=17: copies=31, writes=17, charged total=48
Charge model counts copies+writes, excluding allocation/initialisation costs.
13

练习与完整解答

练习 1–12 预算 140 分钟、每题五分,扩展 25。声明规模域、操作、界见证,每递推有基础与核对。

练习 1★★★计算6 分钟

aᵢ=3+2i 前五项和,推零基 n 项式。

查看解答

3、5、7、9、11 和 35。一般 3n+2n(n−1)/2=n2+2n3n+2n(n-1)/2=n^2+2n,零时零。

练习 2★★★计算6 分钟

算 ∑i=052i\sum_{i=0}^{5}2^i 与 ∑i=15(1/i−1/(i+1))\sum_{i=1}^{5}(1/i-1/(i+1))。

查看解答

六等比项 63,望远镜 1−1/6=5/61-1/6=5/6,域内分母非零。

练习 3★★★计算6 分钟

n=8 矩形、内 range(i) 三角、倍增主体与条件各多少?

查看解答

64、28、四、五。倍增 1、2、4、8,条件最后多一次,各类别应标明。

练习 4★★★概念6 分钟

n 是 O(n²) 却非 Theta(n²),缺哪个界?

查看解答

n≥1 时 n≤n² 供上;正常数 c 的 n≥cn² 要 n≤1/c,不可能永久,缺二次下。实际 Theta(n)。

练习 5★★★proof15 分钟

给 3n2+7n+2∈Θ(n2)3n^2+7n+2\in\Theta(n^2) 明确见证。

查看解答

n≥1,下 3n²、上 12n²,见证 3、12、阈值一。零被阈值排除不影响最终界。

练习 6★★★proof15 分钟

量化定义证 n=o(n²),否定平方对自身小 o。

查看解答

任意 ε>0 选整数阈值>1/ε,后续比 1/n<ε。自身 ε=1/2 不可能,失败。

练习 7★★★proof15 分钟

推并核对二幂 T=2T(n/2)+nT=2T(n/2)+n、T(1)=1。

查看解答

log₂n 层各 n、叶 n,得 n(1+log₂n)。基础对,代入半大小表达式给同式,按指数归纳覆盖。

练习 8★★★application13 分钟

m×n 扫描主体数,m 固定、等 n、等 n² 时对 n 增长?

查看解答

mn,分别正固定时 Theta(n)、Theta(n²)、Theta(n³)。维度关系决定一参数分类。

练习 9★★★application13 分钟

解 T(n)=T(n−1)+n、T(0)=0,为何不直接等比主定理?

查看解答

一到 n 和,n(n+1)/2,Theta(n²)。n−1 非固定 n/b,深线性,添加第 n 项可验证。

练习 10★★★application13 分钟

倍增数组八、九次前缀成本,证明线性总界并区别第九次。

查看解答

八时复制七写八,总十五;九时复制十五写九,总二十四。复制<2m、写 m,总<3m。第九次复制八写一,单次九,常数摊还非每次常数。

练习 11★★★diagnosis16 分钟

把 2T(n/2)+n/log⁡2n2T(n/2)+n/\log_2n 当 f=Theta(n) 平衡,诊断并推精确二幂式。

查看解答

f/n=1/log₂n 变小,非 Theta(n),又无固定多项式差。n=2ʰ 层 n/(h−j),和 nHₕ、叶 n,得 n(1+Hₕ)。展开替代不适用基本情况。

练习 12★★★diagnosis16 分钟

首项查询计时先建 n 项,报告线性曲线证明查询线性。修解释,零短时间为何非零工作?

查看解答

范围含线性设置;预建查询一比较,设置加查询 n+1。有限曲线仅该范围实验证据,不是无限证明。短调用起止同读数因分辨率可测零,操作仍执行。

练习 13★★★proof10 分钟

可选:模块 05 二项下界证明固定整数次数多项式小 o 于 2ⁿ。

查看解答

n≥2(k+1) 时指数至少 (n/2)k+1/(k+1)!(n/2)^{k+1}/(k+1)!,比 nk/2n≤2k+1(k+1)!/nn^k/2^n\le2^{k+1}(k+1)!/n。任意 ε 取 n 超过域阈值及固定分子/ε,完成固定 k≥0 的小 o。

练习 14★★★proof15 分钟

可选:倍增块证 Hₕ=Theta(log h),解释边界递推。

查看解答

2ʲ 到 2ʲ⁺¹−1 共 2ʲ 项,各在 1/2ʲ⁺¹ 与 1/2ʲ 之间,块贡献半到一。完整块数与 log₂h 差常数,末部分最多一,故最终两正常数倍界。h=log₂n,T 是 Theta(n log log n),足够大二幂域。块证明不需要积分。

14

自测题

九自动选择与书面自评共十分。界需说明函数与常数范围,不只是标签。

1
O 陈述什么?
2
哪个供双向增长界?
3
3n²+7n+2 的 c=12、阈值一有效吗?
4
i=0 至 n−1、内 range(i) 主体数?
5
固定对数底改变 Theta 类吗?
6
两半子加 n、基础一,T(8)?
7
等比定理直接处理 T(n−1)+n 吗?
8
常数摊还追加表示什么?
9
最坏、平均、摊还如何区分?
查看答案

n≥1 时 3n2≤3n2+7n+2≤12n23n^2\le3n^2+7n+2\le12n^2,见证 3、12、一。它界明确计数函数,秒还依赖环境、操作成本与计时范围。固定双界及解释都有效才得分。

15

引导阅读

必读二十五分钟:在 MIT Mathematics for Computer Science 教材求和与渐近材料中,改写一个界为量词并给常数。

必读十一分钟:MIT 6.006 Recitation 3 的递归树与主定理,比较多项式工作案例及基础。

必读九分钟:教材摊还选段,指出总成本及收费事件,与单次最坏比较。总四十五分钟。

选读:MIT 主定理练习 的更完整条件及 Python 时钟文档 的单位与分辨率。例子与推导原创。

16

复习与图分析准备

有限和给精确公式,量化渐近用阈值后固定见证比较。递推记录小调用与当前工作,树解释层与叶。定理在条件下总结,摊还界序列而非每单次。

结业任务:推三角与倍增计数、常数证 Theta、解核对平衡递推、解释昂贵追加与线性前缀。练习六十、实验三十、测验十分。每答明确规模、操作、输入模型与计时范围。

模块 07 兼顾图结构与成本。先解释扫描所有顶点与存储邻接项为何依赖两数量,边数不自动是顶点数平方。

17

记法与双语术语

术语或符号 含义 English
等差 / 等比 / 望远镜 固定差 / 比 / 相消 Arithmetic / geometric / telescoping
O / Omega / Theta / 小 o 上 / 下 / 双 / 任意小相对界 Asymptotic bounds
c,n₀ 见证 固定比例与阈值 Witness
成本模型 规模与收费操作 Cost model
最坏 / 最好 / 平均 极大 / 极小 / 分布成本 Worst / best / average case
递推 / 递归树 小成本方程 / 层记账 Recurrence / recursion tree
主定理 有条件等比递推分类 Master theorem
摊还 序列总成本按操作分配 Amortised cost
时钟分辨率 有意义计时尺度 Clock resolution