《算法导论(原书第3版)》一思考题

简介: 本节书摘来自华章出版社《算法导论(原书第3版)》一 书中的第2章,第2.4节,作者:(美)Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

思考题

2-1 (在归并排序中对小数组采用插入排序) 虽然归并排序的最坏情况运行时间为Θ(nlgn),而插入排序的最坏情况运行时间为Θ(n2),但是插入排序中的常量因子可能使得它在n较小时,在许多机器上实际运行得更快。因此,在归并排序中当子问题变得足够小时,采用插入排序来使递归的叶变粗是有意义的。考虑对归并排序的一种修改,
39其中使用插入排序来排序长度为k的n/k个子表,然后使用标准的合并机制来合并这些子表,这里k是一个待定的值。

a.证明:插入排序最坏情况可以在Θ(nk)时间内排序每个长度为k的n/k个子表。

b.表明在最坏情况下如何在Θ(nlg(n/k))时间内合并这些子表。

c.假定修改后的算法的最坏情况运行时间为Θ(nk+nlg(n/k)),要使修改后的算法与标准的归并排序具有相同的运行时间,作为n的一个函数,借助Θ记号,k的最大值是什么?

d.在实践中,我们应该如何选择k?

2-2 (冒泡排序的正确性) 冒泡排序是一种流行但低效的排序算法,它的作用是反复交换相邻的未按次序排列的元素。
BUBBLESORT(A)

1 for i = 1 to A.length - 1

2   for j = A.length downto i + 1

3     if A[j] < A[j - 1]

4       exchange A[j] with A[j - 1]
a.假设A′表示BUBBLESORT(A)的输出。为了证明BUBBLESORT正确,我们必须证明它将终止并且有:
A′[1]≤A′[2]≤…≤A′[n](2.3)

其中n=A.length。为了证明BUBBLESORT确实完成了排序,我们还需要证明什么?

下面两部分将证明不等式(2.3)。

b.为第2~4行的for循环精确地说明一个循环不变式,并证明该循环不变式成立。你的证明应该使用本章中给出的循环不变式证明的结构。

c.使用(b)部分证明的循环不变式的终止条件,为第1~4行的for循环说明一个循环不变式,该不变式将使你能证明不等式(2.3)。你的证明应该使用本章中给出的循环不变式证明的结构。
40

d.冒泡排序的最坏情况运行时间是多少?与插入排序的运行时间相比,其性能如何?

2-3 (霍纳(Horner)规则的正确性) 给定系数a0,a1,…,an和x的值,代码片段
1 y = 0

2 for i = n downto 0

3   y = ai + x·y
实现了用于求值多项式
P(x)=∑nk=0akxk=a0+x(a1+x(a2+…+x(an-1+xan)…))

的霍纳规则。

a.借助Θ记号,实现霍纳规则的以上代码片段的运行时间是多少?

b.编写伪代码来实现朴素的多项式求值算法,该算法从头开始计算多项式的每个项。该算法的运行时间是多少?与霍纳规则相比,其性能如何?

c.考虑以下循环不变式:

在第2~3行for循环每次迭代的开始有
y=∑n-(i+1)k=0ak+i+1xk

把没有项的和式解释为等于0。遵照本章中给出的循环不变式证明的结构,使用该循环不变式来证明终止时有
y=∑nk=0akxk。

d.最后证明上面给出的代码片段将正确地求由系数a0,a1,…,an刻画的多项式的值。

2-4 (逆序对) 假设A[1..n]是一个有n个不同数的数组。若iA[j],则对偶(i,j)称为A的一个逆序对(inversion)。

a.列出数组〈2,3,8,6,1〉的5个逆序对。
41

b.由集合{1,2,…,n}中的元素构成的什么数组具有最多的逆序对?它有多少逆序对?

c.插入排序的运行时间与输入数组中逆序对的数量之间是什么关系?证明你的回答。

d.给出一个确定在n个元素的任何排列中逆序对数量的算法,最坏情况需要Θ(nlgn)时间。(提示:修改归并排序。)

   《计算机程序设计艺术》第1卷第3版英文影印版已由机械工业出版社出版,ISBN 978-7-111-22709-0。——编辑注

   《计算机程序设计艺术》第3卷第2版英文影印版已由机械工业出版社出版,ISBN 978-7-111-22717-5。——编辑注

相关文章
|
6月前
单链表的习题练习(温故而知新)
单链表的习题练习(温故而知新)
40 1
|
6月前
|
存储
栈与队列练习题
栈与队列练习题
|
算法 索引
从三道经典的leetcode题掌握二分法
前言 二分法是典型的搜索算法,其主要运用于有序序列中寻找目标值。其思路非常简单,就是不断比较搜索区间的中间值与目标值,当中间值等于目标值则结束搜索,如果中间值大于目标值,则继续搜索左半区间,反之搜索右半区间。 总结下,二分法就是在搜索过程中不断地将搜索区间减半,直到搜索到目标值或者搜索区间为空集。
|
算法
几道算法题很简单
《基础系列》
88 0
|
人工智能 算法 搜索推荐
几道算法题练习下
《基础系列》
64 0
|
算法 搜索推荐 索引
|
存储 机器学习/深度学习 算法
|
人工智能 前端开发 BI
进阶指南_图论_lduoj_做题记录(上)
A. 最优贸易 Description Input Output Samples 大致方法: B. 道路和航线 Description Input Samples Hint
166 0
进阶指南_图论_lduoj_做题记录(上)
|
机器学习/深度学习
进阶指南_图论_lduoj_做题记录(下)
D. Sorting It All Out Description Input Output Samples F. 走廊泼水节 Description Input Output Samples Hint G. 黑暗城堡 Description Input Output Samples
99 0