david y yolanda

Post on 25-Dec-2015

11 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

algoritmos y su diseño

TRANSCRIPT

David de Frutos EscrigYolanda Ortega Mallén

Ideas y visualizaciones MatemIdeas y visualizaciones Matemááticas ticas

CCáátedra Miguel de Guzmtedra Miguel de Guzmáán (UCM)n (UCM)

Vamos a hablar de algoritmos...... pero no (sólo) de ciertos

algoritmos,

sino de LOS ALGORITMOS en general.¿Cuáles son esos (posibles) algoritmos?

Algoritmo

= Método automático,

preciso

y general para resolver (todas las instancias) de un problema.

Algoritmo

= Método automático,

preciso

y general para resolver (todas las instancias) de un problema.

Ejemplo (no matemático) paradigmático clásico:

Otros ejemplos de la vida real :

Trasladarse cada mañana de casa al trabajo.

Resolver un crucigrama.

Aprendizaje basado en cursos “virtuales”

Hacer un sudoku.

Una receta de cocinaUna receta de cocina

Conceptualmente sencilloAlgoritmos basados en pasos básicos (instrucciones atómicas),que se podrán combinar

mediante un

programa.

Los algoritmos indicarán sin ambigüedad y de un modo claro, en qué ordenhan de ejecutarse las instrucciones.

Los problemas a resolver dependen de unos datos (de entrada) que pertenecen a un dominio “grande”.Queremos evitar mecanismos “mágicos”que resuelven ¡correctamente! un problema sin coste aparente.

√30864197524691358025 =5555555555√30864197524691358025 =5555555555

Tablas trigonométricas o de logaritmosTablas trigonométricas o de logaritmos

100% precisaFinitud vs genericidad ¡potencialmente infinita!Datos: cantidad (finita) de naturales Nk

Cada natural se representa por una secuencia (finita, suficientemente larga) de bits (base 2).Simplificar matemáticamente (sin pérdida de generalidad) usando el isomorfismo: Nk ~ N

Problema (potencialmente algorítmico)función f : Nk Nl

que se desea computar

Problema (potencialmente algorítmico)función f : Nk Nl

que se desea computar

Programación (básica) no estructurada

Programa

= Secuencia

de instrucciones atómicas, numeradas (según el orden de aparición).

Programa

= Secuencia

de instrucciones atómicas, numeradas (según el orden de aparición).

1 : I12 : I2

...n : In

Registros de entradaRegistros de salidaRegistros auxiliares (también preestablecidos)

COPIAR(R,S)INCREMENTAR(R)DECREMENTAR_CONDICIONAL(R,j)Si R

> 0 modificamos R

a R-1,

en caso contrario ir a IjSALTO_INCONDICIONAL(k) Ir a IkTERMINAR

Moderador
Notas de la presentación
El lenguaje intrínseco “de máquina” de todo ordenador convencional es de este tipo.

Instrucciones básicas◦

Asignación R := E(R)

Constructores estructurados◦

Secuencia [I1

,...,Ik

]...

V F◦

Condicional

si C entonces I1

si-no I2◦

Bucles repetitivos

repetir I hasta-que C

I1

I1 Ik

Ik

CC

I1

I1 I2

I2

II

CCVF

Programa = Definición inductiva

0! = 1(n + 1) ! = (n + 1) x n!0! = 1(n + 1) ! = (n + 1) x n!

Alonzo ChurchAlonzo Churchpadre del padre del λλ--ccáálculolculo

Un (sencillo) problema no resoluble algorítmicamente.El problema de parada.

TODAS

las formalizaciones (conocidas) del concepto de algoritmo son equivalentes

TODAS

las formalizaciones (conocidas) del concepto de algoritmo son equivalentes

Pero los algoritmos no lo resuelven todo...

|{ f :

Nk N }|

= ω1

|UNk

| = ω0

Robustez del concepto de algoritmo

Algunos algoritmos trabajan demasiado despacio.

vs

Cálculo de determinantes◦

Aplicación de la definición◦

Método de Gauss

Función de Fibonacci: F(0) = F(1) = 1F(n+2) = F(n+1) + F(n)

Pero a veces no se puede hacer más rápido (que se sepa...).Problemas muy difíciles: coste exponencial

Problemas combinatorios

7

34

5

8 21

7

10

¿P = NP?¿P = NP?

Moderador
Notas de la presentación
Famoso problema abierto de las Matemáticas.

Esquemas algorítmicosEsquemas algorítmicos

¿¿IngenierIngenieríía?a?

¿¿Arte?Arte?

