数列の再帰関係の解決または近似


89

コンピューターサイエンスでは、再帰関係を解決する必要があります。これは、再帰的に定義された一連の数値の閉じた形式を見つけることです。ランタイムを検討する際、主にシーケンスの漸近的成長に主に興味があります。

例は

  1. 本体が時間f n )を要するnから0まで下にステップする末尾再帰関数のランタイム:nf(n)

    T(0)=0T(n+1)=T(n)+f(n)

  2. フィボナッチ数列

    F0=0F1=1Fn+2=Fn+Fn+1

  3. n個の括弧ペアを持つDyckワードの数:n

    C0=1Cn+1=i=0nCiCni

  4. 長さリストに対するmergesortランタイムの繰り返しn

    T(1)=T(0)=0T(n)=T(n/2)+T(n/2)+n1

再発関係を解決する方法は何ですか?私たちは〜を探しています

  • 一般的な方法と
  • 重要なサブクラスのメソッド

と同様

  • 正確なソリューションを生み出す方法と
  • 漸近的成長を提供する(境界を定める)メソッド。

これは参考質問になるはずです。メソッドごとに1つの回答を投稿し、一般的な説明と説明的な例を提供してください。


9
これらのメモは役に立つかもしれません。(いいえ、私はそれらを答えに書き写しません。)
JeffE

回答:


35

全履歴を限定履歴に変換する

これは、任意の整数の値がすべての小さい整数の値に依存する再発を解決する最初のステップです。たとえば、繰り返しT n = n + 1を考えます これは、ランダム化クイックソートの分析で発生します。(ここで、kはランダムに選択されたピボットのランクです。)整数nの場合、Tn)の値はすべてのTk)に依存し、k<nです。この形式の繰り返しは、完全な履歴繰り返しと呼ばれます。

T(n)=n+1nk=1n(T(k1)+T(nk))
knT(n)T(k)k<n

この繰り返しを解決するために、T n が一定の数の以前の値のみに依存する、限られた履歴の繰り返しに変換できます。しかし、最初に、それは再発を少し単純化し、共通の用語を収集し、厄介な部分を排除するのに役立ちます。 n T n T(n) ここで、限られた履歴の繰り返しに変換するために、Tn1)の繰り返しを書き留め、項を減算し、再収集します: n 1 T n 1

nT(n)=n2+2k=1n1T(k)
T(n1)
(n1)T(n1)=(n1)2+2k=1n2T(k)nT(n)(n1)T(n1)=(2n1)+2T(n1)nT(n)=(2n1)+(n+1)T(n1)T(n)n+1=2n1n(n+1)+T(n1)n

ここでを定義し、小数2 n 1を置き換えるとt(n)=T(n)/(n+1)でより単純な漸近形式Θ1/nを使用すると、より単純な再帰 tn=Θ1/n+tn1)が得られます。 この繰り返しを合計に展開すると、すぐにtn=ΘHn=Θlogn)が得られます2n1n(n+1)Θ(1/n)

t(n)=Θ(1/n)+t(n1).
t(n)=Θ(Hn)=Θ(logn) n番目の調和数です。と結論付け。HnnT(n)=Θ(nlogn)

1
の正確なソリューションが必要な場合は、少し面倒な場合でも難しいことではありません(ここ)。を取得します。実際、は私を混乱させるので、正確なバリアントを好みます。ランダウ項の厄介なT N = 2 N + 1 Hのn個 + T 0 - 3 N + T 0 Σ N I = 1 Θ 1 / I = Θ HのNTT(n)=2(n+1)Hn+(T(0)3)n+T(0)i=1nΘ(1/i)=Θ(Hn)
ラファエル

実際、(誘導的に)観察すれば十分です。ここで、。実際、時間を置き換えて配列をより単純なに分割したとき、私は最初からそのトリックを使用していました。これは、表記法のまったく標準的な乱用です。t n = 1 / n + t n 1 Θ n nT(n)/(n+1)=Θ(t(n))t(n)=1/n+t(n1)Θ(n)n
-JeffE

28

関数の生成

一連の数字はすべて、生成関数に対応しています。多くの場合、回帰から楽に取得でき、その係数(系列の要素)を摘み取ることができます。

