演算法
最壞情況下的執行時間的增長數量級
最壞情況下的執行時間的增長數量級
平均情況下的執行時間的增長數量級
平均情況下的執行時間的增長數量級
記憶體使用
查詢插入
查詢命中
插入順序查詢nn
n/2n
48n二分查詢
lgnn
lgnn/2
16n紅黑樹
2lgn
2lgn
lgnlgn
64n拉鍊法雜湊表
n/(2m)
n/m48n+32m
使用的資料結構
優點缺點
順序查詢(鍊錶)
適用於小型問題
對於大型符號表很慢
二分查詢(二分查詢)
最優的查詢效率和空間需求,能夠進行有序性相關的操作
插入操作很慢
二叉查詢樹
實現簡單,能夠進行有序性相關操作
沒有效能上界的保證,鏈結需要額外的空間
平衡二叉查詢樹(紅黑樹)
最優的查詢和插入效率,能夠進行有序性相關的操作
鏈結需要額外的空間
雜湊表能夠快速地查詢和插入常見型別的資料
我將測試**放在測試樣例是統計一段文字**現頻率最高的單詞,測試步驟如下:
git clone
cd algorithms-fourth-edition-cpp
mkdir build && cd build
cmake ..
make
../bin/test_search ../data/tale.txt
結果:
sequential_search algo find "the" with largest times 7989 and cost time 11.7608[sec] //順序查詢
binary_search algo find "the" with largest times 7989 and cost time 0.567544[sec] //二分查詢
bst_search algo find "the" with largest times 7989 and cost time 0.56815[sec] //二叉查詢樹
rbt_search algo find "the" with largest times 7989 and cost time 0.137314[sec] //紅黑樹
ht_search algo find "the" with largest times 7989 and cost time 0.043644[sec] //雜湊表
結論:
從結果中可以看出雜湊表的速度是最快的,其次是紅黑樹,二分查詢樹和二分查詢差不多,順序查詢速度特別慢.所以在不考慮有序性相關的操作之外,雜湊表無疑是最優選擇,而且實現簡單.其次才考慮紅黑樹,雖然效能很好,但實現複雜.
相對二叉查詢樹,雜湊表的優點在於**更簡單,且查詢時間最優(常數級別,只要鍵的資料型別是標準的或者簡單到我們可以為它寫出滿足均勻性假設的高效雜湊函式即可).二叉查詢樹相對於雜湊表的優點在於抽象結構更簡單(不需要設計雜湊函式),紅黑樹可以保證最壞情況下的效能且它能夠支援的操作更多(如排名、選擇、排序和範圍查詢).根據經驗法則,大多數程式設計師的第一選擇是雜湊表,在其他因素更重要時才會選擇紅黑樹.
以上結論來自於《演算法第4版》
常見排序演算法效能測試
氣泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即 輕...
常見的查詢演算法
一 直接查詢 1.1 實現原理 從第乙個開始,依次向後挨個對比,直到找到所需的字元為止。1.2 時間複雜度 o n 其中n是字元的總個數。1.3 實現 public class directfind int target 74 for int i 0 iif target array i 二 二分法...
查詢演算法總結
順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...