graph theory - exercises - chapter 3

13

Click here to load reader

Upload: michel-alves

Post on 29-Jun-2015

143 views

Category:

Education


0 download

DESCRIPTION

Some solved exercises of Graph Theory. The reference book used was: "Grafos - Introdução e Prática".

TRANSCRIPT

Page 1: Graph Theory - Exercises - Chapter 3

Teoria dos Grafos - Exercícios do Capítulo 3Questões 1, 2 e 5

Michel Alves dos Santos ∗

Abril de 2011

∗Bacharelando em Ciência da Computação, Universidade Federal do Estado de Alagoas(UFAL). E-mails: [email protected], [email protected]. Disciplina: Teoria dos Grafos. Docente Responsável: Leo-nardo Viana Pereira.

1

Page 2: Graph Theory - Exercises - Chapter 3

ConteúdoLista de Figuras 3

Lista de Tabelas 3

1 Questão 1. Execute o algoritmo de Dijkstra com o exemplo do item 3.2, tro-cando antes o sinal do custo do arco (E,B). 4

2 Questão 2. Considere os dois grafos utilizados nos algoritmos de Dijkstra eBellman-Ford. 52.1 Aplique o algoritmo de Dijkstra, acompanhando a formalização, aos dois grafos, use

os vértices A, no primeiro, e 1, no segundo, como origem. . . . . . . . . . . . . . . 52.1.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.2 Para o segundo grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.2 Aplique o algoritmo de Bellmann-Ford aos dois grafos (mesma observação). . . . . 92.2.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.2 Para o segundo grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3 No segundo grafo, mude o valor do arco(3,5) para -2 e aplique os dois algoritmos.Observe os resultados obtidos e interprete. . . . . . . . . . . . . . . . . . . . . . . . 102.3.1 Dijkstra: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.2 Bellmann-Ford: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3 Questão 5. Utilizando o grafo a seguir, aplique o algoritmo de Dijkstra paraachar a menor distância do vértice A aos outros vértices e construa a arbores-cência de distâncias a partir de A. 12

2

Page 3: Graph Theory - Exercises - Chapter 3

Lista de Figuras1 Primeira Questão. Distâncias em quilômetros entre as cidades de uma certa região. 42 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 53 Grafos fornecidos para a questão de número 2. . . . . . . . . . . . . . . . . . . . . 54 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 75 Arborescência de distâncias a partir do vértice (1). . . . . . . . . . . . . . . . . . . 96 Grafo com o valor do arco (3,5) invertido. . . . . . . . . . . . . . . . . . . . . . . . 107 Grafo fornecido para a questão de número 5. . . . . . . . . . . . . . . . . . . . . . 128 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 13

Lista de Tabelas1 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo

“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Ante-rior” indica o vértice anterior pelo qual o caminho está sendo contruído. . . . . . . 4

2 2o Passo. Fechando o vértice C pois não existe menor distância. . . . . . . . . . . . 43 3o Passo. Fechando o vértice D pois não existe menor distância. . . . . . . . . . . . 44 4o Passo. Fechando o vértice E pois não existe menor distância. . . . . . . . . . . . 45 5o Passo. Fechando o vértice F pois não existe menor distância. . . . . . . . . . . . 46 Passo Final. Fechando o vértice B* pois não existe menor distância. Todos os

