SlideShare uma empresa Scribd logo
1 de 37
UNIVERSIDADE FEDERAL DE JUIZ DE FORA   INSTITUTO DE CIÊNCIAS EXATAS   DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Enumeração de Caminhos
Autores: Thiago Baêsso Procaci Cláudio Lopes
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object]
Objetivo ,[object Object]
Algoritmo de Rotulação de Nós
Rotulação de Nós - Definições O que significa o rótulo de um nó? Considere:  s nó origem; t nó destino   O rótulo de cada nó denota o número possíveis de caminhos para alcançar o nó destino 1 2 3
Rotulação de Nós - Definições ,[object Object],[object Object],[object Object],Com essas definições já é possível entender o algoritmo
Rotulação de Nós - Passos ,[object Object],[object Object]
Rotulação de Nós - Passos ,[object Object],[object Object]
Rotulação de Nós - Exemplo Inicialização: Identificar quais nós são nScannable (não tem sucessores imediatos) e rotulá-los com 0. Rotular o destino com 1. 1 O nó t é NScannable NScannable s: origem t: destino
Rotulação de Nós - Exemplo Passo Geral: Analisar todos os NScannable e rotular seus antecessores  1 NScannable Antecessores de t: 1 e 2  Rótulo 1 = Rótulo 1 + Rótulo t  Rótulo 2 = Rótulo 2 + Rótulo t 1 1 O nó t ficará scanned
Rotulação de Nós - Exemplo Passo Geral: identificar os novos NScannable (sucessores imediatos scanned) scanned NScannable identificado: 1. Seu sucessor (t) é scanned.  NScannable 1 1 1
Rotulação de Nós - Exemplo Passo Geral: Analisar todos os NScannable e rotular seus antecessores  scanned NScannable 1 1 1 Antecessores de 1: s e 2  Rótulo s = Rótulo s + Rótulo 1  Rótulo 2 = Rótulo 2 + Rótulo 1 + 1 = 2 1 O nó 1 ficará scanned
scanned 1 1 Rotulação de Nós - Exemplo scanned 2 1 Passo Geral: identificar os novos NScannable (sucessores imediatos scanned) NScannable identificado: 2. Seus sucessores (t,1) são scanned.  NScannable
Rotulação de Nós - Exemplo Passo Geral: Analisar todos os NScannable e rotular seus antecessores  scanned 1 1 scanned 2 1 NScannable Antecessor de 2: s  Rótulo s = Rótulo s + Rótulo 2  + 2 = 3 O nó 2 ficará scanned
Rotulação de Nós - Exemplo scanned 1 1 scanned 2 scanned Passo Geral: identificar os novos NScannable (sucessores imediatos scanned) NScannable identificado: s. Seus sucessores (1,s) são scanned.  3 NScannable Critério de parada satisfeito. O número de caminhos de s até t é 3
Algoritmo de Rotulação de Arcos
Rotulação de Arcos - Definições O que significa o rótulo de um arco? Considere:  s nó origem; t nó destino   O rótulo de cada arco denota o número possíveis de caminhos, através do arco, da origem para o nó onde o arco incide 1 1 1 2 1
[object Object],Com essas definições já é possível entender o algoritmo Rotulação de Arcos - Definições
Rotulação de Arcos - Passos ,[object Object],[object Object]
Rotulação de Arcos - Passos ,[object Object],[object Object]
Rotulação de Arcos - Exemplo s: origem t: destino Inicialização: Identificar quais nós são LScannable (não tem arco que chega) e rotular seus arcos de saída com 0. Rotular os arcos que saem da origem com 1. LScannable identificado: 1. Não tem arco que chega nele. Rotular seus arcos de saída com 0  LScannable 0 0 Nó origem: s Rotular os arcos que saem de s com 1  1 1 1 Sempre que todos os arcos que saem de um nó são rotulados, o nó passa a ser scanned (1 e s)
Rotulação de Arcos - Exemplo Passo Geral: Identificar nós que são LScannable  0 0 1 1 1 scanned scanned LScannable identificado: 2. Todos os arcos que chegam nele estão rotulados  LScannable
Rotulação de Arcos - Exemplo 0 0 1 1 1 scanned LScannable Passo Geral: Analisar todos os nós LScannable e rotular seus arcos de saída  com a soma dos rótulos dos arcos que chegam no nó.  Rotular o arco que sai de 2. Rótulo do arco que sai = soma dos rótulos dos arcos que chegam 0 + 1 = 1 O nó 2 se torna scanned  scanned
Rotulação de Arcos - Exemplo 0 0 1 1 1 scanned scanned scanned 1 Passo Geral: Identificar nós que são LScannable  LScannable identificado: 3. Todos os arcos que chegam nele estão rotulados  LScannable
Rotulação de Arcos - Exemplo scanned scanned scanned LScannable 0 0 1 1 1 1 Passo Geral: Analisar todos os nós LScannable e rotular seus arcos de saída  com a soma dos rótulos dos arcos que chegam no nó.  Rotular o arco que sai de 3. Rotulo do arco que sai = soma dos rótulos dos arcos que chegam 1 + 1 = 2 O nó 3 se torna scanned
Rotulação de Arcos - Exemplo Passo Geral: Identificar nós que são LScannable  LScannable identificado: t. Todos os arcos que chegam nele estão rotulados  scanned scanned scanned 0 0 1 1 1 1 scanned 2 Fim do algoritmo, pois o nó destino se tornou LScannable. O número de caminhos de s para t é a soma dos rótulos dos arcos que incide em t. 1 + 2 = 3 LScannable
Números de caminhos através de qualquer nó Aplicando o algoritmo de rotulação de nós obtemos os rótulos  (n’k)  de cada nó. O rótulo de um nó indica o número de caminhos distintos de um nó k até o nó destino. Se invertermos as direções de todos os arcos da rede e aplicar o algoritmo de rotulação de nós obteremos os rótulos  (n’’k)  de cada nó. Neste caso o rótulo indica o número de caminhos distintos de um nó k até o destino, que era a origem no grafo original O número total de caminhos da origem ao destino através de um nó k é:   nk = n’k x n’’k
Exemplo 3 1 2 1 1 1 2 3 Inverte Multiplica-se os rótulos 3 2 2 3 Tem-se o números de caminhos distintos de s a t através do nó 1
Números de caminhos através de qualquer arco ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Detalhes de implementação - Modelo
Detalhes de implementação
Detalhes de implementação
Detalhes de implementação
Complexidade Ordem de O(n³) – Rotulação de nós
Complexidade Ordem de O(n³) – Rotulação de arcos
Fim   Fonte: Simple Paths in a Directed Network by  Pitu Mirchandani

