Puede haber ocasiones en las que encuentre una recurrencia extraña como esta:
Si eres como yo, te darás cuenta de que no puedes usar el Master Theorem y luego puedes pensar: " hmmm ... tal vez un análisis de árbol de recurrencia podría funcionar ". Entonces te darás cuenta de que el árbol comienza a volverse asqueroso muy rápido. ¡Después de buscar en Internet, verá que el método Akra-Bazzi funcionará! Entonces, realmente comienzas a investigarlo y te das cuenta de que realmente no quieres hacer todos los cálculos. Si has sido como yo hasta este momento, te emocionará saber que hay una manera más fácil.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
El teorema de división desigual Parte 1
Deje y sean constantes positivas.ck
Luego, deje que sean constantes positivas tales que .{a1,a2,…,ak}∑k1ai<1
También debemos tener una recurrencia del formulario (como nuestro ejemplo anterior):
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}
Reclamación
Luego reclamo donde es una constante (por ejemplo, asintóticamente lineal) y:T(n)≤bnb
b=c1−(∑k1ai)
Prueba por inducción
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Inducción : Supongamos que es verdadero para cualquier , entonces tenemosn′<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□
Entonces tenemos .T(n)≤bn⟹T(n)=O(n)
Ejemplo
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Primero verificamos los coeficientes dentro de la suma de llamadas recursivas a menos de uno:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Luego verificamos que el caso base es menor que el máximo de las inversas de los coeficientes:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
Con estas condiciones cumplidas, sabemos donde es una constante igual a:
Por lo tanto, tenemos:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
El teorema de división desigual Parte 2
Del mismo modo, podemos probar un límite para cuando . La prueba seguirá mucho del mismo formato:∑k1=1
Sean y constantes positivas de modo que .ckk>1
Luego, deje que sean constantes positivas tales que .{a1,a2,…,ak}∑k1ai=1
También debemos tener una recurrencia del formulario (como nuestro ejemplo anterior):
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}
Reclamación
Luego reclamo (elegimos base porque será el factor de ramificación del árbol de recursión) donde y son constantes (p. Ej., Lineal y asintóticamente lineal) ) tal que:T(n)≤αnlogkn+βnlogkkαβ
β=c
y
α=c∑k1ailogka−1i
Prueba por inducción
Base :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Inducción : Supongamos que es verdadero para cualquier , entonces tenemosn′<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□
Entonces tenemos .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Ejemplo
Modifiquemos el ejemplo anterior que usamos solo un poco:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Primero verificamos que los coeficientes dentro de las llamadas recursivas sumen uno:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Luego verificamos que el caso base es menor que el máximo de las inversas de los coeficientes:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
Con estas condiciones cumplidas, sabemos que donde y es una constante igual a:
Por lo tanto, tenemos:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)