PDF de programación - Análisis de Algoritmos

Imágen de pdf Análisis de Algoritmos

Análisis de Algoritmosgráfica de visualizaciones

Publicado el 28 de Mayo del 2018
1.227 visualizaciones desde el 28 de Mayo del 2018
130,6 KB
35 paginas
Creado hace 11a (17/10/2012)
Parte de Algoritmos

de la asignatura de Programación

Master de Bioinformática

Análisis de Algoritmos

Web asignatura: http://dis.um.es/~domingo/algbio.html
E-mail profesor: [email protected]

Transparencias preparadas a partir de las del curso de
Algoritmos y Estructuras de Datos II, del Grado de Ingeniería Informática

BIBLIOGRAFÍA

• Texto guía de Algoritmos y Estructuras de Datos, volumen 2

• Brassard, Bratley: Fundamentos de algoritmos.

• Cormen, Leiserson, Rivest: Introduction to Algorithms. The
MIT Press. 1990.

ALGORÍTMICA o

ALGORITMIA

• Estudia:

› Diseño de algoritmos: esquemas para resolver problemas.
Divide y vencerás, avance rápido, programación dinámica,
Backtracking, Branch & Bound...

› Análisis de algoritmos: recursos necesarios para resolver el
problema con el algoritmo elegido. Ocupación de memoria,
tiempo de ejecución.
De manera que se pueda decidir qué algoritmo es mejor para
nuestro problema y entrada.


ALGORITMO

• Conjunto de reglas para resolver un problema. Propiedades:

› Definibilidad. El conjunto debe estar bien definido, sin
dejar dudas en su interpretación.
› Finitud. Tener número finito de pasos, que se ejecute en
un tiempo finito.
› Eficiencia. Debemos diseñar algoritmos eficientes: que el
tiempo para acabar sea “razonable” (análisis de algoritmos).
› Determinista si para la misma entrada produce siempre la
misma salida. No determinista en caso contrario (redondeos,
probabilistas, paralelos…)

PROGRAMACIÓN

• Los algoritmos no son los únicos componentes en la
resolución de un problema:

Algoritmos + Estructuras de Datos = Programas

› Estructura de datos: parte estática,
almacenada
› Algoritmo: parte dinámica, manipulador de
los datos

PROCESO DE

PROGRAMACIÓN

modelado

Problema
real

Estructura de
datos
Modelo
matemático
Algoritmo
en lenguaje
natural

algorítmica

programación

Tipo
abstracto de
datos
Programa en
seudolenguaje

Estructura
de datos
Programa
ejecutable

Estudio de algoritmos

• Se trata de diseñar algoritmos eficientes: que usan pocos
recursos:

tiempo de ejecución

› memoria principal

› otros (memoria secundaria, entradas/salidas, tiempo de
programación, comunicaciones, procesadores…)

• Para decidir:

qué algoritmo programar
qué algoritmo utilizar en resolver un problema para una



cierta entrada
› detectar fallo en programa que no funciona bien

Tiempo de ejecución

• Se intenta estimar el tiempo de ejecución para un cierto
tamaño de entrada, t(n)
• Se pueden considerar tamaños de entrada distintos:

• Cálculo del factorial de un número n. Aunque es un

único número, el tamaño es el valor n

• Ordenación de n datos. El tamaño puede ser el
número de datos n, aunque el valor que tienen
también influye en el tiempo

• Multiplicación de matrices rectangulares nxm y

mxr. El tamaño viene dado por tres valores: t(n,m,r)
• Multiplicación de matrices con programa paralelo

usando p procesadores. Influye el tamaño del
problema (n,m,r) y el del sistema (p): t(m,n,r,p)

Tiempo de ejecución

• Influyen factores externos al algoritmo:

• Compilador y opciones de compilación
• Máquina
• Programador (uso de registros, gestión de accesos a

memoria…)

• por lo que normalmente se estudia la forma en que crece t(n), y
se utilizan notaciones asintóticas:

, forma exacta en que crece

• W
, cota inferior de la forma en que crece
• O, cota superior de la forma en que crece
• q
• o, forma exacta en que crece afectada de la constante del
término de mayor orden (para comparar algoritmos cuyo
tiempo crece de la misma forma)

Tiempo de ejecución

Pueden estudiarse:


Caso más favorable tm(n), tiempo para la entrada de

datos que produce el menor tiempo

Caso más desfavorable tM(n), para la que da el mayor

Tiempo promedio tp(n), media de tiempos de todas

las entradas posibles

Para cada uno de ellos se pueden usar las notaciones

tiempo

asintóticas

Lo mismo para el estudio del uso de memoria

Tiempo de ejecución

• Conteo de instrucciones: Se cuenta el número de

operaciones, o las de un cierto tipo, o cada operación
afectada de un coste diferente

• Todo lo dicho para tiempo de ejecución es válido para

ocupación de memoria: mm(n), mM(n), mp(n) y
notaciones asintóticas
• Se cuenta la máxima cantidad de memoria ocupada
durante la ejecución del programa: memoria mínima
que necesitaremos para poder ejecutarlo

Conteo de instrucciones

Reglas básicas:

Número de instrucciones t(n)  sumar 1 por cada instrucción o

línea de código de ejecución constante.

Tiempo de ejecución t(n)  sumar una constante (c1, c2...) por

cada tipo de instrucción o grupo de instrucciones.

Bucles FOR: Se pueden expresar como un sumatorio, con los

límites del FOR como límites del sumatorio.

nS

i=1

k =

ri =

bS
i=a


k n

rb+1 – ra
r – 1

bS

i=a

k =

k(b-a+1)

nS

i=1

i =

n(n+1)/2

nS

i=1

i2 ≈



i2 di =

n

0

n
(i3)/3 ] =
0

(n3)/3

Ej: Cálculo del factorial


fact(n):

si n=1

devolver 1

en otro caso

devolver (fact(n-1)*n)

• Tamaño de la entrada: 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

Usamos expansión de recurrencia

Ejecutar el programa de cálculo de factorial. Ver las funciones de toma

de tiempo, buscar si hay otras alternativas para la toma de tiempos.


Ej. Números de Fibonacci

Funcion Fib(N: int): int;
if N<0 then
error(‘No válido’)
case N of
0, 1: return N
else
fnm2= 0
fnm1= 1
for i= 2 to N
fn= fnm1 + fnm2
fnm2= fnm1
fnm1= fn
end
return fn
end



Funcion Fib(N: int): int;
if N<0 then
error(‘No válido’)
case N of
0, 1: return N
else
return Fib(N-1)+Fib(N-2)
End

fi Estudiar teóricamente el

coste de tiempo y memoria
de las dos versiones
fi Programarlas y comparar su

tiempo experimentalmente

Ej: Torres de Hanoi

Hanoi(origen,destino,pivote,discos):

moveruno(origen,destino)

si discos=1

en otro caso

Hanoi(origen,pivote,destino,discos-1)
moveruno(origen,destino)
Hanoi(pivote,destino,origen,discos-1)

Ej: Torres de Hanoi

Tamaño del problema: número de discos

Tiempo a estudiar: número de movimientos de discos
t(1)=1
t(n)=2t(n-1)+1, si n>1

caso base de la recurrencia
ecuación de recurrencia

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

¿ocupación de memoria?
Normalmente la ocupación de memoria es más simple de estudiar y de menor
orden de complejidad

NOTACIONES ASINTÓTICAS
• Se utilizan para estudiar tiempos de ejecución u ocupaciones
de memoria.

• Representan la forma en que crece una función.

• En general no consideran constantes, que no son valores
propios de los algoritmos.

• Son asintóticas pues representan el comportamiento cuando
el tamaño de la entrada tiende a infinito, pues para valores
grandes es cuando puede haber problemas de tiempo o
memoria.

