Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês, Notas de aula de Algoritmos

Os algoritmos para encontrar um circuito de euler e resolver o problema do carteiro chinês em grafos. O circuito de euler é um caminho que visita cada aresta exatamente uma vez e o problema do carteiro chinês consiste em encontrar um caminho fechado de peso mínimo que atravesse cada aresta de g pelo menos uma vez. O documento inclui exemplos e explica os métodos de pesquisa em profundidade e emparelhamento perfeito de peso mínimo.

O que você vai aprender

  • Como resolver o Problema do Carteiro Chinês em um grafo?
  • Como encontrar um circuito de Euler em um grafo?
  • O que é o Problema do Carteiro Chinês em teoria de grafos?

Tipologia: Notas de aula

2022

Compartilhado em 07/11/2022

jacare84
jacare84 🇧🇷

4.5

(451)

225 documentos

1 / 10

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
CAL (2010-2011) – MIEIC/FEUP Algoritmos em Grafos (20-04-2011)
Circuito de Euler e Prob. Carteiro Chinês ./rr (1)
1
Algoritmos em Grafos: Circuito de Eulere Problema do Carteiro Chinês – CAL, 2010/11
Algoritmos em Grafos:
Circuitos de Euler e
Problema do Carteiro Chinês
R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes
FEUP, MIEIC, CPAL, 2010/2011
2
Algoritmos em Grafos: Circuito de Eulere Problema do Carteiro Chinês – CAL, 2010/11
Circuitos de Euler
Puzzle: desenhar as figuras abaixo sem levantar o lápis e sem repetir
arestas; de preferência, terminando no mesmo vértice em que iniciar.
Reformulação como problema em Teoria de Grafos: pôr um vértice em cada
intersecção
Caminho de Euler: caminho que visita cada aresta exactamente uma vez
Problema resolvido por Euler em 1736 e que marca o início da Teoria dos
Grafos
Circuito de Euler: caminho de Euler que começa e acaba no mesmo vértice
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês e outras Notas de aula em PDF para Algoritmos, somente na Docsity!

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 1

Algoritmos em Grafos:

Circuitos de Euler e

Problema do Carteiro Chinês

R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes

FEUP, MIEIC, CPAL, 2010/

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 2

Circuitos de Euler

 Puzzle: desenhar as figuras abaixo sem levantar o lápis e sem repetir

arestas; de preferência, terminando no mesmo vértice em que iniciar.

 Reformulação como problema em Teoria de Grafos: pôr um vértice em cada

intersecção

 Caminho de Euler: caminho que visita cada aresta exactamente uma vez

 Problema resolvido por Euler em 1736 e que marca o início da Teoria dos

Grafos

 Circuito de Euler: caminho de Euler que começa e acaba no mesmo vértice

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 3

Condições necessárias e suficientes

 Um grafo não dirigido contém um circuito de Euler sse (1) é conexo e (2) cada vértice tem grau (nº de arestas incidentes) par.

 Um grafo não dirigido contém um caminho de Euler sse (1) é conexo e (2) todos menos dois vértices têm grau par (estes dois vértices serão os vértices de início e fim do caminho).

 Um grafo dirigido contém um circuito de Euler sse (1) é (fortemente) conexo e ( 2 ) cada vértice tem o mesmo grau de entrada e de saída.

 Um grafo dirigido contém um caminho de Euler sse (1) é (fortemente) conexo e (2) todos menos dois vértices têm o mesmo grau de entrada e de saída, e os dois vértices têm graus de entrada e de saída que diferem de 1.

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 4

Método baseado em pesquisa em profundidade

para encontrar um circuito de Euler

 Método:

1. Escolher um vértice qualquer e efectuar uma pesquisa em profundidade

a partir desse vértice (se o grafo satisfizer as condições necessárias e

suficientes, esta pesquisa termina necessariamente no vértice de

partida, formando um circuito, embora não necessariamente de Euler)

2. Enquanto existirem arestas por visitar

2.1 Procurar o primeiro vértice no caminho (circuito) obtido até ao momento

que possua uma aresta não percorrida

2.2 Lançar uma sub-pesquisa em profundidade a partir desse vértice (sem

voltar a percorrer arestas já percorridas)

2.3 Inserir o resultado (circuito) no caminho principal

 Tempo de execução: O(|E| + |V|)

  • Cada vértice e aresta é percorrido uma única vez
  • Cada vez que se percorre um adjacente, avança-se o apontador de

adjacentes (para não voltar a percorrer as mesmas arestas)

  • Usam-se listas ligadas para efectuar inserções em tempo constante

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 7

Algoritmo para achar um percurso óptimo

do carteiro chinês num grafo não dirigido

1. Achar todos os vértices de grau ímpar (com nº ímpar de arestas incidentes)

