分类目录:《算法设计与分析》总目录
相关文章:
·散列表/哈希表(Hash Table)(一):基础知识
·散列表/哈希表(Hash Table)(二):直接寻址表
·散列表/哈希表(Hash Table)(三):散列表原理
·散列表/哈希表(Hash Table)(四):散列函数
·散列表/哈希表(Hash Table)(五):开放寻址法
·散列表/哈希表(Hash Table)(六):完全散列
当关键字的全域 U U U比较小时,直接寻址是一种简单而有效的技术。假设某应用要用到一个动态集合,其中每个元素都是取自于全域 U = { 0 , 1 , ⋯ , m − 1 } U=\{0, 1, \cdots, m-1\} U={0,1,⋯,m−1}中的一个关键字,这里 m m m不是一个很大的数。另外,假设没有两个元素具有相同的关键字。
为表示动态集合,我们用一个数组,或称为直接寻址表,记为
T
[
0
,
1
,
⋯
,
m
−
1
]
T[0, 1, \cdots, m-1]
T[0,1,⋯,m−1]。其中每个位置,或称为槽,对应全域
U
U
U中的一个关键字。下图描绘了该方法。槽
k
k
k指向集合中一个关键字为
k
k
k的元素。如果该集合中没有关键字为
k
k
k的元素,则
T
[
k
]
=
N
o
n
e
T[k]=None
T[k]=None。
对于某些应用,直接寻址表本身就可以存放动态集合中的元素。也就是说,并不把每个元素的关键字及其卫星数据都放在直接寻址表外部的一个对象中,再由表中某个槽的指针指向该对象,而是直接把该对象存放在表的槽中,从而节省了空间。我们使用对象内的一个特殊关键字来表明该槽为空槽。而且,通常不必存储该对象的关键字属性,因为如果知道一个对象在表中的下标,就可以得到它的关键字。然而,如果不存储关键字,我们就必须有某种方法来确定某个槽是否为空