Moderador
Notas de la presentación
Tenemos las piezas de construcción: lenguajes de programación; instrucciones básicas, secuenciación, iteración/recursión. ¿Cómo combinarlas? ¡Ojo! No hay recetas mágicas; cada problema algorítmico es un reto. Ejemplos de métodos que funcionan muy bien para algunos casos.

Niklaus Wirth, Niklaus Wirth, 19761976

Moderador
Notas de la presentación
Montón de fichas: corre el riesgo de examinar una ficha varias veces. Secuencia: ir de una en una hasta encontrar; no está si se llega al final. Secuencia ordenada: ir en orden, no está si nos pasamos. Búsqueda en diccionarios (estimación). Búsqueda binaria. Utilizar VEDYA para ABB.

Memoria vs TiempoMemoria vs Tiempo

Encontrar la ficha de un alumnoEncontrar la ficha de un alumno

•Montón de fichas•Secuencia de fichas•Secuencia ordenada de fichas•Árbol binario de búsqueda

Moderador
Notas de la presentación
Montón de fichas: corre el riesgo de examinar una ficha varias veces. Secuencia: ir de una en una hasta encontrar; no está si se llega al final. Secuencia ordenada: ir en orden, no está si nos pasamos. Búsqueda en diccionarios (estimación). Búsqueda binaria. Utilizar VEDYA para ABB.

Estáticas•

Homogéneas: arrays (vectores, matrices)

Heterogéneas: registrosDinámicas•

Secuencias

Pilas•

Colas

Árboles•

Tablas hash

Moderador
Notas de la presentación
Arrays, secuencias: iteración Árboles: recursión Pilas, colas, ABB: VEDYA

Descomponer el problema a resolver en una colección de subproblemas más pequeños, resolver estos subproblemas y combinar

los

resultados para obtener la solución del problema original.Los subproblemas son del mismo tipo que el problema original, y se resuelven usando la misma técnica. Algoritmo recursivo.

Moderador
Notas de la presentación
Divide et vinces, Divide et impera (Julio César) negociar con cada ciudad conquistada por separado Divide y reinarás (Maquiavelo, “El Príncipe”)

fun

divide-y-vencerás (x:problema) dev

y:soluciónsi

pequeño(x) entonces

y := método-directo(x)

si no {descomponer x en k≥1problemas más pequeños} <x1

, x2

,…, xk

> := descomponer(x) {resolver recursivamente los subproblemas}

para

j = 1 hasta

k haceryj

:= divide-y-vencerás(xi

) fpara{combinar los yj

para obtener una solución y para x} y := combinar(y1

,…, yk

) fsi

ffun

fun

divide-y-vencerás (x:problema) dev

y:soluciónsi

pequeño(x) entonces

y := método-directo(x)

si no {descomponer x en k≥1problemas más pequeños} <x1

, x2

,…, xk

> := descomponer(x){resolver recursivamente los subproblemas} para

j = 1 hasta

k hacer

yj

:= divide-y-vencerás(xi

) fpara{combinar los yj

para obtener una solución y para x} y := combinar(y1

,…, yk

) fsi

ffun

Moderador
Notas de la presentación
Coste log(n) y nlog(n)

{ord(V,c,f) ∧ 1 ≤

c ≤

f+1 ≤

n+1}fun

búsqueda-binaria (V[1..n] de ent, x : ent, c, f : nat)

dev

<b:bool, p: nat>si

c > f entonces <b,p> := <falso,c>

si no m := (c+f) div 2 casos

x < V[m] <b,p> := búsqueda-binaria (V,x,c,m-1)☐ x = V[m] <b,p> := <cierto,m>☐ x > V[m] <b,p> := búsqueda-binaria (V,x,m+1,f)fcasos

fsiffun{(b c≤p≤f ∧ V[p]=x) ∨ (¬b c≤p≤f+1 ∧ V[c..p)<x<V[p..f])}

{ord(V,c,f) ∧ 1 ≤

c ≤

f+1 ≤

n+1}fun

búsqueda-binaria (V[1..n] de ent, x : ent, c, f : nat)

dev

<b:bool, p: nat>si

c > f entonces <b,p> := <falso,c>

si no m := (c+f) div 2 casos

x < V[m] <b,p> := búsqueda-binaria (V,x,c,m-1)☐ x = V[m] <b,p> := <cierto,m>☐ x > V[m] <b,p> := búsqueda-binaria (V,x,m+1,f)fcasos

