1 操作列と三つの計算量
定義 1.1. 集合D \mathcal D D とその要素を状態 (state ) という。空でない有限集合O \mathcal O O とその要素を操作 (operation ) という。写像δ : D × O → D \delta:\mathcal D\times\mathcal O\to\mathcal D δ : D × O → D を遷移 (transition ) 、写像c : D × O → Z ≥ 0 c:\mathcal D\times\mathcal O\to\Z_{\ge0} c : D × O → Z ≥ 0 を実費用 (actual cost ) という。さらに初期状態 (initial state )D 0 ∈ D D_0\in\mathcal D D 0 ∈ D を一つ固定する。組M = ( D , O , δ , c , D 0 ) \mathcal M=(\mathcal D,\mathcal O,\delta,c,D_0) M = ( D , O , δ , c , D 0 ) を操作系 (operation system ) という。
非負整数N N N とσ = ( o 1 , … , o N ) ∈ O N \sigma=(o_1,\dots,o_N)\in\mathcal O^{N} σ = ( o 1 , … , o N ) ∈ O N の組を、長さN N N の操作列 (operation sequence ) という。操作列σ \sigma σ に対し、状態の列を
D i = δ ( D i − 1 , o i ) ( 1 ≤ i ≤ N ) D_i=\delta(D_{i-1},o_i)\qquad(1\le i\le N) D i = δ ( D i − 1 , o i ) ( 1 ≤ i ≤ N ) によって定め、第i i i 操作の実費用 (actual cost ) をc i = c ( D i − 1 , o i ) c_i=c(D_{i-1},o_i) c i = c ( D i − 1 , o i ) と書く。∑ i = 1 N c i \sum_{i=1}^{N}c_i ∑ i = 1 N c i をσ \sigma σ の総費用 (total cost ) という。D 0 D_0 D 0 から始まる何らかの操作列の状態の列に現れる状態を到達可能 (reachable ) という。D 0 D_0 D 0 自身は長さ0 0 0 の操作列によって到達可能である。
操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) と0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N に対し、σ ∣ k = ( o 1 , … , o k ) \sigma|_k=(o_1,\dots,o_k) σ ∣ k = ( o 1 , … , o k ) をσ \sigma σ の接頭列 (prefix ) という。接頭列の状態の列と実費用は、σ \sigma σ のそれの最初のk k k 項に一致する。
定義 1.2. 操作系M \mathcal M M について、次の三つを区別する。
到達可能な状態D D D と操作o ∈ O o\in\mathcal O o ∈ O にわたるc ( D , o ) c(D,o) c ( D , o ) の上限を、一つの操作の最悪計算量 (worst-case cost ) という。これは単一の操作の実費用についての量であり、操作列の長さに依存しない。
O \mathcal O O 上の確率分布、すなわち∑ o ∈ O P ( o ) = 1 \sum_{o\in\mathcal O}\mathbb P(o)=1 ∑ o ∈ O P ( o ) = 1 を満たす非負実数の族( P ( o ) ) o ∈ O (\mathbb P(o))_{o\in\mathcal O} ( P ( o ) ) o ∈ O を一つ定めたとき、状態D D D における
E [ c ( D , ⋅ ) ] = ∑ o ∈ O P ( o ) c ( D , o ) \mathbb E\bigl[c(D,\cdot)\bigr]=\sum_{o\in\mathcal O}\mathbb P(o)\,c(D,o) E [ c ( D , ⋅ ) ] = o ∈ O ∑ P ( o ) c ( D , o )
を、その分布に関する一つの操作の平均計算量 (average cost ) という。これは確率分布を定めて初めて意味をもつ量である。
写像T ^ : O → [ 0 , ∞ ) \hat T:\mathcal O\to[0,\infty) T ^ : O → [ 0 , ∞ ) がM \mathcal M M の償却計算量の上界 (amortized cost upper bound ) であるとは、D 0 D_0 D 0 から始まる任意の有限操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) に対し
∑ i = 1 N c i ≤ ∑ i = 1 N T ^ ( o i ) \sum_{i=1}^{N}c_i\ \le\ \sum_{i=1}^{N}\hat T(o_i) i = 1 ∑ N c i ≤ i = 1 ∑ N T ^ ( o i )
が成り立つことをいう。とくにT ^ \hat T T ^ が定数T T T であるとき、この条件は、任意の長さN N N の操作列について∑ i = 1 N c i ≤ T N \sum_{i=1}^{N}c_i\le TN ∑ i = 1 N c i ≤ T N が成り立つことである。償却計算量は確率分布を用いず、すべての操作列にわたる最悪の場合についての主張である。
実費用は、§D2.8 アルゴリズムの正当性と計算量 で定められる意味での基本操作の実行回数と読む。三つの量は互いに別のものである。とくに、償却計算量の上界が定数であっても、単一の操作の最悪計算量が有界であるとは限らない。本記事の二つの例はいずれもそのような場合である。
定数の償却計算量の上界が得られると、総費用が操作の回数について線形な上界をもつことが直ちに従う。
命題 1.3. 操作系M \mathcal M M に対し、D 0 D_0 D 0 から始まる長さN N N の操作列の総費用の最大値をC ( N ) C(N) C ( N ) と書く。O \mathcal O O は空でない有限集合であるから長さN N N の操作列は有限個であり、この最大値は存在する。定数T ≥ 0 T\ge0 T ≥ 0 が定義 1.2 の意味の償却計算量の上界であるならば、すべてのN ≥ 0 N\ge0 N ≥ 0 についてC ( N ) ≤ T N C(N)\le TN C ( N ) ≤ T N が成り立ち、§D2.8 定義 2.2 の意味でC ( N ) = O ( N ) C(N)=O(N) C ( N ) = O ( N ) である。
証明. 長さN N N の操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) をとる。T ^ \hat T T ^ が定数T T T である場合の償却計算量の上界の定義により∑ i = 1 N c i ≤ ∑ i = 1 N T = T N \sum_{i=1}^{N}c_i\le\sum_{i=1}^{N}T=TN ∑ i = 1 N c i ≤ ∑ i = 1 N T = T N である。σ \sigma σ は任意であったから、最大値についてもC ( N ) ≤ T N C(N)\le TN C ( N ) ≤ T N である。
§D2.8 定義 2.2 の意味でC ( N ) = O ( N ) C(N)=O(N) C ( N ) = O ( N ) であることを確かめる。c = T + 1 > 0 c=T+1>0 c = T + 1 > 0 とn 0 = 0 n_0=0 n 0 = 0 をとると、すべてのN ≥ n 0 N\ge n_0 N ≥ n 0 について0 ≤ C ( N ) ≤ T N ≤ c N 0\le C(N)\le TN\le cN 0 ≤ C ( N ) ≤ T N ≤ c N が成り立つ。▨
単一の操作の最悪計算量M M M が有限であれば、C ( N ) ≤ M N C(N)\le MN C ( N ) ≤ M N という上界を直ちに得ることができる。本記事の二つの例ではこのM M M が有限でないので、この自明な評価を用いることができない。以下で扱う集計法、会計法、ポテンシャル法は、いずれも、このようにM M M が有限でない場合にC ( N ) C(N) C ( N ) の線形な上界を得るために用いる。
2 会計法
会計法では、各操作に実費用とは別の課金額を割り当て、課金額が実費用を上回った分を蓄えとして繰り越す。蓄えが負にならないかぎり、課金額の総和が総費用の上界になる。次の定理では、この議論が成り立つための条件が「蓄えがどの時点でも非負である」ことと同値であることが述べられる。
定理 2.1 (会計法). 操作系M \mathcal M M と写像a ^ : O → [ 0 , ∞ ) \hat a:\mathcal O\to[0,\infty) a ^ : O → [ 0 , ∞ ) をとる。a ^ \hat a a ^ を課金額 (amortized charge ) という。D 0 D_0 D 0 から始まる操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) と0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N に対し、信用残高 を
R k ( σ ) = ∑ i = 1 k ( a ^ ( o i ) − c i ) R_k(\sigma)=\sum_{i=1}^{k}\bigl(\hat a(o_i)-c_i\bigr) R k ( σ ) = i = 1 ∑ k ( a ^ ( o i ) − c i ) と定める。このとき次の二条件は同値である。
a ^ \hat a a ^ は定義 1.2 の意味の償却計算量の上界である。
D 0 D_0 D 0 から始まる任意の有限操作列σ \sigma σ と、0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N を満たす任意のk k k に対しR k ( σ ) ≥ 0 R_k(\sigma)\ge0 R k ( σ ) ≥ 0 が成り立つ。
証明. (2) ⇒ \Rightarrow ⇒ (1) を示す。D 0 D_0 D 0 から始まる操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) をとる。主張 (2) をk = N k=N k = N に適用するとR N ( σ ) ≥ 0 R_N(\sigma)\ge0 R N ( σ ) ≥ 0 、すなわち
∑ i = 1 N a ^ ( o i ) − ∑ i = 1 N c i ≥ 0 \sum_{i=1}^{N}\hat a(o_i)-\sum_{i=1}^{N}c_i\ \ge\ 0 i = 1 ∑ N a ^ ( o i ) − i = 1 ∑ N c i ≥ 0 である。これは償却計算量の上界の定義そのものである。
(1) ⇒ \Rightarrow ⇒ (2) を示す。D 0 D_0 D 0 から始まる操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) と0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N をとる。接頭列σ ∣ k = ( o 1 , … , o k ) \sigma|_k=(o_1,\dots,o_k) σ ∣ k = ( o 1 , … , o k ) もD 0 D_0 D 0 から始まる有限操作列であり、定義 1.1 のとおり、その第i i i 操作の実費用はσ \sigma σ の第i i i 操作の実費用c i c_i c i に等しい。主張 (1) をσ ∣ k \sigma|_k σ ∣ k へ適用すると
∑ i = 1 k c i ≤ ∑ i = 1 k a ^ ( o i ) \sum_{i=1}^{k}c_i\ \le\ \sum_{i=1}^{k}\hat a(o_i) i = 1 ∑ k c i ≤ i = 1 ∑ k a ^ ( o i ) であり、これはR k ( σ ) ≥ 0 R_k(\sigma)\ge0 R k ( σ ) ≥ 0 にほかならない。▨
定理 2.1 の同値性から、信用残高の非負性を末尾でだけ確かめても足りないことが分かる。償却計算量の上界は任意の長さの操作列についての主張であり、長さk k k の操作列は長さN N N の操作列の接頭列としても現れるからである。
3 ポテンシャル法
ポテンシャル法では、蓄えを操作列の履歴ではなく状態の関数として表す。
定理 3.1 (ポテンシャル法). 操作系M \mathcal M M と写像Φ : D → R \Phi:\mathcal D\to\R Φ : D → R をとる。Φ \Phi Φ をポテンシャル関数 (potential function ) という。D 0 D_0 D 0 から始まる操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) に対し、第i i i 操作の償却費用 を
c ^ i = c i + Φ ( D i ) − Φ ( D i − 1 ) \hat c_i=c_i+\Phi(D_i)-\Phi(D_{i-1}) c ^ i = c i + Φ ( D i ) − Φ ( D i − 1 ) と定める。このとき次が成り立つ。
任意のN ≥ 0 N\ge0 N ≥ 0 に対し
∑ i = 1 N c ^ i = ∑ i = 1 N c i + Φ ( D N ) − Φ ( D 0 ) \sum_{i=1}^{N}\hat c_i=\sum_{i=1}^{N}c_i+\Phi(D_N)-\Phi(D_0) i = 1 ∑ N c ^ i = i = 1 ∑ N c i + Φ ( D N ) − Φ ( D 0 )
が成り立つ。
Φ ( D 0 ) = 0 \Phi(D_0)=0 Φ ( D 0 ) = 0 であり、かつすべての到達可能な状態D D D でΦ ( D ) ≥ 0 \Phi(D)\ge0 Φ ( D ) ≥ 0 であるとする。さらに写像T ^ : O → [ 0 , ∞ ) \hat T:\mathcal O\to[0,\infty) T ^ : O → [ 0 , ∞ ) が、D 0 D_0 D 0 から始まる任意の操作列とその任意の添字i i i についてc ^ i ≤ T ^ ( o i ) \hat c_i\le\hat T(o_i) c ^ i ≤ T ^ ( o i ) を満たすとする。このときT ^ \hat T T ^ はM \mathcal M M の償却計算量の上界である。
主張 (2) の仮定のうち「Φ ( D 0 ) = 0 \Phi(D_0)=0 Φ ( D 0 ) = 0 かつ到達可能な状態でΦ ≥ 0 \Phi\ge0 Φ ≥ 0 」は、「D 0 D_0 D 0 から始まる任意の操作列でΦ ( D N ) ≥ Φ ( D 0 ) \Phi(D_N)\ge\Phi(D_0) Φ ( D N ) ≥ Φ ( D 0 ) 」へ弱めることができる。
証明. 主張 (1) を示す。償却費用の定義により
∑ i = 1 N c ^ i = ∑ i = 1 N c i + ∑ i = 1 N ( Φ ( D i ) − Φ ( D i − 1 ) ) \sum_{i=1}^{N}\hat c_i=\sum_{i=1}^{N}c_i+\sum_{i=1}^{N}\bigl(\Phi(D_i)-\Phi(D_{i-1})\bigr) i = 1 ∑ N c ^ i = i = 1 ∑ N c i + i = 1 ∑ N ( Φ ( D i ) − Φ ( D i − 1 ) ) である。右辺の第二項は隣り合う項が打ち消し合う望遠鏡和であり、N N N についての帰納法によりΦ ( D N ) − Φ ( D 0 ) \Phi(D_N)-\Phi(D_0) Φ ( D N ) − Φ ( D 0 ) に等しい。実際、N = 0 N=0 N = 0 のとき両辺は0 0 0 である。N − 1 N-1 N − 1 まで成り立つとすると、第二項は( Φ ( D N − 1 ) − Φ ( D 0 ) ) + ( Φ ( D N ) − Φ ( D N − 1 ) ) = Φ ( D N ) − Φ ( D 0 ) \bigl(\Phi(D_{N-1})-\Phi(D_0)\bigr)+\bigl(\Phi(D_N)-\Phi(D_{N-1})\bigr)=\Phi(D_N)-\Phi(D_0) ( Φ ( D N − 1 ) − Φ ( D 0 ) ) + ( Φ ( D N ) − Φ ( D N − 1 ) ) = Φ ( D N ) − Φ ( D 0 ) である。
主張 (3) を先に示す。D 0 D_0 D 0 から始まる操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) についてΦ ( D N ) ≥ Φ ( D 0 ) \Phi(D_N)\ge\Phi(D_0) Φ ( D N ) ≥ Φ ( D 0 ) が成り立つとする。主張 (1) を移項すると
∑ i = 1 N c i = ∑ i = 1 N c ^ i + Φ ( D 0 ) − Φ ( D N ) ≤ ∑ i = 1 N c ^ i \sum_{i=1}^{N}c_i=\sum_{i=1}^{N}\hat c_i+\Phi(D_0)-\Phi(D_N)\ \le\ \sum_{i=1}^{N}\hat c_i i = 1 ∑ N c i = i = 1 ∑ N c ^ i + Φ ( D 0 ) − Φ ( D N ) ≤ i = 1 ∑ N c ^ i である。仮定c ^ i ≤ T ^ ( o i ) \hat c_i\le\hat T(o_i) c ^ i ≤ T ^ ( o i ) を加えると∑ i = 1 N c i ≤ ∑ i = 1 N T ^ ( o i ) \sum_{i=1}^{N}c_i\le\sum_{i=1}^{N}\hat T(o_i) ∑ i = 1 N c i ≤ ∑ i = 1 N T ^ ( o i ) を得る。σ \sigma σ は任意であったからT ^ \hat T T ^ は償却計算量の上界である。
主張 (2) を示す。D N D_N D N はD 0 D_0 D 0 から始まる操作列によって到達可能であるから、仮定によりΦ ( D N ) ≥ 0 = Φ ( D 0 ) \Phi(D_N)\ge0=\Phi(D_0) Φ ( D N ) ≥ 0 = Φ ( D 0 ) である。よって主張 (3) の条件が満たされ、同項により主張が従う。▨
4 二進カウンタ
定義 4.1. 状態集合をD = Z ≥ 0 \mathcal D=\Z_{\ge0} D = Z ≥ 0 、初期状態をD 0 = 0 D_0=0 D 0 = 0 とする。非負整数x x x の二進表記をx = ∑ j ≥ 0 x j 2 j x=\sum_{j\ge0}x_j2^{j} x = ∑ j ≥ 0 x j 2 j (x j ∈ { 0 , 1 } x_j\in\{0,1\} x j ∈ { 0 , 1 } であり、有限個を除いてx j = 0 x_j=0 x j = 0 )と書き、x j x_j x j をx x x の第j j j 桁という。二進表記は一意である。
操作の集合をO = { i n c } \mathcal O=\{\mathrm{inc}\} O = { inc } とし、遷移をδ ( x , i n c ) = x + 1 \delta(x,\mathrm{inc})=x+1 δ ( x , inc ) = x + 1 、実費用を
c ( x , i n c ) = ∣ { j ≥ 0 : x j ≠ ( x + 1 ) j } ∣ c(x,\mathrm{inc})=\bigl\lvert\{j\ge0:\ x_j\ne(x+1)_j\}\bigr\rvert c ( x , inc ) = { j ≥ 0 : x j = ( x + 1 ) j } と定める。すなわち増加操作の実費用は、書き換わる桁の個数である。
x x x の二進表記に現れる1 1 1 の個数をβ ( x ) = ∑ j ≥ 0 x j \beta(x)=\sum_{j\ge0}x_j β ( x ) = ∑ j ≥ 0 x j と書く。また、x 0 = x 1 = ⋯ = x t − 1 = 1 x_0=x_1=\dots=x_{t-1}=1 x 0 = x 1 = ⋯ = x t − 1 = 1 かつx t = 0 x_t=0 x t = 0 を満たす唯一の非負整数t t t をt ( x ) t(x) t ( x ) と書き、x x x の末尾の1 1 1 の個数 (number of trailing ones ) という。有限個を除いてx j = 0 x_j=0 x j = 0 であるから、そのようなt t t はただ一つ存在する。
補題 4.2. 非負整数x x x に対しt = t ( x ) t=t(x) t = t ( x ) と置くと、次が成り立つ。
x x x とx + 1 x+1 x + 1 の二進表記が異なる桁は第0 0 0 桁から第t t t 桁までであり、c ( x , i n c ) = t + 1 c(x,\mathrm{inc})=t+1 c ( x , inc ) = t + 1 である。
β ( x + 1 ) = β ( x ) − t + 1 \beta(x+1)=\beta(x)-t+1 β ( x + 1 ) = β ( x ) − t + 1 である。
非負整数j j j に対し、x x x とx + 1 x+1 x + 1 の第j j j 桁が異なることと2 j ∣ x + 1 2^{j}\mid x+1 2 j ∣ x + 1 であることは同値である。
証明. t = t ( x ) t=t(x) t = t ( x ) の定義によりx 0 = ⋯ = x t − 1 = 1 x_0=\dots=x_{t-1}=1 x 0 = ⋯ = x t − 1 = 1 かつx t = 0 x_t=0 x t = 0 である。よって
x = ∑ j = 0 t − 1 2 j + ∑ j > t x j 2 j = ( 2 t − 1 ) + ∑ j > t x j 2 j , x + 1 = 2 t + ∑ j > t x j 2 j x=\sum_{j=0}^{t-1}2^{j}+\sum_{j>t}x_j2^{j}=(2^{t}-1)+\sum_{j>t}x_j2^{j},
\qquad
x+1=2^{t}+\sum_{j>t}x_j2^{j} x = j = 0 ∑ t − 1 2 j + j > t ∑ x j 2 j = ( 2 t − 1 ) + j > t ∑ x j 2 j , x + 1 = 2 t + j > t ∑ x j 2 j である。右端の式は、第0 0 0 桁から第t − 1 t-1 t − 1 桁までが0 0 0 、第t t t 桁が1 1 1 、第j j j 桁(j > t j>t j > t )がx j x_j x j である二進表記であり、二進表記の一意性により( x + 1 ) j (x+1)_j ( x + 1 ) j はこのとおりである。
主張 (1) を示す。j < t j<t j < t ではx j = 1 x_j=1 x j = 1 かつ( x + 1 ) j = 0 (x+1)_j=0 ( x + 1 ) j = 0 、j = t j=t j = t ではx t = 0 x_t=0 x t = 0 かつ( x + 1 ) t = 1 (x+1)_t=1 ( x + 1 ) t = 1 、j > t j>t j > t ではx j = ( x + 1 ) j x_j=(x+1)_j x j = ( x + 1 ) j である。よって異なる桁はj = 0 , 1 , … , t j=0,1,\dots,t j = 0 , 1 , … , t のちょうどt + 1 t+1 t + 1 個であり、c ( x , i n c ) = t + 1 c(x,\mathrm{inc})=t+1 c ( x , inc ) = t + 1 である。
主張 (2) を示す。β ( x ) = t + ∑ j > t x j \beta(x)=t+\sum_{j>t}x_j β ( x ) = t + ∑ j > t x j でありβ ( x + 1 ) = 1 + ∑ j > t x j \beta(x+1)=1+\sum_{j>t}x_j β ( x + 1 ) = 1 + ∑ j > t x j である。差をとるとβ ( x + 1 ) − β ( x ) = 1 − t \beta(x+1)-\beta(x)=1-t β ( x + 1 ) − β ( x ) = 1 − t を得る。
主張 (3) を示す。主張 (1) により、x x x とx + 1 x+1 x + 1 の第j j j 桁が異なることはj ≤ t j\le t j ≤ t と同値である。一方、上の表示からx + 1 = 2 t ( 1 + ∑ j > t x j 2 j − t ) x+1=2^{t}\bigl(1+\sum_{j>t}x_j2^{j-t}\bigr) x + 1 = 2 t ( 1 + ∑ j > t x j 2 j − t ) であり、括弧の中は奇数である。したがって2 j ∣ x + 1 2^{j}\mid x+1 2 j ∣ x + 1 であることとj ≤ t j\le t j ≤ t であることは同値である。二つの同値を合わせて主張を得る。▨
以下、D 0 = 0 D_0=0 D 0 = 0 から始まる長さN N N の操作列を考える。操作は一種類しかないので、操作列は長さだけで決まり、D i = i D_i=i D i = i である。
4.1 集計法
集計法は、総費用の和を直接評価する方法である。ここでは、各桁が書き換わる回数を桁ごとに数え、その和として総費用を求める。
命題 4.3. D 0 = 0 D_0=0 D 0 = 0 から始まる長さN N N の操作列の総費用は
∑ i = 1 N c i = ∑ j ≥ 0 ⌊ N 2 j ⌋ \sum_{i=1}^{N}c_i=\sum_{j\ge0}\Bigl\lfloor\frac{N}{2^{j}}\Bigr\rfloor i = 1 ∑ N c i = j ≥ 0 ∑ ⌊ 2 j N ⌋ であり、この値は2 N 2N 2 N 以下である。
証明. D i − 1 = i − 1 D_{i-1}=i-1 D i − 1 = i − 1 であるからc i = c ( i − 1 , i n c ) = ∣ { j ≥ 0 : ( i − 1 ) j ≠ i j } ∣ c_i=c(i-1,\mathrm{inc})=\lvert\{j\ge0:\ (i-1)_j\ne i_j\}\rvert c i = c ( i − 1 , inc ) = ∣{ j ≥ 0 : ( i − 1 ) j = i j }∣ である。j ≥ 0 j\ge0 j ≥ 0 と1 ≤ i ≤ N 1\le i\le N 1 ≤ i ≤ N について、( i − 1 ) j ≠ i j (i-1)_j\ne i_j ( i − 1 ) j = i j が成り立つとき1 1 1 、そうでないとき0 0 0 をとる量を考え、その総和を二通りに数える。
i i i を先に固定してj j j について加えると、和は∑ i = 1 N c i \sum_{i=1}^{N}c_i ∑ i = 1 N c i である。j j j を先に固定してi i i について加えると、補題 4.2 (3) により
∣ { i : 1 ≤ i ≤ N , ( i − 1 ) j ≠ i j } ∣ = ∣ { i : 1 ≤ i ≤ N , 2 j ∣ i } ∣ = ⌊ N 2 j ⌋ \bigl\lvert\{i:\ 1\le i\le N,\ (i-1)_j\ne i_j\}\bigr\rvert
=\bigl\lvert\{i:\ 1\le i\le N,\ 2^{j}\mid i\}\bigr\rvert
=\Bigl\lfloor\frac{N}{2^{j}}\Bigr\rfloor { i : 1 ≤ i ≤ N , ( i − 1 ) j = i j } = { i : 1 ≤ i ≤ N , 2 j ∣ i } = ⌊ 2 j N ⌋ である。2 j > N 2^{j}>N 2 j > N のときこの値は0 0 0 であるから、j j j についての和は有限個の項だけからなり、和の順序を入れ替えることができる。よって主張の等式を得る。
評価については、⌊ N / 2 j ⌋ ≤ N / 2 j \lfloor N/2^{j}\rfloor\le N/2^{j} ⌊ N / 2 j ⌋ ≤ N / 2 j であり、2 j > N 2^{j}>N 2 j > N の項が0 0 0 であることから、2 J ≤ N < 2 J + 1 2^{J}\le N<2^{J+1} 2 J ≤ N < 2 J + 1 を満たす非負整数J J J (N ≥ 1 N\ge1 N ≥ 1 のとき)をとって
∑ j ≥ 0 ⌊ N 2 j ⌋ ≤ ∑ j = 0 J N 2 j = N ⋅ 1 − 2 − ( J + 1 ) 1 − 2 − 1 < 2 N \sum_{j\ge0}\Bigl\lfloor\frac{N}{2^{j}}\Bigr\rfloor
\le\sum_{j=0}^{J}\frac{N}{2^{j}}
=N\cdot\frac{1-2^{-(J+1)}}{1-2^{-1}}
<2N j ≥ 0 ∑ ⌊ 2 j N ⌋ ≤ j = 0 ∑ J 2 j N = N ⋅ 1 − 2 − 1 1 − 2 − ( J + 1 ) < 2 N である。N = 0 N=0 N = 0 のときは両辺とも0 0 0 である。▨
4.2 会計法
各増加操作に2 2 2 を課金する。0 0 0 から1 1 1 へ変わる桁の書き換えに1 1 1 を払い、残りの1 1 1 をその桁へ預ける。その桁が後に1 1 1 から0 0 0 へ戻るときの書き換えは、預けてある分で支払う。この見方によれば、信用残高は現在1 1 1 である桁の個数に等しいはずである。次の命題で、この関係を等式として確かめる。
命題 4.4. 課金額をa ^ ( i n c ) = 2 \hat a(\mathrm{inc})=2 a ^ ( inc ) = 2 と定める。D 0 = 0 D_0=0 D 0 = 0 から始まる長さN N N の操作列σ \sigma σ に対し、すべての0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N で
R k ( σ ) = β ( D k ) R_k(\sigma)=\beta(D_k) R k ( σ ) = β ( D k ) が成り立つ。とくにR k ( σ ) ≥ 0 R_k(\sigma)\ge0 R k ( σ ) ≥ 0 である。したがって定理 2.1 によりa ^ \hat a a ^ は償却計算量の上界であり、総費用は2 N 2N 2 N 以下である。
証明. k k k についての帰納法で示す。k = 0 k=0 k = 0 のときR 0 ( σ ) = 0 R_0(\sigma)=0 R 0 ( σ ) = 0 でありβ ( D 0 ) = β ( 0 ) = 0 \beta(D_0)=\beta(0)=0 β ( D 0 ) = β ( 0 ) = 0 であるから等式が成り立つ。
k ≥ 1 k\ge1 k ≥ 1 とし、R k − 1 ( σ ) = β ( D k − 1 ) R_{k-1}(\sigma)=\beta(D_{k-1}) R k − 1 ( σ ) = β ( D k − 1 ) を仮定する。信用残高の定義により
R k ( σ ) − R k − 1 ( σ ) = a ^ ( i n c ) − c k = 2 − c ( D k − 1 , i n c ) R_k(\sigma)-R_{k-1}(\sigma)=\hat a(\mathrm{inc})-c_k=2-c(D_{k-1},\mathrm{inc}) R k ( σ ) − R k − 1 ( σ ) = a ^ ( inc ) − c k = 2 − c ( D k − 1 , inc ) であり、補題 4.2 (1) によりc ( D k − 1 , i n c ) = t ( D k − 1 ) + 1 c(D_{k-1},\mathrm{inc})=t(D_{k-1})+1 c ( D k − 1 , inc ) = t ( D k − 1 ) + 1 であるから、この差は1 − t ( D k − 1 ) 1-t(D_{k-1}) 1 − t ( D k − 1 ) である。一方、D k = D k − 1 + 1 D_k=D_{k-1}+1 D k = D k − 1 + 1 と補題 4.2 (2) により
β ( D k ) − β ( D k − 1 ) = 1 − t ( D k − 1 ) \beta(D_k)-\beta(D_{k-1})=1-t(D_{k-1}) β ( D k ) − β ( D k − 1 ) = 1 − t ( D k − 1 ) である。二つの差が一致するので、帰納法の仮定と合わせてR k ( σ ) = β ( D k ) R_k(\sigma)=\beta(D_k) R k ( σ ) = β ( D k ) を得る。
β \beta β は桁の個数であるから非負であり、R k ( σ ) ≥ 0 R_k(\sigma)\ge0 R k ( σ ) ≥ 0 である。定理 2.1 (2) から 1 への含意によりa ^ \hat a a ^ は償却計算量の上界であり、長さN N N の操作列の総費用は∑ i = 1 N a ^ ( i n c ) = 2 N \sum_{i=1}^{N}\hat a(\mathrm{inc})=2N ∑ i = 1 N a ^ ( inc ) = 2 N 以下である。▨
4.3 ポテンシャル法
命題 4.5. Φ ( x ) = β ( x ) \Phi(x)=\beta(x) Φ ( x ) = β ( x ) と定める。このときΦ ( D 0 ) = 0 \Phi(D_0)=0 Φ ( D 0 ) = 0 であり、すべての状態でΦ ≥ 0 \Phi\ge0 Φ ≥ 0 である。さらにD 0 = 0 D_0=0 D 0 = 0 から始まる任意の操作列の任意の添字i i i についてc ^ i = 2 \hat c_i=2 c ^ i = 2 が成り立つ。したがって定理 3.1 (2) によりT ^ ( i n c ) = 2 \hat T(\mathrm{inc})=2 T ^ ( inc ) = 2 は償却計算量の上界であり、長さN N N の操作列の総費用は2 N 2N 2 N 以下である。
証明. Φ ( D 0 ) = β ( 0 ) = 0 \Phi(D_0)=\beta(0)=0 Φ ( D 0 ) = β ( 0 ) = 0 であり、β \beta β は非負整数であるからΦ ≥ 0 \Phi\ge0 Φ ≥ 0 である。償却費用は、補題 4.2 (1) と 2 により
c ^ i = c i + Φ ( D i ) − Φ ( D i − 1 ) = ( t ( D i − 1 ) + 1 ) + ( 1 − t ( D i − 1 ) ) = 2 \hat c_i=c_i+\Phi(D_i)-\Phi(D_{i-1})
=\bigl(t(D_{i-1})+1\bigr)+\bigl(1-t(D_{i-1})\bigr)=2 c ^ i = c i + Φ ( D i ) − Φ ( D i − 1 ) = ( t ( D i − 1 ) + 1 ) + ( 1 − t ( D i − 1 ) ) = 2 である。よってc ^ i ≤ T ^ ( i n c ) = 2 \hat c_i\le\hat T(\mathrm{inc})=2 c ^ i ≤ T ^ ( inc ) = 2 が成り立ち、定理 3.1 (2) の仮定がすべて満たされる。▨
命題 4.6. 任意の正の整数M M M に対し、到達可能な状態x x x が存在してc ( x , i n c ) ≥ M c(x,\mathrm{inc})\ge M c ( x , inc ) ≥ M が成り立つ。
証明. x = 2 M − 1 x=2^{M}-1 x = 2 M − 1 と置く。D 0 = 0 D_0=0 D 0 = 0 からx x x 回の増加操作を行うと状態はx x x になるので、x x x は到達可能である。x x x の二進表記は第0 0 0 桁から第M − 1 M-1 M − 1 桁までが1 1 1 、第M M M 桁以上が0 0 0 であるからt ( x ) = M t(x)=M t ( x ) = M であり、補題 4.2 (1) によりc ( x , i n c ) = M + 1 ≥ M c(x,\mathrm{inc})=M+1\ge M c ( x , inc ) = M + 1 ≥ M である。▨
例 4.7. D 0 = 0 D_0=0 D 0 = 0 からN = 8 N=8 N = 8 回の増加操作を行う。各操作の前後の二進表記と実費用を書き下す。
0 → 1 0\to1 0 → 1 は000 → 001 000\to001 000 → 001 で書き換わる桁は第0 0 0 桁だけでありc 1 = 1 c_1=1 c 1 = 1 である。1 → 2 1\to2 1 → 2 は001 → 010 001\to010 001 → 010 で第0 0 0 桁と第1 1 1 桁が書き換わりc 2 = 2 c_2=2 c 2 = 2 である。2 → 3 2\to3 2 → 3 は010 → 011 010\to011 010 → 011 でc 3 = 1 c_3=1 c 3 = 1 、3 → 4 3\to4 3 → 4 は011 → 100 011\to100 011 → 100 で第0 0 0 、1 1 1 、2 2 2 桁が書き換わりc 4 = 3 c_4=3 c 4 = 3 、4 → 5 4\to5 4 → 5 は100 → 101 100\to101 100 → 101 でc 5 = 1 c_5=1 c 5 = 1 、5 → 6 5\to6 5 → 6 は101 → 110 101\to110 101 → 110 でc 6 = 2 c_6=2 c 6 = 2 、6 → 7 6\to7 6 → 7 は110 → 111 110\to111 110 → 111 でc 7 = 1 c_7=1 c 7 = 1 、7 → 8 7\to8 7 → 8 は0111 → 1000 0111\to1000 0111 → 1000 で第0 0 0 から第3 3 3 桁までが書き換わりc 8 = 4 c_8=4 c 8 = 4 である。
総費用は1 + 2 + 1 + 3 + 1 + 2 + 1 + 4 = 15 1+2+1+3+1+2+1+4=15 1 + 2 + 1 + 3 + 1 + 2 + 1 + 4 = 15 である。
集計法との照合 。命題 4.3 の式から
⌊ 8 1 ⌋ + ⌊ 8 2 ⌋ + ⌊ 8 4 ⌋ + ⌊ 8 8 ⌋ + ⌊ 8 16 ⌋ + ⋯ = 8 + 4 + 2 + 1 + 0 + ⋯ = 15 \Bigl\lfloor\frac{8}{1}\Bigr\rfloor+\Bigl\lfloor\frac{8}{2}\Bigr\rfloor+\Bigl\lfloor\frac{8}{4}\Bigr\rfloor+\Bigl\lfloor\frac{8}{8}\Bigr\rfloor+\Bigl\lfloor\frac{8}{16}\Bigr\rfloor+\cdots
=8+4+2+1+0+\cdots=15 ⌊ 1 8 ⌋ + ⌊ 2 8 ⌋ + ⌊ 4 8 ⌋ + ⌊ 8 8 ⌋ + ⌊ 16 8 ⌋ + ⋯ = 8 + 4 + 2 + 1 + 0 + ⋯ = 15 が得られ、手計算の値と一致する。上界は2 ⋅ 8 = 16 2\cdot8=16 2 ⋅ 8 = 16 であり、15 ≤ 16 15\le16 15 ≤ 16 である。
会計法との照合 。課金額の総和は2 ⋅ 8 = 16 2\cdot8=16 2 ⋅ 8 = 16 であるから、信用残高はR 8 = 16 − 15 = 1 R_8=16-15=1 R 8 = 16 − 15 = 1 である。一方D 8 = 8 D_8=8 D 8 = 8 の二進表記は1000 1000 1000 でありβ ( 8 ) = 1 \beta(8)=1 β ( 8 ) = 1 である。命題 4.4 の等式R 8 = β ( D 8 ) R_8=\beta(D_8) R 8 = β ( D 8 ) が成り立つ。
ポテンシャル法との照合 。償却費用の総和は2 ⋅ 8 = 16 2\cdot8=16 2 ⋅ 8 = 16 である。定理 3.1 (1) により
∑ i = 1 8 c i = ∑ i = 1 8 c ^ i + Φ ( D 0 ) − Φ ( D 8 ) = 16 + 0 − 1 = 15 \sum_{i=1}^{8}c_i=\sum_{i=1}^{8}\hat c_i+\Phi(D_0)-\Phi(D_8)=16+0-1=15 i = 1 ∑ 8 c i = i = 1 ∑ 8 c ^ i + Φ ( D 0 ) − Φ ( D 8 ) = 16 + 0 − 1 = 15 であり、手計算の値と一致する。
単一の操作の実費用 。この操作列に現れた実費用の最大値はc 8 = 4 c_8=4 c 8 = 4 である。命題 4.6 のとおり、操作列を延ばせばこの値はいくらでも大きくなる。実際、x = 15 x=15 x = 15 から16 16 16 への増加の実費用は5 5 5 である。
5 動的配列
定義 5.1. 状態集合を
D = { ( n , m ) ∈ Z ≥ 0 × Z ≥ 0 : n ≤ m } \mathcal D=\{(n,m)\in\Z_{\ge0}\times\Z_{\ge0}:\ n\le m\} D = {( n , m ) ∈ Z ≥ 0 × Z ≥ 0 : n ≤ m } とし、初期状態をD 0 = ( 0 , 0 ) D_0=(0,0) D 0 = ( 0 , 0 ) とする。n n n は格納されている要素の個数、m m m は確保されている領域の大きさを表し、m m m を容量 (capacity ) という。
操作の集合をO = { a p p } \mathcal O=\{\mathrm{app}\} O = { app } とする。ここでa p p \mathrm{app} app は末尾への追加である。遷移と実費用を
δ ( ( n , m ) , a p p ) = { ( n + 1 , m ) ( n < m ) , ( n + 1 , max { 1 , 2 m } ) ( n = m ) , c ( ( n , m ) , a p p ) = { 1 ( n < m ) , n + 1 ( n = m ) \delta\bigl((n,m),\mathrm{app}\bigr)=
\begin{cases}
(n+1,\ m) & (n<m),\\
(n+1,\ \max\{1,2m\}) & (n=m),
\end{cases}
\qquad
c\bigl((n,m),\mathrm{app}\bigr)=
\begin{cases}
1 & (n<m),\\
n+1 & (n=m)
\end{cases} δ ( ( n , m ) , app ) = { ( n + 1 , m ) ( n + 1 , max { 1 , 2 m }) ( n < m ) , ( n = m ) , c ( ( n , m ) , app ) = { 1 n + 1 ( n < m ) , ( n = m ) と定める。n = m n=m n = m の場合を再確保 (reallocation ) という。再確保では、容量max { 1 , 2 m } \max\{1,2m\} max { 1 , 2 m } の新しい領域を確保して既存のn n n 個の要素を複写し、その後に末尾へ一つ書き込む。複写の費用をn n n 、書き込みの費用を1 1 1 と数えるので、実費用はn + 1 n+1 n + 1 である。n < m n<m n < m の場合は書き込みだけであり、実費用は1 1 1 である。
δ \delta δ の値がD \mathcal D D に属することを確かめる。n < m n<m n < m のときはn + 1 ≤ m n+1\le m n + 1 ≤ m である。n = m = 0 n=m=0 n = m = 0 のときは( 1 , 1 ) (1,1) ( 1 , 1 ) であり1 ≤ 1 1\le1 1 ≤ 1 である。n = m ≥ 1 n=m\ge1 n = m ≥ 1 のときは( m + 1 , 2 m ) (m+1,2m) ( m + 1 , 2 m ) であり、m ≥ 1 m\ge1 m ≥ 1 よりm + 1 ≤ 2 m m+1\le2m m + 1 ≤ 2 m である。
補題 5.2. D 0 = ( 0 , 0 ) D_0=(0,0) D 0 = ( 0 , 0 ) から始まる長さN N N の操作列についてD k = ( n k , m k ) D_k=(n_k,m_k) D k = ( n k , m k ) と書く。このとき次が成り立つ。
すべての0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N でn k = k n_k=k n k = k である。
m 0 = 0 m_0=0 m 0 = 0 であり、1 ≤ k ≤ N 1\le k\le N 1 ≤ k ≤ N のときm k m_k m k はk k k 以上の2 2 2 の冪のうち最小のものである。
1 ≤ k ≤ N 1\le k\le N 1 ≤ k ≤ N について、第k k k 操作が再確保であることと、k = 1 k=1 k = 1 であるかk − 1 k-1 k − 1 が2 2 2 の冪であることは同値である。
すべての0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N で2 n k − m k ≥ 0 2n_k-m_k\ge0 2 n k − m k ≥ 0 である。
証明. 主張 (1) を示す。δ \delta δ はいずれの場合も第一成分を1 1 1 だけ増やし、n 0 = 0 n_0=0 n 0 = 0 である。k k k についての帰納法によりn k = k n_k=k n k = k である。
主張 (2) を示す。k k k についての帰納法で示す。k = 1 k=1 k = 1 のとき、n 0 = 0 = m 0 n_0=0=m_0 n 0 = 0 = m 0 であるから第1 1 1 操作は再確保でありm 1 = max { 1 , 0 } = 1 m_1=\max\{1,0\}=1 m 1 = max { 1 , 0 } = 1 である。1 1 1 以上の2 2 2 の冪のうち最小のものは1 1 1 であるから主張が成り立つ。
1 ≤ k < N 1\le k<N 1 ≤ k < N とし、m k m_k m k がk k k 以上の2 2 2 の冪のうち最小のものであると仮定する。主張 (1) によりn k = k n_k=k n k = k である。
k < m k k<m_k k < m k の場合、第k + 1 k+1 k + 1 操作は再確保ではなくm k + 1 = m k m_{k+1}=m_k m k + 1 = m k である。m k m_k m k は2 2 2 の冪でありm k > k m_k>k m k > k であるからm k ≥ k + 1 m_k\ge k+1 m k ≥ k + 1 である。k + 1 k+1 k + 1 以上の2 2 2 の冪はk k k 以上でもあるから、帰納法の仮定によりそれはm k m_k m k 以上である。よってm k m_k m k はk + 1 k+1 k + 1 以上の2 2 2 の冪のうち最小のものである。
k = m k k=m_k k = m k の場合、第k + 1 k+1 k + 1 操作は再確保でありm k + 1 = 2 m k = 2 k m_{k+1}=2m_k=2k m k + 1 = 2 m k = 2 k である。k = m k k=m_k k = m k は2 2 2 の冪であるから2 k 2k 2 k も2 2 2 の冪である。k < k + 1 k<k+1 k < k + 1 であるからk k k はk + 1 k+1 k + 1 以上ではなく、k k k より大きい2 2 2 の冪のうち最小のものは2 k 2k 2 k である(k k k が2 2 2 の冪であることによる)。よって2 k 2k 2 k はk + 1 k+1 k + 1 以上の2 2 2 の冪のうち最小のものである。
主張 (3) を示す。第k k k 操作が再確保であることはn k − 1 = m k − 1 n_{k-1}=m_{k-1} n k − 1 = m k − 1 、すなわち主張 (1) によりk − 1 = m k − 1 k-1=m_{k-1} k − 1 = m k − 1 と同値である。k = 1 k=1 k = 1 のときは0 = m 0 = 0 0=m_0=0 0 = m 0 = 0 であるから成り立つ。k ≥ 2 k\ge2 k ≥ 2 のときはk − 1 ≥ 1 k-1\ge1 k − 1 ≥ 1 であり、主張 (2) によりm k − 1 m_{k-1} m k − 1 はk − 1 k-1 k − 1 以上の2 2 2 の冪のうち最小のものであるから、k − 1 = m k − 1 k-1=m_{k-1} k − 1 = m k − 1 であることとk − 1 k-1 k − 1 が2 2 2 の冪であることは同値である。
主張 (4) を示す。k = 0 k=0 k = 0 のときは2 ⋅ 0 − 0 = 0 2\cdot0-0=0 2 ⋅ 0 − 0 = 0 である。k ≥ 1 k\ge1 k ≥ 1 とする。主張 (2) によりm k m_k m k はk k k 以上の2 2 2 の冪のうち最小のものである。m k = k m_k=k m k = k ならば2 k − m k = k ≥ 0 2k-m_k=k\ge0 2 k − m k = k ≥ 0 である。m k > k m_k>k m k > k ならば、m k ≥ k + 1 ≥ 2 m_k\ge k+1\ge2 m k ≥ k + 1 ≥ 2 であるからm k / 2 m_k/2 m k /2 も2 2 2 の冪であり、最小性によりm k / 2 < k m_k/2<k m k /2 < k である。よってm k < 2 k m_k<2k m k < 2 k 、すなわち2 n k − m k = 2 k − m k > 0 2n_k-m_k=2k-m_k>0 2 n k − m k = 2 k − m k > 0 である。▨
5.1 集計法
命題 5.3. D 0 = ( 0 , 0 ) D_0=(0,0) D 0 = ( 0 , 0 ) から始まる長さN N N の操作列の総費用について次が成り立つ。N = 0 N=0 N = 0 のとき総費用は0 0 0 、N = 1 N=1 N = 1 のとき総費用は1 1 1 である。N ≥ 2 N\ge2 N ≥ 2 のとき、2 J ≤ N − 1 < 2 J + 1 2^{J}\le N-1<2^{J+1} 2 J ≤ N − 1 < 2 J + 1 を満たす非負整数J J J をとると
∑ i = 1 N c i = N + 2 J + 1 − 1 \sum_{i=1}^{N}c_i=N+2^{J+1}-1 i = 1 ∑ N c i = N + 2 J + 1 − 1 である。いずれの場合も∑ i = 1 N c i ≤ 3 N \sum_{i=1}^{N}c_i\le3N ∑ i = 1 N c i ≤ 3 N が成り立つ。
証明. 補題 5.2 (1) によりn i − 1 = i − 1 n_{i-1}=i-1 n i − 1 = i − 1 である。第i i i 操作が再確保でなければc i = 1 c_i=1 c i = 1 、再確保であればc i = n i − 1 + 1 = i c_i=n_{i-1}+1=i c i = n i − 1 + 1 = i である。よって
∑ i = 1 N c i = N + ∑ 1 ≤ i ≤ N 第 i 操作が再確保 ( i − 1 ) \sum_{i=1}^{N}c_i=N+\sum_{\substack{1\le i\le N\\ \text{第 }i\text{ 操作が再確保}}}(i-1) i = 1 ∑ N c i = N + 1 ≤ i ≤ N 第 i 操作が再確保 ∑ ( i − 1 ) である。補題 5.2 (3) により、再確保が起こる添字はi = 1 i=1 i = 1 と、i − 1 i-1 i − 1 が2 2 2 の冪であるi i i である。i = 1 i=1 i = 1 の項はi − 1 = 0 i-1=0 i − 1 = 0 であるから和に寄与しない。i − 1 = 2 j i-1=2^{j} i − 1 = 2 j かつ1 ≤ i ≤ N 1\le i\le N 1 ≤ i ≤ N を満たすj j j は2 j ≤ N − 1 2^{j}\le N-1 2 j ≤ N − 1 を満たす非負整数であるから、N ≥ 2 N\ge2 N ≥ 2 のとき
∑ 1 ≤ i ≤ N 第 i 操作が再確保 ( i − 1 ) = ∑ j = 0 J 2 j = 2 J + 1 − 1 \sum_{\substack{1\le i\le N\\ \text{第 }i\text{ 操作が再確保}}}(i-1)=\sum_{j=0}^{J}2^{j}=2^{J+1}-1 1 ≤ i ≤ N 第 i 操作が再確保 ∑ ( i − 1 ) = j = 0 ∑ J 2 j = 2 J + 1 − 1 である。N = 1 N=1 N = 1 のときは再確保はi = 1 i=1 i = 1 だけであり、和は0 0 0 である。N = 0 N=0 N = 0 のときは操作が無い。
評価を行う。N ≥ 2 N\ge2 N ≥ 2 のとき2 J ≤ N − 1 2^{J}\le N-1 2 J ≤ N − 1 であるから2 J + 1 − 1 ≤ 2 ( N − 1 ) − 1 = 2 N − 3 2^{J+1}-1\le2(N-1)-1=2N-3 2 J + 1 − 1 ≤ 2 ( N − 1 ) − 1 = 2 N − 3 であり、総費用はN + 2 N − 3 = 3 N − 3 ≤ 3 N N+2N-3=3N-3\le3N N + 2 N − 3 = 3 N − 3 ≤ 3 N 以下である。N = 1 N=1 N = 1 のとき総費用は1 ≤ 3 1\le3 1 ≤ 3 、N = 0 N=0 N = 0 のとき0 ≤ 0 0\le0 0 ≤ 0 である。▨
5.2 会計法
各追加操作に3 3 3 を課金する。1 1 1 は書き込みに使い、2 2 2 を新しく書いた要素へ預ける。次の再確保では、直前の再確保の時点で既にあった要素と、それ以降に書かれた要素とを合わせて複写する。それ以降に書かれた要素は容量の半分だけあり、それぞれの要素に2 2 2 ずつ預けてあるので、預けた分で複写の費用をまかなうことができる。この見通しを、量2 n − m 2n-m 2 n − m を下界とする形の不変条件として定式化する。
命題 5.4. 課金額をa ^ ( a p p ) = 3 \hat a(\mathrm{app})=3 a ^ ( app ) = 3 と定める。D 0 = ( 0 , 0 ) D_0=(0,0) D 0 = ( 0 , 0 ) から始まる長さN N N の操作列σ \sigma σ に対し、すべての0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N で
R k ( σ ) ≥ 2 n k − m k ≥ 0 R_k(\sigma)\ \ge\ 2n_k-m_k\ \ge\ 0 R k ( σ ) ≥ 2 n k − m k ≥ 0 が成り立つ。したがって定理 2.1 によりa ^ \hat a a ^ は償却計算量の上界であり、総費用は3 N 3N 3 N 以下である。
証明. 右側の不等式は補題 5.2 (4) である。左側の不等式をk k k についての帰納法で示す。
k = 0 k=0 k = 0 のときR 0 ( σ ) = 0 R_0(\sigma)=0 R 0 ( σ ) = 0 であり2 n 0 − m 0 = 0 2n_0-m_0=0 2 n 0 − m 0 = 0 であるから等号が成り立つ。
k ≥ 1 k\ge1 k ≥ 1 とし、R k − 1 ( σ ) ≥ 2 n k − 1 − m k − 1 R_{k-1}(\sigma)\ge2n_{k-1}-m_{k-1} R k − 1 ( σ ) ≥ 2 n k − 1 − m k − 1 を仮定する。R k ( σ ) = R k − 1 ( σ ) + 3 − c k R_k(\sigma)=R_{k-1}(\sigma)+3-c_k R k ( σ ) = R k − 1 ( σ ) + 3 − c k である。三つの場合に分ける。
第k k k 操作が再確保でない場合 。c k = 1 c_k=1 c k = 1 、n k = n k − 1 + 1 n_k=n_{k-1}+1 n k = n k − 1 + 1 、m k = m k − 1 m_k=m_{k-1} m k = m k − 1 であるから
R k ( σ ) = R k − 1 ( σ ) + 2 ≥ ( 2 n k − 1 − m k − 1 ) + 2 = 2 n k − m k R_k(\sigma)=R_{k-1}(\sigma)+2\ \ge\ (2n_{k-1}-m_{k-1})+2=2n_k-m_k R k ( σ ) = R k − 1 ( σ ) + 2 ≥ ( 2 n k − 1 − m k − 1 ) + 2 = 2 n k − m k である。
第k k k 操作が再確保でありm k − 1 ≥ 1 m_{k-1}\ge1 m k − 1 ≥ 1 である場合 。n k − 1 = m k − 1 n_{k-1}=m_{k-1} n k − 1 = m k − 1 であるから、m = m k − 1 m=m_{k-1} m = m k − 1 と置くとc k = m + 1 c_k=m+1 c k = m + 1 、n k = m + 1 n_k=m+1 n k = m + 1 、m k = 2 m m_k=2m m k = 2 m であり2 n k − m k = 2 ( m + 1 ) − 2 m = 2 2n_k-m_k=2(m+1)-2m=2 2 n k − m k = 2 ( m + 1 ) − 2 m = 2 である。帰納法の仮定からR k − 1 ( σ ) ≥ 2 m − m = m R_{k-1}(\sigma)\ge2m-m=m R k − 1 ( σ ) ≥ 2 m − m = m が得られるので
R k ( σ ) = R k − 1 ( σ ) + 3 − ( m + 1 ) ≥ m + 2 − m = 2 = 2 n k − m k R_k(\sigma)=R_{k-1}(\sigma)+3-(m+1)\ \ge\ m+2-m=2=2n_k-m_k R k ( σ ) = R k − 1 ( σ ) + 3 − ( m + 1 ) ≥ m + 2 − m = 2 = 2 n k − m k である。
第k k k 操作が再確保でありm k − 1 = 0 m_{k-1}=0 m k − 1 = 0 である場合 。このときn k − 1 = 0 n_{k-1}=0 n k − 1 = 0 であるからk = 1 k=1 k = 1 であり、c 1 = 1 c_1=1 c 1 = 1 、D 1 = ( 1 , 1 ) D_1=(1,1) D 1 = ( 1 , 1 ) である。R 1 ( σ ) = 0 + 3 − 1 = 2 R_1(\sigma)=0+3-1=2 R 1 ( σ ) = 0 + 3 − 1 = 2 であり2 n 1 − m 1 = 2 − 1 = 1 2n_1-m_1=2-1=1 2 n 1 − m 1 = 2 − 1 = 1 であるからR 1 ( σ ) ≥ 2 n 1 − m 1 R_1(\sigma)\ge2n_1-m_1 R 1 ( σ ) ≥ 2 n 1 − m 1 である。
以上で帰納法が完成する。定理 2.1 (2) から 1 への含意によりa ^ \hat a a ^ は償却計算量の上界であり、長さN N N の操作列の総費用は3 N 3N 3 N 以下である。▨
5.3 ポテンシャル法
命題 5.5. Φ ( n , m ) = 2 n − m \Phi(n,m)=2n-m Φ ( n , m ) = 2 n − m と定める。このときΦ ( D 0 ) = 0 \Phi(D_0)=0 Φ ( D 0 ) = 0 であり、補題 5.2 (4) によりすべての到達可能な状態でΦ ≥ 0 \Phi\ge0 Φ ≥ 0 である。さらにD 0 = ( 0 , 0 ) D_0=(0,0) D 0 = ( 0 , 0 ) から始まる任意の操作列の任意の添字i i i についてc ^ i ≤ 3 \hat c_i\le3 c ^ i ≤ 3 が成り立つ。したがって定理 3.1 (2) によりT ^ ( a p p ) = 3 \hat T(\mathrm{app})=3 T ^ ( app ) = 3 は償却計算量の上界であり、長さN N N の操作列の総費用は3 N 3N 3 N 以下である。
証明. Φ ( D 0 ) = 2 ⋅ 0 − 0 = 0 \Phi(D_0)=2\cdot0-0=0 Φ ( D 0 ) = 2 ⋅ 0 − 0 = 0 である。到達可能な状態での非負性は補題 5.2 (4) による。償却費用を三つの場合に分けて計算する。
第i i i 操作が再確保でない場合 。c i = 1 c_i=1 c i = 1 であり、D i − 1 = ( n , m ) D_{i-1}=(n,m) D i − 1 = ( n , m ) 、D i = ( n + 1 , m ) D_i=(n+1,m) D i = ( n + 1 , m ) であるから
c ^ i = 1 + ( 2 ( n + 1 ) − m ) − ( 2 n − m ) = 1 + 2 = 3 \hat c_i=1+\bigl(2(n+1)-m\bigr)-(2n-m)=1+2=3 c ^ i = 1 + ( 2 ( n + 1 ) − m ) − ( 2 n − m ) = 1 + 2 = 3 である。
第i i i 操作が再確保でありm ≥ 1 m\ge1 m ≥ 1 である場合 。D i − 1 = ( m , m ) D_{i-1}=(m,m) D i − 1 = ( m , m ) 、D i = ( m + 1 , 2 m ) D_i=(m+1,2m) D i = ( m + 1 , 2 m ) でありc i = m + 1 c_i=m+1 c i = m + 1 であるから
c ^ i = ( m + 1 ) + ( 2 ( m + 1 ) − 2 m ) − ( 2 m − m ) = ( m + 1 ) + 2 − m = 3 \hat c_i=(m+1)+\bigl(2(m+1)-2m\bigr)-(2m-m)=(m+1)+2-m=3 c ^ i = ( m + 1 ) + ( 2 ( m + 1 ) − 2 m ) − ( 2 m − m ) = ( m + 1 ) + 2 − m = 3 である。
第i i i 操作が再確保でありm = 0 m=0 m = 0 である場合 。D i − 1 = ( 0 , 0 ) D_{i-1}=(0,0) D i − 1 = ( 0 , 0 ) 、D i = ( 1 , 1 ) D_i=(1,1) D i = ( 1 , 1 ) でありc i = 1 c_i=1 c i = 1 であるから
c ^ i = 1 + ( 2 − 1 ) − ( 0 − 0 ) = 2 \hat c_i=1+(2-1)-(0-0)=2 c ^ i = 1 + ( 2 − 1 ) − ( 0 − 0 ) = 2 である。
いずれの場合もc ^ i ≤ 3 \hat c_i\le3 c ^ i ≤ 3 である。▨
命題 5.6. 任意の正の整数M M M に対し、到達可能な状態D D D が存在してc ( D , a p p ) ≥ M c(D,\mathrm{app})\ge M c ( D , app ) ≥ M が成り立つ。
証明. 2 j ≥ M 2^{j}\ge M 2 j ≥ M を満たす非負整数j j j をとり、k = 2 j k=2^{j} k = 2 j と置く。D 0 = ( 0 , 0 ) D_0=(0,0) D 0 = ( 0 , 0 ) からk k k 回の追加操作を行うと、補題 5.2 (1) と 2 によりD k = ( k , m k ) D_k=(k,m_k) D k = ( k , m k ) であり、m k m_k m k はk k k 以上の2 2 2 の冪のうち最小のものであるからm k = k m_k=k m k = k である。よってD k = ( k , k ) D_k=(k,k) D k = ( k , k ) は到達可能であり、次の追加操作は再確保であってc ( D k , a p p ) = k + 1 ≥ M c(D_k,\mathrm{app})=k+1\ge M c ( D k , app ) = k + 1 ≥ M である。▨
例 5.7. D 0 = ( 0 , 0 ) D_0=(0,0) D 0 = ( 0 , 0 ) からN = 8 N=8 N = 8 回の追加操作を行う。各操作の前の状態、再確保の有無、実費用および操作後の状態を順に書き下す。
第1 1 1 操作は( 0 , 0 ) (0,0) ( 0 , 0 ) から始まりn = m n=m n = m であるから再確保であり、c 1 = 0 + 1 = 1 c_1=0+1=1 c 1 = 0 + 1 = 1 で状態は( 1 , 1 ) (1,1) ( 1 , 1 ) になる。第2 2 2 操作は( 1 , 1 ) (1,1) ( 1 , 1 ) から始まり再確保でありc 2 = 1 + 1 = 2 c_2=1+1=2 c 2 = 1 + 1 = 2 で( 2 , 2 ) (2,2) ( 2 , 2 ) になる。第3 3 3 操作は( 2 , 2 ) (2,2) ( 2 , 2 ) から始まり再確保でありc 3 = 2 + 1 = 3 c_3=2+1=3 c 3 = 2 + 1 = 3 で( 3 , 4 ) (3,4) ( 3 , 4 ) になる。第4 4 4 操作は( 3 , 4 ) (3,4) ( 3 , 4 ) から始まりn < m n<m n < m であるからc 4 = 1 c_4=1 c 4 = 1 で( 4 , 4 ) (4,4) ( 4 , 4 ) になる。第5 5 5 操作は( 4 , 4 ) (4,4) ( 4 , 4 ) から始まり再確保でありc 5 = 4 + 1 = 5 c_5=4+1=5 c 5 = 4 + 1 = 5 で( 5 , 8 ) (5,8) ( 5 , 8 ) になる。第6 6 6 、第7 7 7 、第8 8 8 操作はいずれもn < m n<m n < m であるからc 6 = c 7 = c 8 = 1 c_6=c_7=c_8=1 c 6 = c 7 = c 8 = 1 であり、状態は順に( 6 , 8 ) (6,8) ( 6 , 8 ) 、( 7 , 8 ) (7,8) ( 7 , 8 ) 、( 8 , 8 ) (8,8) ( 8 , 8 ) になる。
総費用は1 + 2 + 3 + 1 + 5 + 1 + 1 + 1 = 15 1+2+3+1+5+1+1+1=15 1 + 2 + 3 + 1 + 5 + 1 + 1 + 1 = 15 である。
集計法との照合 。N = 8 N=8 N = 8 に対し2 J ≤ 7 < 2 J + 1 2^{J}\le7<2^{J+1} 2 J ≤ 7 < 2 J + 1 を満たすJ J J はJ = 2 J=2 J = 2 である。命題 5.3 の式から8 + 2 3 − 1 = 8 + 7 = 15 8+2^{3}-1=8+7=15 8 + 2 3 − 1 = 8 + 7 = 15 が得られ、手計算の値と一致する。上界は3 ⋅ 8 = 24 3\cdot8=24 3 ⋅ 8 = 24 であり、15 ≤ 24 15\le24 15 ≤ 24 である。再確保が起きた添字は1 , 2 , 3 , 5 1,2,3,5 1 , 2 , 3 , 5 であり、i − 1 i-1 i − 1 の値は0 , 1 , 2 , 4 0,1,2,4 0 , 1 , 2 , 4 であって、i = 1 i=1 i = 1 を除けば2 2 2 の冪である。補題 5.2 (3) と一致する。
会計法との照合 。課金額の総和は3 ⋅ 8 = 24 3\cdot8=24 3 ⋅ 8 = 24 であるからR 8 = 24 − 15 = 9 R_8=24-15=9 R 8 = 24 − 15 = 9 である。一方D 8 = ( 8 , 8 ) D_8=(8,8) D 8 = ( 8 , 8 ) であるから2 n 8 − m 8 = 16 − 8 = 8 2n_8-m_8=16-8=8 2 n 8 − m 8 = 16 − 8 = 8 であり、R 8 = 9 ≥ 8 R_8=9\ge8 R 8 = 9 ≥ 8 が成り立つ。命題 5.4 の不等式のとおりである。
ポテンシャル法との照合 。償却費用は命題 5.5 の計算によりc ^ 1 = 2 \hat c_1=2 c ^ 1 = 2 、c ^ 2 = ⋯ = c ^ 8 = 3 \hat c_2=\dots=\hat c_8=3 c ^ 2 = ⋯ = c ^ 8 = 3 であるから総和は2 + 3 ⋅ 7 = 23 2+3\cdot7=23 2 + 3 ⋅ 7 = 23 である。定理 3.1 (1) により
∑ i = 1 8 c i = ∑ i = 1 8 c ^ i + Φ ( D 0 ) − Φ ( D 8 ) = 23 + 0 − 8 = 15 \sum_{i=1}^{8}c_i=\sum_{i=1}^{8}\hat c_i+\Phi(D_0)-\Phi(D_8)=23+0-8=15 i = 1 ∑ 8 c i = i = 1 ∑ 8 c ^ i + Φ ( D 0 ) − Φ ( D 8 ) = 23 + 0 − 8 = 15 であり、手計算の値と一致する。
単一の操作の実費用 。この操作列に現れた実費用の最大値はc 5 = 5 c_5=5 c 5 = 5 である。命題 5.6 のとおり、操作列を延ばせばこの値はいくらでも大きくなる。実際、状態( 8 , 8 ) (8,8) ( 8 , 8 ) からの追加の実費用は9 9 9 である。
6 演習
問題 6.1.
操作を二つもつ操作系と課金額a ^ \hat a a ^ を作り、ある操作列σ \sigma σ についてR ∣ σ ∣ ( σ ) ≥ 0 R_{\lvert\sigma\rvert}(\sigma)\ge0 R ∣ σ ∣ ( σ ) ≥ 0 が成り立ちながら、σ \sigma σ のある接頭列でR k ( σ ) < 0 R_k(\sigma)<0 R k ( σ ) < 0 となるようにせよ。その例でa ^ \hat a a ^ が償却計算量の上界でないことを確かめよ。さらに、作った操作系について、償却計算量の上界である課金額の全体を求めよ。
操作系M \mathcal M M と二つのポテンシャル関数Φ , Φ ′ : D → R \Phi,\Phi':\mathcal D\to\R Φ , Φ ′ : D → R をとり、それぞれによる償却費用をc ^ i \hat c_i c ^ i 、c ^ i ′ \hat c'_i c ^ i ′ と書く。D 0 D_0 D 0 から始まる任意の操作列とその任意の添字i i i についてc ^ i = c ^ i ′ \hat c_i=\hat c'_i c ^ i = c ^ i ′ が成り立つことと、実数κ \kappa κ が存在してすべての到達可能な状態D D D でΦ ′ ( D ) = Φ ( D ) + κ \Phi'(D)=\Phi(D)+\kappa Φ ′ ( D ) = Φ ( D ) + κ が成り立つことは同値であることを示せ。これを用いて、定義 4.1 の二進カウンタにおいて、Φ ( 0 ) = 0 \Phi(0)=0 Φ ( 0 ) = 0 を満たし、D 0 = 0 D_0=0 D 0 = 0 から始まる任意の操作列の任意の添字i i i で償却費用が2 2 2 に等しいポテンシャル関数Φ \Phi Φ はβ \beta β に限ることを示せ。
注意 3.2 の反例において、ポテンシャル関数をΦ ( x ) = − x \Phi(x)=-x Φ ( x ) = − x からΦ ( x ) = x \Phi(x)=x Φ ( x ) = x へ取り替えると償却費用がいくつになるかを計算し、その場合に定理 3.1 (2) により得られる上界を書き下せ。得られた上界が実際の総費用2 N 2N 2 N と整合することを確かめよ。
命題 4.4 により信用残高がβ ( D k ) \beta(D_k) β ( D k ) にちょうど等しいことが示されている。課金額を2 2 2 ではなく3 / 2 3/2 3/2 に変えたとき、信用残高が非負であり続けるかどうかを判定せよ。非負でないならば、非負でなくなる最小のk k k を求めよ。
正の整数m 0 m_0 m 0 をとり、定義 5.1 の操作系の初期状態だけをD 0 = ( 0 , m 0 ) D_0=(0,m_0) D 0 = ( 0 , m 0 ) に替える。このときD 0 D_0 D 0 では2 n − m = − m 0 < 0 2n-m=-m_0<0 2 n − m = − m 0 < 0 である。課金額をa ^ ( a p p ) = 3 \hat a(\mathrm{app})=3 a ^ ( app ) = 3 と定めるとき、D 0 D_0 D 0 から始まる長さN N N の任意の操作列σ \sigma σ と0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N についてR k ( σ ) = 2 n k − m k + m 0 ≥ 0 R_k(\sigma)=2n_k-m_k+m_0\ge0 R k ( σ ) = 2 n k − m k + m 0 ≥ 0 が成り立つことを示し、a ^ \hat a a ^ がこの操作系の償却計算量の上界であることを示せ。さらに、T < 3 T<3 T < 3 を満たす定数T T T はこの操作系の償却計算量の上界でないことを示せ。
動的配列の再確保で容量を2 2 2 倍ではなく3 3 3 倍にする規則を考える。この規則に対するポテンシャル関数を設計し、定理 3.1 (2) の仮定をすべて満たすことを証明して、償却計算量の上界となる定数を求めよ。さらに、容量を2 2 2 倍にする場合と比べたときの上界の違いを述べよ。
動的配列に末尾からの削除操作を加え、削除の実費用を1 1 1 、要素数が容量の半分になったときに容量を半分にする規則を採る操作系を考える。Φ ( n , m ) = ∣ 2 n − m ∣ \Phi(n,m)=\lvert2n-m\rvert Φ ( n , m ) = ∣ 2 n − m ∣ について、定数T ^ \hat T T ^ をとって定理 3.1 (2) の仮定をすべて満たすようにすることができるかどうかを判定せよ。することができない場合は、要素数が容量の半分になる状態のまわりで追加と削除を交互に繰り返す操作列を作り、その操作列に沿って償却費用が上に有界でないことを示せ。
解答. (1) の例として、状態集合D = { 0 } \mathcal D=\{0\} D = { 0 } 、初期状態D 0 = 0 D_0=0 D 0 = 0 、操作の集合O = { p , q } \mathcal O=\{p,q\} O = { p , q } 、遷移δ ( 0 , p ) = δ ( 0 , q ) = 0 \delta(0,p)=\delta(0,q)=0 δ ( 0 , p ) = δ ( 0 , q ) = 0 、実費用c ( 0 , p ) = 2 c(0,p)=2 c ( 0 , p ) = 2 、c ( 0 , q ) = 0 c(0,q)=0 c ( 0 , q ) = 0 からなる操作系をとり、課金額をa ^ ( p ) = a ^ ( q ) = 1 \hat a(p)=\hat a(q)=1 a ^ ( p ) = a ^ ( q ) = 1 と定める。操作列σ = ( p , q ) \sigma=(p,q) σ = ( p , q ) の状態の列はD 0 = D 1 = D 2 = 0 D_0=D_1=D_2=0 D 0 = D 1 = D 2 = 0 であり、c 1 = 2 c_1=2 c 1 = 2 、c 2 = 0 c_2=0 c 2 = 0 である。信用残高は
R 1 ( σ ) = 1 − 2 = − 1 < 0 , R 2 ( σ ) = ( 1 − 2 ) + ( 1 − 0 ) = 0 R_1(\sigma)=1-2=-1<0,\qquad R_2(\sigma)=(1-2)+(1-0)=0 R 1 ( σ ) = 1 − 2 = − 1 < 0 , R 2 ( σ ) = ( 1 − 2 ) + ( 1 − 0 ) = 0 であるから、R ∣ σ ∣ ( σ ) = R 2 ( σ ) ≥ 0 R_{\lvert\sigma\rvert}(\sigma)=R_2(\sigma)\ge0 R ∣ σ ∣ ( σ ) = R 2 ( σ ) ≥ 0 が成り立ちながら、接頭列σ ∣ 1 \sigma|_1 σ ∣ 1 についてR 1 ( σ ) < 0 R_1(\sigma)<0 R 1 ( σ ) < 0 である。a ^ \hat a a ^ が償却計算量の上界でないことは、長さ1 1 1 の操作列σ ∣ 1 = ( p ) \sigma|_1=(p) σ ∣ 1 = ( p ) によって確かめることができる。σ ∣ 1 \sigma|_1 σ ∣ 1 もD 0 D_0 D 0 から始まる有限操作列であり、その総費用は2 2 2 、課金額の総和はa ^ ( p ) = 1 \hat a(p)=1 a ^ ( p ) = 1 であるから、定義 1.2 (3) の不等式は2 ≤ 1 2\le1 2 ≤ 1 となって成り立たない。
この操作系の償却計算量の上界である課金額a ^ : O → [ 0 , ∞ ) \hat a:\mathcal O\to[0,\infty) a ^ : O → [ 0 , ∞ ) の全体は、a ^ ( p ) ≥ 2 \hat a(p)\ge2 a ^ ( p ) ≥ 2 を満たすもの全体であることを示す。a ^ \hat a a ^ が償却計算量の上界であるとすると、長さ1 1 1 の操作列( p ) (p) ( p ) について定義 1.2 (3) の不等式はc ( 0 , p ) ≤ a ^ ( p ) c(0,p)\le\hat a(p) c ( 0 , p ) ≤ a ^ ( p ) 、すなわち2 ≤ a ^ ( p ) 2\le\hat a(p) 2 ≤ a ^ ( p ) である。逆にa ^ ( p ) ≥ 2 \hat a(p)\ge2 a ^ ( p ) ≥ 2 とする。状態は0 0 0 だけであるから、D 0 D_0 D 0 から始まる任意の操作列( o 1 , … , o N ) (o_1,\dots,o_N) ( o 1 , … , o N ) の第i i i 操作の実費用はc i = c ( 0 , o i ) c_i=c(0,o_i) c i = c ( 0 , o i ) である。o i = p o_i=p o i = p ならばc i = 2 ≤ a ^ ( p ) c_i=2\le\hat a(p) c i = 2 ≤ a ^ ( p ) であり、o i = q o_i=q o i = q ならばc i = 0 ≤ a ^ ( q ) c_i=0\le\hat a(q) c i = 0 ≤ a ^ ( q ) である。各i i i についてc i ≤ a ^ ( o i ) c_i\le\hat a(o_i) c i ≤ a ^ ( o i ) であるから、i i i について加えて∑ i = 1 N c i ≤ ∑ i = 1 N a ^ ( o i ) \sum_{i=1}^{N}c_i\le\sum_{i=1}^{N}\hat a(o_i) ∑ i = 1 N c i ≤ ∑ i = 1 N a ^ ( o i ) を得る。よってa ^ \hat a a ^ は償却計算量の上界である。一方、上の操作列( p , q ) (p,q) ( p , q ) の末尾でR 2 ≥ 0 R_2\ge0 R 2 ≥ 0 となる条件はa ^ ( p ) + a ^ ( q ) ≥ 2 \hat a(p)+\hat a(q)\ge2 a ^ ( p ) + a ^ ( q ) ≥ 2 であり、上の例のa ^ ( p ) = a ^ ( q ) = 1 \hat a(p)=\hat a(q)=1 a ^ ( p ) = a ^ ( q ) = 1 のように、この条件を満たしながらa ^ ( p ) < 2 \hat a(p)<2 a ^ ( p ) < 2 である課金額は償却計算量の上界でない。
(2) を示す。まず、c ^ i = c ^ i ′ \hat c_i=\hat c'_i c ^ i = c ^ i ′ がつねに成り立つとする。到達可能な状態D D D をとると、D 0 D_0 D 0 から始まる操作列σ = ( o 1 , … , o N ) \sigma=(o_1,\dots,o_N) σ = ( o 1 , … , o N ) であって状態の列にD D D が現れるものがある。D = D n D=D_n D = D n とすると、接頭列σ ∣ n \sigma|_n σ ∣ n はD 0 D_0 D 0 から始まる操作列であり、その状態の列はD 0 , … , D n D_0,\dots,D_n D 0 , … , D n である。定理 3.1 (1) をσ ∣ n \sigma|_n σ ∣ n とΦ \Phi Φ 、Φ ′ \Phi' Φ ′ のそれぞれに対して適用すると
∑ i = 1 n c ^ i = ∑ i = 1 n c i + Φ ( D n ) − Φ ( D 0 ) , ∑ i = 1 n c ^ i ′ = ∑ i = 1 n c i + Φ ′ ( D n ) − Φ ′ ( D 0 ) \sum_{i=1}^{n}\hat c_i=\sum_{i=1}^{n}c_i+\Phi(D_n)-\Phi(D_0),\qquad
\sum_{i=1}^{n}\hat c'_i=\sum_{i=1}^{n}c_i+\Phi'(D_n)-\Phi'(D_0) i = 1 ∑ n c ^ i = i = 1 ∑ n c i + Φ ( D n ) − Φ ( D 0 ) , i = 1 ∑ n c ^ i ′ = i = 1 ∑ n c i + Φ ′ ( D n ) − Φ ′ ( D 0 ) である。二つの左辺は等しいので、Φ ′ ( D ) − Φ ( D ) = Φ ′ ( D 0 ) − Φ ( D 0 ) \Phi'(D)-\Phi(D)=\Phi'(D_0)-\Phi(D_0) Φ ′ ( D ) − Φ ( D ) = Φ ′ ( D 0 ) − Φ ( D 0 ) である。κ = Φ ′ ( D 0 ) − Φ ( D 0 ) \kappa=\Phi'(D_0)-\Phi(D_0) κ = Φ ′ ( D 0 ) − Φ ( D 0 ) と置くと、κ \kappa κ はD D D によらないので、すべての到達可能な状態D D D でΦ ′ ( D ) = Φ ( D ) + κ \Phi'(D)=\Phi(D)+\kappa Φ ′ ( D ) = Φ ( D ) + κ が成り立つ。
逆に、実数κ \kappa κ について、すべての到達可能な状態D D D でΦ ′ ( D ) = Φ ( D ) + κ \Phi'(D)=\Phi(D)+\kappa Φ ′ ( D ) = Φ ( D ) + κ が成り立つとする。D 0 D_0 D 0 から始まる操作列とその添字i i i をとると、D i − 1 D_{i-1} D i − 1 とD i D_i D i はその状態の列に現れるので到達可能である。ゆえに
c ^ i ′ − c ^ i = ( Φ ′ ( D i ) − Φ ( D i ) ) − ( Φ ′ ( D i − 1 ) − Φ ( D i − 1 ) ) = κ − κ = 0 \hat c'_i-\hat c_i=\bigl(\Phi'(D_i)-\Phi(D_i)\bigr)-\bigl(\Phi'(D_{i-1})-\Phi(D_{i-1})\bigr)=\kappa-\kappa=0 c ^ i ′ − c ^ i = ( Φ ′ ( D i ) − Φ ( D i ) ) − ( Φ ′ ( D i − 1 ) − Φ ( D i − 1 ) ) = κ − κ = 0 であり、c ^ i ′ = c ^ i \hat c'_i=\hat c_i c ^ i ′ = c ^ i である。以上で同値性が示された。
二進カウンタについて、Φ : Z ≥ 0 → R \Phi:\Z_{\ge0}\to\R Φ : Z ≥ 0 → R がΦ ( 0 ) = 0 \Phi(0)=0 Φ ( 0 ) = 0 を満たし、すべての償却費用が2 2 2 に等しいとする。命題 4.5 により、ポテンシャル関数β \beta β による償却費用もつねに2 2 2 である。したがってΦ \Phi Φ とβ \beta β による償却費用はつねに一致し、前半により、実数κ \kappa κ が存在してすべての到達可能な状態x x x でΦ ( x ) = β ( x ) + κ \Phi(x)=\beta(x)+\kappa Φ ( x ) = β ( x ) + κ である。x = 0 x=0 x = 0 を代入するとκ = Φ ( 0 ) − β ( 0 ) = 0 \kappa=\Phi(0)-\beta(0)=0 κ = Φ ( 0 ) − β ( 0 ) = 0 である。また、非負整数x x x について、i n c \mathrm{inc} inc をx x x 回並べた操作列の状態の列は0 , 1 , … , x 0,1,\dots,x 0 , 1 , … , x であるから、すべての非負整数は到達可能である。ゆえにΦ = β \Phi=\beta Φ = β である。逆にΦ = β \Phi=\beta Φ = β はβ ( 0 ) = 0 \beta(0)=0 β ( 0 ) = 0 を満たし、命題 4.5 によりすべての償却費用が2 2 2 に等しい。
(3) では、Φ ( x ) = x \Phi(x)=x Φ ( x ) = x とすると、D i = i D_i=i D i = i であるから償却費用は
c ^ i = 2 + Φ ( D i ) − Φ ( D i − 1 ) = 2 + i − ( i − 1 ) = 3 \hat c_i=2+\Phi(D_i)-\Phi(D_{i-1})=2+i-(i-1)=3 c ^ i = 2 + Φ ( D i ) − Φ ( D i − 1 ) = 2 + i − ( i − 1 ) = 3 である。定理 3.1 (2) の仮定を確かめる。Φ ( D 0 ) = 0 \Phi(D_0)=0 Φ ( D 0 ) = 0 である。到達可能な状態は、D 0 D_0 D 0 から始まる操作列の状態の列に現れるD i = i D_i=i D i = i (i ≥ 0 i\ge0 i ≥ 0 )であり、非負整数であるから、到達可能な状態でΦ ≥ 0 \Phi\ge0 Φ ≥ 0 である。T ^ ( o ) = 3 \hat T(o)=3 T ^ ( o ) = 3 と置くと、任意の操作列の任意の添字についてc ^ i = 3 ≤ T ^ ( o ) \hat c_i=3\le\hat T(o) c ^ i = 3 ≤ T ^ ( o ) である。よって定理 3.1 (2) によりT ^ ( o ) = 3 \hat T(o)=3 T ^ ( o ) = 3 は償却計算量の上界であり、長さN N N の操作列の総費用は3 N 3N 3 N 以下である。実際の総費用は2 N 2N 2 N であり、N ≥ 0 N\ge0 N ≥ 0 より2 N ≤ 3 N 2N\le3N 2 N ≤ 3 N が成り立つので、得られた上界は実際の総費用と整合する。定理 3.1 (1) により∑ i = 1 N c ^ i = 3 N \sum_{i=1}^{N}\hat c_i=3N ∑ i = 1 N c ^ i = 3 N は総費用2 N 2N 2 N とΦ ( D N ) − Φ ( D 0 ) = N \Phi(D_N)-\Phi(D_0)=N Φ ( D N ) − Φ ( D 0 ) = N の和であり、上界と総費用の差N N N は終端のポテンシャルΦ ( D N ) \Phi(D_N) Φ ( D N ) に等しい。
(4) では、課金額をa ^ ( i n c ) = 3 / 2 \hat a(\mathrm{inc})=3/2 a ^ ( inc ) = 3/2 に変えたときの信用残高をR k ′ ( σ ) R'_k(\sigma) R k ′ ( σ ) と書く。D 0 = 0 D_0=0 D 0 = 0 から始まる長さN N N の操作列σ \sigma σ と0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N に対し、課金額が2 2 2 のときの信用残高R k ( σ ) R_k(\sigma) R k ( σ ) との差は
R k ( σ ) − R k ′ ( σ ) = ∑ i = 1 k ( 2 − 3 2 ) = k 2 R_k(\sigma)-R'_k(\sigma)=\sum_{i=1}^{k}\Bigl(2-\frac32\Bigr)=\frac k2 R k ( σ ) − R k ′ ( σ ) = i = 1 ∑ k ( 2 − 2 3 ) = 2 k であるから、命題 4.4 とD k = k D_k=k D k = k によりR k ′ ( σ ) = β ( k ) − k / 2 R'_k(\sigma)=\beta(k)-k/2 R k ′ ( σ ) = β ( k ) − k /2 である。R 0 ′ ( σ ) = 0 R'_0(\sigma)=0 R 0 ′ ( σ ) = 0 である。β ( 1 ) = 1 \beta(1)=1 β ( 1 ) = 1 、β ( 2 ) = 1 \beta(2)=1 β ( 2 ) = 1 、β ( 3 ) = 2 \beta(3)=2 β ( 3 ) = 2 であるからR 1 ′ ( σ ) = 1 / 2 R'_1(\sigma)=1/2 R 1 ′ ( σ ) = 1/2 、R 2 ′ ( σ ) = 0 R'_2(\sigma)=0 R 2 ′ ( σ ) = 0 、R 3 ′ ( σ ) = 1 / 2 R'_3(\sigma)=1/2 R 3 ′ ( σ ) = 1/2 であり、いずれも非負である。β ( 4 ) = 1 \beta(4)=1 β ( 4 ) = 1 であるからR 4 ′ ( σ ) = 1 − 2 = − 1 < 0 R'_4(\sigma)=1-2=-1<0 R 4 ′ ( σ ) = 1 − 2 = − 1 < 0 である。実費用から直接計算しても、c 1 + c 2 + c 3 + c 4 = 1 + 2 + 1 + 3 = 7 c_1+c_2+c_3+c_4=1+2+1+3=7 c 1 + c 2 + c 3 + c 4 = 1 + 2 + 1 + 3 = 7 、課金額の総和は4 ⋅ 3 / 2 = 6 4\cdot3/2=6 4 ⋅ 3/2 = 6 であるからR 4 ′ ( σ ) = 6 − 7 = − 1 R'_4(\sigma)=6-7=-1 R 4 ′ ( σ ) = 6 − 7 = − 1 である。よって信用残高は非負であり続けず、長さ4 4 4 以上の操作列において信用残高が非負でなくなる最小のk k k は4 4 4 である。定理 2.1 により、課金額3 / 2 3/2 3/2 は償却計算量の上界ではない。
(5) を示す。操作はa p p \mathrm{app} app だけであるから、D 0 D_0 D 0 から始まる長さN N N の操作列はa p p \mathrm{app} app をN N N 回並べたものである。D k = ( n k , m k ) D_k=(n_k,m_k) D k = ( n k , m k ) と書き、Ψ k = 2 n k − m k + m 0 \Psi_k=2n_k-m_k+m_0 Ψ k = 2 n k − m k + m 0 と置く。0 ≤ k ≤ N 0\le k\le N 0 ≤ k ≤ N について、m k ≥ 1 m_k\ge1 m k ≥ 1 であることと、R k ( σ ) = Ψ k ≥ 0 R_k(\sigma)=\Psi_k\ge0 R k ( σ ) = Ψ k ≥ 0 であることをk k k についての帰納法で示す。
k = 0 k=0 k = 0 のとき、m 0 ≥ 1 m_0\ge1 m 0 ≥ 1 であり、R 0 ( σ ) = 0 R_0(\sigma)=0 R 0 ( σ ) = 0 、Ψ 0 = 0 − m 0 + m 0 = 0 \Psi_0=0-m_0+m_0=0 Ψ 0 = 0 − m 0 + m 0 = 0 である。k ≥ 1 k\ge1 k ≥ 1 とし、k − 1 k-1 k − 1 について主張が成り立つとして、D k − 1 = ( n , m ) D_{k-1}=(n,m) D k − 1 = ( n , m ) と書く。m ≥ 1 m\ge1 m ≥ 1 である。R k ( σ ) = R k − 1 ( σ ) + 3 − c k R_k(\sigma)=R_{k-1}(\sigma)+3-c_k R k ( σ ) = R k − 1 ( σ ) + 3 − c k である。n < m n<m n < m のとき、c k = 1 c_k=1 c k = 1 、D k = ( n + 1 , m ) D_k=(n+1,m) D k = ( n + 1 , m ) であるから、m k = m ≥ 1 m_k=m\ge1 m k = m ≥ 1 であり
R k ( σ ) = Ψ k − 1 + 2 = 2 ( n + 1 ) − m + m 0 = Ψ k R_k(\sigma)=\Psi_{k-1}+2=2(n+1)-m+m_0=\Psi_k R k ( σ ) = Ψ k − 1 + 2 = 2 ( n + 1 ) − m + m 0 = Ψ k である。Ψ k = Ψ k − 1 + 2 ≥ 2 \Psi_k=\Psi_{k-1}+2\ge2 Ψ k = Ψ k − 1 + 2 ≥ 2 である。n = m n=m n = m のとき、m ≥ 1 m\ge1 m ≥ 1 であるから再確保の後の状態はD k = ( m + 1 , 2 m ) D_k=(m+1,2m) D k = ( m + 1 , 2 m ) であり、c k = m + 1 c_k=m+1 c k = m + 1 である。m k = 2 m ≥ 1 m_k=2m\ge1 m k = 2 m ≥ 1 であり
R k ( σ ) = ( 2 m − m + m 0 ) + 3 − ( m + 1 ) = m 0 + 2 = 2 ( m + 1 ) − 2 m + m 0 = Ψ k R_k(\sigma)=(2m-m+m_0)+3-(m+1)=m_0+2=2(m+1)-2m+m_0=\Psi_k R k ( σ ) = ( 2 m − m + m 0 ) + 3 − ( m + 1 ) = m 0 + 2 = 2 ( m + 1 ) − 2 m + m 0 = Ψ k である。Ψ k = m 0 + 2 ≥ 0 \Psi_k=m_0+2\ge0 Ψ k = m 0 + 2 ≥ 0 である。以上で帰納法が完成する。すべてのσ \sigma σ とk k k でR k ( σ ) ≥ 0 R_k(\sigma)\ge0 R k ( σ ) ≥ 0 であるから、定理 2.1 (2) ⇒ \Rightarrow ⇒ (1) によりa ^ \hat a a ^ は償却計算量の上界である。
次に、j ≥ 0 j\ge0 j ≥ 0 についてD 2 j m 0 = ( 2 j m 0 , 2 j m 0 ) D_{2^{j}m_0}=(2^{j}m_0,2^{j}m_0) D 2 j m 0 = ( 2 j m 0 , 2 j m 0 ) であることをj j j についての帰納法で示す。各操作でn n n は1 1 1 ずつ増えるので、n k = k n_k=k n k = k である。j = 0 j=0 j = 0 のとき、D 0 = ( 0 , m 0 ) D_0=(0,m_0) D 0 = ( 0 , m 0 ) からm 0 m_0 m 0 回の操作では、操作前の要素数が容量m 0 m_0 m 0 より小さいので容量は変わらず、D m 0 = ( m 0 , m 0 ) D_{m_0}=(m_0,m_0) D m 0 = ( m 0 , m 0 ) である。M = 2 j m 0 M=2^{j}m_0 M = 2 j m 0 についてD M = ( M , M ) D_M=(M,M) D M = ( M , M ) であるとすると、第M + 1 M+1 M + 1 操作は再確保であってD M + 1 = ( M + 1 , 2 M ) D_{M+1}=(M+1,2M) D M + 1 = ( M + 1 , 2 M ) であり、続くM − 1 M-1 M − 1 回の操作では操作前の要素数が容量2 M 2M 2 M より小さいので、D 2 M = ( 2 M , 2 M ) D_{2M}=(2M,2M) D 2 M = ( 2 M , 2 M ) である。2 M = 2 j + 1 m 0 2M=2^{j+1}m_0 2 M = 2 j + 1 m 0 であるから、帰納法が完成する。
N = 2 j m 0 + 1 N=2^{j}m_0+1 N = 2 j m 0 + 1 と置くと、第N N N 操作は( 2 j m 0 , 2 j m 0 ) (2^{j}m_0,2^{j}m_0) ( 2 j m 0 , 2 j m 0 ) からの再確保であるから、D N = ( N , 2 j + 1 m 0 ) D_N=(N,2^{j+1}m_0) D N = ( N , 2 j + 1 m 0 ) である。上で示した等式によりR N ( σ ) = 2 N − 2 j + 1 m 0 + m 0 = 2 N − 2 ( N − 1 ) + m 0 = m 0 + 2 R_N(\sigma)=2N-2^{j+1}m_0+m_0=2N-2(N-1)+m_0=m_0+2 R N ( σ ) = 2 N − 2 j + 1 m 0 + m 0 = 2 N − 2 ( N − 1 ) + m 0 = m 0 + 2 であるから、この操作列の総費用は
∑ i = 1 N c i = 3 N − R N ( σ ) = 3 N − 2 − m 0 \sum_{i=1}^{N}c_i=3N-R_N(\sigma)=3N-2-m_0 i = 1 ∑ N c i = 3 N − R N ( σ ) = 3 N − 2 − m 0 である。定数T < 3 T<3 T < 3 が償却計算量の上界であると仮定すると、すべてのj ≥ 0 j\ge0 j ≥ 0 について3 N − 2 − m 0 ≤ T N 3N-2-m_0\le TN 3 N − 2 − m 0 ≤ T N 、すなわち( 3 − T ) N ≤ m 0 + 2 (3-T)N\le m_0+2 ( 3 − T ) N ≤ m 0 + 2 が成り立つ。ところが、§B1.6 定理 3.1 によりj ≥ 1 j\ge1 j ≥ 1 のとき2 j = ( 1 + 1 ) j ≥ 1 + j 2^{j}=(1+1)^{j}\ge1+j 2 j = ( 1 + 1 ) j ≥ 1 + j であり、j = 0 j=0 j = 0 のときも2 0 = 1 2^{0}=1 2 0 = 1 であるから、m 0 ≥ 1 m_0\ge1 m 0 ≥ 1 よりN = 2 j m 0 + 1 ≥ j + 1 N=2^{j}m_0+1\ge j+1 N = 2 j m 0 + 1 ≥ j + 1 である。さらに§D1.4 命題 2.1 により( 3 − T ) ( j + 1 ) > m 0 + 2 (3-T)(j+1)>m_0+2 ( 3 − T ) ( j + 1 ) > m 0 + 2 を満たすj j j が存在するので、矛盾する。ゆえにT < 3 T<3 T < 3 を満たす定数T T T は償却計算量の上界でない。
(6) では、状態集合、初期状態、操作の集合および実費用を定義 5.1 と同じにし、遷移だけを
δ ( ( n , m ) , a p p ) = { ( n + 1 , m ) ( n < m ) , ( n + 1 , max { 1 , 3 m } ) ( n = m ) \delta\bigl((n,m),\mathrm{app}\bigr)=
\begin{cases}
(n+1,\ m) & (n<m),\\
(n+1,\ \max\{1,3m\}) & (n=m)
\end{cases} δ ( ( n , m ) , app ) = { ( n + 1 , m ) ( n + 1 , max { 1 , 3 m }) ( n < m ) , ( n = m ) に替えた操作系を考える。n = m ≥ 1 n=m\ge1 n = m ≥ 1 のときはm + 1 ≤ 3 m m+1\le3m m + 1 ≤ 3 m であり、n = m = 0 n=m=0 n = m = 0 のときの値は( 1 , 1 ) (1,1) ( 1 , 1 ) であるから、δ \delta δ の値はD \mathcal D D に属する。ポテンシャル関数を
Φ ( n , m ) = 3 n − m 2 \Phi(n,m)=\frac{3n-m}{2} Φ ( n , m ) = 2 3 n − m と定める。m m m の係数1 / 2 1/2 1/2 は、再確保( m , m ) → ( m + 1 , 3 m ) (m,m)\to(m+1,3m) ( m , m ) → ( m + 1 , 3 m ) の償却費用( m + 1 ) + Φ ( m + 1 , 3 m ) − Φ ( m , m ) (m+1)+\Phi(m+1,3m)-\Phi(m,m) ( m + 1 ) + Φ ( m + 1 , 3 m ) − Φ ( m , m ) からm m m に比例する項が消えるように定めたものであり、n n n の係数3 / 2 3/2 3/2 は、再確保の直後の状態( m + 1 , 3 m ) (m+1,3m) ( m + 1 , 3 m ) でΦ \Phi Φ が非負になるように定めたものである。
定理 3.1 (2) の仮定を確かめる。Φ ( D 0 ) = Φ ( 0 , 0 ) = 0 \Phi(D_0)=\Phi(0,0)=0 Φ ( D 0 ) = Φ ( 0 , 0 ) = 0 である。操作は一種類しかないので、到達可能な状態はD 0 D_0 D 0 から始まる操作列の状態D k = ( n k , m k ) D_k=(n_k,m_k) D k = ( n k , m k ) である。Ψ k = 3 n k − m k \Psi_k=3n_k-m_k Ψ k = 3 n k − m k と置き、すべてのk k k でΨ k ≥ 0 \Psi_k\ge0 Ψ k ≥ 0 であることをk k k についての帰納法で示す。Ψ 0 = 0 \Psi_0=0 Ψ 0 = 0 である。k ≥ 1 k\ge1 k ≥ 1 とし、Ψ k − 1 ≥ 0 \Psi_{k-1}\ge0 Ψ k − 1 ≥ 0 を仮定してD k − 1 = ( n , m ) D_{k-1}=(n,m) D k − 1 = ( n , m ) と書く。n < m n<m n < m のときΨ k = 3 ( n + 1 ) − m = Ψ k − 1 + 3 ≥ 3 \Psi_k=3(n+1)-m=\Psi_{k-1}+3\ge3 Ψ k = 3 ( n + 1 ) − m = Ψ k − 1 + 3 ≥ 3 、n = m ≥ 1 n=m\ge1 n = m ≥ 1 のときΨ k = 3 ( m + 1 ) − 3 m = 3 \Psi_k=3(m+1)-3m=3 Ψ k = 3 ( m + 1 ) − 3 m = 3 、n = m = 0 n=m=0 n = m = 0 のときΨ k = 3 − 1 = 2 \Psi_k=3-1=2 Ψ k = 3 − 1 = 2 である。よって到達可能な状態でΦ ≥ 0 \Phi\ge0 Φ ≥ 0 である。償却費用を三つの場合に分けて計算する。n < m n<m n < m のとき
c ^ = 1 + 3 ( n + 1 ) − m 2 − 3 n − m 2 = 1 + 3 2 = 5 2 \hat c=1+\frac{3(n+1)-m}{2}-\frac{3n-m}{2}=1+\frac32=\frac52 c ^ = 1 + 2 3 ( n + 1 ) − m − 2 3 n − m = 1 + 2 3 = 2 5 である。n = m ≥ 1 n=m\ge1 n = m ≥ 1 のとき、実費用はm + 1 m+1 m + 1 であるから
c ^ = ( m + 1 ) + 3 ( m + 1 ) − 3 m 2 − 3 m − m 2 = ( m + 1 ) + 3 2 − m = 5 2 \hat c=(m+1)+\frac{3(m+1)-3m}{2}-\frac{3m-m}{2}=(m+1)+\frac32-m=\frac52 c ^ = ( m + 1 ) + 2 3 ( m + 1 ) − 3 m − 2 3 m − m = ( m + 1 ) + 2 3 − m = 2 5 である。n = m = 0 n=m=0 n = m = 0 のとき、実費用は1 1 1 であるからc ^ = 1 + Φ ( 1 , 1 ) − Φ ( 0 , 0 ) = 1 + 1 − 0 = 2 \hat c=1+\Phi(1,1)-\Phi(0,0)=1+1-0=2 c ^ = 1 + Φ ( 1 , 1 ) − Φ ( 0 , 0 ) = 1 + 1 − 0 = 2 である。いずれの場合もc ^ ≤ 5 / 2 \hat c\le5/2 c ^ ≤ 5/2 である。よって定理 3.1 (2) によりT ^ ( a p p ) = 5 / 2 \hat T(\mathrm{app})=5/2 T ^ ( app ) = 5/2 は償却計算量の上界であり、長さN N N の操作列の総費用は5 N / 2 5N/2 5 N /2 以下である。
容量を2 2 2 倍にする場合の上界は、命題 5.5 により3 3 3 であり、3 3 3 倍にすると上界は1 / 2 1/2 1/2 だけ小さい5 / 2 5/2 5/2 になる。どちらの定数もそれより小さくすることはできない。2 2 2 倍の場合、J ≥ 0 J\ge0 J ≥ 0 に対してN = 2 J + 1 N=2^{J}+1 N = 2 J + 1 と置くと2 J ≤ N − 1 < 2 J + 1 2^{J}\le N-1<2^{J+1} 2 J ≤ N − 1 < 2 J + 1 であるから、命題 5.3 により総費用はN + 2 J + 1 − 1 = 3 N − 3 N+2^{J+1}-1=3N-3 N + 2 J + 1 − 1 = 3 N − 3 である。定数T T T が償却計算量の上界ならば3 N − 3 ≤ T N 3N-3\le TN 3 N − 3 ≤ T N 、すなわちT ≥ 3 − 3 / N T\ge3-3/N T ≥ 3 − 3/ N がいくらでも大きいN N N について成り立つので、T ≥ 3 T\ge3 T ≥ 3 である。3 3 3 倍の場合、j ≥ 0 j\ge0 j ≥ 0 についてD 3 j = ( 3 j , 3 j ) D_{3^{j}}=(3^{j},3^{j}) D 3 j = ( 3 j , 3 j ) であり、最初の3 j 3^{j} 3 j 回の操作の総費用が( 3 j + 1 − 1 ) / 2 (3^{j+1}-1)/2 ( 3 j + 1 − 1 ) /2 であることをj j j についての帰納法で示す。j = 0 j=0 j = 0 のとき、D 1 = ( 1 , 1 ) D_1=(1,1) D 1 = ( 1 , 1 ) であり、総費用はc 1 = 1 = ( 3 − 1 ) / 2 c_1=1=(3-1)/2 c 1 = 1 = ( 3 − 1 ) /2 である。j j j で成り立つとすると、第3 j + 1 3^{j}+1 3 j + 1 操作は( 3 j , 3 j ) (3^{j},3^{j}) ( 3 j , 3 j ) からの再確保であり、実費用は3 j + 1 3^{j}+1 3 j + 1 、操作後の状態は( 3 j + 1 , 3 j + 1 ) (3^{j}+1,3^{j+1}) ( 3 j + 1 , 3 j + 1 ) である。続く3 j + 1 − 3 j − 1 3^{j+1}-3^{j}-1 3 j + 1 − 3 j − 1 回の操作では、操作前の要素数が容量3 j + 1 3^{j+1} 3 j + 1 より小さいので実費用はいずれも1 1 1 であり、その後の状態は( 3 j + 1 , 3 j + 1 ) (3^{j+1},3^{j+1}) ( 3 j + 1 , 3 j + 1 ) である。よって最初の3 j + 1 3^{j+1} 3 j + 1 回の総費用は( 3 j + 1 − 1 ) / 2 + ( 3 j + 1 ) + ( 3 j + 1 − 3 j − 1 ) = ( 3 j + 2 − 1 ) / 2 (3^{j+1}-1)/2+(3^{j}+1)+(3^{j+1}-3^{j}-1)=(3^{j+2}-1)/2 ( 3 j + 1 − 1 ) /2 + ( 3 j + 1 ) + ( 3 j + 1 − 3 j − 1 ) = ( 3 j + 2 − 1 ) /2 である。この帰納法の途中で得たとおり、N = 3 j + 1 N=3^{j}+1 N = 3 j + 1 回の操作の総費用は
3 j + 1 − 1 2 + 3 j + 1 = 5 ⋅ 3 j + 1 2 = 5 N − 4 2 \frac{3^{j+1}-1}{2}+3^{j}+1=\frac{5\cdot3^{j}+1}{2}=\frac{5N-4}{2} 2 3 j + 1 − 1 + 3 j + 1 = 2 5 ⋅ 3 j + 1 = 2 5 N − 4 である。定数T T T が償却計算量の上界ならば( 5 N − 4 ) / 2 ≤ T N (5N-4)/2\le TN ( 5 N − 4 ) /2 ≤ T N 、すなわちT ≥ 5 / 2 − 2 / N T\ge5/2-2/N T ≥ 5/2 − 2/ N がいくらでも大きいN N N について成り立つので、T ≥ 5 / 2 T\ge5/2 T ≥ 5/2 である。したがって、定数の償却計算量の上界として得られる最小の値は、2 2 2 倍の規則では3 3 3 、3 3 3 倍の規則では5 / 2 5/2 5/2 である。
(7) では、状態集合と初期状態を定義 5.1 と同じにし、操作の集合をO = { a p p , d e l } \mathcal O=\{\mathrm{app},\mathrm{del}\} O = { app , del } とする。a p p \mathrm{app} app の遷移と実費用は定義 5.1 のとおりとし、d e l \mathrm{del} del の遷移を
δ ( ( n , m ) , d e l ) = { ( n − 1 , m / 2 ) ( n ≥ 1 かつ 2 ( n − 1 ) = m ) , ( n − 1 , m ) ( n ≥ 1 かつ 2 ( n − 1 ) ≠ m ) , ( 0 , m ) ( n = 0 ) \delta\bigl((n,m),\mathrm{del}\bigr)=
\begin{cases}
(n-1,\ m/2) & (n\ge1\ \text{かつ}\ 2(n-1)=m),\\
(n-1,\ m) & (n\ge1\ \text{かつ}\ 2(n-1)\ne m),\\
(0,\ m) & (n=0)
\end{cases} δ ( ( n , m ) , del ) = ⎩ ⎨ ⎧ ( n − 1 , m /2 ) ( n − 1 , m ) ( 0 , m ) ( n ≥ 1 かつ 2 ( n − 1 ) = m ) , ( n ≥ 1 かつ 2 ( n − 1 ) = m ) , ( n = 0 ) とし、その実費用をc ( ( n , m ) , d e l ) = 1 c\bigl((n,m),\mathrm{del}\bigr)=1 c ( ( n , m ) , del ) = 1 とする。第一の場合が、削除によって要素数が容量の半分になったときに容量を半分にする規則である。要素の無い状態からの削除は問題文で定められていないので、状態を変えない操作と定める。以下の議論はこの場合を用いない。第一の場合にはn − 1 = m / 2 n-1=m/2 n − 1 = m /2 であり、第二の場合にはn − 1 < n ≤ m n-1<n\le m n − 1 < n ≤ m であるから、δ \delta δ の値はD \mathcal D D に属する。
Φ ( n , m ) = ∣ 2 n − m ∣ \Phi(n,m)=\lvert2n-m\rvert Φ ( n , m ) = ∣ 2 n − m ∣ はΦ ( D 0 ) = 0 \Phi(D_0)=0 Φ ( D 0 ) = 0 を満たし、すべての状態で非負である。したがって問題は、D 0 D_0 D 0 から始まる任意の操作列の任意の添字でc ^ i ≤ T ^ ( o i ) \hat c_i\le\hat T(o_i) c ^ i ≤ T ^ ( o i ) を満たすT ^ \hat T T ^ が存在するかどうかである。そのようなT ^ \hat T T ^ は存在しない。非負整数j j j をとり、2 j 2^{j} 2 j 回のa p p \mathrm{app} app の後にa p p \mathrm{app} app とd e l \mathrm{del} del を交互に続ける操作列を考える。最初の2 j 2^{j} 2 j 回の操作は定義 5.1 の操作系の操作列と同じ遷移をたどるので、補題 5.2 (1) と補題 5.2 (2) により、その後の状態は( 2 j , 2 j ) (2^{j},2^{j}) ( 2 j , 2 j ) である。状態( 2 j , 2 j ) (2^{j},2^{j}) ( 2 j , 2 j ) からのa p p \mathrm{app} app は再確保であり、実費用は2 j + 1 2^{j}+1 2 j + 1 、操作後の状態は( 2 j + 1 , 2 j + 1 ) (2^{j}+1,2^{j+1}) ( 2 j + 1 , 2 j + 1 ) である。状態( 2 j + 1 , 2 j + 1 ) (2^{j}+1,2^{j+1}) ( 2 j + 1 , 2 j + 1 ) からのd e l \mathrm{del} del は、2 ( ( 2 j + 1 ) − 1 ) = 2 j + 1 2\bigl((2^{j}+1)-1\bigr)=2^{j+1} 2 ( ( 2 j + 1 ) − 1 ) = 2 j + 1 であるから第一の場合であり、実費用は1 1 1 、操作後の状態は( 2 j , 2 j ) (2^{j},2^{j}) ( 2 j , 2 j ) である。よって交互の部分では二つの状態( 2 j , 2 j ) (2^{j},2^{j}) ( 2 j , 2 j ) と( 2 j + 1 , 2 j + 1 ) (2^{j}+1,2^{j+1}) ( 2 j + 1 , 2 j + 1 ) を往復する。Φ ( 2 j , 2 j ) = 2 j \Phi(2^{j},2^{j})=2^{j} Φ ( 2 j , 2 j ) = 2 j 、Φ ( 2 j + 1 , 2 j + 1 ) = 2 \Phi(2^{j}+1,2^{j+1})=2 Φ ( 2 j + 1 , 2 j + 1 ) = 2 であるから、償却費用は
c ^ ( a p p ) = ( 2 j + 1 ) + 2 − 2 j = 3 , c ^ ( d e l ) = 1 + 2 j − 2 = 2 j − 1 \hat c(\mathrm{app})=(2^{j}+1)+2-2^{j}=3,\qquad
\hat c(\mathrm{del})=1+2^{j}-2=2^{j}-1 c ^ ( app ) = ( 2 j + 1 ) + 2 − 2 j = 3 , c ^ ( del ) = 1 + 2 j − 2 = 2 j − 1 である。仮定を満たすT ^ \hat T T ^ が存在すれば、すべてのj ≥ 0 j\ge0 j ≥ 0 について2 j − 1 ≤ T ^ ( d e l ) 2^{j}-1\le\hat T(\mathrm{del}) 2 j − 1 ≤ T ^ ( del ) となるが、2 j − 1 2^{j}-1 2 j − 1 はj j j とともにいくらでも大きくなるので、このような実数T ^ ( d e l ) \hat T(\mathrm{del}) T ^ ( del ) は存在しない。よって、この操作列の族に沿って削除の償却費用は上に有界でない。
この操作系には、Φ \Phi Φ の選び方によらず、償却計算量の上界となる写像T ^ : O → [ 0 , ∞ ) \hat T:\mathcal O\to[0,\infty) T ^ : O → [ 0 , ∞ ) が存在しない。上の操作列で交互の部分のa p p \mathrm{app} app とd e l \mathrm{del} del の組を2 j 2^{j} 2 j 回繰り返したものの長さは3 ⋅ 2 j 3\cdot2^{j} 3 ⋅ 2 j であり、その総費用は、最初の2 j 2^{j} 2 j 回の総費用2 j + 1 − 1 2^{j+1}-1 2 j + 1 − 1 (命題 5.3 )と各組の費用2 j + 2 2^{j}+2 2 j + 2 の2 j 2^{j} 2 j 倍の和であるから4 j 4^{j} 4 j 以上である。T ^ \hat T T ^ が償却計算量の上界であれば、M = max { T ^ ( a p p ) , T ^ ( d e l ) } M=\max\{\hat T(\mathrm{app}),\hat T(\mathrm{del})\} M = max { T ^ ( app ) , T ^ ( del )} について4 j ≤ 3 M ⋅ 2 j 4^{j}\le3M\cdot2^{j} 4 j ≤ 3 M ⋅ 2 j 、すなわち2 j ≤ 3 M 2^{j}\le3M 2 j ≤ 3 M がすべてのj j j で成り立たなければならないが、j j j を大きくとるとこの不等式は成り立たない。▨