Graph Theory - Exercises - Chapter 3

  • 106 views
Uploaded on

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

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

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
106
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Teoria dos Grafos - Exercícios do Capítulo 3 Questõ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: mi- chel.mas@gmail.com, michelalavessantos@hotmail.com. Disciplina: Teoria dos Grafos. Docente Responsável: Leo- nardo Viana Pereira. 1
  • 2. Conteúdo Lista 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 e Bellman-Ford. 5 2.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. . . . . . . . . . . . . . . 5 2.1.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.2 Para o segundo grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Aplique o algoritmo de Bellmann-Ford aos dois grafos (mesma observação). . . . . 9 2.2.1 Para o primeiro grafo teremos: . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.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. . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.1 Dijkstra: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.2 Bellmann-Ford: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Questão 5. Utilizando o grafo a seguir, aplique o algoritmo de Dijkstra para achar 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
  • 3. Lista de Figuras 1 Primeira Questão. Distâncias em quilômetros entre as cidades de uma certa região. 4 2 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 5 3 Grafos fornecidos para a questão de número 2. . . . . . . . . . . . . . . . . . . . . 5 4 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 7 5 Arborescência de distâncias a partir do vértice (1). . . . . . . . . . . . . . . . . . . 9 6 Grafo com o valor do arco (3,5) invertido. . . . . . . . . . . . . . . . . . . . . . . . 10 7 Grafo fornecido para a questão de número 5. . . . . . . . . . . . . . . . . . . . . . 12 8 Arborescência de distâncias a partir do vértice A. . . . . . . . . . . . . . . . . . . . 13 Lista de Tabelas 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 “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. . . . . . . . . . . . 4 3 3o Passo. Fechando o vértice D pois não existe menor distância. . . . . . . . . . . . 4 4 4o Passo. Fechando o vértice E pois não existe menor distância. . . . . . . . . . . . 4 5 5o Passo. Fechando o vértice F pois não existe menor distância. . . . . . . . . . . . 4 6 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. . . . . . 5 7 1o Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 5 8 2o Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 6 9 3o Passo. Passando pelo vértice C. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 10 4o Passo. Passando pelo vértice D. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 11 5o Passo. Passando pelo vértice E. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 12 6o Passo. Passando pelo vértice B. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 13 Passo Final. Obtenção de todas as distâncias a partir do vértice A. . . . . . . . . . 7 14 1o Passo. Construindo a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 8 15 2o Passo. Inicializando a tabela de distâncias. . . . . . . . . . . . . . . . . . . . . . 8 16 3o Passo. Passando pelo vértice (2). . . . . . . . . . . . . . . . . . . . . . . . . . . 8 17 4o Passo. Passando pelo vértice (3). . . . . . . . . . . . . . . . . . . . . . . . . . . 8 18 5o Passo. Passando pelo vértice (4). . . . . . . . . . . . . . . . . . . . . . . . . . . 9 19 6o Passo. Passando pelo vértice (5). . . . . . . . . . . . . . . . . . . . . . . . . . . 9 20 Passo Final. Obtenção de todas as distâncias a partir do vértice (1). . . . . . . . . 9 21 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. 10 22 2o Passo. Obtendo as rotas para os vértices (2) e (5) apartir do vértice (1). . . . . 11 23 3o Passo. Obtendo as rotas para os vértices (3) e (4) apartir do vértice (2). . . . . 11 24 4o Passo. Obtendo as rotas para os vértices (4) e (5) apartir do vértice (3). . . . . 11 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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 26 6o Passo. Obtendo rota para o vértice (1) e (4) apartir do vértice (5). . . . . . . . 11 27 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. . . . . . . . . . . . . . . . . . . . 11 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 “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
  • 4. 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 F Distâ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 o vértice anterior pelo qual o caminho está sendo contruído. A* B C* D E F Distâ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 F Distância 0 12 4 6 ∞ 12 Anterior - 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* F Distância 0 12 4 6 6 12 Anterior - 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 12 Anterior - A A C C E Tabela 5: 5o Passo. Fechando o vértice F pois não existe menor distância. 4
  • 5. A* B* C* D* E* F* Distância 0 12 4 6 6 12 Anterior - A A C C E Tabela 6: 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. 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, aos dois grafos, use os vértices A, no primeiro, e 1, no segundo, como origem. 2.1.1 Para o primeiro grafo teremos: Procuramos a cidade mais próxima de A. Depois, sucessivamente, procuramos entre as cidades não visitadas aquela que tem a menor distância desde A, diretamente ou passando por alguma cidade 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 lidar com distâncias negativas(ele pode entrar em looping). Começamos por construir uma tabela de distâ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 F A 0 12 4 ∞ ∞ ∞ B ∞ 0 6 6 ∞ ∞ C ∞ 10 0 ∞ 2 ∞ D ∞ ∞ 8 0 ∞ 6 E ∞ 2 ∞ ∞ 0 6 F ∞ ∞ ∞ ∞ ∞ 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
  • 6. Inicialização: A distância de A para todos os outros vértices é marcada como infinita(nesse caso 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 F Distâ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 ponto de partida. A* B C* D E F Distâ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 ponto de partida. A* B C* D* E F Distâ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 do padrã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
  • 7. A* B C* D* E F Distância 0 12 4 6 6 12 Anterior A A A C C D Tabela 11: 5o Passo. Passando pelo vértice E. A* B C* D* E* F Distância 0 8 4 6 6 12 Anterior 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óximo ponto 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 das verificaçõ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 12 Anterior 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ã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 foi colocada na tabela de distâncias para representar 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(nesse caso 1000), exceto para o próprio (1)(distância 0). Marcamos (1) como fechado, usando um asterisco, 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
  • 8. (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 ponto de partida. (1)* (2)* (3) (4) (5) Distância 0 1 ∞ ∞ 1 Anterior - (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 ponto de partida. (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 1 Anterior - (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 e será 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
  • 9. (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 1 Anterior - (1) (2) (2) (1) Tabela 18: 5o Passo. Passando pelo vértice (4). (1)* (2)* (3)* (4) (5) Distância 0 1 2 3 1 Anterior - (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 o vé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 1 Anterior - (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
  • 10. (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 os dois 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 1000 Anterior - - - - - Tabela 21: 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. 10
  • 11. (1)* (2) (3) (4) (5) Distância 0 1 1000 1000 1 Anterior - (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 1 Anterior - (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 0 Anterior - (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 0 Anterior - (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 0 Anterior - (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 0 Anterior - (1) (2) (5) (3) Tabela 27: 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. 11
  • 12. 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 de distâ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 J Distâ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 o vé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 6 Anterior - 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
  • 13. Figura 8: Arborescência de distâncias a partir do vértice A. 13