阅读 · 推演 · 自测 · 理解
WEEK 01 · STUDY NOTES

COMP3121 Week01 学习笔记

Welcome 与 Foundations:复杂度、数据结构、归约、答案二分与递归

2026 T3 Welcome · PDF p1–39 · 2026-09-17 哈希复核一致2026 T3 Foundations · PDF p1–47 · Lecture 2(Lecture 3 待补)
来源: 2026 T3 Welcome · PDF p1–39 · 2026-09-17 哈希复核一致, 2026 T3 Foundations · PDF p1–47 · Lecture 2(Lecture 3 待补)
Module

01 本周地图:先设计,再证明,再计时

算法 / 主题:复杂度分析
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

输入:一个带约束的问题 → 处理:抽象输入输出、设计步骤、证明正确、分析代价 → 输出:能清楚解释且满足要求的算法。COMP3121 的核心是解决问题与沟通,不是把更多代码写出来。

学习模块你要能回答
题目抽象输入是什么?输出是什么?合法条件与性能目标是什么?
正确性为什么不会漏解、误报、死循环?
复杂度规模如何定义?分析的是最坏、最好还是期望情况?
数据结构与二分哪一种操作需要加速?什么条件允许删除一半候选?
归约(Reduction)怎样转换输入、对应解、保留目标值并调用已有算法?
递归建模怎样缩小到同类问题,在哪里停止?
Module

02 从故事到算法:Geese in a Trench Coat

算法 / 主题:综合方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

右侧后缀查找、完整正确性证明与小数值例为讲解补充,讲义原例是鹅题。

来源:Welcome p13–19。n 只鹅的身高 h₁,…,hₙ 都是正整数,目标总高度为 T。判断是否存在两个不同下标 i < j,使 hᵢ + hⱼ = T;要求最坏时间 O(n log n)。故事里的风衣并不影响算法,真正重要的是“两个不同对象”“精确相等”和“最坏时间”。

方案明确步骤分析
只说寻找另一只鹅没有说明如何找描述不完整,不能据此算复杂度
枚举每一对对每个 i,检查 j > i 的每只鹅正确,但最坏 Θ(n²)
归并排序 + 二分排序后,对每个 i,在 i 右边的后缀查找 T − h[i]排序 O(n log n),n 次查找各 O(log n),合计 O(n log n)

自然语言描述:先用归并排序将身高按非递减顺序排列。依次选取每一个位置,计算距离目标总高度还差多少,并在该位置之后的已排序部分用二分查找寻找这一高度。找到则返回“存在”;所有位置都失败才返回“不存在”。这里只需判断是否存在,因此排序后无需保留原下标;若要求返回原来的鹅,应同时保存原下标。

正确性分两边:若算法返回“存在”,它确实找到了两个不同位置且和为 T,所以没有误报。若存在解,设这对鹅在排序后的较小位置为 i,另一位置一定在它右侧;处理 i 时,二分必能找到 T−h[i],所以不会漏报。有限个 i、每次二分区间严格缩小,故会终止。

合并时间用加法,不用乘法:O(n log n) + n·O(log n) = O(n log n)。在 n=8 的粗略规模模型中,排序量级 8×3,8 次搜索量级 8×3,两段相加是48个模型单位;不是精确机器操作数。用哈希表可能得到期望 O(n),但不能直接声称满足题目的最坏 O(n log n) 保证。

两鹅配对:比较三种算法

Welcome p13–19。暴力与排序后二分来自当前课件;哈希配对是用于比较期望性能的辅助方法。每一步是一次比较或一次数据更新。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

排序子程序:拆分、插入与分区

归并排序在 Welcome 鹅题中使用;插入排序与快速排序在 Foundations 的复杂度讨论中提及。这里展开为辅助讲解,不新增旧课件内容。快速排序固定选末尾 pivot,展示普通实现的最坏退化;归并每步为拆分、取一个元素或写回。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Module

03 正确性证明:覆盖所有合法输入

算法 / 主题:证明方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

