Beruflich Dokumente
Kultur Dokumente
En vez de O, se puede poner
Ejemplo: Un polinomio P(n)= a
m
n
m
+...+a
1
n+a
0
=
(n
m
)
es asintticamente
equivalente a su primer trmino.
P(n)-a
m
n
m
= ((a
m-1
n
m-1
+...+a
1
n+a
0
)/
a
m
n
m
)
a
m
n
m
P(n) ~ a
m
n
m
[(a
m
n
m
+...+a
1
n+a
0
)/
a
m
n
m
] tiende a 0 cuando n tiende a
Propiedad: si f(n) ~ g(n) (f(n)) __ (g(n))
Si tenemos una funcin, podemos intercambiarla por otra que sea asintticamente
equivalente , siempre que tengan el mismo orden de complejidad.
Existen dos estudios posibles sobre el tiempo de ejecucin de un algoritmo:
1. Obtener una medida terica a priori mediante la funcin de complejidad
2. Obtener una medida real del algoritmo, a posteriori, para unos valores concretos en un
computador determinado
No se puede medir el tiempo en segundos porque no existe un ordenador estndar de
referencia , en su lugar medimos el nmero de operaciones elementales.
Denotaremos T(n) como el tiempo de ejecucin de un algoritmo para una entrada de
tamao n.
Principio de invarianza. (mquinas distintas o cdigos distintos)
Dado un algoritmo y dos implementaciones I
1
y I
2
que tardan T
1
(n) y T
2
(n)
respectivamente, el principio de invarianza afirma que existe una constante real c>0 y
un nmero natural n
0
tales que para todo n>=n
0
se verifica que T
1
(n)<=c T
2
(n)
Es decir, el tiempo de ejecucin de dos implementaciones distintas de un algoritmo
dado no va a diferir ms que en una constante multiplicativa.
Asumimos que un algoritmo tarda un tiempo del orden de T(n) si existen una constante
real c>0 y una implementacin I del algoritmo que tarda menos que c T(n), para todo n
tamao de entrada.
El comportamiento de un algoritmo puede variar notablemente para diferentes
secuencias de entrada. Suelen estudiarse tres casos para un mismo algoritmo : caso
mejor, caso peor, caso medio.
Cmo contar el nmero de operaciones:
Operaciones elementales (OE): las que realiza el computador en tiempo acotado por
una constante:
operaciones aritmticas bsicas
asignaciones de tipos predefinidos
saltos (llamadas a funciones, proced. y retorno)
comparaciones lgicas
Acceso a estructuras indexadas bsicas (vectores y matrices)
Tema 1. Eficiencia de Algoritmos. 6
Es posible realizar el estudio de la complejidad de un algoritmo slo en base a un
conjunto reducido de sentencias, las que ms influyen en el tiempo de ejecucin.
Ejemplo 1.
Dado el siguiente cdigo en Modula-2, determinar el tiempo de ejecucin en cada uno
de los tres supuestos (mejor, medio y peor caso).
(*1*) 1 OE (asignacin)
(*2*) 4 OE (2 comparaciones, un acceso al vector y un AND)
(*3*) 2 OE (incremento y asignacin)
(*5*) 2 OE (condicin y acceso al vector)
(*6*) 1 OE (si la condicin se cumple)
(*7*) 1 OE (si la condicin no se cumple)
La copia del vector no se contabiliza ya que se pasa como referencia (VAR) , si no
fuese as se habran de contabilizar n OE
Caso mejor:
Encontramos el elemento en la primera posicin.
Se realiza (*1*) y la primera condicin de (*2*) porque suponemos que evaluamos
en cortocircuito.
Despus se hacen (*5*) y (*6*).
T(n)=1+2+2+1.
Caso peor:
El elemento no est en el vector.
(*1*) 1 OE
(*2*) El bucle se repite n-1 veces 4 OE
(*3*) n-1 veces 2 OE
(*2*) Salida del bucle 4OE/2OE
(*5*) 2 OE
(*7*) 1 OE
CONST n=...; (*nmero mximo de elementos del vector *)
TYPE vector=ARRAY [1..n] OF INTEGER; (*ordenado de menor a mayor*)
.......................
PROCEDURE Buscar (VAR a:vector; c:INTEGER):CARDINAL;
VAR j: CARDINAL;
BEGIN
j:=1; (*1*)
WHILE (a[ j ]<c) AND (j<n) DO (*2*)
j:=j+1; (*3*)
END; (*4*)
IF a[ j ]=c THEN (*5*)
RETURN j (*6*)
ELSE RETURN 0 (*7*)
END (*8*)
END Buscar;
Tema 1. Eficiencia de Algoritmos. 7
T(n) = 1+((
i=1,n-1
(4+2))+4)+2+1= 6n +2
Caso medio :
El bucle se ejecutar un nmero de veces entre 0 y n-1 y vamos a suponer que cada
una tiene la misma probabilidad de suceder. Existen n posibilidades (puede que el
elemento no est), luego cada una tendr 1/n. El nmero medio de veces que se
ejecutar el bucle es :
Premisa :
n-1 n-1
i ~ i
i=0 1=1
n-1 n-1
i (1/n) = 1/n i = 1/n ((n
2
+n)/2 n) = (n-1)/2
i=0 i=0
T(n)= 1+((
i=1,(n-1)/2
(4+2))+2)+2+1= 3n +3
while
Ejemplo 2:
Utilizando rdenes de complejidad.
Algoritmo de ordenacin por insercin directa
.....
a: array[1....n] de enteros
........
desde i=2 hasta n hacer (*1*)
x := a[i] (*1.1*)
a[0] := x (*1.2*)
j := i 1 (*1.3*)
mientras x < a[j] hacer (*1.4*)
a[j+1] := a[j] (*1.4.1*)
j := j 1 (*1.4.2*)
fin mientras
a[j+1] := x (*1.5*)
fin desde
n
i = (n
2
+ n )/2
i=1
Promedio del nmero
de vueltas que d el
bucle.
Para acabar el bucle slo se
evaluar la primera parte, nunca
se har la segunda puesto que
slo ser vlida en el caso peor.
Tema 1. Eficiencia de Algoritmos. 8
(*1.1*), (*1.2*), (*1.3*), (*1.4.1*), (*1.4.2*) y (*1.5*) tienen orden constante 1
Mejor caso :
se encuentra ordenado inicialmente.
= =
= = + = + =
n
i
n
i
m
n O n mientras vueltas n f
2 2
) ( ) 1 ( 2 ) 1 1 ( ) _ 1 ( ) (
Peor caso :
array totalmente desordenado.
) (
2
2
1
2
n
i 1) - i (1 ) 1 1 ( ) (
2
2
2
n
2 i
n
2 i
2 1
1
n O
n n n
n f
n
i i j
p
=
+
=
+
= = + = + =
= = = =
Caso medio :
mejor caso peor caso
= = =
= + = + =
+
+ =
n
i
n
i
n
i
a
i n
i i
n f
2 2
2
2
) O(n
2
1
1 )
2
1 ( )
2
)) 1 ( 1 (
1 ( ) (
hacemos la media de las dos
Como representante del algoritmo tomaremos el caso peor.
Resultados prcticos en el clculo de complejidades
Frmulas frecuentes en la bsqueda de rdenes de complejidad
Si lim f(n)/g(n) =cte >0 u(f(n)= u(g(n) ,
n0
las dos funciones tienen el mismo orden
se dice tambin que f y g son equivalentes.
Ej : u(3n
2
) = u (n
2
).
Suma de potencias:
= =
+
=
+
= =
+
n
i
n
i
k
n
i
k
i i
i
1 1
2 1 k
1
1 k
) O(n ) O(n
constante una k siendo
1 k
n
=
=
n
i
i
x
1
n
constante una x siendo ) O(x
Tema 1. Eficiencia de Algoritmos. 9
Suma de logaritmos
n) log O(n log i log
1
=
}
=
i
n
i
Suma de fracciones
Euler de cte. la e siendo n) log O(n e n log
1
1
= +
=
n
i
i
=
> =
n
i
c
i
1
1 cte. es c si O(1)
1
O(1)
1
cte. x siendo O(1)
1
1
1
=
=
=
=
n
i
n
i
i
n
x
Clculos en sumatorios
=
+
=
n
i
i
1
2
2
n n
= =
=
n
i
i
0
n
1 i
i
=
=
1
1
2
2
n - n
n
i
i
=
+
=
n
i
i
2
2
2
2 - n n
=
+ =
n
j i
1) j - (n k k
Tema 1. Eficiencia de Algoritmos. 10
Tcnicas bsicas para el anlisis de los algoritmos
El anlisis se realiza desde dentro hacia afuera.
1.- Tiempo para instrucciones individuales, es constante y no depende de n.
2.- Se combinan instrucciones segn estructuras de control.
Secuencias:
P
1
, P
2
son fragmentos del mismo algoritmo t
1
, t
2
=
=
n
i
c
1
O(n) 1
Las operaciones aritmticas son ms costosas cuanto mayores son los operandos.
Si consideramos los tamaos de los operandos.
En la k-sima iteracin, el tiempo de clculo es k, acotado por
T
calculo operaciones
s c k para k>=1, sin considerar el control del bucle y las
instrucciones que le preceden :
f
0
=0
f
1
=1
f
n
= f
n-1
+ f
n-2
para n>2 0,1,1,2,3,5,8,13,21,.........
funcion Fibonacci(n)
i=1
j=0
para k=1 hasta n hacer
{
j=i+j
i=j-1
}
devolver j
Tema 1. Eficiencia de Algoritmos. 12
Tiempo algoritmo s ) (
2
1) - n(n
c k c k
2
1
n
1 k
n O c
n
k
e = =
= =
Bucles Mientras y Repetir:
No existe una forma sencilla de conocer el nmero de iteraciones
Dos tcnicas:
1. Tcnica estndar. Hallar una funcin de las variables implicadas, cuyo valor
se decremente en cada iteracin
2. Alternativa. Tratarlo como un algoritmo recursivo
Ejemplo: Bsqueda binaria: encontrar un elemento x en un vector T[1..n] ordenado
crecientemente.
Solucin buscando una funcin:
Forma de analizar el bucle:
En las sucesivas vueltas, el nmero de elementos a tratar es: n, n/2, n/4, n/8 ....
hasta 1
En la vuelta n l l
2
l
l l
log 2 n 1
2
n
vuelta ltima la en
2
n
: = = =
Considerando que es una funcin recursiva:
Se piensa que el bucle est implementado de forma recursiva, cada vez que
se pasa por el bucle, se reduce el rango de posiciones posibles para x en el
vector.
t(d) es el tiempo mximo para terminar el bucle. d elementos que
quedan por considerar.
t(d) s tiempo-cte-una-iteracin + t(d/2)
t(n) e O(log n)
Otros:
Sentencias if
IF C THEN
i=1;j=n
mientras i<j hacer
k=(i+j)/2
caso_de
x<T[k]: j=k-1
x=T[k]: i=k ; j=k
x>T[k]: i=k+1
fin_caso
fin_mientras
devolver i
Tema 1. Eficiencia de Algoritmos. 13
S
1
ELSE
S
2
END
T=T(C)+max(T(S
1
),T(S
2
))
Sentencias case
CASE C OF
V
1
:S
1
V
2
:S
2
.....
V
n
:S
n
END
T=T(C)+max(T(S
1
),T(S
2
),...,T(S
n
))
Llamadas a procedimientos o funciones
F(P
1
,P
2
,...P
n
) es 1 por la llamada, mas el tiempo de evaluacin de los
parmetros, mas el tiempo de ejecutarse F.
T=1+T(P
1
)+T(P
2
)+....+T(P
n
)+T(F)
No se contabiliza la copia de los argumentos a la pila, salvo que se trate de
registros o vectores que se pasen por valor.
El tiempo de llamadas a procedimientos o funciones recursivas da lugar a
ecuaciones de recurrencia que se estudian posteriormente.
Resolucin de recurrencias:
Para los algoritmos recursivos, la funcin que establece el tiempo de ejecucin viene dada
por una ecuacin en recurrencia, T(n)=E(n), en donde en la expresin E aparece la propia
funcin T.
Resolver tal tipo de ecuaciones consiste en encontrar una expresin no recursiva de T.
Cuatro tcnicas:
Expansin de la recurrencia
Ecuaciones caractersticas
Cambio de variable
Transformacin de intervalo
Expansin de la recurrencia:
Tema 1. Eficiencia de Algoritmos. 14
Se obtiene una frmula general a partir de varios valores
Ejemplo: funcin factorial
funcion factorial(n:integer): integer
if n s 1 factorial=1
else factorial=nfactorial(n-1)
fin_funcion
T(n) =
La recurrencia a calcular es T(n)=c+T(n-1)
T(n-1)=c+T(n-2) n>2 T(n)=2 c+T(n-2) n>2
T(n-2)=c+T(n-3) n>3 T(n)=3 c+T(n-3) n>3
...
T(n)=i c+T(n-i) n>i y llegar un momento en que n-i=1 (acabar)
Si n-i=1 i=n-1 T(n) = c (n-1)+T(1) = c(n-1) + d O(n)
Nota: es ms correcto utilizar en vez de O. Cuando se calculan recurrencias
se obtiene el orden , pero por convenio seguimos empleando O.
Esta tcnica se aplica cuando slo hay un trmino en t, aunque est
multiplicado o sumado por una constante
Tcnica de la ecuacin caracterstica
Tres tipos:
Recurrencias homogneas lineales con coeficientes constantes
Recurrencias no homogneas
Otras
Recurrencias homogneas con coeficientes constantes
Tienen la forma : a
0
t
n
+ a
1
t
n-1
+...+ a
k
t
n-k
= 0 (e-1)
t
i
incgnitas (tiempo de ejecucin para n=i)
Lineal: no aparecen productos o potencias de t
Homognea: la combinacin lineal de t
i
es igual a 0
Los a
i
son constantes
Generalmente los algoritmos recursivos suelen tener una ecuacin no homognea ...
Si hacemos t
n
=x
n
a
0
x
n
+ a
1
x
n-1
+ ... + a
k
x
n-k
= 0
dividiendo por x
n-k
a
0
x
k
+ a
1
x
k-1
+ ... + a
k
= 0
Ejemplo: funcin FibRec
d si n<=1
c+T(n-1) si n>1
funcion FibRec(n)
si n<2 devolver n
sino devolver FibRec(n-1)+FibRec(n-2)
a si n=0, n=1
T(n)
T(n-1)+T(n-2), n>1
t
n
= t
n-1
+ t
n-2
t
n
- t
n-1
- t
n-2
= 0 , se trata de una recurrencia homognea
lineal de coeficientes constantes
Tema 1. Eficiencia de Algoritmos. 15
Si t
n
=x
n
para obtener forma de polinomio :
a
0
x
n
+ a
1
x
n-1
+ ...+ a
k
x
n-k
= 0 , al dividir por x
n-k
a
0
x
k
+a
1
x
k-1
+....+a
k
= 0 (polinomio caracterstico = f(x))
Es la ecuacin caraterstica de la recurrencia.
Dos posibles formas de resolver la ecuacin:
Races distintas:
se aplica el teorema fundamental del lgebra
Races mltiples:
Si el polinomio caracterstico tiene races mltiples, es decir, las k races no
son todas distintas
Teorema fundamental del lgebra
Todo polinomio p(x) de grado k posee k races de tal modo que se puede factorizar
como un producto de k monomios.
p(x) = [
i=1,k
(x-r
i
) donde r
i
son las soluciones de p(x)=0
como p(x)=0 y x=r
i
y t
n
=x
n
entonces r
i
n
es una solucin de la recurrencia.
Toda combinacin lineal de soluciones es tambin una solucin
x
n
= t
n
=
i=1,k
c
i
r
i
n
donde c
1
, c
2
, ... c
n
son constantes
La ecuacin (e-1) slo posee soluciones de esta forma cuando los r
i
son distintos.
Las constantes se determinan a partir de k condiciones iniciales.
Ejemplo 1: t
n
=
Ejemplo 2: t
n
=
Solucin ejemplo prctico 1:
En fibonacci
n n=0,n=1
t
n
t
n-1
+t
n-2
n>1
t
n
-t
n-1
-t
n-2
=0 (t
n
=x
n
) x
n
-x
n-1
-x
n-2
=0 dividiendo entre x
n-2
x
2
-x-1=0 ( ecuacin caracterstica)
n n=0,n=1
t
n-1
+ t
n-2
n>1
0 n=0
5 n=1
3t
n-1
+4t
n-2
en otro caso
Tema 1. Eficiencia de Algoritmos. 16
r
1
=(1+\ 5)/2 r
2
=(1-\ 5)/2
Solucin general : t
n
=c
1
r
1
n
+ c
2
r
2
n
Condicin inicial :
n=0 t
0
=c
1
+c
2
=0
n=1 t
1
=c
1
r
1
+c
2
r
2
=1
Clculo de c
1
y c
2
:
c
2
= -c
1
c
1
r
1
c
1
r
2
= 1
1
2
5 1
2
5 1
1 1
=
|
|
.
|
\
|
|
|
.
|
\
|
+
c c
( ) ( ) 2 5 1 5 1
1 1
= + c c
2 5 5
1 1 1 1
= + + c c c c
2 5 2
1
= c
5
1
c ,
5
1
2 1
= = c
n
n
n n
n
O t
t
|
|
.
|
\
|
+
e
|
|
.
|
\
|
|
|
.
|
\
|
+
=
2
5 1
: es solucin la luego primero, el es mayor trmino El
2
5 1
5
1
2
5 1
5
1
Se trata de una recurrencia exponencial
Solucin ejemplo prctico 2:
t
n
=
0 n=0
5 n=1
3t
n-1
+4t
n-2
en otro caso
Tema 1. Eficiencia de Algoritmos. 17
t
n
-3t
n-1
-4t
n-2
=0 x
2
-3x-4=(x+1)(x-4)=0 r
1
=-1 r
2
=4
Solucin general : t
n
=c
1
(-1)
n
+ c
2
4
n
Condiciones iniciales:
(-1)
0
c
1
+ 4
0
c
2
=0 n=0
c1 + 4 c
2
=5 n=1
c
1
=-1 c
2
=1
t
n
= 4
n
(-1)
n
eu(4
n
)
Races mltiples:
Cuando el polinomio caraterstico tiene raices mltiples, las k races no son todas
distintas.
Ahora tenemos (x-r
1
)
m1
(x-r
2
)
m2
(x-r
k
)
mk
r
i
son las distintas races y mi es la multiplicidad de las mismas
Esta nueva ecuacin se resuelve mediante:
T(n) =
i=1,m1
c
1i
n
i-1
r
1
n
+
i=1,m2
c
2i
n
i-1
r
2
n
+ ... +
i=1,mk
c
ki
n
i-1
r
k
n
lo que es equivalente:
T(n)=
i=1,k
j=1,mi
c
ij
n
j-1
r
i
n
donde los c
ij
1si s k y 1sj s m
i
se determinan con las condiciones iniciales
Ejemplo:
T(n) =
T(n)= t
n
-5t
n-1
+8t
n-2
+4t
n-3
=0 x
3
-5x
2
+8x-4=(x-1) (x-2)
2
Resolviendo por Ruffini:
1 -5 8 -4
1 1 -4 4
1 -4 4 0
2 2 -4
1 -2 0
2 2
1 0
races : r
1
=1(m
1
=1)
n si n=0,1,2
5t
n-1
- 8t
n-2
+ 4t
n-3
en otro caso
Tema 1. Eficiencia de Algoritmos. 18
r
2
=2(m
2
=2)
Solucin general : t
n
=c
1
1
n
+ c
2
2
n
+ c
3
n 2
n
Condiciones iniciales :
t
0
c
1
+c
2
=0 n=0 c
1
= -2
t
1
c
1
+2c
2
+2c
3
=1 n=1 c
2
= 2
t
2
c
1
+4c
2
+8c
3
=2 n=2 c
3
= -
c
2
=-c
1
c
1
+2c
2
+2c
3
=1
c
1
-2c
1
+2c
3
=1
c
3
=
2
1 c
1
+
c
1
- 4 c
1
+ 4 c
1
+4 = 2
c
1
= -2
c
2
= 2
c
3
= -
2
1
t
n
=-2 1
n
+ 2 2
n
+ -0.5 n 2
n
u(2
n
n)
Conclusiones:
Si r es una raz mltiple, de multiplicidad m del polinomio caracterstico, son
soluciones de la recurrencia de la ecuacin t
n
=r
n
, t
n
=n r
n
, t
n
= n
2
r
n
..... t
n
= n
m-
1
r
n
La solucin a la recurrencia se obtiene por combinacin lineal de todas las
raices mltiples ms las raices de multiplicidad simple.
Se escoge la derivada porque la raz de un polinomio tambin lo es de su
derivada.
Recurrencias no homogneas
Un recurrencia es no homognea cuando la combinacin lineal no es igual a 0
a
0
t
n
+ a
1
t
n-1
+...+ a
k
t
n-k
= b
n
p(n)
donde b es cte>0 y p(n) es un polinomio de grado d
Solucin: reducir al caso homogneo:
1.-Con habilidad matemtica
2.-Aplicando el polinomio caracterstico (t
n
=x
n
)
(a
0
x
k
+ a
1
x
k-1
+ ... + a
k
) (x-b)
d+1
donde d es el grado de p(n)
las ctes se determinan con las condiciones iniciales y con la propia recurrencia
Ejemplo de solucin con habilidad matemtica [1]:
t
n
2 t
n-1
= 3
n
[a]
b=3
p(n)=1 pol. grado 0=d
t
n
=2t
n-1
+3
n
Tema 1. Eficiencia de Algoritmos. 19
Debemos reducir esta ecuacin al caso homogneo manipulamos la
ecuacin recurrente para eliminar el segundo miembro de la igualdad.
1) multiplicar por b, (b=3) 3t
n
- 6t
n-1
= 3
n+1
[b]
2) sustituir n por (n-1) 3t
n-1
6t
n-2
= 3
n
[c]
3) restar [a]-[c] t
n
- 5t
n-1
+ 6t
n-2
= 0 (ecuacin de recurrencia
homognea)
x
2
-5x+6=0 (x-2) (x-3)
Solucin general : t
n
=c
1
2
n
+ c
2
3
n
Clculo de las constantes:
La solucin general de [a] se puede dar como una funcin de t
0
t
1
=2t
0
+3
t
0
=c
1
+c
2
n=0
t
1
=2c
1
+3c
2
=2t
0
+3 n=1
demostracin : t
1
= 2c
1
+3c
2
= 2c
1
+2c
2
+3 = 3c
2
2c
2
=3 c
2
=3
t
n
=(t
0
-3) 2
n
+ 3
n
3 t
n
eu(3
n
)
es independiente de las condiciones iniciales
Ejemplo de aplicacin del poinomio caracterstico [2] :
T(n) =
t(n) 2t(n-1) = 1
t(n) 2t(n-1) (x-2)
1 d=0, b=1 (x-1)
r
1
=1, r
2
=2 (x-2)(x-1) polinomio caracterstico
Solucin de recurrencia : t(n)=c
1
1
n
+ c
2
2
n
Podemos especular que t(n) e O(2
n
), pero al calcular las constantes
obtendramos un orden ms exacto (u)
t
0
=0 (condicin inicial)
t
1
=2 t
0
+1=1
t
0
=c
1
+c
2
=0
t
1
=c
1
+2c
2
=1
c
1
= -1
c
2
=1
t(n)=2
n
-1 , como c
2
>0 t(n) eu(2
n
)
0 si n=0
2t(n-1) + 1 en otro caso
Tema 1. Eficiencia de Algoritmos. 20
Recurrencias no homogneas. Ejemplo con races mltiples:
t
n
= 2 t
n-1
+ n (a)
t
n
- 2 t
n-1
= n t
n
- 2 t
n-1
= b
0
p(n) t
n
- 2 t
n-1
=n 1
0
{b=1, p(n)=n, grado 1=d}
Polinomio caracterstico : (x-2)(x-1)
2
r
1
=2 multiplicidad=1
r
2
=1 multiplicidad=2
Solucin de la forma: t
n
= c
1
2
n
+ c
2
1
n
+ c
3
n1
n
(b)
si t>=0 t
n
>=0 para todo n t
n
eu(2
n
)
para obtener las ctes sustituimos (b) en (a)
n= t
n
-2t
n-1
= (c
1
2
n
+ c
2
1
n
+ c
3
n 1
n
) 2(c
1
2
n-1
+ c
2
+ c
3
(n-1))
n = c
1
2
n
- 2
n
c
1
+c
2
2c
2
+ c
3
n 2(n-1) c
3
n=(2c
3
c
2
) c
3
n
2c
3
-c
2
=0 /** para n=0 **/
-c
3
=1 /** para n=1 y sustituyendo c
2
=2c
3
de n=0 **/
c
3
= -1
c
2
= -2
t
n
= c
1
2
n
n 2 /** recurrencia condicionada **/
siempre que t
0
>=0 t
n
>=0 para todo n y c
1
>0 t
n
eu(2
n
)
Nota: alternativamente se puede obtener c
1
, c
2
, c
3
como funcin de t
0
y los
valores de t
1
y t
2
a partir de la ecuacin.
Para obtener el orden exacto de t
n
a veces es imprescindible conocer los
valores de las constantes
Ejemplo:
t
n
=
t
n
4t
n-1
= -2
n
[b
n
p(n)] b=2 , p(n)= -1 grado 0
r
1
=4 , r
2
=2
Solucin general : t
n
= c
1
4
n
+ c
2
2
n
[a]
En principio t
n
eu(4
n
) , pero si consideramos :
2
n
= t
n
-4t
n-1
= c
1
4
n
+ c
2
2
n
4(c
1
4
n-1
+ c
2
2
n-1
) = -c
2
2
n
c
2
=1 (independiente de la condicin inicial)
1 si n=0
4t
n-1
2
n
en otro caso
Nota :
Aspectos prcticos en la resolucin del polinomio b
n
p(n).
- Siempre que haya una sola constante, se toma como valor de b, aunque
no est elevada a n.
- p(n) se considera un polinomio con un solo trmino.
Tema 1. Eficiencia de Algoritmos. 21
Condicin inicial t
0
=1 t
0
=1=c
1
4
0
+ c
2
2
0
= c
1
+c
2
=c
1
+1
1=c
1
+1 c
1
=0
t
n
=2
n
t
n
eu(2
n
)
Recurrencias de la forma:
a
0
t
n
+ a
1
t
n-1
+...+ a
k
t
n-k
= b
1
n
p
1
(n) + b
2
n
p
2
(n) + ...
bi = 0 y p
i
(n) son polinomios en n de grado d
i
Se resuelven usando el polinomio caracterstico:
(a
0
x
k
+ a
1
x
k-1
+ ... + a
k
) (x-b
1
)
d1+1
(x-b
2
)
d2+1
...
Contiene un factor por el trmino de la izquierda y tantos como trminos haya en la parte
derecha
Ejemplo:
t
n
=
n 1
0
n (x-1)
2
2
n
2
n
1 (x-2)
t
n
2t
n-1
= n + 2
n
polinomio caracterstico (x-2)(x-1)
2
(x-2)
Soluciones de la forma:
t
n
= c
1
1
n
+ c
2
n1
n
+ c
3
2
n
+ c
4
n2
n
t(n) e O(n 2
n
)
para saber si es u(n 2
n
) tenemos que calcular las constantes (...), necesitamos saber
si c
4
>0.
sustituyendo la sol. general en la recurrencia original :
n+2=(2 c
2
-c
1
) c
2
n + c
4
.2
n
para obtener los valores de c
1
, c
2
y c
4
directamente, igualando los coeficientes
que se tienen. Igualando los coeficientes de 2
n
c
4
=1
c
1
= -2
c
2
= -1
c
3
= 2
t
n
eu (n 2
n
)
0 si n=0
2t
n-1
+ n + 2
n
en otro caso
Tema 1. Eficiencia de Algoritmos. 22
Resolucin de recurrencias mediante el cambio de variable
T(n) trmino de una recurrencia original
Ti trmino de un nueva recurrencia obtenida de la original mediante cambio de variable
Ejemplo 1:
t(n) =
n = 2
i
i=lg
2
n ; para transformarla en algo conocido hacemos:
t
i
= t(2
i
)
t
i
= t(2
i
) = 3t(2
i-1
) + 2
i
t
i
3t
i-1
= 2
i
(x-2)(x-3)
t
i
= c
1
3
i
+ c
2
2
i
como i = lg
2
n y c
lg n
=n
lg c
t
i
= c
1
n
lg 3
+ c
2
n
lg 2
t(n) e O(n
lg 3
) (a)
para determinar el orden exacto hay que calcular c1 y c2
Clculo de las constantes:
sustituyendo (a) en la ecuacin de recurrencia
obtener t(n) en dos puntos, obteniendo dos ecuaciones
T(n)=c
1
n
log3
+c
2
n
Obteniendo T(n) en dos puntos
T(1)=1 cond. inc. n=1
T(2)=3T(1)+2=5 cond. inic. n=2
c
1
+c
2
=1 n=1
T(2)=c
1
2
log3
+c
2
2=3 c
1
+2 c
2
=5 n=2
c
1
=3
1 si n=1
3t(n/2)+n si n es potencia de 2, n>1
Tema 1. Eficiencia de Algoritmos. 23
c
2
= -2
T(n) = 3 n
log3
2 n , siendo n potencia de 2
T(n) eu(n
lg 3
) siendo n potencia de 2
Ejemplo 2: (no se puede aplicar el caso general)
T(n) = 2T(n/2) + n lg n siendo n potencia de 2
t
i
= T(2
i
) = 2T(2
i-1
) + 2
i
i = 2 t
i-1
+ 2
i
i [b=2, p(i)=1]
races: (x-2)(x-2)
2
(x-2)
3
ti = c
1
2
i
+ c
2
i2
i
+ c
3
i
2
2
i
[ i=2
n
i=lgn ]
T(n) = c
1
n + c
2
nlg n + c
3
nlg
2
n
T(n) eO(n lg
2
n) siendo n potencia de 2
para obtener los coeficientes sustituimos en la recurrencia original :
n lgn=T(n)-2 T(n/2)
n lgn =(c
1
n+c
2
lgn n+c
3
n lg
2
n)-
2(c
1
(n/2)+c
2
lg(n/2) (n/2)+c
3
(n/2) lg
2
(n/2))
n lgn =c
1
n+c
2
lgn n+c
3
n lg
2
n c
1
n-c
2
n lg(n/2)-c
3
n lg
2
(n/2)
n lgn =c
2
n lgn+c
3
n lg
2
n-c
2
n(lgn-lg2)-c
3
n(lg n-lg2)
2
n lgn=c
2
n lgn+c
3
n lg
2
n-c
2
n lgn+c
2
n-c
3
n(lg
2
n+lg
2
2-2 lgn lg2)
n lgn =c
2
n-c
3
n+2 c
3
n lgn
igualando coeficientes :
c
2
=c
3
=
T(n) e u(n lg
2
n)
Caso general:
n
0
> 1 ; l >1 ; b >2 ; k >0 enteros
c>0 real
T:NR
+
no decreciente
T(n) = l T(n/b) + c n
k
Tema 1. Eficiencia de Algoritmos. 24
n >n
0
>1 , n/n
0
es potencia exacta de b, es decir,
n e {bn
0
, b
2
n
0
, b
3
n
0
, ...}
cambio de variable adecuado:
n=b
i
n
0
t
i
= T(b
i
n
0
) = l T(b
i-1
n
0
) + c (b
i
n
0
)
k
= l t
i-1
+ c n
0
k
b
ik
t
i
l t
i-1
= c n
0
k
(b
k
)
i
(x-l)(x-b
k
)
d+1
[polinomio caraterstico]
[r
1
=l , r
2
=b
k
]
Las soluciones son de la forma:
t
i
= c
1
l
i
+ c
2
(b
k
)
i
[aunque en general es falso porque no se consideran las raices mltiples]
como n=b
i
n
0
, i=log
b
(n/n0)
si deshacemos el cambio de i (...)
T(n) =c
1
l
log
b
(n/n0)
+ c
2
(b
k
)
log
b
(n /n0)
= c
1
l
log
b
n log
b
n0
+ c
2
( b
k
)
log
b
n - log
b
n0
T(n) = c
1
( l
log
b
n
/ l
log
b
n0
) + c
2
( ( b
k
)
log
b
n
/ ( b
k
)
log
b
n0
)
T(n) = c
1
(n
log
b
l
/ n
0
log
b
l
) + c
2
(n
log
b
bk
/ n
0
log
b
bk
)
T(n) = ( c
1
/n
0
log
b
l
) n
log
b
l
+ ( c
2
/n
0
k
) n
k
T(n) = c
3
n
log
b
l
+ c
4
n
k
= T(n) (a)
Para conocer las constantes :
sustituimos (a) en la recurrencia original
c n
k
= T(n) l T(n/b)
c n
k
= c
3
n
log
b
l
+ c
4
n
k
l(c
3
(n/b)
log
b
l
+ c
4
(n/b)
k
)
c n
k
= c n
k
= c
3
n
log
b
l
+ c
4
n
k
l c
3
( n
log
b
l
/ b
log
b
l
) l c
4
(n
k
/ b
k
)
c n
k
= c
3
n
log
b
l
+ c
4
n
k
l c
3
( n
log
b
l
/ l
log
b
b
) l c
4
(n
k
/ b
k
)
c n
k
= c
3
n
log
b
l
+ c
4
n
k
l c
3
( n
log
b
l
/ l) l c
4
(n
k
/ b
k
)
c n
k
= c
4
n
k
l c
4
(n
k
/ b
k
)
c n
k
= c
4
n
k
(1- ( l/b
k
))
c
4
= c / (1-(l/b
k
))
Para expresar T(n) en notacin asinttica, necesitamos saber el cul es el trmino
dominante en (a), tenemos 3 casos:
1. si l<b
k
c
4
>0 y k>log
b
l c
4
n
k
dominante
T(n) e u(n
k
| n/n
0
potencia exacta de b) (notacin asinttica
condicional), condicionada a que n/n
0
sea potencia exacta de b.
Como T(n) es no creciente T(n) e u(n
k
).
Matemticamente, si tenemos uns f. condicionada a potencias,
logaritmos o polinomios y es creciente, se puede eliminar la condicin.]
log
b
b
k
=k , l
logbn
=n
logbl
c
3
= c
1
/n
0
log
b
l
, c
4
= c
2
/n
0
k
Tema 1. Eficiencia de Algoritmos. 25
2. si l>b
k
c
4
<0 y k< log
b
l c
3
>0 c
3
n
logbl
dominante
T(n) e u(n
logbl
| n/n
0
sea potencia de b)
Como T(n) es no decreciente T(n) e u(n
logbl
)
3. si l=b
k
problema en c
4
de divisin por 0
el polinomio caracterstico tiene 1 raz de m=2
La solucin general: t
i
= c
5
(b
k
)
i
+ c
6
i(b
k
)
i
como i=log
b
(n/n
0
)
T(n) = c
7
n
k
+ c
8
n
k
log
b
(n/n
0
) obtenemos (...) c
8
=c
trmino dominante: cn
k
log
b
n T(n) eu(n
k
log
b
n)
Resumen:
T(n) = l T(n/b) +c n
k
T(n) =
Observacin: en la notacin asinttica no es necesario especificar la base del
algoritmo por la propiedad:
log
a
n = log
a
b log
b
n O(log
a
n) = O(log
b
n)
Resolucin de recurrencias mediante transformacin de intervalo.
El cambio de variable transforma el dominio de la recurrencia
Podemos transformar el intervalo para obtener una recurrencia que se pueda resolver
Se pueden utilizar ambas transformaciones
Cuando la recurrencia no es lineal o los coeficientes no son constantes, se debe manipular
para que lo sea.
Ejemplo:
T(n) =
[T(n) definida cuando n es potencia de 2, nT
2
, n es coeficiente no constante y
T
2
es una recurrencia no lineal]
u(n
k
) si l<b
k
u(n
k
log n) si l=b
k
u(n
logbl
) si l>b
k
1/3 si n=1
nT
2
(n/2) en otro caso
Tema 1. Eficiencia de Algoritmos. 26
1) Cambio de variable: t
i
=T(2
i
) n=2
i
i=lg n
t
i
= T(2
i
) = 2
i
T
2
(2
i-1
) = 2
i
t
i-1
2
no lineal y 2
i
no cte
2) Transformar el intervalo o rango.
creamos otra recurrencia u
i
=lg t
i
t
i
=2
ui
u
i
=lg t
i
= log (2
i
t
i-1
2
) = log (2
i
) + log (t
i-1
2
) = i + 2lg t
i-1
=
u
i
= i +2u
i-1
u
i
2u
i-1
= i
cuyo pol. caract. es (x-2)(x-1)
2
u
i
= c
1
2
i
+ c
2
1
i
+ c
3
i1
i
obtengo las ctes (...) sustituyendo la sol. general en la recurrencia para u
i
i=u
i
2 u
i-1
i=c
1
2
i
+ c
2
1
i
+ c
3
i 1
i
2(c
1
2
i-1
+ c
2
1
i-1
+ c
3
(i-1) 1
i-1
i= c
2
+ c
3
i 2 c
2
2 c
3
(i-1)
i= - c
2
+ c
3
(i 2(i-1)) = -c
2
+ c
3
( -i +2)
i= 2 c
3
c
2
c
3
i
c
3
= -1
c
2
=2 c
3
= -2
c
1
=?
u
i=
c
1
2
i
i 2
deshacer el 2 cambio:
i c ui
i
i
t
= =
2 2
1
2 2
deshacer el 1
er
cambio: (i=log
2
n)
n
n T
t n T
n c
n
n c
n
n c
n n c
n n c n n c n c
n
n
4
2
2 2
2
2
2
2 ) (
2 2 2 ) (
1 1 1
1
1
2 log
1
log
1
2 log 2 log
) 2 (log
2 log 2 log 2 log 2
lg
= = = =
= = = =
+
+
condicin inicial :
T(1) =1/3
T(1)= 2
c1 1
/ (1 4) =1/3
c
1
=lg
2
(4/3)
c
1
=lg 4 lg3 = 2 - lg3 = c
1
T(n) = 2
(2-lg3) n
/ (4 n) = 2
2 n
/ (4 n 2
n lg3
) = 2
2 n
/ (4 n 3
n lg2
) T(n) =2
2 n
/ 4 n 3
n
,
despreciando el 4 por ser cte. :
T(n) e O((4/3)
n
/n)