この回答には、完全な例、特別な場合のショートカット、およびこの方法を使用して漸近性を取得する場合の注意事項(正確な結果が取得できない場合でも)を含む一般的な仮説が含まれます。

方法

ましょう一連の数字。次に、正式なべき級数(an)nN

A(z)=n=0anzn

は、の通常の生成関数 ¹です 。の級数展開の係数は、シーケンスに等しい、つまりです。たとえば、有名なカタロニア語番号の通常の生成関数は A Z [ Z N ] A Z = N個のC 、Nを(an)nNA(z)[zn]A(z)=an Cn

C(z)=114z2z

の定義は、再発を解決するための我々の仮説でもあります。これは線形の繰り返しに最適です。そのため、簡単にするためにフォームの繰り返しを想定してください。A

a0=c0ak1=ck1an=f(n)+i=1kbiani,nk

固定およびすべての依存しない関数。ここで、アンカーと再帰部分の両方を仮説に挿入するだけです。 F N NN Ib1,,bkRf(n):NNai

A(z)=n=0anzn=c0z0+c1z1++ck1zk1+n=k[f(n)+(i=1kbiani)]zn

和の操作のメカニズム、正式なべき級数のプロパティ、および既知の恒等式 ²を使用して、通常はに関して、最後の右辺を閉じた形式にする必要があります。結果の方程式は、(しばしば)について解くことができます。結果の級数展開(簡単に取得、既知、またはその他の方法で取得可能)は、本質的に解決策です。A z A(z)A(z)

良い紹介はWilfの本[3]とGKP [4]にあります。高度な資料は、FlajoletとSedgewickによって収集されました[5]。

検討する

a0=1a1=2an=5n+3an12an2,n>1

計算します:

A(z)=n=0anzn=1+2z+n=2[3an12an2+5n]zn=1+2z+3n=2an1zn2n=2an2zn+5n=2nzn=1+2z+3zn=1anzn2z2n=0anzn+5n=2nzn=1+2z+3z(A(z)a0)2z2A(z)+5(z(1z)2z)=16z+(3z2z2)A(z)+5z(1z)2

これは

A(z)=13z+13z26z3(12z)(1z)3=1612z51z5(1z)25(1z)3=16n=02nzn5n=0zn5n=0(n+1)zn5n=0(n+1)(n+2)2zn

これでようやく読み上げることができます

an=162n55(n+1)52(n+1)(n+2)=2n+452n2252n15

それに慣れると、これはすべて非常にメカニックであることがわかります。実際、コンピューター代数は多くの場合、これらすべてをあなたのために行うことができます。良い点は、繰り返しがより複雑な場合でも、そのメカニズムが(多かれ少なかれ)残ることです。より複雑で、メカニックの少ない例については、こちらをご覧ください。

また、求められているオブジェクトが複素数または多項式であっても、一般的な手法が機能することに注意してください。

ショートカット

線形および同種の繰り返し、すなわち次の形式の場合

a0=c0ak1=ck1an=i=1kbiani,nk

上記は、毎回まったく同じ方法で実行されます。上記の計算を記号的に実行すると、次の補題が見つかります。させて

zkb1zk1b2zk2bk

こと特性polynomal(再発)。さらに、それぞれ、多重度多項式の(ペアワイズ個別)ゼロを設定します。次に、所望の係数はRのIλ1,,λlri

an=i=1lj=1ribi,jnj1λin

不明な持ちます。特性多項式の次数はであるため、正確に(複素)個のゼロ、つまりに対する合計があります。したがって、上記の式を任意のの(アンカーなど)と同等にすることで得られた方程式で線形方程式システムを解くことにより、欠損係数を決定できます。 k k r i k k k a nbi,jkkrikkkan

漸近

通常、閉じたフォームに到達するのは簡単です。ただし、関数の生成でそれを表現すると、(例で行ったように)の係数がすぐに難しくなります。例は、上記のと、質問で言及されたDyck単語の数です。C z A(z)C(z)