不变量四步表为讲解补充,用于展开Welcome的正确性论证要求。

来源:Welcome p4–6、p19。测试失败能否定算法;测试通过只说明这些样例没有推翻它。证明必须解释任何合法输入都成立。先设计再编码的流程是:读题 → 设计 → 检查正确性与效率 → 必要时重新设计 → 实现;否则容易陷入不断补丁、却没有解决思路错误的循环。

证明责任要回答的问题二分示例
初始化开始时承诺成立吗?目标若存在,就在初始区间中
保持一次操作为什么不破坏承诺?利用有序性,只排除不可能等于目标的一侧
终止什么非负量严格变小?候选区间长度
输出停止时为什么就是正确答案?相等则找到;区间空则不可能再有目标
Module

04 复杂度:O、Ω、Θ 不是三种输入情况

算法 / 主题:复杂度分析
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

形式化常数界及代入计算为补充解释;课件的三个增长率例子已在正文标明。

来源:本学期 Foundations PDF p3–12。先确定 n 是什么,再选定要分析的运行时间函数 f(n)。最坏、最好、期望描述输入情况或概率模型;O、Ω、Θ描述上界、下界、紧确界,这是两条不同维度。

符号含义(对充分大的 n)例子
f(n)=O(g(n))存在固定 c>0、n₀,使所有 n≥n₀ 都有 0≤f(n)≤c·g(n)2n+7 是 O(n),也是 O(n²)
f(n)=Ω(g(n))存在固定 c>0、n₀,使所有 n≥n₀ 都有 f(n)≥c·g(n)≥02n+7 是 Ω(n)
f(n)=Θ(g(n))同时满足上界与下界2n+7 是 Θ(n)

上述形式化不等式是对课件口头定义的背景补充:n 为输入规模;f 为待分析代价;g 为比较函数;c、n₀ 是不能随 n 改变的常数。用途是证明增长率,而非测量秒数。例:n≥1 时 2n ≤ 2n+7 ≤ 9n,取下界常数2、上界常数9、n₀=1,即得 Θ(n)。代入 n=10,20≤27≤90。

上下界可互换方向:f(n)≤c·g(n) 等价于 g(n)≥(1/c)·f(n),因此 f=O(g) 推出 g=Ω(f)。例:100n≤100·n,则 n≥0.01·100n。不要把“函数 f 的下界”自动升级为“整个问题对所有算法的下界”。找无序数组最大值必须查看每个元素,否则未看的元素可能更大,这才支持问题需要 Ω(n) 的论证。

组合规律使用条件与例子常见误区
顺序相加f₁=O(g₁)、f₂=O(g₂) ⇒ f₁+f₂=O(g₁+g₂)=O(max(g₁,g₂))。非负代价满足 g₁+g₂≤2max(g₁,g₂)。n=10 时 n²+n=110≤200。先排序再扫描是加法
重复相乘f₁=O(g₁)、f₂=O(g₂) ⇒ f₁f₂=O(g₁g₂)。外层 n 次,每次内层 n 次,n=10 时100次。两层循环不一定 Θ(n²),要看实际执行次数
常数倍不变固定 λ 下 λf=O(g),若 f=O(g)。λ=3、f=n,则3n仍线性。λ 若等于 n,就不是常数了

求和、乘积规则对非负函数的 Ω 与 Θ 也成立。插入排序最好情况线性、最坏情况二次;普通 BST 操作取决于树高。写 O 不是强制在说最坏情况,写 Ω 也不是强制在说最好情况。

渐近上界的三个例子:系数、松上界和高次项。请对照正文中的数值代入。
Foundations · PDF p6 · 查看原页

渐近上界的三个例子:系数、松上界和高次项。请对照正文中的数值代入。

线性扫描:最大值与顺序查找

最大值用于理解 Foundations p8 的线性下界。顺序查找是比较基准;每步读取一个位置,数组下标从0开始。空数组无最大值。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Module

05 对数:为什么“每次减半”只需少量步骤

