0% encontró este documento útil (0 votos)
85 vistas48 páginas

Tema1 Eficiencia Presentación

Este documento describe conceptos relacionados con la eficiencia de algoritmos. Explica que la complejidad de un algoritmo mide su eficiencia en tiempo y espacio de forma independiente a la máquina. Define las notaciones O, Ω y θ para analizar el orden de complejidad asintótico de los algoritmos y determinar si son eficientes. También cubre temas como el tamaño del problema, las funciones de complejidad y las propiedades de O y Ω.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
85 vistas48 páginas

Tema1 Eficiencia Presentación

Este documento describe conceptos relacionados con la eficiencia de algoritmos. Explica que la complejidad de un algoritmo mide su eficiencia en tiempo y espacio de forma independiente a la máquina. Define las notaciones O, Ω y θ para analizar el orden de complejidad asintótico de los algoritmos y determinar si son eficientes. También cubre temas como el tamaño del problema, las funciones de complejidad y las propiedades de O y Ω.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 48

METODOLOGA DE LA

PROGRAMACIN
Miguel ngel Cuenca Navarro
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 2
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 3
MDULO A : 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 factibilidad 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: Semialgoritmo que 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,
independiente de la maquina.
La frmula de la complejidad nos indica el comportamiento.
Ejemplo: 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
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 4
multiplicada por alguna constante o contener otra cantidad
despreciable : 8nlogn+3n+6.
Hablaremos del comportamiento de un algoritmo ms 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.
Rara vez se eligen dos o ms variables como tamao del
problema.
Funcin de complejidad
Es una funcin matemtica.
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 la representacin 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.
Ejemplo: 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, y siempre que
no se especifique nada nos referimos a esta.
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 5
- 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 posibles
P(i) probabilidad de que se d el caso i
fp(n) y fa(n) se suelen comportar de forma anloga por tanto se
puede tomar fp (n) como f(n).
f
m(n)
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, nlog n, n
2
, n
3
, ..., 2
n
, 3
n, ...........
Que como representantes de distintos ordenes de comportamiento
tienen la siguiente relacin entre ellas
:
O(1) < O(log n) < O(n) < O(nlog n) < O(n
2
) < ... < O(2
n
) <
O(n2
n
)
Convenio de Edmonds:
Problema tratable: complejidad polinomial
Problema intratable: complejidad exponencial
Los algoritmos de complejidad mayor que nlog n son poco
prcticos, conviene encontrar otros mejores.
Los exponenciales son vlidos para valores pequeos de n
Simbolismos: O, ,
Son notaciones asintticas, que miden el comportamiento de
las funciones de complejidad para valores suficientemente
grandes, o lo que es lo mismo se trata del comportamiento de
las funciones en el limite.
N
fa(n)= fi(n)P(i)
i=1
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 6
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)<=cg(n) a partir de un n
0
en adelante
Geomtricamente:
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, entre ellas est f.
f(n) O(g(n)) si c>0 / f(n) cg(n)

cg(n)
f(n)

n0
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 7
Ejemplo:
Sea P(n) = a
m
n
m

