算法导论11.1直接寻址表 练习总结

11.1-1 假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。你所给的过程在最坏情况下的运行时间是多少?

ANSWER:遍历整个寻址表T,时间O(m)。


11.1-2 位向量(bit vector)是一种仅包含0和1的数组。长度为m的位向量所占空间要比包含m个指针的数组少得多。请说明如何用一个位向量来表示一个包含不同元素(无卫星数据)的动态集合。字典操作的运行时间应是O(1)。

ANSWER:1表示该下标的整数在数组中,0表示不在。



11.1-3 试说明如何实现一个直接寻址表,表中各元素的关键字不必都不相同,且各元索可以有卫星数据。所有三种字典操作( INSERT、DELETE 和 SEARCH )的时间应为O(1)。(不要忘记 DELETE 要处理的是被刪除的对象的指针变量,而不是关键字。)

ANSWER:每个 key 指向一个列表。

*11.1-4 我们希望通过利用在一个非常大 的数组上直接寻址的方式来实现一个字典。开始时,该数组中可能包含一些无用信息,但要对整个数组进行初始化是不实际的。因为该组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储的对象占用O(1)空间;SEARCH、INSERT 和 DELETE 的时间为O(1),并且对数据结构初始化的时间为 O(1)。(提示:可以利用一个附加数组,处理方式类似于栈,其大小等于实际存储在字典中的关键字数目,以帮助确定大数组中某个给定的项是否是有效的。)

ANSWER:
INSERT( k ):在附加数组尾部记录“ k ”,在大数组下标为 k 处记录附加数组的相应下标,附加数组size++。

SEARCH( k ):在大数组下标为 k 处,查找附加数组的相应下标,在附加数组中检测该下标是否有效。

DELETE( k ):在大数组下标为 k 处找到附加数组下标 a ;在附加数组尾部找到最后一个元素在大数组的下标 b ,将大数组下标为 b 处的内容更改为“ a ”,将附加数组下标为 a 的内容更改为“ b ”。删除附加数组最后一个元素,附加数组size--。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
算法导论》是一本经典的计算机科学教材,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein合著。这本书以深入浅出的方式介绍了计算机算法的基本概念、设计技巧和分析方法。 《算法导论》的内容非常丰富,涵盖了大量的经典算法和数据结构。书中详细介绍了排序、搜索、图算法、动态规划、贪心算法等常用的算法设计技巧,并讲解了它们的实现方法和性能分析。此外,书中还介绍了一些高级主题,如NP完全性、近似算法和并行算法等。通过阅读《算法导论》,读者可以掌握算法设计和分析的基本原理和方法。 《算法导论》的优点之一是其严谨的数学证明和丰富的示例。书中的算法分析使用了大O记号和渐进分析等工具,帮助读者理解算法的时间和空间复杂度。每个章节都包含了大量的练习题和思考题,有助于读者巩固所学知识。 对于计算机科学专业的学生来说,《算法导论》是一本必读的教材。它提供了学习和理解算法的基本工具和方法,对于解决实际问题和编写高效程序非常有帮助。此外,由于该书作者的丰富经验和深厚的理论基础,《算法导论》也成为了许多人在算法竞赛和面准备中的常用参考书。 总之,《算法导论》是一本经典的计算机科学教材,内容广泛而深入,适合计算机科学专业的学生学习和参考。阅读并理解这本书,将帮助读者打下坚实的算法基础,培养良好的分析和设计能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值