算法 / 主题:复杂度分析
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

数值代入、减半次数与精确检查次数为补充推导。

来源:本学期 Foundations PDF p14–15。logₐb 表示 a 需要几次幂才能得到 b:n=logₐb ⇔ aⁿ=b,a,b>0 且 a≠1。例如 log₂8=3,因为2³=8。算法增长率比较通常取固定底数 a>1。

公式与变量数值代入用途与易错点
a^(logₐn)=n;n>02^(log₂8)=8指数和同底对数互相抵消
logₐ(mn)=logₐm+logₐn;m,n>0log₂(4×8)=2+3=5乘积可拆成和;log(m+n) 不能这样拆
logₐ(nᵏ)=k·logₐn;n>0log₂(8²)=2×3=6k 是指数,不是对数底数
logₐx=logᵦx/logᵦa;a,b,x>0,a,b≠1log₄16=log₂16/log₂4=4/2=2固定底数时分母与 x 无关
logₐn=Θ(logᵦn);固定 a,b>1log₂64=6,log₈64=2,相差3倍渐近记号可省底数;精确数值不可随意换底

减半计数(背景推导):经过 k 次减半后,候选量约为 n/2ᵏ。令 n/2ᵏ≤1,得 k≥log₂n。n=16 时4次减半即可从16缩到1,但还可能需要检查最后一个元素。标准二分在 n≥1 时最多 floor(log₂n)+1 次中点检查,空数组为0次。

Module

06 数据结构:按需要的操作选工具

算法 / 主题:数据结构
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

频率表和缺失数是Foundations原题;计数数组的数值、缺失数求和解答、建堆分层计数为补充。

来源:本学期 Foundations PDF p17–21。结构选择决定性能保证。n 为元素数,h 为树高;期望代价不能当成最坏代价。

结构组织方式操作代价适合与限制
Hash tablekey 经哈希函数映射到桶;冲突可用链表处理查找、更新、插入、删除:课件列期望 O(1),最坏 O(n)快速按键访问;期望常数依赖散列与负载假设,不能当最坏常数
普通 BST左子树键小于节点、右子树键大于节点查找、插入、删除 O(h)有序查找;递增插入可能成为长链
Self-balancing BST用旋转等方式维护平衡约束h=O(log n),上述操作最坏 O(log n)需要有序与最坏保证;本课无需指定某种旋转方案
Max heap完全二叉树;父节点≥子节点建堆 O(n);看最大值 O(1);删最大值、插入 O(log n)优先队列;不保证左右子树间有序,不能像 BST 那样查任意键

树高按边数计:完美二叉树 n=15 时 h=3,而15节点单链 h=14。课件的 h≈log₂n、h≈n 表示量级,不是精确等式。堆“完全”约束树的形状,“父≥子”约束数值,两者都需要。

缺失数原题(Foundations p20):1..n 中恰有一个数缺失,余下各出现一次。扫描标记后找未出现者,O(n)时间、O(n)空间。补充解答:缺失值=n(n+1)/2−ΣA[i],在单位代价且整数可容纳的模型下只需O(1)额外空间;n=5,A=[1,2,4,5],15−12=3。若允许重复或缺多个数,该结论不再适用。

课件最大堆:树形与数组一一对应。课件用 1-based 下标,下方演示用 0-based。
Foundations · PDF p17 · 查看原页

课件最大堆:树形与数组一一对应。课件用 1-based 下标,下方演示用 0-based。

最大堆:从数组到树

Foundations p17。建堆采用自底向上 heapify;其他操作先显示建堆过程,再执行选定操作。建堆与后续操作的成本分开计算,演示步数不等于复杂度。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

课件 BST:左子树所有键更小,右子树所有键更大。树形与堆的约束不同。
Foundations · PDF p18 · 查看原页

课件 BST:左子树所有键更小,右子树所有键更大。树形与堆的约束不同。

BST 与平衡树:看清查找路径

