17.2-1
每個 k
次push
或pop
執行一次copy
,那麼使push
和pop
的 co
st為 2
,1份用來支付本身的操作,另
1 份用於copy。
17.2-2
每次操作的代價都是
3,當
i 不是
2的冪時,支付一美元,信用為
2 美元;否則就支付
i美元,使用信用支付。
由於攤還代價是
3 美元,∑i
=1nc
^i=3
n,由練習17.1-3得 ∑i
=1nc
i<3n
。即信用不會為負。最後的代價是 o(
n)。17.2-3
使用乙個指標記錄最高位 a.
max 是否 1,初始時設為 -1。
increment(a)
i = 0
while i < a.length and
a[i] == 1
a[i] = 0
i = i + 1
if i < a.length
a[i] = 1
// additions to book』s increment start here.
if i > a.max
a.max = i
else
a.max = -1
reset(a)
for i = 0 to a.max
a[i] = 0
a.max = -1
和書上一樣,假設 1 美元用於翻轉某一位,此外還假設更新 a.
max 需要 1 美元。
對increment
操作,1 美元用於設定某位為 1,1 美元用於信用,因此一共需要 2 美元。
我們還需要 1 美元用於更新 ma
x ,如果 ma
x 增加,放置額外的 1 美元在新的最高位上(如果不增加,就浪費掉吧)。對於重置操作,它操縱的位數最多到達 a.
max ,並且在 a.
max 為 1 的時候,低於 a.
max 的都曾變為 1。將低位歸零的時候使用信用支付,所以只需支付 1 美元在重設 ma
x 上即可。
最後得,對increment
操作花費 3 美元,reset
操作花費 1 美元,最後得到時間是 o(n)。
演算法導論 CLRS 2 3 7 2 2
2.3 7 其實這道星號題的思路已經在前面幾個習題中給了提示。思路是先用merge sort對陣列公升序排列,然後進行binary search即可,時間複雜度為 t n nlogn logn n logn 演算法分析如下 設二叉搜尋下邊界為lo w 上邊界為hi gh,中間index為mi d 則...
CLRS筆記2 演算法入門
b 1,增量法 incremental b 例 插入排序 insertion sort ruby版本 code def insertion sort a a.each with index do el,i j i 1 while j 0 break if a j el a j 1 a j j 1 e...
演算法導論為何被稱為CLRS
最近在學習演算法導論的時候發現經常被提到clrs這本書,最開始我很疑惑clrs是指哪本,後來發現基本指的就是mit的introduction to algorithms。那麼問題來了,為什麼這麼稱呼呢?去網上查了一下,如演算法導論wiki介紹首段的最後一句所說,原來這個簡寫就是幾位作者,thomas...