Vous êtes sur la page 1sur 18

AULA

Roteamentos
... META Introduzir alguns problemas de roteamento. OBJETIVOS Ao nal da aula o aluno dever ser capaz de: Distinguir circuito euleriano e ciclo hamiltoniano; Obter um circuito euleriano de um grafo euleriano; Caracterizar grafos bipartidos; Obter um caminho mais curto entre vrtices de grafos conexos. PR-REQUISITOS Conceitos elementares da teoria dos grafos (aula 7).

AULA

Roteamentos

8.1

Introduo

Prezado aluno, nesta aula apresentaremos alguns problemas clssicos de roteamento. So eles o pro-blema do carteiro chins, o problema do caixeiro viajante e o problema do caminho mais curto. Nela aprenderemos a diferena entre passeio euleriano e caminho hamiltoniano. Criaremos um algoritmo que obtm, quando existir, um circuito euleriano num grafo. Caracterizaremos grafos

bipartidos como sendo aqueles que no possuem ciclos mpares, e utilizaremos este resultado para mostrar que grafos bipartidos conexos com nmero mpar de vrtices no podem ser hamiltonianos. Para nalizar, resolveremos, aplicando o algoritmo de

Dijkstra, um problema muito comum: qual o caminho mais curto que podemos percorrer partindo do ponto A do mapa abaixo e chegando no ponto B?

8.2

Circuito Euleriano

Os passeios eulerianos so assim designados pela sua relao com o problema das pontes de Knigsberg que foi resolvido por Euler.

136

AULA
Matemtica Discreta Denio 8.1. Um passeio dito euleriano se for um passeio que contm cada aresta uma nica vez. Um passeio euleriano fechado dito circuito euleriano. Se G um grafo que admite um circuito euleriano, ento G dito um grafo euleriano. O problema das pontes de Knigsberg saber se o correspondente grafo possui ou no algum circuito euleriano. Um problema similar a este o problema do carteiro chins. Neste problema, as arestas do grafo representam trechos de ruas que o carteiro deve percorrer para entregar cartas. Admitindo que o carteiro procure realizar seu trabalho dispendendo o menor esforo possvel, e que seu esforo seja proporcional distncia percorrida, temos um problema de otimizao: encontrar um circuito que contenha todas arestas do grafo e cuja distncia total (a soma das distncias das arestas no circuito) seja mnima. Se o grafo for euleriano, a resposta trivial, pois qualquer circuito euleriano fornece um procedimento simples para a construo de tal circuito. Se o grafo no for euleriano, o problema torna-se bem mais complexo, embora existam mtodos ecientes para se achar uma soluo tima. A resposta geral para esse tipo de problema dada pelo seguinte teorema: Teorema 8.1 (Euler). O grafo conexo G euleriano se, e somente se, os graus de todos os vrtices de G so pares. Demonstrao: Suponha que o grafo G seja euleriano, isto , possui circuito euleriano. Observe que os graus dos vrtices podem ser calculados enquanto percorremos o circuito euleriano, pois este contm todas as arestas. Para tanto, comeamos em um vrtice qualquer e percorremos o circuito, incrementando de uma unidade

137

AULA

Roteamentos o contador associado a cada vrtice (inicializado com valor zero) cada vez que samos ou entramos do vrtice. No nal do percurso, os contadores contero os graus dos vrtices respectivos. Como se trata de um circuito, a cada entrada corresponde uma sada, portanto os graus dos vrtices sero pares. Reciprocamente, suponha que todos os vrtices de G tenham grau par. Tome um vrtice qualquer de G, digamos o vrtice i, e comece a percorrer o grafo a partir dele, sem repetir arestas, at no conseguir mais prosseguir, isto , at alcanar um vrtice tal que todas as arestas incidentes no vrtice j tenham sido percorridos. Como todos os vrtices tm grau par, este vrtice tem que ser o vrtice i. Se o circuito C assim construdo contiver todas as arestas, a demonstrao estar concluda. Suponha, no entanto, que G contm uma aresta, por exemplo a aresta e, que no pertence ao circuito. Como G conexo, existe um caminho entre algum vrtice do circuito e alguma das extremidades da aresta e, por exemplo entre j, vrtice do circuito, e k, extremidade de e. Sem perda de generalidade, este caminho no contm arestas de C. Comece a percorrer o grafo a partir de j continuando livremente, sem, no entanto, repetir arestas ou utilizar arestas de C. Como C um circuito, mesmo "retirando"as arestas de C do grafo, os vrtices continuam a ter grau par, portanto esta nova incurso pelo grafo s pode parar em j, completando um novo circuito, C. Note agora que podemos combinar os dois circuitos de modo a formar um s que contenha todas as arestas de C e C. Basta percorrer C comeando em j (e no em i) e quando voltar a j percorrer C em seguida. Em resumo, temos um procedimento que nos permite: (i) construir um circuito C, sem repetio de arestas, (ii) se alguma