fsiffun{(b c≤p≤f ∧ V[p]=x) ∨ (¬b c≤p≤f+1 ∧ V[c..p)<x<V[p..f])}

Moderador
Notas de la presentación
Coste lineal. Ver VEDYA

fproc

ord-mezclas(V[1..n] de elem, c, f : nat)si

c < f entoncesm := (c+f) div 2ord-mezclas(V,c,m)ord-mezclas(V,m+1,f)mezclar(V,c,m,f)

fsifproc

fproc

ord-mezclas(V[1..n] de elem, c, f : nat)si

c < f entoncesm := (c+f) div 2ord-mezclas(V,c,m)ord-mezclas(V,m+1,f)mezclar(V,c,m,f)

fsifprocfproc

ord-rápida(V[1..n] de elem, c, f : nat)

si

c < f entoncespartir(V,c,f,p) ord-rápida(V,c,p-1)ord-rápida(V,p+1,f)

fsifproc

fproc

ord-rápida(V[1..n] de elem, c, f : nat)si

c < f entoncespartir(V,c,f,p) ord-rápida(V,c,p-1)ord-rápida(V,p+1,f)

fsifproc

V[p] ≥

V[p]V[p]

http://www.youtube.com/watch?v=vxENKlcs2Tw

Moderador
Notas de la presentación
Ordenación por inserción, selección, burbuja... coste cuadrático Ordenación mezclas: nlog(n) Ordenación rápida: cuadrático caso peor, nlog(n) caso medio. Ver VEDYA quicksort http://www.youtube.com/watch?v=vxENKlcs2Tw

Conjunto de candidatos para construir la solución.Optimización local: seleccionar en cada etapa el mejor según cierto criterio, sin tener en cuenta elecciones futuras.Cada candidato se trata una sola vez. Las decisiones tomadas nunca se reconsideran.Los algoritmos son sencillos y eficientes.

fun

voraz (datos : conjunto) dev

S : conjuntovar candidatos: conjunto

S := ø

{en S se va construyendo la solución}candidatos := datosmientras candidatos ≠

ø

∧¬es-solución?(S)

hacer

x := seleccionar(candidatos) candidatos := candidatos -

{x}

si

es-factible?(S U {x}) entonces

S := S U {x} fsi

fmientrasffun

fun

voraz (datos : conjunto) dev

S : conjuntovar candidatos: conjunto

S := ø

{en S se va construyendo la solución}candidatos := datosmientras candidatos ≠

ø

∧¬es-solución?(S)

hacer

x := seleccionar(candidatos)candidatos := candidatos -

{x}

si

es-factible?(S U {x}) entonces

S := S U {x} fsi

fmientrasffun

Moderador
Notas de la presentación
Coste log(n) y nlog(n)

Cuando Alí-Babá consigue por fin entrar en la Cueva de los Cuarenta Ladrones encuentra allígran cantidad de objetos muy valiosos. A pesar de su pobreza, Alí-Babá conoce muy bien el peso y valor de cada uno de los objetos en la cueva. Debido a los peligros que tiene que afrontar en su camino de vuelta, solo puede llevar consigo aquellas riquezas que quepan en su pequeña mochila, que soporta un peso máximo conocido.Suponiendo que los objetos son fraccionables, determinar qué objetos debe elegir Alí-Babá para maximizar el valor total de lo que pueda llevarse en su mochila.

Moderador
Notas de la presentación
VEDYA antiguo, problema de la mochila: máximo valor, mínimo peso, máximo valor/peso.

mochila(i,j) = máximo valor que podemos poner en la mochila de peso máximo j considerando los objetos del 1

al i.

mochila(i,j) = máximo valor que podemos poner en la mochila de peso máximo j considerando los objetos del 1

al i.

mochila(i,j) = mochila(i-1,j) si pi

>j

máx{mochila(i-1,j),mochila(i-1,j-pi

)+vi

} si pi

≤j

no coger objeto i coger objeto i

con 1 ≤

i ≤

n, 1 ≤

j ≤

M

casos básicos: mochila(0,j) = 0, 0 ≤

j ≤

Mmochila(i,0) = 0, 0 ≤

i ≤

n

Moderador
Notas de la presentación
Programación entera. Ver VEDYA. M= 10, n=5 4-25,3-30,6-50,9-65,2-15

Identificación◦

Especificar la función que representa el problema a resolver.◦

Determinar las ecuaciones recurrentes para calcular dicha función.◦

Comprobar el alto coste de cálculo debido a la repetición de subproblemas a resolver.

Construcción◦

Sustituir la función por una tabla.◦

Inicializar la tabla según los casos base de la función.◦

