Está en la página 1de 5

Universidad Técnica de Manabí

Facultad de Ciencias Informáticas


Carrera de Sistemas de Información

Asignatura:
Análisis y Diseño de Algoritmos

Componente:
Actividades Prácticas y de Experimentación

Actividad:
Resolver los siguientes problemas:

Búsqueda primero en amplitud (BFS)


Usando el siguiente algoritmo, responder los siguientes ejercicios:
BFS(G, s)
1 desde cada vértice u ∈ G.V – {s}
2 u.color = BLANCO
3 u.d = ∞
4 u.π NIL
5 s.color = GRIS
6 s.d = 0
7 s.π NIL
8 Q = Ø
9 ENCOLE(Q, s)
10 mientras Q ≠ Ø
11 u = DESCOLE(Q)
12 desde cada vértice v en G.Adj[u] // Buscar a los vecinos de u
13 si v.color == BLANCO // ¿Se está descubriendo v ahora?
14 v.color = GRIS
15 v.d = u.d + 1
16 v.π = u
17 ENCOLE(Q, v) // v está ahora en la frontera
18 18 u.color = NEGRO // u ahora está detrás de la frontera

1. Muestre los valores d y π que resultan de ejecutar la búsqueda de amplitud primero en el


grafo dirigido de la siguiente figura, utilizando el vértice 3 como origen.

2. Muestre los valores d y π que resultan de ejecutar la búsqueda de amplitud primero en el


grafo no dirigido de la siguiente figura, utilizando el vértice u como origen. Supongamos que
los vecinos de un vértice se visitan en orden alfabético.

1/5
Universidad Técnica de Manabí
Facultad de Ciencias Informáticas
Carrera de Sistemas de Información

3. Muestre que usar un solo bit para almacenar cada color de vértice es suficiente
argumentando que el procedimiento BFS produce el mismo resultado si se elimina la línea
18. Luego muestre cómo obviar la necesidad de colores de vértice por completo.
4. ¿Cuál es el tiempo de ejecución de un BFS si representamos su grafo de entrada mediante
una matriz de adyacencia y modificamos el algoritmo para manejar esta forma de entrada?
5. Argumente que, en una búsqueda de primero en amplitud, el valor u.d asignado a un vértice
u es independiente del orden en que aparecen los vértices en cada lista de adyacencia.
Usando el grafo del ejercicio 2, muestre que el primer árbol de anchura calculado por BFS
puede depender del orden dentro de las listas de adyacencia.
6. Dé un ejemplo de un grafo dirigido G = (V, E), un vértice fuente s ∈ V, y un conjunto de
aristas de árbol Eπ ⊆ E tal que para cada vértice v ∈ V, el único camino simple en el grafo
(V, Eπ) desde 𝑠 hasta 𝑣 es un camino más corto en G, sin embargo, el conjunto de aristas Eπ
no se puede producir ejecutando un BFS en G, No importa cómo se ordenen los vértices
en cada lista de adyacencia.
7. Hay dos tipos de luchadores profesionales: "caras" (abreviatura de "babyfaces", es decir,
"chicos buenos") y "talones" ("chicos malos"). Entre cualquier par de luchadores
profesionales, puede haber o no una rivalidad. Se le dan los nombres de n luchadores
profesionales y una lista de r pares de luchadores para los que hay rivalidades. Proporcione
un algoritmo de tiempo O(n + r) que determine si es posible designar a algunos de los
luchadores como caras y al resto como talones de tal manera que cada rivalidad sea entre
una cara y un talón. Si es posible realizar tal designación, su algoritmo debería producirlo.
8. ★ El diámetro de un árbol T = (V, E) se define como máximo {δ(u, v) ∶ u, v ∈ V}, es decir, la
mayor de todas las distancias de trayectoria más cortas en el árbol. Proporcione un
algoritmo eficiente para calcular el diámetro de un árbol y analice el tiempo de ejecución
de su algoritmo.

Búsqueda primero en profundidad (DFS)


DFS(G)
1 desde cada vértice u ∈ G.V
2 u.color = BLANCO
3 u.π = NIL
4 time = 0
5 desde cada vértice u ∈ G.V
6 if u.color == BLANCO
7 DFS-VISIT(G,u)

DFS-VISIT(G, u)
1 time = time + 1 // El vértice blanco U acaba de ser descubierto
2 u.d = time
3 u.color = GRIS
4 desde cada vértice v en G.Adj[u] // Explora cada arista (U, V)
5 si v.color == BLANCO
6 v.π = u
7 DFS-VISIT(G,v)
8 time = time + 1
9 u.f = time
10 u.color = NEGRO // ennegrecer u; Está terminado

2/5
Universidad Técnica de Manabí
Facultad de Ciencias Informáticas
Carrera de Sistemas de Información

9. Haga un gráfico de 3 por 3 con etiquetas de fila y columna BLANCO, GRIS y NEGRO. En
cada celda (i, j), indique si, en cualquier punto durante una búsqueda en profundidad de un
grafo dirigido, puede haber una arista desde un vértice de color i hasta un vértice de color j.
Para cada arista posible, indique qué tipos de arista puede ser. Haga un segundo gráfico de
este tipo para la búsqueda de profundidad de un gráfico no dirigido.
Desde / Hasta Blanco Gris Negro