138

AULA
Matemtica Discreta aresta e de G no pertence a C, obtemos um novo circuito, tambm sem repetio de arestas, que contm as arestas de C e o arco e. Como o nmero de arestas de G nito, a repetio sucessiva de (ii) termina por produzir um circuito que contm todas as arestas de G, sem repetio, ou seja, um circuito euleriano. Exemplo 8.1 (Obtendo circuito euleriano). Aplique o algoritmo descrito na demonstrao para construir o circuito euleriano do grafo abaixo:

Soluo: A gura seguinte mostra o primeiro circuito obtido (1, 2, 7, 6, 3, 2, 10, 1) e mostra (tracejada) a aresta e que no pertence ao circuito. Podemos escolher ligar esta aresta ao circuito

pelas arestas f ou g. Escolhendo a primeira e comeando a partir do vrtice 10, obtemos o circuito (10, 1, 2, 7, 6, 3, 2, 10, 9, 8, 7, 10).

139

AULA

Roteamentos

A situao atual indicada pela gura onde indicamos (em tracejado) uma aresta que no pertence ao circuito e . Como uma das extremidades, o vrtice 3, j pertence ao circuito, o passeio que liga a aresta ao circuito o prprio vrtice 3. Comeando no vrtice 3, obtemos o circuito euleriano (3, 2, 10, 9, 8, 7, 10, 1, 2, 7, 6, 3, 4, 5, 3).

8.3

Grafos Bipartidos

Denio 8.2. Um grafo dito bipartido se seu conjunto de vrtices V podem ser particionados em dois conjuntos P, B de tal forma que toda aresta do grafo ligue um vrtice de P a um vrtice de B. A partio V = P B chamada bipartio do conjunto de vrtices. Podemos interpretar P e B como preto e branco, veja que o grafo bipartido quando os vrtices podem ser coloridos usando duas cores tal que nenhuma aresta ligue vrtices de mesma cor. Por essa razo, grafos bipartidos so algumas vezes chamados bicromticos. Exemplo 8.2 (Grafos Bipartidos). Cada vrtice est colorido de branco ou de preto. Para vericar que os grafos so bipartidos, note que cada aresta liga um vrtice preto a um vrtice branco.

140

AULA
Matemtica Discreta

Teorema 8.2. Um grafo conexo bipartido se, e somente se, no contm ciclo de comprimento mpar. Demonstrao: Se um grafo G contm um ciclo mpar, ento este ciclo, e portanto o prprio G, no pode ser bipartido. Reciprocamente, suponha que G no contm ciclo de comprimento mpar; devemos mostrar como colorir seus vrtices de P e B. Escolha qualquer vrtice v de G, e a partio V como P B onde: P = {u V : caminho mais curto de u para v tem comprimento par.} B = {u V : caminho mais curto de u para v tem comprimento mpar.} Temos v P desde que 0 par; temos que checar se nenhuma aresta de G tem ambas extremidades em P ou ambas em B. Com efeito, suponha que exista uma aresta xy com x P e y P . Ento, denotando o comprimento do menor caminho do vrtice v1 para o vrtice v2 por d(v1 , v2 ), temos d(v, x) = 2m e d(v, y) = 2n para alguns inteiros m, n. Mas existe um caminho de v para y via x de comprimento 2m + 1, ento 2n 2m + 1. Similarmente, 2m 2n+1, ento m = n. Denote o caminho mais curto de v para x por c(x) e de v para y de c(y). Desde que m = n, c(x) e c(y) tm comprimento igual. Seja w o ltimo vrtice em c(x) que tambm

