JavaScript实现哈希表的方法


本篇内容主要讲解“JavaScript实现哈希表的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript实现哈希表的方法”吧!它可以提供非常快速的插入-删除-查找操作无论多少数据,插入和删除需要接近常量的时间:即O(1)的时间级。实际上,只需要几个机器指令即可完成。哈希表的速度比树还要快,基本可以瞬间查找到想要的元素哈希表相对于树来说编码要容易很多哈希表中的数据是没有顺序的,所以不能以一种固定的方式来遍历其中的元素通常情况下,哈希表中的key是不允许重复的,不能放置相同的key,用于保存不同的元素空间利用率不高,底层使用的是数组,并且某些单元格没有被利用哈希表并不好理解,不像数组、链表和树等可通过图形的形式表示其结构和原理。哈希表的结构就是数组,但它神奇之处在于对下标值的一种变换,这种变换我们可以称之为哈希函数,通过哈希函数可以获取HashCode哈希化:大数字转化成数组范围内下标的过程,称之为哈希化哈希函数:我们通常会将单词转化成大数字,把大数字进行哈希化的代码实现放在一个函数中,该函数就称为哈希函数哈希表:对最终数据插入的数组进行整个结构的封装,得到的就是哈希表。哈希化过后的下标依然可能重复,如何解决这个问题呢?这种情况称为冲突,冲突是不可避免的,我们只能解决冲突解决冲突常见的两种方案:方案一:链地址法拉链法);如下图所示,我们将每一个数字都对10进行取余操作,则余数的范围0~9作为数组的下标值。并且,数组每一个下标值对应的位置存储的不再是一个数字了,而是存储由经过取余操作后得到相同余数的数字组成的数组链表总结:链地址法解决冲突的办法是每个数组单元中存储的不再是单个数据,而是一条链条,这条链条免费云主机域名常使用的数据结构为数组或链表,两种数据结构查找的效率相当(因为链条的元素一般不会太多)。方案二:开放地址法;开放地址法的主要工作方式是寻找空白的单元格来放置冲突的数据项。据探测空白单元格位置方式的不同,可分为三种方法:线性探测二次探测再哈希法可以看到随着装填因子的增加,平均探测长度呈线性增长,较为平缓。在开发中使用链地址法较多,比如Java中的HashMap中使用的就是链地址法。哈希表的优势在于它的速度,所以哈希函数不能采用消耗性能较高的复杂算法。提高速度的一个方法是在哈希函数中尽量减少乘法和除法。性能高的哈希函数应具备以下两个优点:快速的计算均匀的分布霍纳法则:在中国霍纳法则也叫做秦九韶算法,具体算法为:求多项式的值时,首先计算最内层括号内一次多项式的值,然后由内向外逐层计算一次多项式的值。这种算法把求n次多项式f(x)的值就转化为求n个一次多项式的值。变换之前:乘法次数:n(n+1)/2次;加法次数:n次;变换之后:乘法次数:n次;加法次数:n次;如果使用大O表示时间复杂度的话,直接从变换前的O(N2)降到了O(N)。为了保证数据在哈希表中均匀分布,当我们需要使用常量的地方,尽量使用质数;比如:哈希表的长度、N次幂的底数等。Java中的HashMap采用的是链地址法,哈希化采用的是公式为:index = HashCode(key)&(Length-1)即将数据化为二进制进行运算,而不是取余运算。这样计算机直接运算二进制数据,效率更高。但是JavaScript在进行叫大数据运算时会出现问题,所以以下使用JavaScript实现哈希化时还是采用取余运算。到此,相信大家对“JavaScript实现哈希表的方法”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: jquery如何修改type属性

本篇内容主要讲解“jquery如何修改type属性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery如何修改type属性”吧! 在jquery中,可以利用attr()方法来修改元素的type属性,该方法可以…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/29 11:14
下一篇 09/29 11:15

相关推荐