62 lines
3.6 KiB
Markdown
62 lines
3.6 KiB
Markdown
### 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. 在“分卷子”问题中,总成本等于所有中间步骤产生的卷子堆的数量之和。
|