Files
cpp-courseware/2.Course/1.深入浅出程序设计竞赛(基础篇)/2.初涉算法/5.贪心算法/课后题目/贪心算法(下) 课后题目.md
T

3.6 KiB

C++ 贪心算法(下) 课后习题

姓名: ____________________________________________

一、 填空题

  1. 通过逆向思维,分卷子的拆分问题可以转化为转化为等价的__________问题来求解。
  2. 有 n 个元素带权,二合一合并求最小总成本的问题叫做霍夫曼模型,其最优贪心策略是:每一次操作,都选择当前所有元素中 __________ 的两个进行合并。
  3. 在使用双队列法(两个队列的变量名为Q1 和 Q2)实现霍夫曼模型时,全局最小的元素只可能出现在 __________ 或 __________。

二、 单项选择题

( ) 1. “分卷子”的例子告诉我们,正向思考“每次分离出最大的一堆”这个贪心策略是? A. 正确的 B. 错误的 C. 最低效的 D. 最高效的

( ) 2. 对于“合并果子”问题,正确的贪心策略是? A. 优先合并重量最大的两堆 B. 优先合并重量最轻的两堆 C. 优先合并重量最接近的两堆 D. 随机合并

( ) 3. 有三堆果子,重量分别为 10, 20, 30。将它们合并成一堆的最小总成本是? A. 60 B. 80 C. 90 D. 110

( ) 4. 在双队列法中,我们将合并后新产生的元素放入第二个队列(Q2)的哪个位置? A. 队头 B. 队尾 C. 任意位置 D. 替换队头

( ) 5. 双队列法能够高效实现霍夫曼模型,其关键是? A. 两个队列的长度永远相等 B. 新产生的元素组成的队列Q2自然有序 ​ C. Q1队列的元素会越来越少 D. 只需要一个队列就够了

( ) 6. 哈夫曼编码的目标是使得编码后的信息总长度最小,它通过什么方式实现? A. 让所有字符编码等长 B. 出现频率高的字符编码短,频率低的编码长
​ C. 出现频率低的字符编码短,频率高的编码长 D. 使用尽可能多的0

( ) 7. 下列哪个问题不适合直接用霍夫曼模型解决? A. 合并N堆石子,成本为合并后石子总数 B. 构建哈夫曼编码 ​ C. 分离试卷,成本为分离前试卷总数 D. 活动安排问题

( ) 8. 在双队列法的get_min函数中,如果Q1为空,应该从哪里取元素? A. 无法继续 B. 从Q1队尾 C. 从Q2队头 D. 随机选择

( ) 9. “分卷子”问题和“哈夫曼编码”的构建过程,都体现了哪种重要的算法思想? A. 分治思想 B. 动态规划 C. 逆向思维与贪心 D. 暴力搜索

三、 判断题 (对的打“√”,错的打“×”)

( ) 1. 对于任意输入的果子重量,“每次对半分”的合并策略总能得到最小成本。

( ) 2. “从上往下”拆分的最小成本,等于“从下往上”合并的最小成本。

( ) 3. 在“合并果子”问题中,一个重量较大的果子堆,应该尽早参与合并,以减小总成本。

( ) 4. 在双队列法中,因为新合并的果子堆是放入Q2的,所以Q1中的元素数量只减不增。

( ) 5. 在任意时刻,Q1队头的元素一定小于等于Q2队头的元素。

( ) 6. 霍夫曼模型的核心是“二合一”操作,如果每次可以合并三堆,则不能使用类似的贪心思想。

( ) 7. 哈夫曼编码是一种前缀码,意味着任何一个字符的编码都不是另一个字符编码的前缀。

( ) 8. 双队列法的核心是避免了重复排序,从而提高了算法效率。

( ) 9. 在“分卷子”问题中,总成本等于所有中间步骤产生的卷子堆的数量之和。