資料結構之雜湊表

2021-08-26 07:50:08 字數 1316 閱讀 9293

wikipedia上的解釋

下圖示意了雜湊表(hash table)這種資料結構。

雜湊表

如上圖所示,首先分配乙個指標陣列,陣列的每個元素是乙個鍊錶的頭指標,每個鍊錶稱為乙個槽(slot)。哪個資料應該放入哪個槽中由雜湊函式決定,在這個例子中我們簡單地選取雜湊函式h(x) = x % 11,這樣任意資料x都可以對映成0~10之間的乙個數,就是槽的編號,將資料放入某個槽的操作就是鍊錶的插入操作。

如果每個槽裡至多只有乙個資料,可以想像這種情況下searchinsertdelete操作的時間複雜度都是o(1),但有時會有多個資料被雜湊函式對映到同乙個槽中,這稱為碰撞(collision),設計乙個好的雜湊函式可以把資料比較均勻地分布到各個槽中,盡量避免碰撞。如果能把n個資料比較均勻地分布到m個槽中,每個糟裡約有n/m個資料,則searchinsertdelete和操作的時間複雜度都是o(n/m),如果n和m的比是常數,則時間複雜度仍然是o(1)。一般來說,要處理的資料越多,構造雜湊表時分配的槽也應該越多,所以n和m成正比這個假設是成立的。

請讀者自己編寫程式構造這樣乙個雜湊表,並實現searchinsertdelete操作。

如果用我們學過的各種資料結構來表示n個資料的集合,下表是searchinsertdelete操作在平均情況下的時間複雜度比較。

各種資料結構的search、insert和delete操作在平均情況下的時間複雜度比較

資料結構

search

insert

delete

陣列o(n),有序陣列折半查詢是o(lgn)

o(n)

o(n)

雙向鍊錶

o(n)

o(1)

o(1)

排序二叉樹

o(lgn)

o(lgn)

o(lgn)

雜湊表(n與槽數m成正比)

o(1)

o(1)

o(1)

根據以上演算法,抽象資料結構如下:

/*雜湊表*/

struct obj_container ;

// 每個slot 為乙個鍊錶

struct bucket_entry bucket;

接下來實現 search, link , unlink函式。

資料結構之雜湊表(雜湊表)

今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...

資料結構之雜湊表

雜湊表和雜湊化有乙個重要的概念是如何把關鍵字轉換成陣列下標,在雜湊表中這個轉換是通過雜湊函式來完成的。比如規定乙個單詞含有4個字元,對於單詞cats,我們採用 冪的連乘 的方式將乙個單詞對映成數字。因為有27個可能的字元,包括空格,所以冪採用27,則cats的數字下標是3 27 3 1 27 2 2...

資料結構之雜湊表

雜湊表 hashtable 也叫雜湊表,是根據關鍵碼值而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,從而加快查詢速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。上面的基本介紹完了,是不是有些蒙 大佬走開 我來 通俗 說一下我的理解,不考慮其他東西,雜湊表...