没有合适的资源?快使用搜索试试~ 我知道了~
首页《算法导论》习题解析与优化建议
"这是一份关于《算法导论》第二版的习题解答,由Philip Bille编撰。文档中提供了部分习题的答案,但作者不对其准确性负责,并鼓励读者先独立尝试解题,仅将此文档作为最后的参考资料或核对答案之用。文档尚在持续更新中,最新更新日期为2002年12月9日。" 这篇文档主要涉及到的是算法分析和设计的经典问题,其中提到了两个具体的习题解答。 第一个习题(1.2-2)是关于插入排序(Insertion Sort)和归并排序(Merge Sort)的效率比较。根据题目,当插入排序的平均时间复杂度8n^2小于归并排序的最坏时间复杂度64n log n时,插入排序会更优。解题过程计算出n小于8 log n,进一步推导得n小于43时,插入排序的效率更高。因此,建议对于大小为43或更小的输入,可以修改归并排序算法,用插入排序来替代,以优化运行时间。这个讨论涉及了算法的时间复杂度分析和选择合适排序算法的问题。 第二个习题(1-1)似乎不完整,只提及了一个假设,即所有月份都是30天,所有年份都是365天。通常这是在处理日期和时间问题时的一个简化假设,可能涉及到计算或日期相关的算法设计。但因为题目不全,无法提供完整的解答。 这些习题解答旨在帮助读者巩固《算法导论》中的概念,提高解决实际问题的能力。通过这样的练习,读者可以深入理解不同算法的性能特点,并学会在实际应用中做出合理的选择。对于学习算法和数据结构的人来说,这是一个宝贵的资源,有助于提升他们在算法设计和分析方面的技能。
资源详情
资源推荐
Initialization: Before the first iteration of the while the only change of the max-heap is that A[i]
is increased an may therefore violate the max-heap property.
Maintenance: Immediately before the iteration i and the child that violated the max-heap prop-
erty has been exchanged thus restoring the max-heap property between these. This can only
destroy the max-heap property between i and the parent of i.
Termination: The termination condition of the while states that at the end of the iteration the
max-heap property between i and its parent is restored or the i is the root of the heap.
We see by the loop invariant that the heap property is restored at end of the iteration.
6.5 − 7
Algorithm 5 HEAP-DELETE(A, i)
Input: A max-heap A and integers i.
Output: The heap A with the element a position i deleted.
A[i] ↔A[heap-size[A]]
heap-size[A] ←heap-size[A] − 1
key ←A[i]
if key 6 A[PARENT(i)] then
MAX-HEAPIFY(A, i)
else
while i > 1 and A[PARENT(i)] < key do
A[i] ↔A[PARENT(i)]
i ←PARENT(i)
end while
end if
6.5 − 8
Given k sorted lists with a total of n elements show how to merge them in O(n lg k) time. Insert
all k elements a position 1 from each list into a heap. Use EXTRACT-MAX to obtain the first element
of the merged list. Insert element at position 2 from the list where the largest element originally
came from into the heap. Continuing in this fashion yields the desired algorithm. Clearly the
running time is O(n lg k).
6 − 2
a. A d-ary heap can be implemented using a dimensional array as follows. The root is kept in
A[1], its d children are kept in order in A[2] through A[d+1] and so on. The procedures to map a
node with index i to its parent and its jth child are given by:
D-ARY-PARENT(i)
return b(i − 2)/d + 1c
D-ARY-CHILD(i, j)
return d(i − 1) + j + 1
b. Since each node has d children the height of the tree is Θ(log
d
n).
c. The HEAP-EXTRACT-MAX algorithm given in the text works fine for d-ary heaps; the problem
is MAX-HEAPIFY. Here we need to compare the argument node to all its children. This takes
Θ(d log
d
n) and dominates the overall time spent by HEAP-EXTRACT-MAX.
9
d. The MAX-HEAP-INSERT given in the text works fine as well. The worst-case running time is
the height of the heap, that is Θ(log
d
n).
e. The HEAP-INCREASE-KEY algorithm given in the text works fine.
10
7.1 − 2
When all the elements in A are the same, notice that the comparison in line 4 of PARTITION is
always satified and i therefore is incremented in each iteration. Since initially i ←p − 1 and i + 1
is returned the returned value is r − 1.
To make PARTITION return (p + r)/2 when all elements are the same, simply modify the algo-
rithm to check for this case explicitly.
7.1 − 3
The running time of PARTITION is Θ(n) since each iteration of the for loop involves a constant
number of operations and there is Θ(n) iterations in total.
7.1 − 4
To make QUICKSORT sort in nonincreasing order replace the 6 comparison in PARTITION line 4
with >.
7.2 − 2
If the elements in A are the same, then by exercise 7.1 − 2 the returned element from each call
to PARTITION(A, p, r) is r − 1 thus yielding the worst-case partitioning. The total running time is
easily seen to be Θ(n
2
).
7.2 − 3
If the elements in A are distinct and sorted in decreasing order then, as in the previous exercise,
we have worst-case partitioning. The running time is again Θ(n
2
).
7 − 4
a. Clearly, the QUICKSORT’ does exactly the same as the original QUICKSORT and therefore works
correctly.
b. Worst-case partitioning can cause the stack depth of QUICKSORT’ to be Θ(n).
c. If we recursively call QUICKSORT’ on the smallest subarray returned by PARTITION we will
avoid the problem and retain a O(lg n) bound on the stack depth.
11
剩余50页未读,继续阅读
zhou754506559
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ASP.NET数据库高级操作:SQLHelper与数据源控件
- Windows98/2000驱动程序开发指南
- FreeMarker入门到精通教程
- 1800mm冷轧机板形控制性能仿真分析
- 经验模式分解:非平稳信号处理的新突破
- Spring框架3.0官方参考文档:依赖注入与核心模块解析
- 电阻器与电位器详解:类型、命名与应用
- Office技巧大揭秘:Word、Excel、PPT高效操作
- TCS3200D: 可编程色彩光频转换器解析
- 基于TCS230的精准便携式调色仪系统设计详解
- WiMAX与LTE:谁将引领移动宽带互联网?
- SAS-2.1规范草案:串行连接SCSI技术标准
- C#编程学习:手机电子书TXT版
- SQL全效操作指南:数据、控制与程序化
- 单片机复位电路设计与电源干扰处理
- CS5460A单相功率电能芯片:原理、应用与精度分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功