Você está na página 1de 45

Ideas y visualizaciones Matemticas

Ctedra Miguel de Guzmn (UCM)

David de Frutos Escrig


Yolanda Ortega Malln

Vamos a hablar de algoritmos...


... pero no (slo) de ciertos algoritmos,
sino de LOS ALGORITMOS en general.
Cules son esos (posibles) algoritmos?

Algoritmo = Mtodo automtico, preciso y general


para resolver (todas las instancias) de un problema.

Ejemplo (no matemtico) paradigmtico clsico:

Una receta de cocina


Otros ejemplos de la vida real :

Trasladarse cada maana de casa al trabajo.

Resolver un crucigrama.

Aprendizaje basado en cursos virtuales

Hacer un sudoku.

Conceptualmente sencillo

Algoritmos basados en pasos bsicos


(instrucciones atmicas),
que se podrn combinar mediante un
programa.

Los algoritmos indicarn


sin ambigedad y de un
modo claro, en qu orden
han de ejecutarse las
instrucciones.

Los problemas a resolver dependen de


unos datos (de entrada) que pertenecen a
un dominio grande.
Queremos evitar mecanismos mgicos
que resuelven correctamente! un
problema sin coste aparente.
30864197524691358025 =5555555555
Tablas trigonomtricas o de logaritmos

`
`
`
`

100% precisa
Finitud 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 matemticamente (sin prdida de
generalidad) usando el isomorfismo: Nk ~ N
Problema (potencialmente algortmico)
funcin f : Nk
Nl que se desea computar

Programacin (bsica) no estructurada

Programa = Secuencia de instrucciones atmicas,


numeradas (segn el orden de aparicin).

1 : I1
2 : I2
...
n : In

`
`
`

Registros de entrada
Registros de salida
Registros auxiliares (tambin preestablecidos)

`
`
`

COPIAR(R,S)
INCREMENTAR(R)
DECREMENTAR_CONDICIONAL(R,j)
Si R > 0 modificamos R a R-1,
en caso contrario ir a Ij

`
`

SALTO_INCONDICIONAL(k) Ir a Ik
TERMINAR

Instrucciones bsicas
Asignacin R := E(R)

Constructores estructurados
Secuencia [I1,...,Ik]

...
I11

Condicional
si C entonces I1 si-no I2
Bucles repetitivos
repetir I hasta-que C

Ikk
C
I11

I22
I
F
C

Programa = Definicin inductiva


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

Alonzo Church
padre del -clculo

Robustez del concepto de algoritmo


TODAS las formalizaciones (conocidas) del concepto de
algoritmo son equivalentes

Pero los algoritmos no lo resuelven todo...


|{ f : Nk

N }| = 1

