算法-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,都是無序的

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