係数の漸近性を取得するために、複雑な分析機構、特に特異点分析を使用できます。流行語には、ダルブー法とmethod点法が含まれます。これらは、剰余定理コーシーの積分公式に基づいています。詳細については、[6]を参照してください。


  1. exponentialDirichletおよびその他の生成関数を使用して同様のことを行うことができます。どちらが最適に機能するかは、手元のシーケンス、特に必要な閉じたフォームを見つけるかどうかによって異なります。
  2. たとえば、TCSチートシートまたは[3]から。
  3. H. Wilfによる生成機能(1994年、第2版)-無料でダウンロードできます
  4. RL Graham、DE Knuth、O。Patashnikによるコンクリート数学(1994年、第2版)
  5. R. SedgewickおよびP. Flajoletによるアルゴリズム分析の概要(2013年第2版)-無料でダウンロードできます
  6. P. FlajoletおよびR. SedgewickによるAnalytic Combinatorics(2009)-無料ダウンロード可能

21

マスター定理

マスター定理は、いわゆるのソリューションのための漸近を与える分割&征服再発、それは(代わりに定数を切除する)比例チャンクにそれらのパラメータを分割するようなものです。それらは通常、アルゴリズムを分析(再帰的)分割および征服するときに発生するため、そのためです。定理は、非常に簡単に適用できることが多いため人気があります。一方、次の形式の繰り返しにのみ適用できます。

T(n)=aT(nb)+f(n)

。3つのケースがありますa1,b>1

  1. fO(nlogb(a)ε)

    一部の ;ε>0

  2. fΘ(nlogbalogkn)

    いくつかの ;k0

  3. fΩ(nlogb(a)+ε)

    一部のおよびε>0

    af(nb)cf(n)

    一部のおよび。n c<1n

漸近性を暗示する

  1. TΘ(nlogba)
  2. TΘ(nlogbalogk+1n)および
  3. TΘ(f)

