阅读 · 推演 · 自测 · 理解

三道题,分别要你做什么?

按小问读懂要求,再动手观察,最后用自己的话写出理由。

阅读顺序:先看“题目要求”和“要写进答案的内容”,卡住时再展开提示。所有提示和演示都是学习辅助,不能代替对所有合法输入的证明。本页依据你提供的三份 PDF;题号不等于官方周次,未额外推断课程安排。
01 / DESIGN AN ALGORITHM

1.2 · Searching in a Sorted Grid

有序网格 + 目标 k → 每次排除一整行或一整列 → 存在 / 不存在

先理解对象

A[1..n,1..n] 是 n 行 n 列的整数网格。每行从左到右严格递增,每列从上到下严格递增。k 是要寻找的整数;只需判断是否出现,不要求枚举全部位置。

注意:严格递增针对同一行或同一列;不同行不同列的值仍可能重复。输入共有 n² 个格子,但本题要求的查找时间是 O(n),不是 O(n²)。

必做 · 简短理由

1.2 (a)(i) · 右上角大于目标

完整原题 · 英中对照

来源:COMP3121_9101-1.2.pdf,第 1 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(a) Suppose we compare the top-right entry A[1][n] of the grid to k. If they are equal, then we are done. Otherwise, for each of the following cases, determine which parts of the grid A definitely cannot contain k. You should provide brief reasoning. (i) Case 1: A[1][n] > k.
中文翻译 · 本小问
(a) 假设我们将网格右上角元素 A[1][n] 与 k 比较。如果两者相等,任务便已完成。否则,对于以下每种情况,判断网格 A 的哪些部分一定不可能包含 k,并给出简短理由。 (i) 情况 1:A[1][n] > k。
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
A grid is sorted if each of its rows and columns is strictly increasing. For example, the following two-dimensional grid is sorted. 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 Let A[1..n,1..n] be a sorted n × n grid. Given an integer k, our task is to decide if k appears somewhere in A.
中文翻译 · 共同题干
如果一个网格的每一行和每一列都严格递增,我们就称这个网格是有序的。例如,下面的二维网格是有序的: 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 设 A[1..n,1..n] 是一个有序的 n × n 网格。给定整数 k,我们的任务是判断 k 是否出现在 A 的某个位置。
展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 算法设计:确保算法描述明确、清楚。 • 用文字而不是伪代码描述算法。 正确性:应力求书写清晰,并给出恰当的推理。 • 清楚定义证明中使用的所有符号。 • 确保逻辑连贯、细节易于理解(即使对学生而言)。你应当向实验课指导老师请教如何组织论证。 • 如果使用已知结论,应清楚陈述这些结论,并说明它们为什么与你的论证有关。 • 如适用,确保图示清楚。 • 确保清楚陈述结论。 建议答案总长度:约一页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

比较 A[1][n] 与 k,已知 A[1][n] > k。指出整个网格中一定不可能包含 k 的区域。

要写进答案的内容

写清排除哪一列,并用列递增说明为什么整列都不可能。不能仅说“向左走”。

第一层提示 · 从哪里想

当前右上角是该列最小值;其他位置与 k 的关系是否已经确定?

第二层提示 · 展开推理骨架

A[i][n] ≥ A[1][n] > k,因此最后一列都不可能等于 k。其他区域不能仅凭这一次比较全部排除。

作答后查看参考解释

第一行可能含有 7;它的其他数小于 8,不代表小于 7。

必做 · 简短理由

1.2 (a)(ii) · 右上角小于目标

完整原题 · 英中对照

来源:COMP3121_9101-1.2.pdf,第 1 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(a) Suppose we compare the top-right entry A[1][n] of the grid to k. If they are equal, then we are done. Otherwise, for each of the following cases, determine which parts of the grid A definitely cannot contain k. You should provide brief reasoning. (ii) Case 2: A[1][n] < k.
中文翻译 · 本小问
(a) 假设我们将网格右上角元素 A[1][n] 与 k 比较。如果两者相等,任务便已完成。否则,对于以下每种情况,判断网格 A 的哪些部分一定不可能包含 k,并给出简短理由。 (ii) 情况 2:A[1][n] < k。
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
A grid is sorted if each of its rows and columns is strictly increasing. For example, the following two-dimensional grid is sorted. 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 Let A[1..n,1..n] be a sorted n × n grid. Given an integer k, our task is to decide if k appears somewhere in A.
中文翻译 · 共同题干
如果一个网格的每一行和每一列都严格递增,我们就称这个网格是有序的。例如,下面的二维网格是有序的: 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 设 A[1..n,1..n] 是一个有序的 n × n 网格。给定整数 k,我们的任务是判断 k 是否出现在 A 的某个位置。
展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 算法设计:确保算法描述明确、清楚。 • 用文字而不是伪代码描述算法。 正确性:应力求书写清晰,并给出恰当的推理。 • 清楚定义证明中使用的所有符号。 • 确保逻辑连贯、细节易于理解(即使对学生而言)。你应当向实验课指导老师请教如何组织论证。 • 如果使用已知结论,应清楚陈述这些结论,并说明它们为什么与你的论证有关。 • 如适用,确保图示清楚。 • 确保清楚陈述结论。 建议答案总长度:约一页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

