Sie sind auf Seite 1von 27

ANLISIS DE ALGORITMOS

Tema 1. Eficiencia de Algoritmos


Concepto y anlisis de algoritmos.
Mtodos de resolucin, algoritmos y programas.
El clculo de la complejidad de los algoritmos es importante.
Se superpone el concepto de factilidad al de existencia.
Para un determinado problema puede existir un algoritmo, pero si su
complejidad es muy alta no es deseable a efectos prcticos.
Mtodo de resolucin para un problema P es una descripcin de pasos discretos,
comprensibles para un actuante, que estn basados en unos fundamentos y
resultados tericos, de forma que la realizacin de estos pasos junto con unos datos
necesarios lleva a la solucin del problema.
Semialgoritmo: descripcin precisa de un mtodo, con pasos numerados y bien
ordenados que da la solucin de P si existe, en un nmero finito de pasos. Si no hay
solucin la buscar indefinidamente.
Algoritmo: si adems es capaz de determinar que no tiene solucin en un nmero
finito de
pasos.
A partir de un mtodo puede haber ms de un algoritmo. Un algoritmo o
semialgoritmo tambin se puede denominar mtodo de resolucin.
Programa: algoritmo (o semialgoritmo) dispuesto en pasos comprensibles por una
mquina, junto a las estructuras de datos con las que opera.

Anlisis de algoritmos.
Complejidad en tiempo y espacio
Complejidad de un algoritmo: medida de carcter numrico (normalmente en unidades
de tiempo, memoria abstractas u otros factores como nmero de comparaciones,
asignaciones, llamadas, etc. ) de la eficiencia de un algoritmo en tiempo o espacio.
La frmula de la complejidad nos indica el comportamiento. Cuando un algoritmo
tenga complejidad en tiempo de nlogn , la frmula que nos puede dar su duracin se
comportar como sta. La frmula exacta puede estar multiplicada por alguna constante
o contener otra cantidad despreciable : 8nlogn+3n+6.
Hablaremos del comportamiento de un algoritmo mas que del propio valor de la
complejidad. Se llama orden de complejidad para evaluar el comportamiento de la
complejidad de un algoritmo.

Tamao del problema
Variable o expresin en funcin de la cual intentaremos medir la complejidad del
algoritmo.
Suele depender del nmero de datos del problema (en problemas de ordenacin es el
nmero de elementos a ordenar, en matrices puede ser el nmero de filas, columnas o
elementos totales; en cualquier caso se debe elegir la misma variable para comparar
algoritmos distintos aplicados a los mismos datos)
En algoritmos recursivos es el nmero de recursiones o llamadas propias que hace la
funcin.



Tema 1. Eficiencia de Algoritmos. 1
Funcin de complejidad
Funcin que tiene como variable independiente el tamao del problema y que sirve para
medir la complejidad (espacial o temporal).
Mide el tiempo/espacio relativo en funcin del tamao del problema.
El comportamiento de la funcin determina la eficiencia
No es nica para un algoritmo: depende de los datos. Para un mismo tamao del
problema, las distintas presentaciones iniciales de los datos dan lugar a distintas
funciones de complejidad. Es el caso de una ordenacin si los datos estn todos
inicialmente desordenados, parcialmente ordenados o en orden inverso.
Ej: f(n)= 3n
2
+2n+1 , en donde n es el tamao del problema y expresa el tiempo
en unidades de tiempo.

Funciones de complejidad ms interesantes:
La del mejor caso f
m
(n)
La del peor caso f
p
(n), se suele usar por defecto
La que resulta del clculo de la esperanza matemtica: f
a
(n). Es la media de todas las
funciones en todos los casos. Es muy compleja de calcular.








fi funcin del caso i
N nmero de casos
P(i) probabilidad de que se d el caso i

f
m
es interesante para encontrar cotas inferiores para el mal comportamiento
de un algoritmo

En vez de calcular la funcin de complejidad, nos basta con saber su
comportamiento.Las funciones con los comportamientos ms usuales (rdenes de
complejidad):
1, log n, n, n log n, n
2
, n
3
, ..., 2
n
, 3
n
Relacin entre ellas : O(1) < O(log n) < O(n) < O(n log n) < O(n
2
) < ... < O(2
n
) <
O(n 2
n
)