141

AULA

Roteamentos est em c(y) (possivelmente w = v). Ento a parte de c(x) de w para x e a parte de c(y) de w para y deve ter comprimento igual, e desde que eles tm apenas w em comum, eles devem, com a aresta xy, formar um ciclo mpar. Mas G no possui circuito mpar, ento a suposio feita sobre a aresta xy (que x, y B) falsa. Ento no existe aresta com ambos vrtices em P . Similarmente no existe aresta com ambos vrtices em B. Denio 8.3. Um grafo bipartido com conjunto de vrtices V = P B completo se todo vrtice de P estiver ligado a todos os vrtices de B. Se N (P ) = m e N (B) = n, o grafo bipartido completo denotado por Km,n ou Kn,m . O grafo de fornecimento de servios no exemplo (7.7) pode ser denotado por K3,3 . Claramente, Km,n tem m + n vrtices e mn arestas; m vrtices tm grau n e n vrtices tm grau m. Os grafos completos Kn e bipartidos completos Kn,m desempenham um papel importante na teoria dos grafos, principalmente no estudo de planaridade como veremos na prxima aula.

8.4

Ciclo Hamiltoniano

A discusso anterior sobre grafos eulerianos enfatiza travessias de arestas; agora nos concentramos na visita aos vrtices. Denio 8.4. Um ciclo hamiltoniano em um grafo G um caminho fechado que visita todos vrtices de G exatamente uma vez. Se G admite um ciclo hamiltoniano, ento G chamado um grafo hamiltoniano. Este problema de obter um ciclo hamiltoniano muitas vezes

142

AULA
Matemtica Discreta

exemplicado pelo problema do caixeiro viajante. Neste problema, os vrtices so cidades que devem ser visitadas pelo caixeiro e as arestas so as vias que ligam estas cidades. Pretende-se encontrar um percurso tal que o caixeiro viajante visite vrias cidades e volte ao ponto de partida, quando possvel, percorrendo a menor distncia possvel.

Figura 8.1:

(a) Grafo hamiltoniano que no euleriano. (b) Grafo euleriano que

no hamiltoniano.

Note que um circuito euleriano atravessa cada aresta exatamente uma vez, mas pode repetir vrtices, enquanto que um ciclo hamiltoniano visita cada vrtice exatamente uma vez. Abaixo vemos exemplos de grafo hamiltoniano que no euleriano e viceversa.

143

AULA

Roteamentos Exemplo 8.3. O grafo octaedral hamiltoniano.

Soluo: Tome o ciclo (1,2,3,4,5,6,1). Exemplo 8.4. O grafo abaixo no hamiltoniano.

Soluo: A forma mais fcil de ver isso notar que possuindo 9 vrtices se fosse hamiltoniano, deveria conter um ciclo de comprimento 9. Mas, sendo um grafo bipartido, ele contm apenas ciclos de comprimento par. Apesar de ser claro que apenas grafos conexos possam ser hamiltonianos; e ainda que, por argumento anlogo ao exemplo anterior, todo grafo bipartido conexo com nmero mpar de vrtices no pode ser hamiltoniano; no existe um critrio simples para nos dizer se o grafo ou no hamiltoniano como existe para grafos eulerianos.

144

AULA
Matemtica Discreta

8.5

Problema do caminho mais curto

A cada aresta e de G seja w(e) um nmero real associado a e, chamado seu peso. Ento G, junto com esses pesos sobre suas arestas, chamado grafo com pesos. Grafos com pesos ocorrem frequentemente em aplicaes de teoria dos grafos. Num grafo de comunicao, por exemplo, ele pode representar o custo de construo ou manuteno de vrios links de comunicao. Se H um subgrafo de um grafo com pesos, o peso w(H) de H a soma dos pesos
eE(H) w(e)

sobre suas arestas. Muitos