已知 A[1][n] < k,指出一定不可能包含 k 的区域。

要写进答案的内容

明确排除第一行,用行递增写出理由。两种情况分别回答。

第一层提示 · 从哪里想

右上角同时也是该行最大值。

第二层提示 · 展开推理骨架

A[1][j] ≤ A[1][n] < k,因此第一行都不可能包含 k。

作答后查看参考解释

看剩余矩形的右上角,即原网格 A[2][n]。

必做 · 算法与正确性

1.2 (b) · 设计 O(n) 查找

完整原题 · 英中对照

来源:COMP3121_9101-1.2.pdf,第 1 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(b) Hence or otherwise, design an O(n) algorithm that determines whether k appears in A and justify that it is correct. Hint. After making a query to A[1][n], what are the dimensions of the search space? How could you use that information to construct the algorithm?
中文翻译 · 本小问
(b) 利用上述结论或其他方法,设计一个 O(n) 算法,判断 k 是否出现在 A 中,并说明该算法为什么正确。 原题提示:查询 A[1][n] 后,搜索空间的维度(行数和列数)是多少?你可以如何利用这一信息构造算法?
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
A grid is sorted if each of its rows and columns is strictly increasing. For example, the following two-dimensional grid is sorted. 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 Let A[1..n,1..n] be a sorted n × n grid. Given an integer k, our task is to decide if k appears somewhere in A.
中文翻译 · 共同题干
如果一个网格的每一行和每一列都严格递增,我们就称这个网格是有序的。例如,下面的二维网格是有序的: 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 设 A[1..n,1..n] 是一个有序的 n × n 网格。给定整数 k,我们的任务是判断 k 是否出现在 A 的某个位置。
展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 算法设计:确保算法描述明确、清楚。 • 用文字而不是伪代码描述算法。 正确性:应力求书写清晰,并给出恰当的推理。 • 清楚定义证明中使用的所有符号。 • 确保逻辑连贯、细节易于理解(即使对学生而言)。你应当向实验课指导老师请教如何组织论证。 • 如果使用已知结论,应清楚陈述这些结论,并说明它们为什么与你的论证有关。 • 如适用,确保图示清楚。 • 确保清楚陈述结论。 建议答案总长度:约一页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

设计判断 k 是否出现在 n×n 有序网格中的 O(n) 算法,并证明正确。

要写进答案的内容

文字写出起点、比较后的操作、相等时的输出、范围耗尽时的输出;解释排除不会丢解,并论证总时间 O(n)。

第一层提示 · 从哪里想

重复 (a):每次都站在剩余矩形的右上角。复杂度数移动次数,而不是格子总数。

第二层提示 · 展开推理骨架

可维护行 r、列 c,从 (1,n) 出发。相等则成功;当前值大于 k 则 c 减一;小于 k 则 r 加一。越界说明无解。关键不变量:若 k 存在,它仍在保留的矩形里。每次排除一行或一列,比较次数最多 2n−1,每步 O(1)。

作答后查看参考解释

每行 O(log n),共 n 行,总计 O(n log n),不能作为本题要求的 O(n) 算法。

选做 · 几何形状解释

1.2 (c) · 从中间开始会怎样?

完整原题 · 英中对照

来源:COMP3121_9101-1.2.pdf,第 1 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(c) (Optional) If we instead began by examining the entry in the middle row and middle column [footnote a], what shape does the remaining search space have? How does this make searching in a two-dimensional grid more difficult than the proposed algorithm in part (b)? Footnote a: or one of the middle rows and columns, if the dimensions are even.
中文翻译 · 本小问
(c)(选做)如果我们改为先检查位于中间行与中间列交点的元素〔脚注 a〕,剩余搜索空间会是什么形状?与 (b) 中提出的算法相比,这为什么会使二维网格搜索更难处理? 脚注 a:如果维度为偶数,可以选择两条中间行之一和两条中间列之一。
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
A grid is sorted if each of its rows and columns is strictly increasing. For example, the following two-dimensional grid is sorted. 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 Let A[1..n,1..n] be a sorted n × n grid. Given an integer k, our task is to decide if k appears somewhere in A.
中文翻译 · 共同题干
如果一个网格的每一行和每一列都严格递增,我们就称这个网格是有序的。例如,下面的二维网格是有序的: 2 3 6 8 4 5 7 10 6 8 9 13 9 11 12 15 设 A[1..n,1..n] 是一个有序的 n × n 网格。给定整数 k,我们的任务是判断 k 是否出现在 A 的某个位置。
展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 算法设计:确保算法描述明确、清楚。 • 用文字而不是伪代码描述算法。 正确性:应力求书写清晰,并给出恰当的推理。 • 清楚定义证明中使用的所有符号。 • 确保逻辑连贯、细节易于理解(即使对学生而言)。你应当向实验课指导老师请教如何组织论证。 • 如果使用已知结论,应清楚陈述这些结论,并说明它们为什么与你的论证有关。 • 如适用,确保图示清楚。 • 确保清楚陈述结论。 建议答案总长度:约一页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

