演算法導論--平攤分析之聚集分析,演算法導論--平攤

來源:互聯網
上載者:User

演算法導論--平攤分析之聚集分析,演算法導論--平攤

在平攤分析中,執行一系列資料結構操作所需要的時間是通過對執行的所有操作求平均而得出的。

平攤分析可以用來證明在一系列操作中,通過對所有操作求平均之後,即使其中單一的操作具有較大的代價,平均代價還是很小的。平攤分析與平均情況分析的不同之處在於它不牽涉到機率;平攤分析保證在最壞情況下,每個操作具有平均效能。

聚集分析

在聚集分析中,要證明對所有的n,由n個操作所構成的序列的總時間在最壞情況下為T(n)。因此,在最壞情況下,每個操作的平均代價(或稱平攤分析)為T(n)/n。請注意這個平攤代價對每個操作都是成立的,即使當序列中存在幾種類型的操作時也是一樣的。

棧操作

 在關於聚集分析的第一個例子中,我們要分析增加了一個新操作後的棧。有兩種基本的棧操作,每種操作的時間代價都是O(1):

PUSH(S,x):將對象x壓入棧S。

POP(S):彈出S的棧頂返回彈出的對象。

因為這兩個操作的已耗用時間都為O(1),故可以把每個操作的代價都視為1。因此,含n個PUSH和POP操作的序列的總代價為n,而這n個操作的實際已耗用時間就是O(n)。

現在我們增加一個棧操作MULTIPOP(S,k),它的作用是彈出棧S的k個棧頂對象,或者,當棧包含少於k個對象時,彈出整個棧中的資料對象。

當MULTIPOP(S,s)對一個包含s個對象的棧操作時,已耗用時間是多少?實際的已耗用時間與實際執行的POP運算元成線性關係,因而只要按PUSH和POP具有抽象代價1來分析MULTIPOP就足夠了。while迴圈迭代的次數是從棧中彈出的對象個數min(s,k)。對迴圈的每次迭代,都要調用一次POP。因此,MULTIPOP的總代價是min(s,k),而實際已耗用時間則為這個代價的一個線性函數。

現在來分析一個由n個PUSH,POP和MULTIPOP操作構成的序列,其作用於一個初始為空白的棧。序列中一次MULTIPOP操作的最壞情況代價為O(n),因為棧的大小至多為n。因此,任意棧操作的最壞情況時間就是O(n),因此n個操作的序列的代價是O(n^2),因為可能會有O(n)個MULTIPOP操作,每個的代價都是O(n)。雖然這一分析是正確的,但通過單獨地考慮每個操作的最壞情況代價而得到的O(n^2)結論卻是不夠緊確的。

利用聚集分析,我們可以獲得一個考慮到n個操作的整個序列的更好的上界。事實上,雖然一次MULTIPOP操作的代價可能較高,但當作用於一個初始為空白的棧上時,任意一個包含n個PUSH,POP和MULTIPOP操作的序列其代價至多為O(n)。為什麼會是這樣呢?一個對象在每次被壓入棧後,至多被彈出一次。所以,在一個非空棧上,調用POP的次數(包括在MULTIPOP的調用)至多等於PUSH操作的次數,即至多為n。對任意的n值,包含n個PUSH,POP和MULTIPOP操作的序列的總時間為O(n)。每個操作的平均代價為O(n)/n=O(1)。在聚集分析中,我們把每個操作的平攤代價指派為平均代價。所以在這個例子中,三個棧操作的平攤代價都是O(1)。

我們再一次強調,雖然已經說明一個棧操作的平均代價和已耗用時間是O(1),但沒有用到機率推理。實際上,我們給出的是一列n個操作的最壞情況界O(n)。用n除這個總代價可得每個操作的平均代價,亦即平攤代價。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.