Pode haver momentos em que você se depara com uma estranha recorrência como esta:
Se você for como eu, perceberá que não pode usar o Teorema dos Mestres e poderá pensar: " hmmm ... talvez uma análise de árvore de recorrência possa funcionar. " Então você perceberia que a árvore começa a ficar nojenta muito rápido. Após algumas pesquisas na internet, você vê que o método Akra-Bazzi funcionará! Então você começa a investigar e percebe que não quer fazer todas as contas. Se você é como eu até este momento, ficará animado em saber que há uma maneira mais fácil.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
O Teorema da Divisão Desigual
Deixe- e ser constantes positivas.ck
Então, sejam constantes positivas, de modo que .{a1,a2,…,ak}∑k1ai<1
Também devemos ter uma recorrência do formulário (como nosso exemplo acima):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Afirmação
Então eu reivindico onde é uma constante (por exemplo, assintoticamente linear) e:T(n)≤bnb
b=c1−(∑k1ai)
Prova por Indução
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Indução : Assuma verdadeiro para qualquer , então temosn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+b⌊a1n⌋+b⌊a2n⌋+⋯+b⌊akn⌋≤cn+ba1n+ba2n+⋯+bakn=cn+bn∑1kai=cn−cn∑k1ai1−(∑k1ai)+cn∑k1ai1−(∑k1ai)=cn1−(∑k1ai)=bn□
Então temos .T(n)≤bn⟹T(n)=O(n)
Exemplo
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Primeiro, verificamos que os coeficientes dentro das chamadas recursivas somam menos de um:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Em seguida, verificamos que o caso base é menor que o máximo dos inversos dos coeficientes:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
Com essas condições atendidas, conhecemos onde é uma constante igual a:
Portanto, temos:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
O desigual teorema de divisão parte 2
Da mesma forma, podemos provar que há um limite para quando . A prova seguirá muito do mesmo formato:∑k1=1
Deixe- e ser constantes positivas tais que .ckk>1
Então, sejam constantes positivas, de modo que .{a1,a2,…,ak}∑k1ai=1
Também devemos ter uma recorrência do formulário (como nosso exemplo acima):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Afirmação
Então eu afirmo (escolhemos base porque será o fator de ramificação da árvore de recursão) em que e são constantes (por exemplo, linearmente assintoticamente lineares) ) de tal modo que:T(n)≤αnlogkn+βnlogkkαβ
β=c
e
α=c∑k1ailogka−1i
Prova por Indução
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Indução : Assuma verdadeiro para qualquer , então temosn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+∑1k(αainlogkain+βain)=cn+αn∑1k(ailogkain)+βn∑1kai=cn+αn∑1k(ailogkna−1i)+βn=cn+αn∑1k(ai(logkn−logka−1i))+βn=cn+αn∑1kailogkn−αn∑1kailogka−1i+βn=αn∑1kailogkn+βn=αnlogkn+βn□
Então temos .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Exemplo
Vamos modificar o exemplo anterior que usamos um pouquinho:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Primeiro, verificamos que os coeficientes das chamadas recursivas somam um:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Em seguida, verificamos que o caso base é menor que o máximo dos inversos dos coeficientes:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
Com estas condições atendidas, nós sabemos onde e é uma constante igual a:
Portanto, temos:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)