数据结构之Hash表!
数据结构之Hash表!
月伴飞鱼Hash表叫做散列表,就是把任意长度的输入,通过散列算法,变成固定长度输出,该输出结果是散列值。
这种转换是一种压缩映射,散列表的空间通常小于输入的空间,不同的输入可能会散列成相同的输出。
- 所以不能从散列表来唯一的确定输入值,这就出现了Hash冲突。
Hash冲突:
根据Key(键)即经过一个函数
F(key)
得到的结果的作为地址去存放当前的Key,Value键值对。但是却发现算出来的地址上已经被占用了,这就是所谓的Hash冲突。
解决Hash冲突:
再Hash法:
再散列法,当关键字key的哈希地址
p=H(key)
出现冲突时,以p为基础,产生另一个哈希地址p1。如果p1仍然冲突,再以p1为基础,产生另一个哈希地址p2,直到找出一个不冲突的哈希地址pi。
链地址法:
将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中。
- 因而查找、插入和删除主要在同义词链中进行。
链地址法适用于经常进行插入和删除的情况。
建立公共溢出区:
将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。