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

2021-06-21 20:32:02 字數 1426 閱讀 4160

勢能方法:已預付的工作表示成一種勢能或勢,他在需要時可以釋放出來,以支付後面的操作。

勢函式φ將每個資料結構di對映為乙個實數φ(di),即與資料結構di相聯絡的勢。第i個操作的平攤代價c'i=ci+φ(d_i)-φ(d_)

n個操作總的平攤代價為∑c'i=∑ci+φ(dn)-φ(d0)

如果定義乙個勢函式使得φ(dn)>=φ(d0),則總的平攤代價∑c'i就是總的實際代價∑ci的乙個上界。

通常定義φ(d0)為0,證明對所有的i,有φ(di)>=0。

17.3-1 假設有勢函式φ,使得對所有的i都有φ(di)>=φ(d0),但是φ(d0)≠0。證明:存在乙個勢函式φ'使得φ'(d0)=0,φ'(di)>=0,對所有i>=1,且用φ'表示的平攤代價與用φ表示的平攤代價相同。

令φ'(di)=φ(di)-φ(d0)即可。

17.3-2 用勢能方法的分析重做練習17.1-3。

設i=2^j+k,定義第i個操作di的勢函式φ(di)=2*k。

當k=0時,實際代價為i。

當k!=0時,實際代價為1。

所以第i個操作平攤代價為o(1)。

17.3-3 考慮乙個包含n個元素的普通二叉最小堆資料結構,它支援最壞情況時間代價為o(lgn)的操作insert和extract-min。請給出乙個勢函式φ,使得insert的平攤代價為o(lgn),extract-min的平攤代價為o(1),並證明函式確實是有用的。

17.3-4 假設某個棧在執行n個棧操作push、pop和multipop之前包含s0個物件,結束後包含sn個物件,則這n個棧操作的總代價是多少?

17.3-5 假設乙個計數器的二進位制表示中在開始時有b個1,而不是0。證明:如果n=ω(b),則執行n次increment操作的代價為o(n)。

17.3-6 說明如何用兩個普通的棧來實現乙個佇列,使得每個enqueue和dequeue操作的平攤代價都為o(1)。

17.3-7 設計乙個資料結構來支援整數動態多重集合s上的下列兩個操作:

insert(s,x) 將x插入s中。

delete-larger-half(s)刪除s中最大的floor(|s|/2)個元素。

解釋如何實現這個資料結構,使得任意m個操作的序列在o(m)時間內執行,而且要在o(|s|)時間內輸出s的元素。

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

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

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

記賬方法 對不同的操作賦予不同的費用,某些操作的費用比他們的實際代價或多或少。對乙個操作的收費的數量稱為平攤代價。當平攤代價超過實際代價時,兩者的差值被當做存款,並賦予資料結構中一些特定物件。存款可以在以後用於補償那些平攤代價低於其實際代價的操作。總存款等於總的平攤代價和總的實際代價之差,始終是非負...

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

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