数据结构中的溢出处理
当一个新对 (键,元素) 的主桶已满时,就会发生溢出。
我们可以通过以下方式解决溢出问题:
以某种系统的方式搜索哈希表,找到一个未满的桶。
- 线性探测(线性开放寻址)。
- 二次探测。
- 随机探测。
允许每个桶都维护一个列表,其中包含所有以它为主桶的对,从而消除溢出。
- 数组线性列表。
- 链。
开放寻址是为了确保所有元素都直接存储在哈希表中,因此它尝试通过实施各种方法来解决冲突。
线性探测通过将数据放置在表中下一个空闲槽中来解决冲突。
线性探测的性能
- 最坏情况下的查找/插入/删除时间为 θ(m),其中 m 表示表中对的数量。
- 当所有对都位于同一个簇中时,就会发生这种情况。
线性探测的问题
- 标识符倾向于聚集在一起
- 相邻的簇倾向于合并
- 增加或提高搜索时间
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
二次探测
线性探测搜索桶 (H(x)+i2)%b;H(x) 表示 x 的哈希函数
二次探测使用 i 的二次函数作为增量
检查桶 H(x)、(H(x)+i2)%b、(H(x)-i2)%b,其中 1<=i<=(b-1)/2
b 表示一个形如 4j+3 的素数,其中 j 是一个整数
随机探测
随机探测结合了随机数。
H(x):= (H’(x) + S[i]) % b S[i] is a table along with size b-1 S[i] is indicated as a random permutation of integers [1, b-1].
广告