北航算法分析与设计 2024 年秋季期末考试题
北航算法分析与设计 2024 年秋季期末考试题
北航研究生课程,李东禹、杜皓华老师班级,一共 6 题,每道题 20 分,卷面一共 120 分,拿 100 分即可满分。
其中一、二、四题的答案来自老师给的作业答案。如有错误或补充欢迎在评论区指出。
一、算法设计题
题目:在分析插入排序时,一个重要的临界值是
答案
由于
首先,定义“归并反转”为:进行 Merge 操作,即复制
由于在归并排序中,数组元素改变位置的唯一方式是在 Merge 过程中,同时由于合并会使
所以,设计基于归并排序的反转计数算法如下:
让
因此,我们仅需要检测
二、算法设计题
题目:
- 设计并分析匹配小球和筐子的
算法 - 为同一问题设计
算法
答案
- 写一个双层 for 循环嵌套的函数,内外层循环分别为
个螺栓和螺母,利用 Test 函数对每一个螺栓和筐子都进行比较。因为共要比较 次,所以时间复杂度为 - 假设筐子标有数字
,小球也是如此。这数字是任意的,与其大小不对应,而只是用于指代算法描述中的筐子和小球。此外,输出该算法将由 个不同的对 组成,其中筐子 和小球 匹配。算法 MATCH 将代表筐子和待匹配小球: ,代表筐子, ,代表小球。
三、算法设计题
问题:你正在为一次出行购买一件具有
- 请举例说明贪心策略“优先购买具有最低的增长率
的零件”无法使用最小花费买到全部零件。 - 证明贪心策略“优先购买具有最高的增长率
的零件”总是可以使用最小花费买到全部零件。 - 给出基于贪心策略“优先购买具有最高的增长率
的零件”的零件购买顺序安排算法,并分析其时间复杂度。
四、算法设计题
问题:在一个
- 给出一个动态规划算法,用递归方式实现,以确定机器人在棋盘上游荡时应走的路径,从而使收集到的硬币总价值最大化。分析所需时间。
- 给出用循环方法实现的动态规划算法。分析所需时间。
答案:
- 从
开始,机器人只能移动到 或 。在移动之后,机器人会面临一个棋盘略小的子问题,起点分别是 或 。这表明问题和子问题之间存在递归关系。如果我们认为 是机器人从 出发到 时所能收集到的最大值,那么我们就可以构造出下面的递推关系:
基于递归方式实现的时间复杂度基本上等同于“暴力搜索”我们需要探索所有不同的路径,找出其中的最优路径。也就是说,时间复杂度将与机器人可能走过的路径数量成正比。现在,这变成了一个计数问题:机器人将做
- 使用循环方式进行实现时,我们可以首先构建一个
的表来存储子问题的结果。然后,为了迭代解决问题,我们可以从单元格 开始查表,并反向利用上述递归方法,通过迭代表中与已迭代单元格相邻的单元格来查表。迭代任何单元格都需要 次,因此这种迭代算法的最终复杂度将与表格中的单元格数成正比,即 。
五、算法分析题
问题:考虑以下寻找生成树的“笨”算法:按任意顺序检索图的边,当且仅当一条边与已添加的边不构成循环时将它添加到部分生成树中。
- 证明这种算法不能在任何有限范围内逼近最小生成树。即,给定一个图和一个边的排序,此算法给出生成树的权重至少是最小生成树权重的
倍 。 - 假设边的权重都是范围 1~2 之间的实数,给出此“笨”算法的近似边界。
六、算法设计题
问题:我们给定了
- 把这个问题改写成一个决策问题,并证明它是 NP-Complete 的。
- 设计一个启发式算法找出安排
项工作所需的最少天数。