資料結構和演算法 12 高階查詢演算法(下)

2022-03-28 13:13:22 字數 1243 閱讀 8547

雜湊(雜湊)技術既是一種儲存方法,也是一種查詢方法。然而它與線性表、樹、圖等結構不同的是,前面幾種結構,資料元素之間都存在某種邏輯關係,可以用連線圖示表示出來,而雜湊技術的記錄之間不存在什麼邏輯關係,它只與關鍵字有關聯。因此,雜湊主要是面向查詢的儲存結構。雜湊技術最適合的求解問題是查詢與給定值相等的記錄。

hashtable 與 dictionary 的區別:

①hashtable使用閉雜湊法來解決衝突,而dictionary使用開雜湊法解決衝突;

②dictionary相對hashtable來說需要更多的儲存空間,但它不會發生二次聚集的情況,並且使用了泛型,相對非泛型可能需要的裝箱和拆箱操作,dictionary的速度更快;

③hashtable使用了填充因子的概念,而dictionary則不存在填充因子的概念;

④hashtable在擴容時由於重新計算雜湊位址,會消耗大量時間計算,而dictionary的擴容相對hashtable來說更快;

⑤單執行緒程式中推薦使用dictionary,而多執行緒程式中則推薦使用hashtable。預設的hashtable允許單執行緒寫入,多執行緒讀取,對hashtable進一步呼叫synchronized()方法可以獲得完全執行緒安全的型別。相反,dictionary不是執行緒安全的,必須人為使用lock語句進行保護,效率有所降低。

4.2 測試對比結果

(1)sorteddictionary測試結果:

sorteddictionary內部是紅黑樹結構,在插入和刪除操作時需要經過大量的旋轉操作來維持平衡,因此耗時是三種型別中最多的。此外,在插入過程中,引起了gc大量的垃圾**操作。

(2)hashtable測試結果:

hashtable插入操作的耗時和sorteddictionary相近,但刪除操作卻比sorteddictionary快了好幾倍。

(3)dictionary測試結果:

dictionary在插入和刪除操作上是三種型別中最快的,且對gc的友好程度上也較前兩種型別好很多。

c 資料結構(1 2演算法)

程式 資料結構 演算法 可見演算法的重要程度。下面只從演算法的特性 演算法的評價標準和演算法的時間複雜度等三個方面進行介紹。乙個演算法應該具備以下 5 個特性 1 有窮性 finity 乙個演算法總是在執行有窮步之後結束,即演算法的執行時間是有限的。2 確定性 unambiguousness 演算法...

資料結構查詢演算法

又叫線性查詢,是一種基本的查詢演算法。查詢過程 從表中第乙個 或最後乙個 記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,如果查詢到表中最後乙個元素,還沒有找到,則查詢不成功。public intsearch int array int key return ...

資料結構和演算法 2 基礎查詢演算法

有兩種對列表內資料進行查詢的方法 順序查詢和二叉查詢。當資料項在列表內隨機排列的時候可以使用順序查詢,而當資料項在列表內有序排列的時候則會用到二叉查詢。順序查詢 二叉查詢 using system using system.collections.generic using system.linq ...