算法——幾種查找算法的比較和應用

幾種基礎查找方法的性能比較程序員

算法(數據結構) 查找(最壞) 插入(最壞) 查找命中(平均) 插入(平均) 插入(平均)是否支持有序性相關操做
順序查詢(無序聯播) 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

相關文章
相關標籤/搜索