雜湊表簡介11 1 1

2021-08-01 02:48:45 字數 2542 閱讀 2792

編譯處理時候涉及到變數及屬性的管理,動態查詢管理

插入:新變數

查詢:變數的引用

如果利用查詢樹(搜尋樹)進行變數管理:

兩個變數名(字串)比較效率不高

目前已經知道的幾種查詢方法:

順序查詢   o(n)

二分查詢  o(log2 n)   提前排序

二叉搜尋樹 o(h)h為樹的高度

平衡二叉樹 o(log2 n)

如果根據物件算出物件的位置,那麼插入、查詢、刪除時間複雜度幾乎為o(1),這就是要介紹的雜湊表

雜湊表的兩個重點:

計算物件的位置:雜湊函式

衝突的解決策略:解決多個物件落在同一位置的情況

以下來自網路

雜湊函式能使對乙個資料序列的訪問過程更加迅速有效,通過雜湊函式,

資料元素將被更快地定位。

實際工作中需視不同的情況採用不同的

雜湊函式,通常考慮的因素有:

· 計算

雜湊函式所需時間

· 關鍵字的長度

· 雜湊表的大小

· 關鍵字的分布情況

· 記錄的查詢頻率

1.直接定址法:取關鍵字或關鍵字的某個線性函式值為雜湊位址。即h(key)=key或h(key) = a·key + b,其中a和b為常數(這種

雜湊函式叫做自身函式)。若其中h(key)中已經有值了,就往下乙個找,直到h(key)中沒有值了,就放進去。

2. 數字分析法:分析一組資料,比如一組員工的出生年月日,這時我們發現出生年月日的前幾位數字大體相同,這樣的話,出現衝突的機率就會很大,但是我們發現年月日的後幾位表示月份和具體日期的數字差別很大,如果用後面的數字來構成雜湊位址,則衝突的機率會明顯降低。因此數字分析法就是找出數字的規律,盡可能利用這些資料來構造衝突機率較低的雜湊位址。

3. 平方取中法:當無法確定關鍵字中哪幾位分布較均勻時,可以先求出關鍵字的平方值,然後按需要取平方值的中間幾位作為雜湊位址。這是因為:平方後中間幾位和關鍵字中每一位都相關,故不同關鍵字會以較高的概率產生不同的雜湊位址。

[2]例:我們把英文本母在字母表中的位置序號作為該英文本母的內部編碼。例如k的內部編碼為11,e的內部編碼為05,y的內部編碼為25,a的內部編碼為01, b的內部編碼為02。由此組成關鍵字「keya」的內部**為11052501,同理我們可以得到關鍵字「kyab」、「akey」、「bkey」的內部編碼。之後對關鍵字進行平方運算後,取出第7到第9位作為該關鍵字雜湊位址,如下圖所示

關鍵字

內部編碼

內部編碼的平方值

h(k)關鍵字的雜湊位址

keya

11050201

122157778355001

778

kyab

11250102

126564795010404

795

akey

01110525

001233265775625

265

bkey

02110525

004454315775625

315

[2]

4. 摺疊法:將關鍵字分割成位數相同的幾部分,最後一部分位數可以不同,然後取這幾部分的疊加和(去除進製)作為雜湊位址。數字疊加可以有移位疊加和間界疊加兩種方法。移位疊加是將分割後的每一部分的最低位對齊,然後相加;間界疊加是從一端向另一端沿分割界來回摺疊,然後對齊相加。

5. 隨機數法:選擇一

隨機函式,取關鍵字的隨機值作為雜湊位址,通常用於關鍵字長度不同的場合。

6. 除留餘數法:取關鍵字被某個不大於

雜湊表表長m的數p除后所得的餘數為雜湊位址。即 h(key) = key mod p,p<=m。不僅可以對

關鍵字直接取模,也可在摺疊、平方取中等運算之後取模。對p的選擇很重要,一般取素數或m,若p選的不好,容易產生同義詞。

[3]

1. 開放定址法:hi=(h(key) + di) mod m,i=1,2,…,k(k<=m-1),其中h(key)為

雜湊函式,m為

雜湊表長,di為增量序列,可有下列三種取法:

1.1. di=1,2,3,…,m-1,稱線性探測再雜湊;

1.2. di=1^2,-1^2,2^2,-2^2,⑶^2,…,±(k)^2,(k<=m/2)稱二次探測再雜湊;

1.3. di=

偽隨機數序列,稱偽隨機探測再雜湊。

2. 再

雜湊法:hi=rhi(key),i=1,2,…,k rhi均是不同的

雜湊函式,即在同義詞產生位址衝突時計算另乙個雜湊函式位址,直到衝突不再發生,這種方法不易產生「聚集」,但增加了計算時間。

3. 鏈位址法(拉鍊法)

4. 建立乙個公共溢位區

後面將用c語言實現上面各種不同衝突策略的情況,並理論分析各自效能

雜湊表簡介

雜湊表又名雜湊表,其主要目的是用於解決資料的快速定位問題。考慮如下乙個場景。一列鍵值對資料,儲存在乙個table中,如何通過資料的關鍵字快速查詢相應值呢?不要告訴我乙個個拿出來比較key啊,呵呵。大家都知道,在所有的線性資料結構中,陣列的定位速度最快,因為它可通過陣列下標直接定位到相應的陣列空間,就...

雜湊表簡介

一 雜湊表 hashtable 簡述 在.net framework中,hashtable是system.collections命名空間提供的乙個容器,用於處理和表現類似key value的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫 value用於儲存對應於key的值。hashta...

雜湊表簡介

雜湊表的c 實現 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演...