查詢類經典資料結構巡禮

2021-07-23 11:27:27 字數 1174 閱讀 2416

後台開發最常見的操作就是對伺服器資料的增刪改查。與本地檔案讀寫不同,伺服器通常借助結構化索引來管理和快取資料,以滿足網際網路資料訪問的高效能、易用性、穩定性、一致性和擴充套件性等方面的需求。

本文簡要介紹實現這些結構化索引的經典底層資料結構。包括:

本著歸納總結

拋磚引玉的目的,本文試圖

抓核心要點而非全面細節,讀者可以按圖索驥,研究和發現更多隱藏的細節。

以下分篇展開各資料結構具體內容的介紹。

雜湊表根據鍵直接進行訪問的資料結構。

關鍵概念:雜湊函式、衝突、裝載因子、再雜湊(rehashing)

雜湊函式:計算鍵到雜湊桶(儲存位置)的對映關係。

衝突:不同鍵由雜湊函式計算後對映到同一雜湊桶。

裝載因子:雜湊表儲存的鍵值與雜湊桶個數的比值。

再雜湊:當裝載因子超過預設高值或者低於預設低值(可選)時,需要調整雜湊桶的個數和相應鍵值儲存位址,以控制鍵值查詢次數或占用空間。

處理衝突的方式:

1.拉鍊法,用鍊錶儲存衝突值。

2.開放位址法,相鄰桶存放衝突值。

圖1:拉鍊法雜湊表,來自網路

雜湊表直觀高效,是最常用的查詢類資料結構,標配於主流語言標準庫的關聯容器、伺服器負載均衡策略、各種快取元件和鍵值資料庫等。

多級雜湊

基本概念與雜湊表類似,區別在於雜湊桶的資料結構。

重要實現細節如下:

使用二維陣列存放雜湊桶,每個雜湊桶對應儲存乙個鍵值。

二維陣列的每一行稱為一階,為減少衝突,每一階的雜湊桶個數都是素數。

查詢時逐階計算雜湊桶位址,遇到衝突時,往下一階繼續查詢。

由於衝突概率逐階減小,每行雜湊桶數量逐行減少。

當無法插入資料時,只需繼續增加階數。

圖2:多級雜湊結構,來自網路

多級雜湊實現簡單,查詢快速,空間利用率高,容易實現並行(高併發)。常用於實現伺服器記憶體快取結構,尤其是基於共享記憶體的快取資料的管理。

資料結構經典演算法

例如 4和3只出現過一次,請找出出現過一次的數。首先想到的 應該是上乙個提到的遍歷兩次取出沒有找到的相同的數字,如下 public static list findonlynum int array if j array.length if array i array j if j array.le...

查詢 資料結構

分類 資料結構與演算法 c c 2012 07 24 16 17 614人閱讀收藏 舉報幾種查詢演算法 順序查詢,折半查詢,分塊查詢,雜湊表 一 順序查詢的基本思想 從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查詢成功,並給出資料元素在表中的位置 若整個表檢測完,仍未找到與k...

資料結構 查詢

查詢 searching 也稱 檢索,查表,就是在大量的資訊集中尋找乙個特定的資訊元素。查詢就是根據 給定的關鍵字值,在 查詢表中確定乙個關鍵字等於給定的 記錄或資料元素。若存在這樣的資料元素,則稱查詢成功的,否則查詢不成功。查詢是許多重要的電腦程式中 最耗費時間的部分,查詢演算法的優劣密切關係著查...