vértices foram avaliados, com isso construímos a tabela com as distâncias. . . . . . 57 1o Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 58 2o Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 69 3o Passo. Passando pelo vértice C. . . . . . . . . . . . . . . . . . . . . . . . . . . . 610 4o Passo. Passando pelo vértice D. . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 5o Passo. Passando pelo vértice E. . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 6o Passo. Passando pelo vértice B. . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 Passo Final. Obtenção de todas as distâncias a partir do vértice A. . . . . . . . . . 714 1o Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 815 2o Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 816 3o Passo. Passando pelo vértice (2). . . . . . . . . . . . . . . . . . . . . . . . . . . 817 4o Passo. Passando pelo vértice (3). . . . . . . . . . . . . . . . . . . . . . . . . . . 818 5o Passo. Passando pelo vértice (4). . . . . . . . . . . . . . . . . . . . . . . . . . . 919 6o Passo. Passando pelo vértice (5). . . . . . . . . . . . . . . . . . . . . . . . . . . 920 Passo Final. Obtenção de todas as distâncias a partir do vértice (1). . . . . . . . . 921 1o Passo. Iniciando tabela com distâncias a partir do vértice (1). Usando o valor

1000 para representar infinito. Fechando o vértice (1), pois é nosso vértice de partida. 1022 2o Passo. Obtendo as rotas para os vértices (2) e (5) apartir do vértice (1). . . . . 1123 3o Passo. Obtendo as rotas para os vértices (3) e (4) apartir do vértice (2). . . . . 1124 4o Passo. Obtendo as rotas para os vértices (4) e (5) apartir do vértice (3). . . . . 1125 5o Passo. Obtendo rota para o vértice (1) apartir do vértice (4). Observe que o

vértice (1) já se encontra fechado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126 6o Passo. Obtendo rota para o vértice (1) e (4) apartir do vértice (5). . . . . . . . 1127 Tabela com todas as distâncias a partir do vértice (1). Houve uma redução nas

distâncias devido ao caminho com valor negativo. . . . . . . . . . . . . . . . . . . . 1128 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo

“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Ante-rior” indica o vértice anterior pelo qual o caminho está sendo contruído. . . . . . . 12

29 Último Passo. Construção da tabela com as distâncias a partir do vértice A. . . . . 12

3

Page 4: Graph Theory - Exercises - Chapter 3

1 Questão 1. Execute o algoritmo de Dijkstra com o exem-plo do item 3.2, trocando antes o sinal do custo do arco(E,B).

Figura 1: Primeira Questão. Distâncias em quilômetros entre as cidades de uma certa região.

A* B C D E FDistância 0 ∞ ∞ ∞ ∞ ∞Anterior - - - - - -

Tabela 1: 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Anterior” indica ovértice anterior pelo qual o caminho está sendo contruído.

A* B C* D E FDistância 0 12 4 ∞ ∞ ∞Anterior - A A - - -

Tabela 2: 2o Passo. Fechando o vértice C pois não existe menor distância.

A* B C* D* E FDistância 0 12 4 6 ∞ 12Anterior - A A C - D

Tabela 3: 3o Passo. Fechando o vértice D pois não existe menor distância.

A* B C* D* E* FDistância 0 12 4 6 6 12Anterior - A A C C E

Tabela 4: 4o Passo. Fechando o vértice E pois não existe menor distância.

A* B C* D* E* F*Distância 0 12 4 6 6 12Anterior - A A C C E

Tabela 5: 5o Passo. Fechando o vértice F pois não existe menor distância.

4

Page 5: Graph Theory - Exercises - Chapter 3

A* B* C* D* E* F*Distância 0 12 4 6 6 12Anterior - A A C C E

Tabela 6: Passo Final. Fechando o vértice B* pois não existe menor distância. Todos os vérticesforam avaliados, com isso construímos a tabela com as distâncias.

Figura 2: Arborescência de distâncias a partir do vértice A.

2 Questão 2. Considere os dois grafos utilizados nos algo-ritmos de Dijkstra e Bellman-Ford.

Figura 3: Grafos fornecidos para a questão de número 2.

2.1 Aplique o algoritmo de Dijkstra, acompanhando a formalização, aosdois grafos, use os vértices A, no primeiro, e 1, no segundo, comoorigem.

2.1.1 Para o primeiro grafo teremos:

Procuramos a cidade mais próxima de A. Depois, sucessivamente, procuramos entre as cidadesnão visitadas aquela que tem a menor distância desde A, diretamente ou passando por algumacidade já visitada, anotando sempre o percurso escolhido. Estamos considerando que nunca te-remos distâncias negativas, pois isso atrapalharia o algoritmo, já que o mesmo não sabe lidarcom distâncias negativas(ele pode entrar em looping). Começamos por construir uma tabela dedistâncias entre os vértices. Para os vértices não ligados consideraremos a distância como infinita.Para os próximos passos usaremos o número 1000 para representar a distância infinita (∞) que

A* B C D E FA 0 12 4 ∞ ∞ ∞B ∞ 0 6 6 ∞ ∞C ∞ 10 0 ∞ 2 ∞D ∞ ∞ 8 0 ∞ 6E ∞ 2 ∞ ∞ 0 6F ∞ ∞ ∞ ∞ ∞ 0

Tabela 7: 1o Passo. Construindo a tabela de distâncias.

foi colocada na tabela de distâncias para representar a falta de ligação entre os vértices.

5

Page 6: Graph Theory - Exercises - Chapter 3

Inicialização: A distância de A para todos os outros vértices é marcada como infinita(nessecaso 1000), exceto para o próprio A(distância 0). Marcamos A como fechado, usando um asterisco,e o vértice anterior fica vazio porque A é o nosso vértice de partida.

A* B C D E FDistância 0 ∞ ∞ ∞ ∞ ∞Anterior - - - - - -

Tabela 8: 2o Passo. Inicializando a tabela de distâncias.

• 2o Passo: Que cidades posso alcançar a partir de A e qual é a distância entre elas?

• Resposta: B, distância = 12 (mudamos para 12 pois: 12 < 1000 )

• Resposta: C, distância = 4 (mudamos para 4 pois: 4 < 1000 )

O vértice C será fechado pois sua distância não pode ser melhorada e será o nosso próximo pontode partida.

A* B C* D E FDistância 0 12 4 ∞ ∞ ∞Anterior A A A - - -

Tabela 9: 3o Passo. Passando pelo vértice C.

• 3o Passo: Que cidades posso alcançar a partir de C e qual é a distância entre elas?

• Resposta: B, distância = 14 (não mudamos para 14 pois: 12 < 14 )

• Resposta: D, distância = 6 (mudamos para 6 pois: 6 < 1000 )

• Resposta: E, distância = 6 (mudamos para 6 pois: 6 < 1000 )

O vértice D será fechado pois sua distância não pode ser melhorada e será o nosso próximo pontode partida.

A* B C* D* E FDistância 0 12 4 6 6 ∞Anterior A A A C C -

Tabela 10: 4o Passo. Passando pelo vértice D.

• 4o Passo: Que cidades posso alcançar a partir de D e qual é a distância entre elas?

• Resposta: C, distância = 14 (não mudamos para 14 pois: 4 < 14 )

• Resposta: F, distância = 12 (mudamos para 12 pois: 12 < 1000 )

Por enquanto nenhum vértice será fechado mas as distâncias computadas que estavam dentro dopadrão de minimalidade serão atualizadas na tabela. Próximo ponto de partida será o vértice E.

• 5o Passo: Que cidades posso alcançar a partir de E e qual é a distância entre elas?

• Resposta: B, distância = 8 (mudamos para 8 pois: 8 < 12)

• Resposta: F, distância = 12 (mudamos para 12 pois: 12 <= 12)

6

Page 7: Graph Theory - Exercises - Chapter 3

A* B C* D* E FDistância 0 12 4 6 6 12Anterior A A A C C D

Tabela 11: 5o Passo. Passando pelo vértice E.

A* B C* D* E* FDistância 0 8 4 6 6 12Anterior A E A C C E

Tabela 12: 6o Passo. Passando pelo vértice B.

O vértice E será fechado pois sua distância não pode ser melhorada e B será o nosso próximoponto de partida.

• 6o Passo: Que cidades posso alcançar a partir de B e qual é a distância entre elas?

