CLSR 11.1直接寻址表

来源:互联网 发布:矩阵的用途 编辑:程序博客网 时间:2024/05/22 15:54

11.1-1
从直接寻址表底部向上搜索,找到第一个非空槽即是最大元素。最坏情况下是 Θ(m)

11.1-2
位向量的每一位代表一个元素是否存在(用1和0表示)。为了修改或者查询位向量需要用到 &、| 等操作。

11.1-3
使用双链表来解决冲突,特别的对于搜索操作,题目也没说清楚就默认是返回第一个元素。

11.1-4
按照书上的提示,我们有一个类似于栈的数组 S,其大小应该是字典元素的最大个数,另外还有一个 top[S]指针,我们存放在 S[0]中,所以 S[1..top[S]]是有效的。
假设现在有一个关键字 k 存储在数组(我们取名为 T),T[k] 存放数组 S 中的索引,设 T[k]=j,则在数组 S[j] 中存放的是关键字 k 。举个栗子,设关键字存放在数组 T 的下标为 5 的位置,且 T[5]=3,则在数组 S 中有 S[3]=5
另外由于数组 S 小于数组 T,我们可以附加一个和数组 S 一样大的数组 S,用于存放指向对象。现在有一个有效的对象 x,它的关键字为 k,则S[T[k]] 指向 x
现在对于SEARCH,给一个关键字 k,我们验证 1T[k]top[S] 以及 S[T[k]]=k,如果是的就返回 S[T[k]] ,否则返回空。
对于INSERT,假设关键字不在字典中,我们增加 top[S],然后 S[top[S]]=k,S[top[S]]=k,T[k]=top[S]
对于DELETE,假设关键字在字典中,我们打破“有效的循环”,然后填补删除操作的空缺即可。

S[T[k]]S[top[S]]S[T[k]]S[top[S]]T[S[T[k]]]T[k]T[k]0top[S]top[S]1

0 0
原创粉丝点击