从中间行、中间列的交点开始比较;偶数规模允许任选中间行/列。讨论未排除区域形状及搜索困难。

要写进答案的内容

描述大于/小于目标时能排除的区域,解释剩余范围为何比 (b) 更难统一推进;不要求另造更快算法。

第一层提示 · 从哪里想

中间元素只对左上与右下方向给出统一大小关系,右上和左下不能直接确定。

第二层提示 · 展开推理骨架

若中心值大于 k,可排除以中心为左上角的右下子矩形;小于 k 时排除左上子矩形。剩余区域通常呈 L 形,无法像角落法一样保持一个矩形;相等则已经找到。

作答后查看参考解释

不等于:下一行开头可能小于上一行结尾,不能直接对按行展开的整个数组使用普通二分。

动手看 · 右上角搜索

使用题目中的网格;薄荷绿表示当前比较位置,淡色表示已排除位置。试试 7(存在)、14(不存在)。

一次点击对应一次比较。此样例展示算法,不证明所有输入都正确。

动手看 · 从中间开始搜索

对应 1.2(c)。4×4 网格有四个可选中心。先比较中心,观察剩余区域;之后可以继续单步搜索,或点击任意未排除格子选择下一次比较位置。

薄荷绿:待比较 / 命中;金色边框:刚比较;淡色:已排除。格子内附原始坐标。

为什么不会像一维二分那样只剩一半?

中心值小于 k,只能统一排除其左上区域(含中心所在行的左段和所在列的上段);大于 k,只能统一排除其右下区域。右上、左下与中心没有统一的大小关系,不能一并丢弃。第一次未命中后剩下 L 形;后续可能更不规则。

为便于继续观察,此演示默认在剩余格子的包围矩形中,选最靠近几何中心的候选格;距离相同时优先上方、再左方。这是补充的选点规则,并非题目给定算法,也不声称达到 (b) 要求的 O(n)。每次比较会安全排除至少一个格子,因此有限步内找到目标或排空候选;这里的比较次数不等于程序总运行时间。

建议依次试:中心 (2,2),目标 7(排除左上)、目标 4(排除右下)、目标 5(直接命中)、目标 14(无解)。回看右上角法,比较两者的剩余区域形状。

02 / PROVE THE GIVEN ALGORITHM

1.3 · Geese in a Trenchcoat II

正整数身高 + 目标 H → 已给定的排序和双指针算法 → 两只不同鹅 / 无解

这题主要让你写证明

先将身高按非递减顺序排列。红帽位于左端 l,蓝帽位于右端 r。和小于 H 就右移红帽;和大于 H 就左移蓝帽;相等时报告配对;两帽重合时无解。必须先保证 l<r,不能用同一只鹅两次。

符号:h_l 是排序后第 l 只鹅的身高;[l,r] 是包含两端的候选下标范围;H 是目标总身高。不同鹅可以等高。

题目已经解释了“原本无解时算法会报告无解”。你要补上“原本有解时一定找到”的论证。题目没有另设编程或复杂度小问;作为背景,排序通常 O(n log n),指针扫描 O(n),不要把整个流程说成 O(n)。

原文 (a) 有 “contained in H” 的不清晰表述;结合紧接着的 (i)/(ii),这里按当前候选区间 [l,r] 理解。H 本身仍是目标身高,不是集合。

必做 · 不等式证明

1.3 (a)(i) · 为什么可以去掉左端?

完整原题 · 英中对照