+ ... + a
1
n + a
0
(polinomio de variable n)
P(n) O(n
m
)
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
= cn
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
(a
3
+ a
2
+ a
1
+ a
0
) n
3
c. n
3
P(n)O(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. cO(g(n)) = O(g(n)) [donde c es una constante]
Ej : 2 O(n
2
) = O(n
2
)
3. O(g(n))+O(g(n)) = O(g(n))
Ej: O(n
2
) + O(n
2
) = O(n
2
)
4. O(g(n))O(h(n)) = O(g(n)h(n))
Ej: O(n) O(n
2
) = O(n n
2
) = O(n
3
)
5. h(n)O(g(n)) = O(h(n)g(n))
Ej: nO(n
2
)=O(n
3
)

6. O(g(n))+O(h(n)) = O del mayor =O(mx(g(n), h(n))
Ej: O(n) + O(n
2
) = O(n
2
)
como es constante no
depende de n
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 8
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 de
las cotas superiores.
Cota inferior. Notacin
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 (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 omega de complejidad de g(n) si
existe una constante real positiva tal que f(n)>= cg(n) a partir
de un n
0
(g(n))= {t(n)/t(n) >=cg(n)} es el conjunto de funciones
que tienen como cota inferior a g(n).

Propiedades anlogas a las de O. Una funcin puede ser a


la vez del orden (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 cotas inferiores las posibles.
Obtener buenas cotas inferiores es muy difcil, aunque
siempre existe una cota trivial: al menos hay que leer los
datos y escribirlos.
f(n) (g(n)) si c>0 / f(n) cg(n)
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 9
Ejemplo: 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 nlogn y n
2.8
respectivamente.
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 10
Orden exacto. Notacin
Conjunto de funciones que crecen asintticamente de la misma
forma.
Definicin 3:
f(n) es del orden theta de g(n) si existen dos constantes reales
positivas tal que
(g(n)) O(g(n))
c
1
g(n) f(n) 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
Grficamente :
f(n) (g(n)) si c
1
>0, c
2
>0 / c
1
g(n) f(n) c
2
g(n)
Tiempo


f(n)


n
O(n)
(n)
(n)
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 11
MEDIDA = ANLISIS DE LOS ALGORITMOS
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.
Aplicado a distintas mquinas 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)<=cT
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, para mejorar dicho tiempo se debera
cambiar el algoritmo.
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 cT(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)
Es posible realizar el estudio de la complejidad de un algoritmo
slo en base a un conjunto reducido de sentencias, las que ms
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 12
influyen en el tiempo de ejecucin, las restantes se pueden
despreciar.
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).
Busca el elemento c en el vector a y devuelve el lugar donde se
encuentra
(*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.
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;
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 13
Si el elemento a buscar es menor que el primer elemento de a.
No se realizar 5 y 6 sino 5 y 7 que para el caso es lo mismo.
Caso peor:
El elemento no est en el vector y es el mayor de todos ellos.
(*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
2 6 ) (
1 2 4 ) 1 ( 6 1 1 2 4 6 1 1 2 ) 4 )) 2 4 ( (( 1 ) (
1
1
1
1
+
+ + + + + + + + + + + + +

n n T
n n T
n
i
n
i
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
Estoy usando hasta n, por tanto resto n
T(n)= 1+((
i=1,(n-1)/2
(4+2))+2)+2+1
while
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.
cuando sale
hace las 2
comparaciones
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 14

+ + + + + + + +

+ + + + +
2
1 n
1 i
3 3n 1 2 2 3 n 3 1 1 2 2 )
2
1 n
( 6 1 1 2 2 6 1 ) n ( T
Ejemplo 2:
Utilizando rdenes de complejidad.
(*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 ( ) (
Orden constante en la comparacin que no entra al mientras.
Peor caso :
array totalmente desordenado.
) ( 1
2
1
2
1
2
2
1
2
n
i 1) - i (1 ) 1 1 ( ) (
2 2
2
2
n
2 i
n
2 i
2 1
1
n O n n
n n n
n f
n
i i j
p
+
+

+
+ +


Caso medio : Del mientras
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 ( ) (
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
Para llegar a esta conclusin
es poco importante si se da
una vuelta ms o menos
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 15
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
0
) (
) (
lim >

cte
n g
n f
n
(f(n)=(g(n))
(O(f)=O(g) y (f)=(g))
O lo que es lo mismo, las dos funciones tienen el mismo orden.
Se dice tambin que f y g son equivalentes.
Si
0
) (
) (
lim

n g
n f
n

'



) ( ) ( ) (
) ( ) ( ) (
g f pero f g
f O g pero g O f O
Ej : (3n
2
) = (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
En realidad
x
x
x x
n N
I
i
1
1

Suma de logaritmos:
n) log O(n log i log
1

i
n
i
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 16
En realidad
[ ] 1 lg 1 1 lg lg lg lg lg lg
1
1
1 1
1
+
1
]
1

n n n n n n i i i di i i idi i
n
n
n n
n
i
Suma de fracciones :
Euler de cte. la e siendo n) log O( e n log
i
1
n
1 i
+

>
n
i
c
i
1
1 cte. es c si O(1)
1


O(1)
n
1
cte. x siendo O(1)
x
1
n
1 i
n
1 i
i

Es la inversa de un polinomio
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
El anlisis de algoritmos trata de que se diseen
los algoritmos lo ms eficiente posible.
Cuando algoritmos distintos, resuelven el mismo problema debemos
decidir cual es el ms adecuado para el problema en si.
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 17
Despus de determinar la eficiencia de los distintos algoritmos es
posible tomar una decisin con la mxima informacin.
NO EXISTE UNA FORMULA MGICA para analizar la eficiencia
de los algoritmos, pero existen tcnicas ms o menos bsicas para
enfrentarse a las estructuras de control y a las funciones de
recurrencia
Ejercicios.
a) De las siguientes afirmaciones, indicar cuales son ciertas y cuales no:
1.- n
2
O(n
3
)
2.- n
3
O(n
2
)
3.- 2
n+1
O(2
n
)
4.- (n+1)!O(n!)
5.- f(n)O(n)2
f(n)
O(2
n
)
6.- 3
n
O(2
n
)
7.- log nO(n
1/2
)
8.- n
1/2
O(log n)
9.- n
2
(n
3
)
10.- n
3
(n
2
)
11.- 2
n+1
(2
n
)
12.- (n+1)!(n!)
13.- f(n)(n)2
f(n)
(2
n
)
14.- 3
n
(2
n
)
15.- log n(n
1/2
)
16.- n
1/2
(log n)
Soluciones
1.- n
2
O(n
3
)
Cierto
Pues
2
3
0
lim
n
n
n

2.- n
3
O(n
2
)
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 18
Falso
Pues
2
3
0
lim
n
n
n

3.- 2
n+1
O(2
n
)
Cierto
Pues
1
2
0
2
lim
n
n
n
+

1
2
2
2
lim
n
n
n
+

4.- (n+1)!O(n!)
Falso
Pues
!
0
( 1)!
lim
n
n
n

+
5.- f(n)O(n)2
f(n)
O(2
n
)
Falso
Por ejemplo, sea f(n)=3n; claramente f(n)O(n) pero sin embargo
3
2
0
2
lim
n
n
n

con lo cual 2
3n
O(2
n
)
De forma ms general resulta ser falso para cualquier funcin lineal
de la forma f(n)=n con >1, y cierto para f(n)=n con 1.
6.- 3
n
O(2
n
)
Falso
Pues
2
0
3
lim
n
n
n

7.- log nO(n


1/2
)
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 19
Cierto
Pues
1
2
log
0
lim
n
n
n

8.- n
1/2
O(log n)
Falso
Pues
1
2
log
0
lim
n
n
n

9.- n
2
(n
3
)
Falso
Pues
2
3
0
lim
n
n
n

10.- n
3
(n
2
)
Cierto
Pues
2
3
0
lim
n
n
n

11.- 2
n+1
(2
n
)
Cierto
Pues
1
2
0
2
lim
n
n
n
+

12.- (n+1)!(n!)
Cierto
Pues
!
0
( 1)!
lim
n
n
n

+
13.- f(n)(n)2
f(n)
(2
n
)
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 20
Falso
Por ejemplo sea f(n)=(1/2)n; claramente f(n)(n) pero sin embargo
1
2
2
0
2
lim
n
n
n

, con lo cual 2
(1/2)n
(2
n
).
De forma ms general, resulta ser falso para cualquier funcin
f(n)=n con <1, y cierto para f(n)=n con 1
14.- 3
n
(2
n
)
Cierto
Pues
2
0
3
lim
n
n
n

15.- log n(n


1/2
)
Falso
Pues
1
2
log
0
lim
n
n
n

16.- n
1/2
(log n)
Cierto
Pues
0
log
lim
2
1


n
n
n
b) Sea a una constante real, 0<a<1. Usar las relaciones y = para
ordenar los rdenes de complejidad de las siguientes funciones: nlog n,
n
2
log n, n
8
, n
1+a
, (1+a)
n
, (n
2
+8n+log
3
n)
4
, n
2
/log n, 2
n
.
Solucin
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 21
Respecto al orden de complejidad O tenemos que:
O(nlog n) O(n
1+a
) O(n
2
/log n) O(n
2
log n)
O(n
8
) = O((n
2
+8n+log
3
n)
4
) O((1+a)
n
) O(2
n
)
Puesto que todas las funciones son continuas, para comprobar que
O(f)O(g) basta ver que
0
) (
) (
lim

n g
n f
n
, y para comprobar que O(f)=O(g),
basta ver que
) (
) (
lim
n g
n f
n
es finito y distinto de 0.
Respecto al orden de complejidad , obtenemos que:
(nlog n) (n
1+a
) (n
2
/log n) (n
2
log n)
(n
8
) = ((n
2
+8n+log
3
n)
4
) ((1+a)
n
) (2
n
)
Para comprobar que (f) (g), basta ver que
0
) (
) (
lim

n f
n g
n
, y para
comprobar que (f) = (g), basta ver que
) (
) (
lim
n g
n f
n
es finito y distinto de
0 puesto que al ser las funciones continuas tenemos garantizada la
existencia de los limites.
En lo relativo al orden de complejidad , al definirse como interseccin de
los rdenes O y , slo tenemos asegurado que:
(n
8
) = ((n
2
+8n+log
3
n)
4
)
siendo los rdenes del resto de las funciones conjuntos no comparables.
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 22
c) CONST n= ;
TYPE vector = ARRAY [1..n] OF INTEGER
PROCEDURE Algo1(VAR a:vector);
VAR i, j:CARDINAL; temp:INTEGER;
BEGIN
FOR i:=1 TO n-1 DO
FOR j:=n TO i+1 BY 1 DO
IF a[j-1] > a[j] THEN
temp:=a[j-1];
a[j-1]:=a[j];
a[j]:=temp;
END
END
END
END Algo1
Calcular sus tiempos de ejecucin en el mejor, peor, y en el caso
medio, as como dar cotas asintticas O, y para las funciones
anteriores.
Solucin
BEGIN
FOR i:=1 TO n-1 DO 3 OE, asig, resta y comp
FOR j:=n TO i+1 BY 1 DO 3 OE, asig, suma y comp
IF a[j-1] > a[j] THEN 4 OE, rest, 2acc y comp
temp:=a[j-1]; 3 OE
a[j-1]:=a[j]; 4 OE
a[j]:=temp.; 2 OE
END
END
END
En el caso mejor a[j-1] > a[j] ser siempre falsa y no se ejecutarn
nunca las tres lneas siguientes. As el bucle ms interno realizar n-i
iteraciones, cada una de ellas con 4 OE del interior ms las 3 OE se el
mismo. Por tanto el bucle ms interno realiza un total de
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 23
( ) 3 ) ( 7 3 1 7 3 3 4
1 1
+ +

,
_

,
_

+

+ +
i n
n
i j
n
i j
OE
A su vez, el bucle externo repetir esas 7(n-i)+3 OE en cada iteracin, lo
que hace que el nmero de OE del algoritmo sea:
( ) ( ) 3
2
5
2
7
3 ) 3 3 7 ( ) (
2
1
1
+ +
,
_

+ +

n n i n n T
n
i
En el caso peor la comparacin ser siempre cierta, y las lneas interiores se
ejecutarn todas las iteraciones. Por tanto, el bucle ms interno realizar
( ) 3 ) ( 16 3 3 9 4
1
+ +

,
_

+ +

+
i n
n
i j
OE
El bucle externo realizar aqu el mismo nmero de iteraciones que en el
caso anterior, por lo que el nmero de OE en este caso es:
( ) ( ) ( ) 3 2 8 3 3 3 16 ) (
2
+

,
_

+ +

n n i n n T
En el caso medio, la condicin ser verdadera con probabilidad . As las
lneas interiores se ejecutarn en la mitad de las iteraciones del bucle ms
interno, y por lo tanto se realizar:
( ) 3
2
23
3 ) 3 9
2
1
4 (
1
+ +

,
_

+
,
_

+
i n
n
i j
OE
El bucle externo realiza el mismo nmero de iteraciones que en el caso
anterior, por lo que el nmero de OE en este caso es:
( ) 3
4
1
4
23
3 3 3
2
23
) (
2
1
1
+ +

,
_

,
_

+
,
_

n n i n n T
n
i
En todos los casos los tiempos de ejecucin son polinomios de grado 2, por
tanto la complejidad del algoritmo es cuadrtica, independientemente de
qu caso se trate.
Miramos el cdigo del algoritmo, no lo que hace el algoritmo.
El algoritmo ordena de forma creciente un vector por el mtodo de la
Burbuja. Hemos visto que sus casos mejor, peor y medio se producen
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 24
respectivamente cuando el vector est inicialmente ordenado de forma
creciente, decreciente y aleatoria.
d) CONST n= ;
TYPE vector = ARRAY [1..n] OF INTEGER
PROCEDURE Algo2(VAR a:vector; c:INTEGER):CARDINAL;
VAR inf, sup, i:CARDINAL;
BEGN
inf:=1; sup:=n; (1)
WHILE (supinf) DO (2)
i:=(inf+sup) DIV 2; (3)
IF a[i] =c THEN RETURN i (4)
ELSIF c<a[i] THEN sup:=i-1 (5)
ELSE inf:= i+1 (6)
END (7)
END; (8)
RETURN 0; (9)
END Algo2
Calcular sus tiempos de ejecucin en el mejor, peor, y en el caso
medio, as como dar cotas asintticas O, y para las funciones
anteriores.
Solucin
En (1) se ejecutan dos asignaciones 2 OE
En (2) se efecta una comparacin 1 OE
De (3) a (6) el cuerpo del bucle se realizan 3, 2+1, 2+2 y 2 OE
respectivamente
El bucle tambin termina si se verifica la condicin de (4)
En (9) se realiza una OE, que se llega cuando la condicin del bucle
WHILE deja de ser cierta
En el mejor de los casos se efectan (1), (2), (3) y (4)
Por tanto T(n)=2+1+3+3=9
En el peor de los casos se efecta (1) y despus se repite el bucle
hasta que su condicin sea falsa, acabando la funcin al ejecutarse
(9). Cada iteracin del bucle est compuesta de (2) a (8) junto con
una ejecucin adicional de (2) cuando sale del bucle. En cada
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 25
iteracin se reducen a la mitad los elementos a considerar, por lo que
el bucle se repite log n veces.
Por tanto
( ) 4 log 10 1 1 2 2 2 3 1 2 ) (
log
1
+ +

,
_

,
_

+ + + + +

n n T
n
j
En el caso medio, el bucle puede repetirse desde una vez hasta log n,
puesto que en cada iteracin se divide por dos el nmero de
elementos considerados. Si se repitiese una sola vez, es que el
elemento ocupara la posicin n/2, lo que ocurre con una
probabilidad 1/(n+1). Si se repitiese dos veces es que el elemento
ocupara la posicin n/4 o la 3n/4, lo que ocurre con probabilidad
1
2
1
1
1
1
+

+
+
+ n n n
. En general si se repitiese i veces es que el
elemento ocupara alguna de las nk/2
i
posiciones, con k impar y
1k<2
i
. Por tanto el bucle se repite i veces con probabilidad
1
2
1
+

n
i
Por tanto el nmero medio de veces que se repite el ciclo vendr dado
por:
1
1 log
1
2
log
1
1
+
+

n
n n n
n
i
n
i
i
Luego la funcin ejecuta (1) y despus el bucle se repite ese nmero
medio de veces, saliendo por la instruccin RETURN en (4).
Por tanto
( ) ( )
1
1 log
8 9 3 3 1 2 2 3 1
1
1 log
2 ) (
+
+
+ + + + + + +
,
_

+
+
+
n
n n n
n
n n n
n T
En resumen tenemos que el tiempo de ejecucin en el mejor de los
casos es constante. Y para el caso peor y medio, la complejidad
resultante es de orden (log n) puesto en el caso peor y en el caso
medio
n
n T
n
log
) (
lim

es 10 y 8 respectivamente por tanto el limite es
una constante finita y distinta de cero en ambos casos.
Tcnicas bsicas para el anlisis de los algoritmos
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 26
El anlisis se realiza desde dentro hacia afuera.
1.- Tiempo para instrucciones individuales, es constante y no depende
de n, generalmente.
2.- Se combinan instrucciones (los tiempos calculados) 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 o desde)
Suponemos n el tamao del problema.
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: mt , siendo t una constante
Considerando las sentencias de control del bucle
Se debe tener en cuenta que un bucle for es una abreviatura de:
i=1 (1)
Mientras i<=m hacer (2)
P(i) (3)
i=i+1 (4)
Fin_mientras (5)
Consideraremos con coste unitario las siguientes
instrucciones:
i<=m Comprobacin del bucle
i=1 Asignacin
i=i+1 Asignacin
(ir a ) implcita en el bucle mientras (fin_mientras)
Si m=0, entonces mt=0 y es incorrecto.
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 27
Suponiendo que c es una cota superior del tiempo que necesitan cada una
de las anteriores instrucciones, el tiempo requerido por el bucle estar
acotado superiormente ( ei, es menos) que:
Tbucle c + (m+1)c + mt +mc + mc = c + mc + c + mt + mc + mc =
(1) (2) (3) (4) (5)
Tbucle (3c + t)m + 2c
Si c es despreciable frente a t, tenemos que esta justificado que
Tbucle mt donde si m = 0 mt = 0
Despreciar las sentencias de control del bucle puede dar lugar
a graves errores
Se considera para este algoritmo O(mt) con algn umbral
m1
Se considera O(n) Cuando m y t se consideran funciones de
n, cuando exista un umbral n
0
talque m 1 siempre que n n
0
Caso complejo (t es funcin de i):
Es decir, el tiempo para P(i) vara en funcin de la
iteracin i (ei. t(i)). Despreciando el tiempo del control
del bucle, que suele ser correcto siempre que m 1, y
entonces el tiempo del bucle es

m
i
i t
1
) (
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 ck para
k1 (cada iteracin tarda ms que la anterior):
Tiempo algoritmo


n
k
c
1
n
1 k
2
) O(n k c k
Contar o no las operaciones como de coste unitario influye
bastante, pues pasamos de O(n) a O(n
2
)
Bucles for que comiencen en un valor diferente de 1 o que
avancen a pasos mayores que 1: Usaremos al la regla general para
saber la veces que se ejecuta el bucle que viene dada por:
(Final-principio)/salto +1
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 28
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
Consideremos los dos casos, con operaciones aritmticas simples y el caso
de que las operaciones aritmticas no tengan un coste constante.
Operaciones aritmticas simples.
Tienen un coste constante, acotado superiormente por c.
El coste de las operaciones aritmticas <= c1
Sin considerar el control del bucle :
Tiempo bucle

n
1 k
O(n) 1 c
Las operaciones aritmticas son ms costosas cuanto mayores
son los operandos.
Si consideramos los tamaos de los operandos.
Para que el coste de las operaciones aritmticas no sea de coste
constante.
Por ejemplo la instruccin j = i + j se vuelve ms costosa a cada
pasada del bucle.
Algoritmo iterativo
f0 =0
f1=1
fn = fn-1 + fn-2 para n>2 0,1,1,2,3,5,8,13,21,.........
funcion Fibonacci(n)
i=1
j=0 O(1)
para k=1 hasta n hacer
{
j=i+j O(1)
i=j-1
}
devolver j
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 29
En la k-sima iteracin, el tiempo de clculo es k, acotado por
T
calculo operaciones
ck para k>=1, sin considerar el control del
bucle y las instrucciones que le preceden :
Tiempo algoritmo
) (
2
1) - n(n
c k c k
2
1
n
1 k
n O c
n
k



Por tanto el considerar o no coste unitario en las operaciones
aritmticas implica una diferencia crucial.
Algoritmo recursivo
Funcin fibo(n)
Si n < 2 entonces devolver n (1)
Sino devolver fibo(n-1) +fibo(n-2) (2) y (3)
Supongamos que una llamada a fibo(n) requiere un tiempo T(n)
(1)...Necesita un tiempo constante a
(2) y (3) necesitan respectivamente T(n-1)
y T(n-2) y llamando f(n) al tiempo de la
parte No recursiva de hacer la suma y el
control del si tendremos que el
tiempo del algoritmo viene dado por:

'

+ +

caso otro en n f n T n T
n n si a
n T
) ( ) 2 ( ) 1 (
1 0
) (
Bucles Mientras y Repetir:
Los dos se tratan de forma anloga. No existe una forma sencilla
de conocer el nmero de iteraciones
Para realizar su calculo utilizamos dos tcnicas:
1. Tcnica estndar . Hallar una funcin de las variables
implicadas, cuyo valor se decremente en cada iteracin,
hasta que no pueda decrementarse ms.
2. Tcnica alternativa . Tratarlo como un algoritmo
recursivo
Ejemplo: Bsqueda binaria: Encontrar un elemento x en un
vector T[1..n] ordenado crecientemente, dando su posicin en
el array. Suponemos que x se encuentra en le vector T por lo
menos una vez.
Usaremos las dos tcnicas de calculo para resolver el ejemplo.
i=1;j=n
mientras i<j hacer
k=(i+j)/2 O(1)
caso_de
x<T[k]: j=k-1
x=T[k]: i=k ; j=k O(1)
x>T[k]: i=k+1
fin_caso
fin_mientras
devolver i
1 X n
I k j
X X
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 30
Solucin buscando una funcin: La funcin ser el nmero de
elementos a examinar en T en cada pasada, que llamaremos d
y que inicialmente ser n.
<peor caso>
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
:
Despreciando la constante m = lg n, que son las vueltas que
da O(lg 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. Por
tanto en cada vuelta quedan ji+1 elementos a
considerar para que el bucle termine.
t(d) es el tiempo mximo para terminar el bucle. d
elementos que quedan por considerar, con d=j-i+1.
t(d) tiempo-cte-una-iteracin + t(d/2)
Teniendo en cuenta que se requiere un tiempo constante c para determinar
que el bucle ha terminado, cuando d=1 tendremos que

'

caso otro en
d
t b
d si c
d t
. )
2
(
1
) (
Llamada ec. de recurrencia que al resolverla:
t(n) O(log n)
Otros:
Sentencias if
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 31
IF C THEN
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.
EJERCICIOS
Ejercicios del 1 al 6 de ejercicios propuestos del tema1
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
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 32
Ecuaciones caractersticas
Cambio de variable
Transformacin de intervalo
Expansin de la recurrencia:
Se obtiene una frmula general a partir de varios valores
Ejemplo: funcin factorial
funcion factorial(n:integer): integer
if n 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) n2 T(n)=2c+T(n-2) n2
T(n-2)=c+T(n-3) n3 T(n)=3c+T(n-3) n3
...
T(n)=ic+T(n-i) ni 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 1 : hemos expresado T(n) sin utilizar otro trmino en T
Nota 2: 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
1 si n<=1
c+T(n-1) si n>1
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 33
Tienen la forma : a
0
t
n
+ a
1
t
n-1
+...+ a
k
t
n-k
= 0 (e-1)
Donde:
t
i
incgnitas (representan el 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, sin embargo estudiando estas se podrn resolver las no
homogneas.
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, que se llama
ecuacin caracterstica o polinomio caracterstico
Ejemplo: funcin FibRec
<buscamos transformar la recurrencia en polinomio aplicando
el teorema fundamental del lgebra>
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 caracterstica 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
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
tn = tn-1 + tn-2 tn- tn-1 - tn-2 = 0 , se trata de una recurrencia homognea lineal de coeficientes constantes
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 34
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)
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
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
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 35
Clculo de c
1
y c
2
:
c2= -c1
c1 r1 c1r2 = 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
2
5 1
t
: es solucin la luego primero, el es mayor trmino El
2
5 1
5
1
2
5 1
5
1
t

,
_

,
_

,
_

Se trata de una recurrencia exponencial


Solucin ejemplo prctico 2:
t
n
=
0 n=0
5 n=1
3tn-1+4tn-2 en otro caso
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 36
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 + 4c
2
=5 n=1
c
1
=-1 c
2
=1
t
n
= 4
n
(-1)
n
(4
n
)
Nota : los signos negativos no tienen sentido en un caso real.
Races mltiples:
Cuando el polinomio caracterstico tiene races 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
1i k y 1j m
i
se determinan con las
condiciones iniciales
Ejemplo:
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:
n si n=0,1,2
5tn-1 - 8tn-2 + 4tn-3 en otro caso
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 37
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)
r
2
=2(m
2
=2)
Solucin general : t
n
=c
1
1
n
+ c
2
2
n
+ c
3
n2
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
=-21
n
+ 22
n
+ -0.5n2
n
(2
n
n)
Nota : cuando calculamos las constantes, podemos hablar de en vez de
O.
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
=nr
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 races mltiples ms las races de multiplicidad
simple.
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 38
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. De dos formas
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 constantes se determinan con las condiciones iniciales
y con la propia recurrencia.
Ejemplo de solucin con habilidad matemtica [1]:
t
n
2t
n-1
= 3
n
[a]
b=3
p(n)=1 pol. grado 0=d
t
n
=2t
n-1
+3
n
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)=0
Solucin general : t
n
=c
1
2
n
+ c
2
3
n
[x]
Clculo de las constantes:
La solucin general de [a] se puede dar como una funcin de t
0
t
1
=2t
0
+3
Se simula t
1
en [a] y se sustituye en [x]
t
0
=c
1
+c
2
n=0
t
1
=2c
1
+3c
2
=2t
0
+3 n=1
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 39
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
(3
n
)
es independiente de las condiciones iniciales
Ejemplo de aplicacin del polinomio 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) O(2
n
), pero al calcular las
constantes obtendramos un orden ms exacto ()
t
0
=0 (condicin inicial)
t
1
=2t
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) (2
n
)
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.
0 si n=0
2t(n-1) + 1 en otro caso
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 40
-Recurrencias no homogneas. Ejemplo con races mltiples:
t
n
= 2t
n-1
+ n [a]
t
n
- 2t
n-1
= n t
n
- 2t
n-1
= b
n
p(n) t
n
- 2t
n-1
=n1
n

