• 为什么哈希查询比较快


          今天无意中有人问到一个问题,“为什么哈希查询比较快?”

          我没多想就回答道,”是因为采用键值对的方式,快速索引到值得内存地址“。

           

          接着又问,”键值对的方式的原理是什么?“

          当时一愣,没不知如何回答,只好说”抱歉“。

       手边没有书,也懒得去做名词解释了,在网上搜索到的一句话:

    当插入键值对到Hashtable中时,Hashtable使用每个键所引用对象的GetHashCode()方法,获取一个哈希编码,存入Hashtable中。 

         

       总之,
    (1)哈希函数的规则是:通过某种转换关系,使关键字适度的分散到指定大小的的顺序结构中。越分散,则以后查找的时间复杂度越小,空间复杂度越高。
    (2)使用hash,我们付出了什么?
    hash是一种典型以空间换时间的算法,比如原来一个长度为100的数组,对其查找,只需要遍历且匹配相应记录即可,从空间复杂度上来看,假如数组存储的是byte类型数据,那么该数组占用100byte空间。现在我们采用hash算法,我们前面说的hash必须有一个规则,约束键与存储位置的关系,那么就需要一个固定长度的hash表,此时,仍然是100byte的数组,假设我们需要的100byte用来记录键与位置的关系,那么总的空间为200byte,而且用于记录规则的表大小会根据规则,大小可能是不定的,比如在lzw算法中,如果一个很长的用于记录像素的byte数组,用来记录位置与键关系的表空间,算法推荐为一个12bit能表述的整数大小,那么足够长的像素数组,如何分散到这样定长的表中呢,lzw算法采用的是可变长编码。
    注:hash表最突出的问题在于冲突,就是两个键值经过哈希函数计算出来的索引位置很可能相同

  • 相关阅读:
    linux中crontab命令实例详解
    windows下修改mysql的root默认空密码,mysql添加密码,mysql修改密码
    c线程中sleep()和pthread_join()函数之我见
    wampserver apache 500 Internal Server Error
    数组的声明和使用
    私信技术网站
    移除数组中重复的值
    php文件上传和水印类
    常用函数集合
    类的声明和使用
  • 原文地址:https://www.cnblogs.com/KiloNet/p/1861806.html
Copyright © 2020-2023  润新知