来源:COMP3121_9101-1.3.pdf,第 2 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(a) Our motivation here is to show that once we have moved our hats to l and r respectively, then the only possible pairs of geese that could have height H must be in H. We can show this in the following steps: (i) Show that if h_l + h_r < H, then every pair in [l,r] that could sum to H is contained in [l+1,r]. That is, excluding goose l from the search space discards no satisfying pairs.
中文翻译 · 本小问
(a) 这里的目标是证明:当两顶帽子分别移动到 l 和 r 后,所有可能使身高之和等于 H 的鹅对,都必须在 H 中。我们可以通过以下步骤证明: 【译注:原文写作 “in H”,但 H 是目标身高;结合后续小问,应理解为候选区间 [l,r] 内。】 (i) 证明:如果 h_l+h_r<H,那么 [l,r] 内每一对身高之和可能等于 H 的鹅都包含在 [l+1,r] 中。也就是说,从搜索空间排除第 l 只鹅,不会丢弃任何满足条件的配对。
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
Suppose we are given an integer H and a set of n geese, where goose l has a positive integer height h_l. You must determine whether there exists a pair of distinct geese i,j (that is, i ≠ j) such that h_l + h_r = H. In the welcome lecture, a binary search algorithm was presented to solve this problem. Now, we will study the two-pointer method. Consider the algorithm below. Sort the heights of the geese in non-decreasing order. Put a red hat on the shortest goose and a blue hat on the tallest goose. Then, • if the hatted geese have total height less than H, move the red hat one space to the right; • if the hatted geese have total height greater than H, move the blue hat one space to the left; and • if the hatted geese have total height equal to H, report this pair as the solution. If a single goose ever has both hats at once, report that there is no solution. In this problem, we formalise a proof of correctness for the proposed algorithm. Suppose goose l has the red hat and goose r has the blue hat. Firstly, suppose that there is no pair of geese l < r such that h_l + h_r = H. We claim our algorithm works in this situation. This holds since our algorithm proceeds by replacing l with l + 1, or r with r − 1. Since r − l is a non-negative integer, and at no point does h_l + h_r = H by assumption, eventually l = r. When l = r, one goose is wearing both hats, and the algorithm reports that no such solution exists. We now wish to show the converse: if there is a pair of geese l < r such that h_l + h_r = H, our algorithm always reports such a pair.
中文翻译 · 共同题干
假设给定整数 H 和一组共 n 只鹅,其中第 l 只鹅的身高 h_l 为正整数。你必须判断是否存在两只不同的鹅 i,j(即 i ≠ j),使 h_l + h_r = H。在欢迎课中,已经介绍过解决这一问题的二分查找算法。现在,我们将研究双指针方法。 【译注:原文先用 i,j 指两只鹅,公式却使用 l,r,此处保留该符号不一致;意思是两只不同鹅的身高之和等于 H。】 考虑下面的算法。 将鹅按身高非递减排序。给最矮的鹅戴上红帽,给最高的鹅戴上蓝帽。然后: • 如果戴帽子的两只鹅身高之和小于 H,把红帽向右移动一个位置; • 如果身高之和大于 H,把蓝帽向左移动一个位置; • 如果身高之和等于 H,报告这一对鹅作为解。 如果两顶帽子在任何时候戴到了同一只鹅头上,则报告无解。 在本题中,我们要为上述算法建立形式化的正确性证明。假设第 l 只鹅戴着红帽,第 r 只鹅戴着蓝帽。 首先,假设不存在满足 l < r 且 h_l + h_r = H 的鹅对。我们声称算法在这种情况下能正确工作。理由是:算法每次将 l 替换为 l+1,或者将 r 替换为 r−1。由于 r−l 是非负整数,而且根据假设,任何时候都不会出现 h_l+h_r=H,因此最终 l=r。当 l=r 时,一只鹅同时戴着两顶帽子,算法便报告不存在这样的解。 现在,我们希望证明反过来的情况:如果存在一对满足 l<r 且 h_l+h_r=H 的鹅,算法就一定会报告这样的一对鹅。

原文保留提示:1.3 的 i,j 与 h_l+h_r 符号不一致,且 (a) 使用了 “in H”;未擅自改写。中文解释按两只不同鹅和候选区间理解。

展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 (a) 可以考虑结合不等式、数组已经排序这一事实,以及反证法。 (b) 证明我们从不从搜索空间中移除合法配对。可以考虑使用归纳法或反证法。 建议答案总长度:约一页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

假设当前两只鹅的身高和小于 H。证明当前区间里所有合法配对仍在 [l+1,r] 中。

要写进答案的内容

针对任意可能与左端鹅搭档的 j,证明 h_l+h_j < H。结论是移除 l 不丢掉任何满足条件的配对。

第一层提示 · 从哪里想

右端已经是当前最高的鹅;连与它搭配都不够高。

第二层提示 · 展开推理骨架

对 l

作答后查看参考解释

不够。必须覆盖左端与区间内任意其他鹅的配对,才能安全移除左端。

必做 · 不等式证明

1.3 (a)(ii) · 为什么可以去掉右端?

完整原题 · 英中对照

