Está en la página 1de 308

Fuerza bruta y búsqueda exhaustiva

Grafos
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas

1
Clase pasada

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 2


Clase pasada

● Análisis del peor de los casos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 3


Clase pasada

● Análisis del peor de los casos

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

● Análisis del peor de los casos


● Análisis asintótico (O( ), Ω( ), Θ( ))

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 5


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O( ), Ω( ), Θ( ))

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 6


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O( ), Ω( ), Θ( ))
● Teorema del maestro.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 7


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O( ), Ω( ), Θ( )) Una fórmula útil es.
Conocer por qué
● Teorema del maestro. funciona deberías...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 8


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O( ), Ω( ), Θ( ))
● Teorema del maestro.
● Lista de ejercicios #1.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 9


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O (), Ω (), Θ ())
● Teorema del maestro.
● Lista de ejercicios #1.

LISTA DE
EJERCICIOS 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 10


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O (), Ω (), Θ ())
● Teorema del maestro.
● Lista de ejercicios #1.
● Algoritmo Gale-Shapley vs. Fuerza Bruta.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 11


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O (), Ω (), Θ ())
● Teorema del maestro.
● Lista de ejercicios #1.
● Algoritmo Gale-Shapley vs. Fuerza Bruta.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 12


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O (), Ω (), Θ ())
● Teorema del maestro.
● Lista de ejercicios #1.
● Algoritmo Gale-Shapley vs. Fuerza Bruta.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 13


Clase pasada

● Análisis del peor de los casos


● Análisis asintótico (O (), Ω (), Θ ())
● Teorema del maestro. Calcular todos los posibles
● Lista de ejercicios #1. emparejamientos perfectos
= n! × (tiempo de comprobar
● Algoritmo Gale-Shapley vs. Fuerza Bruta. si un emparejamiento es
estable)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 14


El día de Hoy

Fuerza bruta y búsqueda exhaustiva


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 15


El día de Hoy

Fuerza bruta y búsqueda exhaustiva


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 16


Fuerza bruta y búsqueda exhaustiva

Una forma sencilla de resolver un problema,


basada en la definición del problema en sí;

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 17


Fuerza bruta y búsqueda exhaustiva

Una forma sencilla de resolver un problema,


basada en la definición del problema en sí;
a menudo implica comprobar todas las posibilidades.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 18


Fuerza bruta y búsqueda exhaustiva

Una forma sencilla de resolver un problema,


basada en la definición del problema en sí;
a menudo implica comprobar todas las posibilidades.

Pros:
● ampliamente aplicable
● fácil
● bueno para problemas de pequeñas entradas

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 19


Fuerza bruta y búsqueda exhaustiva

Una forma sencilla de resolver un problema,


basada en la definición del problema en sí;
a menudo implica comprobar todas las posibilidades.

Pros:
● Ampliamente aplicable
● Fácil
● Bueno para problemas de pequeñas entradas

Contra:
● A menudo ineficiente para grandes entradas

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 20


Fuerza bruta en diferentes contextos...

● Ordenación de Fuerza Bruta.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 21


Ordenación de Fuerza Bruta

1. Ordenamiento por selección


a) Escanea el arreglo para encontrar el elemento más pequeño
b) Escanea el arreglo para encontrar el segundo elemento más pequeño
etc.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 22


Ordenación de Fuerza Bruta

1. Ordenamiento por selección


a) Escanea el arreglo para encontrar el elemento más pequeño
b) Escanea el arreglo para encontrar el segundo elemento más pequeño
etc.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 23


Ordenación de Fuerza Bruta

1. Ordenamiento por selección


a) Escanea el arreglo para encontrar el elemento más pequeño
b) Escanea el arreglo para encontrar el segundo elemento más pequeño
etc.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 24


Ordenamiento por Selección

void selectionSort(int arr[]){


int i, j, temp, pos_greatest;
for( i = arr.length-1; i > 0; i--){
pos_greatest = 0;
for(j = 0; j <= i; j++){
if( arr[j] > arr[pos_greatest])
pos_greatest = j;
}//end inner for loop
temp = arr[i];
arr[i] = arr[pos_greatest];
arr[pos_greatest] = temp;
}//end outer for loop
}//end selection sort

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 25


Ordenamiento por Selección

Para un arreglo de tamaño n, en el peor de los casos:


● Primer paso por el bucle interno: n-1 comparaciones
● Segundo paso por el bucle interno: n-2 comparaciones
● …
● (n-1) paso por el bucle interior: una comparación

● Todos junto: c ((n-1) + (n-2) + ... + 1).

● (n-1) + (n-2) + ... + 1 = n(n-1)/2 = O(n2).

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 26


Ordenación de Fuerza Bruta

1. Ordenamiento por selección


a) Escanea el arreglo para encontrar el elemento más pequeño
b) Escanea el arreglo para encontrar el segundo elemento más pequeño
etc.

2. Ordenamiento de burbuja
a) Escanea el arreglo, intercambiando vecinos desordenados.
b) Continúa hasta que no se necesiten hacer cambios.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 27


Ordenación de Fuerza Bruta

1. Ordenamiento por selección


a) Escanea el arreglo para encontrar el elemento más pequeño
b) Escanea el arreglo para encontrar el segundo elemento más pequeño
etc.

2. Ordenamiento de burbuja
a) Escanea el arreglo, intercambiando vecinos desordenados.
b) Continúa hasta que no se necesiten hacer cambios.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 28


Ordenamiento por Burbuja

void bubbleSort(int arr[ ]){


int i;
int j;
int temp;
for(i = arr.length-1; i > 0; i--){
for(j = 0; j < i; j++){
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}//
}// end inner loop
}//end outer loop
}// end bubble sort

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 29


Ordenamiento por Burbuja

Para un arreglo de tamaño n, en el peor de los casos:


● Primer paso por el bucle interno: n-1 comparaciones y n-1 intercambios
● Segundo paso por el bucle interno: n-2 comparaciones y n-2 intercambios
● …
● (n-1) paso por el bucle interior: una comparación y un intercambio

● 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.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 30


Ordenamiento por Burbuja

c ((n-1) + (n-2) + ... + 1) + k + c1(n-1)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 31


Ordenamiento por Burbuja

c ((n-1) + (n-2) + ... + 1) + k + c1(n-1)

(n-1) + (n-2) + ... + 1 = n(n-1)/2

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 32


Ordenamiento por Burbuja

c ((n-1) + (n-2) + ... + 1) + k + c1(n-1)

(n-1) + (n-2) + ... + 1 = n(n-1)/2

Entonces nuestra función es igual a:

c n*(n-1)/2 + k + c1(n-1) =

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 33


Ordenamiento por Burbuja

c ((n-1) + (n-2) + ... + 1) + k + c1(n-1)

(n-1) + (n-2) + ... + 1 = n(n-1)/2

Entonces nuestra función es igual a:

c n*(n-1)/2 + k + c1(n-1) =
1/2c (n2-n) + c1(n-1) + k

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 34


Ordenamiento por Burbuja

c ((n-1) + (n-2) + ... + 1) + k + c1(n-1)

(n-1) + (n-2) + ... + 1 = n(n-1)/2

Entonces nuestra función es igual a:

c n*(n-1)/2 + k + c1(n-1) =
1/2c (n2-n) + c1(n-1) + k

= O(n2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 35


Ordenación de fuerza bruta

-) 64 25 12 22 11 (ordenación por selección).

-) 5 1 4 2 8 (ordenación por burbuja).

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 36


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 37


Búsqueda de fuerza bruta

Búsqueda secuencial:

Ir a través de toda la lista de n elementos para encontrar el elemento deseado.

Toma O(n) en el peor de los casos.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 38


Búsqueda de fuerza bruta

Búsqueda secuencial:

Ir a través de toda la lista de n elementos para encontrar el elemento deseado.

Toma O(n) en el peor de los casos.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 39


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta.
● Búsqueda de fuerza bruta en un grafo.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 40


Búsqueda de fuerza bruta en un grafo

● Revisaremos la terminología de los grafos y los algoritmos básicos

● Búsqueda en amplitud:
○ ir nivel por nivel en el grafo

● Búsqueda en profundidad:
○ Ir tan profundo como se pueda, luego retroceder

● Ambos toman Θ (V + E), donde | V | es el número de vértices y | E | es el número de


aristas

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 41


Búsqueda de fuerza bruta en un grafo

● Revisaremos la terminología de los grafos y los algoritmos básicos

● Búsqueda en amplitud:
○ ir nivel por nivel en el grafo

● Búsqueda en profundidad:
○ Ir tan profundo como se pueda, luego retroceder

● Ambos toman Θ (V + E) tiempo, donde | V | es el número de vértices y | E | es el número


de aristas

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 42


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta
● Búsqueda de fuerza bruta en un grafo.
● Fuerza bruta para problemas combinatoriales.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 43


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta
● Búsqueda de fuerza bruta en un grafo.
● Fuerza bruta para problemas combinatoriales.
○ Problema del vendedor viajero, problema del vendedor ambulante,
problema del agente viajero o problema del viajante. Traveling Salesman
Problem (TSP)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 44


Problema del vendedor viajero

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!)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 45


Problema del vendedor viajero

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!)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 46


Problema del vendedor viajero

a 2 b
5 3
8 7
c 1 d

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 47


Problema del vendedor viajero

a 2 b
a,b,c,d,a ->
5 3
8 7
c 1 d

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 48


Problema del vendedor viajero

a 2 b
a,b,c,d,a ->18
5 3
8 7
c 1 d

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 49


Problema del vendedor viajero

a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a ->
8 7
c 1 d

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 50


Problema del vendedor viajero

a 2 b
a,b,c,d,a -> 18
5 3 a,b,d,c,a -> 11
8 7
c 1 d

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 51


Problema del vendedor viajero

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 ->

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 52


Problema del vendedor viajero

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

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 53


Problema del vendedor viajero

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 ->

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 54


Problema del vendedor viajero

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

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 55


Problema del vendedor viajero

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 ->

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 56


Problema del vendedor viajero

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

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 57


Problema del vendedor viajero

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

¿Necesitamos considerar más recorridos?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 58


Aplicaciones del Problema del vendedor viajero

● transporte y logística (autobuses escolares, comidas sobre ruedas, horarios de


aviones, etc.)
● revisión de motores de turbina de gas

● agrupación de datos
● otros...

http://www.math.uwaterloo.ca/tsp/problem/index.html

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 59


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta
● Búsqueda de fuerza bruta en un grafo.
● Fuerza bruta para problemas combinatoriales.
○ Problema del vendedor viajero, problema del vendedor ambulante,
problema del agente viajero o problema del viajante. Traveling Salesman
Problem (TSP)
○ Problema de la mochila

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 60


Problema de la mochila

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?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 61


Problema de la mochila

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)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 62


Problema de la mochila

● Pregunta rápida:
○ ¿Qué significa el símbolo Ω?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 63


Problema de la mochila

● Pregunta rápida:
○ ¿Qué significa el símbolo Ω?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 64


Problema de la mochila

● N elementos:
n
∑ C(n,i) =
i=1

C(n,1) + C(n,2) + …. + C(n,n) =

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 65


Problema de la mochila

Serie binomial:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 66


Problema de la mochila

Serie binomial:

𝜶=n
x=1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 67


Problema de la mochila

Serie binomial:

𝜶=n
x=1

(1+1)n = 2n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 68


Problema de la mochila

Serie binomial:

𝜶=n
x=1

(1+1)n = 2n

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 69


Aplicaciones del Problema de la Mochila

● Forma menos derrochadora de utilizar materias primas

● Seleccionar inversiones de capital y carteras financieras

● Generación de claves para el criptosistema Merkle-Hellman

Knapsack Problems, H. Kellerer, U. Pferschy, D. Pisinger, Springer, 2004.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 70


Problema de la Mochila

● item 1: 7 kgs, 42 soles


● item 2: 3 kgs, 12 soles
● item 3: 4 kgs, 40 soles
● item 4: 5 kgs, 25 soles
● W = 10

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 71


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S/.0
● item 2: 3 kgs, 12 soles
● item 3: 4 kgs, 40 soles
● item 4: 5 kgs, 25 soles
● W = 10

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 72


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42

● item 3: 4 kgs, 40 soles


● item 4: 5 kgs, 25 soles
● W = 10

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 73


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
● item 4: 5 kgs, 25 soles
● W = 10

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 74


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles
● W = 10

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 75


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles {4} 5 S./25

● W = 10

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 76


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles {4} 5 S./25
{1,2} 10 S./54
● W = 10

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 77


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles {4} 5 S./25
{1,2} 10 S./54
● W = 10 {1,3} 11 inviable

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 78


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles {4} 5 S./25
{1,2} 10 S./54
● W = 10 {1,3} 11 inviable
{1,4} 12 inviable

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 79


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles {4} 5 S./25
{1,2} 10 S./54
● W = 10 {1,3} 11 inviable
{1,4} 12 inviable
{2,3} 7 S./52

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 80


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles {4} 5 S./25
{1,2} 10 S./54
● W = 10 {1,3} 11 inviable
{1,4} 12 inviable
{2,3} 7 S./52
{2,4} 8 S./37

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 81


Problema de la Mochila

Subconjunto Peso total Valor total


● item 1: 7 kgs, 42 soles
Ø 0 S./0
● item 2: 3 kgs, 12 soles {1} 7 S./42
{2} 3 S./12
● item 3: 4 kgs, 40 soles
{3} 4 S./40
● item 4: 5 kgs, 25 soles {4} 5 S./25
{1,2} 10 S./54
● W = 10 {1,3} 11 inviable
{1,4} 12 inviable
{2,3} 7 S./52
{2,4} 8 S./37
etc.
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 82
Problema de la mochila

● Pregunta rápida:
○ ¿Cuántas verificaciones tendremos que
hacer?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 83


Problema de la mochila

● Pregunta rápida:
○ ¿Cuántas verificaciones tendremos que
hacer?
2n = 24 = 16

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 84


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta
● Búsqueda de fuerza bruta en un grafo.
● Fuerza bruta para problemas combinatoriales.
○ Problema del vendedor viajero, problema del vendedor ambulante,
problema del agente viajero o problema del viajante. Traveling Salesman
Problem (TSP)
○ Problema de la mochila
● Fuerza bruta para el par más cercano.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 85


Fuerza bruta para el par más cercano

Problema del par más cercano:


Dados n puntos en el espacio d-dimensional, encuentre los dos más cercanos

Aplicaciones:
● aviones a punto de chocar
● qué secuencias de ADN son más similares
● otros...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 86


Fuerza bruta para el par más cercano

Solución de fuerza bruta (para caso 2-D):


● Calcular distancias entre todos los pares de puntos
● sqrt((xi – xj)2 + (yi – yj)2)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 87


Fuerza bruta para el par más cercano

Solución de fuerza bruta (para caso 2-D):


● Calcular distancias entre todos los pares de puntos
● sqrt((xi – xj)2 + (yi – yj)2)

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

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 88


Fuerza bruta para el par más cercano

Solución de fuerza bruta (para caso 2-D):


● Calcular distancias entre todos los pares de puntos
● sqrt((xi – xj)2 + (yi – yj)2)

● Recorrer todas las distancias para encontrar la más pequeña

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 89


Fuerza bruta para el par más cercano

Solución de fuerza bruta (para caso 2-D):


● Calcular distancias entre todos los pares de puntos
● sqrt((xi – xj)2 + (yi – yj)2)

● Recorrer todas las distancias para encontrar la más pequeña


● Tiempo de ejecución: O(n2), asumiendo que cada operación numérica es
un tiempo constante (¿incluida la raíz cuadrada?)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 90


Fuerza bruta para el par más cercano

Solución de fuerza bruta (para caso 2-D):


● Calcular distancias entre todos los pares de puntos
● sqrt((xi – xj)2 + (yi – yj)2)

● Recorrer todas las distancias para encontrar la más pequeña


● Tiempo de ejecución: O(n2), asumiendo que cada operación numérica es
un tiempo constante (¿incluida la raíz cuadrada?)
● Mejoras:
○ No considerar la raíz cuadrada
○ No calcular la distancia para los mismos 2 puntos dos veces

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 91


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta
● Búsqueda de fuerza bruta en un grafo.
● Fuerza bruta para problemas combinatoriales.
○ Problema del vendedor viajero, problema del vendedor ambulante,
problema del agente viajero o problema del viajante. Traveling Salesman
Problem (TSP)
○ Problema de la mochila
● Fuerza bruta para el par más cercano.
● Fuerza bruta para envolvente convexo (envolvente convexo, envoltura convexa
o cápsula convexa, convex hull).

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 92


Fuerza bruta para envolvente convexo

Problema del envolvente convexo:


Dado un conjunto de puntos en 2-D, encuentre el polígono convexo más
pequeño tal que cada punto del conjunto está encerrado por el polígono

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 93


Fuerza bruta para envolvente convexo

Problema del envolvente convexo:


Dado un conjunto de puntos en 2-D, encuentre el polígono convexo más
pequeño tal que cada punto del conjunto está encerrado por el polígono

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 94


Fuerza bruta para envolvente convexo

Problema del envolvente convexo:


Dado un conjunto de puntos en 2-D, encuentre el polígono convexo más
pequeño tal que cada punto del conjunto está encerrado por el polígono

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 95


Aplicaciones del envolvente convexo

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

Estimar el tamaño del rango geográfico de una especie, basado en observaciones


(geocat.kew.org/about)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 96


Aplicaciones del envolvente convexo

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

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 97


Aplicaciones del envolvente convexo

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:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 98


Aplicaciones del envolvente convexo

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:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 99


Aplicaciones del envolvente convexo

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:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 100


Fuerza bruta para envolvente convexo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 101


Fuerza bruta para envolvente convexo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 102


Fuerza bruta para envolvente convexo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 103


Fuerza bruta para envolvente convexo

El tiempo es O(n3): O(n) pruebas de complejidad,


para cada uno de los O(n2) bordes

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 104


Fuerza bruta en diferentes contextos...

● Ordenación de fuerza bruta.


● Búsqueda de fuerza bruta
● Búsqueda de fuerza bruta en un grafo.
● Fuerza bruta para problemas combinatoriales.
○ Problema del vendedor viajero, problema del vendedor ambulante,
problema del agente viajero o problema del viajante. Traveling Salesman
Problem (TSP)
○ Problema de la mochila
● Fuerza bruta para el par más cercano.
● Fuerza bruta para envolvente convexa (envolvente convexa, envoltura convexa
o cápsula convexa, convex hull).
● Fuerza bruta para dos problemas numéricos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 105


Fuerza bruta para dos problemas numéricos

● 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.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 106


Fuerza bruta para dos problemas numéricos

● 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: multiplicar dos matrices nxn matrices A y B


para crear la matriz producto C
○ Solución: Seguir la definición, la cual dice que para una entrada (i,j) de C es Σ aik*bkj , k = 1 a n
○ Toma O(n3), asumiendo que cada operación básica toma un tiempo constante.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 107


Resumen de Fuerza bruta / Búsqueda Exhaustiva

● ordenación: ordenamiento por selección, ordenamiento de


burbuja
● búsqueda: búsqueda secuencial
● grafos: BFS, DFS
● problemas combinatorios: verifique todas las posibilidades para
TSP y mochila
● geométrico: verifique todas las posibilidades para el par más
cercano y para el envolvente convexo
● numérico: siga la definición para calcular una multiplicación de
matrices

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 108


El día de Hoy

Fuerza bruta y búsqueda exhaustiva


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 109


El día de Hoy

Fuerza bruta y búsqueda exhaustiva


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 110


Estructuras de Datos
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas

111
Estructuras de datos vs Tipos de datos abstractos

Estructura de datos: Representación concreta de los datos.


● Array
● Linked list implementada con punteros
● Lista de adyacencias –Dictionary

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 112


Estructuras de datos vs Tipos de datos abstractos

Estructura de datos: Representación concreta de los datos.


● Array
● Linked list implementada con punteros
● Lista de adyacencias

Tipo de datos abstractos: conjunto de operaciones y sus semánticas


(significado/comportamiento)
● Cola de Prioridad
● Pila
● Diccionario

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 113


Estructuras de datos básicas

● 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

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 114


Grafos
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas

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?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 116


Grafos

Un grafo es una estructura matemática para representar relaciones.

Un grafo consta de un conjunto de nodos conectados por aristas.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 117
Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 118


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 119


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 120


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 121


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 122


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 123


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 124


Grafos
Redes sociales

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 125


Grafos
Enlaces químicos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 126


Grafos

Es una red de carreteras de


acceso controlado que forma
parte del Sistema Nacional
de Carreteras en los Estados
Unidos.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 127


Grafos

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 128


Grafos
Ejemplo Nodos Aristas

Red de transporte: rutas aéreas aeropuertos vuelos sin escalas

Redes de comunicación computadoras, physical wires


enrutadores

Red de información: web páginas hyperlinks

Red de información: artículos artículos referencias


científicos

Redes Sociales gente “u es amigo de v”,


“u envía email a v”,
“El facebook de u está enlazado a v”

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 129


Grafos

•Hay muchos grafos.

• Queremos responder preguntas sobre ellos.


• ¿Enrutamiento eficiente?
• ¿Detección/agrupamiento de comunidades?
• ¿Un ordenamiento que respete las dependencias?

• Esto es lo que haremos hoy.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 130
Grafos

Algunos grafos son


dirigidos.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 131


Grafos dirigidos

• Tiene vértices(nodos) y aristas


• V es el conjunto de vértices
• E es el conjunto de aristas
• Formalmente, un grafo es G = (V,E)

• Ejemplo
• V = {1,2,3,4}
• E = { (1,3), (2,4), (3,4), (4,3), (3,2)}

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 132


Grafos dirigidos

• Tiene vértices(nodos) y aristas


• V es el conjunto de vértices
• E es el conjunto de aristas
• Formalmente, un grafo es G = (V,E)

• 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

Algunos grafos son no


dirigidos.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 134


Grafos

Algunos grafos son no


dirigidos.

Podemos pensar en ellos como


grafos dirigidos con aristas en
ambos sentidos.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 135


Grafos no dirigidos

• Tiene vértices(nodos) y aristas


• V es el conjunto de vértices
• E es el conjunto de aristas
• Formalmente, un grafo es G = (V,E)

• Example
• V = {1,2,3,4}
• E = { {1,3}, {2,4}, {3,4}, {2,3} }

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 136


Grafos no dirigidos

• Tiene vértices(nodos) y aristas


• V es el conjunto de vértices
• E es el conjunto de aristas
• Formalmente, un grafo es G = (V,E)

• 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

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 137


¿Cómo representar grafos?

• Opción 1: matriz de adyacencia

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 138


¿Cómo representar grafos?

• Opción 1: matriz de adyacencia

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 139


¿Cómo representar grafos?

• Opción 1: matriz de adyacencia

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 140


¿Cómo representar grafos?

• Opción 1: matriz de adyacencia

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 141


¿Cómo representar grafos?

• Opción 1: matriz de adyacencia

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 142


¿Cómo representar grafos?

• Opción 1: matriz de adyacencia

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 143


¿Cómo representar grafos?

• Opción 2: lista enlazada

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 144


¿Cómo representar grafos?

• Opción 2: lista enlazada

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 145


¿Cómo representar grafos?

• Opción 2: lista enlazada

¿Cómo modificaría esto


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) para grafos dirigidos? 146
¿Cómo representar grafos?

• Opción 2: lista enlazada

¿Cómo modificaría esto


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) para grafos dirigidos? 147
En cualquier caso...

• Podemos pensar en vértices que almacenan otra


información.
• Atributos (nombre, dirección IP, …)
• información de ayuda para los algoritmos que realizaremos
en el grafo

• Queremos poder realizar las siguientes operaciones:


• Membresía de aristas: ¿La arista e está en E?
• Consulta de vecinos: ¿Cuáles son los vecinos del vértice v?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 148


Compensaciones...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 149


iFeliz día del Estudiante!
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas

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?

En cada nodo, puede obtener una lista de vecinos y elegir ir allí


si lo desea.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 152


Búsqueda en profundidad - Depth-first search

En cada nodo, puede obtener una lista de vecinos y elegir ir allí


si lo desea.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 153


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 154


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 155


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 156


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 157


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 158


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 159


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 160


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 161


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 162


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 163


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 164


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 165


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 166


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 167


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 168


Búsqueda en profundidad - Depth-first search

Explorando un laberinto

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 169


Búsqueda en profundidad - Depth-first search

Explorando un laberinto con pseudocódigo

Cada nodo hará un seguimiento de si está sin


visitar, en progreso o todo hecho.

También realizaremos un seguimiento de la hora


en que comenzamos y terminamos con ese
nodo.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 170


Búsqueda en profundidad - Depth-first search

Explorando un laberinto con pseudocódigo


• Cada vértice realiza un seguimiento de si es:
• Sin visitar
• En progreso
• Todo explorado

• Cada vértice también realizará un seguimiento de:


• El tiempo que entramos por primera vez.
• El tiempo que terminamos con ese vértice y lo marcamos como
todo explorado.
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 171
Búsqueda en profundidad - Depth-first search

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 172


Búsqueda en profundidad - Depth-first search

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 173


Búsqueda en profundidad - Depth-first search

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 174


Búsqueda en profundidad - Depth-first search

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 175


Búsqueda en profundidad - Depth-first search

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 176


Búsqueda en profundidad - Depth-first search

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 177


Búsqueda en profundidad - Depth-first search

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 178


DFS encuentra todos los nodos accesibles desde el punto de partida

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 179


DFS encuentra todos los nodos accesibles desde el punto de partida

En un grafo no direccionado, esto es


llamado componente conectado.

Una aplicación: encontrar


componentes conectados.
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 180
¿Por qué se llama profundidad primero?

• Nosotros estamos construyendo implícitamente un árbol:

• Y primero vamos tan profundo como podemos.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 181
¿Por qué se llama profundidad primero?

• Nosotros estamos construyendo implícitamente un árbol:

• Y primero vamos tan profundo como podemos.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 182
Tiempo de ejecución

Para explorar sólo el componente conectado comenzamos en:


• Observamos cada arista sólo una vez.
• Y básicamente no hagas nada más.
• Entonces…
O (m)

• (Suponiendo que estamos usando la representación de lista


vinculada)
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 183
Tiempo de ejecución

Para explorar todo:


• Explorar los componentes conectados uno por uno.
• Esto lleva tiempo
O (n + m)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 184


Aplicación: ordenación topológica

Ejemplo: grafo de dependencia de paquetes

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 185


Aplicación: ordenación topológica

Ejemplo: grafo de dependencia de paquetes

Pregunta: ¿en qué orden debo instalar los paquetes?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 186


Aplicación: ordenación topológica

No siempre puede ser resuelto mirando...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 187


Aplicación: ordenación topológica

Ejemplo: grafo de dependencia de paquetes

Pregunta: ¿en qué orden debo instalar los paquetes?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 188


Aplicamos DFS

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 189


Aplicamos DFS
Observaciones:
● El tiempo inicial parece que no es útil.
● Pero paquetes que deberíamos
incluir antes tienen tiempos de
finalización mayores.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 190


Aplicamos DFS

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 191


Aplicamos DFS

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 192


Volvemos al problema

Ejemplo: grafo de dependencia de paquetes

Pregunta: ¿en qué orden debo instalar los paquetes?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 193


En orden inverso al tiempo de finalización

● 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.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 194


En orden inverso al tiempo de finalización

● 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.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 195


¿Qué aprendimos?

• DFS puede ayudarlo a resolver el problema de


ordenación topológica
• Ese es el nombre elegante para el problema de
encontrar una ordenación que respete todas las
dependencias

• Pensar en el árbol DFS es útil.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 196


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 197


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 198


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 199


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 200


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 201


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 202


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 203


Ejemplo

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 204


Búsqueda en amplitud - Breadth-first search
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas

205
¿Cómo exploramos un grafo?

Si pudiéramos volar...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 206


¿Cómo exploramos un grafo?

Si pudiéramos volar...

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 207


Búsqueda en amplitud - Breadth-first search

Explorando el mundo con una visión de un ave.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 208


Búsqueda en amplitud - Breadth-first search

Explorando el mundo con una visión de un ave.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 209


Búsqueda en amplitud - Breadth-first search

Explorando el mundo con una visión de un ave.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 210


Búsqueda en amplitud - Breadth-first search

Explorando el mundo con una visión de un ave.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 211


Búsqueda en amplitud - Breadth-first search

Explorando el mundo con una visión de un ave.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 212


Búsqueda en amplitud - Breadth-first search

Explorando el mundo con pseudocódigo.

• Set Li = {} for i=1,…,n


• L0 = {w}, donde w es el nodo inicial
• For i = 0, …, n-1:
• For u in Li:
• For cada v que es vecino de u:
• If v no fue aún visitado:
• marcar v como visitado, y colocarlo en Li+1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 213


Búsqueda en amplitud - Breadth-first search
El mismo descargo de responsabilidad que
Explorando el mundo con pseudocódigo. para DFS: es posible que haya visto otras
formas de implementar esto
• Set Li = {} for i=1,…,n
• L0 = {w}, donde w es el nodo inicial Li es el conjunto de nodos
que podemos alcanzar en i
pasos desde w
• For i = 0, …, n-1:
• For u in Li:
• For cada v que es vecino de u:
• If v no fue aún visitado:
Revise todos los nodos en
Li y agregue sus vecinos no
• marcar v como visitado, y colocarlo en Li+1
visitados a Li + 1

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 214


BFS también encuentra todos los nodos accesibles desde el punto de partida

También es una buena forma de encontrar


todos los componentes conectados.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 215


Tiempo de ejecución

Para explorar todos los nodos:


• Explore los componentes conectados uno por uno.
• Mismo argumento que DFS: el tiempo de ejecución es

O(n + m)

• Como DFS, BFS también funciona bien en grafos dirigidos.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 216


¿Por qué se llama amplitud primero?

• Nosotros estamos construyendo implícitamente un árbol:

• Y primero vamos tan amplio como podemos.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 217
¿Por qué se llama amplitud primero?

• Nosotros estamos construyendo implícitamente un árbol:

• Y primero vamos tan amplio como podemos.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 218
¿Por qué se llama amplitud primero?

• Nosotros estamos construyendo implícitamente un árbol:

Este árbol tiene una estructura realmente


agradable: todas los vértices del primer
nivel están a una distancia de la raíz,
todas los vértices del segundo nivel están
a dos de la raíz, y así sucesivamente...

• Y primero vamos tan amplio como podemos.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 219
Aplicación: ruta más corta

¿Cuánto mide el camino más corto entre w y v?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 220


Aplicación: ruta más corta

¿Cuánto mide el camino más corto entre w y v?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 221


Para encontrar la distancia entre w y todos los demás vértices v

• Realizamos un BFS a partir de w

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 222


Para encontrar la distancia entre w y todos los demás vértices v

• Realizamos un BFS a partir de w

• Para todo v en Li (el i-ésimo nivel del árbol BFS)


• El camino más corto entre w y v tiene una longitud i
• Una ruta más corta entre w y v viene dada por la ruta en el
árbol BFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 223


Para encontrar la distancia entre w y todos los demás vértices v

• Realizamos un BFS a partir de w

• Para todo v en Li (el i-ésimo nivel del árbol BFS)


• El camino más corto entre w y v tiene una longitud i
• Una ruta más corta entre w y v viene dada por la ruta en el
árbol BFS.

• Si nunca encontramos v, la distancia es infinita.


Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 224
¿Qué aprendimos?

• El árbol BFS es útil para calcular distancias entre


pares de vértices.
• Podemos encontrar el camino más corto entre u y v en el
tiempo O (m).
El árbol BSF también es útil para:
• Probar si un grafo es bipartito o no.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 225


Aplicación: probar si un grafo es bipartito

Bipartito significa que se ve así:

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 226


Aplicación: probar si un grafo es bipartito

Bipartito significa que se ve así:


Podemos colorear los vértices
de rojo y naranja de manera que
no hayan aristas entre los
vértices del mismo color

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 227


Aplicación: probar si un grafo es bipartito

Bipartito significa que se ve así:


Podemos colorear los vértices
de rojo y naranja de manera que
no hayan aristas entre los
vértices del mismo color

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 228


¿Este grafo es bipartito?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 229


¿Este grafo es bipartito?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 230


¿Este grafo es bipartito?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 231


Solución usando BFS

● Colorear los niveles del árbol BFS en colores alternos.


● Si se colorea un nodo que nunca se ha conectado a otro
nodo del mismo color, entonces es bipartito.
● Caso contrario, NO.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 232


Solución usando BFS

● Colorear los niveles del árbol BFS en colores alternos.


● Si se colorea un nodo que nunca se ha conectado a otro
nodo del mismo color, entonces es bipartito.
● Caso contrario, NO.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 233


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 234


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 235


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 236


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 237


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 238


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 239


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 240


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 241


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 242


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 243


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 244


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 245


Búsqueda en amplitud - Breadth-first search

Para probar la bipartididad

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 246


¿Qué aprendimos?

• BFS se puede utilizar para detectar la bipartita en el


tiempo O (n+m).

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 247


Hasta ahora

• Búsqueda en amplitud y profundidad


• Plus, aplicaciones!
■ Ordenación Topológica
■ Recorrido en orden de BSTs
■ Ruta más corta en grafos no ponderados
■ Prueba de la bipartididad

• La clave fue prestar atención a la estructura del árbol que


estos algoritmos de búsqueda construyen implícitamente.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 248


Ahora

• Una aplicación más:


• Encontrar componentes fuertemente conectados

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 249


Ahora

• Una aplicación más:


• Encontrar componentes fuertemente conectados

• Este es un problema complicado que al menos yo


probablemente no podría resolver sin las técnicas vistas.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 250


Ahora

• Una aplicación más:


• Encontrar componentes fuertemente conectados

• Este es un problema complicado que al menos yo


probablemente no podría resolver sin las técnicas vistas.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 251


Componentes fuertemente conectados
Análisis y Diseño de Algoritmos
Dra. Aurea Soriano Vargas

252
Componentes fuertemente conectados

Un grafo dirigido G = (V,E) es conectado fuertemente si:


● Para todo v,w en V:
• hay una ruta de v a w y
• hay una ruta de w a v.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 253


Componentes fuertemente conectados

Un grafo dirigido G = (V,E) es conectado fuertemente si:


● Para todo v,w en V:
• hay una ruta de v a w y
• hay una ruta de w a v.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 254


Componentes fuertemente conectados

Un grafo dirigido G = (V,E) es conectado fuertemente si:


● Para todo v,w en V:
• hay una ruta de v a w y
• hay una ruta de w a v.

Fuertemente conectado No fuertemente conectado

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 255


Podemos descomponer un grafo en componentes fuertemente conectados (SCC)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 256


Podemos descomponer un grafo en componentes fuertemente conectados (SCC)

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 257


Podemos descomponer un grafo en componentes fuertemente conectados (SCC)

Al menos, podemos en teoría.


¿Cómo hacemos esto
algorítmicamente?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 258


¿Por qué nos preocupan los SCC?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 259


¿Por qué nos preocupan los SCC?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 260


¿Cuáles son los SCC de Internet?

• En la vida real, resulta que hay uno "gigante".


• y luego un montón de argollas.
• Más generalmente:
• Los componentes fuertemente conectados nos informan sobre comunidades.
• Muchos algoritmos de grafos sólo tienen sentido en componentes conectados, por lo que a
veces queremos encontrar ellos por otras razones.

• Esto es cierto no solo en estos grafos de interacción/Internet.


• Un economista -> dividir sus datos del mercado laboral en SCC para darle sentido.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 261


¿Cómo encontrar SCCs?

Intento 1:
Considerar todas las posibles descomposiciones y verificar.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 262


¿Cómo encontrar SCCs?

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).

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 263


¿Y si te dijera que se puede hacer en tiempo O(log (n))?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 264


¿Y si te dijera que se puede hacer en tiempo O(log (n))?

Dos respuestas legítimas:


• Nahhh!
• En qué modelo de computación?
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 265
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 266


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

Algoritmo:

• Usamos DFS para crear un bosque DFS.


• Elija los vértices iniciales en cualquier orden.
• Lleve un registro de los tiempos de finalización.

• Invierta todas las aristas del grafo.


• Usamos DFS otra vez para crear otro bosque DFS.
• Esta vez, ordene los nodos en orden inverso a los tiempos de finalización que tenían desde la primera ejecución
de DFS.

• Los SCC son los árboles diferentes en el segundo bosque


DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 267


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

Algoritmo:

• Usamos DFS para crear un bosque DFS.


• Elija los vértices iniciales en cualquier orden.
• Lleve un registro de los tiempos de finalización.

• Invierta todas las aristas del grafo.


• Usamos DFS otra vez para crear otro bosque DFS.
• Esta vez, ordene los nodos en orden inverso a los tiempos de finalización que tenían desde la primera ejecución
de DFS.

• Los SCC son los árboles diferentes en el segundo bosque


DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 268


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 269


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 270


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 271


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 272


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 273


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 274


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 275


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 276


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 277


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 278


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 279


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 280


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 281


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 282


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.
Repetimos hasta que todo sea
visitado.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 283


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

1. Comenzamos con un vértice


arbitrario y usamos DFS.
Repetimos hasta que todo sea
visitado.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 284


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Invertimos las aristas.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 285


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 286


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 287


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

Este es uno de los


árboles DFS en el 2. Usamos DFS otra vez, pero
bosque de DFSs
comenzando con los vértices con el
mayor tiempo de acabar.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 288


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 289


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 290


¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 291
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 292
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 293
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 294
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 295
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 296
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 297
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 298
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 299
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 300
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 301
¿Y si te dijera que se puede hacer en tiempo O(n+m)?

2. Usamos DFS otra vez, pero


comenzando con los vértices con el
FUNCIONÓ! mayor tiempo de acabar.

Notar que no estoy cambiando las horas de


inicio y finalización, las mantengo desde la
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) primera ejecución. 302
Línea final:

Podemos encontrar SCCs en tiempo O(n + m)


Algoritmo:
• Aplicamos DFS para crear un bosque DFS.
• Elegir a partir vértices en cualquier orden.
• Realizar un registro de los tiempos de finalización.

• Invertimos todas las aristas en el grafo.


• Aplicamos DFS otra vez para crear otro bosque DFS.
• Esta vez, ordenar los nodos en el orden inverso de los tiempos de finalización que
tenían desde las primera ejecución de DFS.
• Los SCCs son árboles diferentes en el segundo bosque DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 303


Línea final:

Podemos encontrar SCCs en tiempo O(n + m)


Algoritmo:
• Aplicamos DFS para crear un bosque DFS.
• Elegir a partir vértices en cualquier orden.
• Realizar un registro de los tiempos de finalización.

• Invertimos todas las aristas en el grafo.


• Aplicamos DFS otra vez para crear otro bosque DFS.
• Esta vez, ordenar los nodos en el orden inverso de los tiempos de finalización que
tenían desde las primera ejecución de DFS.
• Los SCCs son árboles diferentes en el segundo bosque DFS.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 304


Resumen

• 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.

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 305


Resumen

• Ambos DFS, BFS:


• Útiles para explorar grafos, encontrar componentes
conectados, etc.
• La clave fue prestar atención a la estructura del árbol que
estos algoritmos de búsqueda construyen implícitamente.
• ¡Hoy vimos que también puede encontrar componentes
fuertemente conectados en el tiempo O (n + m)!

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 306


Lecturas Recomendadas

● Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,


Clifford Stein, Introduction to Algorithms, 3rd Edition, MIT Press
Capítulo 22

● Jon Kleinberg, Éva Tardos, Algorithm Design,


Pearson/Addison-Wesley - Capítulo 3

Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 307


iGracias!

308

También podría gustarte