• Nenhum resultado encontrado

6. Introdução a GRAFOS E ÁRVORES

6.3. Percursos em Grafos em Geral e em Cliques

• Um passeio (walk) é uma sequência qualquer de arestas (arcos) adjacentes que ligam dois vértices v0 e

vk. (Há uma sequência não nula W=v0e1v1e2v2...ekvk cujos termos são alternadamente vértices e arestas).

(Note que não se proibiu passar mais de 1 vez pelo mesmo vértice). (Exemplo no grafo das 7 pontes de Konigsberg: AcCdAbBbAeD é um passeio desde A até D.)

• Um ciclo é um passeio simples e fechado (o vértice inicial é o mesmo que o vértice final). (Exemplo no mesmo grafo: AcCdAbBbA é um ciclo desde A até A.)

• Um passeio é dito ser elementar se não passa duas vezes pelo mesmo vértice (Exemplo no mesmo grafo: AcCgDfB é um passeio elementar desde A até B.)

• Um passeio é dito ser simples (trilha) se não passa duas vezes pela mesma aresta. (Exemplo no mesmo grafo: AaBfDeAcCgD é uma trilha desde A até D. Note que passou 2 vezes pelos vértices A, D.)

• Em um digrafo, um caminho é um passeio no qual todos os arcos possuem a mesma orientação. (Exemplo no diagrama da definição de digrafo: 5, arco, 11, arco, 10) Um caminho não repete vértices nem arcos. Em um grafo não direcionado, a relação caminho é uma equivalência, pois é reflexiva (caminho(u,u)), simétrica (caminho(u,v) ssse caminho (v,u)) e transitiva (caminho(x,y) e caminho(y,z) implicam

caminho(x,z)).

• Em um digrafo, um circuito é um caminho simples e fechado, retornando a qualquer vértice por onde o comecemos. (Exemplo: no grafo ao lado, um circuito passará pelos vértices 1,2,4,3 e voltará ao vértice 1, sempre seguindo os arcos na direção correta.)

• Um grafo conectado G(V,A) é dito ser euleriano se existe um ciclo que contém todas as arestas de G.

Exemplo1: Cada vértice do grafo ao lado tem um grau par, portanto este é um grafo euleriano; realmente, seguindo as arestas em ordem alfabética obtém-se um circuito/ciclo euleriano.

Exemplo2: No clique k5 do Teorema de Ore (abaixo), se numerarmos os vértices como 1,2,3,4,5 no sentido dos ponteiros do relógio, o ciclo euleriano será 1,2,3,4,5,1,3,5,2,4,1.)

• Um grafo conectado e não-euleriano, G, é semi-euleriano se existe um passeio simples contendo todas as arestas de G. No grafo ao lado, se seguirmos as arestas na ordem 1,2,3,4,5,6,7, teremos passado por todas as arestas, portanto o grafo é semi-euleriano. Mas não fizemos um circuito, pois passamos mais de 1 vez em alguns vértices. Na verdade, o grafo não é euleriano.

• Teorema (Euler 1736) (pronuncie como “Óilêr”): Um grafo conectado G é euleriano se e somente se o grau de cada um de seus vértices é par.

• Corolário: Um grafo conectado G é euleriano se e somente se ele pode ser decomposto em ciclos. • Corolário II: Um grafo conectado G é semi-euleriano se e somente se ele possui exatamente 2 vértices de grau ímpar.

• Teorema: Um grafo completo de n vértices tem (n-1)!/s circuitos hamiltonianos.

• Um grafo G(V,A) é dito ser hamiltoniano se existe um ciclo que passa exatamente uma vez em cada um dos vértices de G. (O ciclo é uma sucessão de arestas adjacentes que visita todos os vértices do grafo uma só vez, sendo o último vértice visitado adjacente ao primeiro.)

Todo grafo completo (clique) que contém mais de 2 vértices é hamiltoniano.

Algoritmos fáceis para determinar o circuito hamiltoniano de menor custo num grafo ponderado (problema do caixeiro viajante, TSM, TSP):

