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 Algoritmo de rotulação de nós Algoritmo de rotulação de arcos Números de caminhos através de qualquer nó ou arco Detalhes de implementação Complexidade
Objetivo Estudar algoritmos que nos permita obter o números de caminhos, em uma rede acíclica e direcionada, de um nó origem a um nó destino
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 Scanned:  nó já analisado UnScannable:  nó não analisado NScannable:  nó cujo que não tem sucessores imediatos ou todos os seus sucessores já foram analisados (scanned).  Com essas definições já é possível entender o algoritmo
Rotulação de Nós - Passos Passo 1:  Rotular todos os nós  NScannable com 0 (zero). Rotular o nó destino com 1. Passo 2 (Geral):  Analise todos o NScannable  k nós e rotule todos os seus J nós antecessores imediatos com: Rótulo J = Rótulo J + Rótulo K
Rotulação de Nós - Passos Passo 3:  Se o nó origem se tornar NScannable, pare. O número de caminhos possíveis entre a origem e o destino é o rótulo do nó origem.  Obs.: Se em algum momento todos os nós forem unScannable, pare (não existe nenhum nó que possa ser analisado). Isso implica a existência de ciclos.
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
LScannable:  nó que não tem nenhum arco que chega ou todos os arcos que chegam estão rotulados Com essas definições já é possível entender o algoritmo Rotulação de Arcos - Definições
Rotulação de Arcos - Passos Passo 1:  Rotular todos os arcos que saem dos nós LScannable com 0 (zero). Rotular todos os arcos que saem da origem com 1 Passo 2 (Geral):  Analise todos o LScannable k nós e rotule todos os seus arcos de saída com a soma de todos os rótulos dos arcos que chegam em k
Rotulação de Arcos - Passos Passo 3:  Se o nó destino se tornar LScannable, pare. O número de caminhos possíveis entre a origem e o destino é o a soma dos rótulos dos arcos incidentes no nó destino .  Obs.: Se em algum momento todos os nós forem unScannable, pare (não existe nenhum nó LScannable). Isso implica a existência de ciclos.
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 O mesmo é válido para rotulação de arcos. Aplica-se o algoritmo de rotulação de arcos para um rede. Inverte os arcos da rede Aplica o algoritmo de rotulação para a rede invertida Multiplica-se os rótulos dos arcos Como resultado temos o número de caminhos distintos da origem ao destino através de um arco
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

Enumeração Caminhos - Algoritmo Grafos

  • 1.
    UNIVERSIDADE FEDERAL DEJUIZ DE FORA INSTITUTO DE CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Enumeração de Caminhos
  • 2.
    Autores: Thiago BaêssoProcaci Cláudio Lopes
  • 3.
    Agenda Algoritmo derotulação de nós Algoritmo de rotulação de arcos Números de caminhos através de qualquer nó ou arco Detalhes de implementação Complexidade
  • 4.
    Objetivo Estudar algoritmosque nos permita obter o números de caminhos, em uma rede acíclica e direcionada, de um nó origem a um nó destino
  • 5.
  • 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.
    Rotulação de Nós- Definições Scanned: nó já analisado UnScannable: nó não analisado NScannable: nó cujo que não tem sucessores imediatos ou todos os seus sucessores já foram analisados (scanned). Com essas definições já é possível entender o algoritmo
  • 8.
    Rotulação de Nós- Passos Passo 1: Rotular todos os nós NScannable com 0 (zero). Rotular o nó destino com 1. Passo 2 (Geral): Analise todos o NScannable k nós e rotule todos os seus J nós antecessores imediatos com: Rótulo J = Rótulo J + Rótulo K
  • 9.
    Rotulação de Nós- Passos Passo 3: Se o nó origem se tornar NScannable, pare. O número de caminhos possíveis entre a origem e o destino é o rótulo do nó origem. Obs.: Se em algum momento todos os nós forem unScannable, pare (não existe nenhum nó que possa ser analisado). Isso implica a existência de ciclos.
  • 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 1Rotulaçã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
  • 17.
  • 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.
    LScannable: nóque não tem nenhum arco que chega ou todos os arcos que chegam estão rotulados Com essas definições já é possível entender o algoritmo Rotulação de Arcos - Definições
  • 20.
    Rotulação de Arcos- Passos Passo 1: Rotular todos os arcos que saem dos nós LScannable com 0 (zero). Rotular todos os arcos que saem da origem com 1 Passo 2 (Geral): Analise todos o LScannable k nós e rotule todos os seus arcos de saída com a soma de todos os rótulos dos arcos que chegam em k
  • 21.
    Rotulação de Arcos- Passos Passo 3: Se o nó destino se tornar LScannable, pare. O número de caminhos possíveis entre a origem e o destino é o a soma dos rótulos dos arcos incidentes no nó destino . Obs.: Se em algum momento todos os nós forem unScannable, pare (não existe nenhum nó LScannable). Isso implica a existência de ciclos.
  • 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 caminhosatravé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 12 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.
    Números de caminhosatravés de qualquer arco O mesmo é válido para rotulação de arcos. Aplica-se o algoritmo de rotulação de arcos para um rede. Inverte os arcos da rede Aplica o algoritmo de rotulação para a rede invertida Multiplica-se os rótulos dos arcos Como resultado temos o número de caminhos distintos da origem ao destino através de um arco
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
    Complexidade Ordem deO(n³) – Rotulação de nós
  • 36.
    Complexidade Ordem deO(n³) – Rotulação de arcos
  • 37.
    Fim Fonte: Simple Paths in a Directed Network by Pitu Mirchandani