problemas de otimizao buscam encontrar, num grafo com pesos, um subgrafo com peso mximo (ou mnimo). Um desses problemas o problema do caminho mais curto: dada um mapa da malha rodoviria que liga vrias cidades, determine a rota mais curta entre duas cidades especcas naquela malha. Aqui precisamos encontrar, num grafo com pesos, um caminho de peso mnimo, conectando dois vrtices especcos u0 e v0 ; os pesos representam as distncias entre as cidades e so, portanto, no negativos. O caminho indicado no grafo da gura seguinte um u0 v0 -caminho de peso mnimo. Agora apresentaremos um algoritmo para resolver o problema do caminho mais curto. Para ser mais claro, nos referimos ao peso de um caminho como seu comprimento; similarmente, o peso mnimo de um uv-caminho ser chamado a distncia entre u e v e denotada por d(u, v). Essas denies coincidem com as noes usuais de comprimento e distncia quando todos os pesos so iguais a um. Assumiremos que G um grafo simples e que os pesos so

145

AULA

Roteamentos

Figura 8.2:

u0 v0 -caminho de peso mnimo (13).

positivos. Se uma aresta uv E(G), adotaremos w(uv) = . O / algoritmo que ser descrito foi descoberto por Dijkstra (1959) e, independentemente, por Whiting e Hillier (1960). Ele no encontra simplesmente o menor u0 v0 -caminho, mas os menores caminhos de u0 para todos os outros vrtices de G. A idia bsica a seguinte. Suponha que S seja um subconjunto prprio de V tal que u0 S, e denote S = V \ S. Se P = u0 . . . uv um menor caminho de u0 para S ento d(u0 , v) = d(u0 , u) + w(uv) e a distncia de u0 para S dada pela frmula d(u0 , S) = minuS,vS {d(u0 , u) + w(uv)} (8.6)

Essa frmula a base do algoritmo de Dijkstra. Iniciando com um conjunto S0 = {u0 }, uma sequncia crescente S0 , S1 , . . . , Sv1 de subconjuntos de V construda de tal forma que, no nal do estgio i, os menores caminhos de u0 para todos vrtices de Si so conhecidos.

146

AULA
Matemtica Discreta O primeiro passo determinar um vrtice mais prximo a u0 . Isso obtido calculando-se d(u0 , S0 ) e selecionando um vrtice u1 S0 tal que d(u0 , u1 ) = d(u0 , S0 ). d(u0 , S0 ) = minvS0 {w(u0 v)} portanto d(u0 , S0 ) facilmente calculado. Agora colocamos S1 = {u0 , u1 } e P1 denota o caminho u0 u1 ; esse claramente um u0 u1 caminho mais curto. Em geral, se o conjunto Sk = {u0 , u1 , . . . , uk }, ento os caminhos mais curtos correspondentes P1 , P2 , . . . , Pk j foram determinados e calculamos d(u0 , Sk ) usando (8.6) e selecionamos um vrtice uk+1 Sk tal que d(u0 , uk+1 ) = d(u0 , Sk ). Por (8.6), d(u0 , uk+1 ) = d(u0 , uj ) + w(uj uk+1 ) para algum j k; ns pegamos um u0 uk+1 -caminho mais curto adcionando a aresta uj uk+1 ao caminho Pj . Em resumo, o algoritmo de Dijkstra o seguinte: 1. Faa l(u0 ) = 0, l(v) = , para v = u0 , S0 = {u0 }, i = 0. 2. Para cada v Si , troque l(v) por min{l(v), l(ui ) + w(ui v)}. Calcule minvSi {l(v)} e denote por ui+1 um vrtice para o qual esse mnimo atingido. Faa Si+1 = Si {ui+1 }. 3. Se i = |V (G)| 1, pare. Se no, troque i por i + 1 e volte ao passo 2.

147

AULA

Roteamentos Exemplo 8.5 (Algoritmo de Dijkstra). Utilize o algoritmo de Dijkstra para determinar um menor caminho de u0 para os vrtices restantes do grafo abaixo.

Soluo: Basta seguir os seis passos a seguir.

8.6

Concluso

