《演算法導論》筆記 第17章 17 2 記賬方法

2021-06-21 20:31:00 字數 664 閱讀 2118

記賬方法:對不同的操作賦予不同的費用,某些操作的費用比他們的實際代價或多或少。對乙個操作的收費的數量稱為平攤代價。

當平攤代價超過實際代價時,兩者的差值被當做存款,並賦予資料結構中一些特定物件。存款可以在以後用於補償那些平攤代價低於其實際代價的操作。

總存款等於總的平攤代價和總的實際代價之差,始終是非負的。

17.2-1 對乙個大小始終不超過k的棧上執行一系列的棧操作。在每個k操作後,複製整個棧的內容以留作備份。證明:在對各種棧操作賦予合適的平攤代價後,n個棧操作的代價為o(n)。

棧操作的平攤代價為2,複製操作代價為0。

則每次棧操作會留下1存款,k次棧操作後存款為k,用來支付複製操作。

17.2-2 利用記賬方法的分析重做練習17.1-3。

對每個操作的平攤代價為3。

當i不為2的整數冪時,留下2存款。

當i為2的整數冪時,設i=2^k,令j為上乙個2的整數冪,j=2^(k-1),將j到i-1之間的2^(k-1)個數保留的2^k的存款用來支付操作。

17.2-3 假設我們希望不僅能使乙個計數器增值,也能使之復位至零。說明如何將乙個計數器實現為乙個位陣列,使得對乙個初始為零的計數器,任乙個包含n個increment和reset操作的序列的時間為o(n)。

《演算法導論》筆記 第17章 17 1 聚集分析

聚集分析 要證明對所有的n,由n個操作所構成的序列的總時間在最壞情況下為t n 因此,在最壞情況下,每個操作的平攤代價為t n n。17.1 1 如果一組棧操作中包括了一次multipush操作,它一次把k個元素壓入棧內,那麼棧操作的平攤代價的界o 1 是否還能保持?不能,不能保證棧內元素個數,因此...

《演算法導論》筆記 第17章 17 3 勢能方法

勢能方法 已預付的工作表示成一種勢能或勢,他在需要時可以釋放出來,以支付後面的操作。勢函式 將每個資料結構di對映為乙個實數 di 即與資料結構di相聯絡的勢。第i個操作的平攤代價c i ci d i d n個操作總的平攤代價為 c i ci dn d0 如果定義乙個勢函式使得 dn d0 則總的平...

演算法導論第17章 攤還分析

在攤還分析中,我們求資料結構的乙個操作序列中所執行的所有操作的平均時間,來評價操作的代價,從而說明乙個操作的平均代價是很低的,即使序列中某一單一操作的代價很高,不涉及改了,但可以保證最壞情況下每個操作的平均時間。攤還分析中主要的三種方法 1 聚合分析 2 核算法 即記賬法 3 勢能法 1 聚合分析 ...