Convenio de Edmonds:
Problema tratable: complejidad polinomial
Problema intratable: complejidad exponencial
Los algoritmos de complejidad mayor que n log n son poco prcticos, conviene
encontrar otros mejores.
Los exponenciales son vlidos para valores pequeos de n



N
fa(n)= fi(n)P(i)
i=1

Tema 1. Eficiencia de Algoritmos. 2
Simbolismos: O, , , o

Son notaciones asintticas, que miden el comportamiento de las funciones de
complejidad para valores suficientemente grandes.
La notacin asnttica tiene una relevancia significativa porque un algoritmo que
sea superior asintticamente suele ser preferible incluso en casos de tamao
moderado.
Cota superior. Notacin O
Dada una funcin f, queremos estudiar aquellas funciones g que a lo sumo crecen
tan deprisa como f. Al conjunto de tales funciones se le llama cota superior de f y lo
denominamos O(f). Conociendo la cota superior de un algoritmo podemos asegurar
que, en ningn caso, el tiempo empleado ser de orden superior al de la cota.

Definicin 1:




f(n) pertenece al orden de complejidad de g(n) si existe c>0 tal que f(n)<=c g(n) a
partir de un n
0
en adelante















El comportamiento de f est acotado por g (es mejor o igual que g).
Las constantes no son significativas a efectos de comportamiento.
O(g(n)): conjunto de todas las funciones acotadas superiormente por g.

Ejemplo:
sea P(n) = a
m
n
m

+ ... + a
1
n + a
0

(polinomio de variable n)
P(n) e O(n
m
)



f(n) e O(g(n)) si - c>0 : f(n) s cg(n)



c g(n)

f(n)




n
0

Tema 1. Eficiencia de Algoritmos. 3

Demostracin :
P(n)=a
m
n
m
+ a
m-1
n
m-1
+ ..+a
1
n + a
0
=
(a
m
+ a
m-1
/n + + a
0
/n
m
) n
m

(a
m
+ a
m-1
/n + + a
0
/n
m
) n
m
<= (a
m
+ a
m-1
+ +a
0
) n
m
= c n
m

//elegimos un caso peor que el real //
para n>=1
Ejemplo : P(n)=a
3
n
3
+ a
2
n
2
+ a
1
n
1
+ a
0
=
(a
3
+ a
2
/n + a
1
/n
2
+ a
0
/n
3
) n
3


P(n)eO(n
3
)
La funcin n
3
es peor que P(n), lo acota asintticamente por arriba.


Propiedades de O:

1. g(n) = O(g(n)) [una funcin es de su mismo orden]
2. c O(g(n)) = O(g(n)) [donde c es una constante]
3. O(g(n))+O(g(n)) = O(g(n))
4. O(g(n)) O(h(n)) = O(g(n) h(n))
5. h(n) O(g(n)) = O(h(n) g(n)) [n O(n
2
)=O(n
3
)]
6. O(g(n))+O(h(n)) = O del mayor
7. O(g(n))-O(g(n)) = O(g(n))

La notacin O la utilizaremos en la bsqueda de cotas superiores (la menor posible)
del comportamiento de una funcin de complejidad en el peor de los casos.
Observacin: Si f(n)=O(n) ; f(n)=O(n
2
) ; f(n)=O(n
3
)
esto es cierto ya que f(n) <= c(g(n)) se toma la menor

Cota inferior. Notacin O

Dada una funcin f, queremos estudiar aquellas funciones g que a lo sumo crecen tan
lentamente como f. Al conjunto de tales funciones se le llama cota inferior de f y lo
denominamos O(f). Conociendo la cota inferior de un algoritmo podemos asegurar que,
en ningn caso, el tiempo empleado ser de orden inferior al de la cota.

Definicin 2:





f(n) pertenece al orden de complejidad de g(n) si existe una constante real positiva
tal que f(n)>= c g(n) a partir de un n
0

O(g(n))= {t(n)/t(n) >=c g(n)} es el conjunto de funciones que tienen como cota
inferior a g(n).