{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
0 t
n
0 para todo n t
n
(2
n
)
para obtener las constantes sustituimos [b] en [a]
n= t
n
-2t
n-1
= (c
1
2
n
+ c
2
1
n
+ c
3
n1
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 c2=2c3 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
(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
(recurrencia original)
t
1
= 2t
0
+ n t
2
= 2t
1
+ n = 2(2t
0
+n) + n = 4t
0
+ 3n ...........
Para obtener el orden exacto de t
n
a veces es
imprescindible conocer los valores de las constantes, pues
no siempre se puede obtener de la ecuacin general.
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
1 si n=0
4tn-1 2
n
en otro caso
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 41
Solucin general : t
n
= c
1
4
n
+ c
2
2
n
[a]
En principio t
n
(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)
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
(2
n
)
Ejemplo: t
n
2t
n-1
= (n+5)3
n
n1
_._._._._
Tenemos que b=3 y p(n)=n+5 con grado d=1
Mediante manipulacin matemtica para transformarla en recurrencia
homognea.
1.- Sustituimos n por n-1 y multiplicamos por 6
-6t
n-1
+12t
n-2
= -6(n+4)3
n-1
2.- Sustituimos n por n-2 y multiplicamos por 9
9t
n-2
18t
n-3
= (n+3)3
n-2
9
Sumamos las tres ecuaciones y obtenemos la recurrencia homognea
t
n
8t
n-1
+ 21t
n-2
18t
n-3
= 0
Por tanto el polinomio caracterstico es x
3
8x
2
+ 21x 18 = 0 = (x-2)(x-3)
2
La solucin va a tener la forma:
t
n
= c
1
2
n
+ c
2
3
n
+ c
3
n3
n
Toda solucin de valores para c
1
, c
2
, c
3
proporciona una solucin a la
recurrencia homognea. Sin embargo la recurrencia original impone
restricciones a estas constantes, por que:
t
1
= 2t
0
+ 18
t
2
= 2t
1
+ 63 = 4t
0
+ 99
Luego la solucin general se calcula con:
n = 0 c
1
+ c
2
= t
0
n = 1 2c
1
+ 3c
2
+ 3c
3
= 2t
0
+ 18
n = 2 4c
1
+ 9c
2
+ 1c
3
= 4t
0
+ 99
Resolviendo el sistema: c
1
= t
0
9; c
2
= 9; c
3
= 3
La solucin general de la recurrencia original es:
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 42
t
n
=(t
0
9)2
n
+ (n+3)3
n+1
t
n
(n3
n
) independientemente de la
condicin inicial
Otra forma de obtener la solucin general es sustituir la ecuacin
t
n
= c
1
2
n
+ c
2
3
n
+c
3
n3
n
en la ecuacin t
n
2t
n-1
= (n+5)3
n
y obtenemos la ecuacin siguiente: (n+5)3
n
= c
3
n3
n-1
+ (2c
3
+ c
2
)3
n-1
Por tanto:
t
0
= c
1
2
0
+ c
2
3
0
+c
3
03
0
= c
1
+ c
2
t
1
= c
1
2 + c
2
3 +c
3
3
t
2
= c
1
2
2
+ c
2
3
2
+c
3
23
2

Y como t
n
= 2t
n-1
+(n+5)3
n
t
1
= 2t
0
+63 = 2t
0
+ 18
Otras: 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) O(n2
n
)
para saber si es (n2
n
) tenemos que calcular las constantes
(...), necesitamos saber si c
4
>0.
sustituyendo la sol. general en la recurrencia original :
n + 2
n
= (2c
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

0 si n=0
2tn-1 + n + 2
n
en otro caso
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 43
c
4
=1 c
1
= -2 c
2
= -1 c
3
= ?
t
n
(n2
n
)
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) 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=3c
1
+2c
2
=5 n=2
c
1
=3; c
2
= -2; T(n) = 3n
log3
2n , siendo n potencia de 2
T(n) (n
lg 3
) siendo n potencia de 2
Ejemplo 2: (no se puede aplicar el caso general)
1 si n=1
3t(n/2)+n si n es potencia de 2, n>1
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 44
T(n) = 2T(n/2) + nlg n siendo n potencia de 2
t
i
= T(2
i
) = 2T(2
i-1
) + 2
i
i = 2t
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) O(nlg
2
n) siendo n potencia de 2
para obtener las constantes sustituimos en la recurrencia
original :
nlgn=T(n)-2T(n/2)
nlgn =(c
1
n+c
2
lgnn+c
3
nlg
2
n)-
2(c
1
(n/2)+c
2
lg(n/2)(n/2)+c
3
(n/2)lg
2
(n/2))
nlgn =c
1
n+c
2
lgnn+c
3
nlg
2
n c
1
n-c
2
nlg(n/2)-c
3
nlg
2
(n/2)
nlgn =c
2
nlgn+c
3
nlg
2
n-c
2
n(lgn-lg2)-c
3
n(lg n-lg2)
2

nlgn=c
2
nlgn+c
3
nlg
2
n-c
2
nlgn+c
2
n-c
3
n(lg
2
n+lg
2
2-2lgnlg2)
nlgn = c
2
n - c
3
n + 2c
3
nlg n = (c
2
c
3
)n + 2c
3
nlg n
igualando coeficientes : c
2
c
3
= 0; 2c
3
= 1
c
2
=c
3
=
T(n) (nlg
2
n)
Caso general:
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 45
n
0
1; l 1; b 2; k 0 enteros; c>0 real.
T:NR
+
no decreciente
T(n) = l T(n/b) + cn
k

n >n
0
1 , n/n
0
es potencia exacta de b, es decir,
n {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
= lt
i-1
+ cn
0
k
b
ik
t
i
lt
i-1
= cn
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/n
0
)
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
(a)
Para conocer las constantes :
sustituimos (a) en la recurrencia original
cn
k
= T(n) lT(n/b)
cn
k
= c
3
n
log
b
l
+ c
4
n
k
l(c
3
(n/b)
log
b
l
+ c
4
(n/b)
k
)
cn
k
= cn
k
= c
3
n
log
b
l
+ c
4
n
k
lc
3
( n
log
b
l
/ b
log
b
l
) lc
4
(n
k
/ b
k
)
cn
k
= c
3
n
log
b
l
+ c
4
n
k
lc
3
( n
log
b
l
/ l
log
b
b
) lc
4
(n
k
/ b
k
)
cn
k
= c
3
n
log
b
l
+ c
4
n
k
lc
3
( n
log
b
l
/ l) lc
4
(n
k
/ b
k
)
cn
k
= c
4
n
k
lc
4
(n
k
/ b
k
)
log
b
b
k
=k , l
logbn
=n
logbl
c3= c
1
/n
0
log
b
l
, c
4
= c
2
/n
0
k
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 46
cn
k
= c
4
n
k
(1- ( l/b
k
))
k
b
l
c
c

1
4
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) (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) (n
k
).
Matemticamente, si tenemos uns f. condicionada a
potencias, logaritmos o polinomios y es creciente, se
puede eliminar la condicin.]
2. si l>b
k

c
4
<0 y k< log
b
l c
3
>0 c
3
n
logbl
dominante
T(n) (n
logbl
| n/n
0
sea potencia de b)
Como T(n) es no decreciente T(n) (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) (n
k
log
b
n)
Resumen:
T(n) = lT(n/b) +cn
k
T(n) =
(n
k
) si l<b
k

(n
k
log n) si l=b
k

(n
logbl
) si l>b
k

METODOLOGA. Tema 1. Eficiencia de Algoritmos. 47
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]
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
2u
i-1

i=c
1
2
i
+ c
2
1
i
+ c
3
i1
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
2c
3
(i-1)
i= - c
2
+ c
3
(i 2(i-1)) = -c
2
+ c
3
( -i +2)
i= 2c
3
c
2
c
3
i
c
3
= -1
c
2
=2c
3
= -2
1/3 si n=1
nT
2
(n/2) en otro caso
METODOLOGA. Tema 1. Eficiencia de Algoritmos. 48
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
c11
/ (14) =1/3
c
1
=lg
2
(4/3)
c
1
=lg 4 lg3 = 2 - lg3 = c
1
T(n) = 2
(2-lg3)n
/ (4n) = 2
2n
/ (4n2
nlg3
) = 2
2n
/ (4n3
nlg2
)
T(n) =2
2n
/ 4n3
n
, despreciando el 4 por ser cte. :
T(n) O((4/3)
n
/n)

También podría gustarte