Title: Curso 20052006
1Eficiencia de los algoritmos
- Curso 2005/2006
- José A. Gallud
- Daniel García
- José Moya
21. Concepto y análisis de algoritmos
- Métodos de resolución, algoritmos y programas
- Existencia frente a factibilidad de una solución
- Método de resolución de un problema P
descripción de pasos discretos, basados en unos
fundamentos y resultados teóricos, de forma que
la realización de estos pasos, junto a unos datos
necesarios, lleva a una solución del problema. - Semialgoritmo descripción precisa de un método,
con pasos numerados y bien ordenados que da la
solución de P si existe, en un número finito de
pasos. - Algoritmo si además es capaz de determinar que
no tiene solución en un número finito de pasos. - A partir de un método ? más de un algoritmo
3- Programa algoritmo (o semialgoritmo) dispuesto
en pasos comprensibles por una máquina, junto a
las estructuras de datos con las que opera. - Análisis de algoritmos
- Complejidad en tiempo y espacio
- Complejidad medida de la eficiencia de un
algoritmo en tiempo o espacio - La fórmula de la complejidad nos indica el
comportamiento - Hablaremos del comportamiento mas que del propio
valor - Tamaño del problema
- Variable utilizada para las funciones de
complejidad - Suele depender del número de datos del problema
- Rara vez se eligen dos o más variables como
tamaño del problema
4- Función de complejidad
- Función que tiene como variable independiente el
tamaño del problema y que sirve para medir la
complejidad (espacial o temporal) - Mide el tiempo/espacio relativo en función del
tamaño del problema - El comportamiento de la función determina la
eficiencia - No es única para un algoritmo depende de los
datos - Funciones de complejidad más interesantes
- La del mejor caso fm(n)
- La del peor caso fp(n)
- La que resulta del cálculo de la esperanza
matemática fa(n) - fm es interesante para encontrar cotas inferiores
para el mal comportamiento de un algoritmo - Las funciones con los comportamientos más
usuales - 1, log n, n, nlog n, n2, n3, ..., 2n, 3n
- O(1) lt O(log n) lt O(n) lt O(nlog n) lt O(n2) lt
... lt O(2n) lt O(n2n)
5- Convenio de Edmonds
- Problema tratable complejidad polinomial
- Problema intratable complejidad exponencial
- Los algoritmos de complejidad mayor que nlog n
son poco prácticos - Los exponenciales son válidos para valores
pequeños de n - Simbolismos O, O, ?, o
- Definición 1 f(n) ? O(g(n)) si ? cgt0 f(n) ?
cg(n) - El comportamiento de f está acotado por g
- O(g(n)) conjunto de todas las funciones acotadas
superiormente por g - Ejemplo
- sea P(n) amnm ... a1n a0
- P(n) ? O(nm)
6- Propiedades
- g(n) O(g(n))
- cO(g(n)) O(g(n)), donde c es una constante
- O(g(n))O(g(n)) O(g(n))
- O(g(n))O(h(n)) O(g(n)h(n))
- h(n)O(g(n)) O(h(n)g(n))
- O(g(n))O(h(n)) O del mayor
- O(g(n))-O(g(n)) O(g(n))
- La notación O la utilizaremos en la búsqueda de
cotas superiores del comportamiento de una
función de complejidad (la menor cota superior
posible) - Observación nO(n) nO(n2) nO(n3) ? se toma
la menor
7- Definición 2 f(n) ? O(g(n)), si existe una
constante real positiva tal que f(n) ? cg(n) a
partir de un n0 - Propiedades análogas a las de O
- O se emplea para acotar inferiormente la función
de complejidad en el mejor de los casos - Se toma la mayor de las posibles
- Definición 3 f(n) ? ?(g(n)) si existen dos
constantes reales positivas tal que c1g(n) ?
f(n) ? c2g(n) a partir de un n0 - Significa que f(n) es tanto O(g(n)) como O(g(n))
- ?(g(n))O(g(n)) ? O(g(n))
- Definición 4
- f(n) ? o(g(n)) para n?? si f(n)a(n)g(n)
- a(n) es un infinitésimo en n (tiene límite 0
cuando n??) - f(n) ? g(n) si f(n)-g(n)o(g(n))
- ( se dice que f es asintóticamente equivalente a
g)
8- Definición formalizada del orden de los órdenes
- O(f(n)) lt O(g(n)) si f(n) (n??) o(g(n))
- En vez de O, se puede poner O ó ?
- Ejemplo Un polinomio P(n) amnm...a1na0 es
asintóticamente equivalente a su primer término. - Propiedad si f(n) ? g(n) ? ?(f(n)) ?? ?(g(n))
- Puedo intercambiar una función por otra (asint.
equiv.) - Existen dos estudios posibles sobre el tiempo de
ejecución de un algoritmo - Obtener una medida teórica a priori mediante la
función de complejidad - 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 estándar de referencia ?
número de operaciones - Principio de invarianza (máquinas distintas o
códigos distintos)
9- Cómo contar el número de operaciones
- Operaciones elementales las que realiza el
computador en tiempo acotado por una constante - operaciones aritméticas básicas
- asignaciones de tipos predefinidos
- saltos (llamadas a funciones, proced. y retorno)
- comparaciones lógicas
- Acceso a estructuras indexadas básicas (vectores
y matrices) - Es posible realizar el estudio de la complejidad
de un algoritmo sólo en base a un conjunto
reducido de sentencias, las que más influyen en
el tiempo de ejecución. - Ejemplo...
10- Algoritmo de ordenación por inserción directa
- desde i2 hasta n hacer
- x ai
- a0 x
- j i - 1
- mientras x lt aj hacer
- aj1 aj
- j j - 1
- fin mientras
- aj1 x
- fin desde
- Mejor caso O(n)
- Peor caso O(n2)
- Caso medio O(n2)
11- Resultados prácticos en el cálculo de
complejidades - Fórmulas frecuentes en la búsqueda de órdenes de
complejidad - Suma de potencias
- ?1?i ?n ik ? ( nk1 / (k1) ) siendo k una
constante - ?1?i ?n ik O(nk1) ? ?1?i ?n i O(n2)
- ?1?i ?n xi O(xn) siendo x una constante
- Suma de logaritmos
- ?1?i ?n log i ? ? log i O(nlog n)
- Suma de fracciones
- ?1?i ?n 1/i ? log n e O(log n)
- ?1?i ?n 1/ic O(1) cgt1 cte
- ?1?i ?n 1/xi O(1) x cte
- O(1/n) O(1)
12- Técnicas básicas para el análisis de los
algoritmos - El análisis se realiza desde dentro hacia fuera
- Secuencias
- P1, P2 son fragmentos del mismo algoritmo ? t1,
t2 - Regla de la composición secuencial P1 P2 es t1
t2 - Por la regla del máximo O(f(n) g(n))
O(max(f(n),g(n))) - Bucles for
- Para i1 hasta m hacer P(i)
- Siendo t el tiempo necesario para calcular P(i)
- Caso sencillo (t es una cte) mt
- Considerando las sentencias de control
- Despreciarlas puede dar lugar a graves errores
- Se considera O(mt) con algún umbral m?1
- Se considera O(n)
13- Caso complejo (t es función de i)
- Se trata de operaciones aritméticas complejas
- Se consideran más costosas cuanto mayores sean
los operandos y cuanto mayor sea m - Tiempo de calcular una operación en la iteración
k ? ck para k?1 - Tiempo algoritmo ? ?1?i ?n ck c?1?i ?n k
cn(n1)/2 ? O(n2) - Contar o no las operaciones como de coste
unitario influye bastante - Bucles for que comiencen en un valor diferente de
1 o que avancen a pasos mayores que 1 - (Final-principio)/salto 1
- Ejemplo de caso complejo cálculo sucesión de
Fibonacci
14- Bucles Mientras y Repetir
- No existe una forma sencilla de conocer el número
de iteraciones - Dos técnicas
- Hallar una función de las variables implicadas,
cuyo valor se decremente en cada iteración - Tratarlo como un algoritmo recursivo
- Ejemplo Búsqueda binaria encontrar un elemento
x en un vector T1..n ordenado crecientemente. - i1jn
- mientras iltj hacer
- k(ij)/2
- caso_de
- xltTk jk-1
- xTk ik jk
- xgtTk ik1
- fin_caso
- fin_mientras
- devolver i
15- Solución buscando una función
- La función es j-i1
- El bucle termina cuando i ? j ? 0 ? j-i ? 1 ?
j-i1 (dj-i1) - En cada pasada dd/2 si x?Tk y d1 si xTk
- En la vuelta m ? dm ? dm-1 /2 ? dm ? n/2m
- La sucesión es 1 ?... ? n/8 ? n/4 ? n/2 ? n
- Calculamos mlg n (en base 2) ? O(lg n)
- Considerando que es una función recursiva
- t(d) es el tiempo máximo para terminar el bucle
- t(d) ? tiempo-cte-una-iteración t(d/2)
- t(n) ? O(log n)
- Ejemplo algoritmo recursivo de la sucesión de
Fibonacci - Otros
- Sentencias if
- Sentencias case
- Llamadas a procedimientos o funciones
16- Resolución de recurrencias
- Cuatro técnicas
- Expansión de la recurrencia
- Ecuaciones características
- Cambio de variable
- Transformación de intervalo
- 1. Expansión de la recurrencia
- Se obtiene una fórmula general a partir de varios
valores - Ejemplo función factorial
- funcion factorial(ninteger)integer
- if n ? 1 factorial1
- else factorialnfactorial(n-1)
- fin_funcion
17d si n ? 1 c T(n-1) si n gt 1
- T(n)
- La recurrencia a calcular es T(n)cT(n-1)
- T(n-1)cT(n-2) n?2 ? T(n)2cT(n-2) n?2
- T(n-2)cT(n-3) n?3 ? T(n)3cT(n-3) n?3
- ...
- T(n)icT(n-i) n?i y llegará un momento en que
n-i1 (acabará) - Si n-i1 ? in-1 ? T(n) c(n-1)T(1) c(n-1)
d ? O(n) - Nota es más correcto utilizar ? en vez de O
- Esta técnica se aplica cuando sólo hay un término
en t, aunque esté multiplicado o sumado por una
constante
18- 2. Técnica de la ecuación característica
- Tres tipos
- Recurrencias homogéneas lineales con coeficientes
constantes - Recurrencias no homogéneas
- Otras
- 2.1 Recurrencias homogéneas con coeficientes
constantes - a0tn a1tn-1 ... aktn-k 0 (e-1)
- Lineal no aparecen productos o potencias de t
- Homogénea la combinación lineal de ti es igual a
0 - Los ai son constantes
- Generalmente los algoritmos recursivos suelen
tener una ecuación no homogénea ... - Si hacemos tnxn ? a0xn a1xn-1 ...
akxn-k 0 ? - dividiendo por xn-k ? a0xk a1xk-1 ...
ak 0 - Ejemplo función FibRec
19- funcion FibRec(n)
- si nlt2 devolver n
- sino devolver FibRec(n-1)FibRec(n-2)
- fin_funcion
- Ecuación de la recurrencia tn tn-1 tn-2 0
- Dos posibles formas de resolver la ecuación
- Raíces distintas
- se aplica el teorema fundamental del álgebra
- Raíces múltiples
- Si el polinomio característico tiene raíces
múltiples, es decir, las k raíces no son todas
distintas
20- Teorema fundamental del Álgebra
- Todo polinomio p(x) de grado k posee k raíces de
tal modo que - p(x) ?i1,k (x-ri) donde ri son las
soluciones de p(x)0 - como p(x)0 y xri y tnxn entonces rin es una
solución de la recurrencia - Toda combinación lineal de soluciones es también
una solución - xn tn ?i1,k cirin donde c1, c2, ... cn son
constantes - La ecuación (e-1) sólo posee soluciones de esta
forma cuando los ri son distintos - Ejemplo 1 tn
- Ejemplo 2 tn
n n0,n1 tn-1 tn-2 ngt1
n n0,n1 tn-1 tn-2 ngt1
0 n0 1 n1 3tn-14tn-2 en otro caso
21- Raíces múltiples
- Ahora tenemos (x-r1)m1 (x-r2)m2 (x-rk)mk
- Esta nueva ecuación se resuelve mediante
- T(n) ?i1,m1 c1ini-1r1n ?i1,m2 c2ini-1r2n
... ?i1,mk ckini-1rkn - O lo que es equivalente
- T(n) ?i1,k ?j1,mi cijnj-1rin
- donde los cij 1?i ? k y 1?j ? mi se determinan
con las condiciones iniciales - Ejemplo
- T(n)
n si n0,1,2 5tn-1 - 8tn-2 4tn-3 en otro caso
22- 2.2 Recurrencias no homogéneas
- Un recurrencia es no homogénea cuando la
combinación lineal no es igual a 0 - a0tn a1tn-1 ... aktn-k bnp(n)
- Donde b es cte y p(n) es un polinomio de grado d
- Solución reducir al caso homogéneo
- Con habilidad matemática
- Aplicando el polinomio característico (tnxn)
- (a0xk a1xk-1 ... ak)(x-b)d1 donde d es el
grado de p(n) - Las ctes se determinan con las condiciones
iniciales y con la propia recurrencia - Ejemplo de 1 tn 2tn-1 3n
- Ejemplo de 2
- T(n)
-
- ? t(n) 2t(n-1) 1
0 si n0 2t(n-1) 1 en otro caso
23- Ejemplo con raíces múltiples
- tn 2tn-1 n (a)
- Polinomio característico (x-2)(x-1)2
- Solución de la forma tn c12n c21n c3n1n
(b) - Para obtener las ctes sustituimos (b) en (a)
- (...)
- Solución ?(2n)
- Nota se puede obtener c1, c2, c3 como función de
t0 y los valores de t1 y t2 a partir de la
ecuación. - Para obtener el orden exacto a veces es
imprescindible conocer los valores de las
constantes - Ejemplo
- tn
- Solución general tn c14n c22n ? parece
?(4n)
1 si n0 4tn-1 2n en otro caso
24- Recurrencias de la forma
- a0tn a1tn-1 ... aktn-k b1np1(n)
b2np2(n) ... - bi ? 0 y pi(n) son polinomios en n de grado di
- Se resuelven usando el polinomio característico
- (a0xk a1xk-1 ... ak) (x-b1)d11(x-b2)d21...
- Contiene un factor por el término de la izquierda
y tantos como términos haya en la parte derecha - Ejemplo
- tn
- tn 2tn-1 n 2n ? polinomio característico
(x-2)(x-1)2(x-2) - Soluciones de la forma
- tn c11n c2n1n c32n c4n2n ? t(n) ?
O(n2n) - para saber si es ?(n2n) tenemos que calcular
las constantes (...)
0 si n0 2tn-1 n 2n en otro caso
25- 3. Resolución de recurrencias mediante el cambio
de variable - T(n) ? término de una recurrencia original
- Ti ? término de un nueva recurrencia obtenida de
la original mediante cambio de variable - Ejemplo
- t(n)
- a) n 2i ? ilg2 n para transformarla en algo
conocido hacemos - ti t(2i)
- ti t(2i) 3t(2i-1) 2i ? ti 3ti-1 2i
? (x-2)(x-3) - ti c13i c22i ?como i lg2 n y clg nnlg
c ? - ti c1nlg 3 c2nlg 2 ? t(n) ? O(nlg
3) (a) - para determinar el orden exacto hay que
calcular c1 y c2 - b) cálculo de las constantes
- -sustituyendo (a) en la ecuación de recurrencia
- -Obtener t(n) en dos puntos, obteniendo dos
ecuaciones
1 si n1 3t(n/2) n si n es potencia de 2, ngt1
26- Ejemplo
- T(n) 2T(n/2) nlg n siendo n potencia de 2
- ti T(2i) 2T(2i-1) 2i i 2ti-1 2i i
- raíces (x-2)(x-2)2
- ti c12i c2i2i c3i22i ? T(n) c1n
c2nlg n c3nlg2n - O(nlg2n) siendo n potencia de 2
- Obtenemos los coeficientes (...) ? ?(nlg2n)
- Caso general
- n0 ? 1 l ?1 b ?2 k ?0 enteros
- cgt0 real
- TN?R no decreciente
- T(n) l T(n/b) cnk n gtn0 ?1 , n/n0 es
potencia exacta de b, es decir, - n ? bn0, b2n0, b3n0, ...
- cambio de variable adecuado
- nbin0 ? ti T(bin0) l T(bi-1n0)
c(bin0)k lti-1 cn0kbik - ti lti-1 cn0k(bk)i ? (x-l)(x-bk)d1
27- Las soluciones son de la forma
- ti c1li c2(bk)i ? como nbin0, ilogb(n/n0)
- si deshacemos el cambio de i (...)
- T(n) c3nlogbl c4nk (a)
- Para conocer las constantes
- sustituimos (a) en la recurrencia original
- cnk T(n) lT(n/b) ? (...) ? c4 c/(1
(l/bk)) - Para expresar T(n) en notación asintótica,
necesitamos saber el cuál es el término dominante
en (a), tenemos 3 casos - 1) si lltbk ? c4gt0 y kgtlogbl ? c4nk dominante ?
- T(n) ? ?(nk n/n0 potencia exacta de b)
- 2) si lgtbk ? c4lt0 y klt logbl ? c3 gt0 ? c3nlogbl
dominante ? - T(n) ? ?(nlogbl n/n0 sea potencia de b)
- 3) si lbk ? problema en c4de división por 0
- el polinomio característico tiene 1 raíz de m2
- solución general ti c5(bk)i c6i(bk)i como
ilogb(n/n0) - T(n) c7nk c8nklogb(n/n0) ?obtenemos (...)
c8c ? - término dominante cnklogbn ? T(n) ??(nklogbn)
28- Resumen
- T(n) lT(n/b) cnk
- T(n)
- Observación en la notación asintótica no es
necesario especificar la base del algoritmo por
la propiedad - logan logab logbn ? O(logan) O(logbn)
?(nk) si lltbk ?(nk log n) si lbk
?(nlogbl) si lgtbk
29- 4. Resolución de recurrencias por
transformaciones 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
- Ejemplo
-
- T(n)
- 1) Cambio de variable tiT(2i) n2i ? ilg n
- ti T(2i) 2iT2(2i-1) 2iti-12 ?no lineal y
2i no cte - 2) Transformar el intervalo o rango nilg ti ?
ti2ni - nilg ti log (2iti-12 ) log (2i) log
(ti-12 ) i 2lg ti-1 - i 2ni-1 ? ni 2ni-1 i cuyo pol.
caract. es (x-2)(x-1)2 - ni c12i c21i c3i1i
- obtengo las ctes (...) ?c3-1, c2-2
- deshacer el 2º cambio ti 2ni 2c12i - 2 i
- deshacer el 1er cambio T(n) tlg n (...)
2c1n / 4n ?c1? ?...
1/3 si n1 nT2(n/2) en otro caso