雜湊表 Hash table 及其構造

2022-07-31 07:51:15 字數 1912 閱讀 5849

雜湊表(hash table)

雜湊表,是根據關鍵碼值(key value)而直接進行訪問的資料結構。它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。

已知的查詢方法:

1.順序查詢 o(n)

2.二分查詢(靜態查詢) o(log2n)

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

平衡二叉樹 o(log2n)

q:如何快速搜尋到需要的關鍵字?如果關鍵字不方便比較怎麼辦?

查詢的本質:已知物件找位置

有序安排物件:全序、半序

直接「算出」物件位置:雜湊

雜湊查詢的兩項基本工作:

時間複雜度幾乎是常量o(1) 查詢時間與問題規模無關

關鍵操作:查詢 插入 刪除

雜湊(hashing)的基本思想:

裝填因子(loading factor):

設雜湊表空間大小為m, 填入表中元素的個數時n, 則稱α = n/m為雜湊表的裝填因子

雜湊函式的構造方法:

乙個「好」的雜湊函式一般考慮下列兩個因素:

1.計算簡單,以便提高轉換速度

1.直接定址法

h(key) = a * key + b (a, b為常數)

如:h(key) = key - 1990

2.除留餘數法

h(key) = key mod p

如 h(key) = key % 17   p = tablesize = 17

一般p取素數

3.數字分析法

分析數字關鍵字在各位上的變化情況,取比較隨機的為作為雜湊位址

h(key) = h1 (key)*10 + 10       (當 key[18] = 『x』時)

或 = h1 (key)*10 + key[18]-『0』   (當 key[18] 為』0』~』9』時)

4.摺疊法:

5.平方取中法:

盡量使每一位都對最終結果產生影響

1.簡單的雜湊函式—ascⅱ碼加和法

h(key) = (σkey[i]) mod tablesize

衝突嚴重 如a3, b2, c1, eat, tea

2.簡單的改進—前3個字元移位法

h(key)=(key[0]*272 + key[1]*27 + key[2])mod tablesize

27 可能有空格

仍然衝突:string street strong structure.. 並且空間浪費 3000/pow(26, 3) = 30%

3.好的雜湊函式—移位法

如:h(「abcde」)=『a』*324+』b』*323+』c』*322+』d』*32+』e』

index hash( const

char *key, int

tablesize )

hash table 雜湊表(雜湊表)

hash table 也叫雜湊表。涉及到雜湊函式 雜湊衝突處理的問題。雜湊函式是雜湊表的關鍵,是用來從值到雜湊表索引 存放位置 的對映。比如 要存放乙個學校學生的姓名,他們是amanda,jack,andy,tom,bob,black等等500個人。我們可以設計乙個雜湊表,容量為500,來存放這些學...

HashTable 雜湊表(雜湊表)

雜湊表 雜湊表 是根據關鍵字 key 而訪問在記憶體位置的資料結構。其方法是 它通過乙個關鍵值的函式將所需的資料對映到表中的位置來訪問資料,這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表 雜湊表 構造雜湊表的幾種方法 直接定址法 取關鍵字的某個線性函式為雜湊位址,hash key key 或 h...

HashTable雜湊表 雜湊表(雜湊桶)

處理雜湊衝突的開鏈法 拉鍊法 雜湊桶 使用素數做雜湊表的長度,可以降低雜湊衝突 素數表size t getnextprime size t num 素數表 雜湊桶的節點的定義 template struct hashnode 在插入前檢查容量,以及負載因子。不夠就進行增容,按素數表進行增,以減小雜湊...