• Alg. Força Bruta: Ache todos os possíveis circuitos Hamiltonianos no grafo, encontre o peso total de cada um, forme uma lista de todos os circuitos e seus pesos totais, e escolha o melhor. Exato, mas leva um tempo impraticável.

• Alg. Cidade (ou vizinho) Mais Próxima: O vendedor escolhe um vértice de partida, e forma um circuito que começa e termina nele e sempre, à medida que visitava vértices, sempre escolheu a aresta de menor peso que saia do vértice que estivesse em foco, tendo o cuidado de nunca visitar um vértice duas vezes até que tenha visitado todos eles. Isso é rápido e fácil, e geralmente dá uma solução que é muito boa, embora não garanta que é a ótima.

• Alg. Arestas Ordenadas (de menor a maior): nesta ordem, "agarre" as arestas até que você tenha um circuito completo. A vantagem é que você pegará sempre a aresta com o menor peso que ainda não tinha sido agarrada, tendo cuidado para que o agarrar não irá formar um circuito que não passa por todos os vértices ou causará um vértice ser tocado por uma terceira aresta. Como o algoritmo de vizinho mais próximo, isso é rápido e fácil, e geralmente dá uma solução que é muito boa, embora não garanta que é a ótima.

• Um grafo G(V,A) é dito ser semi-hamiltoniano se não é hamiltoniano e existe um passeio que passa exatamente uma vez em cada um dos vértices de G.

• Teorema (Dirac 1952): Uma condição suficiente, mas não necessária, para que um grafo simples G com n (>2) vértices seja hamiltoniano é que o grau de todo vértice de g seja  n/2.

• Teorema (Ore 1960): Uma condição suficiente, mas não necessária, para que um grafo simples G com n (>2) vértices seja hamiltoniano é que a soma dos graus de cada par de vértices não adjacentes seja no mínimo n.

(Exemplo: a condição é satisfeita no clique k5 ao lado. E, se numerarmos os vértices como 1,2,3,4,5 no sentido dos ponteiros do relógio, o ciclo será 1,2,3,4,5,1.)

• O problema do caminho mais curto: consiste na minimização do custo total de travessia de um grafo ponderado (com custos associados a cada aresta) desde um vértice origem até um vértice destino. Se for oferecida como optativa a disciplina Análise (da complexidade) e Projeto de Algoritmos (do Bacharelado em Ciência da Computação, da UFPB), você poderá aprender e implementar algoritmos (tais como o de Dijkstra e o de Bellman-Ford) que resolvem o problema de forma muito

eficiente.

(Exemplo: ao lado, o caminho mínimo entre D e E não é D-E, mas sim D- F-E, com uma custo total de 6+4 = 14.)

• O problema do carteiro chinês: consiste em encontrar um caminho mais curto ou um circuito fechado que, pelo menos uma vez, visite cada aresta de um grafo conectado. (Sim, quando o grafo possui um circuito euleriano (um passeio fechado que abrange toda aresta uma vez), esse circuito é uma solução ótima.)

comprimentos: (1,2) = 3; (1,3) = 12; (1,4) = 10; (2,3) = 4; (3,4) = 5. Desenhe o grafo. O carteiro precisa sair do vértice 1 e voltar a ele no final, passando por cada arco pelo menos 1 vez. Qual o passeio de menor comprimento total? Resposta: passar nos vértices 1,2,3,4,1,2,3,2,1, percorrendo 12+5+10+3+4+4+3 = 41 unidades de comprimento.

• O problema do caixeiro viajante: (TSM = Travelling SalesMan; TSP = Travelling Sales Person) consiste na procura de um circuito que possua o menor comprimento total, começando numa cidade qualquer, entre várias, visitando cada cidade precisamente uma vez e regressando à cidade inicial. Ver algoritmo

aproximado, acima.

EXERCÍCIOS: Faça os exercícios 1 até 13, que estão ao final da seção 6.4.