Vous êtes sur la page 1sur 20

Captulo 6.

ANLISIS DE ALGORITMOS
ALGORTMICA estudia: Diseo de algoritmos: esquemas para resolver problemas. Divide y vencers, avance rpido, programacin dinmica, Backtracking, Branch & Bound Anlisis de algoritmos: recursos necesarios para resolver el problema con el algoritmo elegido. Ocupacin de memoria, tiempo de ejecucin. De manera que se pueda decidir qu algoritmo es mejor para nuestro problema y entrada.

Objetivo: Dado un problema concreto encontrar la mejor forma de resolverlo.

Introduccin: PROGRAMACIN
modelizacin Problema real Estructura de datos programacin Tipo abstracto de datos Programa en seudolenguaje Estructura de datos Programa ejecutable

Modelo matemtico Algoritmo en lenguaje natural algortmica

Algoritmo
Conjunto de reglas para resolver un problema. Debe

ser: Definible. En seudocdigo, pero pueda dar lugar a un programa. De un conjunto de datos de entrada producir unos datos de salida, en un nmero finito de pasos (tiempo de ejecucin finito). Adems debemos disear algoritmos eficientes: que el tiempo para acabar sea razonable. Determinista si para la misma entrada produce siempre la misma salida. No determinista en caso contrario (redondeos, probabilistas, paralelos, )

Ejemplos de ALGORITMOS
Algoritmo de Euclides Dados dos enteros a y b, a>b obtener el m.c.d. 1. Hacer r:=a mod b 2. Si r=0 devolver b 3. En otro caso 3.1. a:=b 3.2. b:=r 3.3. Volver al paso 1 Algoritmo de al-Khawarizmi Resolver x2+bx=c 1. 2. 3. 4. 5. Tomar la mitad de b Multiplicarlo por s mismo Sumarle c Tomar la raz cuadrada Restarle la mitad de b

Anlisis de algoritmos
Estudio de los recursos que necesita la ejecucin de un
algoritmo.
disear algoritmos eficientes: que usan pocos recursos: memoria tiempo otros (memoria secundaria, tiempo de programacin, )

Pero tambin importante que los resultados sean correctos.


Dependiendo del campo de trabajo puede ser ms importante la correccin o la eficiencia.

No confundir con anlisis de un problema. Hay otros criterios importantes: facilidad de mantenimiento, portabilidad, reutilizacin, ...

Anlisis de algoritmos
Para decidir: qu algoritmo programar qu algoritmo utilizar en resolver un problema para una cierta entrada detectar fallo en programa que no funciona bien

Factores que influyen en la medicin de recursos


Factores externos al algoritmo:
Ordenador, otras tareas usando el procesador, sistema operativo, lenguaje de programacin, compilador, opciones de compilacin, implementacin del algoritmo, ... Frmula del tiempo u ocupacin de memoria en funcin de ese tamao.

Tamao del problema: volumen de los datos de entrada Contenido de los datos. Para un mismo tamao de entrada puede influir la distribucin de los datos
caso ms favorable, tm(n) y mm(n) ms desfavorable, tM(n) y mM(n) y promedio, tp(n) y mp(n)

Anlisis de algoritmos
Se intenta obtener: el tiempo de ejecucin para un cierto tamao de entrada, t:N R+, t(n)
Contando el nmero de instrucciones que se ejecutan o algn tipo de instruccin

la ocupacin de memoria para un cierto tamao de entrada, m:N R+, m(n)


Que es la memoria necesaria para que pueda ejecutarse

Como influyen factores externos al algoritmo lo que normalmente se estudia la forma en que crece t(n) y m(n), y se utilizan notaciones asintticas: ;, O, U, o
Con las que se acota la funcin o se obtiene la forma en que crece

Anlisis a priori a posteriori


A priori:

Identificar cmo programarlo. Ver si merece la pena usar ese algoritmo u otro. Determinar el mejor de dos algoritmos. Determinar el tamao de problema que se puede resolver. A posteriori: Determinar causa de mal funcionamiento. Decidir qu programa usar en la solucin de un problema con un cierto tamao y forma de la entrada.

Ej: Clculo del factorial


fact(n): si n=1 devolver 1 en otro caso devolver (fact(n-1)*n) tiempo: t(n)=t(n-1)+a=t(n-2)+2*a= ... =t(1)+(n-1)*a memoria: m(n)=m(n-1)+c=m(n-2)+2*c= ... =m(1)+(n-1)*c

Ej: Torres de Hanoi

Hanoi(origen,destino,pivote,discos): si discos=1 moveruno(origen,destino) en otro caso Hanoi(origen,pivote,destino,discos-1) moveruno(origen,destino) Hanoi(pivote,destino,origen,discos-1)

Ej: Torres de Hanoi