来源:COMP3121_9101-1.3.pdf,第 2 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(a) Our motivation here is to show that once we have moved our hats to l and r respectively, then the only possible pairs of geese that could have height H must be in H. We can show this in the following steps: (ii) Show that if h_l + h_r > H, then every pair in [l,r] that could sum to H is contained in [l,r−1]. That is, excluding goose r from the search space discards no satisfying pairs.
中文翻译 · 本小问
(a) 这里的目标是证明:当两顶帽子分别移动到 l 和 r 后,所有可能使身高之和等于 H 的鹅对,都必须在 H 中。我们可以通过以下步骤证明: 【译注:原文写作 “in H”,但 H 是目标身高;结合后续小问,应理解为候选区间 [l,r] 内。】 (ii) 证明:如果 h_l+h_r>H,那么 [l,r] 内每一对身高之和可能等于 H 的鹅都包含在 [l,r−1] 中。也就是说,从搜索空间排除第 r 只鹅,不会丢弃任何满足条件的配对。
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
Suppose we are given an integer H and a set of n geese, where goose l has a positive integer height h_l. You must determine whether there exists a pair of distinct geese i,j (that is, i ≠ j) such that h_l + h_r = H. In the welcome lecture, a binary search algorithm was presented to solve this problem. Now, we will study the two-pointer method. Consider the algorithm below. Sort the heights of the geese in non-decreasing order. Put a red hat on the shortest goose and a blue hat on the tallest goose. Then, • if the hatted geese have total height less than H, move the red hat one space to the right; • if the hatted geese have total height greater than H, move the blue hat one space to the left; and • if the hatted geese have total height equal to H, report this pair as the solution. If a single goose ever has both hats at once, report that there is no solution. In this problem, we formalise a proof of correctness for the proposed algorithm. Suppose goose l has the red hat and goose r has the blue hat. Firstly, suppose that there is no pair of geese l < r such that h_l + h_r = H. We claim our algorithm works in this situation. This holds since our algorithm proceeds by replacing l with l + 1, or r with r − 1. Since r − l is a non-negative integer, and at no point does h_l + h_r = H by assumption, eventually l = r. When l = r, one goose is wearing both hats, and the algorithm reports that no such solution exists. We now wish to show the converse: if there is a pair of geese l < r such that h_l + h_r = H, our algorithm always reports such a pair.
中文翻译 · 共同题干
假设给定整数 H 和一组共 n 只鹅,其中第 l 只鹅的身高 h_l 为正整数。你必须判断是否存在两只不同的鹅 i,j(即 i ≠ j),使 h_l + h_r = H。在欢迎课中,已经介绍过解决这一问题的二分查找算法。现在,我们将研究双指针方法。 【译注:原文先用 i,j 指两只鹅,公式却使用 l,r,此处保留该符号不一致;意思是两只不同鹅的身高之和等于 H。】 考虑下面的算法。 将鹅按身高非递减排序。给最矮的鹅戴上红帽,给最高的鹅戴上蓝帽。然后: • 如果戴帽子的两只鹅身高之和小于 H,把红帽向右移动一个位置; • 如果身高之和大于 H,把蓝帽向左移动一个位置; • 如果身高之和等于 H,报告这一对鹅作为解。 如果两顶帽子在任何时候戴到了同一只鹅头上,则报告无解。 在本题中,我们要为上述算法建立形式化的正确性证明。假设第 l 只鹅戴着红帽,第 r 只鹅戴着蓝帽。 首先,假设不存在满足 l < r 且 h_l + h_r = H 的鹅对。我们声称算法在这种情况下能正确工作。理由是:算法每次将 l 替换为 l+1,或者将 r 替换为 r−1。由于 r−l 是非负整数,而且根据假设,任何时候都不会出现 h_l+h_r=H,因此最终 l=r。当 l=r 时,一只鹅同时戴着两顶帽子,算法便报告不存在这样的解。 现在,我们希望证明反过来的情况:如果存在一对满足 l<r 且 h_l+h_r=H 的鹅,算法就一定会报告这样的一对鹅。

原文保留提示:1.3 的 i,j 与 h_l+h_r 符号不一致,且 (a) 使用了 “in H”;未擅自改写。中文解释按两只不同鹅和候选区间理解。

展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 (a) 可以考虑结合不等式、数组已经排序这一事实,以及反证法。 (b) 证明我们从不从搜索空间中移除合法配对。可以考虑使用归纳法或反证法。 建议答案总长度:约一页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

假设当前身高和大于 H。证明所有合法配对仍在 [l,r−1] 内。

要写进答案的内容

针对任意与右端搭配的 i,证明 h_i+h_r > H,再得出移除 r 不丢解。

第一层提示 · 从哪里想

左端已经是当前最矮的鹅;换成其他鹅只会更高或一样高。

第二层提示 · 展开推理骨架

对 l≤iH。包含 r 的配对全不合法。

作答后查看参考解释

可以。要求是鹅不同(下标不同),并不要求身高不同。

必做 · 整体正确性证明

1.3 (b) · 有解就一定找到

完整原题 · 英中对照

