• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Cap06 grafos
 

Cap06 grafos

on

  • 2,759 views

 

Statistics

Views

Total Views
2,759
Views on SlideShare
2,759
Embed Views
0

Actions

Likes
0
Downloads
90
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Cap06 grafos Cap06 grafos Document Transcript

    • Cap´tulo 6 ı Teoria dos Grafos Edmilson Marmo Moreira Universidade Federal de Itajub´ - UNIFEI a Instituto de Engenharia de Sistemas e Tecnologias da Informa¸˜o - IESTI ca “Os homens s˜o como os vinhos: a idade azeda os maus e apura os bons”. a C´ ıcero 1 Considera¸˜es Iniciais co No s´culo XVIII, os cidad˜os da cidade de K¨nigsberg (uma cidade antiga da Pr´ssia, e a o u mais tarde chamada de Kaliningrado, na R´ssia) tinham um pequeno problema. O rio u que passava pela cidade formava uma ilha. Diversas pontes atravessavam o rio, como mostra a figura 1. O problema era determinar se uma pessoa poderia passear pela cidade passando apenas uma vez por cada ponte. Figura 1: Ilustra¸˜o das pontes de K¨nigsberg ca o O matem´tico Leonhard Euler (1707-1783) ficou curioso com esta situa¸ao e resolveu o a c˜ problema geral apresentando a solu¸ao em um artigo publicado em 1736. A id´ia de Euler c˜ e foi simples. Primeiro, ele representou o mapa de K¨nigsberg atrav´s de um diagrama o e como o da figura 2. Os pontos b e c representam as duas bandas do rio, os pontos a e d representam as duas ilhas e os 7 arcos conectando estes pontos representam as 7 pontes. Euler pˆde ent˜o caracterizar o problema das pontes de K¨nigsberg, como ´ o a o e conhecido hoje, da seguinte forma: ´ poss´ e ıvel, partindo de um dos quatro pontos a, b, c ou d, percorrer todos os arcos do diagrama uma unica vez e retornar ao ponto de partida? ´ 1
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 2 a ı c vv 89:; ?>=< vvv vvv vvv vvv a 89:; ?>=< 89:; ?>=< d ss ss ss ss ss ss 89:; ?>=< ss b Figura 2: O problema das pontes de K¨nigsberg representado por um Grafo o Euler mostrou que a resposta para esta quest˜o ´: “n˜o” pela raz˜o que se segue. a e a a Suponha que ´ poss´ realizar a tarefa descrita pelo problema. Ent˜o, qualquer pessoa e ıvel a que percorrer o caminho deve entrar e sair de cada um dos pontos a, b, c e d um n´mero u par de vezes. Se a viagem come¸a no ponto a, por exemplo, ent˜o cada vez que a pessoa entrar em c a um dos pontos b, c e d, ela deve tamb´m deix´-lo. Desta forma, o n´mero de vezes que e a u ela entra e sai de cada ponto b, c e d deve ser par. O mesmo ´ verdade para o ponto de e partida a, mas, neste caso, deve-se tamb´m incluir o ponto de partida original de a e o e ponto final em a. Por raz˜es idˆnticas, a situa¸ao se repetir´ utilizando os pontos b, c e d o e c˜ a como ponto de partida. Portanto, uma vez que a pessoa deve entrar e sair de cada um destes quatro pontos percorrendo arcos diferentes e deve utilizar todas as conex˜es entre os pontos para finalizar o a tarefa, deve existir um n´mero par de arcos conectados em cada um dos pontos a, b, c u e d. Como pode ser observado na figura 2, esta situa¸ao n˜o ocorre. c˜ a O diagrama da figura 2 ´ chamado de Grafo e o artigo de Euler foi o marco inicial de e um novo ramo da matem´tica conhecido como Teoria dos Grafos. A teoria dos grafos a ´ uma das ´reas de maior aplica¸ao da matem´tica, sendo usada na computa¸˜o, ciˆncia, e a c˜ a ca e engenharia, qu´ ımica, biologia, economia, pesquisa operacional, ling¨´ uıstica, etc. 2 Conceitos B´sicos a Intuitivamente, um grafo ´ uma cole¸ao de pontos e um conjunto de arcos que conectam e c˜ pares destes pontos. De uma forma geral, permite-se mais de um arco conectando os mesmos pares de pontos, conforme ilustra¸ao da figura 3. c˜ A forma como o grafo ´ representado n˜o ´ importante. O que ´ significativo s˜o os e a e e a pontos do grafo e o n´mero de arcos entre cada par de pontos (incluindo loops). Por u exemplo, os diagramas das figuras 4 e 5 representam exatamente o mesmo grafo. Por causa disto, as caracter´ ısticas importantes do grafo da figura 3 podem ser descritas atrav´s do conjunto e V = {v1 , v2 , . . . , v5 }
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 3 a ı v2 ww GFED @ABC www www www www v1 GFED @ABC v3 GFED @ABC v5 GFED @ABC v4 GFED @ABC Figura 3: Exemplo de grafo com v´rios arcos conectando os mesmo pontos a v1 €€ GFED @ABC HH €€€ HH €€€ v1 GFED @ABC v2 GFED @ABC €€€ HH €€€ HH €€€ HH v4 GFED @ABC GFED @ABCv3 HH nn nnn HH nnn HH nnn nnn nnn v4 GFED @ABC v3 GFED @ABC v2 GFED @ABC Figura 4: Exemplo de grafo Figura 5: O mesmo grafo da Fig. 4 de seus pontos, e do conjunto E = {{v1 , v2 }, {v1 , v2 }, {v2 , v3 }, {v3 }, {v3 , v4 }, {v3 , v4 }, {v3 , v4 }, {v4 }, {v4 }} de seus arcos. Os elementos do conjunto V s˜o chamados de v´rtices ou n´s do grafo e os elementos a e o do conjunto E s˜o chamados de arestas do grafo. Um arco da forma {v} ´ chamado de a e loop de {v}. Defini¸˜o 2.1 (Grafo) Um grafo G = (V, A, g) ´ uma tripla ordenada onde: ca e V = um conjunto n˜o-vazio de v´rtices (n´s); a e o A = um conjunto de arestas (arcos); g = uma fun¸˜o que associa cada aresta a um par n˜o ordenado x-y de v´rtices chamados ca a e de extremos de a. Sendo e uma aresta e v, w dois v´rtices, escreve-se e = {v, w} ou e = {w, v} dizendo- e se, ent˜o, que e ´ uma aresta entre v e w ou que a aresta e liga os v´rtices v e w que, por a e e este fato, se dizem adjacentes.
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 4 a ı 2.1 Terminologia Duas arestas que tenham os mesmos extremos s˜o chamadas de arestas paralelas ou a arestas m´ ltiplas. As arestas a1 e a2 da Fig. 6 s˜o paralelas. u a a3 89:; ?>=< a2 2b    bb    bba4   bb    a1 bb    89:; ?>=< 89:; ?>=< 89:; ?>=< 89:; ?>=< 1 a5 3 a6 4 5 Figura 6: Exemplo de grafo com arestas rotuladas Se entre dois v´rtices existir mais que uma aresta ent˜o, se for necess´rio distin¸˜es, e a a co o grafo correspondente toma o nome de multigrafo. Grafos que n˜o possuem loops nem a arestas paralelas s˜o denominados grafos simples. Um v´rtice isolado n˜o ´ adjacente a e a e a qualquer outro v´rtice; na Fig. 6 o n´ 5 ´ um v´rtice isolado. O grau de um v´rtice ´ o e o e e e e n´mero de arestas que o tem como ponto extremo. Na Fig. 6, os v´rtices 1 e 3 possuem u e grau 3, o v´rtice 2 tem grau 5, o v´rtice 4 tem grau 1 e o v´rtice 5 possui grau 0. Um grafo e e e G ´ regular de grau k ou k-regular se todo v´rtice tem grau k. Em outras palavras, e e um grafo ´ regular se todo v´rtice tem o mesmo grau. O grafo conexo 0-regular ´ o grafo e e e trivial com um v´rtice e nenhuma aresta. O grafo conexo 1-regular ´ o grafo com dois e e v´rtices e uma aresta que os conecta, e assim por diante. A ordem de um grafo G ´ dada e e pela cardinalidade do conjunto de v´rtices, ou seja, pelo n´mero de v´rtices de G. e u e Como a fun¸ao g, que relaciona cada aresta a seus extremos, ´ entendida como uma c˜ e fun¸˜o propriamente dita, cada aresta tem um unico par de pontos extremos. Se g for ca ´ uma fun¸ao injetiva, ent˜o haver´ apenas uma aresta associada a cada par de v´rtices e c˜ a a e o grafo n˜o ter´ arestas paralelas. a a Um grafo completo ´ aquele no qual todos os v´rtices distintos s˜o adjacentes. e e a Neste caso, g ´ quase uma fun¸˜o sobrejetora – todo par x − y de v´rtices distintos est´ e ca e a no conjunto imagem de g –, mas n˜o h´ um la¸o em cada v´rtice, de forma que pares do a a c e tipo x − x n˜o devem ter imagem. O grafo completo com n v´rtices ´ denotado por Kn . a e e Teorema 2.2 (N´ mero de arestas de um grafo Kn ) O n´mero de arestas em um u u grafo completo ´ n(n − 1)/2. e Demonstra¸˜o: A prova ´ realizada por indu¸ao matem´tica. Supondo Gn um grafo ca e c˜ a que cont´m n v´rtices. O caso base ´ G1 . Neste caso, como existe somente um e e e v´rtice, n˜o existem arestas, pois os grafos completos s˜o grafos simples e, portanto, e a a n˜o possuem la¸os. Desta forma, verifica-se que n(n − 1)/2 = 0. a c Supondo que a hip´tese ´ verdadeira para Gn , onde n ≥ 1. Seja, agora, o grafo o e ´ Gn+1 . E necess´rio mostrar que o n´mero de v´rtices neste grafo ´ n(n + 1)/2. a u e e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 5 a ı Fazendo vn+1 o v´rtice adicional que se encontra em Gn+1 e n˜o em Gn . O n´mero e a u m´ximo de arestas no grafo Gn+1 ´ igual ao n´mero m´ximo no grafo Gn mais todas a e u a as liga¸oes poss´ c˜ ıveis entre vn+1 e cada v´rtice de Gn . Como esse n´mero de liga¸˜es e u co ´ igual ao n´mero de v´rtices em Gn , tem-se: e u e n(n − 1) n(n − 1) + 2n n2 + n n(n + 1) N´mero m´ximo = u a +n= = = 2 2 2 2 Isso prova o teorema. A figura 7 apresenta alguns exemplos de grafos completos. • •QQ •ppp xx •  QQQ pp pp xxx  QQ pp xxx QQ p xp •  QQ x xx ppp  xx pp  QQ xx pp  xx • • • • • K1 K2 K3 K4 Figura 7: Exemplos de Grafos Completos Um subgrafo de um grafo consiste em um conjunto de v´rtices e um conjunto de e arestas que s˜o subconjuntos dos conjuntos de v´rtices e arestas originais, respectivamente, a e nos quais os extremos de qualquer aresta precisam ser os mesmos que no grafo original. Em outras palavras, ´ um grafo obtido apagando-se parte do grafo original e deixando o e restante sem altera¸oes. Um tipo especial de subgrafo ´ denominado clique. Um clique c˜ e ´ um subgrafo que ´ completo. As figuras 8 e 9 mostram subgrafos da figura 6. O grafo e e na figura 8 ´ simples e tamb´m completo. e e a3 89:; ?>=< 89:; ?>=< 2b a2 2   bb      bba4       bb       a1 bb    a1       89:; ?>=< 89:; ?>=< 89:; ?>=< 89:; ?>=< 1 a5 3 1 a5 3 Figura 8: Um subgrafo do grafo da Figura 9: Outro subgrafo do grafo da figura 6 figura 6 Um caminho de um v´rtice n0 a um v´rtice nk ´ uma seq¨ˆncia: e e e ue n0 , a0 , n1 , a1 , . . . , nk−1 , ak − a, nk de v´rtices e arestas onde, para cada i, os extremos da aresta ai s˜o ni − ni+1 . No grafo da e a figura 6, um caminho do v´rtice 2 ao v´rtice 4 consiste na seq¨ˆncia 2, a1 , 1, a2 , 2, a4 , 3, a6 , 4. e e ue
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 6 a ı O comprimento de um caminho ´ o n´mero de arestas que ele cont´m. Se uma aresta e u e for usada mais de uma vez, ela deve ser contada tantas vezes quantas for usada. O com- primento do caminho que acabou de ser descrito entre os n´s 2 e 4 ´ 4. Um grafo ´ o e e dito conexo se houver um caminho entre quaisquer dois v´rtices. Os grafos das figuras e 8 e 9 s˜o conexos, mas o grafo da figura 6 n˜o ´. Um ciclo em um grafo ´ um cam- a a e e inho de comprimento igual ou maior que 3 de algum v´rtice n0 at´ n0 de novo de forma e e que nenhum v´rtice ocorra mais de uma vez no caminho, sendo n0 o unico v´rtice que e ´ e ocorre mais de uma vez e este ocorre apenas nos extremos do caminho. No grafo da figura 8, 1, a1 , 2, a4 , 3, a5 , 1 ´ um ciclo. Um grafo sem ciclos ´ dito ac´ e e ıclico e um ciclo de comprimento k ´ chamado de k-ciclo. e Um caminho simples ´ um caminho em que todos os v´rtices s˜o distintos. Um e e a caminho em que todas as arestas s˜o distintas ´ chamado trilha. a e Um grafo G ´ dito um grafo rotulado se est˜o associados dados de algum tipo `s e a a suas arestas e/ou v´rtices. Em particular, G ´ grafo ponderado se a cada aresta e de e e G est´ associado um n´mero n˜o negativo w(e) dito peso ou comprimento de e. A a u a figura 10 mostra um grafo ponderado onde o comprimento de cada aresta est´ descrito de a maneira obvia. O peso ou comprimento de um caminho em grafo ponderado G ´ definido ´ e como sendo a soma dos pesos das arestas no caminho. Um problema importante na teoria dos grafos ´ encontrar o menor caminho, isto ´, um caminho de peso (comprimento) e e m´ınimo entre quaisquer dois v´rtices. O comprimento do caminho m´ e ınimo entre P e Q na figura 10 ´ 14; um tal caminho ´ e e (P, A1 , A2 , A5 , A3 , A6 , Q). 3 6 GFED @ABC r A1 A2 Y GFED @ABC A GFED @ABC 3d rr ¤ YY ¤ dd 3rrrr ¤¤¤ YY ¤¤¤ dd4 rr YY dd rr ¤¤ YY ¤¤ ¤¤ dd rrr ¤¤ 2 ¤¤ 2YY7 ¤ GFED @ABC P vv 2 ¤ 3 ¤¤Y 1 Q GFED @ABC vv ¤¤ ¤¤ YYY ~ vv vv ¤¤ ¤¤ YY 2 ~ ~~ ¤¤ ¤¤ 4 vv YY ~ vv ¤¤ ¤¤ Y ~~ vv ¤ ¤ ~~ 6 4 GFED @ABC A4 A5 GFED @ABC A6 GFED @ABC Figura 10: Exemplo de grafo ponderado Um grafo G ´ dito biparticionado ou bipartido se o seu conjunto de v´rtices V e e pode ser particionado em dois subconjuntos M e N tais que cada aresta de G conecta um v´rtice de M a um v´rtice de N . Um grafo ´ completo e biparticionado se cada v´rtice e e e e de M ´ conectado a cada v´rtice de N . Esse tipo de grafo ´ denotado por Km,n , onde m e e e ´ o n´mero de v´rtices em M , e n ´ o n´mero de v´rtices em N . A figura 11 mostra o e u e e u e grafo K2,3 .
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 7 a ı ooo©• oooo ©©© ooo ©© ooo •SS y ©© yyy SS yyy©© SS ©©yyyy SS© yy © ©© SS ooooo• © So ©© ooS ©oooo SS •©oyyy y SS yyy SS yyy SS yyyS • Figura 11: Grafo K2,3 Existe um teorema interessante em rela¸˜o aos grafos bipartidos. ca Teorema 2.3 (Grafo bipartido) Um grafo G ´ um grafo bipartido se, e somente se, e todo ciclo de G possuir caminho par. Demonstra¸˜o: Ida: Seja X e Y as duas parti¸oes de G. Todo caminho em G alterna um ca c˜ v´rtice X com um v´rtice Y . Isso ´ a consequˆncia da defini¸ao de grafo bipartido. e e e e c˜ Supondo que um ciclo cont´m um v´rtice vi em uma das duas parti¸˜es. Para voltar e e co a esse v´rtice, ´ preciso ir na outra parti¸˜o e voltar um n´mero par de vezes. e e ca u Volta: Seja G um grafo onde todo ciclo ´ de comprimento par. Seja um v´rtice vi e e de G. Coloca-se num conjunto X o v´rtice vi e todos os outros v´rtices que est˜o e e a a uma distˆncia par de vi . Os outros v´rtices formam o conjunto Y . Se n˜o tivesse a e a nenhuma aresta ligando dois v´rtices de X ou dois v´rtices de Y , seria respeitado e e as condi¸oes para que o grafo fosse bipartido. Supondo agora que existe uma outra c˜ aresta entre dois v´rtices a e b de X (ou Y ). J´ existe um caminho par entre a e e a b. Acrescentando a nova aresta, obtˆm-se um ciclo de comprimento ´ e ımpar, o que contradiz a hip´tese. Portanto, n˜o pode existir outra aresta entre quaisquer par de o a v´rtices que j´ est´ em X (igualmente para Y ) e o grafo ´ bipartido. e a a e Isso prova o teorema. A defini¸ao de grafo como uma tripla ordenada, constitu´ por um conjunto de v´r- c˜ ıdo e tices, um conjunto de arestas e uma fun¸ao de mapeamento, permite que dois grafos que c˜ se parecem muito diferentes em suas representa¸oes gr´ficas, sejam, ainda assim, o mesmo c˜ a grafo. Isto foi observado nos grafos representados pelas figuras 4 e 5, pois eles possuem os mesmos v´rtices, as mesmas arestas e a mesma fun¸˜o de associa¸˜o entre arestas e e ca ca v´rtices. Desta forma, dois grafos G(V1 , A1 , g1 ) e G(V2 , A2 , g2 ) s˜o isomorfos se existirem e a bije¸˜es f1 : V1 → V2 e f2 : A1 → A2 tais que para cada aresta a ∈ A1 , g1 (a) = x − y co se, e somente se, g2 [f2 (a)] = f1 (x) − f1 (y). Em outras palavras, tem-se | V1 |=| V2 | e existe uma fun¸˜o un´ ca ıvoca: f : V1 → V2 , tal que (i, j) ´ elemento de A1 se, e somente se, e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 8 a ı (f (i), f (j)) ´ elemento de A2 . A figura 12 ilustra o exemplo de dois grafos isomorfos entre e si. Pode-se observar que: f (a) = 1, f (b) = 2, f (c) = 3, f (d) = 8, f (e) = 5, f (f ) = 6, f (g) = 7, f (h) = 4. aa 89:; ?>=< 89:; ?>=< b 89:; ?>=< 2` aa ¢ ¢¢ `` aa ¢¢ ¢ `` aa ¢¢ ¢¢ `` aa ¢¢ ¢¢ `` ¢¢ ¢ ¢ GFED @ABC f g 89:; ?>=< 89:; ?>=< 1` 89:; ?>=< 7 89:; ?>=< 3 `` ¢¢ ``` ¢¢ ``¢¢ ``¢¢ ¢` ¢` ¢¢ ``` ¢¢ ``` ¢¢ ¢¢ 89:; ?>=< e 89:; ?>=< ha 89:; ?>=< 6a 89:; ?>=< 8 89:; ?>=< 4    aa aa ¡¡     aa aa aa aa ¡¡¡    aa aa ¡¡    ¡¡ 89:; ?>=< d 89:; ?>=< c 89:; ?>=< 5 Figura 12: Grafos isomorfos 2.2 Grafos Planares Um grafo ou multigrafo que pode ser desenhado no plano de tal modo que suas arestas n˜o se cortem ´ dito planar. O grafo da figura 4 ´ um exemplo de grafo planar. Uma a e e representa¸ao particular de um multigrafo planar finito ´ chamado mapa. c˜ e Um fato sobre grafos planares foi descoberto pelo matem´tico Leonhard Euler. Um a grafo simples, conexo e planar divide o plano em um n´mero de regi˜es, incluindo as u o regi˜es totalmente fechadas e uma regi˜o infinita exterior. Euler observou uma rela¸ao o a c˜ entre o n´mero v de v´rtices, o n´mero a de arestas e o n´mero r de regi˜es neste tipo de u e u u o grafos. Esta rela¸ao ´ denominada f´rmula de Euler. c˜ e o Teorema 2.4 (F´rmula de Euler) v − a + r = 2 o Demonstra¸˜o: Suponha que o mapa M consiste de um unico v´rtice v. Ent˜o, v = 1, ca ´ e a a = 0 e r = 1. Logo, v − a + r = 2. Caso contr´rio, M pode ser montado a partir a de um v´rtice isolado usando as seguintes duas constru¸oes: e c˜ 1. Acrescente um novo v´rtice q2 e conecte-o a um v´rtice existente q1 por uma e e aresta que n˜o corte nenhuma aresta existente, como na figura 13. a 2. Conecte dois v´rtices existentes q1 e q2 por uma aresta a que n˜o cruze nenhuma e a aresta existente, como na figura 14.
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 9 a ı Nenhuma das opera¸oes muda o valor de v − a + r. Logo, M tem o mesmo valor c˜ para v − a + r do que no mapa com um unico v´rtice, isto ´, v − a + r = 2. Isso ´ e e prova o teorema. •q2 1 1 1 •fff ff 1 1 || • •q1f•f • • • • •| q2 f • ff 1 || || ff || f || ff || f ||| •q | 1fff {•ggg || ff {{ gg || ff {{ gg ||| f {{{ g • • • • Figura 13: Grafo auxiliar 01 Figura 14: Grafo auxiliar 02 Existem duas conseq¨ˆncias da f´rmula de Euler, se for inclu´ mais restri¸oes no ue o ıdo c˜ grafo. Supondo que seja preciso que o grafo n˜o seja apenas simples, conexo e planar, a mas tenha, pelo menos, trˆs v´rtices. Em uma representa¸ao planar deste grafo, pode-se e e c˜ contar o n´mero de arestas que s˜o adjacentes a cada regi˜o, incluindo a regi˜o exterior. u a a a Arestas que est˜o totalmente dentro de uma regi˜o contribuem com duas arestas para esta a a regi˜o. Arestas que separam duas regi˜es contribuem com uma aresta para cada regi˜o. a o a Portanto, se houver a arestas no grafo, o n´mero de arestas de regi˜es ´ 2a. u o e N˜o existem regi˜es com apenas uma aresta adjacente, porque n˜o h´ la¸os no grafo. a o a a c N˜o h´ regi˜es com exatamente duas arestas adjacentes porque n˜o existem arestas par- a a o a alelas e o grafo consistindo apenas em uma aresta ligando dois v´rtices (que tem duas e arestas adjacentes a regi˜o exterior) foi exclu´ ` a ıdo. Portanto, em cada regi˜o existem pelo a menos trˆs arestas adjacentes, de forma que 3r ´ o n´mero m´ e e u ınimo de arestas em cada regi˜o. Por isso, a 2a ≥ 3r ou pelo teorema 2.4: 2a ≥ 3(2 − v + a) = 6 − 3v + 3a ou seja, a ≤ 3v − 6. Se for imposta uma ultima restri¸˜o de que n˜o haja ciclos de comprimento 3, cada ´ ca a regi˜o ter´ pelo menos quatro arestas adjacentes, portanto 4r ser´ o n´mero m´ a a a u ınimo de arestas de regi˜o. Isto leva ` desigualdade a a 2a ≥ 4r que pode ser escrita como a ≤ 2v − 4.
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 10 a ı 2.3 Colora¸˜o de Grafos ca Considerando um grafo G, uma colora¸˜o de v´rtices, ou simplesmente, uma co- ca e lora¸˜o de G ´ uma atribui¸ao de cores aos v´rtices de G de tal forma que v´rtices ca e c˜ e e adjacentes tenham cores distintas. Diz-se que G ´ n-color´vel se existe uma colora¸ao de e a c˜ G que usa n cores. O n´mero m´ u ınimo de cores necess´rias para pintar G ´ dito n´ mero a e u crom´tico de G e ´ denotado por χ(G). a e A seguir ser´ apresentado o algoritmo de Welch e Powell para a colora¸˜o de um grafo a ca G. Este algoritmo nem sempre fornece a colora¸ao minimal de G. c˜ Algoritmo de Welch-Powell – A entrada ´ um grafo G. e Passo 1: Ordene os v´rtices de G em ordem decrescente de grau. e Passo 2: Atribua a primeira cor, C1 , ao primeiro v´rtice e, ent˜o, seq¨encialmente, e a u atribua C1 a cada v´rtice que n˜o ´ adjacente a algum v´rtice que o antecedeu e a e e e ao qual foi atribu´ a cor C1 . ıda Passo 3: Repita o Passo 2 com a segunda cor C2 e os v´rtices subseq¨entes n˜o coloridos. e u a Passo 4: Repita o Passo 3 com a terceira cor C3 , depois com a quarta cor C4 , e assim sucessivamente, at´ que todos os v´rtices estejam coloridos. e e Passo 5: Saia. Teorema 2.5 (Teorema das Quatro Cores) Se as regi˜es de qualquer mapa M s˜o o a coloridas de forma que regi˜es adjacentes tenham cores distintas, ent˜o n˜o mais do que o a a quatro cores s˜o necess´rias. a a A demonstra¸ao do teorema 2.5 utiliza computadores, essencialmente. Especifica- c˜ mente, Appel e Haken mostraram que, se o teorema das quatro cores fosse falso, deveria existir um contra-exemplo em um conjunto de aproximadamente 2000 grafos planares. Mostraram depois, usando o computador, que nenhum destes tipos de grafos planares era um contra-exemplo. 2.4 ´ Arvores Um grafo A ´ dito uma ´rvore se A ´ conexo e n˜o tem ciclos. A figura 15 apresenta e a e a um exemplo de ´rvore. Uma floresta ´ um grafo sem ciclos; logo, as componentes conexas a e de uma floresta s˜o arvores. Um grafo sem ciclo ´ dito ac´ a ´ e ıclico. A arvore que consiste ´ em um unico v´rtice e nenhuma aresta ´ dita ´rvore degenerada. ´ e e a Considerando uma arvore A, claramente, existe apenas um caminho simples entre dois ´ v´rtices de A; caso contr´rio, os dois caminhos formariam um ciclo. Al´m disso: e a e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 11 a ı v1 GFED @ABC v GFED @ABC v3 GFED @ABC q 2 qqqq qqq qqq qqq v4 GFED @ABC v5 GFED @ABC v6 GFED @ABC qqqqq qqqqq qqq qqq qqq qqq qqq qqq v7 GFED @ABC v8 GFED @ABC v9 GFED @ABC Figura 15: Exemplo de arvore ´ 1. Supondo que n˜o existe uma aresta {u, v} em A e se for adicionada a aresta a = a {u, v} a A. Ent˜o, o caminho simples de u at´ v em A mais o v´rtice a formar´ um a e e a ciclo; neste caso, A deixar´ de ser uma ´rvore. a a 2. Por outro lado, supondo que existe uma aresta a = {u, v} em A e se esta aresta for deletada de A, ent˜o, A n˜o ´ mais um grafo conexo (j´ que n˜o existe um caminho a a e a a entre u e v); neste caso, A deixa de ser uma ´rvore. a Uma folha de um grafo ´ um v´rtice de grau 1. As folhas s˜o chamadas tamb´m de e e a e v´rtices terminais ou v´rtices pendentes. e e Teorema 2.6 Toda ´rvore com ao menos dois v´rtices tem uma folha. a e Demonstra¸˜o: Seja T uma ´rvore com ao menos dois v´rtices e seja P o caminho mais ca a e longo em T . Como T ´ conexo e cont´m ao menos dois v´rtices, P tem dois ou mais e e e v´rtices. Supondo, P = v0 ∼ v1 ∼ . . . ∼ vl , onde l ≥ 1. Afirma-se que o primeiro e e o ultimo v´rtices de P (isto ´, v0 e vl ) s˜o folhas de T . ´ e e a Supondo, por contradi¸ao, que v0 n˜o seja folha. Como v0 tem ao menos um vizinho c˜ a (v1 ), tem-se que d(v0 ) ≥ 2. Seja x outro vizinho de v0 (isto ´, x = v1 ). Nota-se que e x n˜o ´ um v´rtice em P , pois, em caso contr´rio, existiria um ciclo: a e e a v0 ∼ v1 ∼ . . . ∼ x ∼ v0 . Pode-se, assim, antepor x ao caminho P para formar o caminho Q: Q = x ∼ v0 ∼ v1 ∼ . . . ∼ vl . Todavia, Q ´ um caminho em T que ´ mais longo do que P . Isso ´ uma contradi¸˜o! e e e ca Portanto, v0 ´ uma folha. Da mesma forma, vl ´ uma folha. Portanto, T tem ao e e menos duas folhas. Teorema 2.7 Seja G um grafo com v > 1 v´rtices. Ent˜o, as seguintes afirma¸˜es s˜o e a co a equivalentes:
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 12 a ı 1. G ´ uma ´rvore. e a 2. G ´ um grafo ac´clico e tem v − 1 arestas. e ı 3. G ´ conexo e tem v − 1 arestas. e Demonstra¸˜o: A demonstra¸˜o ´ por indu¸˜o sobre v. O teorema certamente ´ verdade ca ca e ca e para o grafo que possui apenas um v´rtice e, portanto, nenhuma aresta. Isto ´, o e e teorema vale para v = 1. Assumindo que v > 1 e que o teorema vale para grafos com menos do que v v´rtices. e (1) implica (2): Supondo que G ´ uma ´rvore. Ent˜o, G ´ ac´ e a a e ıclico, e precisa-se mostrar apenas que G tem v − 1 arestas. Conforme demonstrado no teorema 5.1, G tem pelo menos dois v´rtices de grau 1. Deletando-se um destes v´rtices e e e sua respectiva aresta, obt´m-se uma arvore A que tem v − 1 v´rtices. O e ´ e teorema vale para A, portanto, A tem v − 2 arestas. Logo, G tem v − 1 arestas. (2) implica (3): Supondo que G ´ ac´ e ıclico e tem v − 1 arestas. Precisa-se mostrar apenas que G ´ conexo. Supondo que G ´ desconexo e tem k componentes e e A1 , A2 , . . . , Ak , que s˜o ´rvores, uma vez que cada uma ´ conexa e ac´ a a e ıclica. Supondo que Ai tem vi v´rtices. Note que vi < v. Portanto, o teorema vale e para Ai , e logo Ai tem vi arestas. Portanto, v = v1 + v2 + v3 + . . . + vk e v − 1 = (v1 − 1) + (v2 − 1) + . . . + (vk − 1) = v1 + v2 + . . . + vk − k = v − k Assim, k = 1. Mas isso contradiz a hip´tese de que G ´ desconexo e tem k > 1 o e componentes. Logo, G ´ conexo. e e ´ (3) implica (1): Supondo que G ´ conexo e tem v−1 arestas. E necess´rio mostrar a apenas que G ´ ac´ e ıclico. Supondo que G tem um ciclo contendo um aresta a. Deletando a, obtem-se o grafo H = G − a, que tamb´m ´ conexo. Mas H e e tem v v´rtices e n − 2 arestas, e isto ´ uma contradi¸˜o. Logo, G ´ ac´ e e ca e ıclico e, portanto, ´ uma ´rvore. e a Um subgrafo A de um grafo conexo ´ uma ´rvore geradora de G se A ´ uma arvore e a e ´ e A inclui todos os v´rtices de G. A figura 16 mostra um grafo G e as ´rvores geradores e a A1 , A2 e A3 de G. Supondo que G ´ um grafo conexo ponderado, ou seja, cada aresta de G est´ associada e a a um n´mero n˜o negativo (peso). Ent˜o, qualquer ´rvore geradora A de G est´ associada u a a a a a um peso total obtido pela soma dos pesos das arestas em A. Uma ´rvore minimal a geradora de G ´ uma arvore geradora cujo peso total ´ o menor poss´ e ´ e ıvel. Os algoritmos a seguir permitem encontrar a ´rvore minimal geradora A de um grafo conexo ponderado a G, onde G tem v v´rtices. e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 13 a ı •hhh z• • • • • •iii • • • yy • • hhzz zh ii yy zz hh ii yy zz i yy • • • • • • • • • • • • G A1 A2 A3 ´ Figura 16: Arvores Geradoras ´ Algoritmo Arvore Geradora M´ ınima – A entrada ´ um grafo conexo ponderado G e com v v´rtices. e Passo 1: Ordene as arestas de G em ordem decrescente de peso. Passo 2: Seq¨encialmente, delete cada aresta que n˜o desconecta o grafo at´ que restem u a e v − 1 arestas. Passo 3: Saia. ´ Algoritmo Arvore Geradora M´ınima (Kruskal) – A entrada ´ um grafo conexo e ponderado G com v v´rtices. e Passo 1: Ordene as arestas de G em ordem crescente de peso. Passo 2: Come¸ando apenas com v´rtices de G e procedendo seq¨encialmente, adicione c e u cada aresta que n˜o gere um ciclo at´ que v − 1 arestas sejam adicionadas. a e Passo 3: Saia. O peso de uma arvore minimal geradora ´ unico, mas a arvore, propriamente dita, n˜o ´ e´ ´ a e ´ ´. Arvores geradoras minimais distintas podem ocorrer quando duas ou mais arestas tˆm e o mesmo peso. Neste caso, a ordena¸ao das arestas no Passo 1 dos dois algoritmos n˜o ´ c˜ a e unica e pode, portanto, resultar em diferentes arvores geradoras minimais. ´ ´ 2.5 Grafo Orientado Um grafo tamb´m pode possuir arestas dirigidas, como no exemplo da figura 17. Neste e caso, o grafo ´ denominado grafo orientado ou d´ e ıgrafo. Defini¸˜o 2.8 (D´ ca ıgrafo) Um d´grafo G = (V, A, g) ´ uma tripla ordenada onde: ı e V = um conjunto n˜o-vazio de v´rtices (n´s); a e o A = um conjunto de arestas (arcos); g = uma fun¸˜o que associa cada aresta a um par ordenado (x,y) de v´rtices. ca e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 14 a ı 89:; ?>=< 1„   89:; ?>=< 89:; ?>=< 3 g 2 r  ¨ 89:; ?>=< 89:; ?>=< 4 5 h & F 89:; ?>=< 6 Figura 17: Exemplo de um grafo orientado – d´ ıgrafo Num d´ ıgrafo escreve-se a ≡ (v, w) para significar que a ´ um arco que liga v a w e orientado de v para w. Neste caso, diz-se que v ´ adjacente ao v´rtice w e que o arco a e e ´ incidente sobre w e emergente de v. e Em grafos dirigidos h´ pequenas diferen¸as nas defini¸oes de grau, caminhos e conec- a c c˜ tividade. Suponha que G ´ um grafo orientado. O grau de sa´ de um v´rtice v de e ıda e G ´ o n´mero de arestas come¸ando em v, e o grau de entrada ´ o n´meo de arestas e u c e u terminando em v. Como cada aresta come¸a e termina em um v´rtice, a soma dos graus c e de sa´ dos v´rtices de um grafo orientado G ´ igual a soma dos graus de entrada dos ıda e e ` v´rtices, que ´ igual ao n´mero de arestas em G. e e u Um v´rtice v com grau de entrada zero ´ dito uma fonte, e um v´rtice v com grau de e e e sa´ zero ´ dito um sumidouro. ıda e Os conceitos de caminho, caminho simples, trilha e ciclo s˜o os mesmos dos grafos n˜o a a orientados, exceto pelo fato de que a dire¸˜o da aresta deve coincidir com a dire¸ao do ca c˜ caminho. Especificamente, seja G um grafo orientado, ent˜o: a 1. Um caminho orientado P em G ´ uma seq¨ˆncia alternada de v´rtices e arestas e ue e orientadas, por exemplo, P = (v0 , a1 , v1 , a2 , v2 , . . . , an , vn ) tal que cada aresta ai come¸a em vi−1 e termina em vi . Quando n˜o existem ambig¨i- c a u dades, denota-se P por sua seq¨ˆncia de v´rtices ou por sua seq¨ˆncia de arestas. ue e ue 2. O comprimento do caminho P ´ n, seu n´mero de arestas. e u 3. Um caminho simples ´ um caminho com v´rtices distintos. Uma trilha ´ um e e e caminho com arestas distintas. 4. Um caminho fechado tem os v´rtices primeiro e ultimo iguais. e ´ 5. Um caminho gerador cont´m todos os v´rtices de G. e e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 15 a ı 6. Um ciclo ou circuito ´ um caminho fechado com v´rtices distintos (exceto o e e primeiro e o ultimo). ´ 7. Um semicaminho ´ o mesmo que um caminho, a n˜o ser pelo fato de que a aresta e a ai pode iniciar em vi−1 ou vi e terminar no outro v´rtice. Semitrilhas e caminhos e semi-simples s˜o definidos de maneira an´loga. a a Um v´rtice v ´ alcan¸´vel a partir de um v´rtice u se existir um caminho de u para e e ca e v. Se v ´ alcan¸´vel a partir de u, ent˜o (eliminando as arestas redundantes) existe um e ca a caminho simples de u para v. Existem trˆs tipos de conectividade em um grafo orientado G: e 1. G ´ fortemente conexo ou forte se, para qualquer par de v´rtices u e v em G, e e existe um caminho de u para v e um caminho de v para u, isto ´, se cada um deles e ´ alcan¸´vel a partir do outro. e ca 2. G ´ unilateralmente conexo ou unilateral se, para qualquer par de v´rtices u e e e v em G, existe um caminho de u para v ou um caminho de v para u, isto ´, se e algum deles ´ alcan¸avel a partir do outro. e c´ 3. G ´ fracamente conexo ou fraco se existe um semicaminho entre quaisquer dois e v´rtices u e v em G. e Seja G um grafo (n˜o orientado), obtido do grafo orientado G considerando todas as a arestas de G como n˜o orientadas. Claramente, G ´ fracamente conexo se, e somente se, a e o grafo G ´ conexo. e E´ importante notar que conectividade forte implica conectividade unilateral, e que conectividade unilateral implica em conectividade fraca. Diz-se que G ´ estritamente e unilateral se ´ unilateral mas n˜o forte, e ´ estritamente fraco se ´ fraco mas n˜o e a e e a unilateral. A matriz de adjacˆncias M de um grafo direcionado G com v v´rtices e sem arestas e e paralelas ter´ um 1 na posi¸ao i, j se houver uma aresta do v´rtice vi para o v´rtice vj . Este a c˜ e e ´ um caminho de tamanho 1 de vi para vj . A matriz de adjacˆncias d´ informa¸oes relativas e e a c˜ a uma forma limitada de alcan¸abilidade, as que s˜o obtidas atrav´s de caminhos de c a e comprimento 1. No entanto, ser´ multiplicado M × M . Denota-se este produto booleano a por M a fim de distinguir de M 2 , o resultado da multiplica¸ao de M × M ordin´ria de (2) c˜ a matrizes. A multiplica¸ao de matrizes booleanas possuem a seguinte adapta¸˜o: c˜ ca n M (2) [i, j] = (mik ∧ mkj ) k=1 Se um termo como mi2 ∧ m2j nesta soma valer 0, ent˜o ou mi2 = 0 ou m2j = 0 (ou a ambos), e n˜o h´ caminho de comprimento 1 de vi a v2 ou n˜o h´ caminho de tamanho a a a a
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 16 a ı 1 de v2 a vj (ou ambos). Portanto, n˜o existe caminho de comprimento 2 de vi para a vj passando por v2 . Se, por outro lado, mi2 ∧ m2j n˜o for 0, ent˜o tanto mi2 = 1 e a a m2j = 1. Neste caso, existe um caminho de comprimento 1 de vi para v2 e um caminho de comprimento 1 de v2 para vj , de forma que h´ um caminho de comprimento 2 de vi a para vj passando por v2 . Portanto, as entradas em M (2) indica a alcan¸abilidade atrav´s c e de caminhos de comprimento 2. Teorema 2.9 (Matrizes Booleanas de Ajacˆncias e Alcan¸abilidade) Se M ´ a e c e matriz booleana de adjacˆncias para um grafo direcionado G com n v´rtices e sem arestas e e paralelas, ent˜o M (m) = [i, j] = 1 se, e somente se, houver um caminho de comprimento a m do v´rtice vi ao v´rtice vj . e e Demonstra¸˜o: Realiza-se uma prova por indu¸˜o em m. J´ foi visto que o resultado ´ ca ca a e (p) verdadeiro para m = 1 (e m = 2). Supondo que M = [i, j] = 1 se, e somente se, existir um caminho de comprimento p de vi at´ vj . Sabe-se que e n (p+1) M [i, j] = (M (p) [i, k] ∧ akj ) k=1 Esta express˜o valer´ 1 se, e somente se, pelo menos uma parcela valer 1, supondo a a que M [i, q] ∧ aqj = 1, ou M (p) [i, q] = 1 e aqj = 1. Isto ser´ verdade se, e somente (p) a se, existir um caminho de comprimento p de vi at´ vq (pela hip´tese de indu¸ao) e e o c˜ existir um caminho de comprimento 1 de vq a vj , que significa que existe um caminho de comprimento p + 1 de vi a vj . Isto prova o teorema! Se o v´rtice vj ´ alcan¸´vel a partir do v´rtice vi , ele o ser´ atrav´s de um caminho de e e ca e a e algum tamanho. Este caminho ser´ evidenciado por um 1 na posi¸˜o i, j de M , M (2) , M (3) , a ca etc., mas, quantas multiplica¸˜es ser˜o necess´rias para se identificar todos os caminhos co a a de qualquer tamanho entre dois v´rtices? Se houver v v´rtices no grafo, ent˜o qualquer e e a caminho com v + 1 ou mais v´rtices deve ter pelo menos um v´rtice repetido. Isto decorre e e do Princ´ ıpio da Casa do Pombo – existem v “caixas” (v´rtices distintos) nas quais se e est´ colocando mais de v objetos (os v´rtices de um caminho com v ou mais arestas). A a e se¸˜o de um caminho que se encontre entre os v´rtices repetidos ´ um ciclo. Se vi = vj , ca e e ent˜o o ciclo pode ser eliminado para formar um caminho mais curto; assim, se existe a um caminho entre dois v´rtices vi e vj , este caminho tem comprimento m´ximo de v − 1. e a Conseq¨entemente, seja vi = vj ou vi = vj , n˜o ´ necess´rio procurar por um caminho u a e a de vi at´ vj com comprimento maior que v. Portanto, para determinar a alcan¸abilidade, e c deve-se apenas considerar os elementos i, j em M, M (2) , . . . , M (v) . Desta forma, pode-se definir a matriz de alcan¸abilidade R como c R = M ∨ M (2) ∨ . . . ∨ M (v)
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 17 a ı Ent˜o, vj ´ alcan¸´vel a partir de vi se, e somente se, o elemento i, j em R for 1. a e ca 3 Representa¸˜o Computacional de Grafos ca Uma das vantagens dos grafos ´ a sua representa¸˜o visual das informa¸˜es. Entre- e ca co tanto, para o armazenamento e manipula¸ao de grafos por computador, as informa¸oes c˜ c˜ necessitam ser representadas de outras maneiras. Uma op¸˜o ´ usar a defini¸ao formal ca e c˜ de grafos; ou seja, pode-se armazenar um conjunto de v´rtices, um conjunto de arestas e e uma fun¸ao que associe a cada aresta um conjunto com seus dois v´rtices extremos. c˜ e Exemplo: 1. Para representar o grafo da figura 6 usando a defini¸ao formal seria necess´rio ar- c˜ a mazenar os conjuntos: {1, 2, 3, 4, 5} {a1 , a2 , a3 , a4 , a5 , a6 } e {[a1 , 1, 2], [a2 , 1, 2], [a3 , 2, 2], [a4 , 2, 3], [a5 , 1, 3], [a6 , 3, 4]} onde, neste conjunto, a rela¸ao funcional ´ representada por vetores de trˆs elemen- c˜ e e tos. Esta representa¸ao pode ser mais eficiente se for restrita a grafos simples e conexos, c˜ pois, neste caso, n˜o h´ necessidade de explicitar os nomes das arestas ou fornecer o a a conjunto de v´rtices. e Este tipo de representa¸ao n˜o ´ adequado para a realiza¸˜o de diversas opera¸oes c˜ a e ca c˜ em grafos. Por exemplo, supondo que se deseja encontrar todos os v´rtices adjacentes a e um determinado v´rtice. Deve-se comparar a ocorrˆncia do respectivo v´rtice em cada e e e elemento do conjunto que representa a fun¸˜o g, o que ´ uma tarefa com alto custo com- ca e putacional. Por conseguinte, as representa¸oes de grafos com conjuntos n˜o s˜o utilizadas. c˜ a a A solu¸˜o ´ utilizar estruturas de dados tais como matrizes de adjacˆncias ou listas ca e e de adjacˆncias. e 3.1 Matriz de Adjacˆncias e Supondo que um grafo tem n v´rtices numerados n1 , n2 , . . . , nn . Esta numera¸˜o e ca define uma ordena¸ao arbitr´ria no conjunto de v´rtices. No entanto, n˜o h´ qualquer c˜ a e a a relevˆncia no fato de um v´rtice aparecer antes de outro na ordena¸˜o. De posse dos a e ca v´rtices ordenados, pode-se formar uma matriz n × n onde o elemento i, j ´ o n´mero de e e u
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 18 a ı arestas entre o v´rtice ni e nj . Esta matriz ´ chamada de matriz de adjacˆncias A do e e e grafo com rela¸˜o a ordena¸ao. ca ` c˜ Desta forma, aij = p onde existem p arestas entre ni e nj . Exemplo: 1. Considerando o grafo da figura 18. 89:; ?>=< 89:; ?>=< 1 2 89:; ?>=< 89:; ?>=< 4 3 Figura 18: Exemplo de grafo para representa¸ao em Matriz de Adjacˆncias c˜ e A matriz de adjacˆncias para este grafo com respeito a ordena¸˜o 1, 2, 3, 4 ´ uma e ` ca e matriz 4 × 4. O elemento a1,1 ´ 2 devido ao fato de haver dois la¸os no v´rtice 1. e c e Todos os demais elementos da diagonal s˜o 0. O elemento a2,1 ´ 1 porque existe a e apenas uma aresta entre os v´rtices 2 e 1, o que tamb´m indica que o elemento a1,2 e e vale 1. E, assim por diante. A matriz resultante ´: e   2 1 0 1    1 0 2 0  M =    0 2 0 1   1 0 1 0 Para todo grafo n˜o-direcionado, a matriz de adjacˆncias ser´ uma matriz sim´trica. a e a e Neste caso, somente os elementos da diagonal principal e os elementos abaixo dela neces- sitam ser armazenados. Em um grafo direcionado, a matriz de adjacˆncias A reflete a dire¸ao das arestas. Em e c˜ uma matriz direcionada aij = p onde p ´ o n´mero de arestas do v´rtice ni para o v´rtice e u e e nj . Neste caso, a matriz n˜o ´ necessariamente sim´trica, uma vez que uma aresta do a e e v´rtice ni para o v´rtice nj n˜o implica uma aresta do v´rtice nj para o v´rtice ni . e e a e e Exemplo: 1. Considerando o grafo da figura 19.
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 19 a ı 89:; ?>=< 1   89:; ?>=< 89:; ?>=< 2 g 3  89:; ?>=< 89:; ?>=< S 4 Q 5 Figura 19: Exemplo de d´ ıgrafo para representa¸ao em Matriz de Adjacˆncias c˜ e A matriz de adjacˆncias para este grafo ser´: e a   0 1 1 0 0 0 0 0 1 0       M =  0 1 0 0 1   0 0 0 0 1     0 0 0 0 0 3.2 Lista de Adjacˆncias e Diversos grafos, ao contr´rio de serem completos, possuem relativamente poucas arestas. a Esses grafos tˆm matrizes de adjacˆncias ditas esparsas; isto ´, suas matrizes de adjacˆn- e e e e cias cont´m muitos zeros. No caso de o grafo ter n v´rtices, ser˜o necess´rios n2 elementos e e a a para representarem sua matriz de adjacˆncias, ainda que a maior parte desses elementos e seja zero. Qualquer algoritmo que precise que todas as arestas do grafo sejam verificadas realizar´ compara¸˜es com todos os n2 elementos da matriz, uma vez que n˜o h´ outro a co a a meio de determinar quais os elementos que n˜o s˜o zero al´m de examin´-los. Para en- a a e a contrar todos os v´rtices adjacentes ao v´rtice ni , ser´ preciso varrer toda a i-´sima linha e e a e da matriz de adjacˆncias, que tem um total de n elementos. e Um grafo com poucas arestas pode ser representado mais eficientemente, se for ar- mazenado apenas os elementos n˜o-nulos de sua matriz de adjacˆncias. Esta representa¸˜o a e ca consiste em uma lista para cada v´rtice de todos os v´rtices adjacentes a ele. Desta forma, e e tem-se um vetor de n ponteiros, um para cada v´rtice, para obter o in´ de cada lista. e ıcio Esta representa¸ao na forma de lista encadeada, apesar de precisar de mais mem´ria c˜ o para os ponteiros, pode ser mais eficiente que a matriz adjacˆncias. Para se encontrar e todos os v´rtices adjacentes a ni ser´ preciso percorrer a lista referente a ni , que deve e a ter menos elementos que os n que seria necess´rio examinar na matriz de adjacˆncias. a e Entretanto, para se determinar se um v´rtice nj em particular ´ adjacente ao v´rtice ni , e e e ser´ necess´rio percorrer toda a lista encadeada de ni . a a A figura 20 apresenta um exemplo de lista de adjacˆncias. e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 20 a ı Figura 20: Exemplo de Grafo e Lista de Adjacˆncia correspondente e 3.3 Representa¸˜o de Grafos em Prolog ca H´ v´rias formas de se representar grafos na linguagem Prolog. Por exemplo, o grafo a a da figura 21 poderia ser representado atrav´s de uma sequˆncia de fatos, cada um repre- e e sentando uma liga¸˜o, ou seja, uma aresta do grafo. ca Predicates Aresta(integer, integer). Clauses Aresta(1,2). Aresta(1,3). Aresta(1,4). Aresta(2,4). Aresta(3,4). 89:; ?>=< 2 vvv    vv vv     vv    vv vv    v 89:; ?>=< 89:; ?>=< 1b r 4 bb rr bb rr bb rr rr bb rr rrr 89:; ?>=< 3 Figura 21: Exemplo de Grafo para ilustrar representa¸ao de fatos em Prolog c Se fosse necess´rio representar o fato de que as liga¸oes s˜o bi-direcionais, ou seja, que a c˜ a o grafo n˜o ´ orientado, poderia ser utilizada a seguinte regra: a e Predicates TemAresta(integer, integer). Clauses TemAresta(X,Y) :- Aresta(X,Y); Aresta(Y,X). Outra representa¸ao poss´ seria a que consiste em uma estrutura formada pela lista c˜ ıvel de n´s adjacentes. O c´digo a seguir apresenta uma lista cujos elementos s˜o estruturas o o a
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 21 a ı do tipo no que define o elemento e a lista de n´s adjacentes a ele. Neste c´digo est˜o o o a presentes as regras para se montar um n´ a partir dos fatos que representam as liga¸oes o c˜ entre os n´s (Aresta(X,Y)) e uma regra para se criar um lista de n´s (grafo) a partir da o o ordem do grafo. Domains listaInt=integer* no=no(integer, listaInt) grafo=no* Predicates Adjacencias(integer, listaInt). MontaNo(integer, no). MontaGrafo(integer, grafo). Clauses Adjacencias(X, Lista) :- FindAll(Z, TemAresta(X,Z) Lista). MontaNo(N, no(N, Lista)) :- Adjacencias(N, Lista). MontaGrafo(0, []) :- !. MontaGrafo(N, [Cab|Cauda]) :- MontaNo (N, Cab), N1 = N - 1, MontaGrafo (N1, Cauda). 4 Algoritmos de Grafos Este se¸ao apresenta alguns dos principais algoritmos relacionados a busca em grafos c˜ e identifica¸ao de caminhos m´ c˜ ınimos. 4.1 Algoritmo de Warshall Seja G um grafo orientado com m v´rtices v1 , v2 , . . . vm . Suponha que se deseja encon- e trar a matriz de alcan¸abilidade do grafo G. Warshall propˆs um algoritmo que ´ muito c o e mais eficiente do que calcular as potˆncias da matriz de adjacˆncias M . e e Primeiro defini-se as matrizes booleanas quadradas m×m P0 , P1 , . . . Pm como a seguir. Seja Pk [i, j] o elemento i, j da matriz Pk .Ent˜o: a   1 se existe um caminho simples de vi para vj  Pk [i, j] = que n˜o usa nenhum outro v´rtice exceto possivelmente v1 , v2 , . . . , vk a e  0 caso contr´rio a 
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 22 a ı Isto ´, e P0 [i, j] = 1 se existe aresta de vi para vj P1 [i, j] = 1 se existe um caminho simples de vi para vj que n˜o usa nenhum outro v´rtice exceto possivelmente v1 a e P2 [i, j] = 1 se existe um caminho simples de vi para vj que n˜o usa nenhum outro v´rtice exceto possivelmente v1 e v2 a e E assim sucessivamente. ´ E importante observar que a matriz P0 = M , a matriz de adjacˆncias de G. Al´m disso, e e como G tem apenas m v´rtices, a ultima matriz Pm = R, a matriz de alcan¸abilidade de e ´ c G. Warshall observou que Pk [i, j] = 1 pode ocorrer apenas se um dos seguintes dois casos acontecer: 1. Existe um caminho simples de vi para vj que n˜o usa nenhum outro v´rtice exceto a e possivelmente v1 , v2 , . . . , vk−1 ; logo, Pk−1 [i, j] = 1. 2. Existe um caminho simples de vi para vk e um caminho simples de vk para vj onde cada caminho simples n˜o usa nenhum outro v´rtice exceto possivelmente a e v1 , v2 , . . . , vk−1 ; logo, Pk−1 [i, k] = 1 e Pk−1 [k, j] = 1. Conseq¨entemente, os elementos de Pk podem ser obtidos por: u PK [i, j] = Pk−1 ∨ (Pk−1 [i, k] ∧ Pk−1 [k, j]) A seguir o algoritmo de Warshall. Algoritmo de Warshall – Um grafo orientado G com m v´rtices ´ representado na e e mem´ria pela sua matriz de adjacˆncias M . O algoritmo determina a matriz de o e alcan¸abilidade R do grafo G. c Begin /* Iniciar R como imagem de M */ for(k=0; k<m; k++) for(i=0; i<m; i++) for(j=0; j<m; j++) R[i, j] = (R[i, j] ∨ (R[i, k] ∧ R[k, j]) End. 4.2 Algoritmo para o Caminho M´ ınimo Seja G um grafo orientado com m v´rtices v1 , v2 , . . . vm . Supondo que G ´ ponderado, e e isto ´, possui um peso associado a cada aresta. Ent˜o, G pode ser mantido na mem´ria e a o
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 23 a ı pela sua matriz de pesos W = (wij ) definida por w(a) se existe uma aresta a de vi para vj wij = 0 caso contr´rio a A matriz de caminhos R diz se existem ou n˜o caminhos entre os v´rtices. Agora, a e deseja-se determinar a matriz Q, que apresenta os comprimentos dos caminhos m´ ınimos entres os v´rtices ou, mais precisamente, a matriz Q = (qij ), onde qij ´ o comprimento do e e menor caminho de vi para vj . Descreve-se a seguir uma modifica¸˜o no algoritmo de Warshall para determinar a ca matriz Q de maneira eficiente. Defini-se um seq¨ˆncia de matrizes Q0 , Q1 , . . . , Qm (an´logas `s matrizes anteriormente ue a a definidas P0 , P1 , . . . Pm ) onde Qk [i, j] ´ definido como a seguir: e Qk [i, j] = menor valor entre comprimento do caminho procedente de vi para vj ou a soma dos comprimentos dos caminhos precedentes de vi para vk e de vk para vj . Mais exatamente, Qk [i, j] = min(Qk−1 [i, j], Qk−1 [i, k] + Qk−1 [k, j]) A matriz inicial Q0 ´ a mesma que a matriz de pesos W , exceto pelo fato de que cada e 0 em W ´ substitu´ por ∞ (ou o maior n´mero do tipo representado pela matriz). A e ıdo u matriz final Qm ser´ a matriz procurada Q. a 4.3 Busca em Profundidade A id´ia geral de uma busca por profundidade come¸ada pelo v´rtice x ´ descrita a e c e e seguir. Primeiramente, processa-se o v´rtice inicial x. Depois processa-se cada v´rtice v e e ao longo de um caminho P que inicia em x; isto ´, processa-se um vizinho de x, depois e um vizinho de um vizinho de x, e assim por diante. Depois de ser atingido um v´rtice e que n˜o possui vizinhos ainda n˜o processados, retrocede-se ent˜o no caminho P at´ a a a e que se possa continuar ao longo de outro caminho P , e assim por diante. O retrocesso ´ realizado utilizando-se uma estrutura PILHA contendo os v´rtices iniciais de novos e e poss´ ıveis caminhos. Tamb´m ´ necess´rio um campo, STATUS, que diz o estado corrente e e a de qualquer v´rtice de tal forma que nenhum v´rtice seja processado mais de uma vez. e e A seguir o algoritmo de busca em profundidade. Algoritmo de Busca em Profundidade – Este algoritmo executa uma busca em profundidade em um grafo orientado G a partir de um v´rtice x. e Passo 1: Inicialize todos os v´rtices para o estado prontid˜o (STATUS = 1). e a
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 24 a ı Passo 2: Insira o v´rtice de partida x na PILHA e mude seu estado para o estado de e espera (STATUS=2). Passo 3: Repita os Passos 4 e 5 at´ que a PILHA esteja vazia. e Passo 4: Retire o v´rtice v do topo da PILHA. Processe v, fa¸a STATUS(v)=3, estado e c processado. Passo 5: Examine cada vizinhan¸a j de v: c 1. Se STATUS(J)=1 (prontid˜o), insira j na PILHA e fa¸a STATUS(J)=2 (es- a c tado de espera). 2. Se STATUS(J)=2 (espera), delete o j anterior da PILHA e insira o j corrente na pilha. 3. Se STATUS(J)=3 (processado), ignore o v´rtice j. e Passo 6: Saia. A estrutura PILHA neste algoritmo n˜o ´ tecnicamente uma pilha, uma vez que no a e Passo 5(2), permite-se que um v´rtice j seja deletado e posteriormente inserido no topo e da pilha (embora seja o mesmo v´rtice j, representa uma aresta diferente na estrutura de e adjacˆncias). Sem a remo¸˜o do j no Passo 5(2), obt´m-se uma forma alternativa para o e ca e algoritmo. 4.4 Busca em Largura A id´ia geral de uma busca em largura come¸ada pelo v´rtice x ´ descrita a seguir. e c e e Primeiramente, processa-se o v´rtice inicial x. Depois processa-se todos os vizinhos de x. e A seguir os vizinhos dos vizinhos de x, e assim sucessivamente. Naturalmente, necessita- se ter o controle dos vizinhos de um v´rtice, e necessita-se garantir tamb´m que nenhum e e v´rtice seja processado mais de uma vez. Isso ´ realizado utilizando uma estrutura FILA e e para conhecer os v´rtices aguardando processamento. e A seguir o algoritmo de busca em largura. Algoritmo de Busca em Largura – Este algoritmo executa uma busca em largura em um grafo orientado G a partir de um v´rtice x. e Passo 1: Inicialize todos os v´rtices para o estado prontid˜o (STATUS = 1). e a Passo 2: Insira o v´rtice de partida x na FILA e mude seu estado para o estado de espera e (STATUS=2). Passo 3: Repita os Passos 4 e 5 at´ que a FILA esteja vazia. e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 25 a ı Passo 4: Retire o v´rtice v no in´ da FILA. Processe v, fa¸a STATUS(v)=3, estado e ıcio c processado. Passo 5: Examine cada vizinhan¸a j de v: c 1. Se STATUS(J)=1 (prontid˜o), insira j no final da FILA e fa¸a STATUS(J)=2 a c (estado de espera). 2. Se STATUS(J)=2 (espera) ou STATUS(J)=3 (processado), ignore o v´rtice j. e Passo 6: Saia. 4.5 Ordena¸˜o Topol´gica ca o Seja S um grafo orientado tal que: 1. Cada v´rtice vi de S representa uma tarefa; e 2. Cada aresta (orientada) (u, v) de S significa que a tarefa u deve ser completada antes do in´ da tarefa v. ıcio Supondo que um tal grafo S cont´m um ciclo, por exemplo P = (u, v, w, u), isso e significa que ser´ necess´rio concluir a tarefa u antes de se iniciar a tarefa v, e ser´ preciso a a a terminar a tarefa v antes de iniciar w e, finalmente, ser´ preciso completar a tarefa w a antes de se iniciar a tarefa u. Logo, n˜o ´ poss´ come¸ar nenhuma das trˆs tarefas no a e ıvel c e ciclo. Conseq¨entemente, um grafo S deste tipo, representando tarefas relacionadas por u pr´-requisitos, n˜o pode ter ciclos. e a Uma opera¸ao fundamental em um grafo orientado ac´ c˜ ıclico S ´ o processamento dos e v´rtices, um ap´s o outro, de tal forma que o v´rtice u ´ sempre processado antes do e o e e v´rtice v se (u, v) ´ uma aresta. Esta ordena¸ao linear T dos v´rtices de S, que pode n˜o e e c˜ e a ser unica, ´ dita ordena¸˜o topol´gica. ´ e ca o O algoritmo seguinte ir´ determinar uma ordena¸ao topol´gica. A id´ia central do a c˜ o e algoritmo ´ de que qualquer v´rtice v com grau de entrada zero pode ser escolhido como e e primeiro elemento na ordem T . Essencialmente, o algoritmo repete os dois passos seguintes at´ que S esteja vazio: e 1. Ache um v´rtice v com grau de entrada zero. e 2. Delete v e suas arestas do grafo S. Utiliza-se uma estrutura Fila auxiliar para guardar temporariamente todos os v´rtices e com grau zero. A seguir o algoritmo de ordena¸ao topol´gica. c˜ o
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 26 a ı Algoritmo de Ordena¸˜o Topol´gica – Este algoritmo determina uma ordena¸ao ca o c˜ topol´gica T de um grafo orientado ac´ o ıclico S. Passo 1: Encontre todos os graus de entrada deg + (v) de cada v´rtice v de S e Passo 2: Insira todos os v´rtices de grau zero na FILA. e Passo 3: Repita os Passos 4 e 5 at´ que a FILA esteja vazia. e Passo 4: Remova e processe o primeiro v´rtice v da FILA. e Passo 5: Repita para cada vizinhan¸a j de v: c 1. Fa¸a deg + (j) = deg + (j) − 1. c /* Delete a aresta de v para j */ 2. Se deg + (j) = 0, ent˜o adicione j na FILA. a Passo 6: Saia. 5 Caminhos Eulerianos e Hamiltonianos Os caminhos eulerianos s˜o assim designados pela rela¸˜o com o problema das pontes a ca de K¨nigsberg. Um caminho euleriano ´ um caminho de um grafo que cont´m cada o e e aresta uma e uma s´ vez. Um caminho euleriano que seja fechado ´ designado por circuito o e euleriano. Teorema 5.1 (Euler) Um grafo (ou multigrafo) conexo possui um caminho euleriano se e somente se tiver um n´mero de v´rtices de grau ´mpar igual a 0 ou 2. O caminho u e ı euleriano ´ um circuito euleriano se aquele numero for 0; caso contr´rio, o caminho e a euleriano vai de um dos v´rtices de grau ´mpar ao outro v´rtice tamb´m de grau ´mpar. e ı e e ı Um problema relacionado com o anterior, mas consideravelmente de maior dificuldade de resolu¸ao foi colocado pelo matem´tico irlandˆs W. Hamilton. Diz-se que um caminho c˜ a e ´ hamiltoniano se passar uma e uma s´ vez por cada um dos v´rtices do grafo. e o e Embora o problema da existˆncia de ciclos hamiltonianos possa parecer semelhante ao e problema da determina¸˜o de circuitos eulerianos de um grafo, a verdade ´ que n˜o ´ nada ca e a e f´cil dizer se um grafo ´ ou n˜o hamiltoniano em geral. H´ alguns resultados parciais, a e a a mas n˜o h´ resultados gerais. a a
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 27 a ı 6 Exerc´ ıcios 1. Implemente em linguagem C/C++ todos os algorimtos descritos nesta nota de aula. considere as representa¸oes de grafos por matriz de adjacˆncias e lista de adjacˆncias. c˜ e e 2. Desenho todos os grafos simples que ´ poss´ construir com 1, 2, 3 e 4 v´rtices. e ıvel e 3. Encontre o n´mero crom´tico de cada grafo abaixo: u a (a) 89:; ?>=< 1 89:; ?>=< 89:; ?>=< 2 3 89:; ?>=< 89:; ?>=< 4 5 (b) • •cc  cc  cc  c „„ •cc „„„ cc „„„„ jjjj• j   cc „„„„ jjjjjj  c jjjjjj „„„„  „ •j • (c) • •cc  cc  cc  c „„„„ •cc „ cc „„„„ • cc „„„„  c „„„„  „  • • (d) • •cc  cc  cc  c •cc • cc  cc  c  • • 4. O complemento de um grafo simples G = (V, A, g) ´ o grafo simples G = (V, A , g ) e no qual existe uma aresta entre dois v´rtices se, e somente se, n˜o existe uma aresta e a entre os mesmos v´rtices em G. Desenhe o complemento dos seguintes grafos: e
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 28 a ı ab 89:; ?>=< 89:; ?>=< b 89:; ?>=< 2a bb ¡ ¡ aa bb ¡¡ ¡¡ aa bb ¡¡ ¡¡ aa bb ¡¡ ¡¡ aa bb ¡¡ ¡¡ bb g 89:; ?>=< 89:; ?>=< 1a 89:; ?>=< 3 bb aa ¡ bb aa ¡¡ bb aa ¡¡ bb aa ¡¡ ¡¡ e 89:; ?>=< 89:; ?>=< ha 89:; ?>=< 6a 89:; ?>=< 8 89:; ?>=< 4 ¡ aa aa ¡ ¡¡ aa aa ¡¡ ¡¡ aa aa ¡¡ ¡¡ aa aa ¡¡ ¡¡ ¡¡ 89:; ?>=< d c 89:; ?>=< 89:; ?>=< 5 5. Mostre que G ∪ G ´ um grafo completo. e 6. Seja G um grafo com v v´rtices e a arestas. Quantas arestas cont´m o grafo G ? e e 7. Escreva as matrizes de adjacˆncias e as matrizes de incidˆncias que representam os e e grafos seguintes: (a) 89:; ?>=< 1 89:; ?>=< 89:; ?>=< 2 3 89:; ?>=< 89:; ?>=< 4 5 (b) 89:; ?>=< 2b   bb    bb    bb    bb    89:; ?>=< 89:; ?>=< 89:; ?>=< 89:; ?>=< 1 3 4 5 (c) 89:; ?>=< 2b   bb    bb    bb    bb    89:; ?>=< 89:; ?>=< 1 3 (d) v1 €€ GFED @ABC HH €€€ HH €€€ €€€ HH €€€ HH €€€ HH v4 GFED @ABC v3 GFED @ABC HH nn nnn HH nnnnn HH nnn nnnn v2 GFED @ABC
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 29 a ı 8. Descreva o grafo cuja matriz de adjacˆncias ´ In a matriz identidade n × n e e 9. A matriz de adjacˆncias para um grafo n˜o-direcionado ´ dada em sua forma trian- e a e gular inferior por:   2     1 0     0 1 1   0 1 2 0 Desenhe o grafo que ela representa. 10. A matriz de adjacˆncias para um grafo direcionado ´ dada por: e e   0 1 1 0     1 0 1 1     0 1 1 1   0 1 2 0 Desenhe o grafo que ela representa. 11. Descreva o grafo direcionado cuja matriz de adjacˆncias tem todos os 1s na linha 1 e e na coluna 1 e nas demais posi¸oes tem 0s. c˜ 12. Descreva o grafo direcionado cuja matriz de adjacˆncias tem 1s nas posi¸oes (i, i+1) e c˜ para 0 ≤ i < n − 1, e um 1 na posi¸˜o (n − 1, 0) e 0s nas demais posi¸oes. ca c˜ 13. Seja A a matriz:   1 1 0 1     1 0 1 1     0 1 1 1   0 1 1 0 Encontre A(2) e A(3) . 14. Seja G um d´ ıgrafo representado pela matriz abaixo:   0 1 0 1     1 0 1 0     0 1 0 1   0 1 1 0 Encontre a matriz de alcan¸abilidade. c
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 30 a ı 15. Use o algoritmo de busca em profundidade para realizar uma ordena¸˜o topol´gica ca o no grafo da figura a seguir: 89:; ?>=< 1   89:; ?>=< 89:; ?>=< 2 g 3  89:; ?>=< 89:; ?>=< S 4 Q 5 16. Um grafo com quatro v´rtices ´ e ımpares pode ser conexo. 17. Um grafo c´bico ´ um grafo simples regular de grau 3. Construa 2 grafos c´bicos u e u n˜o-isomorfos. a 18. Determinar um circuito euleriano no seguinte grafo: •dd • • dd dd d •yyyy • ooo• yyyooo ~~~ oy y~ ooo y~y •ooo •~~ yy• 19. Fa¸a uma fun¸ao para verificar se um grafo orientado ´ conexo. c c˜ e 20. Desenhar um grafo cuja matriz de adjacˆncia ´ tal que: e e   1 0 1 1   (2)  0 3 1 1  A =    1 1 2 1   1 1 1 2 e   0 3 1 1   (3)  3 2 4 4  A =    1 4 2 3   1 4 3 2 21. Fa¸a uma fun¸ao que determine o grau de cada v´rtice de um grafo, devolvendo o c c˜ e resultado em um vetor de inteiros.
    • Matem´tica Discreta - Notas de Aula - Cap´tulo 06 - 31 a ı 22. O problema do cavalo, ou passeio do cavalo, ´ um problema matem´tico envol- e a vendo o movimento da pe¸a do cavalo no tabuleiro de xadrez. O cavalo ´ colo- c e cado no tabuleiro vazio e, seguindo as regras do jogo, precisa passar por todas as casas exatamente uma vez. Existem diversas solu¸˜es para o problema, dentre elas co 26.534.728.821.064 terminam numa casa da qual ele ataca a casa na qual iniciou o seu movimento. Durante s´culos muitas varia¸oes desse problema foram estudadas por matem´ticos, e c˜ a incluindo Euler que em 1759 foi o primeiro a estudar cientificamente esse problema. As varia¸oes do problema s˜o: c˜ a • tamanhos diferentes de tabuleiro • n´mero de jogadores u • maneira com que o cavalo se move. Usando a chamada “nota¸ao alg´brica” do xadrzez, pede-se modelar o problema de c˜ e levar o cavalo de g1 para b1 sem cair em nenhuma casa sombreada da figura 22. Figura 22: O Problema do Cavalo Referˆncias e GERSTING, J. L. Fundamentos Matem´ticos Para a Ciˆncia da Computa¸˜o. Rio de a e ca Janeiro: Livros T´cnicos e Cient´ e ıficos Editora S.A., 1995. 518 p. LIPSCHUTZ, S.; LIPSON, M. Teoria e Problemas de Matem´tica Discreta. Porto a Alegre: Bookman, 2004. 511 p. PINTO, J. S. T´picos de Matem´tica Discreta. [S.l.], 2005. o a ROSEN, K. H. Discrete Mathematics and Its Applications. 5th. ed. New York: McGraw Hill, 2005.