それぞれ。ここでは、ベースケースが記載または使用されていないことに注意してください。これは、漸近的な挙動のみを調査していることを考えると理にかなっています。私たちは黙って(他に何、彼らがすることができます。彼らはいくつかの定数であると仮定し、それらはすべてに消え、私たちは見ていない定数は無関係です。Θ

  1. 再発を考慮する

    T(n)=4T(n3)+n

    および -注意していること我々はそのような場合1を参照してくださいはして適用される。したがって、。、B = 3 ログB1.26 ε = 0.25 T Θ nはログ3 4= Θ nは1.261 ...f(n)=n,a=4b=3logba1.26ε=0.25TΘ(nlog34)=Θ(n1.261)

  2. 再発を考慮する

    T(n)=2T(n/2)+n

    及び -そのノート我々が2で適用される場合を参照。したがって、。、B = 2 ログB A = 1 、K = 0 T Θ N ログN f(n)=n,a=2b=2logba=1k=0TΘ(nlogn)

  3. 再発を考慮する

    T(n)=3T(n4)+n

    及び -注意こと我々はそのケース3を参照にして適用されるおよび。したがって、。、B = 4 ログB0.79 ε = 0.2 、C = 1 T Θ N f(n)=n,a=3b=4logba0.79ε=0.2c=1TΘ(n)

  4. 再発を考慮する

    T(n)=16T(n4)+n!

    ここに、、-多くの標準的な例には多項式がありますが、これはルールではありません。我々は持っている、およびケース3は再び適用されます。ただし、この例では、とをとして選択できますすべての。したがって、。b = 4 f n = n F ログbの = 2 、ε C > 0 のn Ω N 、K、K T Θ N a=16b=4f(n)=n!flogba=2εc>0n!Ω(nk)kTΘ(n!)

参考文献

  • マスター定理のいずれのケースも当てはまらない可能性があります。たとえば、サブ問題のサイズが同じでなかったり、より複雑な形式になったりする場合があります。マスター定理には、Akra - Bazzi [1]やRoura [2]など、いくつかの拡張があります。離散的な繰り返し(つまり、再帰パラメーターで床と天井が使用される)に対応し、よりシャープな結果提供するバージョンもあります[3]。

  • 通常、マスター定理を適用する前に、実際の再帰関係を整形して、形にする必要があります。漸近性を保持する一般的な変換には、床と天井の落下、および仮定が含まれます。ここで物を壊さないように注意してください。[4]セクション4.6と詳細についてはこの質問を参照してください。n=bk


  1. M. AkraとL. Bazziによる線形回帰方程式の解について(1998)
  2. 分割統治再発のための改良されたマスター定理 S. Roura(1997)は、
    他の改善されたマスター定理を参照します。
  3. M. DrmotaおよびW. Szpankowski(2011)による離散的分割と再発の克服のためのマスター定理
  4. Cormenらによるアルゴリズムの紹介。(2009年、第3版)

これはばかげた質問かもしれませんが、aがbに等しくない場合、メンタルモデルを保持できないことがよくあります。理由はわかりませんが、直観的には、両方が常に同じである必要があると常に感じています。 2つの等しい(ほぼ)半分で、それぞれn / 2インスタンスを持ちます。さらに、アルゴリズムを3つの等しい部分に分割する場合、入力も3つの等しい部分に分割する必要があります。これにより、aとbが再び等しくなります。この間違った直感を破るにはどうすればよいですか?
CodeYogi

17

推測して証明

または、「テクニック」と呼んでいます。あらゆる種類のIDに適用できます。アイデアは簡単です。

ソリューションを推測し、その正当性を証明します。

これは人気のある方法です。おそらく、通常は創造性や経験を必要とする(誇張するのに適しています)が、メカニズムはほとんどありません(エレガントに見える)。ここでの技術は、教育に基づいた適切な推測を行うことです。証明は(この場合)通常、多かれ少なかれ単純な帰納法です。

再発に適用される場合、「推測」は通常、

  • 再発を数回拡大し、
  • アンカーを把握し、
  • 中間体のパターン()を推測します

簡単な例

s0=s1=s2=1sn=5sn3+6n2

の定義を数回拡張してみましょう。sn

sn=5sn3+6=5(5sn6+6)+6=5(5(5sn9+6)+6)+6 =5(5(5(51n÷3 times+6)+6)+6)+6n÷3 times

ここでは、パターンを簡単に見つけることができ、それが主張につながります。

sn=5n3+6i=0n315i=525n364

今、私たちは帰納法によって身元を証明します。ため、我々は、それぞれの値に差し込むことによって正しさを確立することができます。アイデンティティが全て成立すると仮定すると、任意であるが、固定用、我々は計算します、N 'N 、N 3n{0,1,2}nnn3

sn+3=5sn+6=5(525n364)+6=525n3+164=525n+3364

これは、誘導の力によってアイデンティティを証明します。

より複雑な繰り返しでこれを使用しようとすると、この方法の主な欠点にすぐに遭遇します。パターンをにくくしたり、素敵な閉じた形に凝縮したりすることができます。

漸近

この方法を漸近的に使用することもできます。ただし、すべてのの境界確立する定数が1つ必要であるため、Landauシンボルの定数を推測する必要あることに注意してください。つまり、定数因子は誘導中に変更できません。 n

たとえば、 k¹の場合に簡略化されたMergesortランタイムの繰り返しを考えてみましょう。n=2k

T(1)=T(0)=0T(n)=2T(n/2)+n1n1

定数、つまりと推測し。これを上の帰納法で証明します。誘導ステップは次のようになります。C = 1 T N N ログN KT(n)O(nlogn)c=1T(n)nlognk

T(n)=2T(n/2)+n12n2logn2+n1=nlognnlog2+n1<nlogn


  1. 自然の非減少シーケンスの場合、すべての無限サブシーケンスは元のシーケンスと同じ漸近成長を持ちます。

15

アクラ・バッツィ法

Akra-Bazzi方法は、フォームの再発のための漸近を与える: これは、通常の分割統治の繰り返しをカバーしますが、分割が等しくない場合もカバーします。「ファッジ用語」は、たとえば、正確に出てこない部門に対応できます。適用の条件は次のとおりです。時間IX

T(x)=1ikaiT(bix+hi(x))+g(x)for xx0
hi(x)
  • 再発を開始するのに十分な基本ケースがあります
  • し、すべて定数でありますb iaibi
  • すべてのについて、a i > 0iai>0
  • すべてのについて、0 < b i < 1i0<bi<1
  • c x |g(x)|=O(xc)定数をとしてcx
  • すべてのについて、| h ix | = O x /log x 2i|hi(x)|=O(x/(logx)2)
  • x0は定数です

、およびノコギリ関数は常に0と1の間にあることに注意してください(または )は条件を満たします。{ U } = U - U B iは、 xはB iは、 xは時間Iをbix=bix{bix}{u}=uubixbixhi

検索:その結果 続いの漸近挙動としてで与えられる: と "十分に大きい"、すなわち、ありますように のすべてのため。Σ 1 iはkは IのBのPをI = 1 T X X T X = Θ XがP 1 + X 、X 1 gでU p

1ikaibip=1
T(x)x
T(x)=Θ(xp(1+x1xg(u)up+1du))
x1k1>0
(2)g(x/2)k1g(x)
x>x1

例A

例として、再帰を考えます。ここで、: 条件が満たされ、が必要です: 運がよければ。したがって、次のようになります n5T(0)=T(1)=T(2)=T(3)=T(4)=17

T(n)=9T(n/5)+T(4n/5)+3nlogn
p
9(15)p+(45)p=1
p=2
T(n)=Θ(n2(1+3n3uloguu3du))=Θ(n2)

有するので我々は満たす全てに対して。下限としてなどの他の定数を使用しても積分は収束するため、これらの定数も使用できることに注意してください。差は消えます。k112(1log2log3)(2)x31Θ

例B

別の例は、については、以下で: 我々は、確認してください。単一の、あり、チェックアウトします。が実際におよび/またはであると仮定すると、暗黙のもチェックアウトします。だから我々は、必要があります: したがって、および: n2

T(n)=4T(n/2)+n2/lgn
g(n)=n2/lnn=O(n2)a1=4b1=1/2n/2n/2n/2hi(n)
a1b1p=4(1/2)p=1
p=2
T(n)=Θ(n2(1+2nu2duu3lnu))=Θ(n2(1+2nduulnu))=Θ(n2lnlnn)
上記と同様のトリックを適用します積分の下限を使用するのは、積分がに対して収束しないためです。21

(代数での最大値の助けはありがたいことに認められています)


1
元の用紙を確認しました。積分の下限には技術的な制限があります。お使いのバージョン(Mehlhornによる調査を引用していますか?)では、積分が収束することを明示的に要求しています。元の状態を確認する方が簡単だと思うので、それに応じてステートメントと例を変更しました。確認してください。
ラファエル

1
さらに、元の論文では含むバージョンは提供されていません。これはレイトンの原稿から取られたものですか?そのための査読済みのリファレンスはありますか?1998年のAkra&Bazziの論文に記載されているバージョンに移行する必要がありますか?hi
ラファエル

1
私は定理の矛盾と思われるものに出くわしました。たぶん、あなたは答えを知っていますか?
ラファエル

11

総計

多くの場合、という形式の再発が発生し ます。 ここで、は単調です。この場合、 を推定するために 開始値与えることができます合計を推定する必要があります。

T(n)=T(n1)+f(n),
f(n)
T(n)=T(c)+m=c+1nf(m),
T(c)T(n)f(c+1)++f(m)

減少しないf(n)

場合単調非減少、我々は明らか境界有する これらの限界は、それらがいくつかの機能のために締められているという意味で最高可能である:定数関数の上限、およびステップ関数(の下限のための及び以下のための)。ただし、多くの場合、これらの推定値はあまり役に立ちません。たとえば、場合、下限はで、上限はであるため、これらはかなり離れています。f(n)

f(n)m=c+1nf(m)(nc)f(n).
f(m)=1mnf(m)=0m<nf(m)=mn(nc)n

統合

統合により、より適切な推定値が得られます。 以下のために、これは次項を低下させる和までの正しい値を与える: 場合には私たちは、明示的に合計を計算することができますが、多くの場合、明示的な計算は難しいです。たとえば、の場合、の逆微分係数はであるため、

cnf(x)dxm=c+1nf(m)c+1n+1f(x)dx.
f(m)=m
12n212c2m=c+1nm12(n+1)212(c+1)2.
f(m)=mf(m)=mlogmf(1/2)x2logx(1/4)x2
m=c+1nmlogm=12n2logn±Θ(n2).

オイラーの和公式では、より良い推定値を提供します。この式は、たとえば、合計推定することにより、スターリングの式の強力な形式を証明するために使用できます。logn!=m=1nlogm

増加しないf(n)

場合によっては、は単調な非増加です。自明な推定値は なり、積分推定値は 例として、場合、を使用して、を取得し f(n)

f(1)m=c+1nf(m)(nc)f(1),
c+1n+1f(x)dxm=c+1nf(m)cnf(x)dx.
f(m)=1/mf(m)=logm
m=c+1n1m=logn±Θ(1).

この答えは、再発の解決ではなく、合計の推定(むしろ再発の解決に役立つかもしれません)を扱っています。テクニックはリーマン和の双対です。また、定数などの他の形式でも動作するはずです。T(nd)d
ラファエル

右、もこの方法で解くことができます。T(n)=cT(nd)+f(n)
ユヴァルフィルマス14

9

SedgewickとFlajoletは、解析的組み合わせ論で広範な研究を行っており、生成関数と複雑な分析の組み合わせを使用して漸近的に再帰を解くことができます。彼らの研究により、多くの再発が自動的に解決され、一部のコンピューター代数システムに実装されています。

主題に関するこの教科書は、 FlajoletとSedgewickによって書かれており、優れた参考資料です。SedgewickとFlajoletによるこのテキストは、アルゴリズム分析への応用に向けられたやや単純な説明です。

お役に立てれば!


4
これは素晴らしいリファレンスですが、アクセス可能な方法でメソッドを収集したいと思います。特定の方法を詳細に説明できますか?
ラファエル

9

次のような奇妙な再発に遭遇することがあります: あなたが私のような人なら、マスター定理を使用できないことに気付くでしょう。うーん...多分、再帰ツリー分析が機能するかもしれません。」その後、ツリーが非常に高速になり始めることに気付くでしょう。インターネットで検索すると、Akra-Bazziメソッドが機能することがわかります。それから実際にそれを調べ始め、あなたが本当にすべての計算をしたくないことを悟ります。この時点まであなたが私のようであったなら、もっと簡単な方法があることを知って興奮するでしょう。

T(n)={cn<72T(n5)+4T(n7)+cnn7


不均等な分割定理パート1

ましょうと正の定数であること。ck

次に、をような正の定数とします。{a1,a2,,ak}1kai<1

(上記の例のように)フォームの繰り返しも必要です。

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

請求

それから、を要求します。ここで、は定数(たとえば、漸近線形)で、T(n)bnb

b=c1(1kai)

帰納法による証明

基礎n<max{a11,a21,,ak1}T(n)c<b<bn

帰納法: trueと仮定すると、n<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+ba1n+ba2n++bakncn+ba1n+ba2n++bakn=cn+bn1kai=cncn1kai1(1kai)+cn1kai1(1kai)=cn1(1kai)=bn

その後、我々は持っている。T(n)bnT(n)=O(n)

T(n)={cn<72T(n5)+4T(n7)+cnn7
最初に、再帰呼び出し内の係数の合計が1未満になることを検証し。
1>1kai=15+15+17+17+17+17=25+47=3435

次に、ベースケースが係数の逆数の最大値より小さいことを確認し:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7}=7

これらの条件が満たされると、がわかります。ここで、は次の定数です: したがって、 T(n)bnb

b=c1(1kai)=c13435=35c
T(n)35cnT(n)cnT(n)=Θ(n)


不均等な分割定理パート2

同様に、場合の限界を証明できます。証明はほとんど同じ形式に従います。1k=1

ましょうと、その結果、正定数で。ckk>1

次に、をような正の定数とします。{a1,a2,,ak}1kai=1

(上記の例のように)フォームの繰り返しも必要です。

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

請求

私は請求(我々が選択ベースため、再帰ツリーの分岐係数になる)及び定数である(例えば、漸近linearithmic ) そのような:T(n)αnlogkn+βnlogkkαβ

β=c
および
α=c1kailogkai1

帰納法による証明

基礎n<max{a11,a21,,ak1}T(n)c=β<αnlogkn+βn

帰納法: trueと仮定すると、n<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+1k(αainlogkain+βain)=cn+αn1k(ailogkain)+βn1kai=cn+αn1k(ailogknai1)+βn=cn+αn1k(ai(logknlogkai1))+βn=cn+αn1kailogknαn1kailogkai1+βn=αn1kailogkn+βn=αnlogkn+βn

その後、我々は。T(n)αnlogkn+βnT(n)=O(nlogn)

我々はほんの小さなビットを使用したこと、前の例を変更してみましょう:

T(n)={cn<352T(n5)+4T(n7)+T(n35)+cnn35

最初に、再帰呼び出し内の係数の合計を1に検証し。

1=1kai=15+15+17+17+17+17+135=25+47+135=3535

次に、ベースケースが係数の逆数の最大値よりも小さいことを確認し:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7,35}=35

これらの条件が満たされていれば、がわかりここで、およびは次の定数です: したがって、次のようになります: T(n)αnlogn+βnβ=cα

b=c1kailogkai1=c2log755+4log777+log735351.048c
T(n)1.048cnlog7n+cnT(n)=O(nlogn)


6

この投稿をもう一度確認した後、私はこれがまだここにないことに驚いています。

ドメイン変換/変数の変更

再帰を処理する場合、再帰スタックの深さが不明な場合にドメインを変更できると便利な場合があります。

たとえば、次の繰り返しを実行します。

T(n)=T(22loglogn)+logloglogn

どうすればこれを解決できますか?シリーズを拡張することもできますが、これは非常に高速になります。代わりに、各呼び出しで入力がどのように変化するかを考えてみましょう。

最初にあります:

  1. n、その後
  2. 22loglogn、その後
  3. 22loglog(22loglogn)など。

ドメイン変換の目標は、繰り返しを同等のに変更して、上記の遷移の代わりに、単にです。S(k)k,k1,k2,

たとえば、とした場合、これは上記の繰り返しで得られるものです。 その後、次のように簡単に書き換えることができます その後、をに変換して戻すだけです: n=2222k

T(2222k)=T(22loglog2222k)+logloglog(2222k)=T(2222k1)+2k
T(k)=T(k1)+2k=i=1k2k=2k+11
kn
T(n)=2(loglogloglogn)+11=O(logloglogn)


この例で、目標を確認できます。

仮定 いくつかの定数についてそして関数と。

T(n)={h(1)n=1aT(f(n))+h(n)otherwise
af(n)h(n)

現在、ような 関数およびを見つけようとしています。g(k)=nf(g(k))=g(k1)

T(g(k))=aT(f(g(k)))+h(g(k))=aT(g(k1))+h(g(k))

より一般的には、我々が望むの繰り返し適用されで、回。(例:)。これにより、が「反復」機能として機能します。ここで、再帰の深さで行われる作業は、単純にです。f(i)(n)=g(ki)f(i)(n)fnif(2)(n)=f(f(n))g(k)ih(g(ki))

次に、これをに簡単に変換して、 とすることができます。与えられたベースケースまでのすべてのについてを合計します。つまり、 S(k)=T(g(k))

S(k)=aS(k1)+h(g(k))
h(g(k))k
S(k)=i=g1(1)kakih(g(i))

我々は決定することができる場合に、いくつかの閉じた形のための関数、我々は決定することができるとして S(k)=γ(k)γT(n)

T(n)=γ(g1(n))

次に、これを使用して、上記の他の方法の1つを介して境界を取得します。このメソッドを仕様に合わせて少し変更することもできますが、一般的には、を単純な再帰に変換する反復関数を見つけようとしています。T(n)g(k)T(n)

私はこの時点でを決定する正確な方法を知りませんが、それについて考え続け、それがより明確になったら(またはコメンターがいくつかのヒントを持っているなら!)更新します。私は主に私の発見した、過去の試行錯誤の機能を(参照ここではここではここと、ここでは例のために)。g(k)g(k)


1
、、および/または制限はありますか?私はので、特に求めている同様の民俗置換トリックはランダウ表記が関与している時に、時にはもし私が心配になりれ、失敗それは本当に常に正しい答え。fghγg1
ラファエル

@ラファエル、これは私が完全に確信していない部分です。同等性を確立するために必要なことはいくつかあります。1)再帰の深さは同じです。これはおよびで保証できます。2)各再帰レベルで行われる作業は同じです。これは強制され、次に強制されます。これの基本的な考え方は、を単純に合計、つまり変換することです。以下からの変換する、私は(私は証拠を持っていない)が、それは次のようになり、なぜ私が見ることができないものではない100%確信しています間違っています。考え?f(g(k))=g(k1)g(k)=ng(k)=nh(g(k))=h(n)T(n)i=ckh(g(i))γ(k)γ(g1(n))
ライアン

@Raphael では、代わりにの場合を考慮することもできます。その場合、への変換はより直線的です。進む。簡単に証明できるのは、合計で等価性を示すだけだと思います。ここでランダウ記法でおかしな問題にぶつかりますが、ランダウを除外し、正確な平等だけにこだわるなら、それでいいと思います。S(k)=γ(k)ΘT(n)=γ(g1(n))
ライアン

@Raphael平等のみを使用するように編集したので、ランドー表記はこれを台無しにしないでください。また、もう少し一般化しました。定数代わりに関数を使用するために、もう少し一般化することもできます。次に、合計の代わりにます。β(n)aakiβ(g(i))
ライアン

5

単純な繰り返し関係に有効なもう1つのアプローチがあります。WolframAlphaに繰り返しを解決してもらいます。

たとえば、f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2)Wolfram Alphaに入力してみてください。フィボナッチ数へのリンクを含む解決策が得られます。または試すf(1)=1, f(n)=f(n-1)+nか、f(1)=1, f(n)=2*f(n-1)+3*nあるいはf(n)=f(n-1) + 2 f(n-2), f(1)=1, f(2)=3他の例について。ただし、注意してください。WolframAlphaは非常に単純な再発を解決できますが、より複雑な再発ではバラバラになります。