|U Nk | = 0
`

Un (sencillo) problema no resoluble algortmicamente.

El problema de parada.

Algunos algoritmos trabajan demasiado despacio.


vs

Clculo de determinantes

Aplicacin de la definicin
Mtodo de Gauss

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

Pero a veces no se puede hacer ms rpido


(que se sepa...).
Problemas muy difciles: coste exponencial
Problemas combinatorios
3

8
1
7

2
4
7

10
5

P = NP?

Esquemas algortmicos
Ingeniera?
Arte?

Niklaus Wirth,
1976

Memoria vs Tiempo

Encontrar la ficha de un alumno


Montn de fichas

Secuencia de fichas
Secuencia ordenada de fichas
rbol binario de bsqueda

Estticas

Homogneas: arrays (vectores, matrices)


Heterogneas: registros

Dinmicas

Secuencias
Pilas
Colas
rboles
Tablas hash

Descomponer el problema a resolver en una


coleccin de subproblemas ms pequeos,
resolver estos subproblemas y combinar los
resultados para obtener la solucin del
problema original.
Los subproblemas son del mismo tipo que
el problema original, y se resuelven usando
la misma tcnica. Algoritmo recursivo.

fun divide-y-vencers (x:problema) dev y:solucin


si pequeo(x) entonces y := mtodo-directo(x)
si no
{descomponer x en k1problemas ms pequeos}
<x1, x2,, xk> := descomponer(x)
{resolver recursivamente los subproblemas}
para j = 1 hasta k hacer
yjj := divide-y-vencers(xii)
fpara
{combinar los yjj para obtener una solucin y para x}
y := combinar(y11,, ykk)
fsi
ffun

{ord(V,c,f) 1 c f+1 n+1}


fun bsqueda-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> := bsqueda-binaria (V,x,c,m-1)
x = V[m] <b,p> := <cierto,m>
x > V[m] <b,p> := bsqueda-binaria (V,x,m+1,f)
fcasos
fsi
ffun
{(b cpf V[p]=x) (b cpf+1 V[c..p)<x<V[p..f])}

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


si c < f entonces
m := (c+f) div 2
ord-mezclas(V,c,m)
ord-mezclas(V,m+1,f)
mezclar(V,c,m,f)
fsi
fproc
fproc ord-rpida(V[1..n] de elem, c, f : nat)
si c < f entonces
partir(V,c,f,p)
V[p]
V[p] V[p]
ord-rpida(V,c,p-1)
ord-rpida(V,p+1,f)
fsi
http://www.youtube.com/watch?v=vxENKlcs2Tw
fproc

Conjunto de candidatos para construir la


solucin.
Optimizacin local: seleccionar en cada etapa
el mejor segn 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 : conjunto


var candidatos: conjunto
S := {en S se va construyendo la solucin}
candidatos := datos
mientras candidatos es-solucin?(S)
hacer x := seleccionar(candidatos)
candidatos := candidatos - {x}
si es-factible?(S U {x}) entonces S := S U {x}
fsi
fmientras
ffun

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 pequea
mochila, que soporta un peso mximo 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.

mochila(i,j) = mximo valor que podemos poner en la


mochila de peso mximo j considerando los objetos del 1
al i.
mochila(i,j) =

mochila(i-1,j)

si pi>j

mx{mochila(i-1,j),mochila(i-1,j-pi)+vi}

si pij

no coger objeto i

coger objeto i

con 1 i n, 1 j M
casos bsicos: mochila(0,j) = 0, 0 j M
mochila(i,0) = 0, 0 i n

Identificacin

Especificar la funcin que representa el problema a


resolver.
Determinar las ecuaciones recurrentes para calcular
dicha funcin.
Comprobar el alto coste de clculo debido a la
repeticin de subproblemas a resolver.

Construccin

Sustituir la funcin por una tabla.


Inicializar la tabla segn los casos base de la funcin.
Sustituir las llamadas recursivas por consultas a la
tabla.
Planificar un orden adecuado para rellenar la tabla.

Toda solucin 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.


Bsqueda 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 decisin de la etapa


correspondiente.
Recorrer el rbol de exploracin en cierto orden.
Vuelta atrs: recorrido en profundidad
Ramificacin y poda: expande el nodo ms
prometedor.
Podar las ramas que no son suficientemente
prometedoras.

Para cada nodo se irn generando sus sucesores.


Nodo vivo: todava no se han generado todos sus hijos;
Nodo muerto: no puede ser expandido.

Vuelta atrs: recorrido en profundidad;


los nodos vivos se gestionan mediante una pila.
Ramificacin y poda: expande el nodo vivo
ms prometedor
los nodos vivos se gestionan mediante una
cola con prioridad.

proc vuelta-atrs (sol : tupla, k : nat)


preparar-recorrido-nivel(k)
mientras ltimo-hijo-nivel(k) hacer
sol[k] := siguiente-hijo-nivel(k)
si es-solucin?(sol,k) entonces tratarsolucin(sol)
sino si es-completable?(sol,k) entonces
vuelta-atrs(sol,k+1)
fsi
fsi
fmientras
fproc

Max Bezzel,
1848

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

Algorithmics: the spirit of computing (3rd


Edition),
David Harel, Yishai A.Feldman,
Addison Wesley 2004

The New Turing Omnibus: Sixty-Six Excursions in


Computer Science, A.K.Dewdney, Holt

Paperbacks 1993
`

Computers Ltd.: What They Really Can't


Do,
David Harel, Oxford University

Press 2000. Revised paperback edition, 2003


`

Introduccin a la computacin, Narciso Mart Oliet,

Miguel Palomino Tarjuelo y Jos Alberto Verdejo Lpez,

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.
Versin en castellano: Fundamentos de
Algoritmia, Prentice Hall, 1997
Computer Algorithms (3rd Edition), Horowitz,
E., Sahni, S. y Rajasekaran, S., Computer
Science Press 1998

Introduction 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/po
rtal-uatducma-5/scripts/serve_home
` Vedya (Visualizacin de algoritmos y
estructuras de datos)
http://www.fdi.ucm.es/profesor/csegura/
`

Você também pode gostar