Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grafos
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas
1
Clase pasada
Esta es mi entrada
Este es mi algoritmo!
Algoritmo:
Diseñador de Hacer esto
algoritmos Hacer lo otro
Retornar la respuesta
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 4
Clase pasada
LISTA DE
EJERCICIOS 1
Pros:
● ampliamente aplicable
● fácil
● bueno para problemas de pequeñas entradas
Pros:
● Ampliamente aplicable
● Fácil
● Bueno para problemas de pequeñas entradas
Contra:
● A menudo ineficiente para grandes entradas
2. Ordenamiento de burbuja
a) Escanea el arreglo, intercambiando vecinos desordenados.
b) Continúa hasta que no se necesiten hacer cambios.
2. Ordenamiento de burbuja
a) Escanea el arreglo, intercambiando vecinos desordenados.
b) Continúa hasta que no se necesiten hacer cambios.
● Todos junto: c ((n-1) + (n-2) + ... + 1), donde c es el tiempo requerido para hacer una
comparación, un intercambio, verificar la condición del bucle interno e incrementar j.
● También pasamos un tiempo constante k declarando i, j, temp e inicializando i.
● El bucle externo se ejecuta n-1 veces, suponga que el costo de verificar la condición del
bucle y disminuir i es c1.
c n*(n-1)/2 + k + c1(n-1) =
c n*(n-1)/2 + k + c1(n-1) =
1/2c (n2-n) + c1(n-1) + k
c n*(n-1)/2 + k + c1(n-1) =
1/2c (n2-n) + c1(n-1) + k
= O(n2)
Búsqueda secuencial:
Búsqueda secuencial:
● Búsqueda en amplitud:
○ ir nivel por nivel en el grafo
● Búsqueda en profundidad:
○ Ir tan profundo como se pueda, luego retroceder
● Búsqueda en amplitud:
○ ir nivel por nivel en el grafo
● Búsqueda en profundidad:
○ Ir tan profundo como se pueda, luego retroceder
Problema del vendedor viajero, problema del vendedor ambulante, problema del agente viajero o
problema del viajante. Traveling Salesman Problem (TSP)
● Dado un conjunto de n ciudades y distancias entre todos los pares de ciudades, determinar el
orden para viajar a cada ciudad exactamente una vez y regresar a casa con una distancia total
mínima
● Solución: Calcule la distancia para todos los "recorridos" y elija el más corto.
● Toma O(n!) (¡terrible!)
Problema del vendedor viajero, problema del vendedor ambulante, problema del agente viajero o
problema del viajante. Traveling Salesman Problem (TSP)
● Dado un conjunto de n ciudades y distancias entre todos los pares de ciudades, determinar el
orden para viajar a cada ciudad exactamente una vez y regresar a casa con una distancia total
mínima
● Solución: Calcule la distancia para todos los "recorridos" y elija el más corto.
● Toma O(n!) (¡terrible!)
a 2 b
5 3
8 7
c 1 d
a 2 b
a,b,c,d,a ->
5 3
8 7
c 1 d
a 2 b
a,b,c,d,a ->18
5 3
8 7
c 1 d
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a ->
8 7
c 1 d
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d a,c,b,d,a ->
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d a,c,b,d,a -> 23
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d a,c,b,d,a -> 23
a,d,b,c,a ->
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d a,c,b,d,a -> 23
a,d,b,c,a -> 23
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d a,c,b,d,a -> 23
a,d,b,c,a -> 23
a,d,c,b,a ->
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d a,c,b,d,a -> 23
a,d,b,c,a -> 23
a,d,c,b,a -> 18
a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d a,c,b,d,a -> 23
a,d,b,c,a -> 23
a,d,c,b,a -> 18
● agrupación de datos
● otros...
http://www.math.uwaterloo.ca/tsp/problem/index.html
Problema de la mochila:
● Hay n artículos diferentes en una tienda.
● El artículo pesa wi kilos y vale $vi
Un ladrón entra
● Puede llevar hasta W kilos en su mochila.
● ¿Qué debería llevar para maximizar su botín?
Problema de la mochila:
● Hay n artículos diferentes en una tienda.
● El artículo pesa wi kilos y vale $vi
Un ladrón entra
● Puede llevar hasta W kilos en su mochila.
● ¿Qué debería llevar para maximizar su botín?
Solución:
● Considerar todos los subconjuntos posibles de artículos,
● calcular el valor total y el peso total y desechar si son más de W;
● luego elegir el subconjunto restante con el valor total máximo.
● Toma Ω(2n)
● Pregunta rápida:
○ ¿Qué significa el símbolo Ω?
● Pregunta rápida:
○ ¿Qué significa el símbolo Ω?
● N elementos:
n
∑ C(n,i) =
i=1
Serie binomial:
Serie binomial:
𝜶=n
x=1
Serie binomial:
𝜶=n
x=1
(1+1)n = 2n
Serie binomial:
𝜶=n
x=1
(1+1)n = 2n
● W = 10
● Pregunta rápida:
○ ¿Cuántas verificaciones tendremos que
hacer?
● Pregunta rápida:
○ ¿Cuántas verificaciones tendremos que
hacer?
2n = 24 = 16
Aplicaciones:
● aviones a punto de chocar
● qué secuencias de ADN son más similares
● otros...
minDist = infinity
for i = 1 to length(P) - 1 do
for j = i + 1 to length(P) do
let p = P[i], q = P[j]
if dist(p, q) < minDist then
minDist = dist(p, q)
closestPair = (p, q)
return closestPair
En computación gráfica o planificación de robots, una forma simple de verificar que dos objetos
(posiblemente complicados) no estén colisionando es calcular sus envolventes convexos y
luego verificar si los envolventes se cruzan
Idea clave para la solución: la línea que pasa por (xi,yi) and (xj,yj) es:
ax + by = c
donde a = (yj – yi), b = (xi – xj), c = xi yj – yi xj
Idea clave para la solución: la línea que pasa por (xi,yi) and (xj,yj) es:
ax + by = c
donde a = (yj – yi), b = (xi – xj), c = xi yj – yi xj
Los 2 pts están en el envolvente convexo si todos los demás pts están en el mismo lado de
esta línea:
Idea clave para la solución: la línea que pasa por (xi,yi) and (xj,yj) es:
ax + by = c
donde a = (yj – yi), b = (xi – xj), c = xi yj – yi xj
Los 2 pts están en el envolvente convexo si todos los demás pts están en el mismo lado de
esta línea:
Idea clave para la solución: la línea que pasa por (xi,yi) and (xj,yj) es:
ax + by = c
donde a = (yj – yi), b = (xi – xj), c = xi yj – yi xj
Los 2 pts están en el envolvente convexo si todos los demás pts están en el mismo lado de
esta línea:
● Problema: Calcular an
○ Solución: Multiplicar a por ella misma n-1 veces.
○ Toma O(n), asumiendo que cada multiplicación toma un tiempo constante.
● Problema: Calcular an
○ Solución: Multiplicar a por ella misma n-1 veces.
○ Toma O(n), asumiendo que cada multiplicación toma un tiempo constante.
111
Estructuras de datos vs Tipos de datos abstractos
● Listas
○ O(1): Insertar / eliminar en cualquier lugar donde tengamos un
puntero
● Arrays
○ O(1): append, lookup
● Bueno para
○ Pila: último en entrar, primero en salir (LIFO)
■ O(1): Push, pop
○ Cola: primero en entrar, primero en salir (FIFO)
■ O(1): enqueue, dequeue
115
Hoy
● Grafos y terminología
● Búsqueda en profundidad
○ Aplicación: clasificación topológica
○ Aplicación: recorrido en orden de BST
● Búsqueda en amplitud
○ Aplicación: caminos más cortos
○ Aplicación (si hay tiempo): ¿un grafo es bipartito?
• Ejemplo
• V = {1,2,3,4}
• E = { (1,3), (2,4), (3,4), (4,3), (3,2)}
• Ejemplo
• V = {1,2,3,4}
El grado de entrada del vértice 4 es 2.
• E = { (1,3), (2,4), (3,4), (4,3), (3,2)} El grado de salida del vértice 4 es 1.
Los vecinos entrantes de Vertex 4 son 2 y 3.
El vecino saliente de Vertex 4 es 3.
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 133
Grafos
• Example
• V = {1,2,3,4}
• E = { {1,3}, {2,4}, {3,4}, {2,3} }
• Example
• V = {1,2,3,4} El grado del vértice 4 es 2.
• E = { {1,3}, {2,4}, {3,4}, {2,3} } Están saliendo 2 aristas.
Los vecinos de Vertex 4 son 2 y 3
150
Búsqueda en profundidad - Depth-first search
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas
151
¿Cómo exploramos un grafo?
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
Explorando un laberinto
● Ejecutar DFS
● Mantener una lista de paquetes, en el orden en que desea instalarlos.
● Cuando marque un vértice como terminado, colóquelo al principio de la
lista.
● Ejecutar DFS
● Mantener una lista de paquetes, en el orden en que desea instalarlos.
● Cuando marque un vértice como terminado, colóquelo al principio de la
lista.
205
¿Cómo exploramos un grafo?
Si pudiéramos volar...
Si pudiéramos volar...
O(n + m)
252
Componentes fuertemente conectados
Intento 1:
Considerar todas las posibles descomposiciones y verificar.
Intento 1:
Considerar todas las posibles descomposiciones y verificar.
Intento 2:
• Para cada par (u,v),
• usar DFS para encontrar si hay rutas u a v y v a u.
• Agregar.
• Tiempo de ejecución:
• Esto lleva tiempo al menos O(n3) para hacerlo de esta manera.
• Quizás puedas salirte con la tuya O(n2)…
•• Pero definitivamente no es mejor que O (n2).
Algoritmo:
Algoritmo:
• Búsqueda en profundidad
• Útil para la ordenación topológica
• También recorridos en orden de BSTs
• Búsqueda en amplitud
• Útil para encontrar los caminos más cortos
• También para probar la bipartitidad
• Ambos DFS, BFS:
• Útiles para explorar grafos, encontrar componentes
conectados, etc.
308