em G. Seja k o nº (par!) destes vértices. Se k=0, fazer G*=G e saltar para o

passo 6.

2. Achar os caminhos mais curtos (e distâncias mínimas) entre todos os pares

de vértices de grau ímpar em G.

3. Construir um grafo completo G' com os vértices de grau ímpar de G ligados

entre si por arestas de peso igual à distância mínima calculada no passo 2.

4. Encontrar um emparelhamento perfeito de peso mínimo em G' (ver a

seguir). Isto corresponde a emparelhar os vértices de grau ímpar de G, por

forma a minimizar a soma das distâncias entre vértices emparelhados.

5. Para cada par (u, v) no emparelhamento perfeito encontrado, adicionar

pseudo-arestas (arestas paralelas duplicadas) a G ao longo de um caminho

mais curto entre u e v. Seja G* o grafo resultante.

6. Achar um circuito de Euler em G*. Este circuito é um percurso óptimo do

carteiro Chinês.

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 8

Realização do passo 4

 Passo mais complexo

 Um emparelhamento perfeito é um emparelhamento que envolve todos os vértices

 O problema de encontrar um emparelhamento perfeito de peso mínimo pode ser reduzido ao problema de encontrar um emparelhamento de peso máximo num grafo genérico por uma simples mudança de pesos

  • Basta substituir cada peso wij por M+1-wij, em que M é o peso da aresta mais

pesada

  • Sendo o grafo completo e com número par de vértices, um emparelhamento de

peso máximo é necessariamente perfeito

 Um emparelhamento de peso máximo num grafo genérico pode ser encontrado em tempo polinomial - ver referências

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 9

Exemplo (1/4)

v 2

 Grafo G e vértices de grau ímpar (sombreados)

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 10

Exemplo (2/4)

 Distâncias (pelo caminho mais curto) entre todos os pares de vértices de grau ímpar

d(vi,vj) v1 v2 v3 v4 v5 v

v1 - 2 4 7 12 10

v2 - 6 5 13 11

v3 - 9 12 10

v4 - 13 6

v5 - 7

v6 -

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 13

  • Caso de grafos dirigidos

 Modificações ao algoritmo anterior:

1) Identificam-se os vértices com nº diferentes de arestas a entrar e a sair

2) Procuram-se os caminhos mais curtos de vértices que têm défice de saídas para

vértices que têm défices de entradas

3) Constrói-se um grafo bipartido, em que os vértices são distinguidos consoante

têm mais arestas a entrar ou a sair e são replicados consoante a diferença entre

entradas e saídas

4) Procura-se um emparelhamento perfeito de peso mínimo num grafo bipartido

  • Em vez de replicar os vértices no ponto 3, pode-se associar a cada vértice uma multiplicidade (nº de emparelhamentos em que pode participar) e converter o problema directamente para um problema de fluxo máximo de custo mínimo em que algumas arestas têm capacidade superior a 1 -> Ver no exemplo a seguir

 Resolúvel igualmente em tempo polinomial

 Infelizmente, o problema é NP-completo (tempo exponencial) quando se

combinam arestas dirigidas com arestas não dirigidas (grafos mistos)

  • Exemplo: determinar o percurso a seguir pelo camião do lixo, quando algumas

ruas têm sentidos únicos

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 14

  • Exemplo (1/4)

(nº de entradas) – (nº de saídas)

 Grafo G e vértices com diferente nº de entradas e saídas:

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 15

  • Exemplo (2/4)

 Grafo G’ com distâncias de vértices com deficit de saídas para vértices com deficit de entradas, e emparelhamento perfeito de peso mínimo (arestas a traço forte, obtidas resolvendo o problema de fluxo máximo de custo mínimo indicado no slide seguinte):

×××× 2

multiplicidade dupla (pode participar em duas parelhas)

×××× 2

×××× 2

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 16

  • Exemplo (3/4)

 Formulação do problema de emparelhamento óptimo como problema de fluxo máximo de custo mínimo:

s

t

Capacidade = min(multiplicidade(origem),multiplicidade(destino))

custo

capacidade

Capacidade = multiplicidade

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 19

  • Exemplo de aplicação (2/2)

s1 s2 s

0 s

 Resolução do problema do carteiro chinês dirigido:

 Solução final:

  • Caminho de Euler usando etiquetas:

a-a-b-b-a-a-b-restart-b-restart-a-b-restart

  • Strings de teste: aabbaab, b, ab

s4 s

s1 s2 s

s 8

G

G’

G*

(com nº de ordem de visita):

Algoritmos em Grafos: Circuito de Euler e Problema do Carteiro Chinês – CAL, 2010/11 20

Referências e mais informação

 “The Algorithm Design Manual”, Steven S. Skiena, Springer-

Verlag, 1998