为什么哈希查找那么快?
因为哈希的存储类似于数组,在数组中我们只需要知道数组的下标就可以取到数组的值了,查找速度极佳,时间复杂度为O(1),哈希的存储就类似于数组的存储,将值映射到内存的某个单元,然后给他一个哈希值,我们查找的时候只需要查找那个哈希值就可以了,不需要进行任何比较,但是在此之前我们需要指定哈希函数用来将无限大的值映射到内存中,如何选择哈希函数方法并不唯一,一般存储正整数的话就用一个正整数来mod数组的长度,但是这样做的致命缺点就是哈希冲突,我们的哈希值可能会存n个数据,我们解决哈希冲突的方法有两种,一种是rehash一种是链地址法,链地址法就是将多个值放在这一个位置上 用链表的形式进行存储,但是这样一来链表的长度很有可能很长,这样一来我们的哈希表就没有意义了。所以我们有了rehash的方法,将哈希数组变成原来的两倍,然后再将值mod长度后的第一个素数就可以了,这样一来我们的链表就不会很长了,但是问题又来了,我们什么时候进行rehash呢?首先我们有一个装载因子用来定义一个进行rehash的标准,这个装载因子就是元素的个数除以数组的长度,即哈希表满载的程度 给他一个常量,当这个哈希表要满的时候我们就进行rehash,这样一来我们的性能就是最佳的!
以上就是哈希为什么这么快的简短总结,关键点就是:哈希函数的选择,处理哈希冲突的方法还有装载因子的调整,这些工作都完善之后我们的哈希绝对是性能极佳的!
ps:心血来潮,上课码字