このアプローチは、バグや機能と見なすことができる思考の必要性を避けます。


3
私はない、このサイトの目的は、説明するのだろうと思いますどのようにコンピュータ代数はその盲目の使用を提唱していない、このようなものを行います。しかし、これらのツール有用であるため、実際には「無駄」な時間(「練習」)の前に必ず試してみるべきです。
ラファエル

私自身の経験から、「難しい」または「簡単」であるという感覚がまったくない状態でコンピューター代数を使用しようとしても、それほど遠くに行くことはできません。特にアルゴリズム分析では、マッサージが必要になる場合があります。再発を自分で解決する方法を知らずに、あなたがそれをどのように行うのかわかりません。(このサイトの目的に関しては、複数の視点があります。事実:これまでのところ、「これは誰かにとって有用です」は投稿を正当化するのに十分ではありませんでした。)
ラファエル

5

マスター定理のケース2は、通常述べられるように、の形式の繰り返しのみを処理します。ここで、するために。ジェフリー・レオンの配布資料から取られた次の定理は、負のに対する答えを与えます。T(n)=aT(n/b)+f(n)f(n)=Θ(nlogablogkn)k0k

適切なベースケースを使用して、繰り返しを検討します。T(n)=aT(n/b)+f(n)

  1. もしのために、次いで。f(n)=O(nlogbalogc1n)c<0T(n)=Θ(nlogba)

  2. もしするための次いで、。f(n)=Θ(nlogbalogc1n)c=0T(n)=Θ(nlogbaloglogn)

  3. 場合、場合、)。f(n)=Θ(nlogbalogc1n)c>0T(n)=Θ(nlogbalogcn

証明では、今度はスケッチするように、繰り返し置換の方法を使用します。およびと仮定し。次に、の乗、 次に、ケースを1つずつ考えてみましょう。場合、シリーズ収束し、したがって。場合、和は、高調波の和である、などf(n)=nlogbalogbc1nT(1)=0nb

T(n)=i=0logbn1ai(nbi)logbalogbc1(nbi)=i=0logbn1nlogba(logbni)c1=nlogbaj=1logbnjc1.
c<0j=0jc1T(n)=Θ(nlogba)c=0Hlogbn=log(logbn)+O(1)T(n)=Θ(nlogbaloglogn)。場合、積分を使用して合計を近似できます: したがって。c>0
j=1logbn0logbnxc1dx=xcc|0logbn=logbcnc,
T(n)=Θ(nlogbalogcn)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.