数据结构7

数据结构 7 伸展树 哈希表

平衡树的缺陷

插入删除代价大,易出错没有利用 90 - 10 规则:百分之90的访问都是针对百分之10的数据

伸展树的概念

基本思想:让10%经常访问的数据靠近根结点基本方法:在每个结点被访问后,通过一些旋转(单)使它向根移动

但是很不幸,基本方法很容易导致树退化成单链表,这是因为单链表并不保证树高度的降低,但双旋转可以。于是我们分下面3种情况访问:

  • zig 父结点为根结点:向根做一次单旋转

  • zig-zag X在祖父结点内侧:LR or RL

  • zig-zig X在祖父结点外侧:LL or RR

哈希表

直接根据所求结点的关键字值 KEY 找到这个结点。

直接地址法

除留余数法

H(key) = key MOD p(p 是数组大小)
p最好为质数,函数值分布更均匀

数字分析法

取数字分布均匀的位作为地址的组成部分

平方取中法

将关键字平方后,取其结果的中间各位作为散列函数值

折叠法

选取一个长度后,将关键字按此长度分组相加

哈希冲突问题

闭散列表

  • 线性探测法(哈希后暴力遍历直至空)Simple
    我们还需要一个函数指针,把小数转化为整数还需额外增设一个信息,以判断是否是《曾经有过但现在已经被删除了》一段时间后,所有数组元素都变为active or deleted,所有操作的时间性能都是O(N)的(可以进行一个整理,把该删的删了,另外,最好保证表长是素数)

  • 二次探测法当发生冲突时,下一个探测单元是:k+1,k+4,k+9…
    Conclusion:如果表长为素数,且表至少有一半是空的,则新元素一定可以被插入
    负载因子要小于0.5

  • 再次散列法地址为 Hi = H0 + i * Hash(x)

开散列表

相当于是Linked Hash Map


数据结构7
http://example.com/2025/04/07/数据结构7/
Author
Yihan Zhu
Posted on
April 7, 2025
Updated on
April 10, 2025
Licensed under