• Resposta: C, distância = 14 (não mudamos para 14 pois: 4 < 14)

• Resposta: D, distância = 14 (não mudamos para 14 pois: 6 < 14)

Porém vale observar que o vértice C já foi fechado e o vértice D também, logo o vértice B se-ráfechado pois não existe menor distância para alcançá-lo. Além disso chegamos ao final dasverificações, logo o vértice F também será fechado e com isso teremos:

A* B* C* D* E* F*Distância 0 8 4 6 6 12Anterior A E A C C E

Tabela 13: Passo Final. Obtenção de todas as distâncias a partir do vértice A.

Figura 4: Arborescência de distâncias a partir do vértice A.

2.1.2 Para o segundo grafo teremos:

Começamos por construir uma tabela de distâncias entre os vértices. Para os vértices nãoligados consideraremos a distância como infinita (∞). Para os próximos passos usaremos o número1000 para representar a distância infinita (∞) que foi colocada na tabela de distâncias pararepresentar a falta de ligação entre os vértices.

Inicialização: A distância de (1) para todos os outros vértices é marcada como infinita(nessecaso 1000), exceto para o próprio (1)(distância 0). Marcamos (1) como fechado, usando umasterisco, e o vértice anterior fica vazio porque (1) é o nosso vértice de partida.

• 2o Passo: Que vértices posso alcançar a partir de (1) e qual é a distância entre eles?

• Resposta: (2), distância = 1 (mudamos para 1 pois: 1 < 1000 )

7

Page 8: Graph Theory - Exercises - Chapter 3

(1) (2) (3) (4) (5)(1) 0 1 ∞ ∞ 1(2) ∞ 0 1 2 ∞(3) ∞ ∞ 0 4 2(4) 3 ∞ ∞ 0 ∞(5) 2 ∞ ∞ 1 0

Tabela 14: 1o Passo. Construindo a tabela de distâncias.

(1)* (2) (3) (4) (5)Distância 0 ∞ ∞ ∞ ∞Anterior - - - - -

Tabela 15: 2o Passo. Inicializando a tabela de distâncias.

• Resposta: (5), distância = 1 (mudamos para 1 pois: 1 < 1000 )

O vértice (2) será fechado pois sua distância não pode ser melhorada e será o nosso próximo pontode partida.

(1)* (2)* (3) (4) (5)Distância 0 1 ∞ ∞ 1Anterior - (1) - - (1)

Tabela 16: 3o Passo. Passando pelo vértice (2).

• 3o Passo: Que vértices posso alcançar a partir de (2) e qual é a distância entre eles?

• Resposta: (3), distância = 2 (mudamos para 2 pois: 2 < 1000 )

• Resposta: (4), distância = 3 (mudamos para 3 pois: 3 < 1000 )

O vértice (3) será fechado pois sua distância não pode ser melhorada e será o nosso próximo pontode partida.

(1)* (2)* (3)* (4) (5)Distância 0 1 2 3 1Anterior - (1) (2) (2) (1)

Tabela 17: 4o Passo. Passando pelo vértice (3).

• 4o Passo: Que vértices posso alcançar a partir de (3) e qual é a distância entre eles?

• Resposta: (4), distância = 6 (não mudamos para 6 pois: 3 < 6 )

• Resposta: (5), distância = 4 (não mudamos para 4 pois: 1 < 4 )

O vértice (4) não será fechado pois ainda não averiguamos se a distância pode ser melhorada eserá o nosso próximo ponto de partida.

• 4o Passo: Que vértices posso alcançar a partir de (4) e qual é a distância entre eles?

• Resposta: (1), distância = 6 (não mudamos para 6 pois: 0 < 6 )

8

Page 9: Graph Theory - Exercises - Chapter 3

(1)* (2)* (3)* (4) (5)Distância 0 1 2 3 1Anterior - (1) (2) (2) (1)