Foundations p18–19。初始序列按顺序插入,重复键忽略。普通 BST 展示查找、插入与删除;AVL 作为旋转辅助例,每步完整插入并恢复平衡(不是逐条机器指令)。课件无需指定 AVL 方案。可把初始序列改成1,2,3,4,5,比较树高。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

哈希表操作成本对照:期望 O(1) 与最坏 O(n) 必须区分。
Foundations · PDF p21 · 查看原页

哈希表操作成本对照:期望 O(1) 与最坏 O(n) 必须区分。

哈希表:让冲突变得可见

Foundations p21。使用5个桶和链地址法;键的初始关联值为1,update将它加一。这是展示冲突的自编小函数,不用它证明随机散列的期望复杂度。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

频率表与缺失数的原题,注意 m、n 分别表示输入数量与值域大小。
Foundations · PDF p20 · 查看原页

频率表与缺失数的原题,注意 m、n 分别表示输入数量与值域大小。

频率表与缺失数:把值映射到位置

Foundations p20。频率表允许重复;缺失数要求1..n中恰好缺一个,其余出现一次。求和法是对课件挑战题的辅助解答,采用可容纳整数的单位代价模型。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Module

07 二分查找:删掉的部分必须不可能含答案

算法 / 主题:二分查找
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

JavaScript代码与可编辑输入演示为自学补充;讲义使用自然语言描述。

来源:本学期 Foundations PDF p22–24。输入必须已排序;下面用非递减数组解释如何安全排除。 设A为数组、x为目标、l与r为当前闭区间端点,m=l+floor((r−l)/2)为中点。例如l=0、r=6时m=3。

  1. 若 l>r,候选集已空,返回不存在。
  2. 取中点 m。如果 A[m]=x,返回 m。
  3. 若 A[m]<x,则从 l 到 m 的值都≤A[m]<x,全部可排除,令 l=m+1。
  4. 若 A[m]>x,同理排除 m 到 r,令 r=m−1。重复检查。

每次不命中都排除中点并严格缩小区间,所以不会死循环。最坏时间 O(log n),下面迭代实现只保存几个变量,辅助空间 O(1)。课件递归版本还会使用 O(log n) 调用栈。重复元素不影响“找任意一次出现”,但寻找第一个位置需要修改逻辑。

function binarySearch(A, x) {
    // Precondition: A is sorted in nondecreasing order.
    let l = 0, r = A.length - 1;
    while (l <= r) {
        const m = l + Math.floor((r - l) / 2); // Midpoint
        if (A[m] === x) return m;
        if (A[m] < x) l = m + 1; // Keep the right candidate interval
        else r = m - 1; // Keep the left candidate interval
    }
    return -1; // Empty candidate interval
}

二分查找:迭代与递归

Foundations p22–24。输入必须非递减有序;空输入表示空数组。高亮是当前比较位置,淡色是已排除位置;递归模式显示调用栈。这里找任意一次出现。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Module

08 二分答案:把最优化变成单调判定

算法 / 主题:二分查找
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

Maximum Median及[1,2,2,4,5]、k=3是讲义原例;3天处理10件工作是自编类比。交换论证、上中点更新及k=0边界是补充展开。

来源:本学期 Foundations PDF p33–43。判定问题问“目标 t 能否达到”,最优化问题问“最大的可行 t”或“最小的可行 t”。把判定结果记作 f(t)∈{0,1},先证明单调性:000…111 找第一个1;111…000 找最后一个1。方向不同,不能机械沿用同一边界更新。

在上面“最小容量”的例子中,维护可能答案的整数范围[L,R],取下中点M=floor((L+R)/2)。若M可行令R=M;若不可行令L=M+1。结束时验证候选可行。全不可行时报告无解,不能把最后一个端点直接当答案。

复杂度:候选答案集合记为 A,范围大小 |A|,每次判定代价 C,则总成本 O(C log |A|),另加建立数据或边界的代价。例如范围1..16、判定每次扫描100个项目,约4轮×100个项目=400个模型单位。不能把判定过程免费算成 O(1),也不要把 |A| 与输入元素数 n 混为一谈。