Mais conteúdo relacionado

Destaque

O DNA da computação para jogos digitais: Caminhos
O DNA da computação para jogos digitais: CaminhosO DNA da computação para jogos digitais: Caminhos
O DNA da computação para jogos digitais: CaminhosMichel Montenegro
 
Apostila de portugol
Apostila de portugolApostila de portugol
Apostila de portugolSandra Rocha
 
Caminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallCaminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallJohnnatan Messias
 
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallAlgoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallJoao Silva
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Lista de exercicios resolvidos Analise II
Lista de exercicios resolvidos Analise IILista de exercicios resolvidos Analise II
Lista de exercicios resolvidos Analise IIRaffael Zaidan
 
Exercicios resolvidos visu alg vetores
Exercicios resolvidos visu alg vetoresExercicios resolvidos visu alg vetores
Exercicios resolvidos visu alg vetoresWillians Miyabara
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugolGabriel Faustino
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlgWillians Miyabara
 
Lista de exercícios resolvidos
Lista de exercícios resolvidosLista de exercícios resolvidos
Lista de exercícios resolvidosCrishna Irion
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Coletanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-cColetanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-cWilson Kushima
 

Destaque (15)

O DNA da computação para jogos digitais: Caminhos
O DNA da computação para jogos digitais: CaminhosO DNA da computação para jogos digitais: Caminhos
O DNA da computação para jogos digitais: Caminhos
 
Apostila de portugol
Apostila de portugolApostila de portugol
Apostila de portugol
 
Caminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-WarshallCaminhos Mínimos: Dijkstra e Floyd-Warshall
Caminhos Mínimos: Dijkstra e Floyd-Warshall
 
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallAlgoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
 
Matrizes
MatrizesMatrizes
Matrizes
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Apostila Visualg
Apostila VisualgApostila Visualg
Apostila Visualg
 
Lista de exercicios resolvidos Analise II
Lista de exercicios resolvidos Analise IILista de exercicios resolvidos Analise II
Lista de exercicios resolvidos Analise II
 
Exercicios resolvidos visu alg vetores
Exercicios resolvidos visu alg vetoresExercicios resolvidos visu alg vetores
Exercicios resolvidos visu alg vetores
 
Manual de portugol
Manual de portugolManual de portugol
Manual de portugol
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlg
 
Lista de exercícios resolvidos
Lista de exercícios resolvidosLista de exercícios resolvidos
Lista de exercícios resolvidos
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Coletanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-cColetanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-c
 

