Sei sulla pagina 1di 43

DR. JESS A.

GONZLEZ BERNAL
CI ENCI AS COMPUTACI ONALES
I NAOE
Anlisis y Diseo de Algoritmos
Introduccin: El Rol de los Algoritmos en
Computacin
Temario
1. Introduccin
2. Notacin Asinttica
3. Recurrencias
4. Ordenamiento
5. Programacin Dinmica
6. Algoritmos Voraces
7. Algoritmos Elementales para Grafos
8. rboles de Expansin Mnima
9. Ruta ms Corta
10. Todos los Pares de Ruta ms Corta
11. Mximo Flujo
12. Algoritmos Paralelos
13. Teora de NP-Completeness
2
Evaluacin
! 3 Exmenes, 20% cada uno
! 1 Proyecto (investigacin y reporte), 25%
! Tareas y presentacin, 15%
! Pgina del curso:
! http://ccc.inaoep.mx/~jagonzalez/ADA.html
! Contacto
! jagonzalez@inaoep.mx
! Oficina: 8303
3
Algoritmos
4
! Informalmente
! Cualquier procedimiento computacional bien definido
" Valores de entrada
" Valores de salida
! Secuencia computacional de pasos que transforman una
entrada en una salida
! Herramienta para resolver un problema computacional bien
especificado
Problema de Ordenamiento
5
Entrada: secuencia de nmeros (a
1
, a
2
, , a
n
)
Salida: permutacin (reordenamiento) (a
1
, a
2
, ,
a
n
) de la secuencia de entrada tal que a
1
<= a
2
<=
<= a
n
.
Para (31, 41, 59, 26, 41, 58), la salida es
(26, 31, 41, 41, 58, 59)
A la secuencia de entrada se le llama Instancia
Una instancia del problema es una entrada
Satisface las restricciones del problema
Necesaria para calcular la solucin al problema
Problema de Ordenamiento
6
Ordenamiento es una operacin fundamental en
computacin
Utilizado como paso intermedio
Hay muchos algoritmos de ordenamiento buenos
Cul es el mejor para una aplicacin dada?
Depende de:
Nmero de elementos a ordenar?
Algunos elementos ya estn ordenados?
Restricciones en los valores de los elementos?
Qu tipo de almacenamiento usamos?
Memoria principal, disco, cintas
Vamos a trabajar con varios algoritmos de ordenamiento
Algoritmo Correcto
7
Se dice que un algoritmo es correcto si para toda
instancia de entrada, se detiene al obtener la salida
correcta
Decimos que un algoritmo correcto resuelve el
problema computacional dado
Un algoritmo no-correcto puede no detenerse para
algunas instancias de entrada o detenerse con una
respuesta incorrecta
Los algoritmos incorrectos pueden ser tiles, si podemos
controlar su tasa de error
Sin embargo, nos concentraremos slo en algoritmos correctos
Especificacin de un Algoritmo
8
! Ingls, espaol
! Como programa computacional
! Pseudocdigo
! Slo una restriccin
! La especificacin debe proveer una descripcin precisa del
procedimiento computacional a seguir
Qu Clases de Problemas Resuelven los Algoritmos?
9
Muchos ms que el ordenamiento
El proyecto del Genoma Humano, identificar 100,000 genes
en el ADN humano, la secuencia de 3 billones de pares de
bases qumicas que componen el ADN
Algoritmos de bsqueda para internet, con grandes volmenes
de datos
Comercio electrnico (criptografa, firmas digitales)
Industrias
Caractersticas Comunes de Algoritmos
10
! Muchas soluciones candidatas, la mayora no nos
interesan, encontrar la que queremos puede ser
difcil
! Tienen aplicaciones prcticas, ruta ms corta
Estructuras de Datos
11
! Una estructura de datos es una manera de almacenar
y organizar datos para facilitar su acceso y
modificacin
! Una estructura de datos no trabaja bien para todo
propsito, tienen ventajas y limitaciones
Tcnica
12
! Puede que el algoritmo que necesitamos no est
publicado
! Necesitamos una tcnica para disear y analizar
algoritmos para que podamos desarrollar nuevos
! Demostrar que producen la respuesta correcta
! Entender su eficiencia
Problemas Duros
13
Hay algunos problemas para los que no se conoce una
solucin eficiente
Algoritmos NP-completos
No se ha encontrado un algoritmo eficiente para un problema NP-
completo
Tampoco se sabe si existen (o no) algoritmos eficientes para
problemas NP-completos
Propiedad de algoritmos NP-completos
Si existe un algoritmo eficiente para alguno de ellos, entonces existen
algoritmos eficientes para todos ellos
Varios problemas NP-completos son similares (no idnticos) a
problemas para los que sabemos que hay algoritmos eficientes
Cambio pequeo en la definicin del problema cause un gran cambio
en la eficiencia del mejor algoritmo conocido
Problemas NP-Completos
14
! Es bueno saber sobre problemas NP-completos
! Aparecen frecuentemente en aplicaciones reales
! Podemos invertir mucho tiempo en ellos
! Si demostramos que el algoritmo es NP-completo
" Invertir tiempo en desarrollar un algoritmo que obtenga una
buena respuesta (no la mejor posible)
Tarea
15
! Traer para la siguiente clase 2 ejemplos de
Problemas NP-Completos
Algoritmos como una Tecnologa
16
! Qu pasara si las computadoras fueran
infinitamente rpidas y la memoria fuera gratis?
! Pero como no son infinitamente rpidas y la
memoria no es gratuita
! El tiempo de cmputo y el espacio en memoria son recursos
limitados
" Hay que utilizarlos inteligentemente
" Algoritmos eficientes en tiempo y espacio
Eficiencia
17
Algoritmos que resuelven el mismo problema
frecuentemente tienen una eficiencia diferente
Ms significativas que las diferencias por HW o SW
Algoritmos de ordenamiento
InsertionSort c
1
n
2
para ordenar n elementos, c
1
es constante no
dependiente de n
MergeSort c
2
nlgn, donde lgn es log
2
n y c
2
es otra constante que no
depende de n
c
1
< c
2