来源:COMP3121_9101-1.3.pdf,第 2 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(b) Using the previous parts, prove that, if there exists a pair of geese l < r such that h_l + h_r = H, then the algorithm eventually reports that such a pair exists.
中文翻译 · 本小问
(b) 利用前面各部分的结论,证明:如果存在一对满足 l<r 且 h_l+h_r=H 的鹅,那么算法最终会报告存在这样的一对鹅。
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
Suppose we are given an integer H and a set of n geese, where goose l has a positive integer height h_l. You must determine whether there exists a pair of distinct geese i,j (that is, i ≠ j) such that h_l + h_r = H. In the welcome lecture, a binary search algorithm was presented to solve this problem. Now, we will study the two-pointer method. Consider the algorithm below. Sort the heights of the geese in non-decreasing order. Put a red hat on the shortest goose and a blue hat on the tallest goose. Then, • if the hatted geese have total height less than H, move the red hat one space to the right; • if the hatted geese have total height greater than H, move the blue hat one space to the left; and • if the hatted geese have total height equal to H, report this pair as the solution. If a single goose ever has both hats at once, report that there is no solution. In this problem, we formalise a proof of correctness for the proposed algorithm. Suppose goose l has the red hat and goose r has the blue hat. Firstly, suppose that there is no pair of geese l < r such that h_l + h_r = H. We claim our algorithm works in this situation. This holds since our algorithm proceeds by replacing l with l + 1, or r with r − 1. Since r − l is a non-negative integer, and at no point does h_l + h_r = H by assumption, eventually l = r. When l = r, one goose is wearing both hats, and the algorithm reports that no such solution exists. We now wish to show the converse: if there is a pair of geese l < r such that h_l + h_r = H, our algorithm always reports such a pair.
中文翻译 · 共同题干
假设给定整数 H 和一组共 n 只鹅,其中第 l 只鹅的身高 h_l 为正整数。你必须判断是否存在两只不同的鹅 i,j(即 i ≠ j),使 h_l + h_r = H。在欢迎课中,已经介绍过解决这一问题的二分查找算法。现在,我们将研究双指针方法。 【译注:原文先用 i,j 指两只鹅,公式却使用 l,r,此处保留该符号不一致;意思是两只不同鹅的身高之和等于 H。】 考虑下面的算法。 将鹅按身高非递减排序。给最矮的鹅戴上红帽,给最高的鹅戴上蓝帽。然后: • 如果戴帽子的两只鹅身高之和小于 H,把红帽向右移动一个位置; • 如果身高之和大于 H,把蓝帽向左移动一个位置; • 如果身高之和等于 H,报告这一对鹅作为解。 如果两顶帽子在任何时候戴到了同一只鹅头上,则报告无解。 在本题中,我们要为上述算法建立形式化的正确性证明。假设第 l 只鹅戴着红帽,第 r 只鹅戴着蓝帽。 首先,假设不存在满足 l < r 且 h_l + h_r = H 的鹅对。我们声称算法在这种情况下能正确工作。理由是:算法每次将 l 替换为 l+1,或者将 r 替换为 r−1。由于 r−l 是非负整数,而且根据假设,任何时候都不会出现 h_l+h_r=H,因此最终 l=r。当 l=r 时,一只鹅同时戴着两顶帽子,算法便报告不存在这样的解。 现在,我们希望证明反过来的情况:如果存在一对满足 l<r 且 h_l+h_r=H 的鹅,算法就一定会报告这样的一对鹅。

原文保留提示:1.3 的 i,j 与 h_l+h_r 符号不一致,且 (a) 使用了 “in H”;未擅自改写。中文解释按两只不同鹅和候选区间理解。

展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 (a) 可以考虑结合不等式、数组已经排序这一事实,以及反证法。 (b) 证明我们从不从搜索空间中移除合法配对。可以考虑使用归纳法或反证法。 建议答案总长度:约一页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

利用 (a) 证明:如果原本存在合法配对,给定算法最终会报告一对。题目已提供无解情形的论证。

要写进答案的内容

连接初始范围包含解、每次移动保留解、算法不断推进这三点。解释为何不会错误地在两帽重合时报告无解。

第一层提示 · 从哪里想

可用循环不变量(每轮仍有解)配合终止,或用反证法。归纳和反证是建议,不是必须同时写两种。

第二层提示 · 展开推理骨架

原本存在的合法配对不会被任一步移除。若算法一直不找到,r−l 每次减少一,最终只剩一只鹅;但两只不同鹅组成的合法配对不可能存在于单元素区间,矛盾。

作答后查看参考解释

还需说明终止:r−l 是非负整数,每次未找到时严格减少。有限演示不能代替这个普遍论证。

动手看 · 每次为什么能去掉一端?

下边红线是 l,上边蓝线是 r。单步展示属于补充样例,不是题目新增要求。
03 / TRANSFORM THE PROBLEM

1.4 · Maximum Alignment

整数数组 A → 转化成按相同值分组 → 最大组的原始下标集合 S

Alignment 到底是什么意思?

下标从 1 开始。两个不同下标 i、j 满足 A[i]−A[j]=i−j,就叫 aligned。集合 S 中的任意两个不同下标都要满足这个条件,S 才是 alignment。目标是让 |S|(集合中下标的个数)最大。

例如题目数组 A=[1,4,3,6,5,8,7,1],{2,4,6} 是一个 alignment:A[2]−A[4]=4−6=−2,2−4=−2;另外两对也须满足。题目已说明这组不是最大的。

别混淆:下标不要求连续;输出不是数值之和;不是只找任意合法一对;“最大”指元素个数最多,不是无法再往当前组里加元素就够了。

必做 · O(n log n)

1.4 (a) · 最常见的值及其下标

完整原题 · 英中对照