Nesta aula, notamos que enquanto a tarefa de determinar se um grafo euleriano simples, no ocorre o mesmo para grafos hamiltonianos. Caracterizamos grafos bipartidos como aqueles que no

148

AULA
Matemtica Discreta contm ciclo de comprimento mpar. E para nalizar, fomos apresentados ao algoritmo de Dijkstra para resolver o problema do caminho mais curto entre dois vrtices de um grafo. ... ...

RESUMO
... Um passeio euleriano aquele que contm cada aresta uma nica vez. Um circuito euleriano um passeio euleriano fechado. Um grafo euleriano se admite circuito euleriano. O grafo conexo G euleriano se, e somente se, os graus de todos os vrtices de G so pares. Um grafo conexo bipartido se, e somente se, no contm ciclo de comprimento mpar. Um ciclo hamiltoniano em um grafo G um caminho fechado que visita todos vrtices de G exatamente uma vez. Se G admite um ciclo hamiltoniano, ento G chamado um grafo hamiltoniano. Algoritmo de Dijkstra 1. Faa l(u0 ) = 0, l(v) = , para v = u0 , S0 = {u0 }, i = 0. 2. Para cada v Si , troque l(v) por min{l(v), l(ui ) + w(ui v)}. Calcule minvSi {l(v)} e denote por ui+1 um vrtice para o qual esse mnimo atingido. Faa Si+1 = Si {ui+1 }. 3. Se i = |V (G)| 1, pare. Se no, troque i por i + 1 e volte ao passo 2. ...

149

AULA

Roteamentos ...

PRXIMA AULA
... Na prxima aula, esturaremos o problema de planaridade de grafos. Surgindo qualquer dvida conceitual, faa uma nova leitura da aula 7. ... ...

ATIVIDADES
... ATIVIDADE 8.1. Um passeio euleriano um passeio que contm todas arestas do grafo, mas no fechado. Um grafo no euleriano que contm um passeio euleriano dito semi-euleriano. Mostre que um grafo G semi-euleriano se, e somente se, contm exatamente dois vrtices de grau mpar. ATIVIDADE 8.2. Para cada um dos grafos abaixo, determine se hamiltoniano, euleriano ou semi-euleriano.

150

AULA
Matemtica Discreta ATIVIDADE 8.3. As distncias entre cinco cidades dada na tabela abaixo. Encontre o caminho mais curto entre elas. A A B C D E 0 10 11 13 9 B 10 0 8 3 6 C 11 8 0 8 13 D 13 3 8 0 8 E 9 6 13 8 0

ATIVIDADE 8.4. Uma companhia area opera em seis cidades C1 , . . . , C6 . O custo para um vo direto da cidade Ci cidade Cj dado na entrada (i, j) da matriz a seguir, onde ( indica que no h vo direto entre aquelas duas cidades): 0 50 40 25 10 50 0 15 20 25 15 0 10 20 40 20 10 0 10 25 25 20 10 0 55 25 25 55 0 10

A compania est interessada em calcular uma tabela com as rotas mais baratas entre duas cidades. Prepare tal tabela. ATIVIDADE 8.5. Um lobo, uma cabra e um repolho esto numa margem do rio. Um barqueiro deseja atravessar o rio com eles, mas, desde que seu barco muito pequeno, ele pode levar apenas um deles de cada vez. Por razes bvias, nem o lobo e a cabra, nem a cabra e o repolho podem ser deixados juntos. Como o barqueiro poder atravessar o rio com eles?

151

AULA

Roteamentos ATIVIDADE 8.6. Dois homens tm uma jarra de 8 litros cheia de vinho e duas jarras vazias de 3 e 5 litros, respectivamente. Qual a forma mais simples de dividir o vinho igualmente entre os dois homens utilizando as trs jarras e sem desperdiar nenhum litro de vinho? ... ...

REFERNCIAS
... ANDERSON, I. A First Course in Discrete Mathematics. Springer: Londres, 2001. BONDY, J.A., MURTY, U.S.R. Graph Theory with Applications. Elsevier: Nova Iorque, 1976. SANTOS, J.P.O., et al. Introduo Anlise Combinatria. Moderna: Rio de Janeiro, 2007.

152