《算法导论》笔记 第11章 11.3 散列函数
来源:互联网 发布:金字塔 java 编辑:程序博客网 时间:2024/06/05 17:27
【笔记】
好的散列函数:每个关键字都等可能地散列到m个槽位中的任何一个之中去,并与其他的关键字已被散列到哪一个槽位中无关。
如果所给关键字不是自然数,则必须有一种方法来将它们解释为自然数。
除法散列表:h(k) = k mod m。
乘法散列表:h(k) = floor(m(kA mod 1)),用关键字k乘上常数A(0<A<1),并抽取出kA的小数部分。然后,用m乘以这个值,再取结果的底。
【练习】
11.3-1 假设我们希望查找一个长度为n的链表,其中每一个元素都包含一个关键字k和一个散列值h(k)。每一个关键字都是长字符串。在表中查找具有给定关键字的元素时,如何利用各元素中的散列值。
先求出带查找的关键字的散列值h',在链表中查找与其相同的散列值,若散列值相同则比较关键字。
11.3-2 假设一个长度为r的字符串被散列到m个槽中,方法是将其视为一个以128为基数的数,然后应用除法方法。很容易把数m表示为一个32位的机器字,但对长度为r的字符串,由于它被当做以128为基数的数来处理,就要占用若干个机器字。假设应用除法来计算一个字符串的散列值,那么如何才能除了该串本身占用的空间外,只利用常数个机器字?
将字符串第i位乘上SEED^i,再求和,自然溢出即可。
11.3-3 考虑除法方法的另一种版本,其中h(k)=k mod m,m=2^p-1,k为按基数2^p解释的字符串。证明:如果串x可由串y通过其自身的置换排列导出,则x和y具有相同的散列值。给出一个应用例子,其中这一特性在散列函数中是不希望出现的。
A+B*2^x+C*2^y≡A+B*2^y+C*2^x (mod 2^p-1) ?
11.3-4 考虑一个大小为m=1000的散列表和一个对应的散列函数h(k)=floor(m(kA mod 1)),A=(sqrt(5)-1)/2。计算关键字61、62、63、64和65被映射到的位置。
A = 0.618 033 988 7...
61: 700
62: 318
63: 936
64: 554
65: 172
*11.3-5
*11.3-6
- 《算法导论》笔记 第11章 11.3 散列函数
- 《算法导论》笔记 第11章 11.5 完全散列
- 《算法导论》笔记 第11章 11.2 散列表
- 《算法导论》第11章 散列表 个人笔记
- 算法导论学习笔记-第3章 函数的增长
- 算法导论11.3散列函数 练习总结
- 算法导论-第11章-散列表
- 算法导论 第11章 散列表
- 算法导论-第11章-散列表
- 《算法导论》笔记 第11章 11.1 直接寻址表
- 《算法导论》笔记 第11章 11.4 开放寻址法
- 《算法导论》笔记 第11章 总结与思考
- 《算法导论》笔记:第1章
- 《算法导论》笔记:第2章
- 算法导论-第11章
- Introduction to Algorithms 算法导论 第3章 函数的增长 学习笔记及习题解答
- 算法导论 完全散列
- 算法导论双重散列
- kill命令
- 性能调化
- 初学spring 关于IOC与AOP 使用的设计模式
- ORACLE中的行迁移/行链接
- 用GDB调试程序
- 《算法导论》笔记 第11章 11.3 散列函数
- 最大文件描述符限制对高性能Web架构的影响
- WINCE6.0启动串口信息-OK6410
- C++中new delete 与malloc free的区别
- 外媒剖析东南亚移动游戏工业:印尼远景被看好
- android性能分析工具Profile GPU rendering详细介绍
- 通信
- 你好
- ktv