Apostila de Matemática Discreta II
Apostila de Matemática Discreta II
Apostila de Matemática Discreta II
MATEMÁTICA DISCRETA II
Com Foco em Linguagem Python
Vitória da Conquista - BA
2022
Sumário
4 Representação de Grafos 33
4.1 Representação Por Lista de Adjacências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Representação Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.1 Matrizes de Adjacência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.2 Matrizes de Incidência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5 Isomorfismo de Grafos 42
5.1 Condições Para a Existência do Isomorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.4 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
1
6 Caminhos e Aplicações 48
6.1 Caminhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.2 Caminhos e Isomorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3 Contando Caminhos Entre Vértices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.5 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.6 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7 Conectividade 55
7.1 Conectividade em Grafos Não-Orientados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.2 Quão conexo é um Grafo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.3 Conectividade em Grafos Orientandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.5 Respostas do Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.6 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
11 Grafos Planares 80
11.1 Problematizando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
11.2 Condições Para a Planaridade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
11.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
11.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
11.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
12 Coloração de Grafos 88
12.1 Problematizando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.2 Coloração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
12.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
2
12.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3
19.4 Respostas dos Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
19.5 Vı́deo-Aulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4
Surgimento da Teoria dos Grafos
A teoria dos grafos é um ramo da matemática que estuda certas relações entre objetos de um determinado con-
junto. Para tanto associamos os elementos deste conjunto a pontos denominados vértices e, as relações existentes entre
eles por meio de arestas os ligando. Em certo sentido, “desenhamos a situação”.
Mais de um século século mais tarde Listing introduzia o conceito de topologia ao passo que Cayley foi levado por
um interesse em formas analı́ticas particulares decorrentes do cálculo diferencial para estudar uma classe particular
de grafos, as árvores. Esse estudo teve diversas implicações na quı́mica teórica.
Um outro problemas amplamente conhecido na teoria dos grafos é problema das quatro cores: “É possı́vel que
qualquer mapa desenhado num plano, dividido em regiões, possa ser colorido com apenas quatro cores de tal forma
que as regiões vizinhas não partilhem a mesma cor?”. O primeiro a notar o problema das quatro cores foi August
Ferdinand Möbius em 1840. Em 1852, Francis Guthrie escreveu em uma carta para seu irmão Frederick, estudante na
University College London, sobre o problema. Mas nenhum deles conseguiu resolvê-lo. Sua prova se deu somente em
1976 que Kenneth Appel e Wolfgang Haken conseguiu demonstrá-lo.
Atualmente a teoria dos grafos permeia os mais diversos ramos da ciência. Por meio de ferramentas relativa-
mente simples, provenientes desta, problemas como a determinação de rotas que minimizam custos, arvores mı́nimas,
segurança de redes de computadores entre outros problemas são, em boa parte, resolvidos com boa eficiência.
5
Organização Deste Material e Algumas
Outras Dicas
A organização do conteúdo deste material foi cuidadosamente pensada para promover um aprendizado significativo
acerca dos assuntos abordados. Aqui seguem algumas dicas de como usá-lo:
1. Teoremas e definições são, em geral seguidos de exemplos. Leia atentamente a solução dos exemplos, vejam
como são empregados definições e teoremas bem como o jargão da matéria. Note que a solução não é simplesmente
apresentar um cálculo, mas sim apresentar a explicação passo-a-passo da solução do problema proposto.
2. A demonstração de alguns teoremas pode não serem tão simples e até mesmo omitidas no texto. Não se preocupe,
esta é apenas uma matérias introdutória. Nosso foco maior é na utilização prática dos resultados na solução dos
exemplos e exercı́cios tendo em vista uma posterior implementação em linguagem computacional adequada (que
poderá ser feita durante a matéria ou em matérias mais adiante no curso). Contudo, ao entendermos a demonstração
de um teorema passamos de “somente aceitar o resultado”para “acreditarmos que o mesmo é de fato verdadeiro”.
3. Ao longo do texto são expostos alguns algoritmos tendo em vista o foco computacional da matéria para cursos
como Sistemas de Informação e Ciência da Computação. Aprender a matéria sem a preocupação de implementar
somente para mim que sou professor de matemática hehehe.
4. Nos tópicos Palavra do Mestre costumo “esticar” a explicação de alguns pontos que julgo importantes para o
leitor.
5. Nos tópicos Revisando relembro alguns conceitos muito provavelmente já vistos pelo leitor bem como alguns
outros fora do escopo principal da matéria mas que aparecem vez ou outra no texto.
6. Ao final de cada capı́tulo, na versão digital (PDF), o leitor encontrará Links de videoaulas referentes aos assuntos
abordados.
7. A final deste livro são apresentados alguns programas, em linguagem Python 3, referentes a alguns tópicos
estudados. Da minha parte não há qualquer pretensão em ensinar a programar, sou professor de matemática e ponto
final. Contudo, sou um grande entusiasta da programação e, sendo esta matéria com foco em cursos de Sistema
de Informação e Computação decidir incluir algumas codificações ao final. Os programas, em sua maioria, estão
presentes nos endereços eletrônicos disponı́veis em [10] e [11]. Para a compilação dos códigos usamos a plataforma
online OnlineGDBBeta : Linguagem Python 3.
Muito do que será exposto nas próximas páginas é fundamentado em [1](Veja a referência Principal), principal-
mente teoremas e definições. O leitor interessado pode tentar obter tal obra a fim de ter um material completo e muito
bem escrito sobre o tema.
Por fim, a produção deste material, bem como todos os materiais didáticos que elaboramos enquanto professores
do Instituto Federal de Educação, Ciência e Tecnologia da Bahia não tem qualquer pretensão financeira. Seu único
objetivo é a difusão do conhecimento. Ele pode ser copiado, reproduzido e melhorado à vontade.
Email para sugestões: allansoares007@gmail.com
6
Agradecimentos
Agradeço primeiramente a Deus por me iluminar na confecção deste material. Em segundo ao Professor Edson
Patrı́cio Barreto de Almeida pelas importantes contribuições dadas. Por fim, ao aluno Rafael Dutra Pereira (BSI)
pelas correções feitas enquanto cursava a disciplina Matemática Discreta II no ano de 2020.
7
Plano de Aula
Aula 1
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Introdução ao Estudo de Grafos
Duração: 100 min
Objetivos:
- Definir grafo;
- Apresentar alguns tipos de grafos especiais;
- Relacionar grafos com aspectos presentes no cotidiano.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
8
Capı́tulo 1
1.1 Grafos
Fique atento a cada definição exemplo deste capı́tulo. Eles serão a base para tudo que desenvolveremos ao longo
do curso.
Definição 1. Um grafo G = (V, E) consiste de um conjunto não vazio de vértices V e um conjunto de arestas E.
Cada aresta liga um ou dois vértices chamados pontos finais um do outro.
Exemplo 1. A Figura 1.1 apresenta dois grafos G e H como redes hipotéticas entre centrais de dados de algumas
cidades.
Note que G representa uma rede com link único entre centrais. Por outro lado H admite múltiplos links entre algumas
de suas centrais de dados. A rede representada por H me parece mais segura!
A teoria dos grafos nos permite detalhar bastante algumas situações por meio de desenhos. Nesta primeira parte
apresentaremos alguns exemplos para nos motivar a estudar a teoria. Em capı́tulos futuros apresentaremos algumas
ferramentas extremamente úteis que podem ser facilmente aplicadas em diversas situações. Entre algumas situações
interessantes temos, por exemplo: Como o Uber escolhe a trajetória de melhor custo benefı́cio para ambos os lados,
motorista e usuário? Como as rotas de uma empresa de logı́stica podem ser modeladas de modo a apresentarem um
menor custo em suas viagens?
Exemplo 2. Poderı́amos adicionar links de backup a algumas das centrais de dados no grafo H do Exemplo 1 conforme
mostrado na Figura 1.2.
9
Figura 1.2: Rede de Centrais de Dados com Múltiplos Links e Pontos de Backup
Arestas que ligam um vértice a ele próprio são chamadas de loops. No exemplo atual temos loops nos vértices Goiás
e Salvador representando pontos de backup. Bom salvar dados importante em um pendrive!
Se só existir, para cada par de vértices, uma única arestas os conectando, e o for dessa forma para todos os vértices
de um grafo ele será chamado grafo simples (Grafo G na Figura 1.1). Do contrário, se existirem vértices conexos por
mais que uma aresta dizemos tratar-se de um grafo múltiplo ou multigrafo (Grafo H na Figura 1.1).
Definição 2. Um grafo orientado (ou digrafo) (V, E) consiste de um conjunto não vazio de vértices V e um conjunto
de arestas orientadas (ou arcos) E. A aresta orientada associada ao par (u, v) é dita começar em u e terminar em v
Exemplo 3. Podemos ainda impor orientações às arestas de um grafo. Neste caso, nossa rede entre centrais de
dados poderia ter a seguinte configuração conforme a Figura 1.3: Podemos imaginar que uma seta com orientação
que parte de uma cidade a para uma cidade b signifique que a cidade a envie dados para a cidade b. Por exemplo, a
cidade de Belo Horizonte pode enviar diretamente dados para a cidade de São Paulo mas não o inverso. Contudo, a
informação poderia seguir um caminho, digamos São Paulo, Salvador, Rio de Janeiro e por fim chegar a Belo Horizonte.
Considerando o grafo G1 , Goiânia não pode receber dados de nenhuma das demais cidades (direta ou indiretamente).
Seria bom alguém ver isso!.
Exemplo 4. Ainda com base nos exemplos precedentes poderı́amos ter um multigrafo com arestas orientadas (grafo
G2 ) ou até mesmo um multigrafo contendo pontos de backup (grafo H2 ) conforme a Figura 1.4:
Observe que, em ambos grafos G2 e H2 uma informação pode, a partir de uma cidade qualquer, atingir uma outra
cidade qualquer dentre as participantes da rede de centrais de dados.
10
Figura 1.4: Rede de Centrais de Dados Orientada com Múltiplos Links
Nossa abordagem, em grande parte, se restringirá aos grafos simples com ou sem arestas orientadas. Neste caso,
pouco ou quase nada abordaremos a respeito de grafos com múltiplas arestas ou com loops. Isto não quer dizer que a
teoria não se encaixe. Com alguns ajustes situações em que não se tenha um grafo simples podem ser tratadas com a
teoria apresentada.
A Tabela 1.1 apresentada a seguir estabelece um resumo para que possamos facilmente identificar um grafo quanto
à sua tipologia assim que o virmos.
1.2 Modelos
Vejamos a seguir alguns modelos para situações práticas da vida real. Ao final dos exemplos apresentados nesta
seção você irá notar que a quantidade de situações que se pode modelar por meio da teoria dos grafos é enormemente
assustadora. Aconselhamos ao leitor buscar mais destas situações em livros, internet e até mesmo ensaiar algumas.
11
Figura 1.5: Rede de Amizade e Relacionamento
Observe como uma simples figura nos permite observar quem é o mais influenciador (Amanda), quem é o mais
influenciável (Pedro), indivı́duos com relações de influência mútuas (Pedro-Thiago e Thiago-Ana). Em Amanda
ninguém manda!
A imagem dispensa qualquer comentário, contudo faremos um. A rede mundial de computadores é considerado um
gigantesco grafo cuja complexidade se dá não somente pela quantidade de máquias conectadas mas também pela
modificabilidade da rede com páginas sendo criadas e outras deletadas a cada momento. De modo sucinto podemos
pensar da seguinte forma. Cada página é representada por um vértice e uma aresta começa na página da Web A e
termina na página da Web B se houver um link para B. Observe que não é o mesmo link que liga duas páginas A e
B, um serve para ir de A para B e o outro para ir de B até A.
12
Figura 1.7: Imagem retirada de https://br.depositphotos.com/29431569
1.3 Exercı́cios
Exercı́cio 1. Desenhe modelos de grafos, indicando o tipo de grafo (Tabela 1.1) usado para representar rotas de uma
empresa de aviação onde todos os dias há três voos de Rio de Janeiro para São Paulo, dois voos de São Paulo a Rio
de Janeiro, um voo de São Paulo para Recife, dois voos de Recife para São Paulo, um voo de São Paulo para Manaus,
um voo de Manaus para São Paulo, dois voos de São Paulo para Porto Alegre, um voo de Porto Alegre para São Paulo
13
e um voo de Porto Alegre para Recife, com
a) uma aresta entre os vértices representando as cidades com voos entre elas (em qualquer direção).
b) uma aresta entre vértices caso haja um voo entre elas indicando a cidade de onde o voo parte e a cidade onde o
voo termina.
c) uma aresta para cada voo a partir de um vértice representando cidade de onde o voo parte para o vértice represen-
tando a cidade onde o voo termina.
Exercı́cio 2. O grafo de interseção de uma coleção de conjuntos é o grafo que tem um vértice para cada um desses
conjuntos e tem uma borda (única) conectando os vértices que representam dois conjuntos se esses conjuntos tiverem
uma interseção não vazia. Construir o grafo de interseção dessas coleções de conjuntos.
a) A = {0, 2, 4, 6}, B = {1, 2, 3, 4}, C = {1, 3, 5, 7, 9}, D = {5, 7, 8, 9}, E = {0, 1, 8, 9}
b) A = {· · · , −4, −3, −2, −1, 0}, B = {· · · , −2, −1, 0, 1, 2, · · · }, C = {· · · , −6, −4, −2, 0, 2, 4, 6, · · · } e
D = {· · · , −5, −3, −1, 1, 3, 5, · · · }.
Exercı́cio 3. Determine se cada um dos grafos 1 − 3 dados seguir possui arestas direcionadas ou não direcionadas,
se tem arestas múltiplas ou não e se apresentam loops ou não. Ao final use suas respostas para determinar o tipo de
grafo tendo em vista a Tabela 1.1.
Resposta do Exercı́cio 1. .
Resposta do Exercı́cio 2. .
14
1.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
15
Plano de Aula
Aula 2
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Terminologia e Definições Básicas.
Duração: 100 min
Objetivos:
- Definir grafo não orientado;
- Apresentar o conceito de vizinhança de um vértice ou conjunto de vértices;
- Apresentar o conceito de grau de um vértice para grafos não orientados;
- Definir grafo orientado;
- Apresentar o conceito de grau de um vértice para grafos orientados;
- Apresentar resultados envolvendo grau de um vértice.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
16
Capı́tulo 2
As definições que apresentaremos neste capı́tulo são de fundamental importância para diversos resultados a serem
estabelecidos nos demais capı́tulos. Inúmeros teoremas farão uso da adjacência de um vértice (Definição 3) bem como
o grau de um vértice (Definição 5).
Note que os vértices a e b são adjacentes, pois existe uma aresta incidente a ambos. Por outro lado, os vértices b e c
não são adjacentes uma vez que não há qualquer aresta incidente a ambos simultaneamente. O vértice e, por exemplo,
não apresenta vértices adjacentes. O vértice c é adjacente a ele mesmo, pois existe um loop em c.
Definição 4. O conjunto de todos os vizinhos de um vértice v de G = (V, E), denotado por N (v), é chamado
vizinhança de v. Se A é um subconjunto de V , denotamos por N (A) o conjunto de todos os vértices em G que são
adjacentes a pelo menos um vértice em A. Assim, N (A) = ∪v∈A N (v).
Exemplo 10. Determine a vizinhança de todos os vértices do grafo G dado na Figura 2.1 (Exemplo 9).
Solução: Observando todas as adjacências de cada um dos vértices (de acordo com a Definição 3) temos: N (a) =
{b, c, d}, N (b) = {a, d}, N (c) = {a, c}, N (d) = {a, b} e N (e) = ∅.
17
Definição 5. O grau de um vértice em um grafo não orientado é o número de arestas incidentes com ele, exceto que
um loop em um vértice contribui duas vezes para o grau desse vértice. O grau do vértice v é denotado por deg(v).
Exemplo 11. Determine o grau de todos os vértices do grafo G dado na Figura 2.1 (Exemplo 9).
Solução: De acordo com a Definição 5 temos que deg(a) = 3 (vértices b, c, d com uma aresta cada um); deg(b) = 3
(vértices a, d sendo o primeiro contribuindo com uma aresta incidente e o segundo com duas); deg(c) = 3 (vértices a,
c, sendo o primeiro contribuindo com uma aresta e o segundo com um loop que vale 2 para efeitos de cálculo de grau);
deg(d) = 3 (vértices a, b sendo o primeiro contribuindo com uma aresta incidente e o segundo com duas); deg(e) = 0,
pois não há qualquer aresta incidente com este.
(O presente resultado se aplica a todo tipo de grafo não orientado incluindo multigrafos e pseudografos.)
Exemplo 12. Quantas arestas existem em um grafo com 8 vértices de grau seis cada um?
Solução: Temos que a soma dos graus dos vértices é dada por
6 + 6 + · · · + 6 = 6 · 8 = 48
donde segue, do Teorema 1 que, 2m = 48, em que m é o número de arestas. Portanto, tal grafo contém 24 arestas..
Teorema 2. Um grafo não orientado possui um número par de vértices de grau ı́mpar.
Demonstração. Sejam V1 e V2 o conjunto de vértices de graus pares e o conjunto de vértices de graus ı́mpares,
respectivamente, em um grafo não orientado G = (V, E) com m arestas. Então
X X X X X
2m = deg(v) = deg(v) + deg(v) ⇒ 2m = 2k + deg(v) ⇒ deg(v) = 2(m − k)
v∈V v∈V1 v∈V2 v∈V2 v∈V2
Exemplo 13. É possı́vel desenhar um grafo contendo 5 vértices sendo dois de grau 2, um de grau 3 e dois de grau 1?
Se sim desenhe-o.
Solução: De acordo com o Teorema 2 não é possı́vel pois temos três vértices de grau ı́mpar. Espero que não tenha
começado a desenhar algo que não existe!
Definição 6. Quando (u, v) é uma aresta do grafo orientado G u é dito ser adjacente a v e v é dito ser adjacente a u.
u é chamado de vértice inicial de (u, v), e v é chamado de vértice terminal ou vértice final de (u, v). O vértice inicial
e o vértice terminal de um loop são os mesmos.
18
Exemplo 14. Considere o grafo G dado na Figura 2.2:
Note que os vértices a e b são adjacentes com a sendo o vértice inicial da aresta (a, b) e b sendo o vértice final. Os
vértices b e d são adjacentes com b sendo inicial e d sendo final um do outro com relação à aresta (b, d) e vice-versa
com relação à aresta (d, b). Note que c é adjacente a ele mesmo devido ao loop existente nele e desta forma é ponto
final e inicial da aresta (c, c).
Definição 7. Em um grafo com arestas orientadas, o grau de entrada de um vértice v, denotado por deg − (v), é o
número de arestas cujo vértice terminal é v. O grau de saı́da de v, denotado por deg + (v), é o número de arestas cujo
vértice inicial é v. Um loop em um vértice contribui com 1 para tanto o grau de entrada quanto o de saı́da desse
vértice.)
Palavra do Mestre 1. A plataforma Graph Online é uma ótima ferramente no esboço de grafos entre outras
ferramentas bastante úteis para esta disciplina. Praticamente todos os grafos dispostos neste material foram
construı́dos nela.
Exemplo 15. Encontre o grau de entrada e saı́da de cada vértice no grafo orientado G mostradas na Figura 2.3.
Solução: Os graus de entrada em G são deg − (a) = 0, deg − (b) = 3, deg − (c) = 2, deg − (d) = 1, deg − (e) = 0 e
deg − (f ) = 2. Os graus de sáida em G são deg + (a) = 3, deg + (b) = 1, deg + (c) = 1, deg + (d) = 3, deg + (e) = 0 e
deg + (f ) = 0.
19
Note que o Teorema 3 nos diz que a soma dos graus de entrada de todos os vértices é igual à soma dos graus de
saı́da de todos os vértices de um grafo orientado.
Exemplo 16. Verifique o Teorema 3 para o grafo G (Figura 2.3) dado no Exemplo 15.
Solução: De fato, temos que
X
deg − (v) = deg − (a) + deg − (b) + deg − (c) + deg − (d) + deg − (e) + deg − (f ) = 0 + 3 + 2 + 1 + 0 + 2 = 8
v∈V
X
deg + (v) = deg + (a) + deg + (b) + deg + (c) + deg + (d) + deg + (e) + deg + (f ) = 3 + 1 + 1 + 3 + 0 + 0 = 8
v∈V
2.3 Exercı́cios
Exercı́cio 4. Considere o grafo não orientado G mostrado na Figura 4:
Exercı́cio 5. Quantos vértices, todos de grau 5, tem um grafo não orientado com 20 arestas?
20
Figura 2.4:
deg + (a) = deg − (a) = deg + (b) = deg − (b) = deg − (c) = deg + (d) = deg − (d) = deg − (e) = 1, deg + (c) = 2, deg + (e) = 0
Exercı́cio 9. Considere um grafo orientado indicando cada ser vivo e aqueles do qual se alimenta (a relação a → b
indica que o animal a é alimento para o animal b).
a) Determine o grau de entrada e o grau de saı́da dos seguintes participantes da cadeia alimentar: Cupim, Lagarto,
Galinha e Onça.
b) Como você relacionaria o grau de entrada e o de saı́da para determinar o ser superior e o ser inferior na cadeia
alimentar? A resposta desta questão é pessoal e deve ser debatida.
c) Removendo-se a aranha o que se esperaria que acontecesse com o restante da cadeia alimentar em um curto perı́odo
de tempo? A resposta desta questão é pessoal e deve ser debatida.
2.4 Respostas
Resposta do Exercı́cio 4. a) N (a) = {b, d}, N (c) = {b, c, f } e N (f ) = {c, e}; b) N (A) = {a, b, c, d, e}, N (B) =
{a, b, c, d, f }; c) deg(b) = 3, deg(c) = 4, deg(d) = 4 e deg(e) = 4
21
Resposta do Exercı́cio 6. .
Resposta do Exercı́cio 7. a) N (b) = {a, c, e}, N (d) = {d, e, f }, N (g) = {c}; b) N (A) = {b, d, e, f }, N (B) =
{b, d, e, f, g}; c) deg − (b) = 1, deg − (c) = 2, deg − (d) = 4 e deg − (e) = 1; d) deg + (a) = 1, deg + (b) = 2, deg + (d) = 1,
deg + (e) = 2 e deg + (g) = 1.
Resposta do Exercı́cio 8. .
Resposta do Exercı́cio 9. Cupim, Lagarto, Galinha e Onça a) deg − (Cupim) = 1, deg − (Lagarto) = 1, deg − (Galinha) =
5, deg − (Onça) = 2, deg + (Cupim) = 4, deg + (Lagarto) = 1, deg + (Galinha) = 1 e deg + (Onça) = 0
b) De modo geral, seres da base da cadeia alimentar possuem grau de entrada nulo e grau de saı́da positivo como é o
caso da madeira, isto é, apenas servem de alimento. Por outro lado, seres do topo da cadeia alimentar possuem grau
de saı́da nulo e grau de entrada positivo como é o caso da onça, isto é, apenas se alimentam. Outras análises podem
ser feitas.
c) O impacto a curto prazo seria um aumento de todos aqueles seres da cadeia que servem de alimento para a aranha
como é o caso da abelha e do cupim e uma diminuição daqueles seres que se alimentam da aranha que é o caso da
galinha, do sapo e do lagarto. Contudo, a longo prazo praticamente toda a cadeia será afetada tendo que adaptar-se
procurando substitutivos ou tendo superpopulações ou decaimento na população de alguns participantes da cadeia.
22
2.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
23
Plano de Aula
Aula 3
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Grafos Especiais e Grafos Construı́dos a Partir de Outros Grafos.
Duração: 100 min
Objetivos:
- Apresentar alguns dos principais grafos necessários ao estudo da disciplina;
- Definir grafo bipartido;
- Apresentar o teorema das duas cores como ferramenta de se determinar se um grafo dado é bipartido ou não;
- Apresentar os conceitos de subgrafos e união de grafos.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
24
Capı́tulo 3
Exemplo 17. Um grafo de n vértices e dito completo, denotado por Kn , é um grafo simples que contém exatamente
uma aresta entre cada par de vértices distintos. Os grafos Kn , para n = 1, 2, 3, 4, 5, são exibidos na Figura 3.1. Um
grafo simples para o qual há pelo menos um par de vértices distintos não conexos por uma borda é chamado de
incompleto.
25
Exemplo 19. Obtemos uma roda (wheel) Wn quando adicionamos um vértice adicional a um ciclo Cn , para n ≥ 3,
de tal modo que este novo vértice se conecte a cada um dos n vértices em Cn , por novas arestas. As rodas W3 , W4 e
W5 são exibidos na Figura 3.3.
Definição 8. Um grafo simples G é chamado bipartido se seu conjunto de vértices V puder ser particionado em
dois conjuntos disjuntos V1 e V2 de tal forma que cada aresta do grafo conecta um vértice em V1 e um vértice em
V2 (portanto nenhuma aresta em G conecte dois vértices em V1 ou dois vértices em V2 ). Quando essa condição é
verificada, par (V1 , V2 ) é dito ser uma bipartição do conjunto de vértices V de G.
Exemplo 20. Note que C6 é bipartido conforme mostrado na Figura 3.4. De fato, seus vértices podem ser parti-
cionados em dois conjuntos V1 = {v1 , v3 , v5 } e V2 = {v2 , v4 , v6 } e toda aresta de C6 conecta um vértice de V1 a um
vértice de V2 .
Palavra do Mestre 2. Observe, no Exemplo 20 que podemos remodelar um grafo de modo a obtermos o mesmo
grafo. Contudo essa remodelagem não pode alterar as relações existentes entre os vértices e as arestas presentes.
Após tratarmos da ideia de isomorfismo, mais à frente, ficaremos mais à vontade com tal transformação.
Exemplo 21. K3 não é bipartido. Para verificar isso note que se não dividirmos o conjuntos dos vértices de K3 em
dois conjuntos disjuntos, um destes conjuntos conterá dois vértices. Se não conseguiu ver que K3 não é bipartido,
aguarde que logo mais vai ficar moleza!
26
Exemplo 22. Os grafos mostrados na Figura 3.5 são bipartidos?
Solução: O grafo G é bipartido pois seus vértices são a união dos conjuntos disjuntos {a, b, d, e} e {c, f, g} em que
cada aresta conecta um vértice de um desses subconjuntos a um vértice do outro subconjunto. Por outro lado, H não
é bipartido pois o conjunto dos seus vértices não pode ser particionado em dois subconjuntos disjuntos de modo que
arestas conectem um vértice de um desses subconjuntos a um vértice do outro. Sempre as arestas conectam vértices
do mesmo conjunto. Um motivo simples está nas relações entre os vértices b, c e g. Note que todos tem conexões entre
si de modo que é impossı́vel colocá-los em apenas duas partições distintas conforme exige a definição 8.
Teorema 4. Um grafo simples é bipartido se, e somente se, é possı́vel pintar cada um de seus vértices com apenas
duas cores de modo que dois vértices adjacente não sejam pintados da mesma cor.
Demonstração. Primeiros, suponha que G = (V, E) é um grafo bipartido simples. Então V = V1 ∪ V2 , em que V1 e V2
são disjuntos e todo aresta em E conecta um vértice de V1 a um vértice de V2 . Se pintarmos de uma cor cada vértice
em V1 uma segunda cor cada vértice em V2 , então nunca dois vértices adjacentes serão pintados com a mesma cor.
Agora suponha que é possivel pintar com duas cores todos os vértices de modo que nunca dois vértices adjacentes
sejam pintados com a mesma cor. Seja V1 o conjunto dos vértices pintados com uma das cores e V2 o conjunto dos
vértices pintados com a outra cor. Então V1 e V2 são disjuntos e V = V1 ∪ V2 . Além disso, toda aresta conecta
um vértice em V1 a um vértice em V2 pois nenhum par de vertices adjacentes são ambos vizinhos de V1 ou de V2 .
Consequentemente G é bipartido.
Exemplo 23. Use o Teorema 4 para mostrar que o grafo G do Exemplo 22 é bipartido e o grafo H não.
Solução: Comecemos analisando o grafo G. Consideremos as cores verde e vermelha para pintar cada vértice em G.
Assim, toda aresta de G deve conectar um vértice verde a um vértice vermelho. Sem perdas de generalidade, pintando
a de vermelho. Então, nós devemos pintar de azul c e f de verde. Para evitarmos ter uma aresta em G com dois
pontos finais verdes, nós devemos pintar de vermelho todos os vértices adjacentes a qualquer dos vértices c e f . Assim,
devemos pintar de vermelho os vértices d e e. Por fim, pintamos o vértice b com a cor vermelha e o vértice g com a
cor verde. Logo, o Teorema 4 assegura que G é bipartido. Acompanhe a coloração na Figura 3.6.
Agora, analisemos o grafo H. Tomando, novamente as cores verde e vermelho. Comecemos, sem perdas de generalidade
pintando a com a cor vermelha. A escolha inicial induz a escolha da cor verde para pintarmos o vértice b. Contudo,
esta segunda escolha nos induz à escolha da cor vermelha para pintar os vértices c e g o que não é permitido. Logo, o
grafo não é bipartido. Acompanhe a coloração na Figura 3.6.
27
Figura 3.6: Grafos não orientados G e H com coloração destacada.
Palavra do Mestre 3. Observe, no Exemplo 23, que a coloração do grafo poderia ser feita a partir de qualquer
vértice. Além disso o Teorema 4 pode ser usado tanto para mostrar que um grafo é bipartido como para mostrar
que não. Consegue ver isto?
Exemplo 24. Um grafo bipartido completo Km,n é um grafo em que seus vértices são particionados em dois sub-
conjuntos de m e n vértices, respectivamente, com uma aresta entre dois vértices se, e somente se, um vértice está no
primeiro subconjunto e um outro vértice no segundo subconjunto. Alguns grafos bipartidos completos são mostrados
na Figura 3.7.
Em termos mais simples, um grafo H é subgrafo de um grafo G quando o primeiro pode ser obtido a partir de G
pela remoção de vértices e/ou arestas. Obviamente G é um subgrafo de G. Notou a semelhança com a Teoria dos
Conjuntos?
28
Exemplo 25. Determine qual(is) dos grafos H, F e J são subgrafos do grafo G, todos presentes na Figura 3.8:
Solução: Note que o grafo H é subgrafo do grafo G uma vez que pode ser obtido removendo-se as arestas af e bd do
grafo G (remoção de arestas é válida); O grafo F também é um subgrafo do grafo G uma vez que pode ser obtido
removendo-se o vértice f do grafo G (remoção de vértices é válida); O grafo J não é um subgrafo do grafo G pois a
aresta ab presente em J não faz parte do grafo G (“acréscimo”de arestas ou vértices não são válidos).
Definição 10. A união de dois grafos simples G1 = (V1 , E1 ) e G2 = (V2 , E2 ) é o grafo simples com o conjunto de
vetores V1 ∪ V2 e o conjunto de arestas E1 ∪ E2 . A união de G1 e G2 é denotada por G1 ∪ G2 .
Solução: O conjunto de vértices da união G1 ∪ G2 é a união dos dois conjuntos de vértices, a saber, {a, b, c, d, e, f }. O
conjunto de arestas da união é a união dos dois conjuntos de arestas. A união é exibida na Figura 3.10.
29
Figura 3.10: União dos grafos G1 e G2 .
3.4 Exercı́cios
Exercı́cio 10. Determine o número de vértices e o número de arestas que os grafos a seguir possuem:
a) C10 b) W8 c) K9 d) K9,12
Exercı́cio 11. Determine quais dos grafos a seguir (Figura 3.10) são bipartidos:
Exercı́cio 13. Considere a a deifinição a seguir: Um grafo simples é dito regular se todo vértice deste grafo tiver o
mesmo grau. Para quais valores de n os grafos a seguir são regulares?
a) Kn b) Cn c) Wn
30
3.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
31
Plano de Aula
Aula 4
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Representação de Grafos.
Duração: 100 min
Objetivos:
- Apresentar a representação de um grafo por meio de listas de adjacência;
- Apresentar representações matriciais de um grafo.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
32
Capı́tulo 4
Representação de Grafos
Apresentaremos neste capı́tulo algumas formas de se representar um grafo. Tais formas serão muito úteis à medida
que caminhamos na teoria. Representar um grafo de uma forma não necessariamente geométrica nos possibilitará usar
não só ferramentas matemáticas como também computacionais. A máquina “entende” mais facilmente uma matriz
(usada em algumas representações) que um desenho! Além disso, algumas formas de se representar um grafo nos
permitirão observar em quais casos temos dois grafos aparentemente diferentes, mas que representam um mesmo
grafo, o chamado isomorfismo de grafos.
Exemplo 27. Construa uma lista de adjacência para representar o grafo da Figura 4.1.
33
Exemplo 28. Represente o grafo orientado mostrado na Figura 4.2 listando todos os vértices que são o terminal
vértices de arestas começando em cada vértice do grafo.
34
Exemplo 29. Use uma matriz de adjacência para representar o grafo mostrado na Figura 4.3.
Solução: Temos a seguinte matriz de adjacência referente ao grafo apresentado na Figura 4.3:
0 1 0 0 1 1
1 0 0 1 1 0
0 0 0 1 1 0
0 1 1 0 1 1
1 1 1 1 0 0
1 0 0 1 0 0
A utilização de matrizes de adjacência comporta grafos contendo múltiplas arestas. Neste caso, repassa-se o valor
1 para a quantidade de arestas entre os vértices em questão. Grafos com loops também são comportados utilizando-se
1 na posição aii para cada laço existente em um dado vértice.
Exemplo 30. Use uma matriz de adjacência para representar o grafo mostrado na Figura 4.4.
Solução: Temos a seguinte matriz de adjacência referente ao grafo apresentado na Figura 4.4:
0 0 1 2 1
0 1 0 0 1
1 0 0 0 0
2 0 0 0 2
1 1 0 2 0
35
4.2.2 Matrizes de Incidência
Uma outra maneira comum de representar um grafo é usando as chamadas matrizes de incidência. Seja G = (V, E)
um grafo não orientado. Suponha que v1 , v2 , · · · , vn são os vértices e e1 , e2 , · · · , em sejam as arestas de G. Então a
matriz de incidência com respeito à ordenação de V e E é a matriz n × m M = [mij ], em que
1 quando aresta e incide sobre v
j i
aij =
0 do contrário
Solução: Temos a seguinte matriz de incidência referente ao grafo apresentado na Figura 4.5:
e1 e2 e3 e4 e5
a 1 1 1 0 0
b
0 0 0 1 0
c
1 0 0 0 0
0
d 0 0 1 1
e 0 0 1 1 1
Palavra do Mestre 4. Observe, no Exemplo 31, que a enumaração das arestas foi feita usando-se a ordem
lexicográfica, isto é, as arestas e1 , e2 , e3 , e4 e e5 estão ligadas à seguinte ordem ac, ad, ae, be e de respectivamente.
Fazendo desta forma ficará mais fácil entender como o computador processará cada dado de forma “organizada”.
Ao fazermos manualmente, a escolha, pode ser arbitrária (você escolhe como quiser), contudo, isso poderá
dificultar na hora da programação. Para o caso de múltiplas arestas xy fazemos assim xy1 = ei , xy2 = ei+1 e
assim sucessivamente até acabar todas as múltiplas aretas xy. Confira no Exemplo 32.
Matrizes de incidência também podem ser usadas para representar grafos contendo múltiplas arestas ou loops.
36
Exemplo 32. Exiba a matriz de incidência do grafo mostrado na Figura 4.6.
Solução: Temos a seguinte matriz de incidência referente ao grafo apresentado na Figura 4.6:
e1 e2 e3 e4 e5 e6 e7
a 1 1 1 1 0 0 0
0
b 0 0 0 1 0 0
1
c 0 0 0 0 0 0
0
d 1 1 0 0 1 0
e 0 0 0 1 1 1 1
4.3 Exercı́cios
Exercı́cio 14. Apresente listas de adjacências para representar os grafos dados:
37
Exercı́cio 16. Construa grafos cujas matrizes de adjacência são dadas a seguir:
0 1 0 0 0 1
1 0 1 0 1 0
0 1 0 2
0 1 0 1 0 0 1 1 2 0
a) b)
0 0 1 0 1 0 0 2 0 1
0 1 0 1 0 1
2 0 1 0
1 0 0 0 1 0
Exercı́cio 17. Apresenta a matriz de incidência de cada um dos grafos a seguir (Siga a ordem lexicográfica para a
enumeração das arestas, isto é, ab = e1 , ac = e2 etc):
38
1 1 0 1 1
1 0 1 0 0
0 1 0 0 1
1 0 0 0 1
1 0 1 1 0
Resposta do Exercı́cio 17. a) Considerando a escolha das arestas em ordem lexicográfica, temos: ab = e1 , ad = e2 ,
bc = e3 , cd = e4 , ce = e5 e de = e6 , donde segue:
1 1 0 0 0 0
1 0 1 0 0 0
0 0 1 1 1 0
0 1 0 1 0 1
0 0 0 0 1 1
b) Considerando a escolha das arestas em ordem lexicográfica, temos: ab = e1 , ad1 = e2 , ad2 = e3 , bb = e4 , bc1 = e5 ,
bc2 = e6 , cd = e7 , donde segue:
1 1 1 0 0 0 0
1 0 0 1 1 1 0
0 0 0 0 1 1 1
0 1 1 0 0 0 1
39
4.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
40
Plano de Aula
Aula 5
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Isomorfismo de grafos.
Duração: 100 min
Objetivos:
- Apresentar o conceito de isomorfismo;
- Apresentar exemplos envolvendo grafos isomorfos e não isomorfos;
- Entender as dificuldades computacionais relacionadas ao isomorfismo.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
41
Capı́tulo 5
Isomorfismo de Grafos
Em muitas situações precisamos saber se dois grafos têm a mesma estrutura quando ignoramos as identidades de
seus vértices? Por exemplo, em quı́mica, os grafos são usados para modelar compostos quı́micos. Compostos diferentes
podem ter a mesma fórmula molecular, mas diferem na estrutura. Tais composto pode ser representado por grafos
que não podem ser desenhados da mesma maneira.
Exemplo 33. Mostre que os grafos G = (V, E) e H = (W, F ) mostrados na Figura 15 são isomorfos.
Solução: A função f com f (a) = s, f (b) = v, f (c) = u e f (d) = t é uma correspondência um-a-um entre V e W . Para
ver que essa correspondência preserva a adjacência, observe que os vértices adjacentes em G são a e b, a e c, b e d, e c
e d, e cada um dos pares f (a) = s e f (b) = v, f (a) = s e f (c) = u, f (b) = v e f (d) = t, e f (c) = u e f (d) = t consiste
em dois vértices adjacentes em H.
Muitas vezes é difı́cil determinar se dois grafos simples são isomorfos. Existem n! possibilidades de correspondências
um-a-um entre os conjuntos de vértices de dois grafos simples com n vértices. Testar cada correspondência para se
verificar se preserva a adjacência é impraticável se n for grande demais, até mesmo para o computador. Contudo, em
grande parte das situações, não é difı́cil mostrar que dois grafos não são isomorfos quando assim acontecer. Podemos
mostrar que dois grafos não são isomorfos se pudermos encontrar uma propriedade que apenas um dos grafos tenha e
o outro não. Uma propriedade preservada pelo isomorfismo de grafos é chamado invariante grafo. Por exemplo, grafos
42
simples isomorfos devem ter o mesmo número de vértices, pois há uma correspondência um-a-um entre os conjuntos de
vértices dos grafos. Grafos simples isomorfos também devem ter o mesmo número de arestas, pois a correspondência
um-a-um entre os vértices estabelece uma correspondência um-a-um entre arestas. Além disso, os graus dos vértices
em grafos simples isomorfos devem ser os mesmos. Isto é, um vértice v de grau α em G deve corresponder a um vértice
f (v) de grau α em H, pois um vértice w em G é adjacente a v se, e somente se, f (v) e f (w) são adjacentes em H.
Exemplo 34. Mostre que os grafos G e H mostrados na Figura 5.2 não são isomorfos.
Solução: Ambos G e H têm cinco vértices e seis arestas cada um. No entanto, H tem um vértice de grau um, w,
enquanto G não nenhum. Segue-se que G e H não são isomorfos. Consegui ver outras três formas de mostrar que G
e H não são isomorfos! Consegue ver algum outro argumento que não o usado acima?
Solução: Os grafos G e H têm oito vértices e dez arestas cada um. Eles também têm dois vértices de grau dois e quatro
vértices de grau três. Como todos esses invariantes concordam, ainda é concebı́vel que esses grafos sejam isomorfos.
No entanto, G e H não são isomorfos. Para ver isto, note que deg(a) = 2 em G, a deve corresponder tanto a t, u, x,
ou y em H, uma vez que estes são os vértices de grau dois em H. No entanto, cada um desses quatro vértices em H
é adjacente a outro vértice de grau dois em H, o que não é verdade para a em G.
43
Exemplo 36. Determine se os grafos G e H mostrados na Figura 5.4 são isomorfos.
Solução: Ambos G e H têm seis vértices e sete arestas. Ambos tâm quatro vértices de grau dois e dois vértices de
grau três. Também é fácil ver que os subgrafos de G e H consistem de todos os vértices de grau dois e as arestas que
os conectam são isomórficas (como o leitor deve verificar). Como G e H concordam com relação a esses invariantes, é
razoável tentar encontrar um isomorfismo f . Pois bem, vejamos se há um isomorfismo entre G e H.
Vamos agora definir uma função f e depois determinar se é um isomorfismo. Como deg(a) = 2 e a não é adjacente a
nenhum outro vértice de grau dois, a imagem de a deve ser v ou x, os únicos vértices de grau dois em H. Além disso
v e x são adjacentes a vértices de grau 3 em H. Nós arbitrariamente definimos f (a) = x. [Se descobrimos que essa
escolha não levou ao isomorfismo, então tentarı́amos f (a) = v.] Como b é adjacente a a, as imagens possı́veis de b são
u e w. Nós arbitrariamente definimos f (b) = u. Continuando desta maneira, usando adjacência de vértices e graus
como um guia, definimos f (c) = v, f (d) = w, f (e) = s e f (f ) = t. Temos portanto uma correspondência um-a-um
entre o conjunto de vértices de G e o conjunto de vértices de H, ou seja, f (a) = x, f (b) = u, f (c) = v, f (d) = w,
f (e) = s, f (f ) = t. Para ver se f preserva bordas, examinamos a matriz de adjacência de G:
0 1 0 1 0 0
1 0 1 0 0 1
0 1 0 1 0 0
Ag =
1 0 1 0 1 0
0 0 0 1 0 1
0 1 0 0 1 0
44
5.2 Exercı́cios
Exercı́cio 18. Verifique se cada par de grafos é um isomorfismo. Em caso afirmativo exiba o isomorfismo.
Exercı́cio 19. Encontre todas as correspondências um-a-um entre os conjuntos A = {a, b, c} e B = {s, t, u}. Acres-
cente mais um elemento a cada conjunto e repita o que foi pedido anteriormente. Consegue explicar o motivo de um
computador demorar quando se busca um possı́vel isomorfismo?
Resposta do Exercı́cio 19. Para os conjuntos A = {a, b, c} e B = {s, t, u} temos: 1. f (a) = s, f (b) = t e f (c) = u;
2. f (a) = s, f (b) = u e f (c) = t; 3. f (a) = t, f (b) = s e f (c) = u; 4. f (a) = t, f (b) = u e f (c) = s; 5. f (a) = u,
f (b) = s e f (c) = t; 6. f (a) = u, f (b) = t e f (c) = s; Deixamos o restante a cargo do leitor. Em caso de dúvida,
procure o professor.
45
5.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
46
Plano de Aula
Aula 6
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Caminhos e Aplicações.
Duração: 100 min
Objetivos:
- Apresentar o conceito de caminho em um grafo;
- Relacionar os conceitos de caminho e isomorfismo;
- Utilizar matrizes na contagem de caminhos entre vértices.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
47
Capı́tulo 6
Caminhos e Aplicações
Neste capı́tulo apresentaremos o conceito de conectividade bem como algumas aplicações voltadas ao isomorfismo
e também a um problema de contagem bem interessante.
6.1 Caminhos
Informalmente, um caminho é uma sequência de arestas que começa em um vértice de um grafo e viaja de vértice
para vértice ao longo das arestas do grafo. À medida que o caminho percorre suas bordas, ele visita os vértices ao
longo desse caminho, isto é, os pontos finais dessas arestas.
Definição 12. Seja n um inteiro não negativo e G um grafo não orientado. Um caminho de comprimento n de u para
v em G é uma sequência de n arestas e1 , . . . , en de G para o qual existe uma sequência x0 = u, x1 , . . . , xn−1 , xn = v
de vértices tais que ei tem, para i = 1, . . . , n, os pontos finais xi−1 e xi . Quando o grafo é simples, denotamos este
caminho pela sua sequência de vértices x0 , x1 , ..., xn . O caminho é um circuito se começa e termina no mesmo vértice,
isto é, se u = v, e tem comprimento maior que zero. O caminho ou circuito é dito passar pelos vértices x1 , x2 , . . . , xn−1
ou atravessar as arestas e1 , e2 , . . . , en . Um caminho ou circuito é simples se não contiver a mesma borda mais de uma
vez.
Exemplo 37. No grafo simples mostrado na Figura 6.1, a, b, e, f, c é um caminho simples de comprimento 4, pois
{a, b}, {b, e}, {e, f } e {f, c} são todas as arestas. No entanto, a, b, f, e não é um caminho, pois {b, f } não é uma aresta.
Note que a, b, c, e, a é um circuito de comprimento 4 pois {a, b}, {b, c}, {c, e} e {e, a} são arestas, e esse caminho começa
e termina em a. O caminho a, b, c, b, e, f , que é de comprimento 5, não é simples pois contém a borda {b, c} duas vezes.
Evite usar a palavra caminho quando se referir a uma aresta, exceto nos casos em que se estiver de fato tratando
de um caminho de comprimento 1.
48
Definição 13. Seja n um inteiro não negativo e G um grafo orientado. Um caminho de comprimento n de u para v
em G é uma sequência de arestas e1 , e2 , . . . , en de G tal que e1 está associado a (x0 , x1 ), e2 está associado a (x1 , x2 ),
e assim por diante, com en associado a (xn−1 , xn ), onde x0 = u e xn = v. Quando não há múltiplas arestas no grafo
orientado, esse caminho é denotado por sua sequência de vértices x0 , x1 , x2 , . . . , xn . Um caminho de comprimento
maior que zero que começa e termina no mesmo vértice é chamado de circuito ou ciclo. Um caminho ou circuito é
chamado simples se não contiver a mesma borda mais de uma vez.
Exemplo 38. No grafo orientado simples mostrado na Figura 6.2, a, b, c, e é um caminho simples de comprimento 3,
pois (a, b), (b, c) e (c, e) são todas as arestas. No entanto, a, b, e, d não é um caminho, pois (b, f ) não é uma aresta.
Note que a, b, c, e, a é um circuito de comprimento 4 pois (a, b), (b, c), (c, e) e (e, a) são arestas, e esse caminho começa
e termina em a. O caminho a, b, c, e, c, que é de comprimento 4, não é simples pois contém a borda (e, c) duas vezes.
Solução: Ambos G e H têm seis vértices e oito arestas. Cada um tem quatro vértices de grau três e dois vértices de
grau dois. Assim, os três invariantes - número de vértices, número de arestas e os graus dos vértices - concordam para
os dois grafos. Entretanto, H tem dois circuitos simples de comprimento três, t, u, v, t e s, w, x, s, enquanto G não
49
possui um circuito simples de comprimento três, como pode ser determinado por inspeção. Como a existência de um
circuito simples de comprimento três é um invariante isomorfo, G e H não são isomorfos.
Solução: Tanto G como H têm cinco vértices e seis arestas, ambos têm dois vértices de grau três e três vértices de
grau dois, e ambos possuem um circuito simples de comprimento três, um circuito simples de comprimento quatro e
um circuito simples de comprimento cinco. Como todos esses invariantes isomorfos concordam, G e H ainda podem
ser isomorfos. Verifique!.
Palavra do Mestre 5. Podemos usar caminhos para encontrarmos um possı́vel isomorfismo mais rapidamente.
Para tanto, bastamos procurar caminhos (de preferência circuitos) envolvendo o máximo de vértices em cada um
dos grafo de modo que a sequência de graus se repita em ambos. Considerando o grafo G do Exemplo 40 temos
um circuito a, b, c, e, d, a cuja sequência de graus associada é dada, respectivamente, por 2, 3, 2, 3, 2, 2. Um bom
sinal da existência de um isomorfismo entre G e H é a existência de um circuito com mesma sequência de graus.
Por insperção temos a seguinte sequência t, u, v, w, s, t cuja sequência de graus é também 2, 3, 2, 3, 2, 2. Neste caso,
pode-se verificar que há um isomorfismo entre G e H dado por f (a) = t, f (b) = u, f (c) = v, f (d) = s, f (e) = w.
Pegou a manha? Daria para ensinar esta forma à máquina? A pergunta foi pra você, eu ensino só matemática!
Teorema 5. Seja G um grafo com matriz de adjacência A em relação à ordenação v1 , v2 , . . . , vn dos vértices do grafo
(com arestas direcionadas ou não direcionadas, com múltiplas arestas e loops). O número de caminhos diferentes de
comprimento r de vi para vj , onde r é um inteiro positivo, é igual à entrada (i, j) de Ar .
Demonstração. O teorema será provado usando indução matemática. Seja G um grafo com a matriz de adjacencia A
(assumindo uma ordenação v1 , v2 , . . . , vn dos vértices de G). O número de caminhos de vi para vj de comprimento 1
é a entrada (i, j) de A, pois esta entrada é o número de arestas de vi paravj . Suponha que a (i, j)-ésima entrada de Ar
é o número de caminhos diferentes de comprimento r de vi para vj . Esta é a hipótese indutiva. Como Ar+1 = Ar A,
a (i, j)-ésima entrada de Ar+1 é igual a
50
em que bik é a (i, k)-ésima entrada de Ar . Pela hipótese indutiva, bik é o número de caminhos de comprimento r de vi
para vk . Um caminho de comprimento r + 1 de vi para vj é constituı́do por um caminho de comprimento r de vi para
algum vértice intermediário vk e uma borda de vk para vj . Pela regra do produto para contagem, o número desses
caminhos é o produto do número de caminhos de comprimento r de vi para vk , a saber, bik é o número de arestas de
vk para vj , akj . Quando esses produtos são adicionados para todos os possı́veis vértices intermediários vk , o resultado
desejado segue a regra de soma para contagem.
Exemplo 41. Quantos caminhos de comprimento 4 existem de a para d no grafo simples G na Figura 6.5?
Assim, o número de caminhos de comprimento quatro de a para d é (1, 4)-ésima entrada de A4 . É bom saber usar um
software para o cálculo matricial!
8 0 0 8
0 8 8 0
A4 =
0 8 8 0
8 0 0 8
Portanto, temos 8 caminhos. A saber, os caminhos são: ababd, abacd abdbd, abdcd, acacd, acdac, acdbc e acdcd. É
melhor saber quantas agulhas há no palheiro antes de ir buscar! Neste existiam 8.
6.4 Exercı́cios
Exercı́cio 20. Com base no grafo G dado a seguir analise cada uma das afirmações classificando-as em verdadeiras
ou falsas.
51
b) A sequência a, b, c, d corresponde a um caminho de comprimento 3 no grafo G.
c) A sequência a, b, d, e, a corresponde a um circuito simples de comprimento 4 no grafo G.
d) O grafo G não possui circuitos de comprimento igual a 3.
Exercı́cio 21. Use caminhos para mostrar que os pares de grafos não são isomorfos ou para ter uma ideia de um
possı́vel isomorfismo. Justifique.
Resposta do Exercı́cio 21. a) não isomorfos, b) não isomorfos, c) isomorfos, d) não isomorfos
52
6.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
53
Plano de Aula
Aula 7
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Conectividade.
Duração: 100 min
Objetivos:
- Apresentar o conceito de conectividade em grafos não orientados;
- Relacionar conectividade e segurança de uma rede;
- Apresentar o conceito de conectividade em grafos orientados.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
54
Capı́tulo 7
Conectividade
Muitos problemas podem ser modelados com caminhos formados ao percorrer as arestas dos grafos. Por exemplo, o
problema de determinar se uma mensagem pode ser enviada entre dois computadores usando links intermediários pode
ser estudada com um modelo grafo. Problemas de planejamento eficiente de rotas para entrega de correspondências,
coleta de lixo, diagnósticos em redes de computadores e assim por diante podem ser resolvidos usando modelos que
envolvam caminhos em grafos.
Exemplo 42. O grafo G na Figura 7.1 é conexo pois, para cada par de vértices distintos há um caminho entre eles
(Se não acredita, verifique. Não acredite em tudo que te dizem.). No entanto, o grafo H na Figura 7.1 não é conexo.
Por exemplo, não há caminho de H entre os vértices s e v.
Teorema 6. Existe um caminho simples entre cada par de vértices distintos de um grafo não orientado conexo.
Demonstração. Seja u e v dois vértices distintos do grafo não orientado conexo G = (V, E). Como G está conexo,
existe pelo menos um caminho entre u e v. Deixe x0 , x1 , . . . , xn , em que x0 = u e xn = v, seja a sequência de vértices
de um caminho de menor comprimento. Esse caminho de menor comprimento é simples. Para ver isso, suponha
55
que não seja simples. Então xi = xj para alguns i e j com 0 ≤ i ≤ j. Isto significa que existe um caminho de u
para v de menor comprimento com a sequência de vértices x0 , x1 , . . . , xi−1 , xj , . . . , xn obtido pela exclusão das arestas
correspondentes à sequência de vértices xi , . . . , xj−1 .
Note que, no Exemplo 42, o grafo H possui dois subgrafos conexos, formados respectivamente pelos conjuntos de
vértices (e respectivas arestas) H1 = {s, t, x; st, sx} e H2 = {u, v, w; uv, uw, vw}.
Definição 15. Um componente conexo de um grafo G é um subgrafo conexo de G que não é um subgrafo próprio de
outro subgrafo conexo de G.
Decorre da Definição 15 temos que um componente conexo de um grafo G é um subgrafo conexo máximo de G.
Um grafo G não conexo possui dois ou mais componentes conexos que são separados e têm G como sua união.
Voltando ao subgrafo H do Exemplo 42 temos que os subgrafos H1 e H2 são componentes conexas de H. Por
outro lado, um subgrafo H3 formado apenas pelos vértices s e t e pela aresta {s, t} não é considerada uma componente
conexa, embora seja conexo. Isso decorre do fato de existir o subgrafo conexo H1 que o contém propriamente.
Exemplo 43. Encontre os vértices de corte e as arestas de corte do grafo G mostrado na Figura 7.2. Em cada caso
exiba os subgrafos conexos resultantes de cada remoção.
Solução: Temos dois vértices de corte, b e d. O vértice b quando removido produz as componentes conexas G1 =
{a, c; ac} e G2 = {d, e, f ; de, df }; O vértice d quando removido produz as componentes conexas G3 = {a, b, c, e; ab, ac, bc, be}
e G4 = {f }. Temos apenas uma aresta de corte a aresta {f, d} cuja remoção produz as componentes conexas
G5 = {a, b, c, d, e; ab, ac, bc, bd, be, de} e G6 = {f }.
56
Nem todos os grafos possuem vértices de corte. Por exemplo, o grafo completo Kn , com n ≥ 3, não possui vértices
de corte. Quando você remove um vértice de Kn e todas as bordas incidentes a ele, o subgrafo resultante é o grafo
completo Kn−1 , um grafo conexo. Grafos conexos sem vértices de corte são chamados de grafos não separáveis e, além
disso são considerados mais conexos do que aqueles com um vértice de corte. Podemos estender essa noção definindo
uma medida mais precisa de conectividade de grafos baseada no número mı́nimo de vértices que podem ser removidos
para desconectar um grafo.
Um subconjunto V 0 do conjunto de vértices V de G = (V, E) é um corte de vértices, ou conjunto de separação, se
G − V 0 for desconexo. Definimos a conectividade de vértices de um grafo não completo G, denotado por κ(G), como
sendo o número mı́nimo de vértices em um corte de vértices.
Analogamente, podemos medir a conectividade de um grafo conexo G = (V, E) em termos do número mı́nimo
de arestas que devemos remover para desconectá-lo. Se um grafo tiver uma aresta de corte, precisaremos apenas
removê-la para desconectar G. Se G não tiver uma aresta de corte, procuramos o menor conjunto de arestas que
podem ser removidas para desconectá-lo. Um conjunto de arestas E é chamado de corte de arestas de G se o subgrafo
G − E 0 é desconexo. A conectividade de aresta de um grafo G, denotada por λ(G), é o número mı́nimo de arestas em
um corte de aresta de G. Isso define λ(G) para todos os grafos conexos com mais de um vértice pois sempre é possı́vel
desconectar tal grafo, removendo todas as arestas incidentes em um dos seus vértices. Note que λ(G) = 0 se G é não
conexo. Também especificamos que λ(G) = 0 se G é um grafo que consiste em um único vértice. Segue que se G é
um grafo com n vértices, então 0 ≤ λ(G) ≤ n − 1.
Exemplo 44. Encontre a conectividade de vértices e por arestas de cada um dos grafos na Figura 7.3.
Solução: Ambos grafos da Figura 7.3 são conexos. Note que o vértice b de G é um vértice de corte donde segue
que κ(G) = 1 uma vez que removendo-se b produzimos subgrafos conexos G1 = {a, c; ac} e G2 = {d, e, f ; de, df, ef }.
Ainda considerando o grafo G, temos λ(G) = 2, pois removendo-se duas arestas, digamos {b, d} e {b, e} produzimos
dois subgrafos conexos G3 = {a, b, c; ab, ac, bc} e G4 = {d, e, f ; de, df, ef }; Considerando o grafo H, temos κ(H) = 2
pois, removendo-se os vértices b e f produzimos dois subgrafos conexos H1 = {a, e; ae} e H2 = {c, d, g, h; cd, cg, gh}.
Ainda considerando o grafo H, temos que λ(H) = 3 pois, precisamos remover ao menos três arestas para produzir
subgrafos desconexos. Em particular, se removermos as arestas {a, b}, {a, e} e {a, f } produziremos os subgrafos
conexos H3 = {a} e H4 = {b, c, d, e, f, g, h; be, bc, bd, bh, cd, cg, df, f e, f g, f h, gh}.
Quando G = (V, E) é um grafo conexo incompleto com pelo menos três vértices, o grau mı́nimo de um vértice de G
é um limite superior para κ(G) e λ(G). Ou seja, κ(G) ≤ minv∈V deg(v) e λ(G) ≤ minv∈V deg(v). Temos, a seguinte
inequação:
κ(G) ≤ λ(G) ≤ minv∈V deg(v).
57
7.3 Conectividade em Grafos Orientandos
Existem duas noções (Definição 16 e Definição 17) de conectividade em grafos orientados associadas as direções
de suas arestas.
Definição 16. Um grafo orientado é fortemente conexo se houver um caminho de a para b e de b para a sempre que
a e b forem vértices no grafo.
Definição 17. Um grafo orientado é fracamente conexo se houver um caminho entre cada dois vértices no grafo não
orientado associado.
Exemplo 45. Os grafos orientados G e H mostrados na Figura 7.4 estão fortemente conexos? Eles estão fracamente
conexos?
Solução: G é fortemente conexo pois existe um caminho entre quaisquer dois vértices neste grafo orientado (o leitor
deve verificar isso). Portanto, G também é fracamente conexo. O grafo H não é fortemente conexo. Não há caminho
orientado de s para t neste grafo. No entanto, H é fracamente conexo, pois existe um caminho entre quaisquer dois
vértices no grafo não orientado associado a H (o leitor deve verificar isso).
Os subgrafos de um grafo orientado G que estão fortemente conexos, mas não contidos em subgrafos maiores
fortemente conexos são chamados de componentes fortemente conexos ou componentes fortes de G. Note que se a e b
são dois vértices em um grafo direcionado, seus componentes fortes são os mesmos ou são disjuntos.
Exemplo 46. O grafo H na Figura 7.4 possui três componentes fortemente conexos, H1 consistindo no vértice s; H2
consistindo no vértice w; e o subgrafo H3 consistindo dos vértices t, u, e v e arestas (t, u), (u, v) e (v, t). Como dito
anteriormente, Hi ∩ Hj = ∅ sempre que i 6= j com i, j ∈ {1, 2, 3}.
O Programa 4, em linguagem Python 3, mostra se existe ou não um caminho entre dois vértices em um grafo
orientado.
58
7.4 Exercı́cios
Exercı́cio 23. Determine se cada um desses grafos está fortemente conexo e se não, se está fracamente conexo.
Exercı́cio 24. Encontre os componentes fortemente conexos dos grafos dados a seguir:
Resposta do Exercı́cio 24. a) G1 = {a, f, b}, G2 = {c, e}, G3 = {d}, b) H1 = {m, n, o, p, q, t}, H2 = {s}, H3 = {r}
59
7.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
60
Plano de Aula
Aula 8
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Circuito e Caminho de Euler.
Duração: 100 min
Objetivos:
- Definir circuito e caminho de Euler;
- Apresentar resultados que ajudem na identificação de grafos contendo circuitos e caminhos de Euler;
- Apresentar um algoritmo na busca por um circuito de Euler;
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
61
Capı́tulo 8
Surgia aı́ uma pergunta enigmática. Era possı́vel começar em algum lugar da cidade, atravessar todas as pontes
uma única vez e voltar ao ponto de partida?
No ano de 1736 o matemático suı́ço Leonhard Euler resolveu esse problema. Sua solução é considerada o primeiro
uso formal da teoria dos grafos. Euler estudou este problema usando o multigrafo obtido quando as quatro regiões são
representadas por vértices e as pontes por arestas. Este multigrafo é mostrado na Figura 8.2.
62
Definição 18. Um circuito de Euler em um grafo G é um circuito simples que contém todas as arestas de G. Um
caminho de Euler em G é um caminho simples que contém todas as arestas de G.
Exemplo 47. Quais dos grafos não orientados da Figura 8.3 possuem um circuito Euler? Daqueles que não têm,
quais têm um caminho de Euler?
Solução: O grafo F possui um caminho de Euler e, b, a, d, c, f, e, d; O grafo G possui um circuito de Euler dado por
l, k, h, g, i, n, h, i, m, j, n, g, l; O grafo H não possui circuito ou caminho de Euler.
Exemplo 48. Quais dos grafos orientados da Figura 8.4 possuem um circuito Euler? Daqueles que não têm, quais
têm um caminho de Euler?
Palavra do Mestre 6. Observe, no Exemplo 47, não parece ser tarefa muito fácil encontrar um circuito ou
caminho de Euler. Além disso, como procurar algo se nem se quer sabemos que existe. Isto não é matemática.
Em muitos casos a matemática se atém em mostrar a existência de certo objeto antes de procurá-lo. Imagine
procurar um circuito ou caminho de Euler em um grafo algumas dezenas de vértices sem ao menos saber se
tais objetos existem. Para a nossa felicidade temos teoremas que asseguram a existencia de tais objetos quando
atendidas algumas condições. Antes de procurar uma agulha no palheiro seria bom saber se há uma agulha no
palheiro!
63
Teorema 7. Um multigrafo conexo com pelo menos dois vértices tem um circuito de Euler se, e somente se, cada um
de seus vértices tiver um grau par.
Teorema 8. Um multigrafo conexo possui um caminho de Euler, mas não um circuito de Euler, se e somente se, tiver
exatamente dois vértices de grau ı́mpar.
Exemplo 49. Voltando ao Exemplo 47 temos que os graus de todos os vértices do grafo G tem grau par e portanto,
o Teorema 7 assegura existência de um circuito de Euler. Por outro lado, temos no grafo F exatamente dois vértices
de grau ı́mpar, d e e. Neste caso, o Teorema 8 assegura a existência de um caminho de Euler. Por fim, o grafo H não
atende aos requisitos de nenhum dos Teoremas 7 e 8 e portanto não pode comportar um circuito ou caminho de Euler.
O Programa 5 verifica se um grafo tem um circuito de Euler ou tem um caminho de Euler ou nenhum dos dois.
Teorema 9. Um multigrafo orientado sem vértices isolados tem um circuito de Euler se, e somente se, o grafo estiver
fracamente conexo e o grau de entrada e saı́da de cada vértice forem iguais.
Teorema 10. Um multigrafo orientado sem vértices isolados tem um caminho de Euler mas não um circuito de Euler
se, e somente se, o grafo estiver fracamente conexo e o grau de entrada e saı́da de cada vértice forem iguais para todos,
exceto dois vértices u e v, um que deg + (u) = deg − (u) + 1 e deg + (v) + 1 = deg − (v) (ou vice versa).
Exemplo 50. Voltando ao Exemplo 48 temos que todos os vértices do grafo F tem graus de entrada e saı́da iguais
a 1 e portanto o Teorema 9 assegura a existência de um circuito de Euler. Por outro lado, o grafo G é tal que
todos os seus vértices exceto dois, m e j são iguais a 1 sendo que os citados são tais que deg + (m) = deg − (m) + 1 e
deg + (j) + 1 = deg − (j) e portanto o Teorema 10 assegura a existência de um caminho de Euler. Por fim, o grafo H
não atende aos requisitos de nenhum dos Teoremas 9 e 10 e portanto não pode comportar um circuito ou caminho de
Euler.
Ao considerarmos um grafo estando certos da existência de um ciclo Euleriano podemos usar o algoritmo a seguir
para encontrá-lo.
64
Exemplo 51. Aplique o Algoritmo 1 ao grafo G do Exemplo 47.
Solução: Primeiro, formamos o ciclo g, n, j, m, i, h, g formamos o subgrafo H excluindo todas as arestas deste ciclo
e todos os vértices que se tornaram isolados quando essas arestas foram removidas. A seguir, formamos o ciclo
l, k, h, n, i, g, l. Acompanhe os passos na Figura 8.5:
Para finalizar devemos formar o ciclo Euleriano. Note que entre os ciclos a ao menos um vértice comum (por quê?).
Observe que o vértice g está em ambos e, sendo este o “começo”de um dos ciclos podemos usá-lo como ponto de
ligação entre os dois ciclos, isto é
l, k, h, n, i ↔ g, n, j, m, i, h, g ↔ l
(1) (2) (3)
O Programa 6, em linguagem Python 3, aplica o algoritmo de Fleury em um grafo. Caso o grafo não tenha um
circuito ou caminho de Euler o programa exibe um caminho ou circuito interno qualquer (O ideal é aplicar o
programa em um grafo contendo um caminho ou circuito de Euler.)
8.2 Exercı́cios
Exercı́cio 25. Para cada um dos grafos a seguir, primeiro determine a existência ou não de um circuito ou caminho
de Euler. Se existir um exiba-o. (Menino de 5a série vai logo cobrindo o desenho!)
Exercı́cio 26. Utilize o Algoritmo 2 para determinar ciclos Eulerianos dos grafos (Eulerianos) contidos no Exercı́cio
25.
65
8.3 Respostas dos Exercı́cios
Resposta do Exercı́cio 25. a) Existe um circuito de Euler a, b, c, d, e, f, g, a, c, e, a, b) Existe um caminho de Euler
i, j, k, h, i, m, h, l, j, m, l, i, k, c) Não existe circuito ou caminho de Euler, d) Não existe circuito ou caminho de Euler,
e) Existe um circuito de Euler g, h, i, k, j, g, i, l, m, g, f) Existe um caminho de Euler o, p, q, o, r.
Resposta do Exercı́cio 26. Grafo F : Ciclo 1: a, b, c, d, e, a, Ciclo 2: f, g, a, c, e, f , Ciclo Euleriano: f, g, /a, b, c, d, e, a, /c, e, f ;
Grafo J: Pode aplicar? Acreditamos que sim pois os graus de entrada e de saı́da são pares. Ciclo 1: m, g, h, i, l, m,
Ciclo 2: g, i, k, j, g, Ciclo Euleriano: m, /g, i, k, j, g, /h, i, l, m.
66
8.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
67
Plano de Aula
Aula 9
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Circuito e Caminho de Hamilton
Duração: 100 min
Objetivos:
- Definir circuito e caminho de Hamilton;
- Apresentar resultados que ajudem na identificação de grafos.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
68
Capı́tulo 9
9.1 Introdução
Apresentamos condições necessárias e suficientes para a existência de caminhos e circuitos que contêm cada borda
de um multigrafo exatamente uma vez. Podemos fazer o mesmo para caminhos e circuitos simples que contêm todos
os vértices do grafo exatamente uma vez? Infelizmente, não. A busca pela existência de circuitos desta natureza é
algo relativamente difı́cil quando comparada à procura por circuitos ou caminhos de Euler. Apresentaremos alguns
resultados a seguir que nos possibilitarão mostrar a existência de circuitos com tais caracterı́sticas.
Exemplo 52. Quais dos grafos simples na Figura têm um circuito Hamilton ou, se não, um caminho Hamilton?
Solução: O grafo F possui um circuito de Hamilton dado por a, b, c, d, e, a. O grafo G não possui circuito ou caminho
de Hamilton. O grafo H possui um circuito de Hamilton u, s, t, v, w, r, u. O grafo I possui um caminho de Hamilton
o, p, m, n, q.
69
Os dois teoremas a seguir nos ajudarão na tarefa de identificar grafos contendo circuitos de Hamilton (somente
circuitos!).
Teorema 11. Se G é um grafo simples com n vértices com n ≥ 3 tais que o grau de todos os vértices em G é pelo
n
menos 2, então G tem um circuito de Hamilton.
Teorema 12. Se G é um grafo simples com n vértices, n ≥ 3 tais que deg(u) + deg(v) ≥ n para cada par de vértices
não adjacentes u e v em G, então G tem um circuito de Hamilton.
Exemplo 53. Voltando ao Exemplo 52 temos que, o grafo F é tal que a soma dos graus de todos vértices não
adjacentes é maior ou igual a 5 (neste caso, somente igual). De fato, os únicos pares não adjacentes são o par a e c e
o par a e d donde temos deg(a) + deg(c) = deg(a) + deg(d) = 5. Portanto o Teorema 12 assegura a existência de um
circuito de Hamilton. Note que o Teorema 11 não pode ser aplicado pois, deg(a) = 2 < 25 ; O grafo H é tal que cada
6
vértice possui grau superior a 2 e portanto o Teorema 11 assegura a existência de um circuito de Hamilton, note que
o Teorema 12 também se aplica ao grafo H para mostrar a existência de um circuito de Hamilton pois, a soma de não
adjacentes é superior a 6 (verifique os pares, r e t, u e v e por fim u e w. Note que nenhum dos Teoremas 11 e 12 se
aplica aos grafos G e I.
Palavra do Mestre 7. Há uma grande diferença entre a comprovação da existência de circuitos (ou caminhos)
de Euler e circuitos (ou caminhos) de Hamilton. No primeiro caso, temos teoremas do tipo “... se, e somente,...”e
no segundo caso, teoremas do tipo “Se...,então...”. Teoremas do tipo “...se e somente se...”são, em geral, muito
potentes quando comparados os “Se..., então...”. No caso da comprovação da existência de circuitos ou caminhos
de Euler acredito que não há qualquer dúvida até mesmo nos grafos mais complexos. Uma busca rápida identifica
a existência ou não de tais estruturas. Por outro lado, a comprovação da existência de um circuito de Hamilton
se mostrou mais aberta ao passo que nem todo grafo atende a pelo menos um dos dois teoremas dados. Além
disso é possı́vel que exista um circuito de Hamilton em um grafo mesmo que nenhum dos dois teoremas dados
tenha hipóteses satisfeitas. Para ver isto basta tomar, por exemplo, o ciclo C6 . Nele todos os vértices tem grau
6
2 que é menor que 2 (Teorema 11 não se aplica) e também, a soma de não adjacentes é igual 4 (Teorema 12 não
se aplica). Ao final do Exemplo 53 afirmamos que os Teoremas 11 e 12 não se aplicam aos grafos G e I. O que
isso significa? Na verdade as condições da hipótese (antes do “então”) não são verificadas e portanto somente
por inspeção ou usando outros resultados podemos ter certeza se existem ou não circuitos de Hamilton. Muito
cuidado com teoremas!
9.3 Exercı́cios
Exercı́cio 27. Para cada um dos grafos a seguir, se possı́vel, primeiro determine a existência ou não de um circuito
ou caminho de Hamilton. Se existir um exiba-o.
70
9.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
71
Plano de Aula
Aula 10
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: O Problema do Caminho Mais Curto.
Duração: 100 min
Objetivos:
- Apresentar o problema de se obter o caminho de menor custo entre dois vértices;
- Apresentar o algoritmo de Dijkstra;
- Utilizar o algoritmo de Dijkstra.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
72
Capı́tulo 10
Muitos problemas podem ser modelados usando grafos com pesos atribuı́dos às suas bordas. Neste capı́tulo
estaremos interessados em descobrir o trajeto entre dois vértices que minimiza a soma destes pesos.
Exemplo 54. Considere um sistema de linhas frete de mercadorias terrestres em certa região composta por 8 cidades.
Foi montado um modelo via grafos representando cidades por vértices e as tarifas aplicadas (em R$/ton) entre elas
como sendo o peso das arestas conforme ilustrado na Figura 10.1:
Note que há diversas opções de trajetos entre duas cidades quaisquer. Uma empresa que atue nesta região poderia
facilmente tabelar o valor de frete entre quaisquer duas cidades, são poucas. Contudo, isto poderia se tornar inviável
em situações nas quais o número de cidades pode ser maior. Ao final deste capı́tulo aplique os conhecimento adquiridos
para obter a rota de menor custo entre as cidades c1 e c6.
73
Exemplo 55. Qual é o caminho de comprimento mais curto entre a e f no grafo ponderado mostrado na Figura 10.2?
Solução: Embora o caminho mais curto seja facilmente encontrado por inspeção (neste caso!), desenvolveremos algumas
ideias úteis. Nós resolveremos esse problema encontrando o comprimento mais curto de um vértice para vértices
sucessivos, até que f seja alcançado. Inicialmente escolhemos o vértice de partida como sendo a. Neste caso, os
vértices b e c são adjacentes a este. Cada um deles contribui para a formação de duas trajetórias C1 : a, b → 6 e
C2 : a, c → 4. Neste caso, a trajetória C2 nos parece mais atrativa que a trajetória C1 para atualizarmos (menor
custo entre ambas). Neste caso, a única adjacência do vértice c (final da trajetória C2 ) é dado pelo vértice e. Assim,
temos a trajetória C3 : a, c, e → 9 que atualiza C2 . Note que temos duas trajetórias a analisar para continuar C1 e
C3 . Neste caso, optemos por aquela de menor custo, isto é, C1 . Note que e e d pertencem à adjacência do vértice b
(vértice final de C1 ). Assim, temos as trajetórias C4 : a, b, d → 11 e C5 : a, b, e → 11. Note que esta última, C5 tem o
vértice final coincidente com o vértice final de C3 . Neste caso, optamos por manter C3 pois tem comprimento menor
que C5 . Após esta etapa, temos dois caminhos a analisar uma possı́vel atualização C4 e C3 . Neste caso, optamos
por C3 pois tem comprimento menor. Note que C3 possui duas adjacências não pertencentes a ele b e f . Isto nos
fornece as trajetórias C6 : a, c, e, b → 14 que é descartada por conta de C1 e a trajetória C7 : a, c, e, f → 12. Nos
restam dois caminhos a analisar uma possı́vel atualização C4 e C7 (se bem que esse já terminou!). Note que C4 tem
comprimento menor e portanto deve ser atualizado. A única adjacência possı́vel para C4 é o vértice f o que nos fornece
o caminho C8 : a, b, d, f → 15. Por fim, temos uma disputa entre os caminhos C7 e C8 o qual optaremos por C7 que
possui comprimento menor. Assim, temos obtido o trajeto mı́nimo entre a e f ao custo de 12 por meio do caminho
C7 : a, c, e, f .
A Figura 10.3 ilustra a ordem das escolhas feitas:
Por fim, a seguinte tabela nos ajuda a entender o processo de forma mais prática.
74
Caminho vértices comprimento Atualização Cancelamento
C1 a, b 6 AT(2) : C1 → C4 ou C1 → C5 Não
C2 a, c 4 AT(1) : C2 → C3 Não
C3 a, c, e 9 AT(3) : C3 → C6 ou C3 → C7 Não
C4 a, b, d 11 AT(4) : C4 → C8 Não
C5 a, b, e 11 - Sim, para C3
C6 a, c, e, b 14 - Sim, para C1
C7 a, c, e, f 12 Trajetória mı́nima Não
C8 a, b, d, f 15 - Sim, para C7
Algoritmo 2. Dijkstra
. procedure (G: grafo simples conexo com todos os pesos positivos)
. { G tem vértices v0 , v1 , · · · vn , · · · e pesos w(vi , vj ) em que w(vi , vj )∞ se (vi , vj ) não for uma aresta de G }
. for i := 1 to n
. L(vi ) := ∞
. L(a) = 0
. S := ∅
. {os rótulos agora são inicializados de modo que o rótulo de a seja 0 e todos os outros sejam ∞, e S seja o
conjunto vazio}
. while vn ∈
/S
. begin
. u := um vértice que não está em S, com L(u) mı́nimo
. S := S ∪ {u}
. for todos os vértices v que não estão em S
. if L(u) + w(u, v) < L(v) then L(v) := L(u) + w(u, v)
. {isso adciona um vértice S com rótulo mı́nimo e atualiza os rótulos dos vértices que estão em S }
. end {L(vn ) = comprimento de um caminho mais curto de v0 para vn }
Exemplo 56. Qual é o caminho de comprimento mais curto entre a e f no grafo ponderado mostrado na Figura 10.4?
75
Figura 10.5: Ordem das escolhas feitas.
O Programa 8, em linguagem Python 3, apresenta o caminho de menor custo entre dois vértices arbitrários
usando algoritmo de Dikstra.
O Programa 9, em linguagem Python 3, apresenta os menores custos entre um vértice arbitrário e todos os
outros vértices de um grafo.
10.2 Exercı́cios
Exercı́cio 28. Aplique o algoritmo de Dijkstra para obter o caminho de menor soma dos pesos entre os vértices a e
f no grafo ponderado fornecido.
76
Exercı́cio 29. Aplique o algoritmo de Dijkstra para obter o caminho de menor soma dos pesos entre os vértices a e
h no grafo ponderado fornecido.
77
10.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
78
Plano de Aula
Aula 11
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Grafos Planares.
Duração: 100 min
Objetivos:
- Entender o conceito de grafo planar;
- Apresentar condições para se identificar um grafo planificável.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
79
Capı́tulo 11
Grafos Planares
11.1 Problematizando
Considere o problema de unir três casas a cada um dos três utilitários separados, água, gás e eletricidade, como
mostra a Figura 11.1. É possı́vel unir, de forma “plana”, essas casas e utilitários para que nenhuma das conexões
seja cruzada? Este problema pode ser modelado usando o grafo bipartido completo K3,3 . A questão original pode ser
reformulada como: O K3,3 pode ser desenhado no plano de modo que não haja duas de suas bordas cruzadas?
Nesta seção, estudaremos a questão: “Como saber se um dado grafo pode ser desenhado no plano sem cruzar as
arestas?”. Há sempre muitas maneiras de representar um grafo. Quando é possı́vel encontrar pelo menos uma maneira
de representar este grafo em um plano sem nenhuma borda cruzando?
Definição 20. Um grafo é chamado planar se puder ser desenhado no plano sem nenhuma aresta cruzando (onde um
cruzamento de arestas é a interseção das linhas ou arcos que os representam em um ponto diferente de seu ponto final
comum). Esse desenho é chamado de representação planar do grafo.
80
A planaridade dos grafos também é útil no projeto de redes rodoviárias. Suponha que queremos conectar um grupo
de cidades por estradas. Podemos modelar uma rede viária conectando essas cidades usando um grafo simples com
vértices representando as cidades e as arestas representando as rodovias que as conectam. Podemos construir essa rede
rodoviária sem usar passagens subterrâneas ou viadutos caso o grafo resultante seja plano. Qual o custo de construção
de cada 1 km de túnel, e de viaduto? Bem mais caro que de uma estrada comum, não?
Teorema 13. Seja G um grafo simples planar conexo com e bordas e v vértices. Seja r o número de regiões em uma
representação planar de G. Então r = e − v + 2.
Exemplo 58. Uma representação planar do grafo G mostrado na Figura 11.3 divide o plano em seis regiões (a parte
externa ao grafo também conta!).
Note que o grafo G conta com 8(v) vértices e 12(e) arestas. Por fim,
6 = 12 − 8 + 2,
Exemplo 59. Suponha que um grafo simples planar conexo tenha 6 vértices, cada um de grau 4. Em quantas regiões
uma representação deste grafo planar divide o plano?
Solução: Como a soma dos graus dos vértices é igual a duas vezes o número de arestas (Teorema 1 repassando m para
e), temos que
24
4 · 6 = 2e ⇔ e == 12
2
. Consequentemente, da fórmula de Euler (Teorema 13), o número de regiões é r = e − v + 2 = 12 − 6 + 2 = 8.
Corolário 1. Se G é um grafo simples planar conectado com e arestas e v vértices, onde v ≥ 3, então e ≤ 3v − 6.
81
Revisando 1. A contrapositiva de uma proposição (teorema, corolário ou lema) da forma P ⇒ Q é a proposição
da forma ¬Q ⇒ ¬P e tem valor logicamente equivalente à primeira.
Palavra do Mestre 8. Note que, no Exemplo 60, usamos a contrapositiva do Corolário 1. De modo geral
usaremos este corolário para mostrar que um grafo não é planar. O mesmo se dará com os dois corolários
seguintes! Para exemplificar, vejamos a contrapositiva do Corolário 1: “Se G é um grafo com e arestas e v
vértices tais que e > 3v − 6, então G não é simples ou não é planar ou não é conexo.”No Exemplo 60 sabiamos
que K5 era simples e conexo além de conhecermos o número de vértices e arestas. Portanto só restava a ele
não ser planar. Destrinchando, o Corolário 1 pode ser visto simbolicamente como P ∧ Q ∧ R ⇒ S com P : G
é um grafo simples, Q: G é um grafo conexo, R: G é um grafo planar e S: e ≤ 3v − 6. Portanto, tomando a
contrapositiva, temos:
¬S ⇒ ¬(P ∧ Q ∧ R) ≡ ¬S ⇒ ¬P ∨ ¬Q ∨ ¬R
Como dito, ¬P é falsa pelo enunciado (G é simples), ¬Q é falsa pelo enunciado (G é conexo) e portanto ¬R tem
que ser verdadeira, isto é, G não será planar. Reflita bem sobre o que foi exposto aqui.
Com base nas ideias expostas no tópico Palavra do Mestre 8 usaremos o Corolário 3 em sua contrapositiva de
modo a mostrar que um dado grafo simples e conexo não é planar quando e > 3v − 6 (ou que um grafo simples e
planar não pode ser conexo ou que um grafo conexo e planar não pode ser simples, em qualquer caso, e > 3v − 6).
Temos, na mesma linha, o resultado a seguir.
Corolário 2. Se um grafo simples planar conectado tiver e arestas e v vértices com v ≥ 3 e nenhum circuito de
comprimento três, então e ≤ 2v − 4.
Exemplo 61. Use o Corolário 2 para mostrar que K3,3 não é plano.
Solução: Como K3,3 não possui circuitos de comprimento três (isso é fácil de ver pois é bipartido), o Corolário 2 pode
ser usado. K3,3 tem seis vértices e nove arestas. Como e = 9 e 2v − 4 = 8, o Corolário 2 mostra que K3,3 é não plano.
Corolário 3. Se G é um grafo simples planar conectado, então G tem um vértice de grau que não excede cinco.
A utilização do Corolário 3 segue a mesma linha dos corolários anteriores nos quais são consideradas suas contra-
positivas. Assim, um grafo cujos vértices apresentem graus superiores a cinco seja simples e conexo, este não poderá
ser planar. Caso seja planar e conexo este não poderá ser simples e, por fim, caso seja simples e planar este não poderá
ser conexo. Note que a ‘simplicidade’ e a conexidade de um grafo podem ser trivialmente verificadas de tal sorte que
o primeiro caso é o que nos interessa.
Teorema 14. Um grafo não é plano se, e somente se, contiver um subgrafo homeomórfico para K3,3 ou K5 .
Revisando 2. A grosso modo, um hoemomorfismo é uma transformação que preserva a forma topológica.
A Figura 11.4 ilustra um homeomorfismo existente entre um toro (câmara de ar de um pneu) e uma xı́cara.
Outros homeomorfismo clássicos se dão entre um quadrado e uma circunferência e o triplo homeomorfismo
triplo existente entre um cilindro, uma esfera e um cone conforme ilustrados na Figura 11.5. Formalmente,
um homeomorfismo é definido como: Dois espaços topológicos dizem-se homeomorfos se existir uma aplicação
entre esses espaços que seja contı́nua, invertı́vel e a sua inversa seja contı́nua. Homeomorfismos preservam
número de divisões do plano/espaço.
82
Figura 11.4: Homeomorfismo entre um toro e uma xı́cara.
Solução: G tem um subgrafo H homeomórfico a K5 . H é obtido excluindo b e he todas as arestas incidentes com esses
vértices juntamente com uma das arestas que ligam os vértices i e c. H é homeomórfico a K5 como pode ser visto na
Figura 11.7.
83
11.3 Exercı́cios
Exercı́cio 30. Cinco casas podem ser conectadas a dois utilitários (água e luz, por exemplo) sem conexões cruzadas?
Exercı́cio 31. Desenhe, se possı́vel, o grafo a seguir sem que suas arestas se cruzem.
Exercı́cio 32. Determine se cada um dos grafos a seguir é planar. Em caso afirmativo, desenhe-o de modo que
nenhuma aresta se cruze.
84
Resposta do Exercı́cio 32. a) Não, b) Sim, c) Não, d) Sim, e) Não. As planificações dos grafos dados nos itens b)
e d) são dadas a seguir:
85
11.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
86
Plano de Aula
Aula 12
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Grafos
Tema da Aula: Coloração de Grafos.
Duração: 100 min
Objetivos:
- Apresentar o conceito de coloração de grafos;
- Relacionar os conceitos de coloração e planariedade de um grafo.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
87
Capı́tulo 12
Coloração de Grafos
12.1 Problematizando
Problemas relacionados à coloração de mapas de regiões, como mapas de partes do mundo, geraram muitos
resultados na teoria dos grafos. Quando um mapa é colorido, duas regiões com uma borda comum, como regra, devem
ter cores diferentes. Uma maneira de garantir que duas regiões adjacentes nunca tenham a mesma cor é usar uma
cor diferente para cada região. No entanto, isso é ineficiente e em mapas com muitas regiões, seria difı́cil distinguir
cores semelhantes. Em vez disso, busca-se a utilização do menor número de cores possı́veis. Considere o problema
de determinar o menor número de cores que podem ser usadas para colorir um mapa de modo que regiões adjacentes
nunca tenham a mesma cor. Por exemplo, para o mapa mostrado na Figura 12.1 pode ser colorido com no mı́nimo
quantas cores de modo que regiões adjacentes apresentem cores diferentes?
O mada dado na Figura 12.1 pode ser representado por um grafo. Neste caso, cada região do mapa será representada
por um vértice. Existirá uma borda conectando dois vértices se as regiões representadas por esses vértices apresentarem
uma fronteira comum. Se duas regiões se tocarem em um só ponto (modelo real inviável) elas não serão consideradas
adjacentes. Segue o grafo associado ao mapa da Figura 12.1:
88
O problema de colorir as regiões de um mapa é equivalente ao problema de colorir os vértices do grafo associado, de
modo que nenhum dos dois vértices adjacentes neste grafo tenham a mesma cor. Nós agora definimos uma coloração
de grafos.
12.2 Coloração
Definição 21. Uma coloração de um grafo simples é a atribuição de uma cor a cada vértice do grafo, de modo que
não haja dois vértices adjacentes atribuı́dos à mesma cor.
Definição 22. O número cromático de um grafo é o menor número de cores necessárias para uma coloração deste
grafo. O número cromático de um grafo G é denotado por χ(G). (Aqui χ é a letra grega chi.)
Exemplo 63. Determine o número mı́nimo de cores que se pode usar para colorirmos o mapa dado na Figura 12.1.
Solução: Tal problema é equivalente a determinarmos o número cromático do grafo G associado ao mapa em questão
conforme descrito na Figura 12.2. Pois bem, comecemos atribuindo a cor azul ao vértice A. Como B é adjacente
a A(azul) devemos usar uma segunda cor, digamos a vermelha. Note que C é adjacente tanto a A(azul) quanto a
B(vermelho). Neste caso, necessitamos uma terceira cor, digamos verde. Prosseguindo, temos que D é adjacente
a A(azul) e a C(verde). Neste caso, não podemos usar as cores azul ou verde, mas podemos usar a cor vermelha.
Lembre-se que estamos interessados no menor número de cores. O vértice E é adjacente aos vértices B(vermelho) e
C(verde) e portanto não podemos usar as cores tais cores, mas ainda podemos usar a cor azul. Por fim, o vértice F é
adjacente os vértices C(verde), D(vermelho) e E(azul) e, sendo assim, precisamos de uma quarta cor, digamos a cor
cinza. Portanto, o número cromático do grafo G é dado por χ(G) = 4. Acompanhe as cores na Figura 12.3.
Teorema 15. O número cromático de um grafo planar não é maior que quatro.
O Teorema 15 estabelece uma cota superior para o número cromático de um grafo planar. Podemos então concluir
que é possı́vel pintar qualquer mapa de modo que regiões vizinhas não tenham a mesma cor com apenas 4 cores,
pois todo mapa admite uma representação planar (Consegue ver?). Além disso, temos uma ferramenta bastante útil
para mostrarmos que um certo grafo G não é planificável alem daquelas apresentadas no capı́tulo anterior. Basta
observarmos se χ(G) > 4. Novamente a contrapositiva! Contudo, tome cuidado ao pensar o contrário. Nem todo
grafo com número cromático menor ou igual a 4 é planar. Lembre-se do grafo bipartido K3,3 que não é planar mas
χ (K3,3 ) = 2 < 4.
89
vi , i = 1, 3, 5, · · · n − 2 são pintados com, digamos, a cor azul. Os vértices vi = 0, 2, 4, · · · , n − 1 serão pintados com a
cor vermelha. Note que o vértice vn é adjacente aos vértices v1 (azul) e vn−1 (vermelho) donde segue a necessidade de
uma terceira cor. Assim, χ(Cn ) = 2 se n for par e χ(Cn ) = 3 se n for ı́mpar.
Exemplo 66. Qual é o número cromático do grafo bipartido completo Km,n , onde m e n são inteiros positivos?
Solução: Km,n é bipartido. Logo, somente duas cores são necessárias.
Infelizmente, não existe um algoritmo eficiente disponı́vel para colorir um grafo com um número mı́nimo de cores,
pois o problema é conhecido como NP Completo. Existem algoritmos aproximados para resolver o problema. O que
temos são algoritmos gulosos1 .
O Programa 11, em linguagem Python, apresenta um algoritmo guloso básico para atribuir cores. Não garante
o uso de cores mı́nimas, mas garante um limite superior no número de cores. O algoritmo básico nunca usa mais
de d + 1 cores onde d é o grau máximo de um vértice no grafo dado.
12.3 Exercı́cios
Exercı́cio 33. Determine o número cromático de cada um dos grafos a seguir:
1 Um algoritmo guloso é qualquer algoritmo que segue a heurı́stica de resolução de problemas de fazer a escolha localmente ideal em cada
estágio. Em muitos problemas, uma estratégia gulosa não produz uma solução ótima, mas uma heurı́stica gulosa pode produzir soluções
localmente ótimas que se aproximam de uma solução globalmente ótima em um perı́odo de tempo razoável.
90
Exercı́cio 36. Qual o menor número de cores que se pode pintar cada uma das figuras a seguir de modo que nenhuma
região tenha a mesma cor que outra com a qual faça fronteira?
Definição 23. Uma coloração de aresta de um grafo é uma atribuição de cores às arestas de forma que as arestas
incidentes com um vértice comum sejam atribuı́das com cores diferentes. O número cromático de aresta de um grafo é
o menor número de cores que podem ser usadas em uma coloração de borda do grafo. O número cromático da aresta
de um grafo G é denotado por χ0 (G).
91
12.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
92
Plano de Aula
Aula 13
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Introdução ao Estudo de Árvores.
Duração: 100 min
Objetivos:
- Apresentar o conceito de árvore;
- Definir o que vem a ser uma árvore com raiz;
- Apresentar o conceito de árvores m-cheias.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
93
Capı́tulo 13
13.1 Árvores
Agora estudaremos alguns grafos especiais conhecidos como árvores. Tais grafos bastante úteis na ciência da
computação sendo bastante empregadas em muitas situações. Por exemplo, as árvores são usadas para construir
algoritmos eficientes desempenhando a tarefa de localizar itens em uma lista. Eles podem ser usados em algoritmos
possibilitando a construção de códigos eficientes que economizam custos na transmissão e no armazenamento de dados.
As árvores são usadas para modelar procedimentos realizados usando uma sequência de decisões. A construção desses
modelos pode ajudar a determinar a complexidade computacional dos algoritmos com base em uma sequência de
decisões.
Definição 24. Uma árvore é um grafo não direcionado conectado, sem circuitos simples.
Exemplo 67. Quais dos grafos mostrados na Figura 13.1 são árvores?
Figura 13.1: Grafos que são árvores e grafos que não são árvores.
Solução: F e G são árvores, porque ambos são grafos conectados sem circuitos simples. H não é uma árvore pois
a, b, d, c, a é um circuito simples neste grafo. Finalmente, I não é uma árvore pois não é conexos (componentes
I1 = {a, b, c, f } e I2 = {d, e, g}).
Teorema 16. Um grafo não orientado é uma árvore se, e somente se, houver um caminho simples e único entre dois
dos seus vértices.
Qualquer grafo conexo que não contenha circuitos simples é uma árvore. E os grafos que não contêm circuitos
simples que não estão necessariamente conectados? Esses grafos são chamados de florestas e possuem a propriedade
de que cada um de seus componentes conectados é uma árvore. A figura 13.2 exibe uma floresta.
94
Exemplo 68. O grafo a seguir representa uma floresta.
Note que o grafo G é composto por duas árvores G1 = {a, b, c, d, e, f } e G2 = {g, h, i, j, k}. Observe que a “caixa”ao
redor das árvores G1 e G2 serve apenas para delimitar as componentes uma vez que trata-se de um grafo desconexo.
Definição 25. Uma árvore com raiz é uma árvore na qual um vértice foi designado como raiz e toda aresta é orientada
para longe da raiz.
É costume se fazer alguma analogia entre a botânica e árvores genealógica com alguns elementos que compõe as
árvores. Consideremos uma árvore enraizada T com raiz. Diremos que o pai de um vértice v, diferente da raiz, é o
único vértice u de T tal que existe uma única aresta orientada de u para v. Obviamente, se u é o pai de v, então v é o
filho de u. Vértices com um mesmo pai são ditos irmãos. Os ancestrais de um vértice diferente da raiz são os vértices
no caminho da raiz para este vértice, excluindo o próprio vértice e incluindo a raiz. Os descendentes de um vértice v
são aqueles vértices que possuem v como ancestral. Um vértice de uma árvore com raiz é chamado de folha se não
tiver filhos. Vértices que têm filhos são chamados vértices internos. A raiz é um vértice interno, a menos que seja o
único vértice no grafo, caso em que é uma folha.
Exemplo 69. Na árvore enraizada T (com raiz a) mostrada na Figura 13.3, encontre o pai de e, os filhos de d, os
irmãos de b, todos os ancestrais de j, todos descendentes de c, todos os vértices internos e todas as folhas.
95
Solução: O pai de e é c. Os filhos de d são g e h. Os irmãos de b são c e d. Os ancestrais de j são a, c e e. Os
descendentes de c são e, f , i e j. Os vértices internos são a, c, d, e e. As folhas são b, f , g, h, i e j.
Definição 26. Uma árvore com raiz é chamada de árvore de grau m se cada vértice interno não tiver mais que m
filhos. A árvore de grau m é dita m-cheia se cada vértice interno tiver exatamente m filhos. Uma árvore de grau 2 é
chamada de binária.
Exemplo 70. As árvores enraizadas T1 , T2 e T3 com raı́zes a, g e n, respectivamente são apresentadas na Figura
13.4. Classifique-as segundo a Definição 26:
Solução: T1 é uma árvore ternária não cheia pois, o vértice a possui 3 filhos (vértice interno com o maior número de
filhos) mas o vértice c possui apenas dois filhos. T2 é uma árvore binária cheia pois, cada um dos seus vértices internos
tem dois filhos. Em T3 cada vértice interno tem três filhos e, portanto, T3 é uma árvore ternária cheia.
13.3 Exercı́cios
Exercı́cio 38. Identifique quais dos grafos F , G e H a seguir são árvores, florestas ou nenhum. Justifique.
Exercı́cio 39. Considerando os grafos dados no Exercı́cio 38 transforme os grafos que não são uma árvore em uma
pela adição ou exclusão de uma única aresta.
96
Exercı́cio 41. Dada a árvore enraizada T com raiz a
determine:
a) os filhos de i
b) o pai de g
c) os ancestrais de l
d) os descendentes de h
e) os vértices internos
f) as folhas
Resposta do Exercı́cio 39. a) Exclusão da aresta {c, f }, c) Adição da aresta {o, n}.
97
Resposta do Exercı́cio 42. .
98
13.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
99
Plano de Aula
Aula 14
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Propriedades das Árvores.
Duração: 100 min
Objetivos:
- Apresentar propriedades das árvores relacionando número de vértices, vértices internos, folhas etc;
- Apresentar o conceito de árvore balanceada.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
100
Capı́tulo 14
Veremos neste capı́tulo algumas propriedades relacionando as quantidades de vértices de folhas e de vértices
internos.
Teorema 18. Uma árvore m-ária completa com i vértices internos contém n = mi + 1 vértices.
Exemplo 71. É possı́vel existir uma árvore binária completa com 6 vértices internos e 11 arestas? Se sim, desenhe-a.
Solução: Segundo o Teorema 17 uma árvore com 11 arestas possui 12 vértices. Pelo Teorema 18 temos que esta árvore
n−1
deve possuir i = m vértices internos. Substituindo os valores n = 12 e m = 2 (árvores binária) temos:
12 − 1 11
i= =
2 2
que não é uma divisão possı́vel considerando que o número de vértices internos é inteiro. Logo, tal árvore não pode
existir.
n−1 (m−1)n+1
Teorema 19. Uma árvore m-ária completa com n vértices tem i = m vértices internos e l = m folhas.
Exemplo 72. Suponha que alguém comece uma carta em cadeia. Cada pessoa que recebe a carta é solicitada a enviar
três cartas iguais para outras pessoas. Algumas pessoas fazem isso, mas outras não enviam cartas. Quantas pessoas
viram a carta, incluindo a primeira pessoa, se ninguém receber mais de uma carta e se a carta-corrente termina depois
de haver 91 pessoas que a leram, mas não a enviaram? Quantas pessoas enviaram cartas?
Solução: A carta em cadeia pode ser representada usando uma árvore quaternária. Os vértices internos correspondem
às pessoas que enviaram a carta, e as folhas correspondem a pessoas que não a enviaram. Como 91 pessoas não
enviaram a carta, o número de folhas nessa árvore enraizada é l = 91. Podemos usar o Teorema 19 com m = 3 e
obtermos o valor de n. Pois bem,
n−1 136 − 1
i= ⇒i= ⇒ i = 45.
m 3
Assim, 45 enviaram cartas.
101
l−1
Exemplo 73. Mostre que em uma árvore m-ária completa com l folhas temos i = m−1 vértices internos.
(m−1)n+1
Solução: Decorre do Teorema 19 que o número total de folhas em uma árvore m-ária completa é dada por l = m
em que n é o número total de vértices desta árvore. Além disso, o Teorema 17 assegura que, para uma árvore m-ária
qualquer, temos que o número total de vértices é dado por n = mi + 1. Substituindo esta última relação na primeira
temos:
(m − 1)n + 1 (m − 1)(mi + 1) + 1 m2 i + m − mi − 1 + 1
l= = = =
m m m
m2 i + m − mi m(mi + 1 − i)
= = = mi − i + 1 = i(m − 1) + 1
m m
Assim, obtemos a relação l = i(m − 1) + 1. Isolando i, temos o resultado desejado. De fato,
l−1
l = i(m − 1) + 1 ⇐ i(m − 1) = l − 1 ⇐ i = .
m−1
Geralmente, é desejável usar árvores com raiz que sejam balanceadas para que as subárvores em cada vértice
contenham caminhos com aproximadamente o mesmo comprimento. Algumas definições tornarão esse conceito claro.
O nı́vel de um vértice v em uma árvore com raiz é o comprimento do caminho único desde a raiz até este vértice. O
nı́vel da raiz é definido como zero. A altura de uma árvore com raiz é o máximo dos nı́veis de vértices. Em outras
palavras, a altura de uma árvore com raiz é o comprimento do caminho mais longo desde a raiz até qualquer vértice.
Definição 27. Uma árvore m-ária da altura h é dita balanceada se todas as folhas estiverem nos nı́veis h ou h − 1.
Exemplo 75. Quais das árvores enraizadas mostradas na Figura 14.2 estão balanceadas?
Solução: T1 é balanceada, pois todas as suas folhas estão nos nı́veis 2 ou 3. T2 é balanceada, pois todas suas folhas
estão no nı́vel 2. Finalmente, T3 não é balanceada, existem folhas nos nı́veis 1, 2 e 3 o que fere a Definição 27.
102
Figura 14.2: Algumas árvores enraizadas.
Exemplo 76. A árvore T , dada no Exemplo 74 é balanceada? Se não, pode-se-a mudar sua raiz de modo a torná-la
balanceada?
Solução: Não, pois a altura de T é igual a 4 e nem todos suas folhas estão nos nı́veis 4 ou 3(= 4 − 1). Por exemplo, a
folha e que está no nı́vel 2. Note que podemos balanceá-la ao repassarmos a raiz para o vértice d. Neste caso, todas
as folhas resultantes estarão no nı́vel 3 conforme podemos ver na Figura 14.3:
14.1 Exercı́cios
Exercı́cio 43. Quantas arestas tem uma árvore com 752 vértices?
Exercı́cio 44. Quantas arestas tem uma árvore binária completa com 300 vértices internos?
Exercı́cio 45. Suponha que 1000 pessoas participem de um torneio de xadrez. Use um modelo de árvore enraizada
do torneio para determinar quantos jogos devem ser jogados para determinar um campeão, se um jogador é eliminado
após uma perda e os jogos são jogados até que apenas um participante não tenha perdido. (Suponha que não haja
vı́nculos)
1 Outros dois resultados uteis relacionados à árvores são apresentados a seguir:
Corolário 4. Se uma árvore de grau m e altura h tem l folhas, h ≥ dlogm le. Se a árvore de grau m é completa e balanceada, então
h = dlogm le.
Revisando 3. A notação dxe é usada para indicar o menor inteiro maior que x. Por exemplo, d1.2e = 2, d1.9e = 2 e d3e = 3.
103
Exercı́cio 46. Ou desenhe uma árvore m-ária completa com 84 folhas e altura 3, onde m é um inteiro positivo, ou
mostre que não existe tal árvore.
104
14.3 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
105
Plano de Aula
Aula 15
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Pesquisa Binária.
Duração: 100 min
Objetivos:
- Apresentar o mecanismo de busca binária;
- Utilizar a busca binária para localizar e/ou inserir um vértice em uma árvore;
- Aplicar o conceito de busca binária em uma árvore de decisão.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
106
Capı́tulo 15
Exemplo 77. Construa uma árvore de busca binária para as palavras maçã, pêra, melão, goiaba, uva, ameixa e
tangerina nesta ordem. Adote a ordem lexicográfica.
Solução: A Figura 15.1 exibe as etapas usadas para construir essa árvore de pesquisa binária. A palavra maçã é a
raiz da árvore. Como pêra vem depois de maçã considerando a ordem alfabética esta ocupa o lugar de filho direito
da maçã que está vazio. A palavra melão vem depois de maçã e portanto deveria ocupar o lugar do filho direito dela.
Mas este já está ocupado pela pêra. Comparando melão com pêra temos que melão deve ocupar o local destinado ao
filho esquerdo da pêra pois vem antes desta em ordem alfabética e o espaço destinado a este filho está vazio. A palavra
goiaba vem antes de maçã e portanto deve ocupar o local do filho esquerdo desta que está vazio. A palavra uva vem
depois da palavra maçã e portanto segue para a posição de filho direito que está ocupada pela pêra. Como a palavra
uva vem depois de pêra temos que esta deverá ocupar o local de filho direito desta última. A palavra tangerina vem
107
depois da palavra maçã e portanto segue para a comparação com a palavra pêra e analogamente para a comparação
com a palavra uva. Como tangerina vem antes de uva esta deve ocupar o local destinado ao filho esquerdo desta
última. Por fim, a palavra ameixa vem antes de maçã e portanto segue para a posição de filho esquerdo desta que é
ocupado pela goiaba. A palavra ameixa vem antes de goiaba e portanto deve ocupar a posição de filho esquerdo desta
que está vazia. Coma frutas!.
A seguir apresentaremos uma algoritmo capaz de encontrar um valor em uma árvore de busca binária ou inserir
um novo vértice.
108
Figura 15.2: Inserção da palavra graviola na árvore de busca binária do Exemplo 77.
b) A inserção ou localização de um novo item pode exigir até 4 comparações. Para ver isso, note que uma palavra
que seja maior que maçã, pêra, uva e também tangerina irá exigir 4 comparações. De modo geral, o número de
comparações será, no máximo, igual a h + 1 em que h é a altura de uma árvore.
Exemplo 79. Suponha que existam sete moedas, todas com o mesmo peso, e uma moeda falsa que pesa menos que
as outras. No mı́nimo, quantas pesagens são necessárias usando uma balança para determinar qual das oito moedas
é a falsificada? Considere que estamos usando uma balança de pratos.
Solução: Existem três possibilidades para cada pesagem em uma balança. Os dois pratos podem ter peso igual, o
primeiro prato pode ser mais pesado ou o segundo prato pode ser mais pesado. Consequentemente, a árvore de decisão
para a sequência de pesagens é uma árvore ternária. Há pelo menos oito folhas na árvore de decisão porque há oito
resultados possı́veis (porque cada uma das oito moedas pode ser a moeda mais leve falsificada), e cada resultado
possı́vel deve ser representado por pelo menos uma folha. O maior número de pesagens necessárias para determinar a
moeda falsa é a altura da árvore de decisão. É possı́vel determinar a moeda falsa usando duas pesagens. A árvore de
decisão que ilustra como isso é feito é mostrada na Figura 15.3.
109
Figura 15.3: Uma árvore de decisão para localizar a moeda falsa associada ao Exemplo 79.
Note que o Corolário 4 nos possibilita saber quantas pesagens seriam necessárias para se chegar à moeda falsa no
Exemplo 79 (neste caso, a quantidade de pesagens será igual a altura h da árvore de decisão). Tratando-se de uma
árvore binária completa, temos que h = dlog3 8e = 2. Assim, pelo menos duas pesagens seriam necessárias.
Exemplo 80. Apresentamos na Figura 15.4 uma árvore de decisão que ordena os elementos da lista a, b, c em ordem
decrescente.
Figura 15.4: Uma Árvore de Decisão para Classificar Três Elementos Distintos.
Teorema 21. Um algoritmo de ordenação baseado em comparações binárias requer pelo menos dlog2 (n!)e com-
parações.
Exemplo 81. Considerando o Exemplo 80 temos que foram usadas dlog2 (3!)e = 3 comparações. Se tivéssemos que
colocar 10 números em ordem crescente precisarı́amos de pelo menos dlog2 (10!)e = 22 comparações.
15.3 Exercı́cios
Exercı́cio 47. Construa uma árvore de busca binária para as palavras Salvador, Brası́lia, Goiânia, Curitiba, Sobra-
dinho, Formosa e Manaus nesta ordem. Adote a ordem lexicográfica.
110
Exercı́cio 48. Quantas comparações são necessárias para localizar ou adicionar cada um desses itens na árvore de
busca do Exercı́cio 47. Os itens “a”, “b”, “c” e “d” são independentes?
a) Brası́lia b) Salvador c) Anagé d) Formosa
Exercı́cio 49. Usando ordem alfabética, construa uma árvore de busca binária para as palavras da frase “O IFBA é
uma grande instituição de ensino”.
Exercı́cio 50. Quantas pesagens de uma balança são necessárias para encontrar uma moeda falsa entre quatro moedas
se a moeda falsa puder ser mais pesada ou mais leve que as outras?
Exercı́cio 51. Quantas pesagens de uma balança são necessárias para encontrar uma moeda falsa entre 12 moedas
se a moeda falsa for mais leve que as outras? Descreva um algoritmo para encontrar a moeda mais leve usando este
número de pesagens.
111
15.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
112
Plano de Aula
Aula 16
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Travessia de Uma Árvore.
Duração: 100 min
Objetivos:
- Apresentar o sistema de endereçamento universal;
- Apresentar a travessia em pré-ordem;
- Apresentar a travessia em ordem simétrica;
- Apresentar a travessia em pós-ordem.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
113
Capı́tulo 16
Exemplo 82. Escreva o ordenamento lexicográfico dos rótulos da árvore mostrada na Figura 16.1.
114
Solução: O ordenamento lexicográfico dos rótulos é dado por:
0 < 1 < 1.1 < 1.2 < 1.2.1 < 1.2.2 < 2 < 2.1 < 2.2 < 3 < 3.1
Definição 28. Seja T uma árvore enraizada ordenada com raiz r. Se T consiste apenas de r, então r é o percurso de
pré-ordem de T . Caso contrário, suponha que T1 , T2 , . . . , Tn são as subárvores em r da esquerda para a direita em T .
A travessia da pré-ordem começa visitando r. Ele continua percorrendo T1 na pré-ordem, depois T2 na pré-ordem, e
assim por diante, até que Tn seja atravessado na pré-ordem.
Exemplo 83. Determine a sequência de vértices a serem percorridos em uma travessia em pré-ordem da árvore
enraizada T dada na Figura 16.2?
Solução: Primeiro pesquisamos a raiz a. Note que a tem três subárvores de raı́zes b, c e d. Consideremos a subárvore
mais a esquerda, isto é a subárvore de raiz b. Pesquisemos a raiz b e sua subárvore esquerda de raiz e (e em seguida
seus filhos se existissem). Prosseguindo, pesquisamos a subárvore de raiz f começando por esta raiz. Note que a
subárvore de raiz f tem filhos j e k. Pesquisamos o filho j e seus filhos l e m. Tendo pesquisado toda a subárvore
de raiz j partimos para o vértice k donde finalizamos a travessia da subárvore de raiz b. Como c é o irmão direito
mais próximo de b partiremos para a subárvore de raiz c pesquisando este vértice inicialmente e seus filhos g e h.
Tendo atravessado toda a subárvore de raiz c resta-nos apenas a subárvore de raiz d. Por fim, pesquisamos o vértice
d e, em seguida, ao chegar no vértice i, completamos a travessia da árvore T em pré-ordem. Assim, temos a seguinte
ordenação dos vértices em uma travessia em pré-ordem: a, b, e, f, j, l, m, k, c, g, h, d, i.
115
Palavra do Mestre 9. Há um truque simples para conferirmos se a ordem dos vértices de uma árvore em
uma travessia em pré-ordem está correta. Para tando, comece fazendo um pequeno sinal(sı́mbolo, marca etc)
à esquerda de cada vértice na árvore em questão. Depois, partindo da esquerda da raiz ligue todos estes sinais
em uma linha contı́nua “circulando”a árvore nas proximidades do seu vértice. A ordem com que os sinais foram
sendo pintados corresponde à pesquisa em pré-ordem. Esta regra não lhe isenta de saber o processo de travessia
uma vez que se quer entender o mecanismo de travessia para uma posterior implementação Só menino de segunda
série se contenta com truques somente! Acompanhe o truque na Figura 16.3:
O Programa 12, em linguagem Python 3, apresenta a travessia em pré-ordem de uma árvore enraizada.
Definição 29. Seja T uma árvore enraizada ordenada com raiz r. Se T consiste apenas de r, então r é a travessia
ordem simétrica de T . Caso contrário, suponha que T1 , T2 , . . . , Tn são as subárvores da esquerda para a direita. A
travessia ordem simétrica começa atravessando T1 e em seguida visitando r. Ele continua percorrendo T2 em ordem
simétrica, depois T3 em ordem simétrica, . . . e finalmente Tn em ordem simétrica.
Exemplo 84. Determine a sequência de vértices a serem percorridos em uma travessia em ordem simétrica da árvore
enraizada T dada na Figura 16.2?
Solução: Para facilitar retomemos a Figura 16.2:
Note que a raiz a de T tem subárvores T1 de raiz b, T2 de raiz c e T3 de raiz d. Antes de pesquisamos a raiz a devemos
116
pesquisar a subárvore T1 . Mas a subárvore T1 tem ela duas subárvores T1b de raiz e e T2b de raiz f . Neste caso,
pesquisamos primeiramente o vértice e (pois não possui mais subárvores) e em seguida sua raiz b. Partimos então
para a subárvore da direita T2b . Mas esta tem outras duas subárvores T1f de raiz j e T2f de raiz k. Assim, pesquisamos
em T1f o vértice l(pois não possui mais subárvores), em seguida a raiz j de T1f e por último o vértice m. Tendo feito a
travessia de T1f partimos para a raiz f e em seguida para o vértice k da árvore T2b . Como atravessamos toda subárvore
T1 de raiz b pesquisamos a raiz a e em seguida partimos para a subárvore T2 . Mas T2 tem duas subárvores T1c de raiz
g e T2c de raiz h. Neste caso, pesquisamos o vértice g (sem filhos), a raiz c e por último o vértice h. Tendo atravessado
toda subárvore T2 partimos para a subárvore T3 . Neste caso, pesquisamos o vértice i e depois a raiz d completando
a travessia da árvore T em ordem simétrica. Assim, temos a seguinte ordenação dos vértices em uma travessia em
ordem simétrica: e, b, l, j, m, f, k, a, g, c, h, i, d.
Palavra do Mestre 10. Mais uma boa notı́cia. Há, também, um truque simples para conferirmos se a ordem
dos vértices de uma árvore em uma travessia em ordem simétrica está correta. Para tando, comece fazendo
um pequeno sinal(sı́mbolo, marca etc) abaixo de cada vértice (entre a primeira aresta e as demais caso existam
abaixo do vértice) na árvore em questão. Depois, partindo da esquerda da raiz ligue todos estes sinais em uma
linha contı́nua “circulando”a árvore nas proximidades do seu vértice. A ordem com que os sinais foram sendo
pintados corresponde à pesquisa em ordem simétrica. Acompanhe o truque na Figura 16.4:
O Programa 13, em linguagem Python 3, apresenta a travessia em ordem simétrica de uma árvore enraizada.
Definição 30. Seja T uma árvore enraizada ordenada com raiz r. Se T consiste apenas em r, então r é a travessia de
pós-ordem de T . Caso contrário, suponha que T1 , T2 , . . . , Tn são as subárvores da esquerda para a direita. A travessia
de pós-ordem começa atravessando T1 no pós-ordem, depois T2 no pós-ordem, . . . , em seguida, Tn no pós-ordem e
termina visitando r.
Exemplo 85. Determine a sequência de vértices a serem percorridos em uma travessia em pós-ordem da árvore
enraizada T dada na Figura 16.2?
Solução: Para facilitar retomemos a Figura 16.2:
117
Note que a raiz a tem três subárvores T1 de raiz b, T2 de raiz c e T3 de raiz d. A subárvore T1 tem subárvores T1b
de raiz e e T2b de raiz f . Neste caso pesquisamos o vértice e e partimos para T2b . Note que T2b tem duas subárvores
T1f de raiz j e T2f de raiz k. Assim, partimos para a subárvore T1f que possui duas subárvores T1j de raiz l e T2j de
raiz m. Pesquisamos então o vértice l (nosso segundo vértice é pesquisado somente agora!), em seguida o vértice m e
só então a raiz j de T1f . Agora pesquisamos o vértice k correspondente à subárvore T2f para então pesquisar o vértice
f finalizando a travessia da subárvore T2b . Tendo finalizado a subárvore T2b pesquisamos o vértice b finalizando T1 .
Agora, passamos para a subárvore T2 a qual tem duas subárvores T1c de raiz g e T2c de raiz h. Neste caso, pesquisamos
o vértice g, em seguida o vértice h e por último o vértice c finalizando a travessia de T2 . Agora podemos partir para
a subárvore T3 . Note que esta tem somente uma subárvore T1d de raiz i. Sendo assim, pesquisamos o vértice i e
por último o vértice d finalizando T3 . Como fizemos a travessia de T1 , T2 e T3 em pós-ordem podemos percorrer,
finalmente, a raiz a completando a travessia em pós-ordem da árvore T . Assim, temos a seguinte ordenação dos
vértices em uma travessia em pós-ordem: e, l, m, j, k, f, b, g, h, c, i, d, a.
Palavra do Mestre 11. Analogamente aos processos de travessia em pré-ordem e também em ordem simétrica
há, também, um truque simples para conferirmos se a ordem dos vértices de uma árvore em uma travessia
em pós-ordem está correta. Para tando, comece fazendo um pequeno sinal(sı́mbolo, marca etc) à direita de
cada vértice na árvore em questão. Depois, partindo da esquerda da raiz ligue todos estes sinais em uma linha
contı́nua “circulando”a árvore nas proximidades do seu vértice. A ordem com que os sinais foram sendo pintados
corresponde à pesquisa em pós-ordem. Acompanhe o truque na Figura 16.5:
O Programa 14, em linguagem Python 3, apresenta a travessia em pós-ordem de uma árvore enraizada.
118
16.3 Exercı́cios
Exercı́cio 52. Considere as árvores G e H dadas a seguir:
Determine:
a) O percurso em pré-ordem de G.
b) o percurso em ordem simétrica de G
c) o percurso em pós-ordem de G.
d) O percurso em pré-ordem de H.
e) o percurso em ordem simétrica de H
f) o percurso em pós-ordem de H.
119
16.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
120
Plano de Aula
Aula 17
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Aplicação dos Processos de Travessia no Cálculo de Expressões Algébricas.
Duração: 100 min
Objetivo:
- Apresentar as notações prefixas, infixas e pós-fixas para representação de expressões matemáticas.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
121
Capı́tulo 17
Solução: A árvore binária dessa expressão pode ser construı́da de baixo para cima. Primeiro, uma subárvore para
a expressão x + y é construı́da. Então isto é incorporado como parte da subárvore maior representando (x + y)∧ 2.
Além disso, uma subárvore para x − 4 é construı́da e, em seguida, isso é incorporado em uma subárvore que representa
(x − 4)/3. Finalmente, as subárvores representando (x + y)∧ 2 e (x − 4)/3 são combinadas para formar a árvore
enraizada ordenada representando ((x + y)∧ 2) + ((x − 4)/3). Essas etapas são mostradas na Figura 17.1.
Figura 17.1: Passos para a representação por meio de uma árvore binária da expressão ((x + y)∧ 2) + ((x − 4)/3).
122
Exemplo 87. Qual é a sequencia da travessia em pré-ordem para ((x + y)∧ 2) + ((x − 4)/3)?
Solução: Obtemos a pré-ordem para essa expressão percorrendo a árvore binária que a representa na pré-ordem,
mostrada na Figura 17.1. Temos +, ∧ , +, x, y, 2, /, −, x, 4 e 3.
+, −, ∗, 2, 3, 5, /, ∧ , 2, 3 4
Solução: As etapas usadas para avaliar essa expressão trabalhando da direita para a esquerda e executando operações
usando um operador localizado à esquerda de dois valores numéricos seguidos. Os passos são mostradas na Figura
17.2:
Exemplo 89. Qual é a forma pós-ordem da expressão ((x + y)∧ 2) + ((x − 4)/3)?
Solução: Conforme visto no Exemplo 86 temos a seguinte árvore binária representando a expressão dada:
Obtemos a pós-ordem para essa expressão percorrendo a árvore binária que a representa na pré-ordem, mostrada na
Figura 17.1. Temos o seguinte percurso: x, y, +, 2, ∧ , x, 4, −, 3, /, +.
123
Exemplo 90. Qual é o valor da expressão do postfix 7, 2, 3, ∗, −, 4, ∧ , 9, 3, /, +?
Solução: As etapas usadas para avaliar essa expressão trabalhando da esquerda para a direita e executando operações
usando um operador localizado à direita de dois valores numéricos seguidos. Os passos são mostradas na Figura 17.3:
Exemplo 91. Qual é a sequencia da travessia em ordem simétrica da árvore binária dada no Exemplo 86?
Solução: Conforme visto no Exemplo 86 temos a seguinte árvore binária representando a expressão dada:
Note que a sequência de sı́mbolos obtida no Exemplo 91 coincide com a ordem na qual estes aparecem na ex-
pressão associada ((x + y)∧ 2) + ((x − 4)/3). Contudo, a notação infixada necessita de parênteses e portanto, so-
mente a sequência apresentada no Exemplo 91 é ambı́gua. Para resolvermos o problema da ambiguidade pode-
mos utilizar as notações prefixada obtida pela travessia em pré-ordem e notação pós-fixada obtida pela travessia em
pós ordem. As notações prefixada e pós-fixada são também conhecidas, respectivamente, por notação polonesa e
notação polonesa inversa.
17.2 Exercı́cios
Exercı́cio 53. Considere as expressões i) x ∗ y + x/z e ii) x + ((x ∗ y + x)/y):
a) Represente as expressões i) e ii) usando árvores binárias.
124
b) Escrevas as expressões i) e ii) codificação infixada.
c) Escrevas as expressões i) e ii) codificação prefixada.
d) Escrevas as expressões i) e ii) codificação pós-fixada.
Exercı́cio 54. Qual é o valor de cada uma dessas expressões em ordem prefixada?
a) −, ∗, 2, /, 8, 4, 3
b) ∧ , −, ∗, 3, 3, ∗, 4, 2, 5
c) +, −, ∧ , 3, 2, ∧ , 2, 3, /, 6, −, 4, 2
Exercı́cio 55. Qual é o valor de cada uma dessas expressões em ordem pós-fixada?
a) 6, 2, ∗, 3, /, 1, +
b) 4, 2, +, 3, 5, 2, −, +, ∗
c) 3, 2, ∧ , 5, 1, +, −, 2, 2, ∧ , ∧
b) i) x, ∗, y, +, x, /, z ii) x, +, x, ∗, y, +, x,/, y
c) i) +, ∗, x, y, /, x, z ii) +, x, /, +, ∗, x, y,x, y
d) i) x, y, ∗, x, z, /, + ii) x, x, y, ∗, x, +, y,/, +
125
17.4 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
126
Plano de Aula
Aula 18
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Árvores Geradoras.
Duração: 100 min
Objetivos:
- Apresentar o conceito de árvore geradora;
- Apresentar o algoritmo da busca em profundidade na obtenção de uma árvore geradora;
- Apresentar o algoritmo da busca em largura na obtenção de uma árvore geradora.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
127
Capı́tulo 18
Árvores Geradoras
18.1 Problematizando
Considere o sistema de estradas de terra que liga cidades de certa região representado pelo grafo simples mostrado
na Figura 18.1 (a). A fim de melhorar o transporte nesta região necessita-se asfaltar um número suficiente de estadas,
de preferência mı́nimo (devido ao custo), de modo que sempre exista um trajeto totalmente asfaltado ligando duas
cidades quaisquer desta região. Observe que pelo menos 5 estradas devem ser asfaltadas para atender à condição
imposta. A Figura 18.1 (b) mostra um desses conjuntos de estradas. Observe que o subgrafo representando essas
estradas é uma árvore, pois está conectado e contém seis vértices e cinco arestas.
Figura 18.1: (a) Um sistema rodoviário e (b) um conjunto de estradas a serem desobstruı́das.
Definição 31. Seja G um grafo simples. Uma árvore geradora de G é um subgrafo de G que é uma árvore contendo
todos os vértices de G.
Exemplo 92. Encontre uma árvore geradora do grafo simples G mostrado na Figura 18.2.
Solução: O grafo G está conectado, mas não é uma árvore, pois contém circuitos simples. Remova as arestas {d, c} e
128
{d, e}. Isso elimina um circuito simples, e o subgrafo resultante ainda está conectado e ainda contém todos os vértices
de G. Em seguida, remova a aresta {e, f } para eliminar um segundo circuito simples. Por fim, remova a aresta {g, h}
para produzir um grafo simples sem circuitos simples. Este subgrafo é uma árvore geradora, pois é uma árvore que
contém todos os vértices de G. A sequência de remoções de arestas usada para produzir a árvore de abrangência é
ilustrada na Figura 18.3.
Figura 18.3: Produzindo uma árvore geradora para G removendo arestas que formam circuitos simples.
A árvore mostrada na Figura 18.3 não é a única árvore geradora de G. Por exemplo, uma outra árvore geradora do
grafo G é dada na Figura 18.4.
Teorema 22. Um grafo simples é conectado se, e somente se, tiver uma árvore geradora.
Demonstração. Primeiro, suponha que um grafo simples tenha uma árvore geradora T . T contém todos os vértices de
G. Além disso, existe um caminho em T entre quaisquer dois dos seus vértices. Como T é um subgrafo de G, existe
um caminho em G entre quaisquer dois de seus vértices. Portanto, G está conectado.
Agora suponha que G esteja conectado. Se não for uma árvore, ela deve conter um circuito simples. Remova uma
aresta de um desses circuitos simples. O subgrafo resultante tem uma aresta a menos, mas ainda contém todos os
vértices de G e está conectado. Esse subgrafo ainda está conectado pois, quando dois vértices estão conectados por um
caminho contendo a aresta removida e esse caminho faz parte de um circuito simples que retorna para algum desses
vértices, então eles são conectados por um caminho que não contém essa aresta. Podemos construir esse caminho
inserindo-o no caminho original, no ponto em que a aresta removida era uma vez, o circuito simples com essa aresta
removida. Se este subgrafo não é uma árvore, tem um circuito simples; assim como antes, remova uma aresta que
esteja em um circuito simples. Repita este processo até que nenhum circuito simples permaneça. Isso é possı́vel pois
há apenas um número finito de arestas no grafo. O processo termina quando não há circuitos simples. Uma árvore é
produzida pois o grafo permanece conectado conforme as arestas são removidas. Esta árvore é uma árvore geradora
pois contém todos os vértices de G.
129
18.2 Busca em Profundidade
A demonstração do Teorema 22 fornece um algoritmo para encontrar árvores geradoras, removendo arestas de
circuitos simples. Esse algoritmo é ineficiente, pois requer que circuitos simples sejam identificados. Em vez de
construir árvores geradoras removendo arestas, podemos construı́-las adicionando arestas sucessivamente por meio
da busca em profundidade. Nós formaremos uma árvore enraizada, e a árvore geradora será o grafo não orientado
subjacente a esta árvore enraizada.
Arbitrariamente, escolha um vértice do grafo como a raiz. Forme um caminho começando neste vértice, adicionando
sucessivamente vértices e arestas, onde cada nova aresta incide com o último vértice no caminho e um vértice que
ainda não esteja no caminho. Continue adicionando vértices e arestas a esse caminho o maior tempo possı́vel. Se o
caminho percorrer todos os vértices do grafo, a árvore que consiste nesse caminho é uma árvore de abrangência. No
entanto, se o caminho não passar por todos os vértices, mais vértices e arestas deverão ser adicionados. Volte para
o próximo ao último vértice no caminho e, se possı́vel, forme um novo caminho começando neste vértice passando
por vértices que ainda não foram visitados. Se isso não puder ser feito, mova de volta outro vértice no caminho, ou
seja, dois vértices de volta no caminho e tente novamente. Repita este procedimento, começando no último vértice
visitado, movendo-se de volta pelo caminho um vértice de cada vez, formando novos caminhos que sejam o maior
tempo possı́vel até que não seja possı́vel adicionar mais arestas. Como o grafo tem um número finito de arestas e está
conectado, esse processo termina com a produção de uma árvore geradora. Cada vértice que termina um caminho em
um estágio do algoritmo será uma folha na árvore enraizada, e cada vértice onde um caminho é construı́do a partir
deste vértice será um vértice interno.
Exemplo 93. Use a busca em profundidade para encontrar uma árvore geradora para o grafo G mostrado na Figura
18.5.
Solução: Os passos usados pela primeira busca em profundidade para produzir uma árvore geradora de G são mostrados
na Figura 18.6. Nós começamos arbitrariamente com o vértice a (mas pode ser outro). Um caminho é construı́do
adicionando sucessivamente as arestas (seguindo alguma ordem, digamos a lexicográfica) incidentes com os vértices
que ainda não estão no caminho, desde que isso seja possı́vel. Isso produz um caminho a, c, b (note que outros caminhos
poderiam ter sido construı́dos caso usássemos um critério diferente da ordem lexicográfica). Em seguida, volte para
c. Agora adicionamos o caminho d, e, f . Voltando para o vértice e, adicionamos o caminho g, h, i. Voltando para o
vértice h, adicionamos, por último, o vértice j. Temos assim uma árvore geradora de G obtida por meio da busca em
profundidade.
130
Figura 18.6: Pesquisa em profundidade em G.
As arestas selecionadas pela busca em profundidade de um grafo são chamadas arestas da árvore. Todas as outras
arestas do grafo devem conectar um vértice a um ancestral ou descendente desse vértice na árvore. Essas arestas são
chamadas de arestas de retorno. No Exemplo 93 temos que as arestas de retorno são dadas por {d, f } e {e, h}
Palavra do Mestre 12. No Exemplo 93 poderı́amos ter optado pela escolha dos seguintes caminhos
a, c, d, f, e, g, h, j (caminho longo) voltando em seguida para o vértice h acrescentando a aresta {h, i}, depois
retornando ao vértice c e acrescentando a aresta {b, c}. A princı́pio não parece haver nenhum problema com esta
escolha. Contudo, em uma situação prática, ao darmos nomes aos vértices (no nosso caso, nomes formados por
uma única letra) podemos usar isso em nosso favor, principalmente quando precisarmos indicar à máquina qual
escolha tomar. Note que temos uma capacidade, pelo menos neste caso, de enxergar um caminho mais longo
quase que de imediato, muito diferente de uma máquina com uma programação simplificada, sem recursos visu-
ais! Lembre-se de que você está estudando esta matéria para usá-la em seu curso, futuramente implementando-a
e não somente para passar na prova.
131
O Programa 15, em linguagem Python 3, apresenta apresenta a ordem de escolha dos vértices considerando a
Busca em Profundidade.
Exemplo 94. Use a busca em largura para encontrar uma árvore geradora para o grafo mostrado na Figura 18.7.
Solução: Os passos do primeiro procedimento de busca são mostrados na Figura 94. Nós escolhemos o vértice a
(*vértice do nı́vel 0) como a raiz. Em seguida, adicionamos as arestas incidentes com todos os vértices adjacentes a
a. Assim, adicionamos os vértices (e suas arestas) b e d (vértices do nı́vel 1). A partir de b adicionamos os vértices c
e e (vértices do nı́vel 2). Ainda no nı́vel 1, a partir de d adicionamos o vértice h (vértice do nı́vel 2). A partir de c
adicionamos o vértice f (nı́vel 3). A partir de e adicionamos o vértice i (nı́vel 3). A partir de h adicionamos k (nı́vel
3). A partir de f adicionamos g e j (nı́vel 4). A partir de h adicionamos k. Note que não adicionamos mais vértice
algum a partir de i. Do contrário, terı́amos um circuito simples. A partir de g adicionamos l (nı́vel 5) e, por fim, a
partir de k adicionamos m. Temos assim uma árvore geradora de G obtida por meio da busca em largura.
132
Figura 18.8: Busca em largura em G.
O Programa 16, em linguagem Python 3, apresenta a ordem de escolha dos vértices considerando a Busca em
Largura.
133
18.4 Exercı́cios
Exercı́cio 56. Quantas arestas devem ser removidas de um grafo conectado com n vértices e m arestas para produzir
uma árvore geradora?
Exercı́cio 57. Quantas árvores geradoras diferentes cada um desses grafos simples possui?
a) K3 b) K4 c) K2,2 d) C5
Exercı́cio 58. Encontre arvores geradoras, a partir da raiz a, aplicando (i) a busca em profundidade e (ii) a busca
em largura. Explicite a ordem em que as arestas foram adicionadas utilizando a ordem lexicográfica.
134
18.6 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
135
Plano de Aula
Aula 19
Instituição: Instituto Federal de Educação, Ciência e Tecnologia da Bahia
Professor: Allan de Sousa Soares
Disciplina: Matemática Discreta II
Conteúdo Pragmático: Árvores
Tema da Aula: Árvores Geradoras Mı́nimas.
Duração: 100 min
Objetivos:
- Apresentar o conceito de árvores geradoras mı́nimas;
- Apresentar o algoritmo de Prim para a obtenção de árvores geradoras mı́nimas;
- Apresentar o algoritmo de Kruskal para a obtenção de árvores geradoras mı́nimas.
Metodologia:
- Aula expositiva participada.
Recursos Didáticos Utilizados:
- Apostila;
- Pincel e quadro branco;
- Datashow;
Avaliação:
- Observação;
- Resolução de exercı́cios.
Referência Principal:
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Bibliografia:
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
136
Capı́tulo 19
19.1 Problematizando
Uma empresa planeja construir uma rede de comunicações conectando seus seis centros empresariais. Alguns des-
ses centros podem ser vinculado a uma linha telefônica alugada já existente. Quais links devem ser feitos para garantir
que haja um caminho entre dois desses centros para que o custo total da rede seja minimizado? Podemos modelar esse
problema usando o grafo ponderado mostrado na Figura 19.1, onde vértices representam centros empresariais, arestas
representam possı́veis linhas dedicadas e os pesos nas arestas são as taxas de aluguel mensais das linhas representadas
pelas arestas. Podemos resolver esse problema ao encontrar uma árvore geradora de modo que a soma dos pesos das
arestas da árvore seja minimizada. Essa árvore geradora é chamada de árvore geradora mı́nima.
Figura 19.1: Grafo ponderado que mostra os custos mensais de aluguel de linhas em uma rede de computadores.
Definição 32. Uma árvore geradora mı́nima em um grafo ponderado conectado é uma árvore geradora que possui a
menor soma possı́vel de pesos de suas arestas.
137
Os algoritmos que apresentaremos a seguir para a obtenção de árvores geradoras mı́nimas a partir de um grafo
ponderado são algoritmos ótimos. Um algoritmo ótimo é um procedimento que faz uma escolha ideal em cada uma
de suas etapas. A otimização em cada etapa não garante que a solução geral ideal seja produzida. No entanto, os
dois algoritmos apresentados nesta seção para a construção de árvores geradoras mı́nima são algoritmos ótimos que
produzem soluções ótimas. Que beleza!
O primeiro algoritmo que discutiremos foi originalmente descoberto pelo matemático tcheco Vojtech Jarnı́k em
1930, que o descreveu em um jornal obscuro da República Tcheca. O algoritmo tornou-se bem conhecido quando foi
redescoberto em 1957 por Robert Prim. Por causa disso, é conhecido como algoritmo Prim (e às vezes como algoritmo
Prim-Jarnı́k).
Comece escolhendo qualquer borda com menor peso, colocando-a na árvore de abrangência. Acrescente sucessiva-
mente às arestas da árvore de peso mı́nimo que estão incidentes a um vértice já na árvore, nunca formando um circuito
simples com as arestas já existentes na árvore. Pare quando n − 1 arestas tiverem sido adicionadas.
Vejamos o algoritmo de Prim:
Exemplo 95. Use o algoritmo da Prim para projetar uma rede de comunicações de custo mı́nimo conectando todos
os computadores representados pelo grafo na Figura 19.1.
Solução: O algoritmo de Prim é realizado escolhendo uma borda inicial de peso mı́nimo e adicionando sucessivamente
bordas de peso mı́nimo que são incidentes a um vértice na árvore e que não irá formar circuitos simples. Iniciamos
escolhendo a borda de menor peso do grafo, isto é, Feira de Santana - Salvador [500]. Prosseguimos adicionando a
aresta de menor peso incidente aos vértices já adicionados à árvore (Feira e Salvador) de modo a não termos um
circuito simples, isto é, Salvador - Jequié [680]. Seguindo, temos que a aresta de menor peso incidente aos vértices
adicionados de modo a não termos um circuito simples é Jequié - Conquista [720] (Note que a aresta Feira de Santana
- Jequié não poderia ser adicionada pois terı́amos um circuito simples). Seguindo, temos que a aresta de menor peso
incidente aos vértices presentes na árvore é Vitória da Conquista - Guanambi [700]. Por fim, adicionamos a aresta
Vitória da Conquista - Ilhéus [720]. A soma mı́nima é dada por: R$ 3320. As arestas escolhidas estão destacadas na
Figura 19.2:
138
Figura 19.2: Uma árvore geradora mı́nima para o grafo ponderado na Figura 19.1
Observe que a árvore geradora não necessariamente é única. Em alguns casos temos que optar por arestas de
mesmo peso. Neste caso, recomenda-se usarmos alguma ordem, como por exemplo a ordem alfabética, numérica etc
para escolher dentre os itens aquele que “vem primeiro”.
Exemplo 96. Use o algoritmo Prim para encontrar uma árvore geradora mı́nima no grafo mostrado na Figura 19.3.
Solução: As escolhas, de acordo com o algoritmo de Prim são: {f, g}[1], {f, j}[1],{b, f }[2], {a, b}[2], {e, f }[2], {j, k}[2],
{k, l}[1], {b, c}[3], {c, d}[2], {d, h}[3] e {i, j}[3]. A soma mı́nima é dada por: 21. Uma árvore geradora mı́nima
construı́da usando o algoritmo Prim é mostrada na Figura 19.4.
Figura 19.4: Uma árvore geradora mı́nima produzida usando o algoritmo de Prim.
139
formam um circuito simples com as arestas já escolhidas. Pare após n − 1 arestas forem selecionadas.
Exemplo 97. Use o algoritmo da Kruskal para projetar uma rede de comunicações de custo mı́nimo conectando todos
os computadores representados pelo grafo na Figura 19.1.
Solução: Devemos escolher as arestas de peso mı́nimo de modo a não termos circuitos simples até que tenhamos
adicionado 5 arestas. As arestas são escolhidas na seguinte ordem: Feira de Santana - Salvador [500], Jequié - Salvador
[680], Guanambi - Vitória da Conquista [700], Ilhéus - Vitória da Conquista [720], Jequié - Vitória da Conquista [720].
A soma mı́nima é (obviamente) dada por R$ 3320. Como assim, obviamente? As arestas escolhidas estão destacadas
na Figura 19.5:
Figura 19.5: Uma árvore geradora mı́nima para o grafo ponderado na Figura 19.1
Exemplo 98. Use o algoritmo de Kruskal para encontrar uma árvore geradora mı́nima do grafo ponderado mostrado
na Figura 19.6:
140
Solução: As escolhas, de acordo com o algoritmo de Kruskal são: {c, g}[1], {f, j}[1],{k, l}[1], {b, f }[2], {c, d}[2],
{d, h}[2], {e, f }[2], {i, j}[2], {j, k}[2], {a, b}[3] e {b, c}[3] A árvore geradora mı́nima obtida pelo algoritmo de Kruskal
são mostrados na Figura 19.7.
Figura 19.7: Uma árvore geradora mı́nima produzida pelo algoritmo de Kruskal.
19.3 Exercı́cios
Exercı́cio 59. Aplique os algoritmos de Prim e Kruskal aos grafos dados a seguir:
141
19.5 Vı́deo-Aulas
Não entendeu em sala? Leu o material e não entendeu? Tente entender assistindo os vı́deos referentes aos assuntos
abordados. De qualquer forma, o professor está sempre à disposição para esclarecer eventuais dúvidas.
142
Capı́tulo 20
Neste capı́tulo apresentaremos algumas implementações, em linguagem Python, de programas referentes à teoria
dos grafos. Boa parte dos programas foram retirados do site GeeksforGeeks. Pequenas modificações de alguns pro-
gramas foram feitas, contudo, nada que altere sua estrutura primordial ou desmereça seus desenvolvedores originais -
citados ao final de cada código.
Para a compilação dos programas usamos a plataforma online OnlineGDBBeta : Linguagem Python 3.
143
Os programas a seguir foram aplicados em grafos especı́ficos. Alguns deles necessitam da inserção de arestas
de forma simétrica, isto é cada aresta (a, b) contará com sua “irmã” (b, a) uma vez que consideram arestas de ida
e volta. Neste tipo de programa, uma vez que certa aresta tenha sido “usada” ela costuma “sair” do conjunto de
possibilidades no futuro, ou até mesmo o sentido importar. A não inserção de tal aresta no programa pode acarretar
saı́das incorretas. (Exmperiência própria!) Por exemplo, alguns programas terão arestas representadas por comandos
como: G.diri[a][b]=1 ou graph.add edge(a,b). Em caso de uma saı́da de dados incorreta, recomenda-se, para cada
caso acima, a inserção dos comandos G.diri[b][a]=1 ou graph.add edge(b,a) na parte correspondente às entradas (caso
não constem). Até mesmos os programas listados a seguir podem apresentar essa necessidade e não o tenhamos feito.
O ideal é aplicá-los em alguns outros grafos e observar a necessidade de algum ajuste extra.
144
Programa 1. O programa a seguir, em linguagem Python 3, exibe o grau de um vértice arbitrário. [Link Online
from GeeksforGeeks]
145
Nas linhas 21 − 37 e 55 − 56 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.4 para ilustrar a
aplicação do programa. Na linha 61 foi inserido o vértice que se deseja saber o grau. As saı́das, considerando o grafo
dado, são dispostas na Figura 20.5.
146
Programa 2. O programa a seguir, em linguagem Python 3, verifica se um grafo é bipartido ou não. [Link Online
from GeeksforGeeks]
147
Figura 20.6: Verificação de Bipartição.
Nas linhas 65 − 70 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.7 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.8.
148
Programa 3. O programa a seguir, em linguagem Python 3, apresenta a lista de adjacências associadas a um grafo.
[Link Online from GeeksforGeeks]
149
Nas linhas 50 − 58 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.10 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.11.
150
Programa 4. O programa a seguir, em linguagem Python 3, mostra se existe ou não um caminho entre dois vértices
em um grafo orientado. [Link Online from GeeksforGeeks]
151
Nas linhas 48 − 54 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.13 para ilustrar a aplicação do
programa. Na linha 56 foram inseridos o vértice inicial e o vértice final que se deseja verificar a existência de um
caminho. As saı́das, considerando o grafo dado, são dispostas na Figura 20.14.
152
Programa 5. O programa a seguir, em linguagem Python 3, verifica se um grafo tem um circuito de Euler ou tem
um caminho de Euler ou nenhum dos dois. [Link Online from GeeksforGeeks]
153
Figura 20.15: Verificação de Gráfico Euleriano.
Nas linhas 97−121 foram inseridos, a tı́tulo de exemplo, os grafos dispostos na Figura 20.16 para ilustrar a aplicação
do programa. As saı́das, considerando os grafos dados, são dispostas na Figura 20.17.
154
Figura 20.16: Grafos Simples F , G e H.
155
Programa 6. O programa a seguir, em linguagem Python 3, aplica o algoritmo de Fleury em um grafo. Caso o grafo
não tenha um circuito ou caminho de Euler o programa exibe um caminho ou circuito interno qualquer (O ideal é
aplicar o programa em um grafo contendo um caminho ou circuito de Euler.) [Link Online from GeeksforGeeks]
156
Figura 20.18: Circuito ou caminho Euleriano.
Nas linhas 93 − 100 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.19 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.20.
157
Figura 20.20: Saı́das do Programa.
158
Programa 7. O programa a seguir, em linguagem Python 3, exibe, se existir, um circuito de Hamilton. [Link Online
from GeeksforGeeks]
159
Figura 20.21: Circuito Hamiltoniano.
Nas linhas 85 − 88 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.22 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.23.
160
Programa 8. O programa a seguir, em linguagem Python 3, apresenta o caminho de menor custo entre dois vértices
arbitrários usando o algoritmo de Dijkstra. [Link Online from linuxtut.com]
161
Nas linhas 4 − 12 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.25 para ilustrar a aplicação do
programa. Note que as distâncias são calculadas entre o primeiro e último vértice. Neste caso, a matriz inserida
mudaria caso os vértices inicial e final mudassem. As saı́das, considerando o grafo dado, são dispostas na Figura 20.26.
162
Programa 9. O programa a seguir, em linguagem Python 3, apresenta os menores custos entre um vértice arbitrário
e todos os outros vértices de um grafo. Os comentários foram removidos para diminuir o número de linhas do código.
[Link Online from GeeksforGeeks]
163
.
164
Figura 20.27: Algoritmo de Dijkstra.
165
Nas linhas 146 − 168 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.28 para ilustrar a aplicação
do programa1 . Na linha 169 foi inserido o vértice a partir do qual se deseja obter os custos mı́nimos em relação aos
demais vértices do grafo. As saı́das, considerando o grafo dado, são dispostas na Figura 20.29.
1O grafo considerado trata-se de uma leve modificação nos rótulos dos vértices do grafo dado no Programa 8 como se observa facilmente.
O grafo e os pesos são essencialmente os mesmos!
166
Programa 10. O programa a seguir, em linguagem Python 3, exibe o número de regiões que um grafo planar divide
o plano. [Link Online from GeeksforGeeks]
Na linha 14 foram inseridos os dados correspondendo ao número de vértices e arestas de um grafo planar. A saı́da,
considerando os dados inseridos, está disposta na Figura 20.30.
167
Programa 11. O programa a seguir, em linguagem Python 3, apresenta um algoritmo guloso para atribuir cores aos
vértices de um grafo. [Link Online from GeeksforGeeks]
168
Figura 20.31: Algoritmo Guloso Para Coloração de Um Grafo.
Nas linhas 60 − 68 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.32 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.33.
169
Programa 12. O programa a seguir, em linguagem Python 3, apresenta a travessia em pré-ordem. [Link Online from
tutorialspoint]
170
Nas linhas 43 − 49 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.35 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.36.
171
Programa 13. O programa a seguir, em linguagem Python 3, apresenta a travessia em ordem simétrica. [Link Online
from tutotialspoint]
172
Nas linhas 43 − 49 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.38 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.39.
173
Programa 14. O programa a seguir, em linguagem Python 3, apresenta a travessia em pós-ordem. [Link Online from
tutorialspoint]
174
Nas linhas 43 − 49 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.41 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.42.
175
Programa 15. O programa a seguir, em linguagem Python 3, apresenta a ordem de escolha dos vértices considerando
a Busca em Profundidade. [Link Online from GeeksforGeeks]
176
Nas linhas 52 − 61 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.44 para ilustrar a aplicação do
programa (note que as arestas contam com duas orientações uma vez que há retorno em alguns casos). Na linha 65
foi inserido o vértice raiz. As saı́das, considerando o grafo dado, são dispostas na Figura 20.45.
177
Programa 16. O programa a seguir, em linguagem Python 3, apresenta a ordem de escolha dos vértices considerando
a Busca em Largura. [Link Online from GeeksforGeeks]
178
Figura 20.46: Busca em Largura.
Nas linhas 55 − 64 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.47 para ilustrar a aplicação do
programa (note que as arestas contam com duas orientações uma vez que há retorno em alguns casos). Na linha 65
foi inserido o vértice raiz. As saı́das, considerando o grafo dado, são dispostas na Figura 20.48.
179
Programa 17. O programa a seguir, em linguagem Python 3, é a implementação do algoritmo de Prim. [Link Online
from GeeksforGeeks]
180
Figura 20.49: Algoritmo de Prim.
Nas linhas 73 − 78 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.50 para ilustrar a aplicação do
programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.51.
181
Programa 18. O programa a seguir, em linguagem Python 3, é a implementação do algoritmo de Kruskal. [Link
Online from GeeksforGeeks]
182
Figura 20.52: Algoritmo de Kruskal.
183
Nas linhas 102 − 109 foi inserido, a tı́tulo de exemplo, o grafo disposto na Figura 20.53 para ilustrar a aplicação
do programa. As saı́das, considerando o grafo dado, são dispostas na Figura 20.54.
184
Referências
Principal
[1] ROSEN, Kenneth. Discrete Mathematics and its Applications, 7rd, McGRAW-HILL, 2007.
Secundárias
[2] DOMINGUES, H. H.; IEZZI, G. Álgebra moderna: volume único. 4 ed. São Paulo: Atual, 2003.
[3] SCHEINERMAN, E. R. Matemática discreta: Uma introdução. 3 ed. São Paulo: Cengage Learning, 2017.
[4] STEIN, C.;DRYSDALE, R. L.; BOGART, K. Matemática Discreta para Ciências da Computação. 1 ed. São
Paulo: Pearson, 2013.
[5] BIGGS, N.; LLOYD, E. and WILSON, R. (1986), Graph Theory, 1736-1936, Oxford University Press
[6] HOLANDA, Bruno. Teoria dos Grafos OBM. Consultado em 14 de junho de 2018
[7] CAYLEY, A. (1857), On the theory of the analytical forms called trees, Philosophical Magazine, Series IV, 13 (85):
172-176, doi:10.1017/CBO9780511703690.046
[8] TUTTE, W.T. (2001), Graph Theory, ISBN 978-0-521-79489-3, Cambridge University Press, p. 30, consultado em
14 de março de 2016
[9] The Four Color Theorem. Mathpages.com. Consultado em 3 de junho de 2016.
Programas em Python 3
[10] https://www.geeksforgeeks.org
[11] https://www.tutorialspoint.com/
185