再帰関係の変数の変更


20

現在、私はアルゴリズムの自己学習(CLRS)を行っており、再発関係を解決するために本で概説している特定の方法が1つあります。

この例では、次の方法を説明できます。再発があるとします

T(n)=2T(n)+logn

最初に、m = lg(n)の置換を行い、それを繰り返しに差し込んで取得します:

T(2m)=2T(2m2)+m

ここまでは完全に理解しています。この次のステップは、私を混乱させるものです。

彼らは現在、再発を「名前変更」し、S m = T 2 m)とし、明らかにS(m)S(m)=T(2m)

S(m)=2S(m/2)+m

なんらかの理由で、なぜこの名前変更が機能するのかは明確ではなく、不正行為のように思えます。誰もこれをもっとよく説明できますか?

回答:


15

確かに不正行為ではありません。微積分では、代入を使用してトリッキーな積分を解決する方法を考えてください。代入により、方程式が操作しやすくなります。さらに、置換は、やや複雑な繰り返しを使い慣れた繰り返しに変換する場合があります。

これはまさにあなたの例で起こったことです。新しい繰り返しを定義します。ことを覚えておいてT 2 、mは= 2 T 2 メートルS(m)=T(2m)。通知、そのSM/2=T2MT(2m)=2T(2m2)+m。この特定のポイントがまだ不明な場合は、k=m/2とし、このSk=T2kのみを実行していることに注意してください。これで、Sm=2Sm/2+mに展開して Sm)を表現できます。Sを解くと、親しい友人OmlogmS(m/2)=T(2m2)k=m/2S(k)=T(2k)S(m)

S(m)=2S(m/2)+m.
SSを解いたので、これを T n で表現したいと思います。これを行うには、単に私たちの元の値に戻ってプラグインメートル、我々は持っている T O ログnはログログn個をO(mlogm)ST(n)mTO(lognloglogn)

そうです、私は置換が問題を簡単にするのにどのように役立つか、nの複雑さを得るために値を差し戻す方法を完全に理解しています。私の質問は、S(m)= T(2 ^ m)にした後、S(m / 2)をどのように導出するのでしょうか?なんらかの理由で私には明らかではありません。より具体的には、T(2 ^(m / 2))= S(m / 2)であるとどのように結論付けますか。再発Sで、部分問題の大きさが半減している間は、部分問題のサイズは正方形根ざしている、再発Tのように思える

私が理解していない唯一の部分は、「S(m / 2)= T(2 ^(m / 2))」ということに気づいたときです。それは私には明らかでない唯一の部分です。私は変数置換を行うという考え方には慣れていますが、繰り返し全体を置き換えるという考え方にはあまり慣れていません。

ああ、その最後の編集は私のためにそれをしました。今は明らかです、ありがとう!

1
少し疑問があります。私はの面で関数S()書く場合kIを方程式S(K)= 2Sの下に取得しています(K / 2)+ M Iは、代替品を得ることができますどのようにmするためにk
Atinesh

4

S(m)=T(2m)STm2m

S

  1. Sm2m

  2. T

したがって、遷移は次のとおりです。

m2mT(2m)=S(m)
m22m/2T(2m/2)=S(m2).
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.