查詢 檢索 演算法 總結1 靜態查詢結構概論

2021-05-22 20:27:43 字數 1274 閱讀 9402

在計算機許多應用領域中,查詢操作都是十分重要的研究技術。查詢效率的好壞直接影響應用軟體的效能。比如說:

(1) 全文檢索技術中對文字建立索引之後,對索引的查詢效率將決定搜尋引擎的質量。

(2) mysql資料庫的索引就是b+樹結構,查詢效率極高。

(3) windows os的檔案系統結構也是採用b+樹進行儲存的。

靜態查詢:資料集合穩定,不需要新增,刪除元素的查詢操作。

動態查詢:資料集合在查詢的過程中需要新增或刪除元素。

靜態查詢結構概論

當把看似雜亂無章的資料組織成具有一定結構和一定規則的集合體時,查詢的效率就會大不一樣了。

【順序查詢】 大家都知道,最簡單的查詢方法就是順序查詢 (乙個接乙個得查下去)。這種線性結構的查詢效率是最低的,時間複雜度在o(n)數量級,最壞的情況莫過於所有資料都找遍了,還是沒找到。

難道真的每乙個資料都必須找一次嗎?

【折半查詢】 很顯然的乙個例子就是利用折半查詢(二分查詢) 法對有序的線性資料進行查詢。每一次都找1/2的部分,查詢次數當然就大大減少了。時間複雜度在o(log2 n)數量級上。

折半查詢實際就是一顆二叉樹遍歷,其中最中間的資料就是二叉樹的根。但是問題又來了,如果這個根資料一年才查詢一次,而這棵樹的葉子資料1秒鐘需要查詢1w次(考慮資料的查詢概率)。這種折半查詢的效率又不行了?

【靜態最優查詢樹/次優查詢樹】 考慮到上面折半查詢在概率問題下的效率不行,我們就想能不能把折半查詢二叉樹中概率最大的資料放在根的位置上或者放在離根較近的位置上。基於此,靜態最優查詢樹/次優查詢樹的思想就是在折半查詢二叉樹的基礎上求解乙個帶權(資料概率)路徑長度最小/近視最小的樹。總體上說,靜態最優/次優查詢樹的時間複雜度也在 o(log2 n)數量級上(特別是在資料具有查詢概率的情況下也能保證這個效率)。

此外,還有一些別的靜態查詢結構:索引順序表的分塊查詢,線性衝突再雜湊的hash表的查詢(hash表將在乙個專題裡面講到)等。

上面介紹查詢表都屬於靜態查詢結構,也就是說當需要查詢的資料集合動態變化的時候,這些結構都很不方便。 比如:

折半查詢: 當查詢過程中沒有發現元素a的時候,需要動態新增元素a,此時整個有序表將面臨重新排序的問題。

靜態最優查詢樹: 新增元素不光要重新排序,而且原有的整棵帶權路徑長度最小值的樹也將重建(最優解變化了)。這在代價上是沉重的,這也是為什麼 靜態最優查詢樹並不適合實際應用的巨大缺陷了。

正是由於實際應用中,很多時候需要在查詢的同時進行新增,刪除操作。因此便捷的動態查詢結構就十分的總要了。下面我們用專題的形式詳細講解二叉查詢樹 ,平衡二叉樹 ,紅黑樹 ,b-樹/b+樹 。

查詢結構1 靜態查詢結構概論

在計算機許多應用領域中,查詢操作都是十分重要的研究技術。查詢效率的好壞直接影響應用軟體的效能。比如說 1 全文檢索技術中對文字建立索引之後,對索引的查詢效率將決定搜尋引擎的質量。2 mysql資料庫的索引就是b 樹結構,查詢效率極高。3 windows os的檔案系統結構也是採用b 樹進行儲存的。靜...

靜態查詢結構概論

本文 靜態查詢結構概論 在計算機許多應用領域中,查詢操作都是十分重要的研究技術。查詢效率的好壞直接影響應用軟體的效能。比如說 1 全文檢索技術中對文字建立索引之後,對索引的查詢效率將決定搜尋引擎的質量。2 mysql資料庫的索引就是b 樹結構,查詢效率極高。3 windows os的檔案系統結構也是...

資料結構(三)查詢演算法(1)順序查詢

一片儲存空間的中的資料既可能是有序的 也可能是無序的,有序可以是公升序 降序 分塊公升序等等 對於無序存放的陣列只能通過順序查詢的方法找到想要的資料 順序查詢就是從資料空間的一端到另一端,逐個資料進行比對,直至找到想要的資料 按照這種說法,最終可能出現兩種情況 找到元素,找不到,超出邊界 這樣每次需...