演算法導論學習筆記之攤還分析

2021-07-16 03:10:42 字數 1923 閱讀 7303

攤還分析中,我們求資料結構的乙個操作序列中所執行的所有操作的平均時間,來評價操作的代價。這樣,就可以說明即使乙個序列的某個操作很複雜,平均代價還是很低的。

攤還分析中最常用三種技術:

聚合分析,這種方法用來確定乙個n個操作的序列的總代價的上界t(n),因而每個操作的代價是t(n)/n,將平均代價作為每個操作的攤還代價

核算法,將某些較早操作的「餘額」作為「預付信用」儲存起來,與資料結構中的特定物件相關聯,在操作序列的隨後部分,儲存的信用即課為那些繳費少於實際代價的操作支付差額

勢能法,也是分析每個操作的攤還代價,也是通過較早操作的餘額來補償稍後操作的餘額的差額,但是不是針對物件的,而是將勢能作為整體儲存

好吧,這樣說起來很抽象,通過乙個棧操作的例子來說明

普通的棧操作包括push和 pop, 時間複雜性均是o(1),這裡加乙個額外的multipop(s,k)操作,刪除棧s的從棧頂開始的k個元素(棧不空的情況下),這個操作的總代價是min(s,k)(退不到k個就棧空了,那就只退s個)。

聚合分析

乙個由n個push pop multipop組合的操作序列在乙個空棧上的執**況,序列中乙個multipop操作的最壞情況代價的o(n),因為棧的大小最大為n,因此乙個棧操作的最壞情況是o(n),從而n個操作的最壞情況是o(n2)。但是這不是乙個確界。通過使用聚合分析,我們知道其實在乙個空棧上進行一系列n個操作最多代價是o(n),因為當乙個物件壓入棧後,最多將其彈出一次,因此對乙個棧來說,能執行的pop次數,包括multipop中pop次數,都只能最多是push的次數,所以上限其實是o(n)

核算法

對不同操作賦予不同費用,將這個費用稱為其攤還代價。當乙個操作的攤還代價大於其實際代價時,將差額存入資料結構中的特定物件,存入的差額稱為信用。當然要確保信用是非負值,否則總體的攤還代價就會小於實際代價,求的就不是上界了。還是用上面的棧操作為例:

操作的實際代價是:

push1

pop 1

multipop min(s,k)  s是呼叫棧的規模,k是引數

賦予這些操作如下攤還代價

push2

pop0

multipop 0

在此例中,所有攤還代價都是常數。假定使用一美元表示乙個單位的代價,從乙個空棧開始,存入乙個資料就相當於給出了代價2,但是實際只用話費1美元,那麼剩下的一美元就存起來,等到出棧的時候,這一美元正好用來當出棧的代價,相當於之前的兩美元是用來支付了入棧的代價同時預付了出棧的代價,所以在pop的時候可以不繳納任何費用,multipop也是一樣的。換句話說,每個數在入棧的時候都是已經有了一美元的出棧費,所以出棧相關的操作無需在繳納了。

勢能法

勢能法攤還分析並不將預付代價表示為資料結構中特定物件的信用(數的出棧費),而是表示為勢能或簡稱勢。

我們將對乙個資料結構d0執行n個操作(比如棧),對每個i = 1,2,。。。n, ci為第i個操作的實際代價,令di為在乙個資料結構di-1上執行第i個操作得到的結果資料結構。勢函式f將每個資料結構di對映到乙個實數f(i)(感覺就像物理上每個位置對應乙個重力勢能一樣),那麼第i個曹組的攤還代價ci = ci + f(di)-f(di-1),也就是攤還代價等於實際代價加上勢能差,所以總攤還代價就是 總實際代價+f(dn)-f(d0) (是不是就像重力作用下勢能變化,只跟起始位置和初始位置的勢能值有關?)

再次回到上面的棧操作, 設f(d0) = 0,因為棧中物件永遠不可能為負,因此f(di)>=0=f(d0).

如果第i個操作是push操作,此時包含s個物件,則 f(di)-f(di-1)=(s+1)-s = 1

所以push操作的攤還代價是ci= ci + f(di)-f(di-1) = 2; 類似的pop的代價是0

攤還分析 1 演算法導論 23

攤還分析 amortized analysis 是一種分析乙個操作序列中所執行的所有操作的平均時間分析方法。與一般的平均分析方法不同的是,它不涉及概率的分析,可以保證最壞情況下每個操作的平均效能。下面介紹癱瘓分析中的最常用的三種技術。先來看對棧進行操作的例子。通常,棧能夠進行push s,x 與po...

《演算法導論》筆記(11) 攤還分析 部分習題

習題11.1 3 i為2的冪時代價為i,其餘代價為1,聚合分析 1 2 1 4 1 1 1 8.n,若n趨近無窮大,極限為3。每次操作攤還代價為3.習題11.2 2 核算法解上題。在i 2 1到第i 1次操作之間,每次操作實際代價1,信用2,經過i 2次之後,累積信用為i,第i個操作一次性付出代價i...

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

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