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--。