解決する


8

アルゴリズムの概要、第3版(p.95)には、再発を解決する方法の例があります

T(n)=3T(n4)+n⋅log⁡(n)

マスター定理を適用することによって。

私はそれがどのように行われるかについて非常に混乱しています。そう、a=3,b=4,f(n)=n⋅log⁡(n)
最初のステップは比較することです nlogb⁡a=nlog4⁡3=O(n0.793) と f(n)。

彼らがこれをどのように比較したのか私には手がかりがありません。本は説明します:

f(n)=Ω(nlog4⁡3+ϵ)、 どこ ϵ≈0.2、規則性の条件が満たされることを示すことができる場合、ケース3が適用されます f(n).

に続く:

nが十分に大きい場合、次のようになります。 af(nb)=3(n4)log⁡(n5)≤(34)nlog⁡n=cf(n) for c=34.

何処にやった 3(n4) から来る?

回答:


11

私たちの再発が次の形をとるなら T(n)=aT(n/b)+f(n)、次に、Masterメソッドの「3番目のケース」を使用するには、次のホールドが必要です。

f(n)=Ω(nlogb⁡a+ϵ) いくつかのための ϵ>0 で、もし af(n/b)≤cf(n) 一定の c<1 そしてすべて十分に大きい n、その後 T(n)=Θ(f(n))

私たちの再発は次のように定義されます

T(n)=3T(n/4)+nlog⁡n.

定義により、 a=3,b=4,f(n)=nlog⁡n。

今それを示す必要があります f(n) 多項的により大きい nlogb⁡a。それが「f(n)=Ω(nlogb⁡a+ϵ)"上からの部分。定義 ϵ≈0.2これを達成します。その理由はlog4⁡3≈0.793 そして f(n)=Ω(n0.793+ϵ)。

私たちはそれを示すために残されています f(n)規則性条件を満たす。それが「af(n/b)≤cf(n) 一定の c<1 そしてすべて十分に大きい n」部分。

私たちは単に値をプラグインします a,b 取得するため:

af(n/b)=3(n/4)log⁡(n/4).
私たちがしたのは、n" f(n) と差し込みます "n/4」

これを見やすくするために、 k=n/4 そしてそれを観察する af(k)=aklog⁡k。スワッピングk と n/4 我々は持っています

3(n/4)log⁡(n/4)≤(3/4)nlog⁡n=cf(n)
どこ c=3/4。

これで必要な要件が完了しました。 T(n)=Θ(nlog⁡n)。


1
細かい対応ありがとうございます。そう、n0.793 多項式です ≤ より n1log⁡n?おそらく「多項式」の意味を誤解していたと思います
— newprint

1
この場合の多項式は n1−0.793=n0.217。
— JeffE 2012

@newprint多項式的に大きいとは、2つの間の差が少なくとも(おそらく分数)の累乗であることを意味します n、以下のような小さな関数ではありません (log⁡n)。具体的には、まさに「3番目のケース」の条件です。f(n)=Ω(nlogb⁡n⋅nϵ)。それはその余分ですnϵ多項的にそれを大きくする要因。そして、ジェフが指摘したように、この場合、ϵ=.217。
— Joe

選択できましたか ε=0.00000001?私が理解する限りではf(ん) もう Ω(ん0.793) なぜ追加する必要があるのですか 0.2?
— Yos

Isn't big Omega a lower bound on running time so that should say is "asymptotocially equal to or greater than" instead of " is polynomially larger than.." ?
— mLstudent33
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.