一般的な形式:T(n) = aT(n/b) + f(n)
したがって、n ^ logb(a)とf(n)を比較する必要があります
n^logba
>がケース1f(n)
であり、T(n)=Θ(n^logb(a))
n^logba
<がケース2f(n)
であり、T(n)=Θ((n^logb(a))(logb(a)))
あれは正しいですか?または私は何かを誤解しましたか?
そして、ケース3はどうですか?いつ適用されますか?
一般的な形式:T(n) = aT(n/b) + f(n)
したがって、n ^ logb(a)とf(n)を比較する必要があります
n^logba
>がケース1f(n)
であり、T(n)=Θ(n^logb(a))
n^logba
<がケース2f(n)
であり、T(n)=Θ((n^logb(a))(logb(a)))
あれは正しいですか?または私は何かを誤解しましたか?
そして、ケース3はどうですか?いつ適用されますか?
再発は、複雑な問題を解決する分割統治戦略で発生します。
それは何を解決しますか?
T(n) = aT(n/b) + f(n)
ます。a
1以上である必要があります。これは、問題が少なくとも1回は小さなサブ問題に縮小されることを意味します。少なくとも1回の再帰が必要です。b
1より大きくする必要があります。つまり、再帰ごとに、問題のサイズが小さいサイズに縮小されます。b
が1より大きくない場合、それはサブ問題のサイズが小さいことを意味します。f(n)
の値が比較的大きい場合は、正である必要がありますn
。以下の画像を検討してください。
解決すべきサイズの問題があるとしましょうn
。各ステップで、問題をサブ問題に分割できます。a
各サブ問題のサイズは小さく、サイズは.1分の1に縮小されb
ます。
簡単な言葉での上記のステートメントは、サイズの問題が比較的小さいサイズのサブ問題にn
分割できることを意味します。a
n/b
また、上の図は、問題を複数回分割した場合、各サブ問題が非常に小さいため、一定時間で解決できることを示しています。
以下の導出についてはlog
、ベースを考慮してb
ください。
H
それが木の高さだとしましょうH = logn
。葉の数= a^logn
。
f(n)
a * f(n/b)
a * a * f(n/b2)
number of leaves * θ(1)
。これは等しいn^loga
ここで、操作のコストが各レベルで大幅に増加し、リーフレベルに到達するまでに、の値がf(n)
値よりも多項式的に小さくなると仮定しますn^loga
。その場合、全体の実行時間は、最後のレベルのコストによって大きく左右されます。したがってT(n) = θ(n^loga)
。
各レベルでの操作のコストはほぼ等しいと仮定します。その場合f(n)
、はにほぼ等しくなりn^loga
ます。したがって、合計実行時間はf(n)
、レベルの合計数の倍になります。
T(n) = θ(n^loga * logn)
どこにありk
ますか>=0
。logn
のツリーの高さはどこになりますかk >= 0
。
注:ここで、k+1はlognのログインのベースです。
各レベルでの操作のコストが各レベルで大幅に減少し、リーフレベルに到達するまでに、の値がf(n)
値よりも多項式的に大きくなると仮定しますn^loga
。その場合、全体の実行時間は、最初のレベルのコストによって大きく左右されます。したがってT(n) = θ(f(n))
。
より詳細な読み物と実践例に興味がある場合は、私のブログエントリ「再発を解決するためのマスターメソッド」にアクセスしてください。
あなたはそれを誤解していると思います。 n ^ logba> f(n)がケース1で、T(n)=Θ(n ^ logb(a))の場合
ここでは、結果としてf(n)について心配する必要はありません。得られるのは、T(n)=Θ(n ^ logb(a))です。f(n)はT(n)の一部であり、結果T(n)が得られた場合、その値にはf(n)が含まれます。したがって、その部分を考慮する必要はありません。
よくわからない場合はお知らせください。