幾種基礎查找方法的性能比較:程序員
算法(數據結構) | 查找(最壞) | 插入(最壞) | 查找命中(平均) | 插入(平均) | 插入(平均)是否支持有序性相關操做 |
順序查詢(無序聯播) | N | N | N/2 | N算法 |
否 |
二分查找(有序數組) | lgN | N | lgN | N/2 | 是 |
二叉樹查找(二叉查找樹) | N | N | 1.39lgN | 1.39lgN | 是 |
2-3樹查找(紅黑樹) | 2lgN | 2lgN | 1.00lgN | 1.00lgN | 是 |
拉鍊法(鏈表數組) | <lgN | <lgN | N/(2M) | N/M | 否 |
線性探測法(並行數組) | clgN | clgN | <1.5 | <2.5 | 否 |
順序查找:在表中查找一個不存在的鍵時,咱們會將表中每一個鍵和給定的鍵比較(N)。由於不容許出現重複的鍵,每次插入操做以前咱們都須要這樣查找一遍。數組
推論: 向一個空表中插入N個不一樣的鍵須要~N²/2次比較。數據結構
二分查找:在N個鍵的有序數組中進行二分查找最多須要(lgN+1)次比較(不管是否成功)。插入一個新的元素在最壞狀況下要訪問~2N次數組。函數
推論: 向一個空表中插入N個不一樣的鍵須要~N²/2次比較。性能
二叉樹查找:使用二叉查找樹的算法運行時間取決於樹的形狀。最好的狀況下含有N個節點的樹是徹底平衡的,每條空鏈和根節點的距離都爲~lgN;最壞狀況下,搜索路徑上可能有N個節點(此時至關於順序查找)。spa
相對於二叉查找樹,散列表的優勢在於代碼更簡單,且查找時間最優。設計
二叉查找樹相對於散列表的優勢在於抽象結構更簡單(不須要設計散列函數),紅黑樹能夠保證最壞狀況下的性能且他可以支持的操做更多(如排名,選擇,排序和範圍查找)。排序
根據經驗法則,大多數程序員的第一選擇都是散列表,在其餘因素更重要時纔會選擇紅黑樹。ci