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)+nlog(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)=nlog(n)
nregistrobuma=nregistro43=O(n0,793)f(n)

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

f(n)=Ω(nregistro43+ϵ) , 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)nregistron=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)=Ω(nregistrobuma+ϵ) 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)+nregistron.

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

Agora precisamos mostrar que é polinomialmente maior que . Essa é a parte " " acima. Definir consegue isso. A razão é que e .f(n)nlogbaf(n)=Ω(nlogba+ϵ)ϵ0.2log430.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)=aklogkkn/4

3(n/4)log(n/4)(3/4)nlogn=cf(n)
c=3/4

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


11
Obrigado pela resposta detalhada. Então, é polinomialmente que ? Provavelmente eu não entendi o significado de "polinomialmente"n0,793n1 1registron
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(registron)f(n)=Ω(nregistrobnnϵ)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.