来源:COMP3121_9101-1.4.pdf,第 1 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(a) Given an array B of length n, design an O(n log n) algorithm to determine the element that appears most frequently in B, and the indices of B containing that element. You may assume that there is exactly one most common value. Briefly justify your algorithm.
中文翻译 · 本小问
(a) 给定一个长度为 n 的数组 B,设计一个 O(n log n) 算法,找出 B 中出现次数最多的元素,以及 B 中所有包含该元素的下标。你可以假设出现次数最多的值恰好只有一个。简要说明你的算法为什么正确。
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
Let A be an array of n integers. We say that a pair of distinct indices i,j is aligned if their difference is equal to the difference of the values at those indices: A[i] − A[j] = i − j. Let S ⊆ {1,...,n} be a subset of indices. We say that S is an alignment of A if, for all i,j ∈ S such that i ≠ j, i and j are aligned. Our task is to find an alignment of A of maximum size. If there are multiple such alignments, it suffices to find a single one. For example, consider the array A = [1,4,3,6,5,8,7,1]. One possible alignment here is {2,4,6}. However, note that this is not a maximum alignment. We will solve this by first solving a simpler problem, and then transforming our original problem into the simpler one.
中文翻译 · 共同题干
设 A 是一个包含 n 个整数的数组。如果两个不同下标 i,j 的差等于这些下标处的数组值之差,即 A[i]−A[j]=i−j,就称这两个下标是对齐的(aligned)。设 S ⊆ {1,...,n} 是一个下标子集。如果对所有属于 S 的不同下标 i,j,i 和 j 都是对齐的,就称 S 是 A 的一个对齐集合(alignment)。我们的任务是找到 A 的一个大小最大的对齐集合。如果存在多个这样的集合,找出任意一个即可。 例如,考虑数组 A=[1,4,3,6,5,8,7,1]。一个可能的对齐集合是 {2,4,6}。但是,请注意它不是最大的对齐集合。 我们将先解决一个更简单的问题,再把原问题转化为这个更简单的问题。
展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 (a) • 简要地用一段文字描述解决该问题的算法。 • 论证算法的正确性,首先概述你具体要证明什么,以及将如何证明。 • 论证算法的时间复杂度。 (b) • 给出方法概述和时间复杂度即可。所需推理很少,因为不必重复前面各部分的推理。只需简短的正确性论证。 建议答案总长度:约半页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

给定长度 n 的数组 B,找出现最多的元素,以及 B 中所有包含该元素的下标。本小问允许假设最常见值唯一。

要写进答案的内容

约一段算法描述;正确性论证先说明要证明什么及如何证明;给出时间复杂度。下标指原数组位置。

第一层提示 · 从哪里想

将“值、原下标”一起排序。相等的值成为连续的一段,扫描每一段的长度。

第二层提示 · 展开推理骨架

按值排序 n 个记录需要 O(n log n),一遍分组计数 O(n),输出至多 n 个原下标 O(n)。每个值恰对应一段,最长段恰对应出现最多的值。也可先只排序副本求众数,再扫描原数组找下标。

作答后查看参考解释

排序改变了位置;题目要的是 B 的原始下标。保存原下标或回查原数组才能得到正确输出。

必做 · 转化与简短论证

1.4 (b) · 最大 alignment

完整原题 · 英中对照

来源:COMP3121_9101-1.4.pdf,第 1 页。公式下标用 _ 表示。中文为辅助翻译;译注单独标注。

English · 本小问原文
(b) Using the previous part, design an O(n log n) algorithm that finds the maximum alignment of A. Briefly justify your algorithm. Hint: Transform A into B so that applying the algorithm from (a) solves the problem!
中文翻译 · 本小问
(b) 利用上一小问,设计一个 O(n log n) 算法,找出 A 的最大对齐集合。简要说明你的算法为什么正确。 原题提示:将 A 转换成 B,使得应用 (a) 中的算法就能解决这个问题!
展开共同题干、定义与已给条件(英中对照)
English · 共同题干
Let A be an array of n integers. We say that a pair of distinct indices i,j is aligned if their difference is equal to the difference of the values at those indices: A[i] − A[j] = i − j. Let S ⊆ {1,...,n} be a subset of indices. We say that S is an alignment of A if, for all i,j ∈ S such that i ≠ j, i and j are aligned. Our task is to find an alignment of A of maximum size. If there are multiple such alignments, it suffices to find a single one. For example, consider the array A = [1,4,3,6,5,8,7,1]. One possible alignment here is {2,4,6}. However, note that this is not a maximum alignment. We will solve this by first solving a simpler problem, and then transforming our original problem into the simpler one.
中文翻译 · 共同题干
设 A 是一个包含 n 个整数的数组。如果两个不同下标 i,j 的差等于这些下标处的数组值之差,即 A[i]−A[j]=i−j,就称这两个下标是对齐的(aligned)。设 S ⊆ {1,...,n} 是一个下标子集。如果对所有属于 S 的不同下标 i,j,i 和 j 都是对齐的,就称 S 是 A 的一个对齐集合(alignment)。我们的任务是找到 A 的一个大小最大的对齐集合。如果存在多个这样的集合,找出任意一个即可。 例如,考虑数组 A=[1,4,3,6,5,8,7,1]。一个可能的对齐集合是 {2,4,6}。但是,请注意它不是最大的对齐集合。 我们将先解决一个更简单的问题,再把原问题转化为这个更简单的问题。
展开原题 Advice 的中文翻译与提交说明
这是一个 regular task。你必须提交一份在 Overleaf 上制作的 PDF。可以使用 Moodle 上的 LaTeX 模板。你必须把 Overleaf 项目分享给 tutor。 (a) • 简要地用一段文字描述解决该问题的算法。 • 论证算法的正确性,首先概述你具体要证明什么,以及将如何证明。 • 论证算法的时间复杂度。 (b) • 给出方法概述和时间复杂度即可。所需推理很少,因为不必重复前面各部分的推理。只需简短的正确性论证。 建议答案总长度:约半页。
核对完整 PDF 原页(含图示和 Advice)

