Enumeração Caminhos - Algoritmo Grafos

37
UNIVERSIDADE FEDERAL DE JUIZ DE FORA INSTITUTO DE CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Enumeração de Caminhos

Transcript of Enumeração Caminhos - Algoritmo Grafos

Page 1: Enumeração Caminhos - Algoritmo Grafos

UNIVERSIDADE FEDERAL DE JUIZ DE FORA INSTITUTO DE CIÊNCIAS EXATAS

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Enumeração de Caminhos

Page 2: Enumeração Caminhos - Algoritmo Grafos

Thiago Baêsso ProcaciCláudio Lopes

Page 3: Enumeração Caminhos - Algoritmo Grafos

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

Page 4: Enumeração Caminhos - Algoritmo Grafos

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

Page 5: Enumeração Caminhos - Algoritmo Grafos

Algoritmo de Rotulação de Nós

Page 6: Enumeração Caminhos - Algoritmo Grafos

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

Page 7: Enumeração Caminhos - Algoritmo Grafos

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

Page 8: Enumeração Caminhos - Algoritmo Grafos

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

Page 9: Enumeração Caminhos - Algoritmo Grafos

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.

Page 10: Enumeração Caminhos - Algoritmo Grafos

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

Page 11: Enumeração Caminhos - Algoritmo Grafos

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

Page 12: Enumeração Caminhos - Algoritmo Grafos

Rotulação de Nós - Exemplo

Passo Geral: identificar os novos NScannable (sucessores imediatos

scanned)

scanned

NScannable identificado: 1.Seu sucessor (t) é scanned.

NScannable1

1

1

Page 13: Enumeração Caminhos - Algoritmo Grafos

Rotulação de Nós - Exemplo

Passo Geral: Analisar todos os NScannable e rotular seus antecessores

scanned

NScannable1

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

Page 14: Enumeração Caminhos - Algoritmo Grafos

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

Page 15: Enumeração Caminhos - Algoritmo Grafos

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

Page 16: Enumeração Caminhos - Algoritmo Grafos

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

Page 17: Enumeração Caminhos - Algoritmo Grafos

Algoritmo de Rotulação de Arcos

Page 18: Enumeração Caminhos - Algoritmo Grafos

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

Page 19: Enumeração Caminhos - Algoritmo Grafos

• 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

Page 20: Enumeração Caminhos - Algoritmo Grafos

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

Page 21: Enumeração Caminhos - Algoritmo Grafos

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.

Page 22: Enumeração Caminhos - Algoritmo Grafos

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: sRotular os arcos que saem de s

com 1

1

11

Sempre que todos os arcos que saem de um nó são rotulados, o nó

passa a ser scanned (1 e s)

Page 23: Enumeração Caminhos - Algoritmo Grafos

Rotulação de Arcos - Exemplo

Passo Geral: Identificar nós que são LScannable

0

0

1

11

scanned

scannedLScannable identificado: 2.

Todos os arcos que chegam nele estão rotulados

LScannable

Page 24: Enumeração Caminhos - Algoritmo Grafos

Rotulação de Arcos - Exemplo

0

0

1

11

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

Page 25: Enumeração Caminhos - Algoritmo Grafos

Rotulação de Arcos - Exemplo

0

0

1

11

scanned

scanned

scanned1

Passo Geral: Identificar nós que são LScannable

LScannable identificado: 3.Todos os arcos que chegam nele

estão rotulados

LScannable

Page 26: Enumeração Caminhos - Algoritmo Grafos

Rotulação de Arcos - Exemplo

scanned

scanned

scanned LScannable

0

0

1

11

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

Page 27: Enumeração Caminhos - Algoritmo Grafos

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

11

1scanned

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

Page 28: Enumeração Caminhos - Algoritmo Grafos

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

Page 29: Enumeração Caminhos - Algoritmo Grafos

Exemplo

3

1

2

11

1

2

3Inverte

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

Page 30: Enumeração Caminhos - Algoritmo Grafos

Números de caminhos através de qualquer arco

O mesmo é válido para rotulação de arcos.

2. Aplica-se o algoritmo de rotulação de arcos para um rede.

3. Inverte os arcos da rede

4. Aplica o algoritmo de rotulação para a rede invertida

5. 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

Page 31: Enumeração Caminhos - Algoritmo Grafos

Detalhes de implementação - Modelo

Page 32: Enumeração Caminhos - Algoritmo Grafos

Detalhes de implementação

Page 33: Enumeração Caminhos - Algoritmo Grafos

Detalhes de implementação

Page 34: Enumeração Caminhos - Algoritmo Grafos

Detalhes de implementação

Page 35: Enumeração Caminhos - Algoritmo Grafos

ComplexidadeOrdem de O(n³) – Rotulação de nós

Page 36: Enumeração Caminhos - Algoritmo Grafos

ComplexidadeOrdem de O(n³) – Rotulação de

arcos

Page 37: Enumeração Caminhos - Algoritmo Grafos

Fim Fonte: Simple Paths in a Directed

Network by Pitu Mirchandani