f(n) e O (g(n)) si - c>0 : f(n) cg(n)
Tema 1. Eficiencia de Algoritmos. 4
Propiedades anlogas a las de O. Una funcin puede ser a la vez del orden
O(g(n)) y O(g(n)) y ambas notaciones pueden ser aplicadas a cualquier tipo de
funcin de complejidad (mejor, peor y el medio de los casos).
Se emplea para acotar inferiormente la funcin de complejidad en el mejor de
los casos.
Se toma la mayor de las posibles.
Obtener buenas cotas inferiores es muy dificil, aunque siempre existe una cota
trivial : al menos hay que leer los datos y escribirlos.
Ej: para ordenar n nmeros una cota inferior sera n ; para multiplicar matrices
de orden n, sera n
2
; sin embargo los mejores algoritmos conocidos son n logn
y n
2.8
respectivamente.

Orden exacto. Notacin

Conjunto de funciones que crecen asintticamente de la misma forma.


Definicin 3:




f(n) es del orden de g(n) si existen dos constantes reales positivas tal que
(g(n)) O(g(n))


c
1
g(n) s f(n) s c
2
g(n) a partir de un n
0

Significa que f(n) es tanto O(g(n)) como (g(n)), se ha delimitado perfectamente el
comportamiento de f(n).
(g(n))=O(g(n)) (g(n))
el orden exacto es la interseccin entre O y

Notacin o

Definicin 4:

a) Se dice que f(n) e o(g(n)) para n

f(n) es del orden de o minscula de g(n) en el infinito si f(n)=(n)g(n) a partir de un
n
0
en adelante
(n) es un infinitsimo en n (tiene lmite 0 cuando n)

lim f(n) / g(n) = 0
n

(n) 0 si n
f es despreciable frente a g en el infinito


b) Se dice que f(n) ~ g(n) si f(n)-g(n) = o(g(n)), para n

( f(n) es asintticamente equivalente a g(n))
f(n) e (g(n)) si - c
1
>0, c
2
>0 : c
1
g(n) s f(n) s c
2
g(n)


Tema 1. Eficiencia de Algoritmos. 5
los rdenes de complejidad de f(n) y g(n) son casi el mismo

Definicin formalizada del orden de los rdenes:

O(f(n)) < O(g(n)) si f(n) = o(g(n))
n



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

Regla de la composicin secuencial : P


1
; P
2
es t
1
+ t
2
Por la regla del mximo: O(f(n) + g(n)) = O(max(f(n),g(n)))

Bucles for:
Para i=1 hasta m hacer P(i)

Si m =0 no se ejecuta P(i), pero no es un error.
Siendo t el tiempo necesario para calcular P(i)

Caso sencillo P(i) no depende de i (sin tener en cuenta el control del bucle) :
P(i) se ejecuta m veces, cada una con coste t
Tiempo del bucle: m t , siendo t es una cte

Considerando las sentencias de control del bucle
Se debe tener en cuenta que que un bucle for es una abreviatura de:
i=1
Mientras i<=m hacer
P(i)
i=i+1
Fin_mientras

Consideraremos con coste unitario las siguientes instrucciones:
i<=m
i=1
i=i+1
(ir a ) implcita en el bucle mientras
Si m=0, entonces m t=0 y es incorrecto.
Despreciarlas puede dar lugar a graves errores
Se considera para este algoritmo O(m t) con algn umbral m>1
Se considera O(n)

Caso complejo (t es funcin de i):
Se trata de operaciones aritmticas complejas
Se consideran ms costosas cuanto mayores sean los operandos y
cuanto mayor sea m
Tiempo de calcular una operacin en la iteracin k s c k para k>1
(cada iteracin tarda ms que la anterior):
Tiempo algoritmo s

= =
e =
n
k
c
1
n
1 k
2
) O(n k c k

Contar o no las operaciones como de coste unitario influye bastante

Tema 1. Eficiencia de Algoritmos. 11
Bucles for que comiencen en un valor diferente de 1 o que avancen a pasos
mayores que 1:
(Final-principio)/salto +1

Ejemplo :

para i=5 hasta m paso 2 hacer
P(i)

P(i) se ejecuta (m-5)/2+1 para m>=5

Para que un bucle para tenga sentido, el punto final debera ser tan grande
como el punto inicial menos el paso.


Ejemplo de caso simple/complejo: Clculo del ensimo elemento de la sucesin de
Fibonacci


















Operaciones aritmticas simples.
Tienen un coste constante, acotado superiormente por c.
El coste de las operaciones aritmticas <= c 1
Sin considerar el control del bucle :

Tiempo bucle s

=
=
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)

Das könnte Ihnen auch gefallen