先判定,再优化:令 C(t)=Σ(i=n..2n−1)max(t−A[i],0)。A[i]是原有序数组第i个数,t是目标中位数,k是可用加一次操作的总次数;C(t)是把最大的n个数都抬到至少t所需的最小成本。f(t)=1 ⇔ C(t)≤k。max保证已经够大的元素成本为0,不能用负数抵消其他元素的缺口。

为什么只看最大的n个数?中位数至少t,当且仅当至少n个数≥t。任意选择n个要抬升的数时,若选了较小的x而没选较大的y,则以y替换x不会增加max(t−值,0)的成本。不断交换可得到最大的n个数,因此这个和既是必要的最小成本,也是可直接实现的充分条件。若尚有剩余操作,继续增加任意数不会降低中位数,所以“恰好k天”也由C(t)≤k判定。

目标 t最大的n个数:[2,4,5] 的缺口C(t)k=3时
20+0+00可行
31+0+01可行
42+0+02可行
53+1+04不可行

二分区间为[A[n],A[n]+k]:不做增长就能保持原中位数;要让中位数超过A[n]+k,至少要把原来前n个数中的一个抬高超过k,不可能。C(t)随t不减,所以可行性为111…000。维护L可行、最优值在[L,R]:取上中点M=ceil((L+R)/2);若可行令L=M,否则令R=M−1。L<R时上中点大于L,每轮区间严格缩小;结束返回L。

讲义给出枚举O(kn)、二分O(n log k),这里n是上半段元素个数、k是操作预算,不是数组长度。按边界补全:k=0直接返回A[n];k≥1用O(n log(k+1))表示。每次成本判定O(n),候选有k+1个。若输入未排序,另加O(N log N),N=2n−1;本题输入已排序,不应凭空增加排序步骤。

Maximum Median 原例:[1,2,2,4,5],k=3。只增加原来的中间元素不等于一直增加中位数。
Foundations · PDF p35 · 查看原页

Maximum Median 原例:[1,2,2,4,5],k=3。只增加原来的中间元素不等于一直增加中位数。

判定公式:把最大的 n 个数分别抬到目标 t;只计算正缺口。
Foundations · PDF p38 · 查看原页

判定公式:把最大的 n 个数分别抬到目标 t;只计算正缺口。

最大中位数:先判定,再优化

Foundations p35–41。输入为奇数长度的有序数组,预算k在0..20之间;逐项累加正缺口,然后更新答案区间。可与枚举所有目标比较判定调用量。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

最小可行值:每日处理容量

正文自编类比,帮助区分000…111与111…000。总量可为0,每天处理整数件,任务可任意分配。每步一次判定。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Module

09 归约:改造输入,复用已有算法

算法 / 主题:归约
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

彩色路径与图中顶点来自讲义;双向对应证明、图规模计数及适用边界是补充展开。

来源:Foundations PDF p26–32、p46。输入 → 转成已知问题的实例 → 调用标准算法 → 把结果解释回原问题。这是本讲的解题策略;这里不提前套用后续不可解问题模块的技术定义。归约不是只说一个算法名称,要讲清转化、对应关系和额外成本。

构造H=(V,E′),其中E′={(a,b)∈E | color(a)≠color(b)}。V为原顶点集合,E为原边集合,color为顶点颜色;只删同色端点之间的边,保留所有顶点,包括孤立点。对H从u运行BFS,返回v的距离;不可达则报告不存在。BFS逐层扩展,每层增加一条边,因此适用于无权最短路。

图的读法(PDF p29、31):蓝色为u,c,红色为a,d,绿色为b,e,v。删去u–c、a–d、b–v;其他边保留。原图有u→b→v,长度2,但b与v同为绿色,不合法;过滤后可走u→a→c→d→v,长度4。颜色可以重复,只要不连续重复。

正确性要双向:G中每条合法路径的每条边都异色,所以完整保留在H;H中每条路径的边都来自G且端点异色,因此在G合法。路径长度没有改变,候选路径集合及长度一致,故H中的最短距离等于原题最优值。只证明H的路径合法还不够,还需证明没有删掉原题的合法解。

复杂度用邻接表计:扫描顶点与边构造H为O(|V|+|E|),BFS为O(|V|+|E′|),|E′|≤|E|,总O(|V|+|E|)。课件图有7个点、10条边,删3条后7条;成本模型可看作构造约7+10,再搜索约7+7,两个阶段相加。另建图与队列空间O(|V|+|E|)。加权边不能直接以普通BFS求最小权重;路径依赖历史的限制也未必能只靠删边表达。

原图与两种路径:合法彩色路径长 4;忽略颜色限制时最短路径长 2。
Foundations · PDF p29 · 查看原页

原图与两种路径:合法彩色路径长 4;忽略颜色限制时最短路径长 2。

原图 G → 新图 H:删除 u–c、a–d、b–v;虚线是被删掉的同色边。
Foundations · PDF p31 · 查看原页

原图 G → 新图 H:删除 u–c、a–d、b–v;虚线是被删掉的同色边。

彩色路径:删边归约 + BFS

完全对应 Foundations p29、31 的7点10边图。先删同色边再BFS;也可切换到忽略颜色的BFS比较长度。点旁显示颜色文字,队列先进先出,首次发现时记录距离。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Module

10 递归与枚举:调用熟悉过程,也要算总成本

算法 / 主题:递归
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

回文与Hamiltonian Path是讲义原题;radar/abca、下标实现成本、N=5排列计数是补充。

来源:Foundations PDF p44–47。递归把大实例转成更小的同类实例:写出等价条件 → 规定基本情况 → 确认规模严格减小 → 合并答案。与归并排序同属“分解问题”的大类,但回文每次只留下一个子问题,并不是每次分成两半。

回文测试原题:给定长度为n的字符串s,判断是否正反相同。长度0或1直接为真;其余情况,首尾不等为假,首尾相等时结果等于内部子串的回文结果。用端点写为P(l,r)=(s[l]=s[r])且P(l+1,r−1),基本情况l≥r为真;l,r为当前区间端点。

补充工作量分析:用两个下标访问原串、不复制子串时,T(n)=T(n−2)+O(1),最多floor(n/2)次字符比较,总O(n)时间,直接递归调用栈O(n)空间。若每次复制内部字符串,额外字符复制量为(n−2)+(n−4)+…,可能变成O(n²);不能只数递归次数。

回文:收缩区间与返回调用

Foundations p45。radar与abca为自编测试;空串、单字符为真。按字符比较,空格与大小写参与判断。递归模式展示调用与返回;原字符串不复制,仅移动下标。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Hamiltonian Path:枚举排列并验边

Foundations p47 给出问题与枚举思路,此5点图是自编示例。固定起终点,枚举内部顶点的6种排列,每条边逐一检查。单个成功轨迹不替代一般证明。

先预测下一步,再点击验证。更改输入会重置本演示;回退恢复完整快照。演示仅辅助理解,不替代证明。

Module

11 自测:先独立解释,再展开答案

算法 / 主题:综合方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

1. 2n+7=O(n²) 是否正确?是否说明它是二次增长?

查看答案与推理

正确,这是一个较松的上界;紧确增长率为 Θ(n),O(n²) 不等于 Θ(n²)。

2. 只有一只高度5的鹅,T=10。搜索整个数组会出什么问题?

查看答案与推理

可能把它自己当成配对对象。限定只搜索当前下标右侧可避免复用;两个高度5的不同对象才是合法配对。

3. 二分中 A[m]<x 为什么可以丢掉 m 左侧?

查看答案与推理

因为数组非递减,左侧每个值都≤A[m]<x。有序性才是排除依据,中点位置本身不是。

4. 算法做 n² 轮,所以一定是 O(n²) 时间吗?

查看答案与推理

还需每轮 O(1)。若每轮扫描 n 个元素,总时间可能 O(n³)。

