哈希表(simple_hash_table)的实现
散列表(hash table)经常用于文件加密,数据存储中。平常我们看到的字典起始也可以看成(hash table)。
自行脑补
为什么呢,由于每个字对应着一个拼音或者者解释…就像数学里的函数 y=f(x) ,x和y是天生的好基友,谁也分不开谁。
假如换一种存储方式,把字典转化一下放入电脑中存储,查找也更快,那么,我们可能要经常用到这个函数hash_func(y = f(x1,x2,x3….))这种函数,由于还是为了让每个字对应不同的拼音。即key1- >hash1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?key2->hash2…? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 否则就难以查询了,字典也是这样,同字不同音,也容易引起误会的啊。
加密函数or hash算法
当经过hash_func的洗礼后,它们在计算机中的存储没准像上面这样。
137。。
ord(x ) 是将一个字符转换为它的整数值。 137是个质数,因为质数因子少,比方说 用10,那么当? ? ? ?total = 10 ,20 的时候,这个hash_key作用就很小了,那么这个质数能否能取的很大嘛,物极必反,这里就不探讨了。
当然不可避免的产生的hash_key会有冲突的时候,当然这是个小概率事件(0.05%),这时候就得改进这个hash_key算法了,比方说
尝试更大的质数;
让当 hash_key的返回值(a,a)相同时,返回值(a)加一,假如a+1还不满足,则重复a+1;
创立更大的列表,由一维变成二维,二维变成三维。
详细可见开链法和线性探测法,这里提供一种思路。
源码: Jiangjao/python_learn_demo/blob/master/hashmap.py
《learn-python-the-hard-way》中文版
部分图片来源:百度图片
《数据结构与算法 javascript形容》
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 哈希表(simple_hash_table)的实现