题目要求

找尽可能大的下标集合 S,其中任意两个不同 i,j 均满足 A[i]−A[j]=i−j。多个最大集合时任选一个。

要写进答案的内容

给出从 A 到 B 的转换、调用 (a) 的方式、返回什么、总复杂度 O(n log n),再简短解释为何等价。无需重复 (a) 的整个证明。

第一层提示 · 从哪里想

把所有与 i 有关的项移到一侧,所有与 j 有关的项移到另一侧。

第二层提示 · 展开推理骨架

A[i]−A[j]=i−j ⇔ A[i]−i=A[j]−j。因此设 B[i]=A[i]−i,取 B 中最大相同值组的原下标即可。每个合法集合的 B 值都相同,最大组就是最大 alignment。转化 O(n),(a) O(n log n)。

作答后查看参考解释

让分组算法保留任意一个最长组即可。(b) 明确允许任选;不能把 (a) 的唯一性假设强加给 A。

动手看 · 从原数组到分组

先尝试自己计算 A[i]−i,再单步显示转换与分组。全部下标使用 1 基索引。

提交前:把要求与建议分清楚

三题共同的明确要求

  • 三题均为 regular task。
  • 提交 PDF,并且 PDF 必须在 Overleaf 上制作。
  • 需要与 tutor 分享 Overleaf 项目;可以使用 Moodle 上的 LaTeX 模板(模板是可选)。

本页不是提交文件,也不会替你提交或分享。题目未提供截止日期、上传入口细节或文件命名规则;这些不能从本页推断。

题目必做范围建议篇幅(不是硬性字数)书写重点
1.2(a)(i)、(a)(ii)、(b);(c) 选做总计约 1 页算法用文字,不用伪代码;清楚定义符号、连贯证明、明确结论。引用已知结论时说明关联;适用时可画清晰图。
1.3(a)(i)、(a)(ii)、(b)总计约 1 页用排序和不等式排除候选;归纳或反证可选。
1.4(a)、(b)总计约半页(a) 算法约一段,另说明证明目标、正确性与复杂度;(b) 简短方法、复杂度、等价理由。

建议的书写结构

设计题:明确输入输出 → 用文字说明过程与终止条件 → 说明为何不漏解/为何返回合法解 → 数操作证明复杂度。

证明题:明确要证明的命题 → 对任意候选使用已知条件 → 得出本步结论 → 连接到全程与终止。

这三份题目没有指定必须创建程序、函数或测试文件。网页演示的程序只帮助理解;正式答案应按 PDF 的书面要求组织。

来源与核对范围

  • COMP3121_9101-1.2.pdf:第 1 页题干 (a)–(c);第 2 页 Advice 与建议篇幅。
  • COMP3121_9101-1.3.pdf:第 1 页算法与已给证明;第 2 页 (a)(i)/(ii)、(b) 与 Advice。
  • COMP3121_9101-1.4.pdf:第 1 页定义、示例、(a)/(b)、Advice。

原件位于你提供的 Downloads 路径,未修改。此页面是个人学习解释;未联网推断评分、截止时间或课程政策。自动保存仅在当前浏览器当前地址下有效,不跨浏览器同步;若存储不可用,仍可临时作答。

完整原题 · PDF 原页对照

每份原件的全部页面,保留原始图示、公式、Hint、Advice、脚注和提交说明。点击展开。

1.2 · 展开完整 PDF 原页COMP3121_9101-1.2.pdf 第 1 页完整原题COMP3121_9101-1.2.pdf 第 2 页完整原题
1.3 · 展开完整 PDF 原页COMP3121_9101-1.3.pdf 第 1 页完整原题COMP3121_9101-1.3.pdf 第 2 页完整原题
1.4 · 展开完整 PDF 原页COMP3121_9101-1.4.pdf 第 1 页完整原题