factores constantes no tan importantes como n
n mucho mayor a lgn
InsertionSort ms rpido que MergeSort para entradas pequeas
Hay un punto (tamao de n) en el que MergeSort ya es ms rpido
que InsertionSort
Ejemplo de Eficiencia
18
! Computadora A ms rpida que Computadora B
! A, 100 millones de inst. x seg. " 10
8
ins/sec
! B, 1 milln de inst. x seg. " 10
6
ins/sec
! Implementamos InsertionSort en A
! 2n
2
(c
1
= 2)

! Implementamos MergeSort en B
! 50nlgn (c
2
= 50)
! Ordenar 1,000,000 de nmeros (n = 10
6
)
Ejemplo de Eficiencia
19
minutes. 16.67 seconds 000 , 1
sec / 10
10 lg 10 50
hours, 5.56 seconds 000 , 20
sec / 10
) 10 ( 2
6
6 6
8
2 6
! !
"
#
! = #
inst
inst
B
inst
inst
A
Con 10,000,000 de nmeros:
B (20 min) es 20 veces ms rpida que A (2.3
das) para ordenar los nmeros
Ventaja de la eficiencia de MergeSort
Anlisis de Algoritmos
20
! Predecir los recursos que requiere el algoritmo
! Memoria, tiempo de cmputo
! Modelo de la tecnologa de implementacin
! 1 procesador
! Modelo RAM
" Una instruccin tras otra, no operaciones concurrentes
! Requerimos herramientas matemticas
Anlisis de InsertionSort
21
! Tiempo de InsertionSort depende de la entrada
! Tamao de la entrada
! Qu tan ordenada ya est la entrada?
! Tamao de la entrada (input size)
! Nmero de elementos en la entrada
" Vector, nmero de elementos
" Grafos, nmero de vrtices y nmero de arcos
Anlisis de InsertionSort
22
! Tiempo de ejecucin (running time)
! Nmero de operaciones primitivas (pasos) ejecutadas
! Definir la nocin de paso de manera
independiente de la mquina
! Tiempo constante para ejecutar cada lnea de
pseudocdigo
" Suma, multiplicacin, divisin, comparacin, etc.
" Toman diferente tiempo pero asumimos que es el mismo tiempo y
es constante

Anlisis de InsertionSort
23
Anlisis Inicial de InsertionSort
24
Para cada j = 2, 3,, n, n = length[A]
t
j
es el nmero de ejecuciones del ciclo while de la lnea 5 para el valor
de j
Los comentarios no se ejecutan
Tiempo de ejecucin es la suma de los tiempos de cada lnea
Anlisis Inicial de InsertionSort
25
! Mejor caso
! Arreglo previamente ordenado
! Se puede expresar como an + b, una funcin lineal de n.
Anlisis Inicial de InsertionSort
26
! Peor caso
! El arreglo tiene un orden decreciente
! Comparamos cada elemento A[j] con cada elemento del
subarreglo A[1..j-1] y t
j
= j para j = 2, 3, , n; donde:
Anlisis Inicial de InsertionSort
27
! Peor caso
! Se puede expresar como an
2
+bn + c, es una funcin
cuadrtica
Ejemplo de InsertionSort
28
Anlisis del Peor Caso y Caso Promedio
29
! Normalmente calculamos slo el peor caso
! El tiempo ms largo de ejecucin para cualquier entrada
de tamao n
! El peor caso del tiempo de ejecucin es la frontera
ms alta
! Garantizamos que el alg. nunca tardar ms que eso
! Para algunos algoritmos el peor caso ocurre muy
frecuentemente (i.e. bsqueda en BD)
! El caso promedio es frecuentemente tan malo
como el peor caso
Orden de Crecimiento
30
! Simplificamos el anlisis de algoritmos
! Utilizamos constantes para representar los costos de
lneas de cdigo
! Otra simplificacin (abstraccin)
! Nos interesa slo la tasa de crecimiento u rden de
crecimiento
! Tomamos en cuenta slo el trmino mayor de la frmula
(p.ej. an
2
)
! Tambin ignoramos los coeficientes (mayores) constantes
" Porque son menos significativos que la tasa de crecimiento
Orden de Crecimiento
31
! Peor caso de InsertionSort: Peor caso de !(n
2
)
! Theta de n-cuadrada
! Consideramos que un algoritmo es ms eficiente
que otro si el tiempo de ejecucin de su peor-caso
tiene un orden de crecimiento menor
! Puede haber un error para entradas pequeas pero no
para entradas grandes
Diseando Algoritmos
32
! Hay muchas maneras de disear algoritmos
! InsertionSort
" Mtodo incremental
! Otros mtodos como
" Divide y conquista
Mtodo de Divide y Conquista
33
! Muchos algoritmos son recursivos
! Se llaman a s mismos una o ms veces para resolver
subproblemas muy parecidos
! Siguen un mtodo divide-y-conquista
" Dividen el problema en subproblemas similares pero ms
pequeos
" Resuelve los problemas recursivamente
" Combina las soluciones para crear la solucin al problema original
Mtodo de Divide y Conquista
34
! 3 pasos en cada nivel de recursin
! Divide el problema en subproblemas
! Conquista los problemas resolvindolos recursivamente, si el
problema es trivial (suficientemente pequeo) lo resuelve de
manera directa
! Combina las soluciones para obtener la solucin al problema
original
MergeSort
35
! MergeSort sigue el paradigma divide-y-conquista
! Divide la secuencia de n-elementos a ordenar en 2
subsecuencias de n/2 elementos cada una
! Ordena las 2 subsecuencias recursivamente utilizando
MergeSort
! Combina: intercala las dos subsecuencias ordenadas para
producir la respuesta ordenada
MergeSort
36
Inicialmente:
A es el arreglo de entrada
p =1
r = length[A]
MergeSort
37
Anlisis de Algoritmos Divide y Conquista
38
! Algoritmo recursivo
! Su tiempo de ejecucin descrito con una ecuacin de
recurrencia recurrencia
" Describe el tiempo de ejecucin de un problema de tamao n en
trminos del tiempo de ejecucin de entradas ms pequeas
! Herramientas matemticas para resolver recurrencias
Recurrencias para Algoritmos Divide y Conquista
39
! Basadas en los 3 pasos del paradigma
! T(n) es el tiempo de ejecucin del problema de tamao n
! Si el problema es suficientemente pequeo (n menor a una
constante c), toma tiempo constante: !(1)
Recurrencias para Algoritmos Divide y Conquista
40
Al dividir el problema en a subproblemas
Cada subproblema de tamao 1/b del tamao del original
D(n) tiempo en dividir el problema
C(n) tiempo en combinar las soluciones
Recurrencia obtenida:
Anlisis de MergeSort
41
Anlisis de MergeSort
42
! Asume problema tamao potencia de 2
! Cada divisin de problema genera 2 subsecuencias de tamao
n/2
! Tiempo de ejecucin en el peor caso para MergeSort
con n nmeros
! MergeSort con un slo nmero " Tiempo Constante
! Para n > 1 dividimos el problema:
" Divide " Calcula la mitad del subarreglo, toma tiempo constante,
D(n)=!(1)
" Conquista " Resuelve los 2 subproblemas recursivamente con
2T(n/2) de tiempo de ejecucin
" Combina " C(n)= !(n)
Anlisis de MergeSort
43
! Al sumar las funciones D(n) y C(n) para el anlisis
! Sumamos funciones !(n) y !(1), tenemos una funcin lineal
de n, !(n)
! Al aadir el trmino 2T(n/2), da el peor caso de
MergeSort
! T(n) es !(n lg n), lg n es log
2
n
! Para entradas suficientemente grandes, MergeSort con !(n lg
n) es mejor que InsertionSort con !(n
2
)

Potrebbero piacerti anche