Blanco

Gris

Negro

10. Muestre cómo funciona la búsqueda en profundidad en el grafo de la siguiente figura.


Supongamos que el ciclo desde-hasta de las líneas 5–7 del procedimiento DFS considera los
vértices en orden alfabético y suponga que cada lista de adyacencia está ordenada
alfabéticamente. Muestra los tiempos de descubrimiento y finalización de cada vértice, y
muestra la clasificación de cada arista.

11. Aplique y muestra la estructura de agrupación entre paréntesis de la búsqueda en


profundidad para el siguiente grafo.

12. Demuestre que el uso de un solo bit para almacenar cada color de vértice es suficiente
argumentando que el procedimiento DFS produce el mismo resultado si se elimina la línea
10 de DFS-VISIT.
13. Mostrar que, en un grafo dirigido, la arista (u, v) es
a) una arista árbol o una arista de avance si y sólo si u.d < v.d < v.f < u.f,
b) una arista de regreso posterior si y sólo si v.d ≤ u.d < u.f ≤ v.f, y
c) una arista de cruce si y sólo si v.d < v.f < u.d < u.f.
14. Vuelva a escribir el procedimiento DFS, utilizando una pila para eliminar la recursión.
15. Dé un contraejemplo a la conjetura de que, si un grafo dirigido G contiene un camino de u
a v, y si u.d < v.d en una búsqueda de profundidad de G, entonces v es un descendiente de u
en el bosque producido por la búsqueda primero en profundidad.

3/5
Universidad Técnica de Manabí
Facultad de Ciencias Informáticas
Carrera de Sistemas de Información

16. Dé un contraejemplo a la conjetura de que, si un grafo dirigido G contiene un camino de u


a v, entonces cualquier búsqueda de primero en profundidad debe resultar en v.d ≤ u.f.
17. Modifique el pseudocódigo para la búsqueda primero en profundidad de modo para que
junto a cada asista del grafo dirigido imprima su tipo. Muestre qué modificaciones, si las hay,
que debe realizar si G no es un grafo dirigido.
18. Explique cómo un vértice u de un grafo dirigido puede terminar en un árbol de profundidad
que contiene solo u, aunque u tenga aristas entrantes y salientes en G.
19. Sea G = (V, E) un grafo conexo no dirigido. Proporcione un algoritmo de tiempo O(V + E)
para calcular un camino en G que atraviese cada arista en E exactamente una vez en cada
dirección. Describa cómo puede encontrar la manera de salir de un laberinto si se le da un
gran suministro de centavos.
20. Mostrar cómo usar una búsqueda de profundidad de un grafo G no dirigido para identificar
los componentes conectados de G, de modo que el bosque de profundidad primero
contenga tantos árboles como G tiene componentes conectados. Más precisamente,
muestra cómo modificar la búsqueda de profundidad primero para que asigne a cada vértice
v una etiqueta entera v.cc entre 1 y k, donde k es el número de componentes conectados de
G, tal que u.cc = v.cc si y solo si u y v pertenecen al mismo componente conectado.

Orden Topológico
TOPOLOGICAL-SORT(G)
1 llamar a DFS(G) para calcular los tiempos de finalización v.f para
2 cada vértice v así como cada vértice que haya terminado, insértelo
3 en el frente de una lista vinculada
4 retornar la lista vinculada de vértices

21. Muestra el orden de los vértices producidos por TOPOLOGICAL-SORT cuando se ejecuta
en el dag de la siguiente figura. Supongamos que el bucle for de las líneas 5–7 del
procedimiento DFS considera los vértices en orden alfabético y suponga que cada lista de
adyacencia está ordenada alfabéticamente.

22. Dé un algoritmo de tiempo lineal que, dado un grafo acíclico dirigido G = (V, E) y dos
vértices a, b ∈ V, devuelve el número de caminos simples de a hacia b en G. Por ejemplo, el
grafo acíclico dirigido de la figura en el ejercicio anterior contiene exactamente cuatro
caminos simples desde el vértice p hasta el vértice v: 〈p, o, v〉, 〈p, o, r, y, v〉, 〈p, o, s, r, y, v〉 y
〈p, s, r, y, v〉. Su algoritmo solo necesita contar las rutas simples, no enumerarlas.
23. Proporcione un algoritmo que determine si un grafo no dirigido G = (V, E) contiene un ciclo
simple. El algoritmo debe ejecutarse en tiempo O(V), independientemente de |E|.
24. Probar o refutar: Si un grafo dirigido G contiene ciclos, entonces el orden de vértices
producido por TOPOLOGICAL-SORT(G) minimiza el número de aristas "malas" que son
inconsistentes con el orden producido.

4/5
Universidad Técnica de Manabí
Facultad de Ciencias Informáticas
Carrera de Sistemas de Información

25. Otra forma de ordenar topológicamente un grafo acíclico dirigido G = (V, E) es encontrar
repetidamente un vértice de grado 0, emitirlo y eliminarlo y todas sus aristas salientes del
grafo. Explicar cómo implementar esta idea para que se ejecute en el tiempo O(V + E). ¿Qué
sucede con este algoritmo si G tiene ciclos?

5/5

También podría gustarte