Tabela 18: 5o Passo. Passando pelo vértice (4).

(1)* (2)* (3)* (4) (5)Distância 0 1 2 3 1Anterior - (1) (2) (2) (1)

Tabela 19: 6o Passo. Passando pelo vértice (5).

O vértice (4) não será fechado pois ainda não averiguamos se a distância pode ser melhorada e ovértice (5) será o nosso próximo ponto de partida. Observe que o vértice (1) já estava fechado.

• Passo Final: Que vértices posso alcançar a partir de (5) e qual é a distância entre eles?

• Resposta: (1), distância = 3 (não mudamos para 3 pois: 0 < 3 )

• Resposta: (4), distância = 2 (mudamos para 2 pois: 2 < 3 )

O vértice (4) será fechado pois a distância não pode ser melhorada e o vértice (5) também será.

(1)* (2)* (3)* (4)* (5)*Distância 0 1 2 2 1Anterior - (1) (2) (5) (1)

Tabela 20: Passo Final. Obtenção de todas as distâncias a partir do vértice (1).

Figura 5: Arborescência de distâncias a partir do vértice (1).

2.2 Aplique o algoritmo de Bellmann-Ford aos dois grafos (mesma ob-servação).

2.2.1 Para o primeiro grafo teremos:

(A, B) : dAB(∞) > d11(0) + vAB(12)→ dAB = 12 anterior(B) = A

(A, C) : dAC(∞) > d11(0) + vAC(4)→ dAC = 4 anterior(C) = A

(C, B) : dAB(12) < dAC(4) + vCB(10)→ dAB = 12 sem modificação

(C, D) : dAD(∞) > dAC(4) + vCD(2)→ dAD = 6 anterior(D) = C

(C, E) : dAE(∞) > dAC(4) + vCE(2)→ dAE = 6 anterior(E) = C

(D, C) : dAC(4) < dAD(6) + vDC(8)→ dAC = 4 sem modificação

(D, F ) : dAF (∞) > dAD(6) + vDF (6)→ dAF = 12 anterior(F ) = D

9

Page 10: Graph Theory - Exercises - Chapter 3

(E, B) : dAB(12) > dAE(6) + vEB(2)→ dAB = 8 anterior(B) = E

(E, F ) : dAF (12) >= dAE(6) + vEF (6)→ dAF = 12 anterior(F ) = E

(B, C) : dAC(4) < dAB(8) + vBC(6)→ dAC = 4 sem modificação

(B, D) : dAD(6) < dAB(8) + vBD(6)→ dAD = 6 sem modificação

Em uma segunda iteração não haverá mudanças nos valores das distâncias.

2.2.2 Para o segundo grafo teremos:

(1, 2) : d12(∞) > d11(0) + v12(1)→ d12 = 1 anterior(2) = 1

(1, 5) : d15(∞) > d11(0) + v15(1)→ d15 = 1 anterior(5) = 1

(2, 3) : d13(∞) > d12(1) + v23(1)→ d13 = 2 anterior(3) = 2

(2, 4) : d14(∞) > d12(1) + v24(2)→ d14 = 3 anterior(4) = 2

(3, 4) : d14(3) > d13(2) + v34(4)→ sem modificação

(3, 5) : d15(1) > d13(2) + v35(2)→ sem modificação

(4, 1) : d11(0) > d14(3) + v41(3)→ sem modificação

(5, 1) : d11(0) > d15(1) + v51(2)→ sem modificação

(5, 4) : d14(3) > d15(1) + v54(1)→ d14 = 2 anterior(4) = 5

Em uma segunda iteração não haverá mudanças nos valores das distâncias.

2.3 No segundo grafo, mude o valor do arco(3,5) para -2 e aplique osdois algoritmos. Observe os resultados obtidos e interprete.

Figura 6: Grafo com o valor do arco (3,5) invertido.

2.3.1 Dijkstra:

(1)* (2) (3) (4) (5)Distância 0 1000 1000 1000 1000Anterior - - - - -

Tabela 21: 1o Passo. Iniciando tabela com distâncias a partir do vértice (1). Usando o valor 1000para representar infinito. Fechando o vértice (1), pois é nosso vértice de partida.

10

Page 11: Graph Theory - Exercises - Chapter 3

(1)* (2) (3) (4) (5)Distância 0 1 1000 1000 1Anterior - (1) - - (1)

Tabela 22: 2o Passo. Obtendo as rotas para os vértices (2) e (5) apartir do vértice (1).

(1)* (2) (3) (4) (5)Distância 0 1 2 3 1Anterior - (1) (2) (2) (1)

Tabela 23: 3o Passo. Obtendo as rotas para os vértices (3) e (4) apartir do vértice (2).

(1)* (2)* (3)* (4) (5)Distância 0 1 2 3 0Anterior - (1) (2) (2) (3)

Tabela 24: 4o Passo. Obtendo as rotas para os vértices (4) e (5) apartir do vértice (3).

(1)* (2)* (3)* (4) (5)Distância 0 1 2 3 0Anterior - (1) (2) (2) (3)

Tabela 25: 5o Passo. Obtendo rota para o vértice (1) apartir do vértice (4). Observe que o vértice(1) já se encontra fechado.

(1)* (2)* (3)* (4)* (5)Distância 0 1 2 1 0Anterior - (1) (2) (5) (3)

Tabela 26: 6o Passo. Obtendo rota para o vértice (1) e (4) apartir do vértice (5).

(1)* (2)* (3)* (4)* (5)*Distância 0 1 2 1 0Anterior - (1) (2) (5) (3)

Tabela 27: Tabela com todas as distâncias a partir do vértice (1). Houve uma redução nasdistâncias devido ao caminho com valor negativo.

11

Page 12: Graph Theory - Exercises - Chapter 3

2.3.2 Bellmann-Ford:

(1, 2) : d12(∞) > d11(0) + v12(1)→ d12 = 1 anterior(2) = 1

(1, 5) : d15(∞) > d11(0) + v15(1)→ d15 = 1 anterior(5) = 1

(2, 3) : d13(∞) > d12(1) + v23(1)→ d13 = 2 anterior(3) = 2

(2, 4) : d14(∞) > d12(1) + v24(2)→ d14 = 3 anterior(4) = 2

(3, 4) : d14(3) > d13(2) + v34(4)→ sem modificação

(3, 5) : d15(1) > d13(2) + v35(−2)→ d15 = 0 anterior(5) = 3

(4, 1) : d11(0) > d14(3) + v41(3)→ sem modificação

(5, 1) : d11(0) > d15(1) + v51(2)→ sem modificação

(5, 4) : d14(3) > d15(0) + v54(1)→ d14 = 1 anterior(4) = 5

Em uma segunda iteração não haverá mudanças nos valores das distâncias.

3 Questão 5. Utilizando o grafo a seguir, aplique o algo-ritmo de Dijkstra para achar a menor distância do vér-tice A aos outros vértices e construa a arborescência dedistâncias a partir de A.

Figura 7: Grafo fornecido para a questão de número 5.

A* B C D E F G H I JDistância 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞Anterior - - - - - - - - - -

Tabela 28: 1o Passo. Iniciando a tabela de distâncias e relações de anteriodidade. O rótulo“Distância” indica a distância de qualquer vértice até o vértice A. O rótulo “Anterior” indica ovértice anterior pelo qual o caminho está sendo contruído.

A* B* C* D* E* F* G* H* I* J*Distância 0 4 1 2 7 4 5 4 8 6Anterior - A A C B D D D F H

Tabela 29: Último Passo. Construção da tabela com as distâncias a partir do vértice A.

12

Page 13: Graph Theory - Exercises - Chapter 3

Figura 8: Arborescência de distâncias a partir do vértice A.

13