Sustituir las llamadas recursivas por consultas a la tabla.◦

Planificar un orden adecuado para rellenar la tabla.

Moderador
Notas de la presentación
Richard Bellman inventó la programación dinámica en 1953

Toda solución óptima para una instancia de un problema contiene soluciones óptimas para todas las subinstancias.En una secuencia óptima de decisiones, toda subsecuencia es óptima.

Construir las soluciones por etapas.Búsqueda exhaustiva por el espacio de posibles soluciones hasta encontrar una que satisfaga los criterios exigidos.Impracticable si el espacio de soluciones es muy grande.Estructurar el espacio a explorar para descartar en bloque posibles soluciones no satisfactorias.

En cada nivel se toma la decisión de la etapacorrespondiente.Recorrer el árbol de exploración en cierto orden.

Vuelta atrás: recorrido en profundidad Vuelta atrás: recorrido en profundidad

Ramificación y poda: expande el nodo más prometedor.

Podar

las ramas que no son suficientemente prometedoras.

Ramificación y poda: expande el nodo más prometedor.

Podar

las ramas que no son suficientemente prometedoras.

Moderador
Notas de la presentación
Vuelta atrás: salir de un laberinto. R &P:búsqueda más ”inteligente”.

Para cada nodo se irán generando sus sucesores.◦

Nodo vivo: todavía no se han generado todos sus hijos;◦

Nodo muerto: no puede ser expandido.

Vuelta atrás: recorrido en profundidad; los nodos vivos se gestionan mediante una pila.

Vuelta atrás: recorrido en profundidad; los nodos vivos se gestionan mediante una pila.

Ramificación y poda: expande el nodo vivo más prometedor

los nodos vivos se gestionan mediante una cola con prioridad.

Ramificación y poda: expande el nodo vivo más prometedor

los nodos vivos se gestionan mediante una cola con prioridad.

Moderador
Notas de la presentación
R &P:búsqueda más ”inteligente”.

proc

vuelta-atrás (sol : tupla, k : nat)preparar-recorrido-nivel(k)mientras

¬último-hijo-nivel(k) hacer

sol[k] := siguiente-hijo-nivel(k)si

es-solución?(sol,k) entonces tratar-

solución(sol) sino

si

es-completable?(sol,k) entonces

vuelta-atrás(sol,k+1)fsi

fsifmientras

fproc

proc

vuelta-atrás (sol : tupla, k : nat)preparar-recorrido-nivel(k)mientras

¬último-hijo-nivel(k) hacer

sol[k] := siguiente-hijo-nivel(k)si

es-solución?(sol,k) entonces tratar-

solución(sol)sino

si

es-completable?(sol,k) entonces

vuelta-atrás(sol,k+1)fsi

fsifmientras

fproc

Moderador
Notas de la presentación
Obtiene todas las soluciones. Soluciones solo en las hojas.

Max Bezzel, Max Bezzel, 18481848

http://www.hbmeyer.de/backtrack/achtdamen/eight.htm#up

Moderador
Notas de la presentación
Propuesto por el ajedrecista alemán Max Bezzel en 1848. http://www.hbmeyer.de/backtrack/achtdamen/eight.htm#up

Algorithmics: the spirit of computing (3rd Edition), David Harel, Yishai A.Feldman, Addison Wesley 2004The New Turing Omnibus: Sixty-Six Excursions in Computer Science, A.K.Dewdney, Holt Paperbacks 1993Computers Ltd.: What They Really Can't Do, David Harel, Oxford University Press 2000. Revised paperback edition, 2003Introducción a la computación, Narciso Martí Oliet, Miguel Palomino Tarjuelo y José Alberto Verdejo López, Anaya 2006

Fundamentals of data structures with Pascal (4th Edition), Horowitz, E. y Sahni, S., Computer Science Press 1994 Fundamentals of algorithmics, Brassard, G. y Bratley, P., Prentice Hall International 1996. Versión en castellano: Fundamentos de Algoritmia, Prentice Hall, 1997Computer Algorithms (3rd Edition), Horowitz, E., Sahni, S. y Rajasekaran, S., Computer Science Press 1998Introduction to Algorithms (2nd Edition), Cormen, T.H., Leiserson, C.E., Rivest, R.L. y Stein, C. ,The MIT Press 2001

https://campusvirtual.ucm.es:443/SCRIPT/portal-uatducma-5/scripts/serve_homeVedya (Visualización de algoritmos y estructuras de datos)

http://www.fdi.ucm.es/profesor/csegura/

top related