Nmero de movimientos: t(1)=1 t(n)=2t(n-1)+1, si n>1 Expandiendo la recurrencia: t(n) = 2 t(n-1) +1 = 2 (2t(n-2)+1) +1 = 22 t(n-2) +1+2 = 22 (2t(n-3)+1) +1+2 = 23 t(n-3)+1+2+22
.

2n-1 t(1)+1+2++ 2n-2 = 2n-1

Tiempo promedio
tp(n) = 7WS(n) t(W) * p(W) Conteo de instrucciones afectadas por probabilidad: Ej: bsqueda secuencial con centinela i=0 a[n+1]=x repetir i=i+1 hasta a[i]=x tp(n)=2+2*p/n+4*p/n+...+2*n*p/n+(2*n+2)*(1-p)= 2n+4-p(n+1)

Ej: Algoritmo de Euclides


Calcular m.c.d(m,n), con m>n repetir r = resto(m/n) m=n n=r hasta r =0 mcd = m t(m,n) = a , si m mltiplo de n t(m,n) = b+t(n,resto(m/n)) , si m no es mltiplo de n

Comparacin de algoritmos
1.1 1.2 1.3 1.4 1.5 1.6 1.7 2.1 2.2 2.3 2.4 fin=false mientras no fin fin=true para i=1,2,n-1 si xi>xi+1 cambiar fin=false para i=1,2,,n-1 para j=i+1,,n si xi>xj cambiar

1.1 1.2 1.3 1.4 1.5 1.6 1.7

fin=false mientras no fin fin=true para i=1,2,n-1 si xi>xi+1 cambiar fin=false

Caso ms favorable:
Entrada 1,2,3,4: 1.1 , 1.2, 1.3 , 1.4 (i=1) , 1.5 1.4 (i=2) , 1.5 1.4 (i=3) , 1.5 1.4 (sale) 1.2 (sale) Total 11 instrucciones Entrada 1,2,,n: 1.1 , 1.2, 1.3 , 1.4 (i=1) , 1.5 1.4 (i=2) , 1.5 1.4 (i=n-1) , 1.5 1.4 (sale) 1.2 (sale) Total 2n+3 instrucciones

2.1 2.2 2.3 2.4

para i=1,2,,n-1 para j=i+1,,n si xi>xj cambiar

Caso ms favorable:
Entrada 1,2,3,4: 2.1 (i=1), 2.2 (j=2), 2.3 2.2 (j=3), 2.3 2.2 (j=4), 2.3 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 2.2 (j=4), 2.3 2.2 (sale) 2.1 (i=3), 2.2 (j=4), 2.3 2.2 (sale) 2.1 (sale) Total 19 instrucciones Entrada 1,2,,n: 2.1 (i=1), 2.2 (j=2), 2.3 2.2 (j=n), 2.3 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 2.2 (j=n), 2.3 2.2 (sale) 2.1 (i=n-1), 2.2 (j=n), 2.3 2.2 (sale) 2.1 (sale) Total n2+n-1 instrucciones

1.1 1.2 1.3 1.4 1.5 1.6 1.7

fin=false mientras no fin fin=true para i=1,2,n-1 si xi>xi+1 cambiar fin=false

Caso ms desfavorable:
Entrada 4,3,2,1: 1.1 , 1.2 , 1.3 , 1.4 (i=1) , 1.5 , 1.6 (3421) , 1.7 1.4 (i=2) , 1.5 , 1.6 (3241) , 1.7 1.4 (i=3) , 1.5 , 1.6 (3214) , 1.7 1.4 (sale) 1.2 , 1.3 , 1.4 (i=1) , 1.5 , 1.6 (2314) , 1.7 1.4 (i=2) , 1.5 , 1.6 (2134) , 1.7 1.4 (i=3) , 1.5 1.4 (sale) instrucciones?

2.1 2.2 2.3 2.4

para i=1,2,,n-1 para j=i+1,,n si xi>xj cambiar

Caso ms desfavorable:
Entrada 4,3,2,1: 2.1 (i=1), 2.2 (j=2), 2.3 , 2.4 (3421) 2.2 (j=3), 2.3 , 2.4 (2431) 2.2 (j=4), 2.3 , 2.4 (1432) 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 , 2.4 (1342) 2.2 (j=4), 2.3 , 2.4 (1243) 2.2 (sale) 2.1 (i=3), 2.2 (j=4), 2.3 , 2.4 (1234) 2.2 (sale) 2.1 (sale) instrucciones?

Estudio experimental
Realizarlo y comparar con el terico para detectar
posibles errores y mejoras. Experimentos para distintos tamaos de problema. Experimentos para caso ms favorable y desfavorable. Para tiempo promedio generando entradas aleatorias (rand). Experimentos con partes distintas del programa. Realizar experimentos repetidos. Comparar las grficas con las tericas (ajustes por mnimos cuadrados), teniendo en cuenta variaciones por uso de la memoria. Si la comparacin con el estudio terico no es satisfactoria revisar el algoritmo o los experimentos.

Vous aimerez peut-être aussi