Successfully reported this slideshow.
Upcoming SlideShare
×

# Amortize analysis of Deque with 2 Stack

2,445 views

Published on

ならし解析の話。
DequeをStack2つで実装した場合について追加や削除のならし計算量がO(1)であることを示す。
Accounting MethodとPotential Methodを説明。

Published in: Science
• Full Name
Comment goes here.

Are you sure you want to Yes No
• accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................

Are you sure you want to  Yes  No

Are you sure you want to  Yes  No

Are you sure you want to  Yes  No
• ..............ACCESS that WEBSITE Over for All Ebooks ................ ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } .........................................................................................................................

Are you sure you want to  Yes  No

Are you sure you want to  Yes  No

### Amortize analysis of Deque with 2 Stack

1. 1. 計算量のはなし2 ～DequeはStack2つでつくれる～
2. 2. 目次 ● 有名なことわざの紹介 ● ならし計算量のはなし ● Accounting Method ● Potential Method
3. 3. 目次 ● 有名なことわざの紹介 ● ならし計算量のはなし ● Accounting Method ● Potential Method
4. 4. 有名なことわざ DequeはStack2つでつくれる
5. 5. Deque ● 次の操作に対応したデータ構造 – 列の先頭に値を追加 　(pushF) – 列の末尾に値を追加 　(pushB) – 列の先頭から値を取り出す (popF) – 列の末尾から値を取り出す (popB)
6. 6. Deque: 図示 ● ここに空のDequeがあるじゃろ – 左が先頭(Front), 右が末尾 (Back)
7. 7. Deque: 図示 ● pushF(3) 3
8. 8. Deque: 図示 ● pushF(3), pushB(4) 3 4
9. 9. Deque: 図示 ● pushF(3), pushB(4), pushF(5) 3 45
10. 10. Deque: 図示 ● pushF(3), pushB(4), pushF(5), popB() 3 4 5 4
11. 11. Deque: 図示 ● pushF(3), pushB(4), pushF(5), popB() 35
12. 12. Deque: 図示 ● pushF(3), pushB(4), pushF(5), popB(), popF() 3 5
13. 13. Deque: 図示 ● pushF(3), pushB(4), pushF(5), popB(), popF() 3
14. 14. Deque: 図示 ● pushF(3), pushB(4), pushF(5), popB(), popF() pushB(4) 3 4
15. 15. Deque: 図示 ● pushF(3), pushB(4), pushF(5), popB(), popF() pushB(4), pushF(3) 3 433
16. 16. 有名なことわざ(再掲) DequeはStack2つでつくれる
17. 17. Deque（Stack×2）: 図示 ● 空のDequeの下にStackが2つあるじゃろ – 左が先頭(Front), 右が末尾 (Back)
18. 18. 432 Deque（Stack×2）: 図示 ● pushF(1), pushF(2), pushF(3), pushF(4) 4321 1
19. 19. 432 Deque（Stack×2）: 図示 ● pushF(1), pushF(2), pushF(3), pushF(4) popB() 4 321 1
20. 20. 32 Deque（Stack×2）: 図示 ● pushF(1), pushF(2), pushF(3), pushF(4) popB() 4 321 1 ｴｲﾔｯ 4
21. 21. 32 Deque（Stack×2）: 図示 ● pushF(1), pushF(2), pushF(3), pushF(4) popB() 4 321 1 4
22. 22. 32 Deque（Stack×2）: 図示 ● pushF(1), pushF(2), pushF(3), pushF(4) popB() 321 1
23. 23. 32 Deque（Stack×2）: 大事な所 ● PopしたいのにStackがからの時、もう片方の Stackの半分を移してくる 4 321 1 ｴｲﾔｯ 4
24. 24. ﾌﾊﾊ Dequeはこのようにして Stack2つでつくれるのじゃ
25. 25. 目次 ● 有名なことわざの紹介 ● ならし計算量のはなし ● Accounting Method ● Potential Method
26. 26. 半分うつすのやばそう ● Stack2つで実装したDequeの計算量を評価し てみよう
27. 27. 操作一覧 ● pushBack ● pushFront ● popBack ● popFront
28. 28. 操作一覧 ● pushBack どうせO(1) ● pushFront どうせO(1) ● popBack ● popFront
29. 29. 操作一覧 ● pushBack どうせO(1) ● pushFront どうせO(1) ● popBack だいたいO(1) ● popFront だいたいO(1)
30. 30. 半分移すとき時間かかる ● pushBack どうせO(1) ● pushFront どうせO(1) ● popBack だいたいO(1) 　ときどき O(N) ● popFront だいたいO(1) ときどき O(N)
31. 31. 半分移すとき時間かかる ● pushBack どうせO(1) ● pushFront どうせO(1) ● popBack だいたいO(1) 　ときどき O(N) ● popFront だいたいO(1) ときどき O(N) ● でもO(N)であることは本当に「ときどき」で、ま れにしか起こらない
32. 32. 半分移すとき時間かかる ● pushBack どうせO(1) ● pushFront どうせO(1) ● popBack だいたいO(1) 　ときどき O(N) ● popFront だいたいO(1) ときどき O(N) ● でもO(N)であることは本当に「ときどき」で、ま れにしか起こらない
33. 33. 半分移すとき時間かかる ● pushBack どうせO(1) ● pushFront どうせO(1) ● popBack だいたいO(1) 　ときどき O(N) ● popFront だいたいO(1) ときどき O(N) ● でもO(N)であることは本当に「ときどき」で、まれに しか起こらない ● O(N)っていいたくない
34. 34. そんなときに便利なのが ならし計算量
35. 35. ならし計算量とは ● データ構造に対する操作の計算量の評価で 使われる「計算量もどき」 ● 時と場合によって計算量がかわるが、均すと O(f(x))になるとき 「ならし計算量がO(f(x))である」 という
36. 36. ならし計算量とは ● データ構造に対する操作の計算量の評価で 使われる「計算量もどき」 ● 時と場合によって計算量がかわるが、均すと O(f(x))になるとき 「ならし計算量がO(f(x))である」 という
37. 37. ならし計算量とは ● データ構造に対する操作の計算量の評価で 使われる「計算量もどき」 ● 時と場合によって計算量がかわるが、均すと O(f(x))になるとき 「ならし計算量がO(f(x))である」 という ？
38. 38. 「均す」とは ● データ構造の中で、操作をN回やった時、「実 際の計算量」の総和と「ならし計算量」の総和 がだいたい同じになる ● 例： – Dequeのpopの実際の計算量 ● O(1)だったりO(N)だったり – Dequeのpopのならし計算量 ● O(1)
39. 39. Dequeの計算量 ● Dequeの操作のならし計算量は全てO(1) – ほんまか ● ならし計算量がO(1)ということは N 回操作し たときの「実際の計算量」がO(N)であるという こと – 実験してみるとそれっぽい ● これから2つの方法でこれを証明する
40. 40. 目次 ● 有名なことわざの紹介 ● ならし計算量のはなし ● Accounting Method ● Potential Method
41. 41. AccountingMethod ● 直訳：会計法（法律っぽい） ● 初めあなたの所持金は0円です ● あなたが操作をするたびに、「ならし計算量」 円だけお金がふってきます ● あなたが操作をするたびに、「実際の計算 量」円払わなければなりません ● あなたはどのタイミングでも所持金が負に なってはいけません
42. 42. AccountingMethod ● 何円ふってくるか、うまく決めて所持金が負に ならなければそれがならし計算量 ● うまく思いつこう！
43. 43. AccountingMethod ● 以下のように設定するとうまくいく – 操作をすると 5 円ふってくる
44. 44. AccountingMethod ● 以下のように設定するとうまくいく – 操作をすると 5 円ふってくる ● これでうまくいくことをこれから証明
45. 45. AccountingMethod:5円の証明 ● pushBack,pushFront – 実際の計算量は　1 – よって1円払わないといけない ● popBack,popFrontのｴｲﾔｯしないやつ – 実際の計算量は 1 – 1円払わないといけない ● どちらの場合も差し引いて4円貯金が増える
46. 46. AccountingMethod:5円の証明 ● popBack,popFrontのｴｲﾔｯするとき – もう片方のStackの中身(N個とする)をいっ たん全部出して、半分ずつ入れ分ける – 実際の計算量は　2N – 差し引いて2N-5円貯金が減る ● このとき借金しなければよい
47. 47. AccountingMethod:5円の証明 ● 実は以下の命題が成り立つ – 左側のStackにL個、右側のStackにR個の 要素が入ってる時、4×max(L, R)円以上の 貯金がある – 帰納法で証明可能
48. 48. AccountingMethod:4*max(L,R)の証明 ● 命題：貯金が4×max(L,R)円以上 ● はじめの状態(空の状態)では成立 ● 成立している状態からどの操作をしても命題が成立 し続けることを示せば良い
49. 49. AccountingMethod:4*max(L,R)の証明 ● 命題：貯金が4×max(L,R)円以上 ● はじめの状態(空の状態)では成立 ● 成立している状態からどの操作をしても命題が成立 し続けることを示せば良い – pushとｴｲﾔｯしないpopは 貯金が4円増えるので成 立し続ける
50. 50. AccountingMethod:4*max(L,R)の証明 ● 命題：貯金が4×max(L,R)円以上 ● はじめの状態(空の状態)では成立 ● 成立している状態からどの操作をしても命題が成立 し続けることを示せば良い – pushとｴｲﾔｯしないpopは 貯金が4円増えるので成 立し続ける – ｴｲﾔｯするとき、もともと貯金が4N円以上あるので 操作後は2N円以上が保証される
51. 51. AccountingMethod:4*max(L,R)の証明 ● 命題：貯金が4×max(L,R)円以上 ● はじめの状態(空の状態)では成立 ● 成立している状態からどの操作をしても命題が成立 し続けることを示せば良い – pushとｴｲﾔｯしないpopは 貯金が4円増えるので成 立し続ける – ｴｲﾔｯするとき、もともと貯金が4N円以上あるので 操作後は2N円以上が保証される – ｴｲﾔｯ後は4×max(L,R)は2Nになる
52. 52. AccountingMethod:4*max(L,R)の証明 ● 命題：貯金が4×max(L,R)円以上 ● はじめの状態(空の状態)では成立 ● 成立している状態からどの操作をしても命題が成立 し続けることを示せば良い – pushとｴｲﾔｯしないpopは 貯金が4円増えるので成 立し続ける – ｴｲﾔｯするとき、もともと貯金が4N円以上あるので 操作後は2N円以上が保証される – ｴｲﾔｯ後は4×max(L,R)は2Nになる　成立し続ける
53. 53. AccountingMethod:4*max(L,R)の証明 ● 命題：貯金が4×max(L,R)円以上 ● はじめの状態(空の状態)では成立 ● 成立している状態からどの操作をしても命題が成立 し続けることを示せば良い – pushとｴｲﾔｯしないpopは 貯金が4円増えるので成 立し続ける – ｴｲﾔｯするとき、もともと貯金が4N円以上あるので 操作後は2N円以上が保証される – ｴｲﾔｯ後は4×max(L,R)は2Nになる　成立し続ける (Q.E.D.)
54. 54. これが Accounting Method
55. 55. AccountingMethod ● ならしO(1)を求めるのに向いてる – ふってくる値段を貯金がなくならないように充 分大きくするだけ ● ふってくる値段は操作毎に変えても良い – popは4円 – pushは1円とかでも大丈夫 ● 今回のようにデータ構造の状態に対して貯金の 下限を示したりして使う
56. 56. AccountingMethod:演習問題 ● 以下をAccountingMethodで示してみよ ● 動的にメモリを確保する配列(vector)の push_backのならし計算量：O(1) – メモリがなくなったら別の場所にいまの2倍 の大きさのメモリを確保します
57. 57. 目次 ● 有名なことわざの紹介 ● ならし計算量のはなし ● Accounting Method ● Potential Method
58. 58. PotentialMethod ● データ構造の状態に対してPotentialという値 を定義する ● ある操作をしてPotentailがP1からP2に変わっ たとする ● そのならし計算量を 「実際の計算量」 + P2 – P1 として定義する
59. 59. PotentialMethod:なんでそんなことするの ● 長い処理を考える
60. 60. PotentialMethod:なんでそんなことするの ● 長い処理を考える 状態　　　Potential 実計算量　　均計算量 C1 C2 C3 CN : : P1 P2 P3 PN : : X1 X2 XN : :
61. 61. PotentialMethod:なんでそんなことするの ● ポテンシャルと実計算量から均計算量を出す 状態　　　Potential 実計算量　　均計算量 C1 C2 C3 CN : : P1 P2 P3 PN : : X1 X2 XN : : X1+P2-P1 X2+P3-P2 XN+PN-(ry : :
62. 62. PotentialMethod:なんでそんなことするの ● 計算量の総和を考えてみる 状態　　　Potential 実計算量　　均計算量 C1 C2 C3 CN : : P1 P2 P3 PN : : X1 X2 XN : : X1+P2-P1 X2+P3-P2 XN+PN-(ry : :
63. 63. PotentialMethod:なんでそんなことするの ● 計算量の総和を考えてみる ● 実計算量 – X1 + X2 + X3 + … + XN ● 均計算量 – (X1 + P2 – P1) + (X2 + P3 – P2) + … (ry ↓ – X1 + X2 + X3 + … + XN + (PN – P1)
64. 64. PotentialMethod:なんでそんなことするの ● 計算量の総和を考えてみる ● 実計算量 – X1 + X2 + X3 + … + XN ● 均計算量 – (X1 + P2 – P1) + (X2 + P3 – P2) + … (ry ↓ – X1 + X2 + X3 + … + XN + (PN – P1)
65. 65. PotentialMethod:なんでそんなことするの ● 「実計算量の総和」と「均計算量の総和」の差 が　PN – P1 – 終状態と始状態のPotentialの差 – これが「均計算量の総和」以下のオーダー なら、実計算量と均計算量のオーダーが一 致する – 均計算量の定義と合致
66. 66. PotentialMethod:Dequeのポテンシャル ● うまいポテンシャルを見つけて、どんな操作も 均計算量がO(1)であることを示せば良い
67. 67. PotentialMethod:Dequeのポテンシャル ● うまいポテンシャルを見つけて、どんな操作も 均計算量がO(1)であることを示せば良い ● 今回は左側のStackの要素数をL、右側の Stackの要素数をRとして 4*max(L, R) をPotentialとするとうまくいく
68. 68. PotentialMethod:4*max(L,R)の証明 ● 各操作の均計算量 – push ● ポテンシャルはたかだか4増える ● 実計算量は1 ● よってならし計算量は5
69. 69. PotentialMethod:4*max(L,R)の証明 ● 各操作の均計算量 – pop(ｴｲﾔｯなし） ● ポテンシャルは増えない ● 実計算量は1 ● よってならし計算量は1以下
70. 70. PotentialMethod:4*max(L,R)の証明 ● 各操作の均計算量 – pop(ｴｲﾔｯあり） ● ポテンシャルは4*(N/2)減る ● 実計算量は2N ● よってならし計算量は0
71. 71. PotentialMethod:4*max(L,R)の証明 ● PN-P1 – N回操作した後の均計算量の総和はO(N) – PN-P1の最大値は4N=O(N) ● ずっと同じ方からpushしたとき – よっしゃ
72. 72. PotentialMethod:4*max(L,R)の証明 ● ポテンシャル4*max(L,R)での均計算量がす べてO(1)でした
73. 73. PotentialMethod:4*max(L,R)の証明 ● ポテンシャル4*max(L,R)での均計算量がす べてO(1)でした (Q.E.D.)
74. 74. これが Potential Method
75. 75. PotentialMethod ● ならしO(1)以外を求めるのにも有用 – フィボナッチヒープのO(logN) – スプレー木のO(logN) – UnionFind木のO(α(n)) (アッカーマン関数の 逆関数) ● 4*max(L,R)はAccountingMethodにもでてきた値 – AccountingもPotentialも歩み寄り方が違うだ けで、やりたい証明は同じ
76. 76. PotentialMethod:演習問題 ● 以下をPotentialMethodで示してみよ ● 動的にメモリを確保する配列(vector)の push_backのならし計算量：O(1) – メモリがなくなったら別の場所にいまの2倍 の大きさのメモリを確保します
77. 77. 目次 ● 有名なことわざの紹介 ● ならし計算量のはなし ● Accounting Method ● Potential Method ● おしまい