详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)
雖然上文有提到怎么解釋的開放地址法處理hash沖突,但是當時只是給了個簡單的圖,沒有 詳細講解一下,
我當時有點不明白,回頭查查資料,然后親自動手,整理了一下。
然后我就三幅圖詳細講解一下:
什么叫線性探測再散列;
什么叫平方探測再散列(二次探測再散列);
老師的ppt吧。
給個原始數(shù)據(jù)如上圖。
下面詳細解析。
上面的是線性探測再散列。這個簡單。
這個就是那個2次平方再散列啦。
估計講的很詳細啦吧。
這個只是單純的看,是不行的,你只是看到,有三個數(shù)據(jù)在按一定的算法(也就是mod 11 取余)散列到數(shù)組上的時候,看到有三個數(shù)據(jù)產(chǎn)生沖突啦。那么為了讓這些數(shù)據(jù)更好的全部都能落在這個數(shù)組上,更好的利用這個數(shù)組,不浪費空間,就要去充分利用未分配到數(shù)據(jù)的數(shù)組上的其他位置。那么這就是解決沖突的需求。線性探測法:剛剛開始的時候,數(shù)據(jù)未沖突的時候,都按照取余的結(jié)果挨個按自己的取余結(jié)果,可以理解為你上學(xué)分班時候,你選座位。當你要去的座位,沒人選的時候,你就坐上去,然后這個位置就被選過了,下次如果還有人和你一樣,也選了這個座位,那么,他就沖突了。按照線性探測法的做法是:他本來是要坐你的位置的,但是,你已經(jīng)坐了,那么,他只能以你為基準,查看你的座位的下一個,如果沒人就坐下,如果有人,繼續(xù)找下一個。當他也坐下來之后,后面再來的。發(fā)現(xiàn)自己的位置,被這個沖突的哥們占位了,那么,沒辦法,只能按剛剛那哥們的做法,繼續(xù)找自己的位置。直到這個班級的所有位置都有人坐,那就OK。對應(yīng)到這hashmap上就是 把這個數(shù)組的所有位置都給占滿咯。這個線性探測和平方探測的區(qū)別就是在沖突的哥們找自己的位置的差別,一個是挨個查找;一個是高級點,或+n的平方,或-n的平方。都是為了占滿教室的位置。
下面是一個總覽的鏈接:
java 解決Hash(散列)沖突的四種方法–開放定址法(線性探測,二次探測,偽隨機探測)、鏈地址法、再哈希、建立公共溢出區(qū)
總結(jié)
以上是生活随笔為你收集整理的详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ioszip怎么解压_unzip解压命令
- 下一篇: java在线生成uuid_Java生成u