雜湊表概述

2021-07-05 04:56:38 字數 1293 閱讀 8084

基本概念

通過記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f以及處理衝突的方法,使得每個關鍵字和結構中乙個唯一的位置相對應。這樣對於關鍵字k根據對應關係f,就可以得到儲存位置f(k)。稱這種對應關係f為雜湊函式。

與二叉樹不同,雜湊表中儲存的資料是無序的,對於查詢任意資料高效,二叉樹查詢某一範圍的一些資料比較高效。

為了方便讀者閱讀後面的內容,這裡列舉一下hashtable實現中出現的基本概念。雜湊表是一種通過雜湊函式將特定的鍵對映到特定值的一種資料結構,他維護者鍵和值之間一一對應關係。

雜湊表可以理解為陣列的擴充套件或者關聯陣列,陣列使用數字下標來定址,如果關鍵字的範圍較小且是數字的話,可以直接使用陣列來完成雜湊表,而如果關鍵字範圍太大,如果直接使用陣列我們需要為所有可能的key申請空間。很多情況下這是不現實的。即使空間足夠,空間利用率也會很低,這並不理想。同時鍵也可能不是數字,所以人們使用一種對映函式(雜湊函式)來將關鍵字對映到特定的域中。

陣列:定址容易,插入和刪除困難;鍊錶:定址困難,插入和刪除容易。

理想情況下,雜湊表的插入和查詢操作的時間複雜度均為o(1),任何乙個資料項可以在乙個與雜湊表長度無關的時間內計算出乙個雜湊值,然後在常量時間內定位到乙個桶。

使用雜湊表的查詢主要有如下兩個步驟:

1.使用雜湊函式將被查詢的鍵轉換為陣列的索引。這個過程是將長度不同的字串對映為固定長度的整數值。根據鍵的型別和雜湊表的大小選擇不同的雜湊函式。

2.處理雜湊衝突。因為鍵是所有任意長度的字串,數量是無窮的,而雜湊值長度固定的常數,數量是有限的,同時根據生日悖論,必然有不同的鍵對映到同乙個雜湊值,這就產生了雜湊衝突。

雜湊表是乙個時間和空間做權衡的資料結構。如果沒有記憶體限制,那麼可以直接將鍵作為陣列的索引,此時所有查詢的時間複雜度是o(1);如果沒有時間限制,將鍵無序存放,查詢是順序查詢,時間複雜度是o(n)。而雜湊表是在少量空間上實現約為o(1)時間複雜度的查詢。

可以通過設計和使用不同的雜湊函式和衝突解決方案在時間和空間效能上做取捨。

根據關鍵字的雜湊值而直接進行訪問。

雜湊表在實踐中使用的非常廣泛,例如編譯器通常會維護乙個符號表來儲存標記,很多高階語言中也顯式的支援雜湊表。雜湊表通常提供查詢(search),插入(insert),刪除(delete)等操作,這些操作在最壞的情況下和鍊錶的效能一樣為o(n)。不過通常並不會那麼壞,合理設計的雜湊演算法能有效地避免這類情況,通常雜湊表的這些操作的時間複雜度為o(1)。這也是它被鍾愛的原因。正是因為雜湊表在使用上的便利性及效率上的表現,目前大部分動態語言的實現中都使用了雜湊表。

參考1.

2.**演算法和資料結構: 十一 雜湊表

3.深入理解php核心-雜湊表

雜湊表概述

雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表或雜湊表。具體表現為 儲存位置 f key 1.在儲存時,通過雜湊函式計...

雜湊表概述

本文對雜湊表進行大體上的概述和分析,如果你之前沒有學過相關知識,可以參考雜湊表以及雜湊表這兩篇文章,有詳細的例子介紹,本文只提供快速回憶和瀏覽。一 什麼是雜湊表?雜湊表本質就是支援隨機查詢的陣列,即可以根據關鍵字快速查詢值的一種陣列,也就是雜湊表。雜湊表實現的關鍵就是雜湊函式,所謂的雜湊函式是一種建...

雜湊表查詢(雜湊表)概述

即通過某個函式 f 使得 儲存位置 f 關鍵字 這樣我們可以通過查詢關鍵字不需要比較就可獲得需要的記錄的儲存位置。這就是新的儲存技術 雜湊技術 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係 f,使得每個關鍵字 key 對應乙個儲存位置 f key 查詢時,根據這個確定的對應關係找...