反復法を使用して、次の再帰方程式の時間計算量を分析するように依頼されました。
T(n)=T(n/3)+T(2n/3)+n^2.
T(1)=1
方程式を拡張しようとすると、爆発し、すべての再帰的な「呼び出し」と定数を実際に追跡できなくなります。これは、データの不均等な分割 (1\3 - 2\3) が原因です。
反復法を使用してこれを解決する簡単な方法はありますか?
どうもありがとう。
反復法を使用して、次の再帰方程式の時間計算量を分析するように依頼されました。
T(n)=T(n/3)+T(2n/3)+n^2.
T(1)=1
方程式を拡張しようとすると、爆発し、すべての再帰的な「呼び出し」と定数を実際に追跡できなくなります。これは、データの不均等な分割 (1\3 - 2\3) が原因です。
反復法を使用してこれを解決する簡単な方法はありますか?
どうもありがとう。
これは、同様の式の分析を示す論文です:T(n)= T(n / 3)+ T(2n / 3)+ n
反復処理を行う1つの方法では、パーサー/コンパイラーの動作と同様の方法を使用する必要があります。
式を適用すると、T(n)= T(n / 3)+ T(2n / 3)+ n ^ 2、n=1..9が得られます。
T(0) = 0
T(1) = T(1/3) + T(2/3) + 1
T(2) = T(2/3) + T(4/3) + 4
T(3) = T(1) + T(2) + 9
T(4) = T(4/3) + T(8/3) + 16
T(5) = T(5/3) + T(10/3) + 25
T(6) = T(2) + T(4) + 36
T(7) = T(7/3) + T(14/3) + 49
T(8) = T(8/3) + T(16/3) + 64
T(9) = T(3) + T(6) + 91
T(3m) = T(m) + T(2m) + 9m^2
..多分これはあなたにいくつかのヒントを与えることができます
ここで役立つのは、数字を掛け算するのではなく、すべてをべき乗で書くことです。すべて手作業で行った結果、最初の数回の展開で次のようになりました。
T(n) = T((1/3)n) + T((2/3)n) + n^2
= T((1/3^2)n)
+ 2T((2/3^2)n)
+ T((2^2/3^2)n)
+ [n^2] #constants from the first expansion
+ [((1/3)n)^2 + ((2/3)n)^2] #constants from the second expansion
= T((1/3^3)n)
+ 3T((2/3^3)n)
+ 3T((2^2/3^3)n)
+ T((2^3/3^3)n)
+ [n^2]
+ [((1/3)n)^2 + ((2/3)n)^2]
+ [((1/3^2)n)^2 + ((2/3^2)n)^2 + ((2^2/3^2)n)^2] #constants from 3rd expansion
T
見分けるのは少し難しいですが、どうやらs の二項係数が得られるようです。ここで、 x
th 展開は次のようになります。
T(n) = sum((x choose i) * T(((2^i)/(3^x))n), i from 0 to x)
+ constants
各ステップで、展開時に追加される追加の定数はfrom Expansionx
の引数である squaredです。したがって、特定の展開でのすべての新しい定数は次のようになります。T
x-1
n^2
y
NewConsts(y) = sum(((y - 1) choose i) * (((2^i)/(3^(y-1)))*n)^2, i from 0 to y - 1)
展開時のすべての定数x
は等しい
n^2 + sum(NewConsts(y), y from 1 to x)
したがって、上記のすべてが正しいと仮定すると、私は100%確信が持てませんが、定数がいつ重要でなくなるかを把握する必要があると思います-つまり、 0x
に((2^x / 3^x) * n)^2)
等しいものについて-そしてあなたの答えはすべての合計ですそれらの定数の...
何も見逃していなければO(n^2)になりそうです...
まず、T は単調に成長します (いくつかの最初の値については、これを手動で確認できます。残りは帰納法によるものです。関数が [1..10] で単調である場合、[1..15] で単調になり、すぐ)。
T(n)=T(n/3)+T(2n/3)+n^2<=2T(2n/3)+n^2
T(n)<=n^2+2*(2n/3)^2+4*(4n/9)^2+...
=sum[k=0..log3(n)]((8/9)^k*n^2)
=n^2*sum[k=0..log3(n)](8/9)^k
<=n^2*sum[k=0..inf](8/9)^k
<=C*n^2