算法-java-散列

1.使用多个映射的例:

1)构建一个Map结构key为单词,值为所有单词中与key值仅有一个单词不同时的list集合;-----96s

2)构建一个Map结构,key为单词长度,值为所有长度为key值的list集合,然后把这几个map分别执行1)中提到的方式;--------51s

3)将长度一致的单词放到一个list中,然后将ine为key,wine、hine组成的list为value,最后循环遍历这个list,形成最终key为单词,value是多个wine、hine组成的list。----------4s

2.散列

利用散列函数将key值转换成一个int值,好的散列函数尽量将int值分配的较为均匀,这样不浪费空间,而且多个不同key值,散列为一个int值的情况也不多,即同一位置存储的值不会很多。

3.分离链接法:

多个key值映射到一个位置时,多个value值形成一个链表(linkedList)。装载因子(λ)是总的元素个数比表的大小,平均来看,分离链接法的装载因子是1。且查找元素的平均复杂度为1+λ/2,所以影响查找效率的是装载因子而不是表的大小。

4.探测散列方法

当通过散列函数得到的位置处有值时,通过(h(x)+f(i)) mod TableSize再次寻找位置看是否合适

若f(i)=i 则为线性探测法,若f(i)=i*i则为平方探测法,若f(i)=i*hash2(x);则为二次散列法,hash2是第二个散列函数,这个函数一般为R-(x mod R),其中R为小于表尺寸的素数。表的尺寸应为素数,不然若hash2算出的值若为表长的一个因子,那么可以探测出的值就是有限的!

5.再散列

对于表中的数据量到达一定程度时,将表的大小进行扩充;新建一个更大的表,把旧的数据填入其中

6.利用hash的HashMap和hashSet,都是无序的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章