基于树等的查找方法,都是通过一系列对比来查找的,查找效率由比较一次所缩小的查找范围决定。
而理想的查找情况是直接根据关键码得到其对应的数据元素位置。
原理:
将待存储元素经过某一函数特定转换为一个值,将这个值作为地址,将这个待存储元素存入这个地址中。
当要查找时,则将待查找的元素经过同一转换函数得到一个转换值,即地址,然后去这个地址获取数据,与待查找元素比较是否一致,一致则查找成功。也称为哈希法(杂凑法)。
说明:
转换函数为哈希函数,所构造的表为哈希表。
注意:
哈希函数需要对不同的元素转换出不同的值。但考虑到地址的有限性而元素理论上无限,可能存在经过哈希函数转换后,不同的元素映射到同一个哈希地址上,这个就是冲突。
问题:
1.如何构造哈希函数。(尽可能简单,运算尽可能快。且转换出的值应分布均匀,减少空间浪费)
2.如何解决冲突问题。
性能分析:
哈希查找法的性能依赖于产生冲突的多少,产生冲突多,查找效率就低。主要取决于哈希函数的构造,处理冲突的方法以及元素个数对比哈希表长度的比例。
依地址查找为O(1),而不同的解决冲突的方法,其对应的时间复杂度可能不相同。