日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈希表的实现(取余法)

發布時間:2025/5/22 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈希表的实现(取余法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 哈希表,又叫散列表,它可以提供快速的插入查找操作,對于大規模數據的查找時間空間效率會很高。哈希表構造方式有多種,其中取余法在比賽中最常用。

? ? 如果讀入很多值非常大的數,讓你判斷一些數是否出現過。如果用桶來記錄,空間開不了那么大。如果排序后來查,時間效率又低。但可以通過hash優化解決這個問題。

? ? 取余法簡單地說,就是給每個數mod一個合適的值X,得到的余數放在數組中下標與其一致的位置,由于X不會很大,且余數不會超過數X,數組的大小在0..X-1范圍內,不會超空間,如果查某個數,將這個數mod X后在直接在數組中找到。

? ? 但是這樣一些不同數據會出現在同一個地址上,比如說X=5,13 mod X=3,18 mod 5=3,這兩個數(13,18)便產生了沖突。

? ? 為了解決沖突,可以使用掛鏈的形式,將沖突數據像掛鏈一樣掛在同一位置,將13放在5的位置,將18掛在13后面,如果要查18,先18 mod 5=3 找到3的位置,先看3位置掛鏈上的第一個數是13,不等于18,繼續往后面找,直到找到18,如果找不到,說明沒有出現,按要求輸出即可。我們可以發現,這樣的存儲方式很像(或者就是)鏈表的存儲方式,所以我們可以使用鏈表來處理“掛鏈”的部分。這樣查找的問題就解決了。

? ? ?經分析可以得知,hash表查找時間最好為O(1),最差為O(n),由于O(n)情況對于比賽的數據一般不會出現,如果選擇了合適的X值,時間效率會非常好。

? ? ?如何選擇X值呢,通常是選一個較大但不會使數組超空間的質數。?


具體實現:

初始化

typehash=^node;node=recorddx:int64;next:hash;end; View Code

?

插入操作

procedure put(x:int64); var q:hash;xx:int64; beginxx:=x mod maxn;//maxn就是那個適當的正整數Xnew(q);q^.dx:=x; q^.next:=a[xx];a[xx]:=q; end; View Code


查找操作

function find(x:int64):boolean; var p:hash; beginxx:=x mod maxn;new(p);p:=a[xx];while p<>nil dobeginif p^.dx=x then exit(true);p:=p^.next;end;exit(false); end; View Code

??????


?

轉載于:https://www.cnblogs.com/qtyytq/p/4265759.html

總結

以上是生活随笔為你收集整理的哈希表的实现(取余法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。