Enumeração Caminhos - Algoritmo Grafos

  • 1. UNIVERSIDADE FEDERAL DE JUIZ DE FORA INSTITUTO DE CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Enumeração de Caminhos
  • 2. Autores: Thiago Baêsso Procaci Cláudio Lopes
  • 3.
  • 4.
  • 6. Rotulação de Nós - Definições O que significa o rótulo de um nó? Considere: s nó origem; t nó destino O rótulo de cada nó denota o número possíveis de caminhos para alcançar o nó destino 1 2 3
  • 7.
  • 8.
  • 9.
  • 10. Rotulação de Nós - Exemplo Inicialização: Identificar quais nós são nScannable (não tem sucessores imediatos) e rotulá-los com 0. Rotular o destino com 1. 1 O nó t é NScannable NScannable s: origem t: destino
  • 11. Rotulação de Nós - Exemplo Passo Geral: Analisar todos os NScannable e rotular seus antecessores 1 NScannable Antecessores de t: 1 e 2 Rótulo 1 = Rótulo 1 + Rótulo t Rótulo 2 = Rótulo 2 + Rótulo t 1 1 O nó t ficará scanned
  • 12. Rotulação de Nós - Exemplo Passo Geral: identificar os novos NScannable (sucessores imediatos scanned) scanned NScannable identificado: 1. Seu sucessor (t) é scanned. NScannable 1 1 1
  • 13. Rotulação de Nós - Exemplo Passo Geral: Analisar todos os NScannable e rotular seus antecessores scanned NScannable 1 1 1 Antecessores de 1: s e 2 Rótulo s = Rótulo s + Rótulo 1 Rótulo 2 = Rótulo 2 + Rótulo 1 + 1 = 2 1 O nó 1 ficará scanned
  • 14. scanned 1 1 Rotulação de Nós - Exemplo scanned 2 1 Passo Geral: identificar os novos NScannable (sucessores imediatos scanned) NScannable identificado: 2. Seus sucessores (t,1) são scanned. NScannable
  • 15. Rotulação de Nós - Exemplo Passo Geral: Analisar todos os NScannable e rotular seus antecessores scanned 1 1 scanned 2 1 NScannable Antecessor de 2: s Rótulo s = Rótulo s + Rótulo 2 + 2 = 3 O nó 2 ficará scanned
  • 16. Rotulação de Nós - Exemplo scanned 1 1 scanned 2 scanned Passo Geral: identificar os novos NScannable (sucessores imediatos scanned) NScannable identificado: s. Seus sucessores (1,s) são scanned. 3 NScannable Critério de parada satisfeito. O número de caminhos de s até t é 3
  • 18. Rotulação de Arcos - Definições O que significa o rótulo de um arco? Considere: s nó origem; t nó destino O rótulo de cada arco denota o número possíveis de caminhos, através do arco, da origem para o nó onde o arco incide 1 1 1 2 1
  • 19.
  • 20.
  • 21.
  • 22. Rotulação de Arcos - Exemplo s: origem t: destino Inicialização: Identificar quais nós são LScannable (não tem arco que chega) e rotular seus arcos de saída com 0. Rotular os arcos que saem da origem com 1. LScannable identificado: 1. Não tem arco que chega nele. Rotular seus arcos de saída com 0 LScannable 0 0 Nó origem: s Rotular os arcos que saem de s com 1 1 1 1 Sempre que todos os arcos que saem de um nó são rotulados, o nó passa a ser scanned (1 e s)
  • 23. Rotulação de Arcos - Exemplo Passo Geral: Identificar nós que são LScannable 0 0 1 1 1 scanned scanned LScannable identificado: 2. Todos os arcos que chegam nele estão rotulados LScannable
  • 24. Rotulação de Arcos - Exemplo 0 0 1 1 1 scanned LScannable Passo Geral: Analisar todos os nós LScannable e rotular seus arcos de saída com a soma dos rótulos dos arcos que chegam no nó. Rotular o arco que sai de 2. Rótulo do arco que sai = soma dos rótulos dos arcos que chegam 0 + 1 = 1 O nó 2 se torna scanned scanned
  • 25. Rotulação de Arcos - Exemplo 0 0 1 1 1 scanned scanned scanned 1 Passo Geral: Identificar nós que são LScannable LScannable identificado: 3. Todos os arcos que chegam nele estão rotulados LScannable
  • 26. Rotulação de Arcos - Exemplo scanned scanned scanned LScannable 0 0 1 1 1 1 Passo Geral: Analisar todos os nós LScannable e rotular seus arcos de saída com a soma dos rótulos dos arcos que chegam no nó. Rotular o arco que sai de 3. Rotulo do arco que sai = soma dos rótulos dos arcos que chegam 1 + 1 = 2 O nó 3 se torna scanned
  • 27. Rotulação de Arcos - Exemplo Passo Geral: Identificar nós que são LScannable LScannable identificado: t. Todos os arcos que chegam nele estão rotulados scanned scanned scanned 0 0 1 1 1 1 scanned 2 Fim do algoritmo, pois o nó destino se tornou LScannable. O número de caminhos de s para t é a soma dos rótulos dos arcos que incide em t. 1 + 2 = 3 LScannable
  • 28. Números de caminhos através de qualquer nó Aplicando o algoritmo de rotulação de nós obtemos os rótulos (n’k) de cada nó. O rótulo de um nó indica o número de caminhos distintos de um nó k até o nó destino. Se invertermos as direções de todos os arcos da rede e aplicar o algoritmo de rotulação de nós obteremos os rótulos (n’’k) de cada nó. Neste caso o rótulo indica o número de caminhos distintos de um nó k até o destino, que era a origem no grafo original O número total de caminhos da origem ao destino através de um nó k é: nk = n’k x n’’k
  • 29. Exemplo 3 1 2 1 1 1 2 3 Inverte Multiplica-se os rótulos 3 2 2 3 Tem-se o números de caminhos distintos de s a t através do nó 1
  • 30.
  • 35. Complexidade Ordem de O(n³) – Rotulação de nós
  • 36. Complexidade Ordem de O(n³) – Rotulação de arcos
  • 37. Fim  Fonte: Simple Paths in a Directed Network by Pitu Mirchandani