Chapter 7 Hashing
约 626 个字 19 张图片 预计阅读时间 2 分钟
Chapter 7¶
Hashing
ADT: Symbol Table¶
Hash Tables¶
-
行是b个bucket,列是s个slot
-
然后我们有一个映射函数 \(f(x)\)(哈希函数)可以用来确定 \(x\)在哪一个bucket中
-
Loading density \(\lambda=n/(s*b)\)
意外情况
collision
\(f(i_1)=f(i_2),i_1\neq i_2\)overflow
往满的的bucket里塞了新的 identidier,(有overflow一定有collision)
Hash Function¶
性质
- \(f(x)\)尽可能简单并且减少冲突
- \(f(x)\)要unbiased,每个x分配到bucket的可能性均等
Separate Chaining¶
-
这个哈希表就是一个装有指针的数组(
List *TheLists
) -
然后每个指针往后构成一个个链表(bucket)
-
这样就不会
overflow
Operation¶
Open Addressing¶
开放寻址
Find Another empty cell to solve collision(avoiding pointer)
- 我们的哈希表假设是一个slot,没有链表什么的
-
引入一个偏移量i,去冲突的 \(Hash(x)\)附近找空位
-
这里的 \(f(i)\)是冲突处理函数,不是哈希函数
3. Double Hashing¶
- \(f(i)=i*hash_2(x)\)
Rehashing¶
Implementation
- 开个新表,比原来至少大1倍
- 扫描原表中未被删除的元素
- 用一个新的hash function去转移元素
- \(T(N)=O(N)\)