610 likes | 823 Views
第八章 續探計算複雜度:搜尋問題. 8.1 僅用 key 的比較進行搜尋之 演算法的時間複雜度下限 8.1.1 最差情況的下限 8.1.2 平均情況的下限 8.2 內插搜尋 8.3 在樹中搜尋 8.3.1 二元搜尋樹 (Binary Search Tree) 8.3.2 B-Tree 8.4 雜湊. 8.5 選拔問題: Adversary Argument 序論 8.5.1 找出最大的 key 8.5.2 一並找到最小與最大的 key
E N D
第八章 續探計算複雜度:搜尋問題 • 8.1僅用key的比較進行搜尋之 演算法的時間複雜度下限 8.1.1最差情況的下限 8.1.2平均情況的下限 • 8.2內插搜尋 • 8.3在樹中搜尋 8.3.1 二元搜尋樹(Binary Search Tree) 8.3.2 B-Tree • 8.4雜湊
8.5選拔問題:Adversary Argument序論 8.5.1找出最大的key 8.5.2一並找到最小與最大的key 8.5.3找到次大的key 8.5.4找到第k小的key 8.5.5解選拔問題的 或然式(Probabilistic)演算法
8.1 僅用key的比較進行搜尋 之演算法的時間複雜度下限
分析演算法2.1 平均情況的 時間複雜度(二元搜尋,遞迴版) • 基本運算:x與S[mid]的比較 • 輸入大小:n,陣列中key的數目
節點距離(note distance):從根節點到某節點形成的路徑中含有的節點樹 • 整體節點距離(total note distance,TND):一顆樹中所有節點距離的總和
定理8.2 • 在所有僅用key的比較,於具有n個相異key的陣列中搜尋key x 的必然式演算法中,假定x在陣列中且x出現在每個陣列單元的機會相等,則二元搜尋法在平均情況的效能已經是最好的。因次在此假定下,任何這種演算法在平均情況下所做比較次數的下限近似於
8.3在樹中搜尋 • 靜態搜尋:指搜尋過程中所有的紀錄一次被加到檔案中,並且之後並不會加入新的記錄或刪除紀錄 • 動態搜尋:指搜尋過程中會頻繁的加入或刪除紀錄
定理8.3 • 在所有的輸入出現機率相等及key x為n個key中任一個key之機率相等的前提之下,以各種含有n個相異key的輸入建構二元搜尋樹之平均搜尋時間近似於 • 證明:假定要找的keyx位於搜尋樹中。
8.3.2 B-Trees • 外部搜尋:需執行多次磁碟存取才能完成的搜尋 • 內部搜尋:所有的key都同時存放在記憶體中的搜尋
8.4雜湊 • 雜湊函數(hash function):可將一個key對應到一個索引的函數 EX: • 沒有任兩個key被雜湊到同一個索引的機率為
定理8.4 • 若n個key平均分佈在m個bucket中,則在一次失敗的搜尋中,進行的比較次數為n/m • 證明:由於這些key式平均分佈的,因此每個bucket均含有n/ m個key,也就是說每個失敗的搜尋皆必須進行n/m次比較
定理8.5 • 若n個key平均分佈在m個bucket中,且每個key成為被搜尋的key的機會相等,則一次成功搜尋的平均比較次數為 • 證明:每個bucket的平均搜尋時間等於對n/m個key進行循序搜尋的平均搜尋時間。
定理8.6 • 若n個key均勻分佈在m個bucket中,至少一個bucket含有至少k個key的機率小於等於 假定一個key雜湊到任一個bucket的機會相等
8.5 選拔問題:Adversary Argument序論 8.5.1找出最大的key
定理8.8 • 任一可在各種輸入中,僅靠key的比較,就可由n個key中一併找出最小及最大key的必然式演算法,在最差情況下,必須進行至少下列數量之key的比較:
定理8.9 • 僅靠key的比較,能夠在每種可能的輸入中找出次大的必然式演算法,在最差情況下,必須做至少
分析演算法8.5平均情況的時間複雜度(選拔) • 基本運算:在partition副程式中的s[i]與pivotitem比較 • 輸入大小:n,陣列中的項目數