NOTACIÓN O

• Da una cota superior de la forma en que crece el tiempo de
ejecución. Pero es aplicable a cualquier función, no solo de
tiempos de ejecución

• DEFINICIÓN:
Dada una función f:N→R+, llamamos orden de f al conjunto
de todas las funciones de N en R+ acotadas superiormente por
un múltiplo real positivo de f para valores de n
suficientemente grandes.
Se denota O(f), y será:

O(f)={t: N→R+ / $ c˛ R+, $ n0

˛ N, " n>=n0 : t(n)<=cf(n)}

Es un conjunto de funciones, no una función

NOTACIÓN Ω

• Da una cota inferior de la forma en que crece el tiempo
de ejecución.

• DEFINICIÓN:
Dada una función f:N→R+, llamamos omega de f al
conjunto de todas las funciones de N en R+ acotadas
inferiormente por un múltiplo real positivo de f para
valores de n suficientemente grandes.
Se denota Ω(f), y será:

Ω(f)={t: N→R+ / $ c˛ R+, $ n0

˛ N, " n>=n0 : t(n)>=cf(n)}

NOTACIÓN q (orden exacto)

• Da la forma en que crece el tiempo de ejecución.

• Son las funciones a las que f acota superior e inferiormente:
q (f)= Ω(f)˙ O(f)
Es equivalente a:
q (f)={t: N→R+ / $ c,d˛ R+, $ n0

˛ N, " n>=n0 : cf(n)<=t(n)<=df(n)}

• No hay relaciones de inclusión.

• Si t˛ O(f) y t˛W

(f) entonces t˛q

(f)

NOTACIÓN o (o pequeña)
• Se utiliza para comparar tiempos con el mismo orden.
Considera la constante que afecta al término de mayor orden.

• Aparecen constantes, por lo que es necesario hacer
suposiciones sobre: coste de las operaciones, conteo de
instrucciones, …

• Se define: o(f)={t: N→R+ / limn→¥ t(n)/f(n)=1}

• No hay relaciones de inclusión.

COMPARACIÓN DE ÓRDENES



• limn→¥ f(n)/g(n)˛ R+ O(f)=O(g), Ω(f)=Ω(g),

q (f)=q (g)

• limn→¥ f(n)/g(n)=0 O(f)˝ O(g), Ω(g) ˝ Ω(f)

• limn→¥ f(n)/g(n)=+¥ O(g)˝ O(f), Ω(f)˝ Ω(g)

COMPARACIÓN DE ÓRDENES



O(1) O(log n) O(n1/2) O(n) O(n log n)
O(n log n log n) O(n2) O(n3) O(2n) O(n!)

O(nn)

O((log n)p) O(n1/q)

• Con Ω cambia el sentido de las inclusiones

Ecuaciones de recurrencia

• Es normal que un algoritmo se base en procedimientos auxiliares,

haga llamadas recursivas para tamaños menores o reduzca el
tamaño del problema progresivamente.

• En el análisis, el tiempo T(n) se expresa en función del tiempo

para T(n-1), T(n-2)...fi

Ecuaciones de recurrencia.

• Ejemplo. Torres de Hanoi

Hanoi (origen,pivote,destino,discos)

si discos=1

mover(origen,destino)

en otro caso

Hanoi (origen,destino,pivote,discos-1)
mover (origen,destino)
Hanoi (pivote,origen,destino,discos-1)



Ecuaciones de recurrencia

• En general, las ecuaciones de recurrencia tienen la forma:

t(n) = b
t(n) = f (t(n), t(n-1), ..., t(n-k), n)

Para 0 £ n £ n0 Casos base

En otro caso

• Tipos de ecuaciones de recurrencia:

Lineales homegéneas:

a0t(n) + a1t(n-1) + ... + akt(n-k) = 0

Line
  • Links de descarga
http://lwp-l.com/pdf11371

Comentarios de: Análisis de Algoritmos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad