Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Observaciones y advertencias:
PROGRAMA
1. ALGORITMOS:
Definicin de algoritmo. Modelos de computacin: modelo RAM, Mquina de Turing.
Complejidad, definicin, complejidad en el peor caso, en el caso promedio. Algoritmos de
tiempo polinomial y no polinomial. Lmite inferior. Ejemplo: anlisis de algoritmos de
ordenamiento. Algortimos recursivos. Anlisis de la complejidad de algoritmos recursivos.
Tcnicas de diseo de algoritmos: dividir y conquistar, backtracking, algoritmos golosos,
programacin dinmica.
Algoritmos probabilsticos. Algoritmos aproximados Algoritmos heursticos: ejemplos.
Metaheursticas. Nociones de evaluacin de heursticas.
2. GRAFOS:
Definiciones bsicas. Adyacencia, grado de un nodo, isomorfismos, caminos, conexin, etc.
Grafos eulerianos y hamiltonianos. Grafos bipartitos. Arboles: caracterizacin, rboles
orientados, rbol generador. Enumeracin. Planaridad. Coloreo. Nmero cromtico.
Matching, conjunto independiente, recubrimiento. Recubrimiento de aristas y vrtices.
BIBLIOGRAFIA
BIBLIOGRAFA BSICA :
ALGORITMOS
Qu es un algoritmo ?
Qu es un buen algoritmo?
Dados dos algoritmos para resolver un mismo problema, cul
es mejor?
Cundo un problema est bien resuelto?
Cmo se hace para inventar un nuevo algoritmo?
Qu es un algoritmo?
Nocin informal:
Un algoritmo es una sucesin finita de instrucciones bien definidas tal
que:
i) No hay ambigedad en las instrucciones.
ii) Despus de ejecutar una instruccin no hay ambigedad respecto de
cual es la instruccin que debe ejecutarse a continuacin.
iii) Despus de un nmero finito de instrucciones ejecutadas se llega
siempre a la instruccin STOP (Un algoritmo siempre para).
PROBLEMA
instancia de un problema
datos de entrada de una instancia (E)
solucin (S)
ALGORITMO:
tcnica para la resolucin de un problema
funcin f tal que f (E) = S
Problema de Collatz
Paso 1: z nmero entero positivo
Paso 2: mientras z 1 hacer
Paso 3: Si z es par poner z = : z / 2
En caso contrario poner z =: 3 z +1
Paso 4: parar
=====================================
es esto un algoritmo?
Complejidad Computacional
Complejidad
La complejidad de un algoritmo es una funcin que
calcula el tiempo de ejecucin en funcin del
tamao de la entrada de un problema.
Historia
Complejidad en el peor caso (es siempre significativo el
peor caso?)
Complejidad en el caso promedio (porqu no usamos este
enfoque siempre?)
MODELOS DE COMPUTACION
RAM
MAQUINA DE TURING
memoria
Salida
entrada
procesador
Ejemplo
( sacado del libro de Aho, Hopcroft y Ullmann)
Ejemplo de tabla de instrucciones de una mquina RAM
LOAD
STORE
ADD
SUB
MULT
DIV
READ
WRITE
JUMP
JGTZ
JZERO
HALT
operador
operador
operador
operador
operador
operador
operador
operador
label
label
label
leer r1
si r1 0 entonces write 0
r2 -- r1
r3 -- r1 -1 .
r2 -- r2 * r1 .
r2 -- r2 * r1
write r2
T = j nj tj
Si suponemos que todos los tj son iguales tenemos
T = j n j
Mquina de Turing
(determinstica)
operaciones:
i) lectura del smbolo ti inscripto en la celda sealada por la cabeza.
ii) guardar en esta celda el smbolo tf determinado por qi.
iii) transicin al estado qf determinado por ti y qi .
Ejemplo
Mquina de Turing para resolver el problema de determinar si
dados N y M con M > 1, N es divisible por M.
Alfabeto T = { A, B, 0, 1, 2 }
Se almacenan en la cinta M y N codificados en base 1, separados
por el smbolo B y con el smbolo A marcando el fin del nmero.
Estado inicial: q0
Estados posibles Q = {q0, q1 ,q2,qs, qn}
Programa
Instrucciones
(q0, A,, q2 , A , + 1)
(q1, A,, qn , * , *)
(q2, A,, qs , * , *)
(q0, B,, q0 , B , - 1)
(q1, B,, q1 , B , + 1)
(q2, B,, q2 , B , + 1)
(q0, 0 , q0 , 0 , - 1)
(q1, 0,, q1 , 0 , + 1)
(q2, 0, q2 , 0 , + 1)
(q0, 1 , q1 , 2 , + 1)
(q1, 1 , q0 , 0 , - 1)
(q2, 1 , q0 , 1 , -1)
(q0, 2, q0 , 2 , -1)
(q1, 2 , q1 , 2 , + 1)
(q2, 2, q2 , 1 , + 1)
Repasando notaciones
Dadas dos funciones f y g : N+ R decimos que:
f(n) = O (g(n)) si c> 0 y n0 N tal que f(n) c g(n)
n > n0 .
f(n) = (g(n)) si c> 0 y n0 N tal que f(n) > c g(n)
n > n0 .
f(n) = (g(n)) si c,c> 0 y n0 N tal que
c g(n) f(n) c g(n)
n > n0
20
0.00002
30
0.00003
40
0.00004
50
0.00005
60
0.00006
10
n 0.00001
n2 0.0001
n3 0.001
n5 0.1
2n 0.001
3n 0.59
20
0.00002
0.0004
0.008
3.2
1.0
58 min
30
0.00003
0.0009
0.027
24.3
17.9min
6.5aos
40
0.00004
0.0016
0.064
1.7 min
12.7das
3855siglos
50
0.00005
90.0025
0.125
5.2 min
35.6 aos
2 E+8 siglos
60
0.00006
0.0036
0.216
13.0
366 siglos
1.3 E+13 siglos
actual
N1
N2
N3
N4
N5
N6
=============================
POLINOMIAL = bueno
EXPONENCIAL = malo
=============================
Bsqueda secuencial
Datos: n, b, (a1,a2,.............an)
Paso 1: para i = 1,n hacer
if b = ai parar
Paso 2 : parar
=========================
Complejidad?
Bsqueda Binaria
Function Bin (T,x)
si n = 0 o x < T entonces return
i1
jn
mientras i < j hacer
k (i+j+1)/2
si x < T (k) entonces j k-1
sino i k
return i
=========================
Complejidad?
Algoritmos de ordenamiento
Algoritmo de burbujeo
Datos: (a1,a2, ...................an)
Paso 0: poner k = n
Paso 1: mientras k 1 hacer
Paso 2: poner i = 1
Paso 3: mientras i k hacer
Paso 4 : si ai > ai+1 cambiar ai con ai+1
Paso 5: poner i = i + 1
Paso 6 : poner k = k -1
Paso 7 : parar
=========================
Complejidad?
Heap sort
Heap: rbol binario casi completo, donde cada nodo tiene
asignado un valor de forma que el valor de un nodo es mejor
(mayor) que el de sus hijos.
Puede ser representado por un arreglo T en el cual los nodos del
nivel k se guardan en las posiciones
T [2k], T [2k+1], ................T [2k+1-1]
ejemplo
T [1]
T [2]
T [4]
T [8]
T [9]
T [3]
T [5]
T [10]
T [6]
T [7]
10
Algoritmo Make-Heap
Dado un arreglo T los siguientes procedimientos nos permiten ordenarlo:
procedure sift-down(T [1..n], i)
(baja el nodo i hasta que T [1..n] vuelve a ser un heap, suponiendo que
T sea suficientemente grande para ser un heap (caso base?)
ki
repetir mientras j k
jk
if 2j n y T [2j ] > T [k ] entonces k 2j
if 2j < n y T [2j +1 ] > T [k ] entonces k 2j + 1
intercambiar T [j ] y T [k ]
fin
Complejidad de make-heap
Cmo calcular t(k), complejidad de armar un heap de altura k?
Podemos plantear la siguiente formula recursiva para la
complejidad:
t(k) = 2 t (k-1) + O (k)
entonces
t(k) = O (2k)
Cmo un heap de n elementos tiene altura log n entonces
puede ser construido en en O(2 log n ) pasos o sea en tiempo
lineal.
Algoritmos golosos
Dividir y conquistar
Recursividad
Programacin dinmica
Backtracking
Algoritmos Probabilsticos
Algoritmos Golosos
Se usan principalmente para problemas de optimizacin.
Componentes:
Supongamos que en I hay dos enteros a y b con a < b y tal que tia > tib.
O sea el cliente a es atendido antes que el b, a pesar de que el primero
requiere mas tiempo de servicio. Si intercambiamos cambiamos las
posiciones de a y b tenemos un nuevo orden I para el cual
T (I) = (n-a + 1) tib +(n-b+1) tia + ka,b (n-k+1) tik
Entonces
T(I) T ( I) = (n-a + 1) (tia - tib ) +(n-b+1) (tib - tia )=
= (b-a) (tia - tib ) > 0
Vemos que podemos seguir mejorando el valor de T intercambiando el
orden de los clientes hasta obtener el orden ptimo dado por el
algoritmo goloso.
==================================
Cul es la complejidad de este algoritmo?
Planificacin de tareas
Hay n tareas que deben ser ejecutadas cada una de las cuales
requiere una unidad de tiempo. En cada momento se puede
ejecutar una sola tarea.
Cada tarea i produce un beneficios gi y debe ser ejecutada antes del
tiempo di.
Ejemplo con n = 4
i
gi
di
1
50
2
2
10
1
3
15
2
4
30
1
p y q x r - - -
SJ
r s t p u v q w
x y - p r - q u s t p r v q w
Algoritmo goloso
(se supone que las tareas estn numeradas de modo que g1 g2 .. gn)
------------------------------------------------------------------Funcin sequence (d[0n])
d[0], j[0] --------- 0
k, j[1] ------1
Para i= 1,n hacer
r <-k
mientras d[j [r]] > max ( d(i),r) hacer r = r-1
si d[j [r]] d[i] y d[i] > r entonces
para l=k-1, r+1 hacer j[l+1] = j[l]
j[r+1] ---------i
k ---- k+1
Return k, j[1,.k]
------------------------------------------------------------------
Problema de la mochila
Quiero decidir cules son los elementos que tengo que elegir para llevar en la mochila
para maximizar mi beneficio respetando la restriccin de capacidad de la misma.
Max z =j cj xj
sujeto a que
j aj xj b
xj N+
b : capacidad de la mochila
cj : beneficio de llevar una unidad del elemento j
aj : peso del elemento j
b, cj , aj positivos
Ejemplo:
n = 5, b = 100 y los beneficios y pesos estn dados en la tabla
aj
10
30
20
50
40
cj
20
66
30
60
40
Veamos que ocurre en el caso de que las variables xj tengan que tomar valores
enteros (como ocurre en la prctica, es decir cuando no podemos llevar un
pedazo de un objeto).
Dividir y conquistar
ESQUEMA GENERAL:
-------------------------------------------------------------------------------Funcin DQ (x)
Si x es suficientemente chico o simple entonces return
ADHOC(x)
Sino, descomponer x en subinstancias x1.xk .
Para i=1,k hacer yi = DQ (xi)
Combinar las soluciones yi para construir una solucin y
para x
Return y
--------------------------------------------
Ejemplos:
Bsqueda binaria
Merge Sort
Quick Sort
Algoritmo de multiplicacin de Strassen
a21 a22
podemos poner
B = b11 b12
b21 b22
m1 = (a21 + a 22 a 11 ) (b22 - b 12 + b 11 )
m2 = a11 b11
m3 = a12 b21
m4 = (a 11 a 21 ) (b 22 b 12 )
m5 = (a21 + a 22 ) (b 12 b 11 )
m6 = (a12 - a 21 + a11 a 22 ) b22
m7 = a22 ( b11 + b22 - b 12 b 21 )
Entonces el producto AB queda:
m2 + m3
m1 + m2 + m5 + m6
m1 + m2 + m4 m7 m1 + m2 + m4 + m5
Este procedimiento requiere 7 multiplicaciones para cacular el producto
de A y B (pero ms sumas que el mtodo tradicional!!).
Backtracking
Tcnica para recorrer sistemticamente todas las posibles
configuraciones de un espacio. Puede pensarse tambin que es
una tcnica para explorar implcitamente rboles dirigidos (o
grafos dirigidos en general pero sin ciclos).
Procedure backtrack (v[1.k])
{v es un vector k-prometedor }
si v es una solucin al problema entonces escribir v
sino para cada vector k+1-prometedor w tal que
w[1k] = v[1k] hacer backtrack (w[1k+1])
===============================================
No necesariamente exploramos todas las ramas del rbol : poda
Algoritmo de bactracking
Decimos que un arreglo V de los enteros 1 a 8 es k-prometedor
si ninguna de las reinas ubicadas en las posiciones (1, v(1)),
(2,v(2)), (3,v(3)),..(k,v(k)), 1 k n amenaza a las otras.
O sea v es k-prometedor si para todo ij entre 1 y k, tenemos
que v(i) v(j) {i-j,0,j-i}.
Un vector 8-prometedor es solucin del problema de las 8
reinas.
Algoritmo de bactracking
-----------------------------------------------------------------------------------Procedimiento Queens (k, col, diag45, diag 135)
{Try[1,k] es k-prometedor, col = {try [i], 1 i k}
diag45 = {try [i]-i +1, 1 i k}
diag135 = {try [i] + i - 1, 1 i k}}
Si k = 8
entonces {una 8-prometedora solucin es solucin}. Return try
Sino {explorar las k+1 extensiones de try}
Para k=1,8
si j col y j-k diag45 y j+k diag135 entonces
try[k+1] --j
{try [1,.k+1] es k+1 prometedor}
Queens (k+1, col U {j}, diag45 U {j}, diag135 U {j+k}
-------------------------------------------------------------------------------------
Otros ejemplos
Encontrar, usando backtracking todas las soluciones enteras de
x1+ x2 + x3 10
1 xi 4
i =1,2,3
Programacin Dinmica
Tcnica bottom- up
Ejemplos:
Coeficientes binomiales
Producto de matrices
Comparacin de secuencias de ADN
Subsecuencia creciente mxima
Arbol de bsqueda ptimo
etc.
Tringulo de Pascal
0
k-1
n-1
..
C(n-1, k-1)
C(n-1, k)
C (n,k)
10
15
T(n)
14
4862
267440
s=0 : mii = 0
para i=1,2,n
s= 1 : mi i+1 = di-1didi+1 para i=1,2,n-1
1< s < n : mi i+s = mini k < i+s {mik + mk+1 i+s + di-1dkdi +s}
para i=1,2,n-s
J=1
0
2
5785
3
1530
4
2856
s=3
1335
1845
s=2
9078
s=1
s=0
Observar que cada eje del polgono original est en un solo tringulo.
i
j
T [i,j] = min jk = i {T [i,k] + T [k,j] + dik + dkj }
Complejidad : O(n3)
Complejidad espacial: O(n2)
===========================================
Qu pasa si el polgono no es convexo?.
Qu pasara si hubiera puntos en el interior del polgono?.
El nmero de subregiones en cada paso ya no es 2 y crece
exponencialmente y entonces el algoritmo de programacin dinmica
no es eficiente.
No se conocen algoritmos polinomiales para el problema de triangulacin
en este caso.
Scores
Ejemplo
T
S
GACGGATTAG
GATCGGAATAG
match = +1
mismatch = -1
gap penalty = -2
Score(T, S) = 9 x 1 + 1 x (-1) + 1 x (-2) = 6
S = AAAC
T = AGC
A
F(i-1,j-1)
F(i,j-1)
F(i-1,j)
F(i, j)
F(i-1, j-1)+p(i,j)
F(i, j)= max F(i-1, j)-w
F(i, j-1)-w
Llenado de la Matriz
Se llena la matriz la primera fila y la primera columna con
mltiplos de la penalidad por espacio.
Se llenan los elementos interiores
F[i,j] = max
F[i, j-1] + g
F[i-1, j-1] + p(i,j)
F[i-1, j] + g
g = penalidad por espacio, p(i,j) = valor del matching entre
S(i) y T(j)
Sigue cualquier orden que permita tener los valores F[i, j-1],
F[i-1, j-1], F[i-1, j]. Como fila por fila ( de izquierda a
derecha) o columna por columna (de arriba hacia abajo).
Algoritmo
n = long(S)
m = long(t)
Para i = 0 hasta n hacer
F[i, 0] = i g
Para i = 0, m hacer
F[0, i] = i g
Para i = 1, n hacer
Para j = 1, m hacer
F[i, j] = max (F[i-1, j] + g, F[i-1, j-1]
+ p(i,j), F[i, j-1] + g)
Return F
Inicio de la matriz:
A
0
-2
Inicio de la matriz:
0
-2
-4
-6
AGC
AAAC
-2
-4
-6
-8
-2
-4
-6
-2
-4
-6
-2
-1
-1
-4
-1
-1
-6
-1
-1
-8
-1
-1
F(i-1, j-1)+s(i,j)
F(i, j)= max F(i-1, j)-w
F(i, j-1)-w
?
?
-2
?
-4
-6
-1
-1
-2
-4
-1
-1
-6
-1
-1
-8
-1
-1
A
F(i-1, j-1)+s(i,j)
F(i, j)= max F(i-1, j)-w
F(i, j-1)-w
-2
-2
-4
-6
1
A
A
-1
-1
-1
-1
-4
-6
-1
-1
-8
-1
-1
A
F(i-1, j-1)+s(i,j)
F(i, j)= max F(i-1, j)-w
F(i, j-1)-w
-2
-2
-4
-6
-1
-1
-4
-6
-1
-1
-8
-1
-1
-1
A
AG
-1
-1
F(i-1, j-1)+s(i,j)
F(i, j)= max F(i-1, j)-w
F(i, j-1)-w
-2
-4
-6
-2
-4
-6
-8
-1
-1
-1
-1
-1
-1
-3
-1
-2
-1
-1
-1
-5
-4
score ptimo global
-3
-2
-1
-1
Tenemos el valor
de la similitud entre
las secuencias.
Ahora necesitamos
reconstruir el
alineamiento
-2
-2
-4
-6
-1
-1
-4
-1
-1
-1
-6
-3
-1
-2
-1
-8
-1
-5
-1
-1
-4
-3
-2
-1
-1
Mxima preferencia
-2
-4
-6
-2
-1
-4
-1
-1
-6
-3
-1
-8
-1
-5
-1
-1
-1 C
AA
-3
G C
-1
-2
-1
-4
-2
-1
-1
Mxima preferencia
-2
-4
-2
-4
-6
-1
-1
-1
-1
-1
-6
-3
-1
-2
-1
-8
-1
-5
-1
AAAC
AG C
-1
-4
-3
-2
-1
-1
Algoritmo de reconstruccin
+g
Recursin en el algoritmo
(0,0)
j
j-1
i-1 +p(i,j)
i +g
+g
j-1
i-1 +p(i,j)
i +g
+g
j-1
i-1 +p(i,j)
i +g
+g
Complejidad
m = long(S)
n = long(t)
Para i, desde 0 hasta n hacer
F[i, 0] = i x g
Para i, desde 0 hasta m hacer
F[i, 0] = i x g
n veces
m veces
m veces
Devolver F[n,m]
n veces
Complejidad
Complejidad Temporal:
O(mn) en armar la matriz
O(m + n) en buscar en la matriz (recorrer la
secuencia resultante, que a lo sumo tiene n+m
elementos).
Complejidad Espacial:
O (mn) por el espacio necesario para la matriz
Algoritmo knapsack
Input: S un array con los tamaos de cada item y K.
Output: Un arreglo de dos dimensiones tal que P[i,k].exist =
true si existe una solucin con los primeros i elementos para
una mochila de tamao k y P[i,k].belong = true si el elemento
i pertenece a esa solucin.
Algoritmo
Empezar
P[0,0] exist = true
para k = 1,K hacer
P[0,k].exist = false
para i =1,n hacer
para k = 0,K hacer
P[i,k]. exist = false
if P[i-1,k]. exist then
P[i,k]. exist = true
P[i,k]. belong = false
else if k-S[i] 0
if P[i-1,k-S[i]]. exist then
P[i,k]. exist = true
P[i,k]. belong = ture
end
10
11
12
13
14
15
16
Referencias de la tabla:
I : se encontr una solucin que contiene este item
O: se encontr una solucin sin este item
- : no hay solucin hasta el momento (si este smbolo aparece en la ltima lnea
quiere decir que no hay solucin para este tamao de mochila)
Relacin de recurrencia:
l0 = 0
li = maxj<i lj +1,
con sj < si
La solucin al problema la da
max 1in li
sucesin
9 5
longitud
1 1
predecesor
Complejidad?
O(n2) ( se podra implementar en O(nlogn))
Cul es la complejidad espacial?.
Cmo hacemos para tener tambin la sucesin y no slo la longitud.
Relacin de recurrencia?
Sea:
mij = jk= i pk
(probabilidad de que una clave este en la sucesin ci,ci+1 ,cj )
C ij = 0 para j = i-1
Y si queremos que el subrbol sea optimo la raz tiene que ser elegida de
modo a minimizar
Cij = mij + min ikj {Ci,k-1 + C k+1,j}
Ejemplo:
pi
0.30
0.05
0.08
0.45
0.12
0.30
0.35
0.43
0.88
0.05
0.13
0.58
0.70
0.08
0.53
0.65
0.45
0.57
0.12
Calculamos la matriz de
los mij
0.30
0
0.40
0.05
0
0.61
0.18
0.08
0
1.49
0.76
0.61
0.45
0
1.73
1.00
0.85
0.69
0.12
Algoritmos probabilsticos
Heursticas
Dado un problema , un algoritmo heurstico es un
algoritmo que intenta obtener soluciones para el problema
que intenta resolver pero no necesariamente lo hace en todos
los casos.
Sea un problema de optimizacin, I una instancia del
problema, x*(I) el valor ptimo de la funcin a optimizar en
dicha instancia. Un algoritmo heurstico obtiene una solucin
con un valor que se espera sea cercano a ese ptimo pero no
necesariamente el ptimo.
Si H es un algoritmo heurstico para un problema de
optimizacin llamamos xH(I) al valor que devuelve la
heurstica.
Algoritmos aproximados
Decimos que H es un algoritmo - aproximado para el problema si para
algn > 0
xH(I) - x*(I) | | x*(I) |
O equivalentemente un algoritmo es aproximado si existe > 0
tal que para toda instancia I
xH(I) / x*(I)
(problema de minimizacin)
Metaheursticas
GRAFOS
Qu es un modelo matemtico?
Problemas que pueden modelarse usando grafos.
La nocin de grafos fue planteada
independientemente por varios cientficos de
diferentes disciplinas.
Historia
Graph Theory: 1736-1936, Biggs,Lloyd, Wilson,
Oxford University Press, 1976.
Butano
Isobutano
Aplicaciones actuales
Definiciones
Un grafo G = (V,X) es un par de conjuntos, donde V
es un conjunto de puntos o nodos y X es un
subconjunto del conjunto de pares no ordenados de
elementos distintos de V .
Los elementos de X se llamas aristas o ejes o arcos.
Dados v, w V, si e = (v,w) X se dice que v y w
son adyacentes y que e es incidente a v y a w.
Notacin: n= | V | m = | X |
Teorema:
Un grafo G es bipartito si y slo si todos sus
circuitos tienen longitud par
Proposicin:
Si dos grafos G y G son isomorfos:
i) tienen el mismo nmero de nodos
ii) tienen el mismo nmero de ejes
iii) para todo k, 0 k n-1 tienen el mismo nmero
de nodos de grado k.
iv) tienen el mismo nmero de componentes conexas
vi) para todo k, tienen el mismo nmero de caminos
simples de longitud k.
Matrices
Listas
Arboles
Teorema:
Recorrido de rboles
BFS (Breadth-First Search)
DFS (Depth-First Search)
En qu casos conviene uno u otro mtodo de
recorrido?.
Arboles generadores
Def: Dado un grafo G, un rbol generador de G es un es un subgrafo de
G que es un rbol y tiene el mismo conjunto de nodos de G.
Def: Sea G= (V,X) un grafo y
l : X -------------> R
un funcin que asigna longitudes (o pesos) a los ejes de G.
Definimos la longitud de un rbol T como
l(T) = eT l(e)
Ejemplo
C
4
12
8
8
3
6
13
I
5
10
Algoritmo de Prim
-------------------------------------------------------------------------Input: G = (V,X) grafo conexo con una funcin de longitudes
positivas asignadas a los ejes.
Empezar
Elegir un eje e X de longitud mnima.
Poner T = {e}, i = 1
Mientras i < n-1 hacer
Elegir e X tal que la longitud de e sea mnima entre
los ejes que tienen un extremo en T y otro fuera de T.
Poner T = T {e}
Poner i = i+1
Fin
Fin
Algoritmo goloso
Algoritmo de Kruskal
Input: G = (V,X) grafo conexo con una funcin de longitudes
positivas asignadas a los ejes.
Empezar
Elegir un eje e X de longitud mnima.
Poner T = {e}, i = 1.
Mientras i < n-1 hacer
Elegir e X tal que la longitud de e sea mnima entre
los ejes que no forman circuito si los agregamos a T.
Poner T = T {e}.
Poner i = i+1.
Fin
Fin
Enumeracin
Cuntos grafos diferentes hay que tengan ciertas
caractersticas?. (Ej: cuntos grafos conexos con 8 nodos y 2
circuitos)
Cuntos subgrafos de un cierto tipo de un grafo dado hay?
(Ej: cuntos rboles generadores tiene un grafo, cuantos
circuitos, cuntos grafos completos)
En general son problemas difciles
Distintas situaciones:
------------------------------------------------------------------Empezar
S={v}, (v)=0, si vwX, (w)=l(vw),
Mientras SV hacer
Encontrar wV\S tal que (w)=min (u), uV\S.
S=S{w}.
uV\S / wuX,
si (u)>(w)+l(wu),
(u)=(w)+l(wu),
Fin
Fin
-----------------------------------------------------------------------Cmo hacemos si adems de calcular las distancias queremos
determinar tambin un camino mnimo?
4
1
1
1
1
7
6
4
4
1
1
1
2 4/1 3
/11
7
1
3
0/ 0
4 3/ 1
/3/11
1
/ 11
3 7/1
/11
1
1
4
/11
5
/
/11
4
1
1
1
2 4/1 3
/11
7
1
3 7/1
/11
1
1
3
0/ 0
6
4
4 3/ 1
/3/11
1
/ 11
5 6/4
/11
/11
4
1
1
1
2 4/1 3
/11
7
1
3 7/1
/11
1
1
3
0/ 0
6
4
4 3/ 1
/3/11
1
/ 11
5 5/2
/11
/11
4
1
1
1
2 4/1 3
/11
7
1
3 7/1
/11
1
1
3
0/ 0
6
4
4 3/ 1
/3/11
1
/ 11
5 5/2
/11
9/5
/11
4
1
1
1
2 4/1 3
/11
7
1
3 7/1
/11
1
1
3
0/ 0
6
4
4 3/ 1
/3/11
1
/ 11
5 5/2
/11
8/3
/11
4
1
1
1
2 4/1 3
/11
7
1
3 7/1
/11
1
1
3
0/ 0
6
4
4 3/ 1
/3/11
1
/ 11
5 5/2
/11
8/3
/11
4
1
1
1
7
-2 1 2
7
1
1
1
1
1
1
4
3
-----------------------------------------------------------------------Empezar
(v)=0, wV\{v}, (w)=.
Mientras hay cambio en hacer
Para wV\{v} Hacer
(w)=min ((w), min uwX ((u)+l(uw)))
Fin
Fin
Fin
-----------------
----------------------------------------------------------Empezar
Algoritmos matriciales
Def: Sea G= ({1,...n},X) un digrafo y l:XR una funcin de
longitud/peso para los ejes de G. Definimos las siguientes
matrices:
L=(lij) definida por:
lii=0
lij= l(ij) si ijX
lij= si ijX
D=(dij) donde dij es la longitud del camino orientado mnimo
de i a j , si camino entre i y j, y sino dij = .
D es llamada matriz de distancias de G.
L= 2
-2
---------------------------------------------------------------------Empezar
L(0)=L
Para k desde 1 hasta n hacer
Para i desde 1 hasta n hacer
Para j desde 1 hasta n hacer
l(k)ij=min(l(k-1)ij,l(k-1)ik+ l(k-1)kj)
Fin
Fin
Fin
Fin
-2
L = L(0) = 2
-2
L(1) =
L(1) =
-2
-2
L(2) =
L(2) =
-2
L(3) = 2
-2
L(3) =
-2
D = L(4) = 2
-2
---------------------------------------------------------------Empezar
L(0)=L
Para k desde 1 hasta n hacer
Para i desde 1 hasta n hacer
Si l(k-1)ik=, saltar al siguiente valor de i.
Si l(k-1)ik+ l(k-1)ki<0, informar que hay circuito
de longitud negativa.
Para j desde 1 hasta n hacer
l(k)ij=min(l(k-1)ij,l(k-1)ik+ l(k-1)kj)
Fin
Fin
Fin
------------------------------------------------------------Empezar
Para k desde 1 hasta n-1 hacer
Para i desde 1 hasta k hacer
li,k+1= minijk(li,j+ lj,k+1)
lk+1,i= minijk(lk+1,j+ lj,i)
Fin
t= minijk(lk+1,i+ li,k+1)
Si t<0, informar que hay circuito de longitud negativa.
Para i desde 1 hasta k hacer
Para j desde 1 hasta k hacer
li,j=min(li,j,li,k+1+ lk+1,j)
Fin
Fin
Fin
DL =
=
5 3
-2
Grafos Eulerianos
Def: Un circuito C en un grafo G se llama un circuito euleriano si C pasa
pot todos los ejes de G una y slo una vez.
Def: Un grafo euleriano es un grafo que tiene un circuito euleriano.
Teorema (Euler 1736): Un grafo conexo es euleriano si y slo si todos sus
nodos tienen grado par.
A partir de la demostracin del teorema de Euler se puede escribir un
algoritmo para construir un circuito euleriano para un grafo que tiene
todos sus nodos de grado par.
Cul es la complejidad de este algoritmo?.
Grafos hamiltonianos
Def: Un grafo se dice hamiltoniano si tiene un circuito que
pasa por cada nodo de G una y slo una vez.
No se conocen buenas caracterizaciones para grafos
hamiltonianos.
Cmo intentar construir un circuito hamiltoniano?.
No se conocen algoritmos polinomiales para decidir si un
grafo es hamiltoniano o no.
Empezar
Poner P = , k=1 , j =0
Mientras sea posible y |P | n hacer
elegir j V tal que j sea vecino de k
si j P poner P = P { (k,j)}, k = j
sino
buscar (j,m) X tal que P \ { (j,m)} { (k,j)} sea
un camino simple.
Poner P = P\ { (j,m)} { (k,j)}
k=m
Fin
Fin
Si j = 1 return EXITO
Sino return FRACASO
Fin
Heursticas de insercin
------------------------------------------------------------------------Empezar
Construir un circuito de longitud 3.
Marcar los nodos del circuito
Mientras haya nodos sin marcar hacer
ELEGIR un nodo v sin marcar
INSERTAR v en el circuito
Fin
----------------------------------------------------------------------Cmo ELEGIR?. Cmo INSERTAR?.... variantes de la
heurstica de insercin.
Vecino ms prximo
xh (i)/ x* (i) (log n +1)
Insercin del ms prximo xh (i)/ x* (i) 2
Insercin del ms lejano
xh (i)/ x* (i) 2 log n + 0.16
Insercin del ms barato
xh (i)/ x* (i) 2
Heursticas de mejoramiento
Cmo podemos mejorar la solucin obtenida por alguna heurstica
constructiva como las anteriores?
Heurstica 2-opt de Lin y Kernighan
-------------------------------------------------------------------------
En vez de elegir para sacar de H un par de ejes que nos lleve a obtener
un circuito de menor longitud podemos elegir el par que nos hace
obtener el menor H entre todos los pares posibles.(ms trabajo
computacional)
Planaridad
Def: Un grafo es planar si puede representarse en el plano sin
que sus ejes se crucen.
Ej.: K5 y K33 son grafos no planares. K5 es el grafo no planar
con el menor nmero de nodos y K33 es el que tiene el menor
nmero de ejes.
Prop: Si un grafo contiene un subgrafo no-planar es no-planar.
Teorema de Kuratowski
Def: Subdividir un eje e = (v,w) de un grafo G, consiste en
agregar u un nodo a G y reemplazar el eje e por dos ejes e=
(v,u) y e = (u,w).
Def: Un grafo Ges una subdivisin de otro grafo G si Gse
puede obtener de G por sucesivas operaciones de
subdivisin.
Def: Dos grafos G y G se dicen homeomorfos si hay un
isomorfismo entre una subdivisin de G y una de G.
Teorema de Whitney
Def: La operacin de contraccin de un eje e= (v,w) consiste en
eliminar el eje del grafo y considerar sus extremos como un
solo nodo u. (quedan como ejes incidentes a u todos los ejes
que eran incidentes en v y en w).
Def: Un grafo G es una contraccin de otro grafo G si se puede
obtener a partir de G por sucesivas operaciones de contraccin.
En este caso se dice que G es contraible a G.
Teorema: (Whitney) G es planar si y slo si es no contiene
ningn subgrafo contraible a K33 o K5.
Se podran usar estos dos teoremas en la practica para decidir si
Teorema de Euler
Def: Dada una representacin planar de un grafo G, las
regiones de G son los conjuntos conexos (en el sentido
topolgico) maximales que quedan en el plano R2 al sacar
los puntos correspondientes a los nodos de G.
Def: La frontera de una regin es el circuito que rodea a la
regin. (puede tener nodos y ejes repetidos).
Def: El grado o tamao de la regin es el nmero de ejes que
tiene su frontera.
TESTEO DE PLANARIDAD
Algoritmo de Demoucron , Malgrange y Pertuiset
IDEA
Se empieza con R , representacin planar de un subgrafo S de G
y se va extendiendo dicha representacin hasta obtener una
representacin planar de todo el grafo o concluir que no es
posible representar el grafo G en forma planar.
Si el grafo es planar cada componente c (componente conexa)
de G\ R tiene que quedar en una regin de R.
Si el grafo es planar los ejes que conectan a c con un conjunto
W de nodos de R no pueden cruzarse con otros, entonces
todos los nodos de W estn en la frontera de alguna misma
cara o regin de R. (los nodos pueden estar en la frontera de
ms de una cara)
NOTACION, DEFINICIONES
Llamamos parte p de G relativa a R
a:
Algoritmo
Inicializacin. Tomar como R inicial un circuito de G.
Mientras R no sea una representacin planar de G:
Particionar R en partes relativas a G\R
Identificar para cada parte p el conjunto F(p) de las caras en las que
p es potencialmente dibujable
Si para algn p, F(p) es vaco parar. Return FALSE
Sino
si hay algun p para el cual F(p) tiene una sola cara f, elegir esa
cara.
sino elegir una cara cualquiera f correspondiente a un p
cualquiera.
Determinar un camino q, formado por ejes de p, entre un par
de
nodos de contacto de p.
Poner R = R U q
Coloreo de Grafos
Def: Un coloreo vlido de los nodos de un grafo G
es un asignacin de colores a los mismos en la cual
2 nodos adyacentes no tengan el mismo color.
Def: El nmero cromtico (G) de un grafo G es el
menor nmero de colores con que se puede colorear
un grafo.
Ejemplos:
(Kn ) = n
Si G es un grafo bipartito con m > 0, entonces (G)
=2.
Si G es un circuito simple par , entonces (G) =2.
Si G es un circuito simple impar , entonces (G) =
3.
Si T es un rbol con n > 1, entonces (T) =2.
(H) (G)
Def: Una clique en un grafo es un subgrafo completo
maximal. El nmero clique (G) de un grafo es el nmero
de nodos de una clique mxima de G.
Prop: Para cualquier grafo G, (G) (G) .
Grafos de Mycielski
Se definen por induccin:
i) M2 = K2
ii) Mi+1 se construye a partir de Mi mediante el siguiente
procedimiento:
El conjunto de nodos de Mi+1 se forma con el conjunto de
estaban entre los vi, ejes uniendo cada ui con los vecinos de vi
en Mi y ejes uniendo w con cada ui.
Cul es el nmero cromtico de Mi?.
Cul es la clique mxima de Mi?.
Definimos
uSL (G) = 1 + max 1 i n min 1 j i {dGi(vj)}
Se puede demostrar (ejercicio) que:
Algoritmo
. j l i-1 + 1
. j min{i, d(vi)+1 }
. j no es color de un vecino de i ya coloreado
. Si ya se encontr un coloreo del grafo con q colores
j q-1
Se deja de explorar una rama cuando Ui = o se colore a vn.
Coloreo de ejes
Def: Un coloreo vlido de los ejes de un grafo G es
un asignacin de colores a los mismos en la cual 2
ejes que tienen un nodo en comn no tengan el
mismo color.
Def: El ndice cromtico (G) de un grafo G es el
menor nmero de colores con que se pueden
colorear los ejes de un grafo.
Teorema de Vizing: para todo grafo G se verifica que
(G ) = max (G) o (G ) = max (G) +1.
Flujo en redes
Def: una red N es un grafo orientado conexo que tiene dos nodos
distinguidos una fuente s con grado de salida positivo y un
sumidero t con grado de entrada positivo.
Def: Una funcin de capacidades en la red es una funcin
c(e)0 definida para todo eXN.
10
Capacidad
5
15
9
15
15
30
10
6
8
6
10
15
10
7
0
2
10
4
15
15
4
s
Capacidad
5 0
15
0
Flujo
F=4
8
0
6
10
4
15
10
0
0
10
30
0
0
2
10
4
15
15
4
s
5 0
15
0
F=4
8
0
6
10
4
15
10
0
0
10
30
0
0
2
10
4
15
15
4
s
5 0
15
0
F=4
8
0
6
10
4
15
10
0
0
10
30
0
0
2
10
4
15
15
4
s
5 0
15
0
F=4
8
0
6
10
4
15
10
0
0
10
30
0
0
2
10
4
15
15
4
s
5 0
15
0
F=4
8
0
6
10
4
15
10
0
0
10
30
0
10
5
15
9
15
15
30
10
6
8
6
10
15
10
7
C(S) = 30
10
5
15
9
15
15
30
10
6
8
6
10
15
10
7
C(S) = 62
10
5
15
9
15
15
30
10
6
8
6
10
15
10
7
C(S) = 28
6
2
10
10
4
15
15
8
s
5 4
15
10
F = 24
8
0
6
30
10
10
8
15
10
0
10
10
C(S) = 28
9
2
10
10
4
15
15
8
s
5 3
15
15
F = 28
8
5
6
30
15
10
9
15
10
0
10
10
C(S) = 28
2
3
5
1
1
2
3
4
1
1
2
2
2
3
5
1
1
2
3
4
1
1
2
2
2
3
5
1
1
2
2
3
1
4
1
1
1
2
2
2
3
5
1
1
2
2
3
1
4
1
1
1
2
2
2
3
5
1
1
2
1
2
3
1
1
1
1
11
2
1
1
2
3
5
1
1
2
1
2
3
1
1
1
1
11
2
1
1
2
3
5
1
1
1
2
3
1
1
2
1
1
11
1
1
1
2
2
3
5
1
1
1
2
2
3
1
1
2
1
1
11
1
1
1
2
2
3
5
1
1
1
2
1
2
2
1
1
2
1
1
11
1
2
1
1
2
2
3
5
1
1
1
2
1
2
2
1
1
2
1
11
1
2
2
1
4
3
2
3
2
1
2
2
1
5
1
1
1
1
2
1
2
2
1
4
3
2
3
2
1
2
2
1
5
1
1
1
1
2
1
2
2
1
4
3
2
3
2
1
2
2
1
5
1
1
1
1
2
1
2
2
1
1
2
2
2
Sea
Vale que
para todo
salvo 3 arcos:
max F
sujeto a
t,s
eint(t)xe - eout(t)xe = F
eout(v)xe - xe in(v) = 0 para todo v
0 xe c(e) para todo eXN.
Teorema de Hall:
Si G es un grafo bipartito con particin (V1, V2)
entonces G tiene un matching que satura a V1 si y slo si para
todo W V1, |W| |(W)|, donde (W) es el conjunto de
vecinos de los nodos de W.
Dem: (resumen)
< = Si existe un matching que satura a V, cada nodo de W es
vecino de un nodo distinto de V2, y por lo tanto |W| |(W)|.
= > Un matching que satura a V1 corresponde a un flujo mximo
en Nst con valor | V1 | , entonces es suficiente mostrar que un
corte mnimo tiene capacidad | V1|.
El corte definido por {s} tiene capacidad |V1|. Hay que ver que
cualquier otro corte tiene capacidad mayor. Sea <S, S > el
conjunto de ejes de un corte cualquiera y W = S V1 . Se
puede escribir
<S, S > = <{s}, S V1 > <W, S V2 > < S V2 ,
{t}>
Usando esto y la hiptesis del teorema para W, y mirando un grfico de Nst se puede
demostrar que
cap(S) = | < |{s}, S V1 > | + | <W, S V2 > | + | < S V2 , {t}> | =
(todas las capacidades son 1)
= | V1 -W | + | <W, S V2 > | + | S V2 | (por construccin de Nst)
| V1 -W | + | V2 (W)| + | S V2 | = ( por definicin de (W))
= | V1 -W | + | (W)| - | S (W)| + | S V2 |
| V1 -W | + | (W)| - |S V2 | + | S V2 | = (porque (W)
= | V1 -W | + | (W)|
| V1 -W | + | W| (por hiptesis)
| V1|.
V)
2
Complejidad
Problemas NP-Completos
Problemas intratables
Un problema puede ser intratable por distintos
motivos:
el problema requiere una repuesta de longitud
exponencial (ejemplo: pedir todos los circuitos
hamiltonianos de longitud a lo sumo k).
el problema es indecidible (ejemplo: Problema de la
parada: no existe un algoritmo para decidir si dado un
algoritmo y un input para el mismo, el termina o no
(Turing 1936)).
el problema es decidible pero no se conocen algoritmos
polinomiales que lo resuelvan.
Las clases P y NP
Def: Un problema de decisin est en la clase P si
existe un algoritmo polinomial para resolverlo.
Def: Un problema de decisin est en la clase NP si
dada una instancia de si, y una solucin de la
misma, esta solucin se puede verificar en tiempo
polinomial.
P : polinomial
NP: nondeterministic polinomial
Transformaciones polinomiales
Dados dos problemas de decisin 1 y 2 se dice que 1 se
reduce o transforma polinomialmente a 2 ( 1 2) si
existe un algoritmo polinomial que transforma cada instancia
de 1 en una instancia de 2 y es capaz de traducir la
solucin de la instancia transformada de 2 en una solucin
de la instancia original de 1..
Problemas NP-Completos
est en NP
1 es polinomialmente transformable en
La clase NP-Hard
Def:Un problema se dice que es NP-hard si todo otro
problema de NP se puede transformar polinomialmente a
(pero no pertenece a NP o no sabemos si pertenece a NP)
(En la prctica esta definicin se usa a veces por un abuso de
lenguaje tambin para problemas que no son de
decisin.)
N P - H a rd
N P - C o m p le to
Las incgnitas.......
NP
NP
NP
N P - C o m p le t o
N P - C o m p le t o
P= N P
(= N P - C o m p le t o )
N P - In t e rm e d io
(a )
(b )
(c )
Las incgnitas.....
C o -N P
NP
C o - N P - C o m p le t o
N P - C o m p le t o
Algoritmos Pseudopolinomiales
Un algoritmo para resolver un problema es pseudopolinomial
cuando la complejidad del mismo es polinomial en funcin
del tamao de la entrada de codificada en unario.
Ejemplo: se puede probar que el problema de la mochila es NP
completo, sin embargo existe un algoritmo de complejidad
O(nB) que lo resuelve. (n es la cantidad de objetods y B el
peso mximo que se puede cargar).
FIN