Resolvendo usando o teorema do mestre


8

Introduction to Algorithms , 3rd edition (p.95) tem um exemplo de como resolver a recorrência

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

aplicando o Teorema Mestre.

Estou muito confuso com a forma como é feito. Então, primeiro passo é comparar com .a=3,b=4,f(n)=n⋅log⁡(n)
nregistrob⁡uma=nregistro4⁡3=O(n0,793)f(n)

Não tenho idéia de como eles compararam isso. O livro explica:

f(n)=Ω(nregistro4⁡3+ϵ) , onde , o caso 3 se aplica se pudermos mostrar que a condição de regularidade é válida paraϵ≈0,2f(n).

Seguido por:

Para n suficientemente grande, temos o seguinte:umaf(nb)=3(n4)registro⁡(n5)≤(34)nregistro⁡n=cf(n) for c=34.

De onde veio ?3(n4)

Respostas:


11

Se nossa recorrência assumir a forma , para usar o "terceiro caso" do método Master, devemos ter o seguinte:T(n)=umaT(n/b)+f(n)

f(n)=Ω(nregistrob⁡uma+ϵ) para alguns e se para alguma constante e todos suficientemente grandes , entãoϵ>0 0umaf(n/b)≤cf(n)c<1 1nT(n)=Θ(f(n))

Nossa recorrência é definida como

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

Por definição, temos .a=3,b=4,f(n)=nlog⁡n

Agora precisamos mostrar que é polinomialmente maior que . Essa é a parte " " acima. Definir consegue isso. A razão é que e .f(n)nlogb⁡af(n)=Ω(nlogb⁡a+ϵ)ϵ≈0.2log4⁡3≈0.793f(n)=Ω(n0.793+ϵ)

Nos resta mostrar que satisfaz a condição de regularidade. Essa é a " para alguma parte constante e todas as partes suficientemente grandes ".f(n)af(n/b)≤cf(n)c<1n

Simplesmente inserimos nossos valores de para obter:Tudo o que fizemos foi pegar o " " em e conectar " ".a,b

af(n/b)=3(n/4)log⁡(n/4).
nf(n)n/4

Para facilitar a visualização, deixe e observe que . Trocando com , temos onde .k=n/4af(k)=aklog⁡kkn/4

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

Isso termina nossos requisitos necessários e temos que .T(n)=Θ(nlog⁡n)


11
Obrigado pela resposta detalhada. Então, é polinomialmente que ? Provavelmente eu não entendi o significado de "polinomialmente"n0,793≤n1 1registro⁡n
— newprint

11
O polinômio nesse caso é . n1 1-0,793=n0,217
— JeffE

@newprint Polinomialmente maior significa apenas que a diferença entre os dois é pelo menos uma potência (possivelmente fracionária) de , e não uma função menor, como . Especificamente, é exatamente a condição para o "terceiro caso", que . É esse fator extra que o torna polinomialmente maior. E, como JeffE apontou, neste caso, . n(registro⁡n)f(n)=Ω(nregistrob⁡n⋅nϵ)nϵϵ=.217
— Joe

Poderíamos ter escolhido ? Tanto quanto eu sei que já é , por que precisamos adicionar ? ϵ=0,00000001f(n)Ω(n0,793)0,2
— Yos

O Omega grande não é um limite inferior no tempo de execução, de modo que deveria ser "assintotocialmente igual ou maior que" em vez de "é polinomialmente maior que .."?
— mLstudent33
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.