永发信息网

什么是链表 和 哈希表``

答案:2  悬赏:50  手机版
解决时间 2021-12-31 18:50
什么是链表 和 哈希表``
最佳答案
Hash Table(哈希表)就是根据对象的特征进行定位的一种数据结构。一个简单的实现方法是将对象通过某种运算得到一个整数,再让这个整数除以哈希表的大小,取其余数,以此作为对象的存储位置。
很多的书上认为,哈希表的大小最好是选择一个大的质数,并且最好不要和2的整数幂接近。《算法导论》上还认为,最不好的选择是哈希表的大小恰好是2的整数幂,对此的解释是(只记得大意):因为计算机是用二进制存储的,当一个二进制数除以一个2的整数幂的时候,结果就是这个二进制数的后几位,前面的位都丢失了,也就意味着丢失了一部分信息,进而导致哈希表中的元素分布不均匀。
这个解释看似合理,但我不认同。不光是我,Java开发小组的人也不认同。Java里的HashSet类偏偏就把哈希表的大小设置成2的整数幂。可以设想一下,对于自然数集合中的任意一个数x,对于一个正整数M,难道x mod M为某些值的概率会大些吗?显然不是,因为x是在自然数集合里任选的,当选取的次数非常多时,x mod M的结果应该是平均分布在[0,M-1]中。我认为《算法导论》的错误在于先引入了二进制,其实二进制和哈希表的“碰撞”根本没有什么关系;然后说对除以2^n的余数会丢失位,丢失信息,这显然也不对,因为只要x>=M,x mod M的结果总是要“丢失一些信息的”。照《算法导论》的说法,如果计算机采用十进制,那哈希表的容量是10^n的话岂不是很糟?这种解释显然站不住脚。
我认为对于x mod M这样的哈希函数来说,好坏应该取决于x的生成方式和M的值。比如一个字符串“ABC”,如果我让x(ABC)=65*128^2+66*128+67,即把字符串当成一个128进制的整数,那么若M=128,那就很糟糕了。因为这样无论是什么字符串,最终结果只取决于最后一个字符,这才会造成分布不均匀。
所谓链表是指一种常用的数据结构通常由一系列结点组成,每个结点含两个信息域和指针域.信息域用于存放有关的数据项,指针域则用于指向链表的下一个结点。
全部回答
谢谢解答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
长点的字有哪些
It’s more than half a century my grandfa
选哪个,请给出原因.A.proving B.proved C.was
跑得快用英文怎么说
macbook pro 会在2018年3月再次更新8代酷睿cp
哺乳期间不穿内衣乳房是不是往下坠
雁峰区中国建设银行(衡阳雁峰支行)怎么去啊,
雨前何其芳最后的鸽群带着低弱的笛声在微风里
刘姥姥初进荣国府阅读答案
赔偿费用应计入哪个会计科目?
柘城县商丘柘城县皇集乡卫生院这个地址怎么能
单选题“长江后浪推前浪,一辈新人换旧人。”
房县十堰可可鸭童装房县专卖店地址在哪,我要
怎么重设微信号
今天是四九吗 第几天
推荐资讯
海兴县工业和信息化局地址在什么地方?想过去
伊川县公安局交通警察大队在什么地方啊,我要
钢结构设计中怎样进行节点设计
铁边城派出所地址有知道的么?有点事想过去!
洛克王国中的火花、喵喵丶水蓝蓝的超进化,怎
易语言怎么才能隐藏运行一个软件
王少济每平方尺多少钱
韩家庄村委会在什么地方啊,我要处理点事
阿坝神座村近二天气候如何
貔貅摆放客厅
清流征管所网点位置在什么地方啊,我要过去办
环馨小区地址在哪,我要去那里办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?