5. f(x) 在1..6依次为0,1,0,1,1,1,可否直接二分最小可行值?

查看答案与推理

不可以:从1又退回0,违反单调性,排除半区时可能丢掉更早的解。

6. 彩色最短路只需证明 H 的路径合法,就算证明完整了吗?

查看答案与推理

不够。还须证明原图每条合法路径都留在H,且长度不变,才能推出最短距离相等。

7. A=[1,2,2,4,5]、k=3,目标中位数5的最低成本是多少?

查看答案与推理

最大的3个数为2、4、5,成本为3+1+0=4,大于3,因此不可行;目标4成本2,可行。

8. m个值均在1..n,直接频率表的成本是否总是O(m)?

查看答案与推理

初始化n个计数器与遍历m个输入,总O(n+m)。课件有m>n,才可简化为O(m)。

9. 回文递归每层只做一次首尾比较,为什么实现仍可能是O(n²)?

查看答案与推理

若每层复制内部子串,还需复制n−2、n−4等长度。用原串与两个下标才避免这部分二次成本。

Module

12 本学期学习安排与复习清单

算法 / 主题:综合方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

本节 PPT 来源 · 点击回查

安排摘自Welcome;复习清单与术语表为笔记归纳,不代表任务的实时完成状态。

以下来自2026-09-17重新下载且哈希一致的2026 T3 Welcome;课件中的一般安排不等于某项任务的实时状态。p27–30:Portfolio 占60%,Final Exam 占40%;期末门槛为40%。任务在 Formatif 按周发布,选择目标等级并根据反馈改进。书面任务通常在当周周一发布、周日首次提交;第 x 周的口头展示在第 x+1 周自己的 lab 结束前完成。

p27–29:Portfolio 的 PS/CR/DN/HD 层级权重为55/15/15/15,最终由导师整体评价,也考虑表达、展示及部分进展。任务类型 W/M/D/E 的相对权重为5/2/10/10;Engagement 在自己的排课 lab 参与,9次中取最好7次。这些相对权重不是课程总分的直接百分比。

p32–34:第6周不授课,第4周周一停课;lab 中与单个学生讨论最多8分钟。课件明确 Portfolio 和考试不允许使用生成式 AI,Portfolio 允许简单拼写与单词/短语翻译辅助。本页用于理解课程与自主复习,不作为提交答案。具体任务要求以老师发布内容为准。

  • 能从故事中提取输入、输出、限制与性能目标。
  • 能用自然语言解释两鹅配对,并处理重复身高和同一个对象不可复用。
  • 能区分输入情况与 O/Ω/Θ,能给出常数界证明。
  • 能写出对数定义、三条运算法则和换底公式并代入计算。
  • 能解释哈希表、BST、平衡BST、堆各自保证什么。
  • 能手动执行二分,解释为何删除区间安全,以及为什么会终止。
  • 能证明二分答案所需的单调性,并计入每次判定成本。
  • 能用频率表计数,并把初始化值域的成本算进去。
  • 能用路径双向对应及长度不变证明彩色最短路归约。
  • 能解释最大中位数的最低成本、单调性及最后一个可行值。
  • 能写出回文的基本情况,并区分递归次数与子串复制成本。
English term中文含义
Algorithm design / analysis设计解决步骤 / 分析正确性与代价
Invariant每轮开始或结束时保持成立的性质
Counterexample足以推翻普遍断言的一个合法实例
Asymptotic bound关注充分大规模时的增长率界
Worst case / expected最坏输入的代价 / 在明确概率模型下的期望代价
Monotonicity判定结果随参数只沿一个方向变化;可为先假后真或先真后假
Reduction把问题实例转成已有算法能解决的实例,并保留解或目标值
Decision / optimization判定是否可行 / 寻找最好可行结果
Base case无需继续递归就能直接回答的最小情况

核对本学期原课件:Welcome · 鹅题 PDF p13 · Foundations · 频率表 p20 · 彩色路径 p28 · 中位数公式 p38 · 回文 p45