哈希
2018-05-22 本文已影响0人
kakarotto
hash,一般翻译为散列,也名哈希
哈希的描述:把任意长度的输入通过哈希算法变换为固定长度的输出,输出称为哈希值(散列值)。
- 通过同一哈希函数计算出的哈希值如果不同,那么输入值肯定也不同
- 通过同意哈希函数计算出的哈希值如果相同,那么输入值不一定相同
两个不同的输入值通过相同的哈希函数计算出相同的哈希值,这种现象称为碰撞。
衡量一个哈希函数好坏的重要标准,就是发生碰撞的概率及发成碰撞的解决方法。
任何哈希函数基本都无法彻底避免碰撞。
常见的解决碰撞的方法有一下几种:
- 开放定址法
- 链地址法
- 再哈希法
- 建立公共溢出区
1.开放定址法
一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入
2.链地址法
将哈希表的每个单元作为链表的头结点,所有哈希地址为i的元素构成一个同义词链表。即发生冲突时就把该关键字链在以该单元为头结点的链表的尾部
3.再哈希法
当哈希地址发生冲突用其他的函数计算另一个哈希函数地址,直到冲突不再产生为止
4.建立公共溢出区
将哈希表分为基本表和溢出表两部分,发生冲突的元素都放入溢出表中