web-dev-qa-db-ja.com

漸化式を解くT(n) =√nT(√n)+ n

漸化式を解くことは可能ですか?

T(n)=√nT(√n)+ n

マスター定理を使用しますか?それは形ではありません

T(n) = a ⋅ T(n / b) + f(n)

ただし、この問題はCLRSの第4章の演習で説明されています。

8
ahollyhock

これはマスター定理では解決できません。ただし、再帰ツリー法を使用してO(n log log n)に解決することで解決できます。

この背後にある直感は、ツリーの各レベルでn個の作業を行っていることに気付くことです。トップレベルは明示的に機能しません。 √n個のサブ問題のそれぞれは、合計n個の作業に対して√nが機能します。したがって、ここで問題となるのは、再帰ツリーの深さです。これは、nが十分に小さくなる(たとえば2未満になる)前にnの平方根を取ることができる回数です。私たちが書くなら

n = 2lg n

次に、再帰呼び出しごとに、nの平方根が取得されます。これは、上記の指数を半分にすることと同じです。したがって、k回の反復の後、次のようになります。

n1 /(2k = 2lg n /(2k

これが2未満になったら停止したいので、

2lg n /(2k = 2

lg n /(2k)= 1

lg n = 2k

lg lg n = k

したがって、lg lg n回の平方ルート化の後、再帰は停止します。また、各レベルで再帰がO(n)動作するため、合計実行時間はO(n lg lg n)です。

より一般的には、入力サイズを繰り返し半分に減らすアルゴリズムで「log n」と思われるのと同じように、平方根をとって入力サイズを繰り返し減らすアルゴリズムで「loglogn」と思われるはずです。たとえば、van EmdeBoasツリーはこの漸化式を使用します。

興味深いことに、この漸化式は、コンピューターが任意の実数のフロアを一定時間で取得できると仮定して、最も近い点のペアの問題を決定論的に解決するための有名なアルゴリズムの実行時間を取得するために使用されます。

23
templatetypedef