Logo Passei Direto
Buscar
Material
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Projeto Integrador em Ccomp 
Grafos e Árvores - Exercícios 
Prof.s Jorge Doria 
e 
Júlio Silveira 
Exercícios - Grafos e Árvores 
POSCOMP 2008 
14) Um programador propôs um algoritmo não-recursivo 
para o percurso em pré-ordem de uma árvore binária com 
as seguintes características. 
• Cada nó da árvore binária é representado por um registro 
com três campos: chave, que armazena seu identificador; 
esq e dir, ponteiros para os filhos esquerdo e direito, 
respectivamente. 
• O algoritmo deve ser invocado inicialmente tomando o 
ponteiro para o nó raiz da árvore binária como argumento. 
• O algoritmo utiliza push() e pop() como funções 
auxiliares de empilhamento e desempilhamento de 
ponteiros para nós de árvore binária, respectivamente. 
Ao lado está apresentado o algoritmo proposto, em que λ representa o ponteiro nulo. 
Procedimento preordem 
 (ptraiz : PtrNoArvBin) 
Var ptr : PtrNoArvBin; 
 
 ptr := ptraiz; 
 Enquanto (ptr ≠ λ) Faça 
 escreva (ptr^.chave); 
 Se (ptr^.dir ≠ λ) Então 
 push(ptr^.dir); 
 Se (ptr^.esq ≠ λ) Então 
 push(ptr^.esq); 
 ptr := pop(); 
 Fim_Enquanto 
Fim_Procedimento 
Exercícios - Grafos e Árvores 
POSCOMP 2008 
14) (cont.) Com base nessas informações e supondo que a raiz de uma árvore binária com n nós seja passada ao 
procedimento preordem(), julgue os itens seguintes. 
I. O algoritmo visita cada nó da árvore binária exatamente uma vez ao longo do percurso. 
II. O algoritmo só funcionará corretamente se o procedimento pop() retornar λ caso a pilha esteja vazia. 
III. Empilhar e desempilhar ponteiros para nós da árvore são operações que podem ser implementadas com 
custo constante. 
IV. A complexidade do pior caso para o procedimento preordem() é O(n). 
Assinale a opção correta. 
A Apenas um item está certo. 
B Apenas os itens I e IV estão certos. 
C Apenas os itens I, II e III estão certos. 
D Apenas os itens II, III e IV estão certos. 
E Todos os itens estão certos. 
 
Exercícios - Grafos e Árvores 
POSCOMP 2008 
14) (cont.) Com base nessas informações e supondo que a raiz de uma árvore binária com n nós seja passada ao 
procedimento preordem(), julgue os itens seguintes. 
I. O algoritmo visita cada nó da árvore binária exatamente uma vez ao longo do percurso. 
II. O algoritmo só funcionará corretamente se o procedimento pop() retornar λ caso a pilha esteja vazia. 
III. Empilhar e desempilhar ponteiros para nós da árvore são operações que podem ser implementadas com 
custo constante. 
IV. A complexidade do pior caso para o procedimento preordem() é O(n). 
Assinale a opção correta. 
E Todos os itens estão certos. 
 
Exercícios - Grafos e Árvores 
POSCOMP 2011 
20) Considere que G é um grafo qualquer e que V e E são os conjuntos de vértices e de arestas de G, 
respectivamente. Considere também que grau(v) é o grau de um vértice v pertencente ao conjunto V. Nesse 
contexto, analise as seguintes asserções. 
Em G, a quantidade de vértices com grau ímpar é ímpar. 
 PORQUE 
Para G, vale a identidade dada pela expressão 
Acerca dessas asserções, assinale a opção correta. 
A As duas asserções são verdadeiras, e a segunda é uma justificativa correta da primeira. 
B As duas asserções são verdadeiras, mas a segunda não é uma justificativa correta da primeira. 
C A primeira asserção é uma proposição verdadeira, e a segunda uma proposição falsa. 
D A primeira asserção é uma proposição falsa, e a segunda uma proposição verdadeira. 
E Tanto a primeira quanto a segunda asserções são proposições falsas. 
Exercícios - Grafos e Árvores 
POSCOMP 2011 
20) Considere que G é um grafo qualquer e que V e E são os conjuntos de vértices e de arestas de G, 
respectivamente. Considere também que grau(v) é o grau de um vértice v pertencente ao conjunto V. Nesse 
contexto, analise as seguintes asserções. 
Em G, a quantidade de vértices com grau ímpar é ímpar. 
 PORQUE 
Para G, vale a identidade dada pela expressão 
Acerca dessas asserções, assinale a opção correta. 
D A primeira asserção é uma proposição falsa, e a segunda uma proposição verdadeira. 
Exercícios - Grafos e Árvores 
POSCOMP 2011 
24) As filas de prioridades (heaps) são estruturas de dados importantes no projeto de algoritmos. Em especial, heaps podem ser 
utilizados na recuperação de informação em grandes bases de dados constituídos por textos. Basicamente, para se exibir o 
resultado de uma consulta, os documentos recuperados são ordenados de acordo com a relevância presumida para o usuário. 
Uma consulta pode recuperar milhões de documentos que certamente não serão todos examinados. Na verdade, o usuário 
examina os primeiros m documentos dos n recuperados em que m é da ordem de algumas dezenas. 
Considerando as características dos heaps e sua aplicação no problema descrito acima, avalie as seguintes afirmações. 
I. Uma vez que o heap é implementado como uma árvore binária de pesquisa essencialmente completa, 
o custo computacional para sua construção é O(n log n). 
II. A implementação de heaps utilizando-se vetores é eficiente em tempo de execução e em espaço de 
armazenamento, pois o pai de um elemento armazenado na posição i se encontra armazenado na posição 2i+1. 
III. O custo computacional para se recuperar de forma ordenada os m documentos mais relevantes armazenados 
em um heap de tamanho n é O(m log n). 
IV. Determinar o documento com maior valor de relevância armazenado em um heap tem custo 
computacional O(1). 
Exercícios - Grafos e Árvores 
POSCOMP 2011 
24) (cont.) Avalie as seguintes afirmações. 
I. Uma vez que o heap é implementado como uma árvore binária de pesquisa essencialmente completa, 
o custo computacional para sua construção é O(n log n). 
II. A implementação de heaps utilizando-se vetores é eficiente em tempo de execução e em espaço de 
armazenamento, pois o pai de um elemento armazenado na posição i se encontra armazenado na posição 2i+1. 
III. O custo computacional para se recuperar de forma ordenada os m documentos mais relevantes armazenados 
em um heap de tamanho n é O(m log n). 
IV. Determinar o documento com maior valor de relevância armazenado em um heap tem custo 
computacional O(1). 
Está correto apenas o que se afirma em 
A I e II. 
B II e III. 
C III e IV. 
D I, II e IV. 
E I, III e IV. 
Exercícios - Grafos e Árvores 
POSCOMP 2011 
24) (cont.) Avalie as seguintes afirmações. 
I. Uma vez que o heap é implementado como uma árvore binária de pesquisa essencialmente completa, 
o custo computacional para sua construção é O(n log n). 
II. A implementação de heaps utilizando-se vetores é eficiente em tempo de execução e em espaço de 
armazenamento, pois o pai de um elemento armazenado na posição i se encontra armazenado na posição 2i+1. 
III. O custo computacional para se recuperar de forma ordenada os m documentos mais relevantes armazenados 
em um heap de tamanho n é O(m log n). 
IV. Determinar o documento com maior valor de relevância armazenado em um heap tem custo 
computacional O(1). 
Está correto apenas o que se afirma em 
C III e IV. 
Exercícios - Grafos e Árvores 
POSCOMP 2011 
30) Suponha que se queira pesquisar a chave 287 em uma árvore binária de pesquisa com chaves entre 1 e 1000. 
Durante uma pesquisa como essa, uma sequência de chaves é examinada. Cada sequência abaixo é uma 
suposta sequência de chaves examinadas em uma busca da chave 287. 
I. 7, 342, 199, 201, 310, 258, 287 
II. 110, 132, 133, 156, 289, 288, 287 
III. 252, 266, 271, 294, 295, 289, 287 
IV. 715, 112, 530, 249, 406, 234, 287 
É válido apenas o que se apresenta em 
A I. 
B III. 
C I e II. 
D II e IV. 
E III e IV. 
Exercícios - Grafos e Árvores 
POSCOMP 2011 
30) Suponha que se queira pesquisar a chave 287 em uma árvore binária de pesquisa com chaves entre 1 e 1000. 
Durante uma pesquisa como essa, uma sequência de chaves é examinada. Cada sequência abaixo é uma 
suposta sequência de chaves examinadas em uma busca da chave 287. 
I. 7, 342, 199, 201, 310, 258, 287 
II. 110, 132, 133, 156, 289, 288,287 
III. 252, 266, 271, 294, 295, 289, 287 
IV. 715, 112, 530, 249, 406, 234, 287 
É válido apenas o que se apresenta em 
C I e II. 
Exercícios - Grafos e Árvores 
POSCOMP 2014 
13) A figura abaixo apresenta uma árvore binária de pesquisa, que mantém a seguinte propriedade fundamental: o 
valor associado à raiz é sempre menor do que o valore de todos os nós da subárvore direita de v, e sempre 
maior do que o valor de todos os nós da subárvore esquerda de v. 
 
Em relação a uma árvore binária de pesquisa, avalie as 
afirmações a seguir. 
I. A árvore possui a vantagem de realizar a busca de elementos 
de forma eficiente, como a busca binária em um vetor. 
II. A árvore está desbalanceada, pois a subárvore da esquerda 
possui um número de nós maior do que a subárvore da direita. 
III. Quando a árvore é percorrida utilizando o método de 
caminhamento pós-ordem, os valores são encontrados em 
ordem decrescente. 
IV. O número de comparações realizadas em função do número n de 
elementos na árvore em uma busca binária realizada com sucesso é O(log n). 
Exercícios - Grafos e Árvores 
POSCOMP 2014 
13) (cont.) 
É correto apenas o que se afirma em: 
A I e III. 
B I e IV. 
C II e III. 
D I, II e IV. 
E II, III e IV. 
Exercícios - Grafos e Árvores 
POSCOMP 2014 
13) (cont.) 
É correto apenas o que se afirma em: 
B I e IV. 
Exercícios - Grafos e Árvores 
POSCOMP 2002 
27) Suponha que T seja uma árvore AVL incialmente vazia, e considere a inserção dos elementos 10, 20, 30, 5, 15, 2 
em T, nesta ordem. Qual das sequências abaixo corresponde a um percurso de T em pré-ordem? 
(a) 10, 5, 2, 20, 15, 30 
(b) 20, 10, 5, 2, 15, 30 
(c) 2, 5, 10, 15, 20, 30 
(d) 30, 20, 15, 10, 5, 2 
(e) 15, 10, 5, 2, 20, 30 
 
Exercícios - Grafos e Árvores 
POSCOMP 2002 
27) Suponha que T seja uma árvore AVL incialmente vazia, e considere a inserção dos elementos 10, 20, 30, 5, 15, 2 
em T, nesta ordem. Qual das sequências abaixo corresponde a um percurso de T em pré-ordem? 
(a) 10, 5, 2, 20, 15, 30 
 
Exercícios - Grafos e Árvores 
POSCOMP 2003 (adaptado) 
40) Quais dos grafos abaixo são Euleriano? 
 
 
 
 
 
 
 
 
(a) Somente I e II 
(b) Somente I 
(c) Somente II 
(d) Somente I, II e IV 
(e) Nenhum deles é Euleriano 
 
Exercícios - Grafos e Árvores 
POSCOMP 2003 (adaptado) 
40) Quais dos grafos abaixo são Euleriano? 
 
 
 
 
 
 
 
 
(a) Somente I e II 
Exercícios - Grafos e Árvores 
POSCOMP 2005 
35) Em uma estrutura de árvore binária de busca, foram inseridos os elementos "h", "a", "b", "c", "i", "j", nesta 
sequência. O tamanho do caminho entre um nó qualquer da árvore e a raiz é dado pelo número de arestas 
neste caminho. Qual o tamanho do maior caminho na árvore, após a inserção dos dados acima? 
(a) 2 
(b) 6 
(c) 4 
(d) 5 
(e) 3 
 
Exercícios - Grafos e Árvores 
POSCOMP 2005 
35) Em uma estrutura de árvore binária de busca, foram inseridos os elementos "h", "a", "b", "c", "i", "j", nesta 
sequência. O tamanho do caminho entre um nó qualquer da árvore e a raiz é dado pelo número de arestas 
neste caminho. Qual o tamanho do maior caminho na árvore, após a inserção dos dados acima? 
(e) 3 
 
Exercícios - Grafos e Árvores 
POSCOMP 2005 
38) Árvores binárias podem ser usadas para guardar e recuperar informações com número de operações 
proporcional à altura da árvore. Quais das seguintes figuras representam árvores binárias de altura balanceada 
ou do tipo AVL (Adelson-Velski e Landis): 
(a) Somente (I) e (IV) são árvores binárias AVL. 
(b) Somente (I) é árvore binária AVL. 
(c) Somente (I), (II) e (III) são árvores binárias AVL. 
(d) Somente (II) e (III) são árvores binárias AVL. 
(e) Todas (I), (II), (III) e (IV) são árvores binárias AVL. 
Exercícios - Grafos e Árvores 
POSCOMP 2005 
38) Árvores binárias podem ser usadas para guardar e recuperar informações com número de operações 
proporcional à altura da árvore. Quais das seguintes figuras representam árvores binárias de altura balanceada 
ou do tipo AVL (Adelson-Velski e Landis): 
(c) Somente (I), (II) e (III) são árvores binárias AVL. 
Exercícios - Grafos e Árvores 
POSCOMP 2005 
40) Dadas as seguintes afirmações 
(I) Qualquer grafo conexo com n vértices deve ter pelo menos n – 1 arestas. 
(II) O grafo bipartido completo Km,n é Euleriano desde que m e n sejam ímpares. 
(III) Em um grafo o número de vértices de grau ímpar é sempre par. 
São verdadeiras: 
(a) Somente a afirmação (I). 
(b) Somente as afirmações (I) e (III). 
(c) Somente as afirmações (II) e (III). 
(d) Somente as afirmações (I) e (II). 
(e) Todas as afirmações. 
Exercícios - Grafos e Árvores 
POSCOMP 2005 
40) Dadas as seguintes afirmações 
(I) Qualquer grafo conexo com n vértices deve ter pelo menos n – 1 arestas. 
(II) O grafo bipartido completo Km,n é Euleriano desde que m e n sejam ímpares. 
(III) Em um grafo o número de vértices de grau ímpar é sempre par. 
São verdadeiras: 
(b) Somente as afirmações (I) e (III). 
Exercícios - Grafos e Árvores 
POSCOMP 2006 
34) Sejam [6, 4, 2, 1, 3, 5, 8, 7, 9] e [7, 4, 3, 2, 1, 6, 5, 10, 9, 8, 11] as sequências produzidas pelo percurso em 
pré-ordem das árvores binárias de busca T1 e T2, respectivamente. Assinale a afirmação incorreta: 
(a) T1 possui altura mínima dentre todas as árvores binárias com 9 nós. 
(b) T1 é uma árvore AVL. 
(c) T1 é uma árvore rubro-negra. 
(d) T2 possui altura mínima dentre todas as árvores binárias com 11 nós. 
(e) T2 é uma árvore rubro-negra. 
Exercícios - Grafos e Árvores 
POSCOMP 2006 
34) Sejam [6, 4, 2, 1, 3, 5, 8, 7, 9] e [7, 4, 3, 2, 1, 6, 5, 10, 9, 8, 11] as sequências produzidas pelo percurso em 
pré-ordem das árvores binárias de busca T1 e T2, respectivamente. Assinale a afirmação incorreta: 
(d) T2 possui altura mínima dentre todas as árvores binárias com 11 nós. 
Obrigado! 
 
 
Obrigado! 
Projeto Integrador em Ccomp 
Teoria da Computação - Exercícios 
Prof.s Jorge Doria 
e 
Júlio Silveira 
Exercícios – Teoria da Computação 
ENADE 2005 
80) Que cadeia é reconhecida pelo autômato representado pelo diagrama de estados ao lado? 
A. 101010 
B. 111011000 
C. 11111000 
D. 10100 
E. 00110011 
0
C
B
A
D
1
0
0
0 1
1
1
Exercícios – Teoria da Computação 
ENADE 2005 
80) Que cadeia é reconhecida pelo autômato representado pelo diagrama de estados ao lado? 
B. 111011000 
 
 
 
0
C
B
A
D
1
0
0
0 1
1
1
Exercícios – Teoria da Computação 
ENADE 2011 
11) O problema da parada para máquinas de Turing, ou simplesmente problema da parada, pode ser assim 
descrito: determinar, para quaisquer máquina de Turing M e palavra w, se M irá eventualmente parar com 
entrada w. 
 
Mais informalmente, o mesmo problema também pode ser assim descrito: 
dados um algoritmo e uma entrada finita, decidir se o algoritmo termina ou se executará indefinidamente. 
 
Para o problema da parada, 
A. existe algoritmo exato de tempo de execução polinomial para solucioná-lo. 
B. existe algoritmo exato de tempo de execução exponencial para solucioná-lo. 
C. não existe algoritmo que o solucione, não importa quanto tempo seja disponibilizado. 
D. não existe algoritmo exato, mas existe algoritmo de aproximação de tempo de 
execução polinomial que o soluciona, fornecendo respostas aproximadas. 
E. não existe algoritmo exato, mas existe algoritmo de aproximação de tempo de 
execução exponencial que o soluciona, fornecendo respostas aproximadas. 
Exercícios – Teoria da Computação 
ENADE 2011 
11) O problema da parada para máquinas de Turing, ou simplesmente problema da parada, pode ser assim 
descrito: determinar, para quaisquer máquina de Turing M e palavra w, se M irá eventualmente parar com 
entrada w. 
 
Mais informalmente, o mesmo problema também pode ser assim descrito: 
dados um algoritmo e uma entrada finita, decidir se o algoritmo termina ou se executará indefinidamente. 
 
Para o problema da parada, 
C. não existe algoritmo que o solucione, não importa quanto tempo sejadisponibilizado. 
Exercícios – Teoria da Computação 
ENADE 2014 
15) Considere as seguintes expressões regulares cujo alfabeto é { a, b }. 
 
 R1 = a (a ∪ b)* 
 R2 = b (a ∪ b)* 
 
Se L(R) é a linguagem associada a uma expressão regular R, é correto afirmar que: 
A. L(R1) = L(R2). 
B. L(R2) = { w | w termina com b }. 
C. Existe um autômato finito determinístico cuja linguagem é igual a L(R1) ∪ L(R2). 
D. Se R3 é uma expressão regular tal que L(R3) = L(R1) ∩ L(R2), então L(R3) é uma linguagem infinita. 
E. Um autômato finito não determinístico que reconheça L(R1) ∪ L(R2) tem pelo menos quatro 
estados 
Exercícios – Teoria da Computação 
ENADE 2014 
15) Considere as seguintes expressões regulares cujo alfabeto é { a, b }. 
 
 R1 = a (a ∪ b)* 
 R2 = b (a ∪ b)* 
 
Se L(R) é a linguagem associada a uma expressão regular R, é correto afirmar que: 
C. Existe um autômato finito determinístico cuja linguagem é igual a L(R1) ∪ L(R2). 
Exercícios – Teoria da Computação 
POSCOMP 2008 
42) Analise as seguintes igualdades de expressões regulares: 
 
 I. a* = (a*)* 
 II. (a+b)* = (b+a)* 
 III. a*+b* = (a+b)* 
 
A análise permite concluir que: 
A) somente as igualdades I e II são verdadeiras. 
B) somente a igualdade I é verdadeira. 
C) somente as igualdades II e III são verdadeiras. 
D) todas as igualdades são verdadeiras. 
E) nenhuma das igualdades é verdadeira. 
Exercícios – Teoria da Computação 
POSCOMP 2008 
42) Analise as seguintes igualdades de expressões regulares: 
 
 I. a* = (a*)* 
 II. (a+b)* = (b+a)* 
 III. a*+b* = (a+b)* 
 
A análise permite concluir que: 
A) somente as igualdades I e II são verdadeiras. 
Exercícios – Teoria da Computação 
POSCOMP 2008 
43) Considere o autômato finito mostrado na figura abaixo (os círculos em negrito representam estados terminais). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
A esse respeito, assinale a afirmativa FALSA. 
A) A palavra aaa é reconhecida pelo autômato. 
B) A palavra ababa não é reconhecida pelo autômato. 
C) A palavra vazia é reconhecida pelo autômato. 
D) A palavra aba é reconhecida pelo autômato. 
E) A palavra baba é reconhecida pelo autômato. 
Exercícios – Teoria da Computação 
POSCOMP 2008 
43) Considere o autômato finito mostrado na figura abaixo (os círculos em negrito representam estados terminais). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
A esse respeito, assinale a afirmativa FALSA. 
D) A palavra aba é reconhecida pelo autômato. 
Exercícios – Teoria da Computação 
POSCOMP 2008 
46) Seja o autômato finito mostrado na figura abaixo que opera sobre o alfabeto { a,b } 
(o círculo em negrito indica um estado terminal). Analise as seguintes afirmativas. 
 
 I. O autômato finito mostrado na figura é determinístico. 
 II. O autômato finito mostrado na figura é não-determinístico. 
 III. O autômato finito mostrado na figura reconhece a palavra vazia. 
 
A análise permite concluir que 
A) todas as afirmativas são falsas. 
B) somente a afirmativa I é falsa. 
C) somente a afirmativa II é falsa. 
D) somente a afirmativa III é falsa. 
E) nenhuma das afirmativas é falsa. 
Exercícios – Teoria da Computação 
POSCOMP 2008 
46) Seja o autômato finito mostrado na figura abaixo que opera sobre o alfabeto { a,b } 
(o círculo em negrito indica um estado terminal). Analise as seguintes afirmativas. 
 
 I. O autômato finito mostrado na figura é determinístico. 
 II. O autômato finito mostrado na figura é não-determinístico. 
 III. O autômato finito mostrado na figura reconhece a palavra vazia. 
 
A análise permite concluir que 
B) somente a afirmativa I é falsa. 
Exercícios – Teoria da Computação 
POSCOMP 2009 
35) Seja o alfabeto Σ = { a, b } e a linguagem regular 
 L = { ω | ω ∈ Σ * e o nº de a’s em ω é par }. 
 
Qual das expressões regulares abaixo gera essa linguagem? 
A) (a b* a b*)* 
B) ( ( a a )* | b* )* 
C) ( b* | ( a a )* | b* )* 
D) ( b* a b* a b* )* 
E) ( a a | b )* 
 
Exercícios – Teoria da Computação 
POSCOMP 2009 
35) Seja o alfabeto Σ = { a, b } e a linguagem regular 
 L = { ω | ω ∈ Σ * e o nº de a’s em ω é par }. 
 
Qual das expressões regulares abaixo gera essa linguagem? 
D) ( b* a b* a b* )* 
 
Exercícios – Teoria da Computação 
POSCOMP 2009 
45) Considere o autômato finito não-determinístico a seguir, sendo A o estado inicial e D o único estado de 
aceitação. 
Que autômato finito determinístico com d como sua função de transição de estado aceita a mesma linguagem? 
A) Estado Inicial A, estados de aceitação C e D 
d(A, b) = B d(B, a) = C 
d(C, a) = D 
B) Estado Inicial A, estado de aceitação C 
d(A, b) = B d(B, a) = C 
d(C, a) = C 
C) Estado Inicial A, estado de aceitação D 
d(A, b) = d(B, a) = D 
d(B, b) = C d(C, a) = D 
D) Todas as respostas acima estão corretas. 
E) É impossível converter esse autômato finito em um autômato finito determinístico. 
Exercícios – Teoria da Computação 
POSCOMP 2009 
45) Considere o autômato finito não-determinístico a seguir, sendo A o estado inicial e D o único estado de 
aceitação. 
Que autômato finito determinístico com d como sua função de transição de estado aceita a mesma linguagem? 
A) Estado Inicial A, estados de aceitação C e D 
d(A, b) = B d(B, a) = C 
d(C, a) = D 
Exercícios – Teoria da Computação 
IFT MG 2015 
10) Considere uma Máquina de Turing M que possui: 
 ● Um conjunto finito de estados Q = (q0, q1) 
 ● Um estado inicial q0 
 ● Um estado final q1 
 ● Um alfabeto inicial Σ = (a, b) 
 ● Um alfabeto de fita Γ = (a, b, ε) 
 ● Um símbolo de fita vazio ε 
 ● Função de transição representadas pela 
 Tabela 1 ao lado: 
Qual é a palavra aceita pela Máquina de Turing M? 
a) abaab 
b) aabab 
c) abba 
d) babab 
e) εaεb 
Função de transição Movimento 
δ(q0, a) (q0, a, R) 
δ(q0, b) (q1, a, R) 
δ(q0, ε) (q0, ε, R) 
δ(q1, a) (q0, a, L) 
δ(q1, b) Nenhum (parada) 
δ(q1, ε) (q0, a, L) 
Exercícios – Teoria da Computação 
IFT MG 2015 
10) Considere uma Máquina de Turing M que possui: 
 ● Um conjunto finito de estados Q = (q0, q1) 
 ● Um estado inicial q0 
 ● Um estado final q1 
 ● Um alfabeto inicial Σ = (a, b) 
 ● Um alfabeto de fita Γ = (a, b, ε) 
 ● Um símbolo de fita vazio ε 
 ● Função de transição representadas pela 
 Tabela 1 ao lado: 
Qual é a palavra aceita pela Máquina de Turing M? 
c) abba 
Função de transição Movimento 
δ(q0, a) (q0, a, R) 
δ(q0, b) (q1, a, R) 
δ(q0, ε) (q0, ε, R) 
δ(q1, a) (q0, a, L) 
δ(q1, b) Nenhum (parada) 
δ(q1, ε) (q0, a, L) 
Exercícios – Teoria da Computação 
 Considere as linguagens abaixo, formadas sobre o alfabeto Γ = { a, b }. 
 
 L1 = { w ∈ Γ* | w contém um sufixo de comprimento 3 que é um palíndromo } 
 L2 = Sequências formadas por Γ que contenham mais a’s do que b’s. 
 L3 = { ab
na | n ≥ 0 } 
 L4 = { a
nban | n ≥ 0 } 
 L5 = { a
nbn | n ≤ 3 } 
 
Das linguagens acima, são regulares: 
A) Todas, menos a L2. 
B) Todas, menos a L5. 
C) Apenas a L3. 
D) Apenas L3 e L5. 
E) Apenas L1 , L3 e L5. 
Exercícios – Teoria da Computação 
 Considere as linguagens abaixo, formadas sobre o alfabeto Γ = { a, b }. 
 
 L1 = { w ∈ Γ* | w contém um sufixo de comprimento 3 que é um palíndromo } 
 L2 = Sequências formadas por Γ que contenham mais a’s do que b’s. 
 L3 = { ab
na | n ≥ 0 } 
 L4 = { a
nban | n ≥ 0 } 
 L5 = { a
nbn | n ≤ 3 } 
 
Das linguagens acima, são regulares: 
E) Apenas L1 , L3 e L5. 
Obrigado! 
 
 
Obrigado! 
Teoria da Computação 
Profs. Júlio Silveira 
e 
Sérgio Monteiro 
Apresentação 
• Objetivos 
– Aprofundar o conceito de computação algorítmica, a partir do estudo 
dos conceitos e modelos teóricos dos autômatos. 
– Fornecer uma base para o estudo de linguagens formais. 
 
Apresentação 
• Ementa 
– Autômatos finitos 
– Expressões regulares. 
– Teorema de Kleene. 
– Conjuntos não regulares. 
– Autômatos de pilha. 
– Máquina de Turing. 
Bibliografia 
• Básica 
– GERSTING, J. L. Fundamentos matemáticos para a ciência da 
computação. 5ª ed., Rio de Janeiro:LTC, 2004. 
– HOPCROFT, John E; MOTWANI, Rajeev; ULMAN, Jeffrey D. Introdução 
à teoria dos autômatos, linguagens e computação. 
Rio de Janeiro: Elsevier, 2002. 
– MENEZES, Paulo B. Linguagens Formais e Autômatos. Série Livros 
Didáticos, nº 3. 4ª ed., Porto Alegre: Sagra Luzzato, 2005. 
Bibliografia 
• Complementar 
• SIPSER, M. Introdução à Teoria da Computação. Cengage Learning, 2007. 
• RAMOS, M.V.M., NETO, J.J., VEGA, I.S. Linguagens Formais: Teoria, 
Modelagem e Implementação. Porto Alegre: Bookman, 2009. 
• ROSA, J.L.G. Linguagens Formais e Autômatos. Rio de Janeiro: LTC, 2010. 
• AHO, Alfred V. Compiladores: princípios, técnicas e ferramentas. 2 ed. São 
Paulo: Pearson Addison-Weslwy, 2008. 
• DIVERIO, T.A., MENEZES, P.B. Teoria da Computação: Máquinas Universais e 
Computabilidade. Porto Alegre: Bookman, 2011. 
Aula 1 
• Conceitos e Definições 
– Símbolos 
– Alfabetos 
– Sequências 
• Operações 
– Linguagens 
• Conjuntos de sequências 
• Relações e Operações 
Conceitos básicos 
• Autômato 
– Processamento 
• Entrada: sequência de símbolos 
• Saída: sequência de símbolos 
Autômato
Entrada Saída
Conceitos básicos 
• Símbolo 
a, b, c, 0, 1, S, A, B, … 
 
• Alfabeto: conjunto finito e não vazio de símbolos. 
• A = { a, b } 
• B = { a, b, c, …, z } 
• C = { 0, 1 } 
 
A princípio não consideraremos o “espaço” como símbolo! 
 
Conceitos básicos 
• Sequência, palavra, ou cadeia 
– Concatenação de símbolos de um alfabeto 
a, ab, aaab, bbb, ababa, … 
• Comprimento de uma sequência 
| a | = 1 
| aaba | = 4 
 
• Letras gregas  = a  |  | = 1 
  = aaba  |  | = 4 
Conceitos básicos 
• Sequência vazia:  
– Sequência “sem” símbolos 
– Tem comprimento ZERO 
|  | = 0 
 
• Atenção! 
–  NÃO é símbolo! 
É uma notação para uma sequência “sem símbolos” 
Conceitos básicos 
• Prefixos, sufixos, subpalavras (ou subsequências) 
 
– Exemplo para  = aaba, temos: 
• , a, aa, aab, aaba são prefixos de aaba (ou seja, de ) 
• , a, ba, aba, aaba são sufixos de  
• , a, b, aa, ab, ba, aab, aba, aaba são subsequências de  
 
– Observe: 
•  é prefixo, sufixo e subsequência de qualquer palavra 
 
 
Conceitos básicos 
• Concatenação de sequências: · (ou simplesmente ) 
 
a·b = ab ab·b = abb ·abab = abab· = abab 
a·bb = abb abb· = abb abab = abab 
 
– Observe: |·| = || = || + || 
 
• ATENÇÃO! 
• abab não é uma sequência, e sim uma operação 
 
 |abab| = ? Resp.: |abab| = |abab| = 4 
Conceitos básicos 
• Linguagem 
– Conjunto de sequências de um dado alfabeto 
– Exemplos de linguagens, considerando o alfabeto { a, b } 
X = { a, ab, bbba } 
Y = {  } 
Z = { } 
W = { , bbbb } 
K = { a, ab, abb, abbb, abbbb, abbbbb,  } 
Conceitos básicos 
• Linguagem = conjunto de sequências 
– Todo conjunto tem cardinalidade 
 
X = { a, ab, bbba } |X| = 3 
Y = {  } |Y| = 1 
Z = { } =  |Z| = 0 
W = { , bbbb } |W| = 2 
K = { a, ab, abb, abbb, abbbb, abbbbb,  } |K| =  
Conceitos básicos 
• Linguagem = conjunto de sequências 
• Não confundir 
 
 CARDINALIDADE (conjunto) com COMPRIMENTO (sequência) 
 
| { bbba } | = 1 | bbba | = 4 
 
| { } | = 0 
 
| {  } | = 1 |  | = 0 
 
 
 
Conceitos básicos 
• Conjunto das sequências formadas por um alfabeto 
– Exemplo: sequências formadas pelo alfabeto A = { 0, 1 } 
 
A* = { , 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, 101,  } 
Conceitos básicos 
• Relações envolvendo linguagens (conjuntos de sequências) 
  { a, ab, bbba } 
  { , ab, bbba } 
a  { a, ab, bbba } 
ab  { a, ab, bbba } 
bb  { a, ab, bbba } 
  { , ab, bbba } 
  { , ab, bbba } 
{  }  { , ab, bbba } 
{ ab }  { , ab, bbba } 
{ bb }  { , ab, bbba } 
{ , ab }  { , ab, bbba } 
{ , ab, bb }  { , ab, aabb, aaabbb,  } 
Conceitos básicos 
• Operações envolvendo linguagens (conjuntos de sequências) 
 
1. União { a, bbb }  { bb, a } = { a, bb, bbb } 
 
2. Interseção { a, bbb }  { bb, a } = { a } 
 
3. Diferença { a, bbb } – { bb, a } = { bbb } 
 
Conceitos básicos 
• Operações envolvendo linguagens (conjuntos de sequências) 
 
4. Concatenação 
 
 X·Y = XY = {  |   X e   Y } 
 
 { a, bbb } { bb, a } = { aa, abb, bbbbb, bbba } 
 { a, bbb } { a, bbb } = { aa, abbb, bbba, bbbbbb } 
 { a } { b, bb, bbb } = { ab, abb, abbb } 
 { , a } { b, bb, bbb } = { b, bb, bbb, ab, abb, abbb } 
Conceitos básicos 
4. Concatenação 
 
– Observe que normalmente XY  YX 
 
 { a, aa } { b, bb } = { ab, abb, aab, aabb } 
 { b, bb } { a, aa } = { ba, baa, bba, bbaa } 
 
– Ainda 
 {  } X = X {  } = X 
  X = { } X =  
 
Conceitos básicos 
4. Concatenação 
 
– Casos particulares 
 
 {  } { a, ab, bbb } = { a, ab, bbb } 
 
  { a, ab, bbb } = { } { a, ab, bbb } =      ? 
 
Conceitos básicos 
4. Concatenação 
Xn = XXXX (n vezes) 
 
Exemplo: X = { a, bbb } 
 
X0 = {  } 
X1 = X = { a, bbb } 
X2 = XX = { a, bbb } { a, bbb } = { aa, abbb, bbba, bbbbbb } 
X3 = … = { aaa, aabbb, abbba, abbbbbb, bbbaa, bbbabbb, bbbbbba, bbbbbbbbb } 
 
Conceitos básicos 
5. Fechamento 
– X*: concatenações de elementos (sequências) de X 
 
Exemplo: X = { a, bbb } 
 
X* = { , a, bbb, aa, abbb, bbba, bbbbbb, aaa, aabbb, abbba, 
 abbbbbb, bbbaa, bbbabbb, bbbbbba, bbbbbbbbb, aaaa, … } 
 
Conceitos básicos 
5. Fechamento 
– Exemplos: 
 
Se X = { a } e Y = { b } temos: 
 
 X* = { , a, aa, aaa, aaaa, … } 
 Y* = { , b, bb, bbb, bbbb, … } 
 
Conceitos básicos 
• Expressões envolvendo várias operações 
– Exemplos, para X = { a } e Y = { b } 
 
 X* = { , a, aa, aaa, aaaa, … } 
 Y* = { , b, bb, bbb, bbbb, … } 
 X*  Y* = { , a, b, aa, bb, aaa, bbb, aaaa, bbbb, aaaaa, … } 
 X*  Y* = {  } 
 X* – Y* = resolva! 
 
Conceitos básicos 
• Expressões envolvendo várias operações 
– Exemplos, para X = { a } e Y = { b } 
 
 X Y = { a } { b } = { ab } 
 X Y* = { a } { , b, bb, bbb, bbbb, … } = { a, ab, abb, abbb, abbbb, … } 
 Y*X = { , b, bb, bbb, bbbb, … } { a } = { a, ba, bba, bbba, bbbba, … } 
 X*Y = { , a, aa, aaa, aaaa, … } { b } = { b, ab, aab, aaab, aaaab, … } 
 Y X* = resolva! 
 X* Y* = resolva! 
 ( X Y )* = resolva! 
 
Conceitos básicos 
I.4 EXERCÍCIOS 
NOTAS DE AULA 
Obrigado! 
 
 
Aula 2 
• Autômatos Finitos 
– AFD – Autômatos Finitos Determinísticos 
– AFD de Processamento 
Autômatos Finitos 
• Autômato Finito (ou Máquina de Estado Finito) 
• Pode ser 
– Autômato de Processamento Entrada  Saída 
– Autômato de Reconhecimento Entrada  Sim/Não 
• Quanto ao determinismo 
– AFD Autômato Finito Determinístico 
– AFN Autômato Finito Não-Determinístico 
 
AFD de Processamento 
• Processamento 
– Sequência de entrada  é lida, um símbolo a cada passo 
– Sequência de saída , um símbolo gerado a cada passo 
 
 
 
 
Máquina de
Estado Finito
 *  *
AFD – Autômato Finito Determinístico 
• AFD de PROCESSAMENTO 
– Conjunto finito de estados 
– Alfabeto de entrada 
– Alfabeto de saída 
– Cada estado gera um símbolo de saída (sempre o mesmo) 
– Processamento do AFD: 
• Os estados geram os símbolos de saída 
• Os símbolos lidos da entrada geram mudança de estado 
AFD de Processamento 
• AFD – Processamento passo a passo 
• A cada passo, o AFD está em um dos estados – estado atual 
• O estado atual gera um símbolo de saída 
• Um símbolo (do alfabeto) de entrada é lido 
• Estado atual + símbolo lido  próximo estado 
• No próximo passo, o próximo estado será o estado atual 
– O processamento termina quando a entrada foi consumida 
• Todos os símbolos de entrada foram lidos 
AFD de Processamento 
• Definição 
– M = [E, I, O, fE, fO] 
• E conjunto finito de estados. E = { e0 , e1 , e2 , … , ek } 
• I alfabeto de entrada 
• O alfabetode saída 
• fO função saída. fO: E  O estado  out 
• fE função próximo estado. fE : E  I  E (estado, in)  próx estado 
– Estado inicial 
• Convenção: quando não estipulado, e0 
AFD de Processamento 
• Exemplo: Tabela 
 
 
E = { e0 , e1 , e2 } 
 
O = { 0, 1 } 
 
I = { 0, 1 } 
AFD de Processamento 
• Saída 
– fO(e0) = 0 
– fO(e1) = 1 
• Transição de estados 
– fE(e0,0) = e1 
– fE(e0,1) = e0 
 
 
 
AFD de Processamento 
• Exemplo: Grafo 
 
 
 
AFD de Processamento 
• Grafo 
– Símbolo de entrada lido 
• No arco do grafo 
• Se in for lido, vai para estado indicado 
– Símbolo de saída 
• No rótulo, “dentro” do nó 
• O estado est gera o símbolo out 
 
 
 
 
in
est / out
AFD de Processamento 
• Exemplo: estado inicial e0 
–  = 01101 
 
 
 
 
 
–  = 
 
 
 
 
 
 
 
 
011110 
AFD de Processamento 
• Processamento 
– || = || + 1  
 
 
 
 
 
Máquina de
Estado Finito
 *  *
AFD de Processamento 
• Exemplo: estado inicial e0 
–  = 1100011011 
 
 
 
 
 
–  = 
 
 
 
 
 
 
Tempo t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 
Entrada 1 1 0 0 0 1 1 0 1 1 - 
Estado e0 
Saída 
AFD de Processamento 
• Exemplo: estado inicial e0 
–  = 1100011011 
 
 
 
 
 
–  = 00011100111 
 
 
 
 
 
 
Tempo t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 
Entrada 1 1 0 0 0 1 1 0 1 1 - 
Estado e0 e0 e0 e1 e2 e2 e0 e0 e1 e1 e1 
Saída 0 0 0 1 1 1 0 0 1 1 1 
AFD de Processamento 
• Exemplo: estado inicial e0 
 
 
 
 
 
 
 
 
 
 
 
Tempo t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 
Entrada - 
Estado e0 
Saída 
AFD de Processamento 
• Exemplo: estado inicial e0 
 
 
 
 
 
–  =  
–  = 0 
 
 
 
 
 
 
Tempo t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 
Entrada - 
Estado e0 
Saída 0 
AFD de Processamento 
• Notas de aula II.3 – Exercícios 
1) a) Desenhe o grafo b) Processe  = 110010 
 
 
 
 
 
 
 
 
Estado 
Atual 
Próximo Estado Saída 
 Entrada Atual 
 0 1 
e0 e2 e1 a 
e1 e1 e0 b 
e2 e0 e1 b 
 e0 / e1 / 
 e2 / 
AFD de Processamento 
• Notas de aula II.3 – Exercícios 
1) a) Desenhe o grafo b) Processe  = 110010 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Estado 
Atual 
Próximo Estado Saída 
 Entrada Atual 
 0 1 
e0 e2 e1 a 
e1 e1 e0 b 
e2 e0 e1 b 
e0 / a
1
1
e1 / b
e2 / b
00
0
1
 = abababb 
AFD de Processamento 
• Apostila I, pág. 460 
1) a) indique a saída gerada pelo processamento de 
  = 011011010 
 
  = 
 
 
 
 
 
 
 
 
0001111110 
AFD de Processamento 
• Exercício 
Indique a saída gerada pelo processamento de 
  = 110  = 
  = 111  = 
 
 
 
 
 
 
 
 
0011 
0011 
Duas sequências de 
entrada produziram a 
mesma saída! 
AFD de Processamento 
• Apostila I, pág. 460 
2) a) Sequências de entrada  cujo processamento produziram 
  = 0011110 
 
 
 
 
 
 
 
 
AFD de Processamento 
• Apostila I, pág. 460 
2) a)  = 0011110 
 
 
 
 
 
 
 
 
0 1
e0 / 0 e3 / 0 e0 / 0 e4 / 1
e3 / 0e0 / 0
e0 / 0
0 1 0 1
e1 / 1 e2 / 1
e0 / 0
0 1
e4 / 1
e2 / 1 e1 / 1
e0 / 0 e4 / 1
e1 / 1 e2 / 1
e1 / 1
e0 / 0 e4 / 1
e2 / 1
e2 / 1 e1 / 1
e2 / 1
e2 / 1 e1 / 1
e1 / 1
e0 / 0 e4 / 1
1
1
1
0
0
0 0 0 0 01
10
111
1
0
1
0
AFD de Processamento 
• Apostila I, pág. 460 - exercício 
2) a)  = 0011110 Resposta: 
  = 110100 
 e 
  = 111010 
 
 
 
 
 
 
 
 
 
 
AFD de Processamento 
• Notas de aula II.3 – Exercícios 
6) a) Complete o grafo do AFD abaixo I = { 0, 1 } O = { a, b } 
  = 111  = abba 
 
 b)  = abbb 
  = ??? 
 
 Resposta nas Notas de Aula 
 
 
 
 
 
 
e0/ e1/
e2/
AFD de Processamento 
• Praticar! 
– Notas de aula II.3 – Exercícios 
 
 
 
 
 
 
 
 
Obrigado! 
 
 
• Autômatos Finitos Determinísticos 
– AFD reconhecedor (ou AFD de reconhecimento) 
AFD
RECONHECEDOR
 * ACEITA 
REJEITA 
Aula 3 
AFD’s de reconhecimento 
• AFD reconhecedor M 
– Alfabeto de entrada I 
– Estados não geram saída: não existe alfabeto de saída O 
– Conjunto de Estados E particionado em: 
• Estados FINAIS 
• Estados NÃO-FINAIS 
– M processa  
• Termina em estado final: ACEITA  
• Termina em estado não final: REJEITA  
 
 
efinal enão-final
AFD’s de reconhecimento 
• Exemplo 
– AFD de reconhecimento M 
 
• Estados FINAIS: e2 e e4 
• M ACEITA as sequências 
– 01, 011, 110,  
• M REJEITA as sequências 
– 0, 00, 101,  
 
e0
1
e3
0
e4
e1
0
1e2
1
0
1
0
0
1
AFD’s de reconhecimento 
• L(M) – Linguagem reconhecida por um AFD M 
– M processa todas as sequências do conjunto I* 
– Partição do conjunto I* 
• I* = S  S’ 
• S = linguagem reconhecida por M  Notação: L(M) 
• S’ = conjunto das sequências rejeitadas por M 
AFD’s de reconhecimento 
• Apostila I, PROBLEMA PRÁTICO 40, pág. 448 
– Caracterizar L(M) em português 
 
 
 
 
– L(M) = 
– Resposta: 
{ 0 } 
Apenas a sequência 0 
AFD’s de reconhecimento 
• Apostila I, PROBLEMA PRÁTICO 40, pág. 448 
– Caracterizar L(M) em português 
 
 
 
 
– L(M) = 
– Resposta: 
{ 0, 1 } 
Apenas as sequências 0 e 1, ou 
Sequências de comprimento um 
AFD’s de reconhecimento 
• Apostila I, PROBLEMA PRÁTICO 40, pág. 448 
– Caracterizar L(M) em português 
 
 
 
 
– L(M) = 
– Resposta: 
{ 10, 010, 0010, 00010,  } 
Sequências de sufixo 10 que contenham 
um único símbolo 1 
AFD’s de reconhecimento 
• Apostila I, PROBLEMA PRÁTICO 40, pág. 448 
– Caracterizar L(M) em português 
 
 
 
 
– L(M) = 
– Resposta: 
{ , 11, 1111, 111111,  } 
Sequências de comprimento par que 
não contenham o símbolo 0 
AFD’s de reconhecimento 
• Exercícios 
– Caracterizar L(M) em português 
a) 
 
 
 
– L(M) = Apenas a sequência vazia. 
a,b
e0
a,b
e1
AFD’s de reconhecimento 
• Exercícios 
 
e) 
 
 
 
– L(M) = Sequências de comprimento ímpar. 
a,b
e1
a,b
e0
AFD’s de reconhecimento 
• Exercícios 
 
b) 
 
 
 
– L(M) = Sequências que não contenham o símbolo b. 
b a,b
a
e0 e1
AFD’s de reconhecimento 
• Exercícios 
 
f) 
 
 
 
– L(M) = Conjunto vazio. 
 
(M não reconhece nenhuma sequência) 
a
e0
a,b
b
e1
AFD’s de reconhecimento 
• Exercícios 
 
c) 
 
 
 
– L(M) = Sequências que contenham dois 
símbolos b’s consecutivos. 
b
e2e0 e1
b a,b
a
a
AFD’s de reconhecimento 
• Exercícios 
 
g) 
 
 
 
– L(M) = Sequências que contenham dois símbolos b. 
ou 
Sequências que contenham dois ou mais b’s. 
 
b
e2e0 e1
b a,b
aa
AFD’s de reconhecimento 
• Exercícios 
 
d) 
 
 
 
– L(M) = Sequências que não contenham nenhum 
símbolo sucedido por outro igual. 
e3
0
1
0
1
0,1
e1
e0
e2
0
1
AFD’s de reconhecimento 
• Exercícios 
 
h) 
 
 
 
– L(M) = Sequências em que o símbolo inicial seja 
diferente do último símbolo. 
e0
1
e3
0
e4
e1
0
1e2
1
0
1
0
0
1
AFD’s de reconhecimento 
• Notas de aula 
– III.4 EXERCÍCIOS 
• APOSTILA: pág. 463 em diante, ver enunciado nas notas de aula 
• Questões: 9 a 12 
 
Obrigado! 
 
 
• Construindo um AFD de reconhecimento 
– AFD deve: 
• Reconhecer   L(M)  terminar em um estado final 
• Não reconhecer   L(M)  terminar em um estado não-final 
 
Aula 4 
a) L(M): Sequências iniciadas com o símbolo ‘a’. 
Construindo um AFD reconhecedor 
a
e0
e2 a,b
b
a,be1
b) L(M): Sequências finalizadas por ‘a’. 
Construindo um AFD reconhecedor 
a
b
e0b ae1
c) L(M): Seqs iniciadas por dois símbolos iguais. 
Construindo um AFD reconhecedor 
e0
b
e2
e1
a
a,be4
a
a,b e3
b
a
b
d) L(M): Seqs terminadas com dois símbolos iguais. 
Construindo um AFD reconhecedor 
e0
b
e2
e1a
be4
b
b
a e3 a
a
b
a
e) L(M): Seqs com a’s e b’s de comprimento par. 
Construindo um AFD reconhecedor 
a,b
a,b
e0 e1
f) L(M): Seqs contendo um nº par de ‘a’s. 
Construindo um AFD reconhecedor 
a
a
e0 e1b b
g) L(M): Seqs em que o 2º símbolo é ‘a’. 
Construindo um AFD reconhecedor 
a
e2
e0 e1
a,b
a,b
e1
b
a,b
h) L(M): Seqs em que o penúltimo símbolo é ‘a’. 
Construindo um AFD reconhecedor 
a
e2
e0 e1
a
a
b
e3
b b
a
b
i) L(M): Seqs que contenham dois ‘1’s consecutivos. 
Construindo um AFD reconhecedor 
1
e2e0 e1
1
0,1
0
0
j) Seqs terminadas com ‘101’. 
Construindo um AFD reconhecedor 
0
e3e0 e1
1
0
e2
1
1
0
1
0
k) Seqs em que todo ‘a’ é sucedido por ‘b’. 
Construindo um AFD reconhecedor 
e0
e1
a
a
e3 a,b
b
b
l) Seqs de comprimento par finalizadas por ‘a’. 
Construindo um AFD reconhecedor 
a,b e2
e0 e1
a,b
b
a
a,b e3
Construindo um AFD reconhecedor 
• Notas de aula 
– III.4 EXERCÍCIOS 
• Questões: 13 a 16 
 
Obrigado! 
 
 
• Expressões regulares 
• Linguagens regulares 
– Conjuntos regulares (caracterizados por expressões regulares) 
 
Aula 5 
• Expressões regulares formadas por um alfabeto I 
– Os símbolos  e  
– Todo símbolo i  I 
• E mais: se A e B são expressões regulares, então 
– Concatenação: AB é uma expressão regular (pode-se escrever AB) 
– Ou: A  B é uma expressão regular (lê-se A ou B) 
– Estrela: A* é uma expressão regular (lê-se A estrela) 
 
Expressões regulares 
• Exemplos, para I = { a, b } 
 
   
 a expressões elementares 
 b 
 aa concatenação das expressões a e a 
 ab ba bb outras concatenações 
 a  b a ou b 
 a* a estrela 
 
Expressões regulares 
• Expressões compostas 
 
 a(a*) a concatenada com a* 
 (aa)* estrela da expressão aa 
 aa* ? 
 
 a  (b*) a ou b* 
 (a  b)* estrela da expressão a  b 
 a  b* ? 
 
 
Expressões regulares 
• Precedência de operações 
1. * Estrela 
2.  Concatenação 
3.  Ou 
Expressões regulares 
• Exemplos 
 
 aa*  a(a)* a concatenada com a* 
 
 a  b*  a  (b*) ou da expressão a com b* 
 
 aa  b  (aa)  b ou de aa com b 
 a(a  b) a concatenada com a  b 
 a(a  b)*  a[(a  b)*] a concatenada com (ab)* 
 
 
Expressões regulares 
• Expressões regulares caracterizam as linguagens regulares 
• Notação 
– Se X é uma expressão regular 
– L(X) denota a linguagem regular caracterizada por X 
• Conjunto de sequências caracterizado pela expressão regular 
Linguagens regulares 
• Linguagens definidas por expressões regulares elementares 
– L (  ) = { } 
– L (  ) = {  } 
• Para todo i  I 
– L ( i ) = { i } 
Linguagens regulares 
• Exemplos para I = { a, b } 
 
L ( a ) = { a } 
L ( b ) = { b } 
Linguagens regulares 
• Linguagens definidas por expressões regulares compostas 
• se A e B são expressões regulares, então 
– L ( AB ) = L(A)  L(B) concatenação de L(A) com L(B) 
– L ( A  B ) = L(A) U L(B) união de L(A) com L(B) 
– L ( A* ) = ( L(A) )* fechamento do conjunto L(A) 
Linguagens regulares 
• Exemplos para I = { a, b } 
 
L ( aa ) = 
L ( ab ) = 
L ( ab ) = 
L ( a* ) = 
 
 
 L(a)L(a) = {a} {a} = { aa } 
 = {a} {b} = { aa } 
 L(a) U L(b) = {a} U {b} = { a,b } 
 (L(a))* = {a}* = { , a, aa, aaa,  } 
 
 
Linguagens regulares 
• Exemplos para I = { a, b } 
 
L ( aa* ) = 
 
 
L ( (aa)* ) = 
 
 
 
 
 {a} {a}* = {a} { , a, aa, aaa,  } 
 = { a, aa, aaa, aaaa,  } 
 
 {aa}* = { , aa, aaaa, aaaaaa,  } 
 
Linguagens regulares 
 
 
 {aa} U {b} = { a, bb } 
 
 
 {a} {a,b} = { aa, ab } 
 
 
 { a,b } { a,b } 
 = {aa, ab, ba, bb } 
 
 
• Exemplos para I = { a, b } 
 
L ( aab ) = 
 
 
L (a(ab)) = 
 
 
L ((ab)(ab)) = 
 
Linguagens regulares 
• Exemplos (solução nas notas de aula) 
 
L ( ab* ) = 
 
 
L ( a*  b*) = 
 
 
L ( aa*  bb*) = 
 
Linguagens regulares 
• Exercícios (solução nas notas de aula) 
Descreva em português 
 
L ( (aa)*  (bb)*) = 
 
L ( (aa  bb)*) = 
 
L ( (a  b)*) = 
 
L ( a(a  b)*) = 
 
L ( (a  b)*a) = 
 
Linguagens regulares 
• Exercícios (solução nas notas de aula) 
Descreva em português 
 
L ( (a  b) (a  b)*) = 
 
L ( (a  b) a (a  b)*) = 
 
L ( (a  b)* a (a  b)) = 
 
L ( ( (a  b) (a  b) )* ) = 
 
 
Linguagens regulares 
• Exercícios (solução nas notas de aula) 
Descreva em português 
 
 
L ( (ab*)*) = 
 
 
 
 
L ( (a*b)*) = 
 
 
Linguagens regulares 
• Exercícios (solução nas notas de aula) 
Escreva as expressões regulares que caracterizem as linguagens 
 
a) Sequências iniciadas com dois símbolos iguais. 
b) Sequências finalizadas por dois símbolos diferentes. 
c) Sequências que tenham comprimento ímpar. 
d) Sequências que tenham no mínimo um símbolo a. 
e) Sequências que tenham dois a’s consecutivos 
Linguagens regulares 
• Exercícios (solução nas notas de aula) 
Escreva as expressões regulares que caracterizem as linguagens 
 
f) Sequências que tenham exatamente dois símbolos a. 
g) Sequências com uma quantidade par de a’s. 
h) Sequências em que o 2º símbolo é a, e o 4º símbolo é b. 
i) Sequências que contenham no mínimo dois símbolos. 
j) Sequências contendo no máximo três símbolos. 
 
 
Linguagens regulares 
Obrigado! 
 
 
• Teorema de Kleene 
Aula 6 
• Teorema de Kleene 
 
Teorema de Kleene 
• Exercícios 
– Construir um AFD que reconheça as linguagens a seguir: 
a. L(a*) 
 
Teorema de Kleene 
b
e0
a,b
e1
a
• Exercícios 
– Construir um AFD que reconheça as linguagens a seguir: 
b. L(aa*) 
 
Teorema de Kleene 
a
a
a,b
e0 e1
e2
b b
• Exercícios 
– Construir um AFD que reconheça as linguagens a seguir: 
c. L(a*a) = L(aa*) 
 
Teorema de Kleene 
a
a
a,b
e0 e1
e2
b b
• Exercícios 
– Construir um AFD que reconheça as linguagens a seguir: 
d. L [ a(avb)* ] 
 
Teorema de Kleene 
a
a,b
a,b
e0
e1
e2
b
• Exercícios 
– Construir um AFD que reconheça as linguagens a seguir: 
e. L [ (aa)* ] 
 
Teorema de Kleene 
a
a,be2
b b
a e1e0
• Exercícios 
– Construir um AFD que reconheça as linguagens a seguir: 
f. L [ (avb) (avb)* ] 
g. L [ (avb) a (avb)* ] 
h. L [ ( (avb) (avb) )* ] 
i. L [ aa* v bb* ] 
j. L [ (avb)* a (avb) ] 
k. L (a* v b*) 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
• Exercícios 
– Escrever as expressões regulares das linguagens reconhecidas pelos 
autômatos a seguir: 
 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
a,b
e0 e1
a,b
• Exercícios 
– Escrever as expressões regulares das linguagens reconhecidas pelos 
autômatos a seguir: 
 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
e0
a
b
e1
a
b
• Exercícios 
– Escrever as expressões regulares das linguagens reconhecidas pelos 
autômatos a seguir: 
 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
e0
a
a,b
e1
b
• Exercícios 
– Escrever as expressões regulares das linguagens reconhecidas pelos 
autômatos a seguir: 
 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
e0
a
b a
e1
b
• Exercícios 
– Escrever as expressões regulares das linguagens reconhecidas pelos 
autômatos a seguir: 
 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
e0
0,1
e1 e2
0,1
0,1
• Exercícios 
– Escrever as expressões regulares das linguagens reconhecidas pelos 
autômatos a seguir: 
 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
a
e1
a
bbb
a
e0 e2
• Exercícios 
– Escrever as expressões regulares das linguagens reconhecidas pelos 
autômatos a seguir: 
 
 
Teorema de Kleene 
Respostas nas Notas de Aula 
0
1
0,1
e1
e0
00
1
e2 e3
1
• Exercícios 
– Notas de aula, IV.5 – Exercícios 
 
Teorema de Kleene 
Obrigado! 
 
 
• Relações e operações envolvendo linguagens regulares 
• AFN – Autômatos Finitos Não-determinísticos 
Aula 7 
• Relações de pertinência Resp. 
i. a ∈ L ( a(avb)*) ? 
ii. aa ∈ L ( a(avb)* ) ? 
iii. λ ∈ L ( a(avb)* ) ? 
iv. ab ∈ L ( a(avb)* ) ? 
v. ba ∈ L ( a(avb)* ) ? 
 
Relações envolvendo Linguagens Regulares 
i. Sim 
ii. Sim 
iii. Não 
iv. Sim 
v. Não 
• Relações de inclusão 
vi. L( a* ) ⊂ L( aa* ) ? 
vii. L( aa* ) ⊂ L( a* ) ? 
viii. L( a* ) ⊂ L( a(avb) * ) ? 
ix. L( aa* ) ⊂ L( a(avb)* ) ? 
x. L( a(avb)* ) ⊂ L( aa* ) ? 
 
 
Relações envolvendo Linguagens Regulares 
Respostas a seguir 
• Relações de inclusão: respostas 
vi. L( a* ) ⊄ L( aa* ), pois λ ∈ L( a* ) mas λ ∉ L( aa* ) 
vii. L( aa* ) ⊂ L( a* ) 
viii. L( a* ) ⊄ L( a(avb) * ), pois λ ∈ L( a* ) mas λ ∉ L( a(avb) * ) 
ix. L( aa* ) ⊂ L( a(avb)* ) 
x. L( a(avb)* ) ⊄ L( aa* ), pois ab ∈ L( a(avb)* ) mas ab ∉ L( aa* ) 
 
 Relembrando: 
 L( a* ) = { λ, a, aa, aaa, aaaa,  } 
 L( aa* ) = { a, aa, aaa, aaaa,  } 
 
Relações envolvendo Linguagens Regulares 
• A partir do Teorema de Kleene, pode-se provar que 
– O conjunto das linguagens regulares é fechado sobre as operações de 
• União, Interseção 
• Diferença, Complemento 
– Em outras palavras 
• As operações de união, interseção, diferença e complemento 
envolvendo linguagens regulares resultam em conjuntos que 
também são linguagens regulares 
Operações envolvendo Linguagens Regulares 
• Exemplos 
i. L ( a* ) ∪ L ( b* ) = 
ii. L ( a* ) ∩ L ( b* ) = 
iii. L ( a* ) – L ( λ ) = 
Operações envolvendo Linguagens Regulares 
L ( a* v b* ) 
L ( λ ) 
L ( aa* ) 
• Exercícios 
– Caracterize por expressão regular os conjuntos resultantes 
das operações a seguir: 
iv. L ( a* ) – L ( b* ) = 
v. L ( (a v b)* ) – L ( λ ) = 
vi. L ( a* v b* ) – L ( λ ) = 
vii. L ( a* ) – L ( (aa)* ) = 
viii. L ( a(avb)* ) – L ( a* ) = 
 
Operações envolvendo Linguagens Regulares 
Respostas a seguir 
• Exercícios 
– Respostas: 
 
iv. L ( a* ) – L ( b* ) = 
v. L ( (a v b)* ) – L ( λ ) = 
vi. L ( a* v b* ) – L ( λ ) = 
vii. L ( a* ) – L ( (aa)* ) = 
viii. L ( a(avb)* ) – L ( a* ) = 
 
Operações envolvendo Linguagens Regulares 
L ( aa* ) 
L ( (a v b)(a v b)* ) 
L ( aa* v bb* ) 
L ( a(aa)* ) 
L ( aa*b(avb)* ) ou 
L ( a(avb)*b(avb)* ) 
• Exemplo 
1. M1 
AFN – Autômatos Finitos Não-determinísticos 
Marca de estado inicial 
q0 q1
a,b
a
• Autômatos Finitos Não-determinísticos* 
– O estado atual lê um símbolo e tem várias opções de transição 
– O estado atual lê um símbolo e não tem nenhuma opção de transição 
• O AFN “trava”, sem reconhecer a sequência (mesmo que o estado seja final), 
pois a sequência não foi inteiramente processada 
– Um estado, ao não ler nenhuma entrada, pode ir para outros estados 
 
AFN – Autômatos Finitos Não-determinísticos 
*Em inglês: NFA – Nondeterministic Finite Automaton 
• Processamento de sequências 
1. M1 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
a a a aaa é processada por M1 
q0 q0 q0 q0 M1 não termina em estado final 
a a a aaa não é inteiramente 
q0 q0 q1 ? processada por M1 
a a a aaa é processada por M1 
q0 q0 q0 q1 M1 termina em estado final 
q0 q1
a,b
a
M1 reconhece 
a sequência aaa 
• Processamento de sequências 
1. M1 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
a b ab é processada por M1 
q0 q0 q0 M1 não termina em estado final 
a b ab não é não é inteiramente 
q0 q1 ? processada por M1 
q0 q1
a,b
a
M1 não reconhece 
a sequência ab 
• Processamento de sequências 
– Um AFN M reconhece uma sequência de entrada α se 
existe alguma linha de processamento tal que M 
 processe toda a sequência α 
 e 
 termine em um estado final 
 
AFN – Autômatos Finitos Não-determinísticos 
• Linguagens reconhecidas por AFN’s 
1. M1 
 
 
 
 
 
Notação: L(M1) = L( (avb)*a ) 
AFN – Autômatos Finitos Não-determinísticos 
q0 q1
a,b
a
• Linguagens reconhecidas por AFN’s 
– Equivalência entre os AFN’s e os AFD’s 
• Os AFN’s possuem a mesma capacidade de processamento dos AFD’s. 
 
Ou seja: 
 
• Os AFN’s reconhecem linguagens regulares 
 
– Prova 
• Todo AFN pode ser convertido em um AFD 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
• Convertendo AFN’s em AFD’s 
– 1º Passo: grafo → tabela do AFN 
• Exemplo: M1 → M1’ 
 
 
 
 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
q0 q1
a,b
a
AFN a b 
> q0 {q0,q1} {q0} 
* q1 ∅ ∅ 
Marca de estado final 
• Convertendo AFN’s em AFD’s 
– 2º Passo: tabela do AFN → tabela do AFD 
• Exemplo: M1 → M1’ 
 
 
 
 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
AFN a b 
> q0 {q0,q1} {q0} 
* q1 ∅ ∅ 
AFD a b 
> e0 = {q0} e1 = {q0,q1} e0 = {q0} 
* e1 = {q0,q1} e1 = {q0,q1} e0 = {q0} 
Estado final do AFD: 
contém q1 (estado final do AFN) 
• Convertendo AFN’s em AFD’s 
– 3º Passo: tabela do AFD → grafo do AFD 
• Exemplo: M1 → M1’ 
 
 
 
 
 
 
 
 
L(M1’) = L ( (avb)*a ) 
 
 
 
 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
AFD a b 
> e0 e1 e0 
* e1 e1 e0 
a
b
e0b ae1
M1’ 
• Processamento de sequências 
2. M2 
 
 
 
 
 
M2 reconhece 
a sequência baa 
AFN – Autômatos Finitos Não-determinísticos 
b a a baa é processada por M2 
q0 q0 q0 q1 M1 não termina em estado final 
b a a aaa é processada por M2 
q0 q0 q1 q2 M1 termina em estado final 
q0
a,b
a
q2q1
a
• Convertendo AFN’s em AFD’s 
– 1º Passo: grafo → tabela do AFN 
• Exemplo: M2 → M2’ 
 
 
 
 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
q0
a,b
a
q2q1
a
AFN a b 
> q0 {q0,q1} {q0} 
 q1 {q2} ∅ 
* q2 ∅ ∅ 
• Convertendo AFN’s em AFD’s 
– 2º Passo: tabela do AFN → tabela do AFD 
• Exemplo: M2 → M2’ 
 
 
 
 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
AFD a b 
> e0 = {q0} e1 = {q0,q1} e0 = {q0} 
 e1 = {q0,q1} e2 = {q0,q1,q2} e0 = {q0} 
* e2 = {q0,q1,q2} e2 = {q0,q1,q2} e0 = {q0} 
AFN a b 
> q0 {q0,q1} {q0} 
 q1 {q2} ∅ 
* q2 ∅ ∅ 
• Convertendo AFN’s em AFD’s 
– 3º Passo: tabela do AFD → grafo do AFD 
• Exemplo: M2 → M2’ 
 
 
 
 
 
 
 
 
 
 
L(M2’) = L ( (avb)*aa ) 
 
 
 
 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
AFD a b 
> e0 e1 e0 
 e1 e2 e0 
* e2 e2 e0 
a
be0b ae2
e1
a
b
M2’ 
• Exercícios 
– Converta os AFN’s abaixo para seus AFD’s equivalentes 
 
a) M3 b) M4 
 
 
 
 
 
 
 
 
AFN – Autômatos Finitos Não-determinísticos 
q0
a,b
a
q2q1
a
q4q3
bb
q0
a,b
a
q2
q1 a
q3
b
b
AFN – Autômatos Finitos Não-determinísticos 
• Referência 
– HOPCROFT, John E; MOTWANI, Rajeev; ULMAN, Jeffrey D. 
Introdução à teoria dos autômatos, linguagens e computação. 
Rio de Janeiro: Elsevier, 2002. 
Obrigado! 
 
 
• Linguagens Não–Regulares 
• Autômatos de Pilha (Máquinas de pilha) 
Aula 8 
• Linguagem regular 
– Caracterizada por expressão regular 
– Reconhecida por um AFD (e também por AFN) 
• Linguagens não–regulares 
– Existem linguagens que não são regulares? 
Linguagens Não–regulares 
• Exemplos 
 
 
Linguagens Não–regulares 
L1 é regular  a(avb)* ou AFD 
L2 é regular  a(ab)* ou AFD 
L3 é regular  expr. regular 
 ou AFD 
L4 não é regular, ou L4 é não–regular 
‒ L1 = Sequências iniciadas por a 
‒ L3 = Sequências com quantidade par 
 de a’s e quantidade par de b’s 
‒ L2 = { a, aab, aabab, aababab, ... } 
‒ L4 = { λ, ab, aabb , aaabbb, aaaabbbb, ... } 
• L = { λ, ab, aabb , aaabbb, aaaabbbb, ... } = { anbn | n  0 } 
 
ou simplesmente, 
 
L = anbn 
 
onde a0 = λ 
 a1 = a 
 a5 = aaaaa 
 
Linguagens Não–regulares 
‒ Definição 
 a0 = λ 
 an = aan–1 para n  IN* 
• A linguagem anbn é não–regular 
– Não existe expressão regular que a caracterize 
– Não existe AFD que a reconheça 
 
Linguagens Não–regulares 
• A linguagem anbn é não–regular 
– Não existe AFD que 
reconheça a linguagem 
{ λ, ab, aabb , aaabbb, ... } 
Linguagens Não–regulares 
s1s0
a b
s2
s3
b
a b
s5
b
a b
...
...
s4
s6
Seria necessário um número 
infinito de estados! 
• Limitação dos Autômatos Finitos 
– A “memória” está nos estados– Conjunto finito de estados = memória finita 
 
• Toda linguagem que necessite de 
“memória indeterminada” para ser reconhecida 
não pode ser reconhecida por autômatos finitos 
Linguagens Não–regulares 
• Exemplos 
Linguagens Não–regulares 
L1 é não–regular 
L2 é não–regular 
‒ L1 = a
nbn = { anbn | n  0 } 
‒ L2 = a
nbn+1 = { b, abb, aabbb, aaabbbb, ... } 
‒ L3 = a
nb2n = { λ, abb, aabbbb, ... } L3 é não–regular 
‒ L5 = Sequências com quantidade de a’s 
 igual à quantidade de b’s 
L4 = (ab)* é regular ‒ L4 = (ab)
n = { λ, ab, abab, ababab, ... } 
L5 é não–regular 
• Exemplos 
Linguagens Não–regulares 
L6 = a*b* é regular 
L7 é não–regular 
‒ L6 = { a
nbm | n,m  0 } 
‒ L7 = Palíndromos com a’s e/ou b’s 
 Exemplos: λ, a, bb, aba, abba, babbab, ... } 
‒ L9 = Sequências com mais a’s do que b’s 
L8 = a*(bb)* é regular ‒ L8 = { a
nb2m | n,m  0 }... } 
L9 é não–regular 
• Limitação dos autômatos finitos 
– Memória limitada 
• Solução 
– Adicionar memória “externa” aos estados 
 
Autômatos de Pilha 
• Autômato de pilha* 
– Conjunto finito de estados 
– Pilha como memória auxiliar 
• Estrutura linear “LIFO” 
• Símbolo Z0: início da pilha 
• Exemplo: 
– Empilhar nesta ordem: a, b, b 
 
 
*Também conhecido como Máquina de Pilha 
Autômatos de Pilha 
topo  b 
b 
a 
Z0 
• Autômato de pilha 
– A cada passo, o estado atual 
• Lê um símbolo da entrada 
• Manipula a pilha 
• Vai para próximo estado 
 
Autômatos de Pilha 
topo  b 
b 
a 
Z0 
• Exemplo 
– Reconhecer linguagem anbn 
 
 processar aaaabbbb 
 
• A cada passo lê símbolo a 
 empilha símbolo a 
 lê símbolo b 
 desempilha símbolo a 
• Fim do processamento 
 Pilha vazia! 
 
Autômatos de Pilha 
Z0 
a 
a 
a 
a 
 sequência reconhecida! 
• Resumo 
– Reconhecimento da linguagem anbn 
– Estado q0 lê símbolo a, empilha símbolo a, continua em q0 
Estado q0 lê símbolo b, desempilha símbolo a, vai para estado q1 
Estado q1 lê símbolo b, desempilha símbolo a, continua em q1 
Autômatos de Pilha 
• Simplificação no autômato de pilha 
– A cada passo, o estado atual 
– Lê entrada; Desempilha; Empilha 
 
– Simbologia 
– Estado atual qatual 
– Lê símbolo i da entrada 
– Desempilha um símbolo d 
– Empilha um sequência e 
– Vai para próximo estado qprox 
Autômatos de Pilha 
i,d,e
qatual qprox
• Reconhecimento da linguagem anbn 
• Estado q0 empilha todos os a’s lidos; desempilha último a lido 
Estado q1 desempilha todos os demais a’s lidos 
 
• Solução final 
Autômatos de Pilha 
b,a,ε
q0
ε,Z0,Z0
q2q1
a,Z0,aZ0
a,a,aa b,a,ε
ε,Z0,Z0
• Examinando o autômato que reconhece a linguagem anbn 
 
• q0 , lendo a, se desempilhar Z0 
 empilha Z0 depois a 
 e continua em q0 
• q0 , lendo a, se desempilhar a 
 empilha a depois a 
 e continua em q0 
• q0 , lendo b, se desempilhar a 
 empilha ε 
 e vai para q1 
 
Autômatos de Pilha 
b,a,ε
q0
ε,Z0,Z0
q2q1
a,Z0,aZ0
a,a,aa b,a,ε
ε,Z0,Z0
• Examinando o autômato que reconhece a linguagem anbn 
 
• q1 , lendo b, se desempilhar a 
 empilha ε 
 e continua em q1 
• q1 , lendo ε, se desempilhar Z0 
 empilha Z0 
 e continua em q0 
• q0 , lendo ε, se desempilhar Z0 
 empilha Z0 
 e vai para q2 (estado final) 
 
Autômatos de Pilha 
b,a,ε
q0
ε,Z0,Z0
q2q1
a,Z0,aZ0
a,a,aa b,a,ε
ε,Z0,Z0
• Reconhecimento da linguagem anbn 
– Processando aabb 
 
 
 
 
 
– Último estado: q2  sequência reconhecida 
Autômatos de Pilha 
b,a,ε
q0
ε,Z0,Z0
q2q1
a,Z0,aZ0
a,a,aa b,a,ε
ε,Z0,Z0
ESTADO 
ATUAL 
ENTRADA TRANSIÇÃO 
PILHA APÓS 
TRANSIÇÃO 
q0 aabb (q0,a,Z0)(q0,aZ0) aZ0 
q0 abb (q0,a,a)(q0,aa) aaZ0 
q0 bb (q0,b,a)(q1,ε) aZ0 
q1 b (q1,b,a)(q1,ε) Z0 
q1 λ (q1,ε,Z0)(q2,Z0) Z0 
• Reconhecimento da linguagem anbn 
– Transições: (qatual, i, d)  (qprox,e) 
 
• i símbolo lido 
• d símbolo desempilhado 
• e sequência empilhada, símbolo após símbolo 
Autômatos de Pilha 
• Reconhecimento da linguagem anbn 
– Processando aab 
 
 
 
 
 
– Estado final: q1  sequência não reconhecida 
Autômatos de Pilha 
b,a,ε
q0
ε,Z0,Z0
q2q1
a,Z0,aZ0
a,a,aa b,a,ε
ε,Z0,Z0
ESTADO 
ATUAL 
ENTRADA TRANSIÇÃO 
PILHA APÓS 
TRANSIÇÃO 
q0 aab (q0,a,Z0)(q0,aZ0) aZ0 
q0 ab (q0,a,a)(q0,aa) aaZ0 
q0 b (q0,b,a)(q1,ε) aZ0 
q1 λ (q1,ε,a) ??? aZ0 
• Reconhecimento da linguagem anbn 
– Processando λ 
 
 
 
 
 
– Último estado: q2  sequência reconhecida 
Autômatos de Pilha 
b,a,ε
q0
ε,Z0,Z0
q2q1
a,Z0,aZ0
a,a,aa b,a,ε
ε,Z0,Z0
ESTADO 
ATUAL 
ENTRADA TRANSIÇÃO 
PILHA APÓS 
TRANSIÇÃO 
q0 λ (q0,ε,Z0)(q2, Z0) Z0 
• Exercícios 
– Desenhar autômatos de pilha que reconheçam as linguagens 
anbn+1 anb2n a2nbn anban 
Sequências que tenham mais a’s do que b’s 
Palíndromos 
 
– Para estudar 
• HOPCROFT, John E; MOTWANI, Rajeev; ULMAN, Jeffrey D. 
Introdução à teoria dos autômatos, linguagens e computação. 
Rio de Janeiro: Elsevier, 2002. 
Autômatos de Pilha 
Obrigado! 
 
 
• Linguagens não–regulares 
• Máquina de Turing 
 
– Referência 
• MIDIATECA do AVA: Apostila II – Máquina de Turing, 
que é um trecho do livro: 
 
 GERSTING, J. L. Fundamentos matemáticos para a ciência da 
 computação. 5ª ed., Rio de Janeiro: LTC, 2004. 
Aula 9 
• Limitações do Autômato de pilha 
– A Máquina de Pilha não reconhece a linguagem { anbnan | n  0 } * 
• A limitação reside na inserção/remoção apenas no topo da pilha 
 
– Solução 
 Máquina de Turing 
 
*A adoção de duas pilhas resolveria o problema, mas este 
 seria outro autômato, equivalente à MT 
Linguagens Não-regulares 
• Características da Turing Machine 
– Memória auxiliar 
• Bidirecionalmente infinita 
• Cabeça de Leitura/Escrita: Acesso sequencial – movimentação da cabeça 
 Leitura/Escrita em qualquer posição 
 
 
 
 
 
 
 
Máquina de Turing 
. . . b a b b a b b b . . . 
 
Cabeça de Leitura/Escrita 
• Características da Turing Machine 
– Conjunto finito de estados 
• E = { 0, 1, 2, 3, ..., k } 
• Estado inicial: se não indicado, será o estado 0 
• Durante o processamento, a MT vai mudando de estados 
 
Máquina de Turing 
Estado atual 
. . . b a b b a b b b . . . 
 
2 
. . . b a b b a b b b . . . 
 
0 
• Características da Turing Machine 
– Antes do processamento 
• No início, a memória é “zerada” com caracter 'espaço': b 
• A sequência de entrada é colocada na memória, em qualquer posição 
• Cabeça de leitura/gravação posicionada no símbolo mais a esquerda 
• Estado atual = no estado inicial 
Máquina de Turing 
Estado inicial 
• Transições em uma MT 
 
 
 
 
– Formato das instruções 
 
• Estado atual 
• Símbolo lido da memória 
• Símbolo escrito na memória 
• Movimento da cabeça para Esquerda ou Direita 
• No próximo passo, a MT vai para próximo estado 
Máquina de Turing 
b,y,E
2
4
a,x,D
3
• Exemplo 
– Sendo o estado atual 2 
• Se símbolo a for lido 
 escreve x 
 movimenta cabeça para Direita 
 vai para estado 3 
• Se símbolo b for lido 
 escreve y 
 movimenta cabeça para Esquerda 
 vai para estado 4 
Máquina de Turing 
b,y,E
2
4
a,x,D
3
• Exemplo 
– Notação por quíntuplas 
(e, i, i’, e’, d) 
• e: estado atual 
• i: símbolo lido 
• i ’, símbolo escrito 
• e’: próximo estado 
• d: deslocamento 
Máquina de Turing 
b,y,E
2
4
a,x,D
3
(2,a,x,3,D) 
(2,b,y,4,E) 
• Exemplo 
– Passo atual 
 
 
 
 
 
 
 
 
– Próximo passo 
 
Máquina de Turing 
b,y,E
2
4
a,x,D
3
(2,a,x,3,D) 
(2,b,y,4,E) 
. . . b a b b a b b b . . . 
 
2 
. . . b a y b a b b b . . . 
 
4 
• Exemplo 27 
– Apostila II – Máquina de Turing, 
pág. 471 e i i ’ e’ d 
 
Máquina de Turing 
• Processamento 
– Apostila II – Máquina de Turing, pág. 472 
sequência de entrada 0110 
 
 
– Configuração inicial 
Máquina de Turing 
. . . b 0 1 1 0 b b b . . . 
 
0 
• Exemplo 
– Configuração inicial 
 
 
 
 
 
 
 
 
– Configuração final 
 
Máquina de Turing 
. . . b 0 1 1 0 b b b . . . 
 
0 
. . . . . . . . . b1 0 0 0 0 b b . . . 
 
1 
• Processamento 
– Configuração inicial: sequência de entrada α = 0110 
 
 
 
 
 
 
 
 
– Configuração final: sequência de saída β = 10000 
 
Máquina de Turing 
. . . b 0 1 1 0 b b b . . . 
 
0 
. . . b 1 0 0 0 0 b b . . . 
 
1 
• Exercício: Qual a função efetuada pela MT? 
– Configuração inicial: α = 1011 
 
 
 
 
 
 
 
 
– Configuração final: β = 
 
Máquina de Turing 
. . . b 1 0 1 1 b b b . . . 
 
0 
. . . . . . 
10110 
MT: (0,0,0,0,D) 
 (0,1,1,0,D) 
 (0,b,0,1,D) 
. . . b 1 0 1 1 0 b b . . . 
 
1 
• Qual a função efetuada pela MT? 
– Configuração inicial: α = 1011 
– Configuração final: β = 10110 
 
– Qual a função efetuada por esta MT? 
Máquina de Turing 
= (11)10 
= (22)10 
R.: f(x) = 2x, ou seja 
 computa o dobro do valor da entrada 
 (em formato binário) 
MT: (0,0,0,0,D) 
 (0,1,1,0,D) 
 (0,b,0,1,D) 
• Exercício: Qual a função efetuada pela MT? 
– Configuração inicial: α = 10110 
 
 
 
 
 
 
 
 
– Configuração final: β = 
 
Máquina de Turing 
. . . b 1 0 1 1 0 b b . . . 
 
0 
. . . . . . 
10110I 
MT: (0,0,0,0,D) 
 (0,1,1,1,D) 
 (1,0,0,1,D) 
 (1,1,1,0,D) 
 (0,b,P,2,D) 
 (1,b,I,2,D) 
. . . b 1 0 1 1 0 I b . . . 
 
2 
• Qual a função efetuada pela MT? 
– Configuração inicial: α = 10110 
– Configuração final: β = 
 
– Resposta: verifica a paridade dos 1’s, 
 acrescentado ao final da 
 sequência: P = paridade par 
 I = paridade ímpar 
Máquina de Turing 
10110I 
MT: (0,0,0,0,D) 
 (0,1,1,1,D) 
 (1,0,0,1,D) 
 (1,1,1,0,D) 
 (0,b,P,2,D) 
 (1,b,I,2,D) 
• Exercícios 8.3 
– Apostila II – Máquina de Turing, pág. 483 em diante 
– Para estudar 
• MIDIATECA do AVA: Apostila II – Máquina de Turing, 
que é um trecho do livro: 
 
 GERSTING, J. L. Fundamentos matemáticos para a ciência da 
 computação. 5ª ed., Rio de Janeiro: LTC, 2004. 
 
Máquina de Turing 
Obrigado! 
 
 
Obrigado! 
Teoria em Grafos – 2016.2 
Profs. Júlio Silveira 
e 
Fábio Protti 
Apresentação 
• Árvores enraizadas 
– Conceitos, terminologia, percursos, armazenamento computacional 
– Árvores binárias, percursos em árvores binárias 
• Árvores binárias de busca 
• Heaps – Listas de prioridades 
• Árvores balanceadas 
– Árvores AVL 
– Árvores Rubro–Negras 
Aula 1 
• Árvores 
– Definição 
• Árvores enraizadas 
– Conceitos 
– Definições 
– Terminologia 
 
Árvores 
• Definição: uma árvore é um grafo acíclico e conexo 
• Exemplo 
 
 
 
 
 
E
B
D
A
F
L
R
K
J
P
U
Q
H
C
G
MI
N
O
S
T
Árvores 
• Outras definições 
• Grafo conexo com valor mínimo para |E| 
• Grafo conexo com |E| = |V| – 1 
• Grafo acíclico com |E| = |V| – 1 
• Grafo acíclico, e a adição de qualquer aresta (v,w) produz um grafo 
contendo exatamente um ciclo simples. 
• Teorema 1.1: 
• Um grafo G é uma árvore se e somente se existir apenas 
um caminho simples entre cada par de vértices de G. 
 
 
 
 
 
Árvores 
• Exemplo 
• |V| = 21 
• |E| = 20 
 
 
 
 
 
E
B
D
A
F
L
R
K
J
P
U
Q
H
C
G
MI
N
O
S
T
Árvores 
• Árvore enraizada T 
– T é vazia 
 ou 
– T tem um nó raiz 
 A raiz tem zero ou mais filhos 
 Os filhos da raiz são subárvores de T 
Árvores 
• Exemplo 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Árvores 
• Terminologia 
– Raiz 
• nó A 
– Filhos 
• Filhos de A: B, C, D 
• Filhos de B: E, F 
– Pai 
• C é pai de: G, H, I 
• Raiz: único nó sem pai 
 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Árvores 
• Terminologia 
– Folhas 
• K, R, F, G, M, S, T, O, I, U, Q 
– Nós internos 
• A, B, C, D, E, H, J, L, N, P 
– Descendentes 
• De H: M, N, O, S, T 
– Ancestrais 
• De U: P, J, D, A 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Árvores 
• Terminologia 
 Nó Nível Altura 
A 1 5 
B 2 4 
C 2 4 
D 2 4 
E 3 3 
F 3 1 
G 3 1 
H 3 3 
I 3 1 
 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Árvores 
• Terminologia 
(complete você) 
 Nó Nível Altura 
J 
K 
L 
M 
N 
O 
P 
 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Árvores 
• Terminologia 
(complete você) 
 Nó Nível Altura 
Q 
R 
S 
T 
U 
 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Árvores 
• Terminologia 
– Nível da raiz: 1 
– Altura de uma folha: 1 
– Altura de uma árvore 
• Definida como a 
altura da sua raiz 
• A árvore do exemplo 
tem altura igual a 5. 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Árvores 
• Exercícios 1.2 
– Desenhe duas árvores não isomorfas com 10 nós e altura 3. 
Quantas árvores não isomorfas existem com tais características? 
 
Resposta nas notas de aula 
Árvores 
• Exercícios 1.2 
– Qual é o nº mínimo de nós que uma árvore com 5 níveis pode ter? 
 
Resposta nas notas de aula 
Árvores 
• Exercícios 1.2 
– Qual o nº máximo de nós em uma árvore de altura 4, se cada nó 
possui sempre menos do que 4 filhos? 
Resposta nas notas de aula 
Árvores 
• Exercícios 1.2 
– Qual o nº máximo de nós em uma árvore de altura k, se cada nó 
possui sempre menos do que 3 filhos? 
 
Resposta nas notas de aula 
Árvores 
• Exercícios 1.2 
– Quantas folhas possui uma árvore com altura k, se cada nó interno 
tem exatamente 2 filhos? 
 
Resposta nas notas de aula 
Obrigado! 
 
 
Aula 1 (cont.) 
• Árvores enraizadas 
– Percursos em árvores enraizadas: 
pré-ordem, pós-ordem, ordem de nível 
– Armazenamento computacional: árvores m-árias 
Árvores enraizadas 
• Percursos 
– Visitar um nó 
• Exibir ou processar suas informações 
– Percurso em uma árvore 
• Visitar todos os seus nós 
• Cada nó é visitado exatamente uma vez 
• Um mesmo nó pode ser atingido mais de uma vez durante o percurso 
– Apenas uma vez ele será visitado 
– Todos os percursos começam pelo nó raiz 
Árvores enraizadas 
• Percurso em PRÉ-ORDEM 
– Primeiro visite o nó raiz. 
– Depois percorra a 1ª subárvore mais à esquerda da raiz. 
– Depois percorra a 2ª subárvore mais à esquerda da raiz. 
– Depois percorra a 3ª subárvore mais à esquerda da raiz. 
– E assim por diante, da esquerda para a direita. 
• O procedimento é recursivo 
• A 1ª subarvore será INTEIRAMENTE PERCORRIDA antes 
da 2ª subárvore. 
Árvores enraizadas 
• Percurso em pré-ordem 
PRE_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 Visite (T) 
 Para cada filho F do nó T (da esquerda para a direita) faça 
 PRE_ORDEM(F) 
Árvores enraizadas 
• Exemplo 
PRE_ORDEM(A) 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
ABEKLRFCGHMNSTOIDJPUQ 
Árvores enraizadas 
• Percurso em PÓS-ORDEM 
– Primeiro percorra a 1ª subárvore mais à esquerda da raiz. 
– Depois percorra a 2ª subárvore mais à esquerda da raiz. 
– Depois percorra a 3ª subárvore mais à esquerda da raiz. 
– E assim por diante, da esquerda para a direita. 
– E por último visite o nó raiz. 
• O procedimento é recursivo 
• A 1ª subarvore será INTEIRAMENTE PERCORRIDA antes 
da 2ª subárvore. 
Árvores enraizadas 
• Percurso em pós-ordem 
POS_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 Para cada filho F do nó T (da esquerda para a direita) faça 
 POS_ORDEM(F) 
 Visite (T) 
Árvores enraizadas 
• Exemplo 
POS_ORDEM(A) 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
KRLEFBGMSTNOHICUPQJDA 
Árvores enraizadas 
• Percurso em ORDEM DE NÍVEL 
– Visitar os nós nível após nível, 
da esquerda para a direita 
Árvores enraizadas 
• Exemplo 
ORDEMDENIVEL(A) 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
ABCDEFGHIJKLMNOPQRSTU 
Árvores enraizadas 
• Percurso em ORDEM DE NÍVEL 
– Algoritmo pode ser implementado utilizando uma FILA (FIFO) 
 
ORDEM_NIVEL(nó T) 
 fila =  
 ENFILA (fila,T) 
 Enquanto FILA   faça 
 DESENFILA (fila,T) 
 Visite (T) 
 Para cada filho F do nó T (da esq para a dir) faça 
 ENFILA (fila,F) 
Árvores enraizadas 
• Exercício 
– Implementar um algoritmo iterativo (não recursivo) para 
o percurso em pré ordem 
• Utilizar uma pilha (estruturaLIFO) 
Árvores enraizadas 
• Armazenamento computacional 
– Estrutura não linear 
– Cada nó T da árvore tem os campos 
• Informação relativa ao nó T 
• Ponteiro para o nó pai de T (opcional) 
• Ponteiros (vetor) para os filhos de T 
• Árvore m-ária 
• Cada nó tem no máximo m filhos 
• Armazenamento: vetor [1.. m] de ponteiros para os filhos 
Árvores enraizadas 
• Árvores m-árias 
– Exemplo 
• Árvore ternária: m = 3 
• Também pode ser 
armazenada em 
uma estrutura 
4-ária 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
Obrigado! 
 
 
Aula 2 
• Árvores binárias 
– Conceitos, definições, terminologia 
– Armazenamento computacional 
– Percursos em árvores binárias 
• Ordem simétrica 
– Estruturas particulares 
Árvores binárias 
• Definição: Árvores binárias 
– Árvore enraizada 
– Cada nó tem no máximo dois filhos 
– Filhos são identificados pela posição 
• Filho Esquerdo 
• Filho Direito 
 ≠ 
Árvores binárias 
• Exemplo 
B
A
D
E G H J
K L N O P
R S T U
Árvores binárias 
• Armazenamento computacional 
A 
B 
G 
D 
Árvores binárias 
• Armazenamento com alocação estática 
– Exemplo em Pascal 
type 
 TNO = record 
 INFO: TINFO; 
 PAI, FESQ, FDIR: integer; 
 end; 
var 
 T: array[1..100] of TNO; 
 RAIZ: integer; 
Árvores binárias 
• Exemplo 
B
A
D
E G H J
K L N O P
R S T U
 INFO PAI FESQ FDIR 
1 
2 E 8 4 17 
3 P 15 10 0 
4 K 2 0 0 
5 A 0 8 11 
6 
7 H 11 12 9 
8 B 5 2 13 
9 O 7 0 0 
10 U 3 0 0 
11 D 5 7 15 
12 N 7 16 14 
13 G 8 0 0 
14 T 12 0 0 
15 J 11 0 3 
16 S 12 0 0 
17 L 2 18 0 
18 R 17 0 0 
19 
RAIZ: 5 
Árvores binárias 
• Armazenamento com alocação dinâmica 
– Exemplo em C 
typedef struct st_no TNO; 
 
struct st_no 
{ 
 TINFO info; 
 TNO *pai, 
 *fesq, 
 *fdir; 
} 
 
TNO *raiz; 
Árvores binárias 
• Percurso em pré-ordem 
PRE_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 Visite (T) 
 PRE_ORDEM(T.ESQ) 
 PRE_ORDEM(T.DIR) 
Árvores binárias 
• Exemplo 
PRE_ORDEM(A) 
B
A
D
E G H J
K L N O P
R S T U
A B E K L R G D H N S T O J P U 
Árvores binárias 
• Percurso em pós-ordem 
POS_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 POS_ORDEM(T.ESQ) 
 POS_ORDEM(T.DIR) 
 Visite (T) 
Árvores binárias 
• Exemplo 
POS_ORDEM(A) 
B
A
D
E G H J
K L N O P
R S T U
K R L E G B S T N O H U P J D A 
Árvores binárias 
• Percurso em ordem simétrica – in–order 
IN_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 IN_ORDEM(T.ESQ) 
 Visite (T) 
 IN_ORDEM(T.DIR) 
Árvores binárias 
• Exemplo 
IN_ORDEM(A) 
B
A
D
E G H J
K L N O P
R S T U
K E R L B G A S N T H O D J U P 
Árvores binárias 
• Estruturas particulares 
– Árvore estritamente binária 
• Todos os nós internos 
possuem dois filhos 
 
Árvores binárias 
• Estruturas particulares 
– Árvore cheia 
• Todos os nós internos 
possuem dois filhos 
• Todas as folhas estão 
no último nível 
 
Árvores binárias 
• Estruturas particulares 
– Árvore completa 
ou quase-cheia 
• Árvore cheia até o 
penúltimo nível 
Árvores binárias 
• Estruturas particulares 
– Árvore ziguezague 
• Todos os nós internos 
possuem exatamente 
um filho 
Árvores binárias 
• Lema 
– Seja T uma árvore binária com n > 0 nós. 
O número de subárvores vazias em T 
(esquerdas e direitas) é igual a n + 1. 
• Lema 
– Seja T uma árvore binária completa com n > 0 nós. 
Então T possui altura h mínima. 
Além disso, h = 1 +  log n . 
Árvores binárias 
• Exercício 
– Desenhe a ÚNICA árvore binária cujos percursos geraram as saídas 
 
Pré-ordem H T J A E X 
Pós-ordem A J T X E H 
Ordem simétrica: J A T H X E 
Resposta nas notas de aula 
Árvores binárias 
• Exercício 
– Desenhe a ÚNICA árvore binária cujos percursos geraram as saídas 
 
Pré-ordem B F C G A D E 
Ordem simétrica: B C G F A E D 
Resposta nas notas de aula 
Obrigado! 
 
 
Aula 3 
• Árvores binárias de busca 
– Conceitos, definições, terminologia 
– Operações e algoritmos 
• Busca, inserção, remoção 
Árvores binárias de busca 
• Definição: Árvore Binária de Busca* 
– Uma árvore binária de busca possui a seguinte propriedade: 
para todo nó Q 
• Todos os nós se encontram na subárvore esquerda de Q possuem 
informação menor que a informação de Q; e 
• Todos os nós que se encontram na subárvore direita de Q possuem 
informação maior que a informação de Q 
 
* Também denominada árvore binária de pesquisa 
 
Árvores binárias de busca 
• Exemplo Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Árvores binárias de busca 
• Busca (pesquisa) 
– Exemplo 
SUCESSO 
Nair 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Árvores binárias de busca 
• Busca (pesquisa) 
– Exemplo 
INSUCESSO 
Deise 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Árvores binárias de busca 
• Busca (Algoritmo recursivo) 
Função BUSCA_BIN (X: Texto; RAIZ: inteiro): inteiro; 
 
 Se RAIZ = nulo Então 
 Retorne 0 
 Senão 
 Se X = T[RAIZ].INFO Então 
 Retorne RAIZ 
 Senão 
 Se X < T[RAIZ].INFO Então 
 J := T[RAIZ].FESQ 
 Retorne BUSCA_BIN (X, J) 
 Senão 
 J := T[RAIZ].FDIR 
 Retorne BUSCA_BIN (X, J) 
Árvores binárias de busca 
• Inserção de um valor 
– Busca do valor COM INSUCESSO* 
– Inserir valor onde a busca falhou 
• Novo nó é uma folha, e filho do último nó pesquisado 
 
 
 
* Assumir que a árvore não tem valores duplicados. 
Árvores binárias de busca 
• Exemplo 
– Inserir Deise 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Maria
Eudes
Carlos
Deise
Árvores binárias de busca 
• Exemplo 
– Inserir Deise 
Árvores binárias de busca 
• Remoção de um valor 
– Busca (COM SUCESSO) do nó v com o valor a ser removido. 
A. Se v for folha, então remover v da estrutura 
 
 
 
Árvores binárias de busca 
• Exemplo 
– Remover 
Nair 
 
 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Árvores binárias de busca 
• Exemplo 
– Valor Nair 
removido 
 
 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio Tereza
Árvores binárias de busca 
• Remoção de um valor 
– Busca (COM SUCESSO) do nó v com o valor a ser removido. 
B. Se v for nó interno, então substituir seu valor pelo valor de outro nó. 
 
 
 
Árvores binárias de busca 
• Exemplo 
– Remover 
Rubens: 
substituir 
por outro 
valor 
 
 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Árvores binárias de busca 
• Remoção de um valor 
– Busca (COM SUCESSO) do nó v com o valor a ser removido. 
B. Se v for nó interno, então substituir seu valor pelo valor de outro nó. 
Encontrar um nó w para substituição. Duas opções para escolha de w: 
i. Encontrar o maior valor presente na subárvore esquerda de v 
ii. Encontrar o menor valor presente na subárvore direita de v 
 
 
 
Árvores binárias de busca 
• Exemplo 
– Remover 
Rubens: 
substituir 
por outro 
valor 
 
 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Árvores binárias de busca 
• Remoção de um valor 
– Busca (COM SUCESSO) do nó v com o valor a ser removido. 
B. Se v for nó interno, então substituir seu valor pelo valor de outro nó. 
Encontrar um nó w para substituição. 
C. Substituir: valor(v) = valor(w). 
D. Remover o valor do nó w (em duplicidade). 
i. Se w for folha, remover w da estrutura. 
ii. Se w não for folha, repetir o processo, encontrando outro nó 
para substituí-lo, de forma recursiva. 
 
 
 
 
Árvores binárias de busca 
• Exemplo 
– Remover 
Rubens:substituir 
por 
Pedro 
 
 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Pedro 
Árvores binárias de busca 
• Exemplo 
– Valor Rubens 
removido: 
substituído 
por 
Pedro 
 
 
Maria
Eudes
Carlos Joana
Pedro
Patrícia Suzana
Ana Hélio Neuza Zé
Glória Otávio TerezaNair
Árvores binárias de busca 
• Exemplo 
– Remover 
Rubens: 
substituir 
por 
Suzana 
 
 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
Suzana 
Tereza 
Árvores binárias de busca 
• Exemplo 
– Valor Rubens 
removido: 
substituído 
por 
Suzana 
 
 
Maria
Eudes
Carlos Joana
Suzana
Patrícia Tereza
Ana Hélio Neuza ZéPedro
Glória OtávioNair
Árvores binárias de busca 
• Exercício 
– Desenhe a árvore binária de busca gerada pela inclusão dos valores: 
50, 30, 85, 65, 60, 10, 45, 25, 40, 95, 90; inseridos nesta ordem. 
Resposta nas notas de aula 
Árvores binárias de busca 
• Exercício 
– Desenhe a árvore binária de busca gerada pela inclusão dos valores: 
50, 30, 85, 65, 60, 10, 45, 25, 40, 95, 90; inseridos nesta ordem. 
• Escreva a saída gerada pelo percurso em ordem simétrica. 
50
30
10 45
85
65 95
40 60 9025
Árvores binárias de busca 
• Exercício 
– Verdadeiro ou Falso? O formato de uma árvore binária de busca 
depende da ordem em que os nós foram inseridos nela. 
Dicas nas notas de aula 
Verdadeiro. Veja as dicas nas notas de aula. 
Árvores binárias de busca 
• Exercício 
– Desenhe uma árvore binária de busca completa com 12 nós. 
Cada nó deve conter um número inteiro entre 50 e 70. 
Resposta nas notas de aula 
Árvores binárias de busca 
• Exercício 
– Remova a raiz da árvore binária de busca, substituindo 
seu nó por um de MAIOR VALOR. 
Desenhe apenas a versão final. 
Resposta nas notas de aula 
G
K
T
D J R
A F M
N
Z
O
X
Obrigado! 
 
 
Aula 4 
• Heaps – Listas de prioridades 
– Conceitos, definições, terminologia 
– Armazenamento computacional 
– Operações e algoritmos 
Heaps 
• Definição: Heap (Lista de prioridades) 
– Árvore binária completa 
– Último nível preenchido da esquerda para a direita 
– Todo nó tem uma prioridade (valor) maior que a de seus filhos. 
Heaps 
• Exemplo 
– Não é heap: 
não é árvore 
binária completa. 
82 
75 68 
56 60 53 
44 39 28 40 19 
? 
Heaps 
• Exemplo 
– Não é heap: 
último nível não é 
preenchido da 
esquerda para a 
direira. 
82 
75 68 
56 60 53 
44 39 28 40 19 
39 
? 
Heaps 
• Exemplo 
– Não é heap: 
nó de valor 52 tem 
filho com maior 
prioridade (53). 
82 
75 52 
56 60 53 
44 39 28 40 19 
39 
14 
Heaps 
• Exemplo 
– É heap, pois 
atende às três 
propriedades. 
82 
75 68 
56 60 53 
44 10 28 40 19 
18 
14 
Heaps 
• Armazenamento computacional 
– Estrutura linear 
sequencial: vetor. 
– Exemplo (Pascal) 
 
var 
 H: array [1..100] of integer; { Prioridade: valor inteiro } 
 N: integer; { Número de nós presentes } 
 
 
Heaps 
• Armazenamento computacional 
– vetor preenchido 
pelos valores da ordem 
da busca de nível. 
82 
75 68 
56 60 53 
44 10 28 40 19 
18 
14 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 . . . 
82 75 68 56 60 53 18 44 10 28 14 19 40 
N = 13 
Heaps 
• Armazenamento computacional 
– Navegação sem necessidade de ponteiros 
– Seja um nó que ocupa o índice i 
• Seu filhos ocupam as posições: 2*i (filho esquerdo) e 2*i+1 (filho direito) 
• Seu pai ocupa a posição i div 2 
Heaps 
• Armazenamento computacional 
– Nó de índice 6 
• Seus filhos ocupam índices 
12 e 13, respectivamente. 
• Seu pai ocupa o índice 3. 
82 
75 68 
56 60 53 
44 10 28 40 19 
18 
14 
1 
2 3 
6 4 5 
12 13 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 . . . 
82 75 68 56 60 53 18 44 10 28 14 19 40 
N = 13 
Heaps 
• Operações 
– Aumento da prioridade de um nó 
• Exemplo: de 28 para 80 
• Operação SUBIR 
 
80 
82 
75 68 
56 60 53 
44 10 28 19 
18 
14 
Antes 
Heaps 
• Operações básicas 
– Aumento da prioridade de um nó 
82 
80 68 
56 75 53 
44 10 60 19 
18 
14 
Depois 
Heaps 
• Aumento de prioridade (procedimento recursivo em Pascal) 
 procedure SUBIR (I: integer); 
var 
 J, AUX: integer; 
begin 
 J:= I div 2; { J é o pai de I } 
 if J >= 1 then { se J existe } 
 if H[I] > H[J] then { se I tem prioridade > seu pai } 
 begin 
 AUX := H[J]; { fazer a troca } 
 H[J] := H[I]; 
 H[I] := AUX; 
 SUBIR(J); { continuar a subida a partir de J } 
 end; 
end; 
 
Heaps 
• Operações básicas 
– Redução da prioridade de um nó 
• Exemplo: de 82 para 20 
• Operação DESCER 
 
Antes 
20 
82 
68 75 
56 60 53 
44 10 28 19 
18 
14 
Heaps 
• Operações básicas 
– Redução da prioridade de um nó 
Depois 
75 
68 53 
56 60 20 
44 10 28 19 
18 
14 
Heaps 
• Redução de prioridade (procedimento recursivo em Pascal) 
 procedure DESCER (I: integer); 
var 
 J, AUX: integer; 
begin 
 J:= 2 * I; { J é o filho esquerdo de I } 
 if J <= N then { se J existe, (I tem filhos) } 
 begin 
 if J < N then 
 if H[J+1] > H[J] then { selecionar o maior filho } 
 J:=J+1; 
 if H[I] < H[J] then 
 begin 
 AUX:= H[J]; { fazer a troca } 
 H[J]:= H[I]; 
 H[I]:= AUX; 
 DESCER(J); { continuar a descida } 
 end; 
 end; 
end; 
Heaps 
• Operações básicas em Heaps 
– Desenfilar (nó raiz) 
• Remover última folha 
• Inserir seu valor na raiz 
• Operação DESCER (raiz) 
Antes 
19 
82 
75 68 
56 60 53 
44 10 28 19 
18 
14 
Heaps 
• Operações básicas 
– Desenfilar (nó raíz) 
Depois 
75 
60 68 
56 28 53 
44 10 19 
18 
14 
82 
75 68 
56 60 53 
44 10 28 19 
18 
14 99 
Heaps 
• Operações básicas 
– Inserção de um valor 
• Exemplo: inserir 99 
• Inserir nó na última folha 
• Valor(nó) = 99 
• Operação SUBIR (nó) 
Antes 
Heaps 
• Operações básicas 
– Inserção de um valor 
• Valor 99 inserido 
Depois 
99 
 
75 82 
56 60 68 
44 10 28 19 
18 
14 53 
• Operações básicas 
– Construção de um heap 
1. Inserir valores no vetor 
Heaps 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
14 10 28 19 60 53 18 44 75 68 82 56 
75 44 68 82 56 
19 60 53 18 
10 28 
14 
1 
2 3 
4 5 6 7 
8 9 10 11 12 
Antes 
• Operações básicas 
– Construção de um heap 
2. Localizar posição P 
do último nó interno: 
 P = N div 2 
No exemplo, 
 P = 6 
Heaps 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
14 10 28 19 60 53 18 44 75 68 82 56 
75 44 68 82 56 
19 60 53 18 
10 28 
14 
1 
2 3 
4 5 6 7 
8 9 10 11 12 
• Operações básicas 
– Construção de um heap 
3. No exemplo, executar 
 
 DESCER (6) 
 DESCER (5) 
 DESCER (4) 
 DESCER (3) 
 DESCER (2) 
 DESCER (1) 
 
Heaps 
75 44 68 82 56 
19 60 53 18 
10 28 
14 
1 
2 3 
4 5 6 7 
• Operações básicas 
– Construção de um heap 
Heaps 
10 
14 19 10 28 60 
44 68 53 18 
82 
75 56 
1 
2 3 
4 5 6 7 
8 9 11 12 
Depois 
• Construção de um heap (procedimento em Pascal) 
Heaps 
procedure CONTROIHEAP; 
var 
 I: integer; 
begin 
 
 { Os N valores já estão armazenados no vetor H } 
 
 for I := (N div 2) downto 1 do 
 DESCER(I); 
 
end; 
• Exercícios 
– Remova a raiz dos seguintes heaps: 
a. 69, 58, 47, 45, 49, 38, 40, 22, 21, 30, 35, 20. 
b. 99, 79, 85, 63, 58, 55, 61, 3, 40, 41, 22, 6, 14, 3, 11, 7, 9, 5. 
– Insira em ambos os heaps (depois de removida a raiz) um nó com 
prioridade 87. 
– Insira em ambos os heaps (depois de removida a raiz) um nó com 
prioridade 110. 
Heaps 
• Exercícios 
– Construa um heap a partir do seguinte conjunto de prioridades: 
• 45, 67, 12, 89, 3, 10, 6, 78, 30, 25, 99, 50. 
Heaps 
Obrigado! 
 
 
Aula 5 
• Árvores balanceadas 
– Conceitos, definições, terminologia– Árvores AVL 
Árvores Balanceadas 
• Árvore binárias de busca 
– Comparações em caminhos descendentes 
– A partir da raiz 
• Até o nó com o valor procurado (SUCESSO); ou 
• Até uma folha (INSUCESSO) 
– Custo da busca de um valor 
• Medido em número de comparações 
Árvores Balanceadas 
• Custo das comparações em uma árvore binária 
– Árvore com n nós e altura h 
– Custo de pior caso de uma busca 
• Altura da árvore: h comparações 
 
 Altura máxima: árvore ziguezague ⇒ h = n 
 Altura mínima: árvore completa ⇒ h = 1 + ⌊ log2 h ⌋ 
Árvores Balanceadas 
• Custo das comparações em uma árvore binária 
– Exemplo: árvore com 1023 nós 
– Custo das comparações 
 
 Valor máximo: árvore ziguezague ⇒ h = 1023 comparações 
 Valor mínima: árvore cheia ⇒ h = 10 comparações 
Árvores Balanceadas 
• Problema 
– Árvore ziguezague tem custo muito alto 
– Solução 
• Construir uma árvore completa, observando a ordem de inserção dos nós. 
– Porém... 
• Operações de inserção e remoção podem mudar a estrutura 
 
 Árvore completa + inserções + remoções 
= 
 Árvore desbalanceada 
Árvores Balanceadas 
• Árvores desbalanceadas 
– Solução 
Rearranjar a estrutura depois de operações de inserção ou remoção 
– Objetivo 
Rearranjo para a estrutura de uma árvore completa novamente 
– Problema 
Pode envolver n ajustes de nós 
 
 Igual ao custo de busca em árvores ziguezague! 
Árvores Balanceadas 
• Árvores desbalanceadas 
– Exemplo 
 
26
50
85
15 42 72 93
7 17 61 79 9740 49 88
(a)
26
50
85
15 42 72 93
7 17 61 7940 49 88
(b)
3
Inserir 3 + 
Remover 97 
Árvores Balanceadas 
• Árvores desbalanceadas 
– Exemplo 
 
Rearranjar 
Estrutura 26
50
85
15 42 72 93
7 17 61 7940 49 88
(b)
3 Todos os n nós foram remanejados 
17
49
79
7 40 61 88
3 10 50 7226 42 85
(c)
93
Árvores Balanceadas 
• Árvores Balanceadas 
– Definição 
Uma árvore com n nós e altura h 
é dita balanceada se h = O(log n) 
 
log n ⇔ log2 n 
Árvores Balanceadas 
• Árvores Balanceadas 
– Árvores AVL 
– Árvores Rubro-Negras 
Árvores AVL 
• Definições 
– Seja um nó v 
• hE(v) = altura da subárvore esquerda de v 
• hD(v) = altura da subárvore direita de v 
 
– No exemplo ao lado 
• hE(v) = 3 
• hD(v) = 2 
 
v
Árvores AVL 
• Definições 
– Um nó v é dito regulado quando 
 
 | hE(v) – hD(v) | ≤ 1 
 
Do contrário, v é dito desregulado 
 
 
 
– O valor hE(v) – hD(v) é chamado balanço(v) 
 
 
Ou seja, v é regulado se |balanço(v) | ≤ 1 
 
 
 
Árvores AVL 
• Exemplo 
– v é (está) regulado 
 
 
 
balanço(v) = hE(v) – hD(v) = 3 – 2 = 1 
 
v
Árvores AVL 
• Definições 
– Uma árvore é dita regulada quando 
 
 Todos os seus nós são regulados. 
 
Do contrário, ela é dita desregulada. 
 
– A árvore do exemplo é regulada 
• Todos os nós regulados. Confira! 
Árvores AVL 
• Definições 
– Uma árvore binária de busca é AVL 
 
 se e somente se for regulada. 
 
Árvores AVL 
• Exemplos 
 (a) Árvore AVL (b) Não é AVL: w está desregulado. 
 balanço (w) = hE(w) – hD(w) = –2 
w
(a) (b)
Árvores AVL 
• Lema 
– Seja T uma árvore AVL, de altura h. Então h = O(log n). 
 
Ou seja, toda árvore AVL é balanceada. 
 
Árvores AVL 
• Exercício 
• Desenhe uma árvore AVL de altura 5 contendo o mínimo número de nós. 
Não se preocupe com os rótulos dos nós, apenas desenhe a estrutura. 
Resposta nas notas de aula 
Árvores AVL 
• Inclusão de um novo nó w (folha) 
em uma árvore AVL T 
– Depois da inserção (árvore binária de busca), temos duas situações: 
1. A árvore T continua regulada (AVL), nada a fazer. 
2. A árvore T contém um ou mais nós desregulados. 
Neste caso, tais nós deverão ser regulados. 
 
 
Árvores AVL 
• Inclusão de um novo nó w (folha) em uma árvore AVL T 
2. A árvore T contém um ou mais nós desregulados. 
Neste caso, tais nós deverão ser regulados. 
 
IMPORTANTE: (a) Os nós w e pai(w) estarão regulados. 
 (b) todos os nós desregulados estarão no 
 caminho ascendente de w até a raiz. 
 (c) O balanço de todos os nós desregulados 
 é igual a 2: |hE(v) – hD(v)| = 2 
 
Árvores AVL 
• Inclusão de nó w 
– Seja v o nó desregulado mais próximo de uma folha 
(no caminho de w à raiz) 
1. Se hE(v) > hD(v). Seja e o filho esquerdo de v. 
 
1.a Se hE(e) > hD(e) então Rotação Direita em v. 
Árvores AVL 
• Inclusão de nó w 
1. Se hE(v) > hD(v). 
 
1.a Se hE(e) > hD(e) então Rotação Direita em v. 
w
v
e
TE(e)
TD(e)
TD(v)
w
v
e
TE(e)
TE(v) TD(v)
rotação 
direita
Árvores AVL 
• Inclusão de nó w 
– Seja v o nó desregulado mais próximo de uma folha 
(no caminho de w à raiz) 
1. Se hE(v) > hD(v). Seja e o filho esquerdo de v. 
 
1.a Se hE(e) < hD(e) então Rotação Dupla Direita em v. 
Árvores AVL 
• Inclusão de nó w 
1. Se hE(v) > hD(v). 
 
1.a Se hE(e) < hD(e) então Rotação Dupla Direita em v. 
v
e
TE(e)
TD(d)
TD(v) rotação 
dupla 
direitad
TE(d)
ve
TE(e) TD(d) TD(v)
d
TD(e)
Árvores AVL 
• Inclusão de nó w 
– Seja v o nó desregulado mais próximo de uma folha 
(no caminho de w à raiz) 
2. Se hE(v) < hD(v). Seja d o filho direito de v. 
 
2.a Se hE(d) < hD(d) então Rotação Esquerda em v. 
Árvores AVL 
• Inclusão de nó w 
– Seja v o nó desregulado mais próximo de uma folha 
(no caminho de w à raiz) 
2. Se hE(v) < hD(v). Seja e o filho esquerdo de v. 
 
2.a Se hE(e) > hD(e) então Rotação Dupla Esquerda em v. 
Árvores AVL 
• Exercícios 
– Verifique que a árvore abaixo é AVL (todos os nós estão regulados) 
e
g
j
c f k
db
Resposta completa nas notas de aula 
Árvores AVL 
• Exercícios 
– Na árvore abaixo 
a. Inclua o nó de rótulo a 
Resposta completa nas notas de aula 
e
g
j
c f k
db
a
e
g
j
c f k
db
Árvores AVL 
• Exercícios 
– Na árvore abaixo 
b. Verifique que existem 
nós desregulados 
 
Resposta completa nas notas de aula 
e
g
j
c f k
db
a
Nó de rótulo g 
Nó de rótulo e 
 
Nó desregulado mais próximo 
de uma folha – rótulo e 
• Exercícios 
– Na árvore abaixo 
c. Promova a regulagem dos nós através da rotação apropriada 
Solução: Caso 1. hE(e) > hD(e) 
 
 filho esquerdo de e: rótulo c 
 
 Caso 1.a: hE(c) > hD(c) 
 
Rotação direita em e 
Árvores AVL 
e
g
j
c f k
db
a
Solução: 
 
Rotação direita 
em e 
Árvores AVL 
• Exercícios 
– Na árvore abaixo 
c. Promova a regulagem dos nós através da rotação apropriada 
e
g
j
c f k
db
a
e
c
Árvores AVL 
• Exercícios 
– Na árvore abaixo 
c. Promova a regulagem dos nós através da rotação apropriada 
e
g
j
c f k
db
a
c
g
j
b k
da
e
f
Solução: 
 
Rotação direita 
em e 
Obrigado! 
 
 
Obrigado! 
Teoria em Grafos – 2016.2 
Profs. Júlio Silveira 
e 
Sérgio Monteiro 
Apresentação 
• Grafos 
– Conceitos, terminologia, algoritmos 
– Caminhos, ciclos, conectividade 
– Planaridade, Coloração 
• Árvores 
– Árvores enraizadas: conceitos, terminologia, algoritmos 
– Árvores binárias 
– Estruturas baseadas em árvores 
Bibliografia 
• Básica 
• CORMEN, T.H.; LEISERSON, C.E.; RIVEST, R.L.; STEIN, C. Algoritmos – Teoria e 
Prática. Tradução da 3ª edição americana. 
Rio de Janeiro: Elsevier, 2012. 
• SZWARCFITER, J. L.; MARKENZON, L. Estrutura de Dados e seus Algoritmos. 
Rio de Janeiro: LTC, 1997. 
• GERSTING, J.L. Fundamentos Matemáticos para a Ciência da Computação. 5ª 
Edição. Rio de Janeiro: LTC, 2004. 
Bibliografia 
• Complementar 
• HOROWITZ, E.; SAHNI, S. Fundamentos de Estruturas de Dados. Rio de 
Janeiro: Campus, 1996. 
• VELOSO, P. Estruturas de Dados. Rio de Janeiro: Campus, 1998. 
• BOAVENTURA NETTO, P.O. Grafos: Teorias, Modelos, Algoritmos. 4ª Edição. 
São Paulo: Editora Edgard Blucher, 2006. 
• LOUDON, K. Mastering Algorithms with C. O'Reilly Media. 1st edition, 1999. 
• STEIN, C., DRYSDALE, R.L., BOGART, K. Matemática Discreta para a Ciência da 
Computação. São Paulo: Pearson Educacional do Brasil, 2013. 
Aula 1 
• Grafos 
– Conceitos básicos 
– Terminologia 
Grafos 
• Exemplov3
v2
v9
v8
v1
v10v6
v7
v4
v5
Grafos 
• 1.1 DEFINIÇÕES E TERMINOLOGIA (grafo simples) 
 
– G = (V, E) 
– V ou V(G): Conjunto de vértices 
– E ou E(G): Conjunto de arestas 
– Aresta e: par não-ordenado 
 
 e = { u,v } = { v,u } sendo u,v  V 
 u  v 
 
Grafos 
• Exemplo 
 
 
 
 
 
V = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 } 
E = { {v2,v3}, {v3,v4}, {v4,v5}, {v5,v3}, {v4,v6}, {v7,v4}, {v8,v9}, {v9,v10} } 
 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
Grafos 
• Exemplo 
 
v2  V 
{v5,v3}  E 
 
Observe que {v5,v3} = {v3,v5} 
 
Outras notações: 
 (v5,v3)  E 
 v3-v5  E 
 v5v3  E 
 
 
v3
v9
v8
v1
v10v6
v7
v4
v5
v2
Grafos 
• Notação 
n = |V| 
m = |E| 
 
No exemplo 
 n = 10 
 m = 8 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
Grafos 
• Terminologia - Exemplos 
 
– Vértices adjacentes 
 v3 e v2 
 v3 e v4 
– Vértice isolado 
 v1 
– Aresta (v2,v3) é incidente a v2 e a v3 
– Arestas (v2,v3) e (v4,v3) são adjacentes 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
Grafos 
• Pseudografos 
– Loops 
 
• Multigrafos 
– Arestas paralelas 
 
 
• Não estudaremos pseudografos ou multigrafos! 
3
2
1
4
Grafos 
• Grafo trivial 
n = 1 
 
V = { v4 } 
E =  
 
 
v4
Grafos 
• Grau dos vértices 
 
d(v1) = 0 d(v6) = 1 
d(v2) = 1 d(v7) = 1 
d(v3) = 3 d(v8) = 1 
d(v4) = 4 d(v9) = 2 
d(v5) = 2 d(v10) = 1 
 
 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
Grafos 
• Isomorfismo 
– G1 e G2 são isomorfos? 
v2
v7
v6
v3
v4v1
v5
e
b
d
a
c
g
f
G1 G2
Grafos 
• Isomorfismo 
Complete 
f(v1) = 
f(v2) = 
f(v3) = 
f(v4) = 
f(v5) = 
f(v6) = 
f(v7) = 
v2
v7
v6
v3
v4v1
v5
e
b
d
a
c
g
f
G1 G2
Resposta nas notas de aula 
Grafos 
• Grafos isomorfos 
 
G1 G2 G3 G4
G3 e G4 são isomorfos G1 e G2 são isomorfos 
Grafos 
• EXERCÍCIOS 1.1 
 
• Desenhe todos os grafos distintos (não isomorfos) com 2, 3 ou 4 vértices. 
 
 
Resposta nas notas de aula 
Grafos 
• EXERCÍCIOS 1.1 
• Desenhe dois grafos NÃO isomorfos com 6 vértices, que tenham 
graus 1, 1, 1, 2, 2, 3. 
 D
B
A F
C
E
Resposta nas notas de aula 
D
B
A F
C
E
Obrigado! 
 
 
• Grafos 
– Soma dos graus dos vértices de um grafo 
– Grafos regulares 
– Grafos completos 
– Grafos bipartidos 
Aula 2 
• TEOREMA 1.1 
• A soma dos graus dos vértices de um grafo G(V, E) é um valor par, igual ao 
dobro do nº de arestas de G: 
 
 
• TEOREMA 1.2 
• Em um grafo qualquer, temos uma quantidade par de vértices de grau ímpar. 
Ou 
 nI (número de vértices de grau ímpar) é um valor par. 
Grafos 
mv
v
2|E|2)(d
V


Grafos 
• Grau dos vértices 
 
d(v1) = 0 d(v6) = 1 
d(v2) = 1 d(v7) = 1 
d(v3) = 3 d(v8) = 1 
d(v4) = 4 d(v9) = 2 
d(v5) = 2 d(v10) = 1 
 
S = 16 nP = 4 nI = 6 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Grafos regulares 
– Grafo r-regular 
todos os vértices de grau r 
 
(vV) d(v) = r 
 
– Exemplo 
Grafo 3-regular 
Grafos 
Grafo 3-regular 
• Grafos completos 
Kn - grafo completo com n vértices 
(v,w V, v  w) (v,w)  E 
Grafos 
K5K3 K4 K4K1 K2
• Grafos completos 
– Kn é (n-1)-regular! 
 
 
Grafos 
K5 é 4-regular 
• Grafos completos 
– Qual o nº de arestas do Kn? 
 
 
 
 
 
 
 
 
 
Grafos 
10
2
45
!2!3
!5
5
2
C)K(E 255 







 
K5
• Grafos completos 
– Qual o nº de arestas do Kn? 
 
 
 
 
 
 
 
 
 
Grafos 
22
)1(
!2!)1(
!2
C)K(E
2
2 nnnn
n
n
n
nn











 
• Grafos completos 
– Nº de arestas do Kn 
 
 
 
 
 
 
 
 
 
Grafos 
2
)1(
)K(E


nn
n
Calcule para o K6 e comprove! 
Grafos 
• EXERCÍCIOS 1.1 
 
• Desenhe TRÊS grafos NÃO isomorfos que sejam 2 regulares com 8 vértices. 
 
Resposta nas notas de aula 
Grafos 
• Exercícios 1.1 
 
• Existe algum grafo com |V| = 6 e que seja 4-regular? 
Você consegue desenhar um? 
Resposta nas notas de aula 
Grafos 
• EXERCÍCIOS 1.1 
 
• Desenhe um grafo com 10 vértices, em todos os vértices tenham grau 1; ou 
prove que não existe grafo com tais características. 
• Qual é o nº de arestas em um grafo r-regular com n vértices? 
Resposta nas notas de aula 
• GRAFOS BIPARTIDOS (ou BIPARTITES) 
– Particionar V = V1  V2 
v,w  Vi  (v,w)  E 
Grafos 
A
D
C
B E
F
A
DC
B
E
F
• Grafos Bipartidos 
– TEOREMA1.3 
• G NÃO TEM CICLO DE COMPRIMENTO ÍMPAR  G é BIPARTIDO 
Grafos 
A
D
C
B E
F
• Grafos Bipartidos Completos 
– Kp,q 
 
• p =|V1| e q = |V2| 
v, w  Vi  (v,w)  E 
Grafos 
K2,3 
Grafos 
• EXERCÍCIOS 1.2 
• O grafo G abaixo é bipartido? Prove sua resposta. Caso seja, desenha uma 
representação isomórfica para G que evidencie esta condição. 
Dicas nas notas de aula 
e
b
d
a
c
g
f
Grafos 
• EXERCÍCIOS 1.2 
• Um grafo estrela é bipartido? É bipartido completo? 
Respostas na notas de aula 
Sim. O grafo do exemplo é o K1,6 
Grafos 
• EXERCÍCIOS 1.2 
• Seja G um grafo formado por um único ciclo simples contendo todos os seus 
vértices. G é bipartido? 
• Quantas arestas tem o Kp,q? 
Dicas e Respostas nas notas de aula 
Obrigado! 
 
 
• Grafos 
– Representações computacionais de grafos 
– DIGRAFOS: Grafos Direcionados 
– Grafos e digrafos ponderados 
Aula 3 
• Matriz de Adjacências 
 
• A n x n Matriz quadrada 
 
• A[i][i] = 0 Diagonal principal nula 
 
• vi vj  E  A[i][j] = A[j][i] = 1 Matriz simétrica em relação 
• vi vj  E  A[i][j] = A[j][i] = 0 à diagonal principal 
 
 
 
 
Grafos 
• Matriz de Adjacências 
Grafos 
































0100000000
1010000000
0100000000
0000001000
0000001000
0000001100
0001110100
0000011010
0000000100
0000000000
10
9
8
7
6
5
4
3
2
1
10987654321
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Matriz de Adjacências 
• Percentual de elementos não-nulos: 16% (pode ser menor) 
Grafos 
































0100000000
1010000000
0100000000
0000001000
0000001000
0000001100
0001110100
0000011010
0000000100
0000000000
10
9
8
7
6
5
4
3
2
1
10987654321
• Listas de Adjacências 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
v7
v4
v3
v1
v2
v3
v4
v5
v6
v7
v8
v9
v10
v5
v9
v8 v10
v9
v4
v4
v4 v3
v3 v5 v6
v3 v2
Grafos 
• EXERCÍCIOS 1.3 
• Desenhe as matrizes e listas de adjacências dos grafos a seguir: 
Dicas e Respostas nas notas de aula 
3
2
1
64
5
CG
E
B
FD
A
• Grafos Direcionados - DIGRAFOS 
– Arestas orientadas 
• (v,w)  (w,v) 
– Exemplo 
(d,a)  E 
(a,d)  E 
(e,f)  E 
(f,e)  E 
 
 
Grafos 
c
b
a
g
f
e
d
• Digrafos: graus de vértices 
 
in-degree out-degree 
in(a) = 1 out(a) = 2 
in(b) = 1 out(b) = 0 
in(c) = 1 out(c) = 0 
in(d) = 0 out(d) = 2 
in(e) = 2 out(e) = 1 
in(f) = 1 out(f) = 2 
in(g) = 2 out(g) = 1 
 
Grafos 
c
b
a
g
f
e
d
• Digrafos: graus de vértices 
 
Fonte Sumidouro 
in(a) = 1 out(a) = 2 
in(b) = 1 out(b) = 0 
in(c) = 1 out(c) = 0 
in(d) = 0 out(d) = 2 
in(e) = 2 out(e) = 1 
in(f) = 1 out(f) = 2 
in(g) = 2 out(g) = 1 
 
Grafos 
c
b
a
g
f
e
d
• Digrafos: matriz de adjacências 
 
 
Grafos 
c
b
a
g
f
e
d
























000000
00000
000000
00000
0000000
0000000
00000
1
11
1
11
11
g
f
e
d
c
b
a
gfedcba
• Grafos ponderados 
– Arestas ponderadas 
• peso(vw) 
custo ou ganho 
– Exemplo 
peso(v1v7) = 7 
peso(v7v1) = 7 
peso(v2v7) = ? 
 
 
Grafos 
v3v2
9
v1 v6
4
v7
3
v4
v5
10
6
12
5
8
7
• Grafos ponderados – Matriz de Adjacência 
– custo das arestas 
 
 
Grafos 
v3v2
9
v1 v6
4
v7
3
v4
v5
10
6
12
5
8
7































37
4
510
34512
101298
96
786
7
6
5
4
3
2
1
7654321
v
v
v
v
v
v
v
vvvvvvv
• Digrafosponderados – Matriz de Adjacência 
– custo das arestas 
 
 
Grafos 
c
b
a
g
f
e
d
5
11
487 7
8
6































6
87
4
118
75
g
f
e
d
c
b
a
gfedcba
Grafos 
• EXERCÍCIOS 1.4 
• Preencha os elementos de matriz de adjacências do dígrafo abaixo: 
C
FE
B
D
A






















______
______
______
______
______
______
FEDCBA
F
E
D
C
B
A
Grafos 
• EXERCÍCIOS 1.4 
• Complete: 
 
in(A) = out(A) = 
in(B) = out(B) = 
in(C) = out(C) = 
in(D) = out(D) = 
in(E) = out(E) = 
in(F) = out(F) = 
 





















______
______
______
______
______
______
FEDCBA
F
E
D
C
B
A
Grafos 
• EXERCÍCIOS 1.4 
• Declarações: 
 
 
 
 
 
• Implementar as funções: grauentrada(v) e grausaida(v) 
 
 
const 
 MAX = 100; 
 
var 
 A: array[1..MAX,1..MAX] of integer; 
 
 n: integer; { Núm. vértices } 
 
 
#define MAX 100 
 
int A[MAX][MAX]; 
 
int n; // Núm. de vértices 
 
Obrigado! 
 
 
• Grafos 
– Caminhos e ciclos 
– Grafos Hamiltonianos 
– Grafos Eulerianos 
Aula 4 
• Caminho em um grafo G(V,E) 
– Sequência de P de vértices de G 
• P = u1, u2, , uk 
• Para i = 1, , k-1, temos (ui, ui+1)  E 
• origem: u1 
• destino: uk 
– Comprimento de um caminho 
• Número de arestas 
• O caminho u1, u2, , uk tem comprimento = k-1 
Grafos 
• Caminhos 
– Exemplo 
v2,v3,v4,v5,v3,v4,v6 de comprimento 6 
v2,v3,v4,v3,v4,v6 de comprimento 5 
v2,v3,v4,v6 de comprimento 3 
v2,v3,v5,v4,v6 de comprimento 4 
 
origem: v2 
destino: v6 
 
v2 atinge (ou alcança) v6 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Caminho simples 
– Sem repetição de vértices 
– Exemplo 
v2,v3,v4,v5,v3,v4,v6 caminho 
v2,v3,v4,v3,v4,v6 caminho 
v2,v3,v4,v6 caminho simples 
v2,v3,v5,v4,v6 caminho simples 
 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Caminho mínimo entre dois vértices 
– Caminho de menor comprimento 
– Pode não ser único 
– Exemplo 
v2,v3,v4,v5,v3,v4,v6 caminho 
v2,v3,v4,v3,v4,v6 caminho 
v2,v3,v4,v6 caminho mínimo 
v2,v3,v5,v4,v6 caminho 
 
 v2,v3,v4,v6: caminho mínimo entre v2 e v6 
 Não existe caminho de comprimento menor. 
 
 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• distância entre dois vértices 
– d(u,v) = comprimento do 
menor caminho entre u e v 
– Exemplo 
v2,v3,v4,v5,v3,v4,v6 caminho 
v2,v3,v4,v3,v4,v6 caminho 
v2,v3,v4,v6 caminho mínimo 
v2,v3,v5,v4,v6 caminho 
 
 d(v2 , v6) = 3 
 
 
 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Ciclo em um grafo G(V,E) 
– Caminho C, em que origem = destino 
– Comprimento de C  3 
– Formalmente: C = u1,u2, , uk,u1 é ciclo se k  3 
• Ciclo simples C 
– Sem repetição de vértices, a não ser origem = destino 
– Formalmente: C = u1,u2, , uk,u1 é um 
ciclo simples se u1,u2, , uk for caminho simples 
 
Grafos 
• Ciclos 
– exemplo 
– Exemplo 
v2,v3,v2 NÃO é ciclo 
 (comprimento 2) 
 
v2,v3,v4,v5,v3,v2 ciclo de 
 comprimento 5 
 
v3,v4,v5,v3 ciclo simples de 
 comprimento 3 
 
 
 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Ciclos idênticos 
– Obtidos por 
• Inversão do sentido 
• Rotação dos vértices 
– Exemplo 
C = v3,v4,v5,v3 único ciclo simples 
 
 
 v3,v5,v4,v3 idêntico a C: inversão do sentido 
 v4,v5,v3,v4 idêntico a C: rotação dos vértices 
 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Grafo conexo G 
– Para todo par v e w de 
vértices de G, existe 
caminho entre v e w 
– Exemplo 
• Grafo desconexo 
• Não existe caminho 
entre v2 e v10 
Grafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• Caminho hamiltoniano 
– Caminho que contém cada vértice do grafo exatamente uma vez 
– Caminho P = u1,u2, , uk é hamiltoniano se 
• É um caminho simples 
• Contém todos os vértices do grafo 
Grafos 
• Ciclo hamiltoniano 
– Ciclo C = u1,u2, , uk,u1 é hamiltoniano se 
• u1,u2, , uk for um caminho hamiltoniano 
 
• Grafo hamiltoniano 
– Grafo que contém um ciclo hamiltoniano 
Grafos 
• Caminhos e ciclos hamiltonianos 
– Exemplo 
 
Caminho hamiltoniano 
 
 E,D,C,A,B 
 
Ciclo hamiltoniano 
 
 A,C,E,D,B,A 
 
 O grafo do exemplo é hamiltoniano 
Grafos 
C
E
B
D
A
• Caminho euleriano 
– Caminho que contém cada aresta do grafo exatamente uma vez 
• Ciclo euleriano 
– Ciclo que contém cada aresta do grafo exatamente uma vez 
 
• Grafo euleriano 
– Grafo que contém um ciclo euleriano 
Grafos 
• Caminhos e ciclos eulerianos 
– Exemplo 
 
Caminho euleriano 
 
 C,E,D,C,A,B,D 
 
Ciclo euleriano 
 
 Existe algum? NÃO! 
 
 O grafo do exemplo não é euleriano 
Grafos 
C
E
B
D
A
• Caminhos e ciclos eulerianos 
– TEOREMA 1.4 
Um grafo conexo é euleriano 
 
 se e somente se 
 
todos os seus vértices possuem grau par 
(nenhum vértice tem grau ímpar). 
Grafos 
• TEOREMA 1.4 (Grafos eulerianos) 
– Algoritmo 
1. Percorrer arestas até formar um ciclo 
2. Se ciclo for euleriano então o ciclo foi encontrado 
3. Se ciclo não for euleriano então 
 3.1 Armazenar o ciclo encontrado e remover suas arestas do grafo 
 3.2 Repita 
 Procurar novo ciclo, armazená-lo e remover suas arestas do grafo 
 Até que o grafo não tenha arestas 
 3.3 Unir dois a dois todos os ciclos encontrados, 
 formando um ciclo euleriano 
Grafos 
• TEOREMA 1.4 (Grafos eulerianos) 
– Algoritmo 
• C1 = G,C,E,G 
• C2 = D,F,E,D 
• C3 = A,B,D,C,A 
• C12 = C1  C2 = E,G,C,E,D,F,E 
• C123 = C12  C3 = C,E,D,F,E,G,C,A,B,D,C 
CG
E
B
FD
A
CG
E
B
FD
A
CG
E
B
FD
A
CG
E
B
FD
A
CG
E
B
FD
A
CG
E
B
FD
A
Grafos 
• Caminhos e ciclos eulerianos 
– TEOREMA 1.5 
Um grafo conexo possui caminho euleriano se e somente se 
 i. nenhum de seus vértices possui grau ímpar, 
 (Teorema 1.4); ou 
 ii. exatamente dois de seus vértices possuem grau ímpar. 
 
No segundo caso, existe caminho euleriano que não é ciclo, e deve 
começar em um dos vértices de grau ímpar e terminar no outro. 
Grafos 
• Caminhos e ciclos eulerianos 
– Teorema 1.5: Exemplo 
 
 
Vértices de grau ímpar 
 
 C e D 
 
Caminho euleriano 
 
 C,E,D,C,A,B,D 
 
Grafos 
C
E
B
D
A
• Caminhos e ciclos eulerianos 
– Concluindo o Teorema 1.5 
• Comentários sobre o TEOREMA 1.5: 
– Um grafo G contém uma QUANTIDADE PAR de vértices com grau ímpar 
– Se esta quantidade for: 
ZERO: G admite um ciclo euleriano; 
DOIS: G admite um caminho euleriano, mas não um ciclo euleriano; 
QUALQUER OUTRO VALOR PAR: G não admite caminho euleriano. 
Grafos 
Grafos 
• EXERCÍCIOS 2.1 
– Para o grafo a seguir, faça o que se pede: 
a) Indique os graus de todos os vértices: 
 d(A) = d(C) = d(E) = d(G) = 
d(B) = d(D) = d(F) = 
b) Indique um caminho hamiltoniano. 
c) Indique um ciclo hamiltoniano. 
d) d(B,E) = 
 
C
FE
B
D
A
G
Grafos 
• EXERCÍCIOS 2.1 
– Para o grafo a seguir, faça o que se pede: 
e) Indique três caminhos simples de A a F, 
de comprimentos distintos: 
caminho: comprimento = 
caminho: comprimento = 
caminho: comprimento = 
f) Indique quatro ciclos simples. 
g) Indique um caminho euleriano, ou prove que não existe 
h) Indique um ciclo euleriano, ou prove que tal ciclo não existe. 
 
C
FE
B
D
A
G
Grafos 
• EXERCÍCIOS 2.1 
– Para o grafo G a seguir, faça o que se pede: 
a) Indique os graus de todos os vértices: 
 d(A) = d(C) = d(E) = d(G) = 
d(B) = d(D) = d(F) = 
b) Indique um CAMINHO EULERIANO em G 
(que não seja ciclo), ou prove porque G 
não admite tal caminho. 
c) Indique um CICLO EULERIANO em G, ou 
prove porque G não admite tal ciclo. 
D
BA
C
GF
E
• EXERCÍCIOS 2.1 
– Para o grafo G abaixo, faça o que se pede: 
d) Indique um CICLO HAMILTONIANO em G, 
ou prove porque G não admite tal ciclo. 
e) Indique todos os CICLOS SIMPLES de G 
Grafos 
D
BA
C
GF
E
• EXERCÍCIOS 2.1 
– Qual é o número mínimo de arestas em 
um grafo conexocom n vértices? 
– Qual é o número máximo de arestas em 
um grafo desconexo com n vértices? 
 
Grafos 
• Caminhos e ciclos 
– Digrafos 
– Grafos e digrafos Ponderados 
 
Aula 4 – Continuação 
• Caminhos e ciclos em digrafos 
– Exemplo 
d,g,e,f caminho simples, 
 de comprimento 3 
 
f,g,e,f ciclo simples, 
 de comprimento 3 
 
e,f,e ciclo simples, 
 de comprimento 2 
 
 
 
 
Grafos 
c
b
a
g
f
e
d
• Caminhos e ciclos em grafos ponderados 
– Exemplo 
v1,v3,v5 caminho simples, 
 de comprimento 18 
 
v1,v7,v4,v5 caminho simples, 
 de comprimento 15 
 
 
 
Grafos 
v3v2
9
v1 v6
4
v7
3
v4
v5
10
6
12
5
8
7
• Caminhos e ciclos em digrafos ponderados 
– Exemplo 
d,g,e,f caminho simples, 
 de comprimento 21 
 
f,g,e,f ciclo simples, 
 de comprimento 18 
 
e,f,e ciclo simples, 
 de comprimento 11 
 
 
 
Grafos 
c
b
a
g
f
e
d
5
11
487 7
8
6
Obrigado! 
 
 
• Grafos 
– Subgrafos 
– Conectividade 
– Emparelhamentos 
Aula 5 
• G’=(V’, E’) é um subgrafo de G=(V,E) se 
– V’  V e E’  E 
– G é um supergrafo de G’ 
• G’ é um subgrafo gerador se 
– V’ = V 
 
Subgrafos 
• Exemplo 
– G’ é um subgrafo de G (supergrafo) 
Subgrafos 
v3
v9
v8
v1
v10v6
v4
v5
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
G’ G 
• Exemplo 
– G’ é um subgrafo gerador de G 
Subgrafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
G’ com V’ = V G 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
• G’ é um subgrafo induzido de G se 
– (  v,w  V’ ) ( {v,w}  E  {v,w}  E’ ) 
Subgrafos 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
G’, induzido por { v3,v4,v5,v6,v7,v8,v9 } G 
v3
v9
v8
v6
v7
v4
v5
• G’ é um subgrafo maximal (quanto a conectividade) se 
– G’ é conexo, e 
– Não existe subgrafo conexo G’’ tal que G’  G’’ 
Subgrafos 
• Exemplo 
– Subgrafos 
conexos 
– Apenas G4 
é maximal 
 
Subgrafos 
v3
v6
v4
v5
v3
v2 v6
v4
v5
v3
v6
v4
v5
G1
G3
G2
G4
v3
v2 v6
v7
v4
v5
• Componentes conexos de um grafo G 
– Subgrafos conexos maximais de G 
• G é conexo 
– Um componente conexo 
• G é desconexo 
– Mais de um componente conexo 
 
Subgrafos 
• Exemplo 
– G é desconexo 
 
Subgrafos 
v3
v2
v9
v8
v1
v10
v6
v7
v4
v5
G tem 3 Componentes conexos 
• Remoção de vértices (e arestas incidentes a estes) 
– G’ = G – vi 
– G’ = G – { vi , vj , … } 
 
• Remoção de arestas 
– G’ = G – e 
– G’ = G – { ei , ej , … } 
Subgrafos 
• Exemplo 
– G’ = G – D = G – { D } 
 
Subgrafos 
G
H
E
FA
D
B
C
• Exemplo 
– G’ = G – D = G – { D } 
 
Subgrafos 
G
H
E
FA
B
C
A remoção de { D } não desconecta o grafo 
• V’  V é um corte de vértices se 
– A remoção de V’ resulta em um subgrafo desconexo ou trivial 
– V’ é minimal (quanto à conectividade) 
• Não existe subconjunto V’’  V’ que desconecta o grafo 
 
 
Subgrafos 
• Exemplo 
– G’ = G – { C,D,F } 
 
Subgrafos 
G
H
E
FA
D
B
C
• Exemplo 
– A remoção de { C,D,F } 
desconecta o grafo 
 
Subgrafos 
G
H
E
A
B
• Exemplo 
– { C,D,F } não é minimal 
 
 
 
 
{ C,D }  { C,D,F } 
Subgrafos 
G
H
E
FA
D
B
C
{ C,D,F } não é corte de vértices 
• Exemplo 
– A remoção de { C,D } 
desconecta o grafo. 
 
 
 
 
 
 
– Além disso, 
{ C,D } é minimal 
 
 
 
 
 
 
 
Subgrafos 
{ C, D } é um corte de vértices 
G
H
E
FA
B
• Exemplo 
– A remoção de { E } 
desconecta o grafo 
 
Subgrafos 
G
H
E
FA
D
B
C
• Exemplo 
– { E } é um corte de vértices 
 
 
Subgrafos 
G
H
FA
D
B
C
{ E } é corte de vértices de cardinalidade mínima 
• E’  E é um corte de arestas se 
– A remoção de E’ resulta em um subgrafo desconexo ou trivial 
– E’ é minimal (quanto à conectividade) 
• Não existe subconjunto E’’  E’ que desconecta o grafo 
 
 
Subgrafos 
• Exemplo 
– G’ = G – { AB, CE, DE } 
 
Subgrafos 
G
H
E
FA
D
B
C
• Exemplo 
• A remoção de { AB, CE, DE } 
desconecta o grafo 
 
 
 
 
 
• 
 
{ AB, CE, DE } não é minimal 
 
{ CE, DE }  { AB, CE, DE } 
Subgrafos 
G
H
E
FA
D
B
C
{ AB, CE, DE } não é corte de arestas 
• Exemplo 
– G’ = G – { AC, BC, EC } 
 
Subgrafos 
G
H
E
FA
D
B
C
• Exemplo 
– A remoção de { AC, BC, EC } 
desconecta o grafo 
 
 
 
 
 
 
 
 
 
 
{ AC, BC, EC } é minimal 
 
 
 
 
 
Subgrafos 
G
H
E
FA
D
B
C
{ AC, BC, EC } é corte de arestas 
• Exemplo 
– G’ = G – { CE, DE } 
 
Subgrafos 
G
H
E
FA
D
B
C
• Exemplo 
– A remoção de { CE, DE } 
desconecta o grafo 
 
 
 
 
 
 
 
 
 
 
{ CE, DE } é minimal 
 
 
 
 
 
Subgrafos 
{ CE, DE } é corte de arestas de cardinalidade mínima 
G
H
E
FA
D
B
C
• cV - conectividade em vértices de um grafo 
– Valor da menor cardinalidade de um corte de vértices de G 
• cE - conectividade em arestas de um grafo 
– Valor da menor cardinalidade de um corte de arestas de G 
• Um vértice v é uma articulação quando sua remoção 
desconecta o grafo 
• Uma aresta e é uma ponte quando sua remoção 
desconecta o grafo 
 
 
Subgrafos 
• Exemplo 
– Para o grafo G 
• cV = 1 
• cE = 2 
• O vértice E 
é uma articulação 
• O grafo não tem 
nenhuma ponte 
 
 
Subgrafos 
G
H
E
FA
D
B
C
• Um grafo é k-conexo em vértices quando 
– cV  k 
• Um grafo é k-conexo em arestas quando 
– cE  k 
 
 
Subgrafos 
• Exemplo: o grafo G é 
 
– 1-conexo em vértices, 
ou apenas 
conexo em vértices 
 
 
 
 
 
– 2-conexo em arestas, 
ou 
biconexo em arestas 
 
 
Subgrafos 
G
H
E
FA
D
B
C
• Um grafos bipartido G(V,E) 
– Emparelhamento em G 
• E’  E tal que nenhum par de arestas de E’ têm um vértice em comum 
– Emparelhamento maximal 
• E’ é um emparelhamento 
• Não existe emparelhamento E’’ tal que E’  E’’ 
– Emparelhamento máximo 
• De maior cardinalidade 
Subgrafos 
• Exemplo 
– Grafo (a) 
– Emparelhamento 
{ CF } 
 
não é maximal, 
pois 
 
{ CF }  { CF, BE } 
Subgrafos 
A
F
B
D
E
G
C
(a)
A
B
D
E
G
C
F
(b)
 
 
 
• Exemplo 
– Grafo (a) 
– Emparelhamento 
{ CF, BE } 
 
é maximal, 
mas não é um 
 
emparelhamento máximo 
Subgrafos 
A
F
B
D
E
G
C
(a)
 
 
 A
F
B
D
E
G
C
(c)
• Exemplo 
– Grafo (a) 
– Emparelhamento 
{ CF, DB, AE } 
 
 
é um 
emparelhamento máximo 
Subgrafos 
A
F
B
D
E
G
C
(a)
 
 
 A
F
B
D
E
G
C
(d)
Grafos 
• EXERCÍCIOS 2.3 
– Quais são os valores cV e cE para o grafo Kn? 
– Desenhar um grafo conexo 3-regular que tenha uma ponte? 
 
Grafos 
• EXERCÍCIOS 2.3 
– Quais as pontes e articulações existentes no grafo abaixo? 
 
CG
E
B
FD
A
Resposta nas notas de aula 
Obrigado! 
 
 
• Grafos 
– Planaridade 
– Coloração de vértices 
Aula 6 
• Representação plana 
– Gráfico sem arestas que se cruzem 
Planaridade 
(a) (c)(b)
Representações planas: apenas (b) e (c) 
• Definição 
– Um grafo é dito planar se admite uma representação plana 
Planaridade 
O K4 é um grafo planar 
(a) (c)(b)
• Teorema 1.6 (Fórmula de Euler) 
– Se G é planar e conexo, então n + f = m + 2 
Planaridade 
(a) (c)(b)
1
2
3
4
1
2
3
4
1
2
3 5
4
Representações planas: f = 4 
• Teorema 1.7 
– Se G é planar e conexo, com n  3, então: 
a. m  3n – 6; e 
b. Se G não contém ciclo de comprimento 3, então m  2n – 4. 
• Observe que: 
– O teorema 1.7 não permite verificar se um grafo é planar, 
apenas se um grafo é não-planar 
Planaridade 
• Lema 1.2: o K5 e o K3,3 são não-planares 
– Verifique 
a. Para o K5: m  3n – 6 ? 
b. Para o K3,3 (sem contém ciclo de comprimento 3): m  2n – 4 ? 
Planaridade 
K5 K3,3
• Subdivisão de um grafo 
– Subdivisão das arestas. Exemplo: AB, AE, BC 
Planaridade 
D
E
A
C
B
D
E
A
C
B
G G′ 
G’ é subdivisão de G 
• Homeomorfismo 
– Grafos homeomorfos: resultados de subdivisões 
Planaridade 
G, G’ e G′’: Grafos homeomorfos 
G G′ G′′
• Teorema 1.8 (Kuratowski) 
– Um grafo é planar se e somente se não contém um subgrafo 
homeomorfo a K5 ou homeomorfo a K3,3 
PlanaridadePlanaridade 
• EXERCÍCIOS 2.4 
– Desenhe uma representação 
plana para o grafo abaixo, ou 
prove que este grafo é 
não-planar 
 
Resposta nas notas de aula 
BA
C D
E
Planaridade 
• EXERCÍCIOS 2.4 
– Desenhe uma representação 
plana para o grafo abaixo, ou 
prove que este grafo é 
não-planar 
 
Planaridade 
• EXERCÍCIOS 2.4 
– Desenhe uma representação plana para o K2,3 
– Desenhe uma representação plana para o K2,4 
 
Coloração de vértices 
• Sejam: Grafo G = (V,E) 
 Conjunto de p cores distintas C = { c1, c2,  cp } 
• Coloração de vértices 
 função cor: V  C 
 {v,w}  E  cor(v)  cor(w) 
• k-coloração para G 
– Coloração que utiliza k cores 
– G é k-colorível 
Coloração de vértices 
• Exemplo: G é 3-colorível? 
 
D
F
B H
EA
G
C
c3c3
c3
c1
c1
c1
c2c2
Coloração de vértices 
• Observe que 
• Todo grafo G = (V,E) é n-colorível 
• Problema 
• Qual a menor coloração de vértices para um grafo G? 
• Definição 
– Número cromático (G) de um grafo G 
– (G) é menor valor de k para o qual G é k-colorível 
Coloração de vértices 
• Exemplo: (G) = 3? Sim! 
• Como provar? 
1. Exibir uma 3-coloração 
2. Provar que 
G não admite uma 
2-coloração 
• Como provar o item 2? 
 
c3c3
c3
c1
c1
c1
c2c2
Coloração de vértices 
• Lema 1.1 
– Um grafo é bicolorível se e somente se for bipartido. 
 
Coloração de vértices 
• Exemplo: (G) = 3? Sim! 
• Prova 
1. 3-coloração já exibida 
2. G tem um ciclo de 
comprimento ímpar: 
C,B,H,C 
 
Logo, G não é bipartido. 
 
Portanto, G não admite 
 uma 2-coloração. 
 
D
F
B H
EA
G
C
Coloração de vértices 
• Teorema das quatro cores 
– Todo mapa (grafo planar) é 4-colorível 
A
D
C
B
F
E
F
C
B
A
D
E
B
D
C E
F
A
Planaridade 
• EXERCÍCIOS 2.5 
– Determine (G) para o grafo G abaixo. 
Prove que o valor (G) está correto. 
D
EA
B
GF
C
Resposta nas notas de aula 
Planaridade 
• EXERCÍCIOS 2.5 
– Construa o menor grafo sem triângulos tal (G) = 3. 
Um grafo sem triângulos não tem o K3 como subgrafo. 
– Qual é o valor de (Kn)? 
– Seja G um grafo composto apenas por um ciclo simples contendo 
todos os seus vértices. Qual é o número cromático de G? 
Obrigado! 
 
 
Obrigado! 
 
 
CENTRO UNIVERSITÁRIO CARIOCA 
 
UNICARIOCA 
 
 
 
 
TEORIA 
DA 
COMPUTAÇÃO 
 
 
 
 
NOTAS DE AULA 
 
PROFESSOR: JÚLIO SILVEIRA 
 
 
 
 
VERSÃO: agosto de 2017
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 1 
 
 
I FUNDAMENTAÇÃO TEÓRICA 
I.1 DEFINIÇÕES 
Símbolo: menor unidade de informação a ser manipulada. 
Ex.: a, b, c, 0, 1, S, A, B, … 
OBS: Inicialmente, não consideraremos o caracter espaço em branco ' ' como símbolo válido. 
Alfabeto: conjunto finito e não vazio de símbolos. 
Ex: A = { a, b } B = { a, b, c, …, z } C = { 0, 1 } 
Sequência: (ou cadeia ou palavra) 
Concatenação de uma quantidade finita de símbolos de um dado alfabeto. 
Ex: sequências com símbolos do alfabeto A acima: a, ab, aaab, bbb, ababa, … 
Comprimento de uma sequência 
Número natural que indica a quantidade de (ou ocorrências de) símbolos existentes na sequência. 
NOTAÇÃO: o comprimento de uma sequência qualquer , é denotado por | | 
Ex:  = a  |  | = 1 
 = aaba  |  | = 4 ou também | aaba | = 4 
Sequência vazia:  
A sequência vazia, representada por , não contém nenhum símbolo. 
Desta forma,  tem COMPRIMENTO ZERO, ou seja: |  | = 0 
ATENÇÃO:  não é símbolo! 
Ou seja, não existe o símbolo . Esta letra grega (leia–se lâmbda) é reservada apenas para 
caracterizar a sequência vazia! 
Prefixo, sufixo e subpalavra 
Relações entre palavras. Como exemplo, seja a palavra  = aaba. Então: 
 , a, aa, aab, aaba são prefixos de  
, a, ba, aba, aaba são sufixos de  
, a, b, aa, ab, ba, aab, aba, aaba são subpalavras de . 
Observe que  é um prefixo, sufixo e subpalavra e qualquer palavra.! 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 2 
 
 
Concatenação de sequências 
A concatenação das sequências  e  produz a sequência . Notação:  · , ou simplesmente . 
Desta forma, |  | = |  | + |  | 
Ex: a · b = ab ab · b = abb  · abab = abab ·  = abab 
a · bb = abb abb ·  = abb ab ·  · ab = abab 
ATENÇÃO: No último exemplo acima, NÃO represente o resultado de ab··ab como abab, mas como 
abab. Como já dito, o símbolo  somente é utilizado para denotar a sequência vazia! 
Linguagens – conjuntos de sequências 
Uma linguagem é um conjunto de palavras sobre um alfabeto. Considerando o alfabeto { a, b }, 
temos as seguintes linguagens como exemplos: 
Ex: X = { a, ab, bbba } Y = {  } Z = { } 
W = { , bbbb } 
K = { a, ab, abb, abbb, abbbb, abbbbb,  } 
ATENÇÃO: as sequências pertencentes a um conjunto não precisam ter todas o mesmo comprimento. 
Cardinalidade de um conjunto de sequências (linguagem) 
Uma linguagem (conjunto de sequências) pode ter qualquer nº de elementos. Para os conjuntos 
anteriores, temos: 
Ex.: | X | = 3 | Y | = 1 | Z | = 0 | W | = 2 | K | =  
ATENÇÃO: Observar o contexto na utilização da notação | | 
CARDINALIDADE DE UM CONJUNTO: nº de elementos  | X | = 3 
COMPRIMENTO DE UMA SEQUÊNCIA: nº de símbolos  | bbba | = 4 
ATENÇÃO: Não confundir os conjuntos {  }  { }. Nos exemplos acima, Y  Z 
O conjunto Y acima é um conjunto unitário: seu único elemento é a sequência vazia. 
O conjunto vazio Z acima, também representado por , não tem elementos (sequências). 
Conjunto das sequências formadas por um alfabeto 
Para um dado alfabeto A, define-se o conjunto das sequências formadas por A como o conjunto de 
todas as sequências formadas por concatenações de símbolos de A, de qualquer comprimento. 
Por definição,  pertence ao conjunto das sequências formadas por qualquer alfabeto. 
Ex: Para o alfabeto { 0, 1 }, temos: { , 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, 101,  } 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 3 
 
 
I.2 RELAÇÕES ENVOLVENDO CONJUNTOS DE SEQUÊNCIAS 
As relações  e  também se aplicam a conjuntos de sequências. Veja os exemplos a seguir: 
  { a, ab, bbba } 
  { , ab, bbba } 
a  { a, ab, bbba } 
ab  { a, ab, bbba } 
bb  { a, ab, bbba } 
  { , ab, bbba } 
  { , ab, bbba } 
{  }  { , ab, bbba } 
{ ab }  { , ab, bbba } 
{ bb }  { , ab, bbba } 
{ , ab }  { , ab, bbba } 
{ , ab, bb }  { , ab, aabb, aaabbb,  } 
 
I.3 OPERAÇÕES COM CONJUNTOS DE SEQUÊNCIAS 
União, Interseção, Diferença 
Estas operações usuais são bem definidas para conjuntos quaisquer, inclusive para dois conjuntos de 
sequências A e B: 
 A  B = { w | w  A OU w  B } 
 A  B = { w | w  A E w  B } 
 A – B = { w | w  A E w  B } 
Ex: { a, bbb }  { bb, a } = { a, bb, bbb } 
{ a, bbb }  { bb, a } = { a } 
{ a, bbb } – { bb, a } = { bbb } 
Concatenação 
Tal como com sequências, podemos concatenar dois conjuntos de sequências. A concatenação de 
dois conjuntos de sequências X e Y produz um terceiro conjunto, denotado por XY. 
O conjunto XY contém as sequências formadas pelas concatenações de todas as sequências de X com 
todas as sequências de Y, nesta ordem. 
Definindo formalmente: 
 XY = {  |   X E   Y } 
Isto significa que o conjunto XY é formado por todas as sequências obtidas por uma sequência 
qualquer de X concatenada com uma sequência qualquer de Y. 
Observe que os conjuntos XY e YX normalmente serão diferentes, pois seus elementos são gerados 
na ordem específica, qual seja: sequências   X concatenadas com sequências   Y. 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 4 
 
 
Veja os exemplos a seguir: 
 { a, bbb } { bb, a } = { aa, abb, bbbbb, bbba } 
{ a, bbb } { a, bbb } = { aa, abbb, bbba, bbbbbb } 
{ a } { b, bb, bbb } = { ab, abb,abbb } 
{ , a } { b, bb, bbb } = { b, bb, bbb, ab, abb, abbb } 
Note que podemos ter XY  YX: 
 { a, aa } { b, bb } = { ab, abb, aab, aabb } 
{ b, bb } { a, aa } = { ba, baa, bba, bbaa } 
ATENÇÃO – Observe que, para qualquer conjunto X, temos: 
{  } X = X {  } = X e  X = { } X =   Não existe   ! 
Notação: X
n
 
Se X é um conjunto de sequências (linguagem), definimos X
n
 como a concatenação do conjunto X com 
ele mesmo, n vezes. Por definição, X
0
 = {  }. Como exemplo, se X = { a, bbb }, então: 
X
0
 = {  } 
X
1
 = X = { a, bbb } 
X
2
 = XX = { a, bbb } { a, bbb } = { aa, abbb, bbba, bbbbbb } 
X
3
 = XXX = … = { aaa, aabbb, abbba, abbbbbb, bbbaa, bbbabbb, bbbbbba, bbbbbbbbb } 
e assim por diante. 
Fechamento (ou Fechamento de Kleene, ou estrela de Kleene) 
Formalmente, se X é um conjunto de sequências (linguagem), definimos o fechamento de X como o 
conjunto: 
X* = X
0
  X
1
  X
2
  X
3
  X
4
 … 
Em outras palavras, X* é o conjunto das sequências formadas por todas as concatenações de 
quantidades quaisquer de elementos de X, em qualquer ordem. 
Por quantidade qualquer, entenda-se inclusive ZERO, o que inclui a sequência vazia . 
Ex.: X = { a, bbb } 
X* = { , a, bbb, aa, abbb, bbba, bbbbbb, aaa, aabbb, abbba, bbbaa, abbbbbb, … } 
Observe que, se X for um alfabeto, X* é conjunto de todas as sequências formadas por X. 
Ex.: X = { a, b } 
X* = { , a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb, aaaa, … } 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 5 
 
 
Outros exemplos: 
Se X = { a } e Y = { b } temos: 
 X* = { , a, aa, aaa, aaaa, … } 
 Y* = { , b, bb, bbb, bbbb, … } 
Expressões contendo vários operadores (operações): 
Para os mesmos conjuntos X = { a } e Y = { b }, observe os exemplos a seguir. 
 X* = { , a, aa, aaa, aaaa, … } 
Y* = { , b, bb, bbb, bbbb, … } 
X*  Y* = { , a, b, aa, bb, aaa, bbb, aaaa, bbbb, aaaaa, … } 
X*  Y* = {  } 
X* – Y* = resolva! 
ATENÇÃO: Novamente não confundir os conjuntos {  } e { } 
{ , aa }  { , bb } = {  } 
{ a, aa }  { b, bb } = { } =  
Outros exemplos: 
X Y = { a } { b } = { ab } 
X Y* = { a } { , b, bb, bbb, bbbb, … } = { a, ab, abb, abbb, abbbb, … } 
Y* X = { , b, bb, bbb, bbbb, … } { a } = { a, ba, bba, bbba, bbbba, … } 
X* Y = { , a, aa, aaa, aaaa, … } { b } = { b, ab, aab, aaab, aaaab, … } 
Y X* = resolva! 
X* Y* = resolva! 
( X Y )* = resolva! 
I.4 EXERCÍCIOS 
Sejam os seguintes conjuntos: 
A = { a, b } 
B = { a } 
C = { b } 
D = { aa } 
E = { bb } 
F = { aa, bb } 
G = { aab } 
H = {  } 
I =  
J = { 0 } 
K = { 0, 110 } 
L = { , 0 } 
1) Caracterize, por enumeração, os conjuntos a seguir (enumere alguns dos seus elementos). 
a) A* = 
b) B* = 
c) D* = 
d) F* = 
e) G* = 
f) H* = 
g) I* = 
h) K* = 
i) L* = 
j) B*  C* = 
k) B*  C* = 
l) A*  B* = 
m) D*  E* = 
n) D*  E* = 
o) B* – C* = 
p) A2 = 
q) AB = 
r) BA = 
s) B2 = 
t) AD = 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 6 
 
 
u) DE = 
v) HG = 
w) B E* = 
x) D* E* = 
y) H B* = 
z) I B* = 
2) Verdadeiro ou Falso 
a) a  A* V ( ) F ( ) 
b) a  B* V ( ) F ( ) 
c) a  D* V ( ) F ( ) 
d) aa  D*  E* V ( ) F ( ) 
e) aa  F* V ( ) F ( ) 
f) aabb  D* V ( ) F ( ) 
g) aabb  D*  E* V ( ) F ( ) 
h) aabb  F* V ( ) F ( ) 
i) bbaa  F* V ( ) F ( ) 
j) A* = B*  C* V ( ) F ( ) 
k) F* = D*  E* V ( ) F ( ) 
l) B*  A* V ( ) F ( ) 
m) B*  D* V ( ) F ( ) 
n) D*  B* V ( ) F ( ) 
o) D*  F* V ( ) F ( ) 
p) F* = { bb, aa }* V ( ) F ( ) 
q) J* = L* V ( ) F ( ) 
r) H = H* V ( ) F ( ) 
s) I = I* V ( ) F ( ) 
t) H* = I* V ( ) F ( ) 
3) Verdadeiro ou Falso, justificando sua resposta. Observe os exemplos abaixo. 
a) { ab }*  { abab }* FALSO 
Justificativa: 
Observemos que ababab  { ab }*, mas ababab  { abab }*. 
Ou seja, a sequência ababab é um elemento de { ab }* que não pertence a { abab }*. 
Desta forma, { ab }*  { abab }*. 
b) ababaab  { a, ab }* VERDADEIRO 
Justificativa: 
O conjunto { a, ab } tem dois elementos: a e ab. O fechamento deste conjunto certamente inclui a 
sequência formada por concatenações destes dois elementos na seguinte ordem: ab·ab·a·ab. 
c) aabbaa  { aa, bb }* 
d) aabbbaa  { aa, bb }* 
e) aabbbaa  { aa, b }* 
f) abbba  { aa, b }* 
g) abbba  { ab, ba }* 
4) Enumere as sequências pertencentes aos conjuntos abaixo, de acordo com as especificações: 
a) { b, ab, aba }*  Todas as sequências de comprimento QUATRO 
Resposta: bbbb, abab, bbab, babb, abbb, baba, abab 
b) { ab, aba }*  Todas as sequências de comprimento SETE 
Resposta: abababa, ababaab, abaabab 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 7 
 
 
c) { b, ab, aba }*  Todas as sequências de comprimento menor ou igual a QUATRO 
Resposta: 
d) { b, ab, bbb }*  Todas as sequências de comprimento TRÊS ou QUATRO 
Resposta: 
e) { a, bbb }*  Todas as sequências de comprimento SETE 
Resposta: 
f) { a, bbb }*  Todas as sequências de comprimento menor que SEIS e ÍMPAR 
Resposta: 
g) { a, bbb }*  Todas as sequências de comprimento menor que SEIS e PAR 
Resposta: 
h) { aa, bbb }*  Todas as sequências de comprimento menor que SEIS e ÍMPAR 
Resposta: 
i) { a, bb }*  Todas as sequências de comprimento SEIS 
Resposta: 
I.5 GABARITO DE ALGUNS EXERCÍCIOS 
1) 
a) A* = { , a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb, aaaa, … } 
b) B* = { , a, aa, aaa, aaaa, … } 
c) D* = { , aa, aaaa, aaaaaa, … } 
d) F* = { , aa, bb, aaaa, aabb, bbaa, bbbb, aaaaaa, aaaabb, aabbaa, aabbbb, bbaaaa, … } 
e) G* = { , aab, aabaab, aabaabaab, … } 
f) H* = {  } 
g) I* = {  } 
h) K* = { , 0, 00, 000, 110, 0000 , 0110, 1100, 00000, 00110, 01100, 11000, … } 
i) L* = J* = { , 0, 00, 000, 00000, 000000, … } 
j) B*  C* = { , a, b, aa, bb, aaa, bbb, aaaa, bbbb, … } 
k) B*  C* = {  } 
l) A*  B* = A* (veja acima) 
m) D*  E* = { , aa, bb, aaaa, bbbb, aaaaaa, bbbbbb, … } 
n) D*  E* = {  } 
o) B* – C* = { a, aa, aaa, aaaa, … } 
p) A2 = AA = { aa, ab, ba, bb } 
q) AB = 
r) BA = { aa, ab } 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 8 
 
 
s) B2 = BB = 
t) AD = { aaa, baa } 
u) DE = { aabb } 
v) HG = 
w) B E* = { a } { , bb, bbbb, bbbbbb, … } = continue! 
x) D*E* = { , aa, aaaa, aaaaaa, … } { , bb, bbbb, bbbbbb, … } 
 = { , aa, bb, aaaa, aabb, bbbb, aaaaaa, aaaabb, aabbbb, bbbbbb, aaaaaaaa, … } 
y) H B* = B* = { , a, aa, aaa, aaaa, … } 
z) I B* = 
2) 
a) V 
b) V 
c) F 
d) V 
e) V 
f) F 
g) F 
h) V 
i) V 
j) F 
k) F 
l) V 
m) F 
n) V 
o) V 
p) V 
q) V 
r) V 
s) F 
t) V 
 
 
 
 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 9 
 
 
II AFD – AUTÔMATO FINITO (MÁQUINA DE ESTADO) DETERMINÍSTICO 
O conceito de autômato finito (ou máquina de estado finito) consiste na idealização de uma 
máquina abstrata, que durante todo o seu funcionamento, passa por várias “configurações” ou estados. 
Em cada instante, a máquina somente pode se encontrar em um destes estados, responsável por gerar 
alguma saída ao mundo exterior. 
Durante o seu processamento, o autômato finito lê uma entrada do mundo exterior, e esta 
entrada irá determinar o próximo estado da máquina, sempre dependendo do estado atual em que ela 
se encontra. Ou seja, uma determinada entrada pode fazer a máquina se comportar de uma forma 
específica por um dado estado, ou de uma forma distinta, se a máquina se encontra em outro de seus 
estados. 
Emum autômato finito determinístico, o número de estados é sempre finito, e que todas as 
entradas ou saídas serão símbolos. Os símbolos lidos durante o processamento formam a sequência 
de entrada lida pela máquina. Ao processar esta sequência, a máquina irá gerar uma sequência de 
saída, formada pela concatenação dos símbolos gerados por cada estado percorrido em cada instante 
do tempo. 
II.1 DEFINIÇÃO: AFD DE PROCESSAMENTO (AUTÔMATO FINITO DETERMINÍSTICO) – apostila, pág. 443 
 
Resumindo, um AFD M = [E, I, O, fE, fO], com: 
E conjunto finito de estados; 
I alfabeto de entrada; 
O alfabeto de saída; 
fO função saída, sendo: 
fO : E  O 
fE função próximo estado (ou função de transição de estados), sendo: 
fE : E  I  E 
CONVENÇÃO: E = { e0 , e1 , e2 , … , ek } Neste caso, E contém k+1 estados. 
e0 : estado inicial. 
EXEMPLO: (Exemplo 16 da apostila, pág 444) 
E = { e0 , e1 , e2 } 
I = { 0, 1 } 
O = { 0, 1 } 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 10 
 
 
Vejamos como caracterizar as funções fO e fE para o AFD deste exemplo: 
fO : E  O 
e
0
e
1
e
2
0
1
 
fE : E  I  E 
e
0
(e
0
,0)
(e
0
,1)
(e
1
,0)
(e
1
,1)
(e
2
,0)
(e
2
,1)
e
1
e
2
 
No exemplo 16: a sequência de entrada 01101 produz a sequência de saída 011110. 
 
 
Para o mesmo ADF, qual a sequência produzida pela entrada 1100011011? R.: 
Tempo t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 
Entrada 1 1 0 0 0 1 1 0 1 1 - 
Estado e0 
Saída 
II.2 GRAFO DE ESTADO: outra representação para o ADF do exemplo 16 (pág. 444): 
 ATENÇÃO: 
in
est / out
 
Símbolo de saída: indicado DENTRO do rótulo do nó 
Símbolo de entrada: indicado na SETA (transição) 
Por convenção, duas setas para o mesmo estado são representadas com uma seta com rótulo duplo: 
i1
ei / out
i2
i1 , i2
 est / out
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 11 
 
 
Importante verificar que um Autômato Finito Determinístico: 
 LÊ sequências  contendo símbolos do alfabeto de entrada I, ou seja,   I* 
 GERA sequências  contendo símbolos do alfabeto de saída O, ou seja,   O* 
Máquina de
Estado Finito
 *  *
 
II.3 EXERCÍCIOS (ALGUMAS RESPOSTAS NA SEÇÃO II.4) 
EXERCÍCIOS DA APOSTILA: a partir da pág. 460, do 1) ao 10). 
1) Seja AFD representado pela tabela a seguir, onde I = { 0, 1 } e O = { a, b }. 
Estado Atual Próximo Estado Saída 
 Entrada Atual 
 0 1 
e0 e2 e1 a 
e1 e1 e0 b 
e2 e0 e1 b 
a) Desenhe o seu grafo de estados correspondente: 
b) Calcule a sequência de saída para as sequência de entrada 110010 (lida da esquerda para a direita). 
2) Seja a Máquina de Estado Finito representada pela tabela a seguir, onde I = { a, b, c } e O = { 0, 1 }. 
Est. Atual Próx. Estado Saída 
 Entrada Atual 
 a b c 
e0 e0 e0 e1 0 
e1 e2 e0 e1 0 
e2 e2 e1 e0 1 
a) Desenhe o seu grafo de estados correspondente 
b) Calcule a sequência de saída para as sequências de entrada a seguir, lidas da esquerda para a direita: 
abcabc bacabc bacaaa 
c) Enumere TODAS as sequências de entrada possíveis que produzam as seguintes saídas: 
010001 001010 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 12 
 
 
3) Seja a Máquina de Estado Finito representada pela tabela a seguir. 
Est. Atual Prox. Estado Saída 
 Entrada Atual 
 a b c 
e0 e0 e1 e2 0 
e1 e2 e1 e2 1 
e2 e0 e1 e1 1 
a) Desenhe o seu grafo de estados correspondente. 
b) Calcule a sequência de saída para as sequências de entrada a seguir, lidas da esquerda para a direita: 
aabcaa bbbccc bcabca 
c) Enumere TODAS as sequências de entrada possíveis que produzam as seguintes saídas: 
0101 0110 
4) Seja a Máquina de Estado Finito representada pelo grafo a seguir, onde I = { 0, 1 } e O = { 0, 1 }. 
e
0 
/ 1
0, 1
0
e
2 
/ 1
e
1 
/ 0
1
1
0
 
a) Preencha a tabela de estados correspondente: 
Estado Atual Próximo Estado Saída 
 Entrada Atual 
 0 1 
e0 
e1 
e2 
 
b) Calcule a sequência de saída para as sequências de entrada a seguir, lidas da esquerda para a direita: 
011101 110110 
5) Para o AFD representado pelo grafo a seguir, onde I = { a, b } e O = { 0, 1 }. 
e
0 
/ 0
a, b
a
e
1 
/ 1
e
2 
/ 0
a
b
b
 
a) Preencha a tabela de estados correspondente: 
Estado Atual Próximo Estado Saída 
 Entrada Atual 
 a b 
e0 
e1 
e2 
b) Calcule a sequência de saída para as sequências de entrada a seguir, lidas da esquerda para a direita: 
abbbab bbabba 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 13 
 
 
6) Para o AFD abaixo, onde I = { 0, 1 } e O = { a, b }: 
a) Complete o seu grafo de estados, sabendo que 
a sequência de entrada 111 gera a saída abba. 
b) Enumere TODAS as sequências de entrada que 
geram a saída abbb. 
e
0/
e
1/
e
2/
 
7) Para o AFD abaixo, onde I = { 0, 1 } e O = { a, b }:
a) Complete o seu grafo de estados, sabendo que 
a sequência de entrada 000 gera a saída abba. 
b) Enumere TODAS as sequências de entrada que 
geram a saída abbb. 
e
0 /
e
1 /
e
2 /
 
8) Para o alfabeto de entrada I = { ‘ ’, a, b }, e para o alfabeto de saída O = { ‘ ’, a, b, A, B } construir 
uma máquina de estado finito que leia uma “frase” contendo caracteres de I, e transforme esta frase 
colocando a primeira letra de cada palavra em maiúscula. 
Ex.: ENTRADA: " a aba baba a baba " 
SAÍDA: " A Aba Baba A Baba " 
 
II.4 GABARITO DE ALGUNS EXERCÍCIOS 
APOSTILA: pág. 460, 1.a. e 2.a. 
 
Resposta: 0001111110 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 14 
 
 
 
7º
0 1º Nível1
e0 / 0 e3 / 0 e0 / 0 e4 / 1
e3 / 0e0 / 0
e0 / 0
0 1 0
 2º Nível 
 3º Nível 
1
e1 / 1 e2 / 1 4º Nível 
e0 / 0
0 1
e4 / 1
e2 / 1 e1 / 1
e0 / 0 e4 / 1
e1 / 1 e2 / 1
e1 / 1
e0 / 0 e4 / 1
e2 / 1
e2 / 1 e1 / 1
e2 / 1
e2 / 1 e1 / 1
e1 / 1
e0 / 0 e4 / 1
5º N 
1
1
1
 6º N
0
0
0 0 0 0 01
10
111
1
0
1
0
 
Resposta: sequências 110100 e 111010 
1) a) Grafo de estados b) Processar a sequência de entrada  = 110010 
e0 / a
1
1
e1 / b
e2 / b
00
0
1
 
  = abababb 
 
 
6) a) Grafo de estados b) Entradas cujo processamento gera a saída  = abbb. 
 
e
1/ b
1
1
00
0
e
0/ a
e
2/ b
1
 
0 1
e
2
 / b
e
1
 / be
0
 / a
e
0
 / a
0 1
e
2
 / b
0 1
e
1
 / b
e
1
 / b
0
e
1
 / 1
1
e
0
 / a
 
Resposta: sequências 100, 101 e 110 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 15 
 
 
III AFD DE RECONHECIMENTO 
Além dos AFD’s de processamento, vistos na anterior, autômatos finitos também podem ser 
definidos para atuarem como “reconhecedores”. 
A definição de um AFD de reconhecimento não contém um alfabeto de saída, sendo 
especificado apenas o alfabeto de entrada I. Ao ler qualquer sequência   I*, o AFD reconhecedor 
irá reconhecer (ou aceitar) apenas algumas destas sequências, e não reconhecer (não aceitar ou 
rejeitar) outras. 
AFD
RECONHECEDOR
 * ACEITA 
REJEITA 
 
III.1 AFD´S RECONHECEDORES 
Um Autômato Finito Determinístico reconhecedor M terá as seguintes características: 
 Seus estados NÃO GERAM SAÍDA: apenas o alfabeto de entrada I é definido. 
 Seu conjunto de estados E é pode ser particionado em dois conjuntos E = EF  EF’, onde: 
EF : conjunto de ESTADOS FINAIS 
EF’: conjunto de ESTADOS NÃO–FINAIS 
 NOTAÇÃO GRÁFICA: 
 
efinal enão-final
 
 ESTADO FINAL ESTADO NÃO-FINAL 
 No processamento de uma sequência entrada   I*, M pode terminar em um estado: 
FINAL  M RECONHECE ou ACEITA  
NÃO-FINAL  M NÃO RECONHECE, NÃO ACEITA, ou REJEITA  
Exemplo: o AFD a seguir tem cinco estados sendo que e2 e e4 são estados finais. 
e0
1
e3
0
e4
e1
0
1e2
1
0
1
0
0
1
 
Processamento do AFD á esquerda: 
M ACEITA as sequências: 01, 011, 110,  
M REJEITA as sequências: 0, 00, 101,  
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIOSILVEIRA 
 NOTAS DE AULA 16 
 
 
III.2 LINGUAGENS RECONHECIDAS POR UM AFD 
Como já visto, um AFD M pode ler qualquer palavra   I*, reconhecendo algumas e 
rejeitando outras. Desta forma, M particiona o conjunto I* em dois subconjuntos: 
I* = S  S’ onde S = linguagem reconhecida por M; 
S’ = conjunto das sequências rejeitadas por M. 
Dizemos então que M reconhece a linguagem S. 
 
Formalmente, definimos a Linguagem reconhecida por M, notada por L(M), como: 
L(M) = {   I* | M reconhece  } 
Exercício: caracterize, EM PORTUGUÊS, as linguagens reconhecidas pelos AFD’s abaixo. 
Apostila I, PROBLEMA PRÁTICO 40, pág. 448 (Fig. 8.6), A SER RESOLVIDO EM AULA: 
 
 
PADRÃO DE RESPOSTAS: 
a. L(M) = { 0 } Resp.: Apenas a sequência 0 
b. L(M) = { 10, 010, 0010, 00010,  } Resp.: Sequências de sufixo 01 que contenham um 
único símbolo 1 
c. L(M) = { 0, 1 } Resp.: Apenas as sequências 0 e 1 
d. L(M) = { , 11, 1111, 111111,  } Resp.: Sequências de comprimento par que não 
contenham o símbolo 0 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 17 
 
 
EXERCÍCIOS RESOLVIDOS EM AULA: Caracterize L(M), em português, para cada AFD abaixo. 
(a) 
a,b
e
0
a,b
e
1
 
L(M): 
Apenas a sequência vazia, ou apenas . 
 
 
(b) 
b a,b
a
e
0
e
1
 
L(M): 
Sequências que não contenham o símbolo 1. 
 
(c) 
b
e
2
e
0
e
1
b a,b
a
a 
L(M): 
Sequências que contenham dois símbolos b’s 
consecutivos. 
 
(d) 
e
3
0
1
0
1
0,1
e
1
e
0
e
2
0
1
 
L(M): 
Sequências que não contenham nenhum símbolo 
sucedido por outro igual. 
 
(e) 
a,b
e
1
a,b
e
0
 
L(M): 
Sequências de comprimento par. 
 
 
(f) 
a
e
0
a,b
b
e
1
 
L(M): 
Conjunto vazio 
(M não reconhece nenhuma sequência) 
 
 
(g) 
b
e
2
e
0
e
1
b a,b
aa
 
L(M): 
Sequências que contenham dois símbolos b. 
 
 
(h) 
e
0
1
e
3
0
e
4
e
1
0
1e
2
1
0
1
0
0
1
 
L(M): 
Sequências em que o símbolo inicial seja 
diferente do último símbolo. 
 
 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 18 
 
 
III.3 CONSTRUINDO UM AFD DE RECONHECIMENTO 
Dada uma descrição da linguagem L(M), construiremos o AFD correspondente. Consideraremos 
implicitamente o alfabeto de entrada I = { a, b }, ou então, quando for o caso, o alfabeto I = { 0, 1 }. 
EXEMPLOS RESOLVIDOS EM AULA: 
Para cada exemplo, vamos enumerar algumas das sequências que obedecem ou não à descrição 
dada. Desta forma, devemos construir um autômato que, ao ler qualquer sequência a ser reconhecida, 
termine seu processamento em um estado final; e o processamento de qualquer sequência que não deve 
ser reconhecida leva o autômato a um estado não-final. 
EXEMPLOS RESOLVIDOS EM SALA – Construir AFD’s que reconheçam as seguintes linguagens:
a. Sequências iniciadas com o símbolo ‘a’. 
 
  L(M): a, aa, ab, aaa, aab, aba, abb, aaaa,  
  L(M): , b, ba, bb, baa, bab, bba, bbb,  
 
a
e0
e2 a,b
b
a,be1
 
 
b. Seqs finalizadas pelo símbolo ‘a’. 
 
  L(M): a, aa, ba, aaa, aba, baa, bba, aaaa,  
  L(M): , b, ab, bb, aab, abb, bab, bbb,  
 
 
a
b
e0b ae1
 
 
 
c. Seqs iniciadas por dois símbolos iguais. 
 
  L(M): 
  L(M): 
 
e0
b
e2
e1
a
a,be4
a
a,b e3
b
a
b
 
 
d. Seqs terminadas com dois símbolos iguais. 
 
  L(M): 
  L(M): 
 
e0
b
e2
e1
a
be4
b
b
a e3 a
a
b
a
 
 
 
e. Seqs com a’s e b’s de comprimento par. 
 
  L(M): , aa, ab, ba, bb, aaaa, aaab,  
  L(M): a, b, aaa, aab, aba, abb, baa, bab,  
 
a,b
a,b
e0 e1
 
 
f. Seqs contendo um nº par de ‘a’s. 
 
  L(M): , b, aa, bb, aab, aba, bbb,  
  L(M): a, ab, ba, abb, bab, bba, aaa,  
 
a
a
e0 e1b b
 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 19 
 
 
g. Seqs em que o 2º símbolo é ‘a’. 
 
  L(M): 
  L(M): 
a
e2
e0 e1
a,b
a,b
e1
b
a,b
 
 
h. Seqs em que o penúltimo símbolo é ‘a’. 
 
  L(M): 
  L(M): 
a
e2
e0 e1
a
a
b
e3
b b
a
b
 
 
i. Seqs que contenham dois ‘1’s consecutivos. 
 
  L(M): 
 
  L(M): 
 
1
e2e0 e1
1
0,1
0
0
 
 
j. Seqs terminadas com ‘101’. 
 
  L(M): 
 
  L(M): 
 
0
e3e0 e1
1
0
e2
1
1
0
1
0 
 
k. Seqs em que todo ‘a’ é sucedido por ‘b’. 
 
  L(M): , b, ab, bb, abb, bab, bbb, bbbb,  
 
  L(M): a, aa, ba, bba, aba, baa, aab, aaa,  
 
e0
e1
a
a
e3 a,b
b
b
 
 
l. Seqs de comprimento par finalizadas por ‘a’. 
 
  L(M): 
 
  L(M): 
 
a,b e2
e0 e1
a,b
b
a
a,b e3
 
 
 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 20 
 
 
III.4 EXERCÍCIOS 
APOSTILA: pág. 463 em diante: 
 para os exercícios 19) (menos item b), 20), e 32) construir AFD reconhecedores das 
linguagens descritas em cada item; 
 caracterizar as linguagens reconhecidas pelos ADF’s dos exercícios do 25) ao 30); 
 
9) Descreva, em português, a linguagem L(M) para cada AFD M, a seguir. 
a) 
e
0
e
1
0,1
0,1 
 
 
d) 
0,1
e
1
1,0
e
0
 
 
 
g) 
0
1,0
e
2
1
e
0
0
1
e
1
 
 
b) 
a
b
b
e
1
a
e
0
 
 
 
e) 
e
0
e
1
1,0
1
0
 
 
h) 
0
1,0
e
1
e
2
1
e
0
0
1 
 
c) 
1
e
1
1,0
e
0
0
 
 
 
f) 
e
0
e
1
1,0
0,1
 
 
 
i) 
0
1,0
e
2
1e
1
0
1
e
0
 
 
j) 
1
0,1
e
2
0
e
0
e
1
0,1
 
 
 
 
k) 
1
0,1
0
e
1
e
0
e
2
0,1
 
 
 
l) 
e0
0
1
1
0
1
e1 e2
0
1
e4e3
0
0
1
 
 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 21 
 
 
m) 
0
1,0
e
2
1
e
0
0
1
e
1
 
 
 
 
n) 
0
1
1
0
e
1
e
2
e
3
e
0
1
0
0,
1
 
 
o) 
1
1
e
0
0,1
e
1
00
e
2
 
 
 
10) Para o AFD M, representado a seguir: 
a) Dê 5 exemplos de palavras reconhecidas por M. 
b) Descreva L(M) em português 
c) Em que implicaria o fato de e0 não ser um estado final? 
e
4
0
e
1
e
0
e
3
1
1
e
2
0
0
1
0
1
1
0
 
11) Para o AFD M, representado a seguir: 
a) Dê 5 exemplos de palavras reconhecidas por M. 
b) Descreva L(M) em português 
c) O que implicaria o fato de e0 também ser um estado final? e0
e
1
e
2
e
5
e
3
e
4
0
1
0
0
1
1
1
1
0
0
0,1
 
12) Para o AFD M, representado a seguir: 
a) Dê 5 exemplos de palavras reconhecidas por M. 
b) Descreva L(M) em português 
c) O que implicaria o fato de e0 não ser um estado final? 
e
3
0 1
0
1
0,1
e
1
e
0
e
2
0
1
 
13) Para I = { a, b }, construir os grafos de AFD’s que reconheçam as seguintes linguagens: 
a) Palavras de comprimento par. 
b) Palavras de comprimento par E terminadas com a. 
c) Palavras de comprimento ímpar E terminadas com a. 
d) Palavras que possuam mais de um a E mais de um b. 
e) Palavras que possuam mais de um a OU mais de um b. 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 22 
 
 
f) Palavras em que TODO b é precedido de a. 
g) Palavras em que TODO b é sucedido por a. 
h) Palavras em que o símbolo inicial seja igual ao símbolo final. 
i) Palavras em que o símbolo inicial seja diferente do símbolo final. 
j) Palavras que possuam dois símbolos a’s consecutivos. 
k) Palavras que NÃO possuam dois símbolos a’s consecutivos. 
l) Palavras que NÃO possuam repetição consecutiva de um mesmo símbolo. 
m) Palavras que NÃO terminem com dois a’s consecutivos. 
n) Palavras com 3 ou mais símbolos, sendo que ambos – a e b – deverão estão presentes. 
o) Palavras que NÃO tenham a’s isolados. Ou seja, TODO símbolo a tem um vizinho igual a ele. 
14) Para o alfabeto I = { 0, 1 }, construir AFD’s que reconheçam as seguintes linguagens: 
a) Palavras com quantidade par de 0’s. 
b) Palavras em que o penúltimo dígito seja 0. 
c) Palavras em que o 2º símbolo seja igual ao 4º símbolo. 
d) Palavras que tenham o sufixo ‘101’. 
e) Palavras que tenham o sufixo por ‘110’. 
f) Palavras terminadas por dois símbolos diferentes. 
g) Palavras em que a “soma dos seus bits” não seja maior do que 3. 
h) Palavras que não possuam três 1’s consecutivos. 
15)Para o alfabeto de entrada I = { a, b, c, d, e }, construir um AFD’s que reconheçam as linguagens: 
a) Palavras iniciadas por vogal. 
b) Palavras que NÃO comecem com consoante. 
c) Qual a diferença dos conjuntos definidos nos itens a) e b)? 
16) Construir um AFD que reconheça a linguagem formadas pelas palavras do alfabeto I = { a, b } que 
contenham um n° par de a’s E um n° par de b’s (não necessariamente o mesmo n° de a’s e b’s). 
III.5 RESPOSTAS DE ALGUNS EXERCÍCIOS: 
9) Assumindo o alfabeto de entrada { 0, 1 } ou { a, b }, dependendo de cada MEF, temos: 
a) Seqs de comprimento ímpar. 
b) Seqs: vazia e sequências terminadas com ‘b’. OU TAMBÉM : Seqs que não terminem com ‘a’. 
c) Seqs que não contenham o símbolo ‘1’. 
d) Apenas a sequência vazia. 
e) Conjunto vazio ou seja: nenhuma sequência é reconhecida. 
f) Conjunto vazio ou seja: nenhuma sequência é reconhecida. 
g) Seqs que contenham o (ao menos um) símbolo ‘1’. 
h) Seqs não vazias contendo apenas símbolos ‘0’ (um ou vários). 
i) Apenas a sequência vazia. 
j) Seqs iniciadas com o símbolo ‘1’. 
k) Seqs que não iniciem com o símbolo 1. 
l) Seqs em que os dois últimos símbolos são diferentes. 
m) Qualquer seq não vazia. 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 23 
 
 
n) Seqs que contenham ambos os símbolos ‘0’ e ‘1’. 
o) Seqs que não contenham dois ‘1’s consecutivos. 
12) 
a) , 0, 1, 01, 10, 010, 101, 0101, 1010, … 
b) Seqs que não tenham repetição consecutiva de nenhum símbolo 
c) O conjunto de sequências reconhecido não incluiria a seq vazia. 
13) 
b) 
a
b
s
2
s
2
a,b
a,b
s
0
s
1
a,b
 
c) 
a
b
s
1
s
2
a,b
a,b
s
0
 
f) 
a
b
a
s
1
s
2
s
0
b
a,b
 
n) 
s
0
b
s
3
b
s
6
b
s
1
s
4
s
2
a
a
a
s
5
b
a
b
a
a,b
a,b
 
i) 
s
a
b
s
3
a
s
4
s
b
a
bs
2
b
a
b
a
a
b
 
 
 
14) b) 
s
0
s
3
s
1
0
s
2
0
1
0
1
1
1
0
 
 
 
 
 
 
 
 
 
 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 24 
 
 
IV EXPRESSÕES REGULARES E LINGUAGENS REGULARES (CONJUNTOS REGULARES) 
Um dos problemas que estudamos em Máquinas de Estado Finito é a caracterização da 
linguagem reconhecida por um AFD, que deve ser exata, ou seja, “incluir” todas as sequências 
reconhecidas e “excluir” todas as que serão rejeitadas pelo autômato. Em muitos casos, a descrição 
exata de um conjunto de sequências em uma linguagem natural, como o português, pode não ser muito 
simples, além de não ser universal. 
Uma solução para este problema é a utilização de outro tipo de linguagem, simbólica e universal, 
que facilita a correta caracterização de determinadas linguagens de um dado alfabeto. 
Este capítulo descreve as expressões regulares, que caracterizam as chamadas linguagens 
regulares: conjuntos de sequências reconhecidos por autômatos finitos, o que é provado pelo 
Teorema de Kleene, que será visto adiante. 
IV.1 DEFINIÇÃO: EXPRESSÕES REGULARES 
Expressões regulares são expressões formadas a partir de um dado alfabeto I, e conterão os 
símbolos deste alfabeto, além de operadores específicos. Para diferentes alfabetos, temos novas 
expressões regulares com símbolos do alfabeto considerado. O texto abaixo (apostila, pág. 443) define 
as expressões regulares com os símbolos de um alfabeto I: 
 
 Os itens 1. e 2. compõem a base da definição por recorrência, e definem as expressões 
regulares “simples” ou “elementares”: 
1. Os símbolos  e  são expressões regulares. Esta definição vale para qualquer alfabeto I. 
2. Cada símbolo i pertencente ao alfabeto I é, por si só, uma expressão regular. 
 O item 3. é o passo da recorrência, e define expressões regulares complexas, formadas a 
partir de outras expressões regulares mais simples: 
(a) AB é formada pela concatenação da expressão regular A com a expressão regular B; 
(b) A  B é formada pela “operação” ou entre as expressões regulares A e B; 
(c) A* é formada pela “operação” estrela aplicada sobre uma única expressão regular A. 
Temos então alguns exemplos de expressões regulares formadas pelo alfabeto I = { a, b }: 
  a b expressões básicas 
aa ab ba bb item 3a – concatenação 
 a  b b  a item 3b – ou 
 a* b* item 3c – estrela 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 25 
 
 
As expressões regulares “geradas” pelo item 3 podem ser “recombinadas” da mesma forma, 
gerando expressões mais complexas. Temos, por exemplo, as expressões regulares: 
 (a  b)* item 3c: operação estrela aplicada sobre a expressão regular a  b 
 a  (b*) item 3b: operação ou aplicada às expressões regulares a e b* 
Interessante notar que, na definição de alguma linguagem simbólica, a utilização de parênteses 
visa estabelecer a ordem de avaliação dos operadores, como nos exemplos acima. Além disso, 
geralmente é estabelecida uma convenção para a precedência de operadores, visando diminuir uma 
quantidade excessiva de parênteses. Com expressões regulares isso também acontece, e a convenção 
universalmente aceita estabelece a seguinte precedência: 
1. maior precedência – operador * (estrela) 
2. média precedência – operador de concatenação 
3. menor precedência – operador  (ou) 
Vejamos mais exemplos de expressões regulares formadas por I = { a, b }, aplicando a convenção 
de precedência estabelecida (ou seja, sem parênteses desnecessários): 
 (a  b)* estrela aplicada à expressão regular a  b 
 a  b* operação ou entre a expressão regular a e a expressão regular b* 
 
 aa  b operação ou entre a expressão regular aa e a expressão regular b 
 a (a  b) concatenação de a com a  b 
 
 aa* concatenação de a com a* 
 (aa)* estrela aplicada à expressão regular aa 
 
 aa  b* ou entre as expressões regulares aa e b* 
 a (a  b*) concatenação da expressão regular a com a expressão regular a  b* 
 a (a  b)* concatenação da expressão regular a com a expressão regular (a b)* 
 (aa  b)* estrela aplicada à expressão regular aa b 
 
 aa*  bb* ou entre a expressão regular aa* e a expressão regular bb* 
(aa)*  (bb)* ou entre a expressão regular (aa)* e a expressão regular (bb)* 
 (aa  bb)* estrela aplicada à expressão regular aa  bb 
 
 ( ab* )* estrela aplicada à expressão regular ab* 
IV.2 DEFINIÇÃO: LINGUAGENS REGULARES 
Vamos agora estudar como cada expressão regular formada por I pode caracterizar um conjunto 
contendo sequências formadas por símbolos do alfabeto I. Os conjuntos definidos desta forma são 
chamados linguagens regulares. 
Formalmente: seja uma expressão regular R, definida sobre um alfabeto I. Definiremos L(R) 
como a linguagem regular (ou conjunto regular) associada à expressão R. 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 26 
 
 
 
 Os itens 1 a 3 compõem a base da definição por recorrência, e definem os conjuntos 
regulares “simples” ou “elementares”: 
1. L() = { } a expressão regular  caracteriza a linguagem vazia (conjunto vazio); 
2. L() = {  } a expressão regular  caracteriza a linguagem regular composta apenas 
pela sequência vazia; 
3. L(i) = { i } sendo i um símbolo do alfabeto I, a expressão regular i caracteriza a 
linguagem regular contendo apenas a sequência i (de comprimento um). 
Como exemplo, temos então as linguagens regulares elementares formados por I = { a, b }: 
L() = { } 
L() = {  } 
L(a) = { a } 
L(b) = { b } 
 O item 4 é o passo da recorrência, e define linguagens regulares mais complexas, formadas a 
partir de outros conjuntos regulares mais simples, através das operações de concatenção, 
união, e fechamento. 
(a) L(AB) = L(A)·L(B) a linguagem regular L(AB) é formada pela concatenação 
 dos conjuntos regulares L(A) e L(B); 
(b) L(A  B) = L(A) L(B) a linguagem regular L(AB) é formada pela união entre os 
 os conjuntos regulares L(A) e L(B); 
(c) L(A*) = L(A) * a linguagem regular L(A*) é formada pelofechamento do 
 conjunto regular L(A). 
Vejamos exemplos de linguagens regulares formadas pelo alfabeto I = { a, b }: 
L(aa) = { aa } linguagem regular formada pela concatenação: { a } { a } 
L(ab) = { ab } linguagem regular formada pela concatenação: { a } { b } 
L(a  b) = { a , b } linguagem regular a  b formada pela união: { a }  { b } 
L(a*) = {  , a , aa , aaa , aaaa ,  } linguagem regular a* formada pelo fechamento: { a } * 
L(b*) = {  , b , bb , bbb , bbbb ,  } linguagem regular b* formada pelo fechamento: { b } * 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 27 
 
 
Podemos continuar aplicando as operações entre os conjuntos exemplificados acima, formando 
linguagens regulares mais complexas. Vejamos mais exemplos: 
L( aa  b ) = { aa , b } união: { aa }  { b } 
L( a (a  b) ) = { aa , ab } concatenação: { a } { a,b } 
L( (a  b) (a  b) ) = { aa , ab , ba , bb } concatenação: { a,b } { a,b } 
 
L(aa*) = { a , aa , aaa , aaaa ,  } contatenação: { a } {  , a , aa , aaa , aaaa ,  } 
L(ab*) = { a , ab , abb , abbb ,  } contatenação: { a } {  , b , bb , bbb , bbbb ,  } 
L( (aa)* ) = {  , aa , aaaa , aaaaaa ,  } fechamento: { aa } * 
 
L(a*  b* ) = {  , a , b , aa , bb , aaa , bbb ,  } {  , a , aa , aaa ,  }  {  , b , bb , bbb ,  } 
L(aa*  bb* ) = { a , b , aa , bb , aaa , bbb ,  } { a , aa , aaa ,  }  { b , bb , bbb ,  } 
 
L( (aa)*  (bb)* ) = {  , aa , bb , aaaa , bbbb , aaaa ,  } {  , aa , aaaa ,  }  {  , bb , bbbb ,  } 
 
L( (aa  bb)* ) = {  , aa , bb , aaaa , aabb , bbaa , bbbb , aaaaaa , aaaabb ,  } 
 
L( (a  b)* ) = {  , a , b , aa , ab , ba , bb , aaa , aab , aba , abb , baa , baa , bba ,  } 
L(a(a  b)* ) = { a , aa , ab , aaa , aab , aba , abb , aaaa , aaab , aaba ,  } 
IV.3 EXERCÍCIOS RESOLVIDOS EM AULA 
1) Para o alfabeto I = { a, b }, descreva em português as linguagens regulares abaixo: 
a) L( a (a  b) ) Resp. Sequências formadas por dois símbolos, e iniciadas por a. 
b) L( (a  b) (a  b) ) Resp. Sequências formadas por dois símbolos (de comprimento dois). 
c) L( a* ) Resp. Sequências que não contenham o símbolo b. 
d) L( aa* ) Resp. Sequências não vazias que só contenham o símbolo a. 
e) L( ab* ) Resp. Sequências iniciadas por a em que os demais símbolos sejam b. 
f) L( (aa)* ) Resp. Sequências de comprimento par que não contenham o símbolo b. 
g) L( a*  b* ) Resp. Sequência vazia, e sequências formadas pelo mesmo símbolo. 
h) L( aa*  bb* ) Resp. Sequências não vazias formadas pelo mesmo símbolo. 
i) L( (aa)*  (bb)* ) Resp. Sequências de comprimento par formadas pelo mesmo símbolo. 
j) L( (aa  bb)* ) Resp. 
k) L( (a  b)* ) Resp. Todas as sequências com os símbolos a e b, incluindo . 
l) L( a (a  b)* ) Resp. Sequências iniciadas por a. 
m) L( (a  b) (a  b)* ) Resp. Sequências não vazias. 
n) L( (a  b) a (a  b)* ) Resp. Sequências em que o 2º símbolo é a. 
o) L( (a  b)* a (a  b) ) Resp. Sequências em que o penúltimo símbolo é a. 
p) L( ( (a  b) (a  b) ) * ) Resp. Sequências de comprimento par. 
q) L( (ab*) * ) Resp. Sequências que não sejam iniciadas por b. 
r) L( (a*b) * ) Resp. Sequências que não sejam finalizadas por a. 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 28 
 
 
2) Escreva as expressões regulares que caracterizem as linguagens a seguir. 
Considere o alfabeto { a, b }, ou quando for o caso, o alfabeto { 0, 1}. 
a) Sequências iniciadas com dois símbolos iguais. 
b) Sequências finalizadas por dois símbolos diferentes. 
c) Sequências que tenham comprimento ímpar. 
d) Sequências que tenham no mínimo um símbolo a. 
e) Sequências que tenham dois a’s consecutivos 
f) Sequências que tenham exatamente dois símbolos a. 
g) Sequências com uma quantidade par de a’s. 
h) Sequências em que o 2º símbolo é a, e o 4º símbolo é b. 
i) Sequências que contenham no mínimo dois símbolos. 
j) Sequências contendo no máximo três símbolos. 
 GABARITO: 
a) (aa  bb) (a  b)* 
aa (a  b)*  bb (a  b)* 
b) (a  b)* (ab  ba) 
(a  b)*ab  (a  b)* ba 
c) (a  b) ( (a  b) (a  b) )* 
d) (a  b)* a (a  b)* 
b*a (a  b)* 
e) (a  b)* aa (a  b)* 
f) b* a b*a b* 
g) (ab*a  b)* 
b*(ab*a b*)* 
h) (a  b) a (a  b) b (a  b)* 
i) (a  b) (a  b) (a  b)* 
j) λ  (a  b)  (a  b) (a  b)  (a  b) (a  b) (a  b) 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 29 
 
 
IV.4 TEOREMA DE KLEENE 
O principal objetivo para o estudo de expressões regulares e linguagens regulares é definido pelo 
Teorema de Kleene, enunciado abaixo. 
 
Denotamos por L(M) como a linguagem reconhecida pelo autômato finito M. O Teorema de 
Kleene afirma que: 
 Dado um autômato finito M, o conjunto L(M) é uma linguagem regular. Podemos então 
caracterizá–la formalmente, através de sua expressão regular; 
 Toda linguagem regular R admite um autômato finito que a reconheça; ou seja, existe um 
autômato finito M talque L(M) = R. 
Uma consequência imediata do Teorema de Kleene é que podemos mostrar que um conjunto de 
sequências C qualquer é uma linguagem regular de duas formas: 
 Através da expressão regular que o caracterize, ou 
 Construir um autômato finito M, e provar que L(M) = C. 
Ou seja, mostrar que M reconhece o conjunto C. 
EXEMPLOS RESOLVIDOS EM SALA: 
Para cada expressão regular R abaixo, construir um AFD que reconheça a linguagem regular L(R): 
a. a* 
 
b
e0
a,b
e1
a
 
 
 
b. aa* 
 
a
a
a,b
e0 e1
e2
b b
 
 
c. a*a 
a
a
a,b
e0 e1
e2
b b
 
 
d. a (a  b)* 
a
a,b
a,b
e0
e1
e2
b
 
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 30 
 
 
e. (aa)* 
a
a,be2
b b
a e1e0
 
 
f. (a  b) (a  b)* 
 
a,b
a,b
e1e0
 
 
 
g. (a  b) a (a  b)* 
a,b
a,b
a,b
e0
e2
e3
b
e1
a
 
 
h. ( (a  b) (a  b) ) * 
 
 
a,b
a,b
e1e0
 
 
 
 
i. aa*  bb* 
a
a
b
e0
e1
b
a,b
e3
b
a
e2
 
 
j. (a  b)* a (a  b) 
 
 
 
 
 
 
 
 
 
k. a*  b* 
a
a
b
e1
b
a,b
e3
b
a
e0
e2
 
 
l. a*b* 
 
 
 
 
 
 
 
 
IV.5 EXERCÍCIOS 
a. Apostila: a partir da pág. 463, exercícios 22, 25–31, 33. 
1) Certo ou Errado. 
a) 010110  L[ ( 01  10)* ] ( ) Certo ( ) Errado 
b) 010110  L[ 01*  0*1 ] ( ) Certo ( ) Errado 
c) 010110  L[ ( 01*  0*1)* ] ( ) Certo ( ) Errado 
d) 000011  L[ ( 01)*  0*1 ] ( ) Certo ( ) Errado 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 31 
 
 
e) 000011  L[ ( 01*  0*1)* ] ( ) Certo ( ) Errado 
f) 100001  L[ 01*  0*1 ] ( ) Certo ( ) Errado 
g) 100001  L[ ( 01)*  ( 10)* ] ( ) Certo ( ) Errado 
h) 100001  L[ ( 01*  0*1)* ] ( ) Certo ( ) Errado 
i) 000001  L[ ( 01)*  ( 00)* ] ( ) Certo ( ) Errado 
j) 000001  L[ ( 01  00)* ] ( ) Certo ( ) Errado 
k) (01*  0*1)* = L[ ( 01  10)* ] ( ) Certo ( ) Errado 
l) (01*  0*1)* = L[ ( 0  1)* ] ( ) Certo ( ) Errado 
2) Certo ou errado. 
a)   L[ (0*11)* ] ( ) Certo ( ) Errado 
b) 000001  L[ (0*11)* ] ( ) Certo ( ) Errado 
c) 000011  L[ (0*11)* ] ( ) Certo ( ) Errado 
d) 000111  L[ (0*11)* ] ( ) Certo ( ) Errado 
e) 001111  L[ (0*11)* ] ( ) Certo ( ) Errado 
f) 011111  L[ (0*11)* ] ( ) Certo ( ) Errado 
g) 111111  L[ (0*11)* ] ( ) Certo ( ) Errado 
h)   L[ (0*11 0*)* ] ( ) Certo ( ) Errado 
i) 001111  L[ (0*11 0*)* ] ( ) Certo ( ) Errado 
j) 011100  L[ (0*11 0*)* ] ( ) Certo ( ) Errado 
k) 111100  L[ (0*11 0*)* ] ( ) Certo ( ) Errado 
l)   L[ 0* 1 (10)* ] ( ) Certo ( ) Errado 
m) 000110  L[ 0* 1 (10)* ] ( ) Certo ( ) Errado 
n) 011010  L[ 0* 1 (10)* ] ( ) Certo ( ) Errado 
o) 101010  L[ 0* 1 (10)* ] ( ) Certo ( ) Errado 
3) Certo ou errado. 
a) 011010  L[ (011)*  (010)* ] ( ) Certo ( ) Errado 
b) 010010  L[ (011)*  (010)* ] ( ) Certo ( ) Errado 
c) 011010  L[ (011  010)*] ( ) Certo ( ) Errado 
d) 010010  L[ (011  010)* ] ( ) Certo ( ) Errado 
e) 011010011  L[ (011  010)* ] ( ) Certo ( ) Errado 
f) 010001  L[ (00)*  (01)* ] ( ) Certo ( ) Errado 
g) 010001  L[ ( 0 (1  0) )* ] ( ) Certo ( ) Errado 
h) 010001  L[ ( 0 (1  0) (1  0) )* ] ( ) Certo ( ) Errado 
i) 010001  L[ ( 0 (1  0) (1  0) (1  0) )* ] ( ) Certo ( ) Errado 
j) 010001  L[ (0  1)* ] ( ) Certo ( ) Errado 
4) Certo ou errado. 
a) 00110011  L[ 0* (11)* ] ( ) Certo ( ) Errado 
b) 00110011  L[ 00 (11)* ] ( ) Certo ( ) Errado 
c) 00110011  L[ (00)* (11)* ] ( ) Certo ( ) Errado 
d) 00  L[ (00)* (11)* ] ( ) Certo ( ) Errado 
e) 00  L[ (11)* (00)* ] ( ) Certo ( ) Errado 
f) 0011  L[ (00)* (11)* ] ( ) Certo ( ) Errado 
g) 0011  L[ (11)* (00)* ] ( ) Certo ( ) Errado 
h) 0110  L[ (0*1)* ] ( ) Certo ( ) Errado 
i) 0110  L[ ( 0 1*)* ] ( ) Certo ( ) Errado 
j) 0110  L[ ( 0*1*)* ] ( ) Certo ( ) Errado 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 32 
 
 
5) Enumere as 10 menores sequências pertencentes às linguagens regulares abaixo: 
a) L[ a*b* ] 
b) L[ (ab*)* ] 
c) L[ (a*b)* ] 
d) L[ (aa)*  (bb)* ] 
e) L[ (aa  bb)* ] 
f) L[ a*ba* ] 
g) L[ (aa)* (bb)* ] 
h) L[ a* ba* ] 
i) L[ a b*a ] 
j) L[ a*b  b*a ] 
k) L[ a*b  a b* ] 
l) L[ a*b*  b*a* ] 
 
6) Escreva uma AFD que reconheça cada linguagem regular da questão acima. 
7) Para cada AFD M a seguir, forneça uma descrição do conjunto L(M): 
 a) em português; e b) por uma expressão regular. 
a) 
a,b
e
0
e
1
a,b 
b) 
e
0
a
b
e
1
a
b
 
c) 
e
0
a
a,b
e
1
b
 
d) 
e
0
a
b a
e
1
b
 
e) 
e
0
0,1
e
1
e
2
0,1
0,1 
f) 
a
e
1
a
bbb
a
e
0
e
2
 
i) 
e
0
0
e
1
e
2
1
0,1
0,1
e
1
1 0
 
j) 
e
0
0
0,1
1
e
3
0,10,1
e
1
e
2
 
k) 
e
0
a
a
b
e
3
a,bb
e
1
e
2
b
a
 
l) 
0
1
0,1
e
1
e
0
00
1
e
2
e
3
1
 
o) 
e
0
1
0,1
e
2
0,1
e
1
0
 
p) 
e
0
1
e
2
0,1
e
1
0,1
0
 
q) 
e
0
0,1
e
2
0
e
1
 0,1
1
 
r) 
e
0
0
1
e
1
e
3 0,1
e
2
0
0,11
 
g) 
e
3
e
1
e
2
0
0
1
0
1
1
0,1
e
0
 
h) 
e
3
e
1
e
2
0
0
1
0
1
1
0,1
e
0
 
m) 
a
b
a
b
b
e
2e1
e
0
a
a
b
e
3
e
4
a
b
 
n) 
e
3
e
1
e
2
0
1
1
1
e
4
0
0
1
0
0
1
e
0
 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 33 
 
 
t) 
e
0
0
1
1
e
1
e
5 0,1
e
2
0
0
e
3
e
4
0
1
0
1
1
 
u) 
0 0
1
0
1
0,1
e
0
e
1
e
2
e
3
1
 
8) Para I = { a, b }, seja S o conjunto de sequências que comecem dois símbolos iguais E terminem 
com dois símbolos iguais, sendo que os dois primeiros são diferentes dos dois últimos. 
a) Escreva as CINCO menores sequências que pertencem a S. 
b) Escreva as SETE menores sequências que NÃO pertencem a S. 
c) Escreva a expressão regular que caracterize S. 
d) Desenhe um autômato finito (MEF) que reconheça o conjunto S. 
9) Para cada expressão regular R abaixo, escreva um ADF que reconheça a linguagem L(R). 
a) aa
*
 
b) a
*
ba
*
 
c) ab
*
a 
d) ab
*
a 
e) (a  b)*b
 
g) (abb)
*
 
h) (aa)*b* 
10) Para cada expressão regular R abaixo, escreva um ADF que reconheça a linguagem L(R). 
a) (00)*1 
b) 1(00)*
 
c) (01)*
 
d) (010)*
 
e) (00  11)* 
f) (00)*  (11)*
 
g) (01)*  (10)*
 
h) 00*  11*
 
i) (00)*(11)*
 
j) (1  00)* 
k) 1*  (00)* 
l) 0 (0  1)* 0 
m) (0  1) 0 (0  1)*
 
0 (0  1) 
11) Escreva uma AFD que reconheça L [ (aa)
* 
b aa (aa)
*
 ] 
12) Escreva uma AFD que reconheça L [ a
*
b
*
  b
*
a
* 
] 
 
IV.6 GABARITO 
1) 
a) C 
g) E 
b) E 
h) C 
c) C 
i) E 
d) E 
j) C 
e) C 
k) E 
f) E 
l) C 
2) 
a) C 
i) C 
b) E 
j) E 
c) C 
k) C 
d) E 
l) E 
e) C 
m) C 
f) E 
n) C 
g) C 
o) E 
h) C 
5) 
a) a*b* = { , a, b, aa, ab, bb, aaa, aab, abb, bbb, aaaa, aaab, aabb, abbb, bbbb, … } 
c) (a*b)* = { , b, ab, bb, aab, abb, bab, bbb, aaab, aabb, abab, abbb, baab, babb, bbab, bbbb, … } 
e) (aa  bb)* = { , aa, bb, aaaa, aabb, bbaa, bbbb, aaaaaa, aaaabb, aabbaa, aabbbb, bbaaaa, … } 
TEORIA DA COMPUTAÇÃO – PROF. JÚLIO SILVEIRA 
 NOTAS DE AULA 34 
 
 
h) a*ba* = { , b, ab, ba, aab, aba, baa, aaab, aaba, abaa, baaa, aaaab, aaaba, aabaa, abaaa, … } 
6) h) 
s
0
a
b
a
b
s
2
s
1
a,b 
7) 
a) Sequências de comprimento ímpar ................................................... (a  b) ( (a  b) (a  b) )* 
b) Sequências terminadas com ‘a’ ......................................................... (a  b)* a ou b*a (b*a)* 
c) Sequências que não tenham o símbolo ‘a’ ........................................ b* 
d) Sequências que não terminem com o símbolo ‘a’ ............................ (a*b)* ou   (a  b)* b 
e) Sequências com pelo menos dois símbolos. ...................................... (0 1) (0 1) (0 1)* 
f) Sequências em que o n° de ‘a’s é múltiplo de 3 ............................... ( b  a b*ab*a )* 
i) Sequências que comecem com ‘01’ .................................................. 01 (0 1)* 
j) Sequências formadas por apenas um símbolo ................................... 0 1 
k) Sequências não vazias em que o 1° símbolo não se repete mais ...... ab*  ba* 
m) Conjunto vazio: nenhuma sequência é reconhecida. .........................  
8) Sendo I = { a, b }, temos S  I*, e definimos S’ = I* – S. 
a) S = { aabb, bbaa, aaabb, aabbb, bbaaa, bbbaa, aaaabb, aaabbb, aababb, aabbbb, … } 
b) S’ = { , a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb, aaaa, aaab, aaba, abaa, … } 
c) aa (a  b)* bb  bb (a  b)* aa 
d) 
s
0
s
1
a
s
2
a
s
5
b
b
s
3
s
4
b
b
a
a
b
s
6
s
7
s
8
b
a
a
b
a
a
b
s
9
b
a
a,b
 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 1 
1. ÁRVORES 
1.1 DEFINIÇÕES: Uma árvore é um grafo acíclico e conexo. 
 Outras definições – todas são equivalentes 
i. Uma árvore é um grafo conexo e |E| é mínimo. 
ii. Uma árvore é um grafo conexo, e |E| = |V| – 1. 
iii. Uma árvore é um grafo acíclico, e |E| = |V| – 1. 
iv. Uma árvore é um grafo acíclico, e para todo par de vértices v, w  V, a adição da aresta 
(v,w) produz um grafo contendo exatamente um ciclo. 
 TEOREMA: Um grafo G é uma árvore se e somente se existir um único caminho entre cada par de 
vértices de G. 
 Representação geométrica 
E
B
D
A
F
L
R
K
J
P
U
Q
H
C
G
MI
N
O
S
T
 
FIGURA 1: REPRESENTAÇÃO GEOMÉTRICA DE UMA ÁRVORE 
Estudaremos mais profundamente as árvores enraizadas, que são muito utilizadas como 
estruturas de dados. 
1.2 ÁRVORES ENRAIZADAS: 
Uma árvore enraizada T é uma estrutura de dados que, quando não está vazia, possui um nó 
especial chamado raiz. A raiz pode ter zero ou mais filhos, que por sua vez são raízes de outras 
árvores (chamadas de subárvores de T). Veja o exemplo a seguir, que ilustra uma versão enraizada 
da árvore da FIGURA 1, tendo o nó A como raiz. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 2 
B
A
C D
E F G H I J
K L M N O P Q
R S T U
 
FIGURA 2: UMA ÁRVORE ENRAIZADA 
 Terminologia para árvores enraizadas, exemplificadas a partir da árvore da FIGURA 2 
A raiz da árvore é o nó A. 
Os filhos de A são os nós B, C, e D; os filhos de B são E e F; e assim por diante. 
Também utilizamos o termo pai: o nó C é pai dos nós G, H e I. 
A raiz é o único nó que não tem pai. 
Nós que não têm filhos são chamados folhas. Na árvore acima: K, R, F, G, M, S, T, O, I, U e Q. 
Nós que têm filhos são chamados nós internos. Na árvore acima: A, B, C, D, E, H, J, L, N e P. 
Os descendentes de um nó X são todos os nós que se encontram na subárvore da qual X é o nó 
raiz. Por exemplo: os nós M, N, O, S e T são todos descendentes do nó H. 
Os ancestrais de um nó X são todos os nós que se encontram no caminho ascendente de vai de 
X até a raiz. Por exemplo: os ancestrais de U são os nós P, J, D e A. 
Outras nomenclaturas menosusadas: avô e neto, tio e sobrinho, irmão e primo. 
 Propriedades das árvores: 
Os caminhos que partem de um nó não se encontram mais (do contrário teríamos um ciclo). 
Eles apenas se ramificam em novos caminhos até as folhas. 
 Importantes aplicações em computação: 
 Estrutura de diretórios em um sistema de arquivos. 
 Estrutura de bancos de dados eficientes. 
 Mecanismos de busca. 
 Algoritmos de compactação. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 3 
 Mais terminologia: nível e altura 
O nível de um nó X é o número de nós que se encontram no caminho descendente que vai da 
raiz até o no X (incluindo os nós origem e destino). 
A altura de um nó X é o número de nós que se encontram no maior caminho descendente que 
vai do nó X até uma folha (incluindo os nós origem e destino). 
 O nível do nó raiz é igual a UM. 
 A altura de qualquer folha é igual a UM. 
 A altura de uma árvore é definida como sendo a altura da sua raiz. 
 
NÓ NÍVEL ALTURA 
A 1 5 
B 2 4 
C 2 4 
D 2 4 
E 3 3 
F 3 1 
G 3 1 
H 3 3 
I 3 1 
J 3 3 
K 4 1 
L 4 2 
M 4 1 
N 4 2 
O 4 1 
P 4 2 
Q 4 1 
R 5 1 
S 5 1 
T 5 1 
U 5 1 
 
EXERCÍCIOS: 
1. Desenhe duas árvores não isomorfas com 10 nós e altura 3. 
Quantas árvores não isomorfas existem com tais características? 
2. Verdadeiro ou falso? O maior nível em uma árvore é sempre igual à altura da raiz. 
3. Qual é o número mínimo de nós que uma árvore com 5 níveis pode ter? 
4. Qual o número máximo de nós em uma árvore de altura 4, se cada nó possui sempre menos do 
que 4 filhos? 
5. Qual o número máximo de nós em uma árvore de altura k, se cada nó possui sempre menos do 
que 3 filhos? 
6. Qual o número máximo de nós em uma árvore de altura k, se cada nó possui sempre menos do 
que 4 filhos? 
7. Quantas folhas possui uma árvore com altura k, se cada nó interno tem exatamente 2 filhos? 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 4 
8. Quantos nós possui uma árvore com altura k, se cada nó interno tem exatamente 2 filhos? 
9. Quantos nós possui uma árvore com altura k, se cada nó interno tem exatamente 3 filhos? 
10. Quantas folhas possui uma árvore com altura 4, se cada nó interno tem exatamente m filhos? 
11. Quantos nós e quantas folhas possui uma árvore com altura k, se cada nó interno possui 
exatamente m filhos? 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS: 
 
1. 
 
2. 
Resp.: Verdadeiro. 
3. 
Resp.: 5 nós. 
4. 
No nível 1: 1 nó 
No nível 2: 3 nós 
No nível 3: 9 nós 
No nível 4: 27 nós. 
Resp.: 40 nós no total. 
5. 
No nível 1: 1 nó 
No nível 2: 2 nós 
No nível 3: 4 nós 
No nível 4: 8 nós 
No nível 5: 16 nós 
No nível 6: 32 nós 
... 
No nível k: 2
k–1
 nós 
 
No total, teremos: 1 + 2 + 2
2
 + 2
3
 + …+ 2
k–1
 nós (temos k termos somados) 
 
Observe que este é o somatório dos n termos iniciais da P.G. caracterizada por: 
 
 Primeiro termo: a1 = 1 
 Razão: q = 2 
 Número de termos: n = k 
Aplicando a fórmula da soma dos termos iniciais de uma P.G.: 
1
1
1



q
q
aS
n
n 
Resp.: 
12
12
1



k
nS = 2
k
 – 1 nós 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 5 
6. Resolução de forma análoga à da questão 5. Resp.: 
2
13 k
 nós 
7. Resp.: (a) no mínimo k folhas; (b) no máximo 2k – 1 folhas. 
8. Resp.: (a) no mínimo 2k – 1 nós; (b) no máximo 2k – 1 nós. 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 6 
1.3 PERCURSOS EM ÁRVORES ENRAIZADAS 
Um percurso em árvore enraizada é um procedimento que visa percorrer toda a árvore, 
exibindo ou processando as informações sobre todos os seus nós, de forma que cada nó será 
“visitado” exatamente uma vez – visitar um nó T significa exibir ou processar suas informações. 
Como uma árvore é uma estrutura não linear, um mesmo nó pode ser atingido mais de uma 
vez durante o percurso; porém apenas uma vez ele será visitado. Temos três percursos principais 
definidos para árvores enraizadas; e todos eles são iniciados pelo nó raiz. 
 Percurso em pré-ordem 
O percurso em pré-ordem de uma árvore pode ser resumido da seguinte forma: 
 Primeiro visite a raiz da árvore. 
 Depois percorra a 1ª subárvore mais à esquerda da raiz. 
 Depois percorra a 2ª subárvore mais à esquerda da raiz. 
 Depois percorra a 3ª subárvore mais à esquerda da raiz. 
 E assim por diante, da esquerda para a direita. 
Observe que 1ª subárvore mais à esquerda da raiz será inteiramente percorrida antes de se 
inicia o percurso da 2ª subárvore. Assim, o percurso em pré-ordem pode ser definido de forma 
recursiva pelo algoritmo a seguir: 
PRE_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 Visite (T) 
 Para cada filho F do nó T (da esquerda para a direita) faça 
 PRE_ORDEM(F) 
 
Na árvore da FIGURA 2, a chamada PRE_ORDEM(A), geraria a seguinte saída: 
A B E K L R F C G H M N S T O I D J P U Q. 
 Percurso em pós-ordem 
O percurso em pós-ordem de uma árvore pode ser resumido da seguinte forma: 
 Primeiro percorra a 1ª subárvore mais à esquerda da raiz. 
 Depois percorra a 2ª subárvore mais à esquerda da raiz. 
 Depois percorra a 3ª subárvore mais à esquerda da raiz. 
 E assim por diante, da esquerda para a direita. 
 E por último visite a raiz da árvore. 
Observe que 1ª subárvore mais à esquerda da raiz será inteiramente percorrida antes de se 
inicia o percurso da 2ª subárvore. Assim, o percurso em pós-ordem pode ser definido de forma 
recursiva pelo algoritmo a seguir: 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 7 
POS_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 Para cada filho F do nó T (da esquerda para a direita) faça 
 POS_ORDEM(F) 
 Visite (T) 
 
Na árvore da FIGURA 2, a chamada POS_ORDEM(A), geraria a seguinte saída: 
K R L E F B G M S T N O H I C U P Q J D A. 
 Percurso em ordem de nível 
O percurso em ordem de nível exibe os nós nível a nível, do menor ao maior; percorrendo os 
nós de um mesmo nível da esquerda para a direita. 
Na árvore da FIGURA 2, o percurso em ordem de nível geraria a seguinte saída: 
A B C D E F G H I J K L M N O P Q R S T U. 
 
O algoritmo para o percurso em ordem de nível de uma árvore pode ser implementado usando 
uma FILA, que é uma estrutura sequencial do tipo FIFO – first in, first out. Uma implementação 
típica seria o pseudocódigo a seguir: 
ORDEM_NIVEL(nó T) 
 fila =  
 ENFILA (fila,T) 
 Enquanto FILA   faça 
 DESENFILA (fila,T) 
 Visite (T) 
 Para cada filho F do nó T (da esq para a dir) faça 
 ENFILA (fila,F) 
 
EXERCÍCIO: 
Construa um algoritmo não recursivo que implemente o percurso em pré-ordem utilizando 
uma estrutura LIFO (pilha). 
1.4 ARMAZENAMENTO COMPUTACIONAL DE ÁRVORES ENRAIZADAS 
Uma árvore enraizada é uma estrutura não linear. Para o armazenamento computacional de 
árvores, utilizamos ponteiros dos nós para seus filhos (opcionalmente para os pais também). Desta 
forma, cada nó T da árvore será um registro com a seguinte estrutura: 
 Informação relativa ao nó T 
 Ponteiro para o nó pai de T (opcional) 
 Ponteiros para os nós filhos de T 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 8 
Normalmente limitamos o número máximo de filhos que um nó pode ter, que forma que 
podemos associar a cada nó um vetor de ponteiros (de tamanho fixo) para os seus filhos. Em uma 
árvore m-ária, cada nó tem no máximo m filhos (para um valor fixo m >1). 
Casos particulares são as árvores ternárias (cada nó tem no máximo 3 filhos) e as árvores 
binárias (2 filho no máximo). Neste último caso, normalmente definimos dois ponteiros em vez de 
um vetor, como veremos adiante. 
Observe que a árvore da FIGURA 2 é uma árvore ternária, pois cada nó tem nó máximo 3 
filhos. Poderíamos armazenar esta árvore em uma estrutura de árvore 4-ária (em que cada nó pode 
ter no máximo 4 filhos), embora nenhum nó tivesse onúmero máximo possível de filhos permitido. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 9 
1.5 ÁRVORES BINÁRIAS 
Uma árvore binária é uma árvore onde cada nó pode ter no máximo 2 filhos, cada qual 
especificado por sua posição: filho esquerdo e filho direito. A FIGURA 3 ilustra um exemplo de 
árvore binária. 
B
A
D
E G H J
K L N O P
R S T U
 
FIGURA 3: UMA ÁRVORE BINÁRIA 
 Implementação com alocação estática 
Pode-se declarar uma árvore utilizando os seguintes comandos em Pascal: 
type 
 TNO = record 
 INFO: TINFO; 
 PAI, FESQ, FDIR: integer; 
 end; 
var 
 T: array[1..100] of TNO; 
 RAIZ: integer; 
 
Observe que no exemplo acima toda a árvore T é alocada estaticamente, contendo no máximo 
100 nos. Cada nó tem quatro campos: a informação relativa ao nó, e mais três campos de ponteiros 
para o pai e para os filhos direito e esquerdo. Tais ponteiros são implementados como índices do 
próprio vetor T, e quando um deles não existe, o ponteiro nulo é indicado pelo valor ZERO. 
Finalmente, a variável RAIZ armazena o índice do nó raiz da árvore no vetor T. 
A tabela a seguir ilustra a estrutura preenchida de acordo com a árvore representada pela 
FIGURA 3. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 10 
RAIZ = 5. 
 
 INFO PAI FESQ FDIR 
1 
2 E 8 4 17 
3 P 15 10 0 
4 K 2 0 0 
5 A 0 8 11 
6 
7 H 11 12 9 
8 B 5 2 13 
9 O 7 0 0 
10 U 3 0 0 
11 D 5 7 15 
12 N 7 16 14 
13 G 8 0 0 
14 T 12 0 0 
15 J 11 0 3 
16 S 12 0 0 
17 L 2 18 0 
18 R 17 0 0 
19 
20 
 
REPRESENTAÇÃO GRÁFICA DOS PONTEIROS (apenas alguns nós) 
 
 
 
 INFO PAI FESQ FDIR 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Para representar a árvore do exemplo, são necessários 16 nós e 49 ponteiros (um para apontar 
RAIZ, e três para cada um dos 16 nós). Dos 49 ponteiros, observe que 18 são nulos. 
A 
B 
G 
D 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 11 
 Implementação com alocação dinâmica 
Pode-se declarar uma árvore utilizando os seguintes comandos em Linguagem C: 
typedef struct st_no TNO; 
 
struct st_no 
{ 
 TINFO info; 
 TNO *pai, 
 *fesq, 
 *fdir; 
} 
 
TNO *raiz; 
 
Para armazenar cada nó da árvore, deve-se alocar dinamicamente um elemento do tipo NO, 
função esta que retorna seu endereço de memória. Este endereço será armazenado no campos pai, 
fesq, fdir, e também na própria variável raiz. Este tipo de implementação é mais complexa, 
embora permita a alocação de nós sob demanda. Como consequência, temos flexibilidade no 
tamanho da árvore (número de nós), que é limitado apenas pela capacidade de memória disponível. 
1.6 PERCURSOS EM ÁRVORES BINÁRIAS 
Além dos percursos pré-ordem e pós-ordem, definidos para qualquer árvores enraizada, para 
árvores binárias também definimos o percurso in-ordem (ou ordem simétrica) visto a seguir. 
 Percurso em pré-ordem 
O percurso em pré-ordem em árvores binárias pode ser definido de forma recursiva pelo 
algoritmo a seguir: 
PRE_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 Visite (T) 
 PRE_ORDEM(T.ESQ) 
 PRE_ORDEM(T.DIR) 
 
Na árvore binária da FIGURA 3, a chamada PRE_ORDEM(A), geraria a seguinte saída: 
A B E K L R G D H N S T O J P U. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 12 
 Percurso em pós-ordem 
O percurso em pós-ordem em árvores binárias pode ser definido de forma recursiva pelo 
algoritmo a seguir: 
POS_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 POS_ORDEM(T.ESQ) 
 POS_ORDEM(T.DIR) 
 Visite (T) 
 
Na árvore da FIGURA 2, a chamada POS_ORDEM(A), geraria a seguinte saída: 
K R L E G B S T N O H U P J D A. 
 Percurso in-ordem (ordem simétrica) 
O percurso in-ordem (ou ordem simétrica) em árvores binárias pode ser definido de forma 
recursiva pelo algoritmo a seguir: 
IN_ORDEM(nó T) 
 Se T = nulo então 
 Retorne 
 IN_ORDEM(T.ESQ) 
 Visite (T) 
 IN_ORDEM(T.DIR) 
 
Na árvore da FIGURA 2, a chamada IN_ORDEM(A), geraria a seguinte saída: 
K E R L B G A S N T H O D J U P. 
1.7 TIPOS ESPECIAIS DE ÁRVORES BINÁRIAS 
 Árvore estritamente binária: Todos os nós possuem 0 ou 2 filhos. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 13 
 Árvore cheia: Todos os nós internos possuem dois filhos, e todas as folhas encontram-se no 
último nível. Observe que toda árvore cheia é estritamente binária. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Árvore completa: também chamada quase-cheia. Simplificando, é uma árvore cheia até o 
penúltimo nível. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Árvore ziguezague: todos os nós internos possuem exatamente um filho cada um. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 14 
 LEMA: Seja T uma árvore binária com n > 0 nós. O número de subárvores vazias (esquerdas e 
direitas) em T é igual a n + 1. 
 LEMA: Seja T uma árvore binária completa com n > 0 nós. Então T possui altura h mínima. 
Além disso, h = 1 +  log n . Em outras palavras, não existe árvore binária com n > 0 e 
altura menor do que este valor. 
EXERCÍCIOS: 
1. Desenhe a ÚNICA árvore binária cujos percursos geraram as saídas abaixo: 
Pré-ordem: H T J A E X 
Pós-ordem: A J T X E H 
Ordem simétrica: J A T H X E 
2. Desenhe a ÚNICA árvore binária cujos percursos geraram as saídas abaixo: 
Pré-ordem: B F C G A D E 
Ordem simétrica: B C G F A E D 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS: 
1. 
 
T
H
E
J X
A
 
2. 
 
A
B
F
D
C
G
E
 
 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 15 
1.8 ÁRVORES BINÁRIAS DE BUSCA 
Uma árvore binária de busca possui a seguinte propriedade: para todo nó Q, os elementos 
que se encontram na subárvore esquerda de Q possuem informação menor que a informação de 
Q, e os elementos que se encontram na subárvore direita de Q possuem informação maior que a 
informação de Q. Veja o exemplo: 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio TerezaNair
 
 
 Pesquisa em árvores binárias de busca 
Suponha que desejamos saber se certa informação, contida na variável X, está ou não numa 
árvore binária de busca T. A pesquisa de X em T ocorre da seguinte forma: compara-se inicialmente 
X com a raiz de T. Se encontramos X na raiz, a pesquisa termina com sucesso. Caso contrário, há 
duas possibilidades: 
1. Se X é menor que a informação da raiz, então a pesquisa deve continuar na subárvore 
esquerda da raiz 
2. Se X é maior que a informação da raiz, então sabemos que a pesquisa deve continuar na 
subárvore direita da raiz 
A pesquisa continua sucessivamente, até encontrar X (pesquisa com sucesso) ou atingir uma 
“subárvore vazia” de uma folha (pesquisa com fracasso). 
 Algoritmo de Pesquisa (recursivo) 
O algoritmo a seguir retorna o índice do nó que contém a informação X (em caso de sucesso) 
ou retorna zero (em caso de insucesso), e é implementado em Pascal. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 16 
function BUSCA_BIN (X: string; RAIZ: integer): integer; 
var 
I, J: integer; 
begin 
if RAIZ = nulo then 
 BUSCA_BIN := 0 
 else 
if X = T[RAIZ].INFO then 
 BUSCA_BIN := RAIZ 
 else 
 if X < T[RAIZ].INFO then 
 begin 
 J := T[RAIZ].FESQ; 
 I := BUSCA_BIN (X, J); 
 BUSCA_BIN :=I 
 end 
 else 
 begin 
 J := T[RAIZ].FDIR; 
 I := BUSCA_BIN (X, J); 
 BUSCA_BIN := I 
 end 
end; 
 
 Inserção de um nó na árvore binária de busca 
A inserção de um nó com informação X em uma árvore binária de busca T é muito simples. 
Inicialmente, efetuamos BUSCA_BIN(X,RAIZ). Se a busca retornar um valor diferente de zero, 
então X já pertence à árvore– e neste caso não há nada a fazer. Se a busca retornar zero, então X 
pode ser inserido na árvore. A posição de inserção obedece à seguinte regra: 
 
O novo nó será inserido EXATAMENTE no ponto da árvore 
 em que BUSCA_BIN(X,RAIZ) terminou a pesquisa. 
 
Como exemplo, suponha que queremos inserir na árvore da página anterior o nó com 
informação X = ′Deise′. 
 Compara-se Deise com Maria, e vamos para a subárvore esquerda. 
 Depois, compara-se Deise com Eudes, e novamente vamos para a subárvore esquerda. 
 Agora, comparamos Deise com Carlos, e devemos ir para a subárvore direita de Carlos. 
Como ela não existe, BUSCA_BIN termina exatamente neste ponto. 
Logo, o novo nó com informação Deise deve ser criado como filho direito do nó contendo 
Carlos. Veja como fica a árvore após a inserção do nó com informação Deise (alguns nós apenas): 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 17 
Maria
Eudes
Carlos
Deise
 
 
 Remoção de um nó na árvore binária de busca 
Ao removermos um nó R de uma Árvore Binária de Busca, temos dois casos: 
CASO 1: o nó R é uma folha. Neste caso, não há mais nada a fazer. 
CASO 2: o nó R é um nó interno. Neste caso, devemos substituí-lo por outro nó da árvore 
que pode ser escolhido de dois modos: 
 ou escolhemos o maior nó da subárvore esquerda de R; 
 ou escolhemos o menor nó da subárvore direita de R. 
 Exemplos 
Na árvore de busca original: 
 Ao remover Nair, nada mais resta a fazer, pois é uma folha, como ilustrado a seguir. 
Maria
Eudes
Carlos Joana
Rubens
Patrícia Suzana
Ana Hélio Neuza ZéPedro
Glória Otávio Tereza
 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 18 
 Ao remover Rubens, podemos substituí-lo por Pedro (folha) ou Suzana. 
Se formos substituí-lo por Suzana, este último, ao ser removido, será substitudo por 
Tereza (folha), pois não há subárvore esquerda em Suzana (veja figura a seguir). 
Maria
Eudes
Carlos Joana
Suzana
Patrícia Tereza
Ana Hélio Neuza ZéPedro
Glória OtávioNair
 
 
 Ao remover Joana, devemos substituí-lo por Hélio, pois não há subárvore direita em 
Joana. Como Hélio também foi removido, deve-se substituí – lo recursivamente por 
Glória (folha), como ilustrado a seguir. 
Maria
Eudes
Carlos Hélio
Rubens
Patrícia Suzana
Ana Glória Neuza ZéPedro
Otávio TerezaNair
 
 
EXERCÍCIOS: 
1. Desenhe a árvore binária de busca gerada pela inclusão dos valores: 
 
50, 30, 85, 65, 60, 10, 45, 25, 40, 95, 90; inseridos nesta ORDEM. 
2. Escreva a saída gerada pelo percurso em ordem simétrica na árvore da questão 1. 
Observe que este percurso gera uma saída com todos os nós ordenados, o que vale para todas as 
árvores binárias de busca. 
3. Desenhe a árvore binária de busca formada pela inserção sucessiva dos nós com as informações 
a seguir (nesta ordem): Juliana, Caio, Pedro, Marcelo, Taís, Ana, José, Soraia, Zito, Bete, 
Deise, Ricardo. 
4. Verdadeiro ou Falso? O formato de uma árvore binária de busca depende da ordem em que os 
nós foram inseridos nela. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 19 
5. Desenhe uma árvore binária de busca com 5 nós que seja também uma árvore ziguezague. 
6. Desenhe uma árvore binária de busca completa com 12 nós. 
Cada nó deve conter um número inteiro entre 50 e 70. 
7. Redesenhe a árvore da Questão 6 após a inserção de um nó com informação ‘60,5’ 
(sessenta vírgula cinco). 
8. Redesenhe a árvore da Questão 7 após remover a raiz. 
Mostre duas soluções distintas, onde o nó raiz será substituído por um nó: 
 
i. de valor MAIOR que o valor do nó removido; 
ii. de valor MENOR que o valor no nó removido. 
9. Remova a raiz da árvore binária de busca abaixo, substituindo seu nó por um de MAIOR VALOR. 
Desenhe apenas a versão final, depois de todos os ajustes. 
G
K
T
D J R
A F M
N
Z
O
X
 
10. (ENADE 2011): Suponha que se queira pesquisar a chave 287 em uma árvore binária de busca 
com chaves entre 1 e 1 000. Durante uma pesquisa como essa, uma sequência de chaves é 
examinada. Cada sequência abaixo é uma suposta sequência de chaves examinadas em uma 
busca da chave 287. 
I. 7, 342, 199, 201, 310, 258, 287 
II. 110, 132, 133, 156, 289, 288, 287 
III. 252, 266, 271, 294, 295, 289, 287 
IV. 715, 112, 530, 249, 406, 234, 287 
É válido apenas o que se apresenta em 
a) I. 
b) III. 
c) I e II. 
d) II e IV. 
e) III e IV. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 20 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS: 
1. 
 
50
30
10 45
85
65 95
40 60 9025
 
4. Verdadeiro. 
 
Para constatar a validade desta afirmação, desenhe as árvores binárias de busca geradas pela 
inserção dos seguintes nós, na ordem em que são listados: 
 
Árvore 1 – 10, 20, 30, 40, 50, 60, 70 
Árvore 2 – 40, 20, 30, 60, 10, 70, 60 
Árvore 3 – 10, 70, 20, 60, 30, 50, 40 
Árvore 3 – 10, 70, 60, 20, 30, 50, 40 
5. Observe as árvores propostas na resposta da questão 4 como dica para resolver esta questão. 
6. 
 
60
55
50 58
64
62 70
56 61 6551
53
 
7. 
60
53
50 58
64
62 70
57 61 6551
55 60,5
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 21 
8. i. ii. 
60,5
53
50 58
64
62 70
57 61 6551
55
 
58
53
50 57
64
62 70
55 61 6551
60,5
 
9. 
G
M
T
D J R
A F N
Z
O
X
 
10. Letra c: somente as sequências I e II são válidas. 
 
 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 22 
1.9 LISTAS DE PRIORIDADES – HEAPS 
Um heap é uma estrutura de dados com as seguintes propriedades: 
 É uma árvore binária completa 
 O último nível está preenchido da esquerda para a direita 
 Cada nó possui uma prioridade, de modo que o pai tem sempre prioridade maior que 
seus filhos 
 
Veja os exemplos: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Não é heap, pois não é uma árvore binária completa. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Não é heap, pois o último nível não está preenchido da esquerda para a direita. 
 
 
 
 
 
 
82 
75 68
56 60 53
44 39 28 40 19
82 
75 68
56 60 53
44 39 28 4019
39
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 23 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Não é heap, pois existe um pai com prioridade 52 que tem um filho com prioridade 53. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
É heap, pois satisfaz todos os requisitos da definição. 
 
Observação: a raiz sempre é o nó de maior prioridade no heap. 
 
 Aplicações de heaps 
Gerenciamento de uso da CPU pelos processos, sistemas de atendimento a clientes com certas 
prioridades, gerenciamento de filas de impressão, controle de pouso e decolagem em aeroportos, 
etc. 
 Armazenamento em memória 
Um heap é armazenado num vetor H. Utilizamos a variável N para guardar o número de 
elementos no heap. Se N=0, então o heap está vazio. Veja a declaração: 
var 
 H: array [1..100] of integer; 
 N: integer; 
82 
75 52
56 60 53
44 39 28 4019
39
14
82 
75 68
56 60 53
44 10 28 4019
18
14
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 24 
Os elementos (prioridades) do heap preenchem o vetor H da esquerda para a direita. A ordem 
de preenchimento no vetor H segue a ordem top-down/left-right no heap (de cima para baixo, da 
esquerda para a direita). 
Por exemplo, o heap anterior fica assim armazenado em H (observe que N=13): 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
82 75 68 56 60 53 18 44 10 28 14 19 40 
 
 Como acessar os elementos de um heap 
A navegação pelos nós de um heap dispensa o uso de ponteiros, devido às seguintes 
propriedades: 
 Se um nó ocupa a posição k do vetor H, então seu filho esquerdo (se existir) ocupará a 
posição 2k, e seu filho direito (se existir) ocupará a posição 2k + 1 
 
Exemplo: o nó de prioridade 68 ocupa a posição 3, seu filho esquerdo (prioridade 53) 
ocupa a posição 6, e seu filho direito (prioridade 18) ocupaa posição 7. 
Visualize esta propriedade no desenho em árvore do heap. 
 
Observação: Suponha que um nó ocupa a posição k do vetor H. 
Se 2k > N, então o nó não possui filho esquerdo. 
Se 2k + 1 > N, então o nó não possui filho direito . 
Por exemplo, o nó com prioridade 53 não possui filho direito, pois (62)+1=13 > 12. 
Já o nó com prioridade 7 não possui nenhum filho (faça as contas com sua posição e o 
valor de N para verificar). 
 
 Se um nó ocupa a posição k do vetor H, então seu pai ocupa a posição k div 2 
 
Exemplo: o nó de prioridade 14 ocupa a posição 11 do vetor H, e seu pai (prioridade 60) 
ocupa a posição 11 div 2 = 5. Visualize esta propriedade no desenho em árvore do heap. 
 
Observação: a raiz do heap ocupa sempre a posição 1 do vetor H, e é o único nó do heap 
que não possui pai. Note que 1 div 2 = 0, e portanto é impossível calcular a posição do “pai 
da raiz”. 
 Operações básicas em heaps 
São as seguintes: AUMENTO DE PRIORIDADE de um nó, REDUÇÃO DE PRIORIDADE de um nó, 
REMOÇÃO DA RAIZ, INSERÇÃO de um nó, CONSTRUÇÃO de um heap. 
 Aumento de prioridade de um nó 
Quando um nó tem sua prioridade aumentada, é necessário fazê-lo “subir” no heap. Deve-se 
ir trocando o nó de posição com seu pai, até que ele encontre a posição correta (ou seja, até 
encontrar um pai com prioridade maior ou até atingir a raiz). 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 25 
Exemplo: Suponha que o nó de prioridade 28 tenha sua prioridade aumentada para 80. 
 
 ANTES 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 DEPOIS 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Observe que o nó com nova prioridade 80 trocou inicialmente de posição com seu pai de 
prioridade 60, e a seguir trocou novamente de posição com seu pai de prioridade 75. Como seu pai 
agora tem prioridade 82, ele para de subir. 
 Implementação do aumento de prioridade 
O procedimento SUBIR executa a “subida” do nó dentro do heap, depois que sua prioridade 
foi alterada. O parâmetro I armazena a posição inicial do nó antes de iniciar a subida. Observe que a 
execução completa da subida se resume a um caminho ascendente da posição inicial até, 
eventualmente, a raiz. 
80
82 
75 68
56 60 53
44 10 28 19
18
14
82 
80 68
56 75 53
44 10 60 19
18
14
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 26 
procedure SUBIR (I: integer); 
 
var 
 J, AUX: integer; 
 
begin 
 
 J:= I div 2; { J é o pai de I } 
 
 if J >= 1 then { se J existe } 
 if H[I] > H[J] then { se I tem prioridade > seu pai } 
 begin 
 AUX := H[J]; { fazer a troca } 
 H[J] := H[I]; 
 H[I] := AUX; 
 SUBIR(J); { continuar a subida a partir de J } 
 end; 
end; 
 
 Observe que o procedimento SUBIR é recursivo (chama a si mesmo). 
 O número de trocas efetuadas na subida é no máximo igual à altura do heap. 
 Eventualmente, nenhuma troca é realizada – caso em que o aumento de prioridade não foi 
suficiente para superar a prioridade do pai. 
 Redução de prioridade de um nó 
Quando um nó tem sua prioridade reduzida, é necessário fazê-lo “descer” no heap. Deve-se 
ir trocando o nó de posição com o filho de MAIOR prioridade, até que ele encontre a posição 
correta (isto é, até que os filhos tenham prioridade menor ou até se tornar uma folha). 
Exemplo: Suponha que o nó de prioridade 82 tenha sua prioridade reduzida para 20. 
 
 ANTES 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
82 
68 75
56 60 53
44 10 28 19
18
14
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 27 
 DEPOIS 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Observe que o nó com nova prioridade 20 trocou inicialmente de posição com seu filho de 
prioridade 75, e a seguir trocou novamente de posição com seu filho de prioridade 53. Como seu 
único filho agora tem prioridade 19, ele pára de descer. 
 Implementação da redução de prioridade 
O procedimento DESCER executa a “descida” do nó dentro do heap, depois que sua 
prioridade foi alterada. O parâmetro I armazena a posição inicial do nó antes de iniciar a descida. 
Observe que a execução completa da descida se resume a um caminho descendente da posição 
inicial até, eventualmente, uma folha. 
procedure DESCER (I: integer); 
 
var 
 J, AUX: integer; 
 
begin 
 J:= 2 * I; { J é o filho esquerdo de I } 
 
 if J <= N then { se J existe, (I tem filhos) } 
 begin 
 if J < N then 
 if H[J+1] > H[J] then { selecionar o maior filho } 
 J:=J+1; 
 if H[I] < H[J] then 
 begin 
 AUX:= H[J]; { fazer a troca } 
 H[J]:= H[I]; 
 H[I]:= AUX; 
 DESCER(J); { continuar a descida } 
 end; 
 end; 
end; 
 
 Observe que o procedimento DESCER é recursivo (chama a si mesmo). 
 O número de trocas efetuadas na descida é no máximo igual à altura do heap. 
75 
68 53
56 60 20
44 10 28 19
18
14
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 28 
 Desenfilar (Remoção da raiz) 
A remoção em heaps é sempre efetuada na raiz (esta é a filosofia do heap: extrair 
rapidamente, a qualquer momento, o elemento de maior prioridade). Após remover a raiz, 
substituímo-la pela “última folha” (o último nó do heap na ordem top-down/left-right, que 
corresponde ao último elemento do vetor H). 
Depois, basta executar DESCER neste novo nó que ocupa temporariamente a raiz. Veja o 
exemplo. 
 ANTES: N=12 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 DEPOIS: N=11 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 O número de elementos foi reduzido em uma unidade. 
19
82 
75 68
56 60 53
44 10 28 19
18
14
75 
60 68
56 28 53
44 10 19
18
14
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 29 
 Inserção de um nó no heap 
O nó a ser inserido é posicionado inicial e temporariamente como a última folha. A seguir, 
basta executar SUBIR neste novo nó. 
Exemplo: inserir um nó com prioridade 99 no heap abaixo. 
 ANTES: N=12 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 DEPOIS: N=13 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 O número de nós aumentou em uma unidade. 
 Construção de um heap 
O problema de construção de um heap apresenta-se da seguinte forma: dado um conjunto 
(desordenado) de N prioridades quaisquer, construir um heap com estas prioridades. 
O método que forneceremos é o mais eficiente para a construção de heaps. (existem outros 
métodos menos eficientes que não discutiremos). 
82 
75 68
56 60 53
44 10 28 19
18
14 99
99 
 
75 82
56 60 68
44 10 28 19
18
14 53
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 30 
Exemplo: 
PASSO 1: Inicialmente, as prioridades são fornecidas no vetor H, sem respeitar 
necessariamente a propriedade que um heap deve ter com relação a elas. 
 
N=12 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
14 10 28 19 60 53 18 44 75 68 82 56 
 
 
ESTRUTURA INICIAL (ainda não é um heap) : 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PASSO 2: Localizar o último nó interno (não folha) do heap na ordem top-down/left-right. 
No caso, é o nó com prioridade 53. Note que o próximo nó na ordem já é uma folha 
(nó com prioridade 18). 
 
Na verdade, é fácil encontrar este nó: a posição que ele ocupa no vetor H é a 
posição N div 2. No exemplo, 12 div 2 = 6. 
PASSO 3: Executar DESCER para todos os nós internos, a partir do nó localizado no PASSO 2. 
A ordem de execução é da direita para a esquerda, e de baixo para cima. 
 
No exemplo, executaremos sucessivamente: 
 
 DESCER(6) 
 DESCER(5) 
 DESCER(4) 
 DESCER(3) 
 DESCER(2) 
 DESCER(1) 
 
7544 68 82 56
19 60 53 18
10 28
14 
1
2 3
4 5 6 7
8 9 10 11 12
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 31 
A execução pode ser resumida assim: 
 
for I:= (N div 2) downto 1 do 
 DESCER(I); 
 
No exemplo, serão “descidos” sucessivamente (nesta ordem) os nós com 
prioridades 53, 60, 19, 28,10 e 14. 
 
A estrutura final ficará assim (verifique!): 
 
 
É UM HEAP! 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
EXERCÍCIOS: 
1. Remova a raiz dos seguintes heaps: 
 
a) 69, 58, 47, 45, 49, 38, 40, 22, 21, 30, 35, 20 
b) 99, 79, 85, 63, 58, 55, 61, 35, 40, 41, 22, 6, 14, 3, 11, 7, 9, 5 
2. Insira em ambos os heaps da questão 1 (depois de removida a raiz) um nó com prioridade 87. 
3. Insira em ambos os heaps da questão 1 (depois de removida a raiz) um nó com prioridade 110. 
4. Construa um heap a partir do seguinte conjunto de prioridades: 
 
45, 67, 12, 89, 3, 10, 6, 78, 30, 25, 99, 50. 
 
 
 
 
 
 
 
 
 
 
 
 
10
14 19 10 2860
44 68 53 18
82 
75 56
1
2 3
4 5 6 7
8 9 11 12
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 32 
1.10 ÁRVORES BALANCEADAS 
Um dos aspectos relacionados às árvores binárias de busca é o custo das pesquisas às suas 
chaves, que é medido pela quantidade de nós visitados até que a operação retorne com sucesso ou 
insucesso. Recapitulando, se uma árvore contém n nós, os valores extremos para a sua altura h são: 
 Altura máxima: h = n. Neste caso, a árvore ziguezague se comporta, em termos 
práticos, como uma lista. 
 Altura mínima: h = 1 +  log n . Uma árvore de altura mínima com n nós é uma árvore 
completa (dependendo do valor n, também é cheia). 
Com as pesquisas em árvores binárias de busca resultam, no pior caso, no percurso de um 
caminho descendente da raiz até uma folha, tal percurso pode então resultar na visita de um número 
de nós igual à altura da árvore. Como exemplo, consideremos árvores distintas com n =1023 nós. 
 Em árvores ziguezague (altura máxima), todos os 1023 nós serão visitados, no pior caso. 
 Na árvore cheia, de altura mínima, no pior caso teremos apenas 10 nós visitados. 
Sabemos que na criação de uma árvore binária de busca, a ordem de inserção dos nós é 
crucial para obtermos uma árvore completa. Se esta árvore não for alterada substancialmente ao 
longo do tempo, basta então que a criação da árvore seja criteriosa para que tenhamos uma árvore 
de altura mínima. No entanto, em aplicações dinâmicas, vários elementos podem ser inseridos e/ou 
removidos na estrutura, o que pode resultar em um “desbalanceamento” de uma árvore inicialmente 
completa. 
Uma solução pode ser implementar um algoritmo de rearranjo da árvore binária de busca a 
cada operação inserção ou remoção. Mas, dependendo do tipo de rearranjo, tal operação pode 
envolver o deslocamento de todos os n nós. Veja o exemplo ilustrado na FIGURA 4 abaixo. Uma 
árvore binária de busca é exibida no item (a). Após a inserção do valor 3 e da remoção do valor 97, 
temos a árvore resultante mostrada no item (b), que não é uma árvore completa. Para o rearranjo 
dos nós a fim de restabelecer a condição de árvore completa, todos os seus 15 nós serão deslocados 
de suas posições na estrutura original, resultando na árvore mostrada no item (c). 
26
50
85
15 42 72 93
7 17 61 79 9740 49 88
26
50
85
15 42 72 93
7 17 61 79
3
40 49 88
17
49
79
7 40 61 88
3 15 50 72 9326 42 85
(a) (b) (c)
 
FIGURA 4: MANIPULAÇÃO DE UMA ÁRVORE BINÁRIA DE BUSCA 
Neste caso, tal estratégia se mostra contraproducente: para mantermos pesquisas com número 
mínimo de visitas,  log
 
n  + 1, devemos rearranjar um número maior de nós a cada inserção ou 
remoção na estrutura. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 33 
Uma alternativa consiste em utilizar um tipo de árvores que não são completas, mas cuja 
altura tenha um valor que seja função “de ordem” logarítmica do número de nós n: notada por 
O(log
 
n). Mesmo não tendo altura mínima, ela ainda é limitada por um múltiplo do logaritmo de n. 
NOTA: a notação h = O(log
 
n) indica que h é uma função limitada por c
 
log
 
n (onde c é uma constante). 
Por exemplo: a função h = 2
 
log
 
n + 3 é dita O(log
 
n). 
O relaxamento do valor da altura de árvores de busca a um valor O(log n) permite, após cada 
inserção ou remoção, um rearranjo otimizado na sua estrutura. Tal operação envolverá, como 
veremos, o deslocamento de O(log
 
n) nós para manutenção do balanceamento. O conceito é 
simples, para manter altura O(log
 
n), devemos rearranjar O(log
 
n) nós após remoções e inserções. 
Tais estruturas são árvores binárias de busca especiais, denominadas árvores balanceadas. 
 Definição: Uma árvore binária com n nós e altura h é dita balanceada se h = O(log
 
n). 
Veremos nas próximas seções dois tipos específicos de árvores balanceadas, as árvores AVL, 
e as árvores Rubro-Negras (ou árvores Vermelho-Preto). 
1.10.1 – ÁRVORES AVL 
Um nó qualquer de uma árvore binária é dito regulado quando as alturas das suas subárvores 
direita e esquerda diferem, em módulo, no máximo uma unidade. Se a diferença for maior, o nó é 
dito desregulado. Uma árvore que possui algum nó desregulado também é dita desregulada. 
Uma árvore binária de busca T é uma árvore AVL se e somente se for regulada, ou seja, 
todos os seus nós estão regulados. Pode-se verificar que toda árvore completa é AVL, mas nem toda 
árvore AVL é completa. Veja a FIGURA 5 abaixo. A árvore mostrada no item (a) não é completa, 
mas todos os seus nós são regulados (uma árvore AVL). A árvore do item (b) não é AVL: o nó w 
em destaque é desregulado: suas subárvores esquerda e direita têm alturas 0 e 2, respectivamente. 
w
(a) (b)
 
FIGURA 5: ÁRVORES AVL E NÃO AVL 
 LEMA: Seja T uma árvore AVL, de altura h. Então h = O(log
 
n). 
A prova completa será omitida, mas baseia-se em calcularmos a quantidade máxima de nós 
que uma árvore AVL de altura h pode ter. O desenvolvimento resulta em uma recorrência similar à 
sequência de Fibonacci, que depois de resolvida, leva a uma expressão que limita o valor de h a 
uma função logarítmica. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 34 
Seja uma árvore binária T, e w um nó qualquer de T. Introduzimos as notações a seguir: 
 TE (w): subárvore esquerda do nó w. 
 hE (w) = h(TE(w)): altura da subárvore esquerda do nó w. 
 TD (w): subárvore direita do nó w. 
 hD (w) = h(TD(w)): altura da subárvore direita do nó w. 
 h(w): altura do nó w. 
 Por definição, h(w) = max { hE(w), hD(w) } + 1 
Importante notar que as alturas das subárvores direita e esquerda de um nó regulado diferem 
em no máximo uma unidade, o que vale para todos os nós de uma árvore AVL T. Formalmente, se 
T é uma árvore AVL, então: 
 v  T, temos |
 
hE(v) – hD(v)
 
|  1 
 Inclusão em árvores AVL 
Seja T uma árvore AVL, onde inserimos um nó w (inserção em árvore binária de busca), que 
será uma folha de T, e estará regulado. Após a inclusão de w, duas situações podem ocorrer: 
 T continua balanceada, com todos os nós regulados. Neste caso, não há nada a se fazer. 
 T contém um ou mais vértices desregulados. Tais nós devem ser regulados novamente, 
o que trataremos a seguir. 
Se T tornou-se desregulada, pode-se verificar que todos os nós desregulados após a inclusão 
de w se encontram no caminho ascendente de w até a raiz. Dentre os nós desregulados, seja v o nó 
de maior nível (mais próximo das folhas de T). Como a inclusão de apenas um nó somente pode 
alterar a altura de qualquer subárvore em apenas uma unidade, temos |
 
hE(v) – hD(v)
 
| = 2 (o mesmo 
vale para os demais nós desregulados). Quatro situações são possíveis: 
1. hE(v) > hD(v): 
Neste caso, o novo nó w pertence à subárvore esquerda do nó v. 
Pode-se verificar que w não é o filho esquerdo de v. 
Seja então e o filho esquerdo do nó v, como mostra a FIGURA 6 (a). 
Como hE(e)  hD(e), duas situações podem ocorrer: 
1.a hE(e) > hD(e): 
Situação ilustrada na FIGURA 6 (b), onde w  TE(e). 
Pode-se verificar que hE(e) = hD(e) +1 e hD(e) = hD(v). 
A aplicação da operação de rotação direita de v, ilustrada 
nas FIGURAS 6 (b) e (c), restabelece a regulagem do nó v. 
1.b hE(e) < hD(e): 
Neste caso, existe um nó d  TD(e),situação ilustrada na FIGURA 6 (d). 
Pode-se verificar que |
 
hE(d) – hD(d)
 
|  1 e que max { hE(d), hD(d) } = hE(d) = hE(d). 
A aplicação da operação de rotação dupla direita de v, ilustrada 
nas FIGURAS 6 (d) e (e), restabelece a regulagem do nó v. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 35 
ww
v
e
v
e
TE(e)
TD(e)
TD(v)
w
v
e
TE(e)
TE(v) TD(v)
(a)
(b)
rotação 
direita
(c) 
 
v
e
TE(e)
TD(d)
TD(v) rotação 
dupla 
direita
(d)
d
TE(d)
ve
TE(e) TD(d) TD(v)
d
TD(e)
(e)
 
FIGURA 6: ROTAÇÕES EM ÁRVORES BINÁRIAS DE BUSCA AVL 
2. hE(v) < hD(v): 
Analogamente ao caso 1., o novo nó w pertence à subárvore direita de v. 
Pode-se verificar que w não é o filho direito de v. 
Seja então d o filho direito do nó v, em situação análoga á da FIGURA 6 (a). 
Como hE(d)  hD(d), duas situações podem ocorrer: 
2.a Situação análoga ao caso 1.a. 
A aplicação da operação de rotação esquerda de v restabelece a regulagem do nó v. 
2.b Situação análoga ao caso 1.b. 
A aplicação da operação de rotação dupla esquerda de v restabelece a regulagem 
do nó v. 
Como exercício, verificar que os casos 2.a e 2.b são respectivamente análogos aos casos 1.a 
e1.b, e esboçar as operações de rotação esquerda e rotação dupla esquerda de v. Pode-se verificar 
que as operações relativas a cada caso não só restabelecem a regulagem do nó v, como também a de 
todos os seus ancestrais. Desta forma, uma única operação de rotação promove o balanceamento da 
árvore binária T, restabelecendo sua condição de árvore AVL. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 36 
 Exclusão em árvores AVL 
A operação de exclusão de um nó em árvores AVL também pode ser realizada em O(log
 
n) 
passos. A ideia é que, após a exclusão de um nó qualquer dá árvore, o caminho ascendente até a raiz 
seja verificado, observando-se possíveis nós que tenham sido desregulados. Como na inclusão, 
operações de rotação restabelecem a regulagem de um nó. A diferença é que, na exclusão, várias 
operações de rotação podem ser necessárias.. 
EXERCÍCIOS: 
1. Desenhe uma árvore AVL de altura 5 contendo o mínimo número de nós. 
Não se preocupe com os rótulos dos nós, apenas desenhe a estrutura. 
2. Refaça a questão 1 para uma árvore AVL com h = 6. 
3. Para a árvore binária de busca abaixo, faça o que se pede. 
e
g
j
c f k
db
 
a) Verifique que esta é uma árvore AVL, calculando as alturas de todas as suas subárvores, e 
verificando que todos os nós são regulados. 
b) Inclua um nó de rótulo a, e desenhe a árvore resultante. 
Verifique que a árvore resultante não é AVL. 
Identifique o nó desregulado v, que está mais próximo de uma folha. 
c) Na árvore do item b), promova a rotação adequada do nó v, e desenhe a árvore resultante. 
Verifique que a árvore resultante é AVL, calculando as alturas de todas as suas subárvores, e 
verificando que todos os nós são regulados. 
4. Para a árvore binária de busca abaixo, faça o que se pede. 
e
g
m
a f n
c p
j
i k
h
 
a) Verifique que esta é uma árvore AVL, calculando as alturas de todas as suas subárvores, e 
verificando que todos os nós são regulados. 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 37 
b) Inclua um nó de rótulo b, e desenhe a árvore resultante. 
Verifique que a árvore resultante não é AVL. 
Identifique o nó desregulado v, que está mais próximo de uma folha. 
c) Na árvore do item b), promova a rotação adequada do nó v, e desenhe a árvore resultante. 
Verifique se a árvore resultante é AVL. Caso contrário, repita o processo de identificar nós 
desregulados no caminho até a raiz, e promover as rotações necessárias. 
Desenhe as árvores resultantes após cada passo, e mostre que a versão final é uma árvore 
AVL, verificando que todos os nós são regulados. 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS: 
1. 
 
3. a) 
| balanço(b) | = | hE(b) – hD(b) | = | 0 – 0 | = 0  nó b é regulado. 
| balanço(c) | = | hE(c) – hD(c) | = | 1 – 1 | = 0  nó c é regulado. 
| balanço(d) | = | hE(d) – hD(d) | = | 0 – 0 | = 0  nó d é regulado. 
| balanço(e) | = | hE(e) – hD(e) | = | 2 – 1 | = 1  nó e é regulado. 
| balanço(f) | = | hE(f) – hD(f) | = | 0 – 0 | = 0  nó f é regulado. 
| balanço(g) | = | hE(g) – hD(g) | = | 3 – 2 | = 1  nó g é regulado. 
| balanço(j) | = | hE(j) – hD(j) | = | 0 – 1 | = 1  nó j é regulado. 
| balanço(k) | = | hE(k) – hD(k) | = | 0 – 0 | = 0  nó k é regulado. 
 
A árvore em questão é AVL. 
b) 
e
g
j
c f k
db
a
 
Dois nós desregulados (confira que os outros são 
regulados): 
 
| balanço(g) | = | 4 – 2 | = 2  g é desregulado. 
| balanço(e) | = | 3 – 1 | = 2  e é desregulado. 
 
Nó v, que é desregulado e mais próximo de uma folha: nó de rótulo e. 
c) Nó e: balanço(e) = 2 > 0. Ou seja, hE(e) > hD(e). 
 Nó c (filho esquerdo de e): balanço(c) = 1 > 0. Ou seja, hE(c) > hD(c). 
 
NOTAS DE AULA – ÁRVORES 
 PROFS: FÁBIO PROTTI E JÚLIO SILVEIRA 38 
Solução: rotação direita do nó e (caso 1.a). 
 
e
c
 
 
Árvore resultante (confira que é uma árvore AVL – todos os nós estão regulados novamente): 
 
c
g
j
b k
da
e
f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 1 
 
 
 
 
 
 
 
 
 
 
 
 
 
GRAFOS 
 
 
 
 
 
 
 
 
 
NOTAS DE AULA 
 
 
 
 
PROF.: JÚLIO TADEU CARVALHO DA SILVEIRA 
 
 
 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 2 
 
SUMÁRIO 
1. GRAFOS........................................................................................................................................................... 3 
1.1 DEFINIÇÕES E TERMINOLOGIA....................................................................................................................... 3 
1.2 GRAFOS BIPARTIDOS ................................................................................................................................. 12 
1.3 REPRESENTAÇÕES COMPUTACIONAIS DE GRAFOS ........................................................................................... 14 
1.4 GRAFOS DIRECIONADOS (DIGRAFOS), GRAFOS PONDERADOS .......................................................................... 17 
2. CONECTIVIDADE, PLANARIDADE, COLORAÇÃO ..................................................................................................... 21 
2.1 GRAFOS SIMPLES – CAMINHOS, CICLOS, GRAFOS EULERIANOS E HAMILTONIANOS .............................................. 21 
2.2 CAMINHOS E CICLOS EM GRAFOS PONDERADOS E/OU DIRECIONADOS............................................................... 27 
2.3 SUBGRAFOS, CONECTIVIDADE, EMPARELHAMENTOS ...................................................................................... 29 
2.4 PLANARIDADE .......................................................................................................................................... 35 
2.5 COLORAÇÃO DE VÉRTICES ........................................................................................................................... 38 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 3 
1. GRAFOS 
1.1 DEFINIÇÕES E TERMINOLOGIA 
As definições a seguir se aplicam a grafos simples não direcionados. 
 Grafo (ou grafo simples) 
Um grafo G é um par G = (V, E), onde: 
V ou V(G) é um conjunto não vazio. 
Seus elementos são denominados vértices (ou nós) de G. 
E ou E(G) é um conjunto de pares não–ordenados de elementos distintos de V. 
Seus elementos são denominados arestas (edges) de G. 
O nome grafo decorre de que esta estrutura admite uma representação geométrica. 
EXEMPLO 1: G = (V, E), com |V| = 10 e |E| = 8 
V = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 } 
E = { {v2,v3}, {v3,v4}, {v4,v5}, {v5,v3}, {v4,v6}, {v7,v4}, {v8,v9}, {v9,v10} } 
Representação geométrica 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
 
FIGURA1 – REPRESENTAÇÃO GEOMÉTRICA DO GRAFO DO EXEMPLO 1. 
Uma aresta é especificada pelos seus vértices extremos: e = {u,v} = {v,u}. 
Outras notações: e = uv = vu ou ainda e = v-w = w-v 
Alguns autores também usam a notação de par ordenado (v,w), utilizada em grafos 
direcionados, para especificar um par não-ordenado quando o contexto estiver implícito. 
No grafo do EXEMPLO 1, v2  V e {v5,v3}  E. 
Ou então (v5,v3)  E 
 v3-v5  E 
 v5v3  E. 
 CONVENÇÃO: 
 n = |V| e m = |E|. No grafo do EXEMPLO 1, temos n = 10 e m = 8. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 4 
 Vértices adjacentes e vértice isolado 
Vértices unidos por uma aresta são denominados adjacentes. No EXEMPLO 1, o vértice v3 é 
adjacente aos vértices v2, v4 e v5. Um vértice isolado não tem vértices adjacentes. No EXEMPLO 1, v1 
é um vértice isolado. 
 Aresta incidente: uma aresta é dita incidente aos seus dois vértices extremos. 
No EXEMPLO 1, a aresta (v2,v3) é incidente a v2 e a v3. 
 Arestas adjacentes: duas arestas que possuem vértice extremo em comum. 
No EXEMPLO 1, a aresta (v2,v3) é adjacente à aresta (v4,v3). 
 Pseudografos e Multigrafos 
É possível estender a definição de um grafo de forma a permitir arestas do seguinte tipo: 
 Laços (loops): arestas da forma (v,v), unindo um vértice a si mesmo; 
 Arestas paralelas: e1 = (v,w) e e2 = (v,w); ou seja, duas arestas distintas que unem o 
mesmo par de vértices. 
Um grafo que possua laços é denominado pseudografo; um grafo que contenha arestas 
paralelas é denominados multigrafos, como ilustrado na FIGURA 2. 
3
2
1
4
 
FIGURA 2 – PSEUDOGRAFO E MULTIGRAFO. 
Neste estudo NÃO ABORDAREMOS pseudografos e multigrafos: o termo grafo sempre será 
utilizado para designar um grafo simples (sem laços nem arestas paralelas). 
 GRAFO TRIVIAL: 
O grafo em que |V| = 1 é denominado grafo trivial. 
v4
 
FIGURA 3 – GRAFO TRIVIAL: n = 1, E =  
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 5 
 Grau de um vértice 
Denomina-se grau de um vértice v, notando-se grau(v) ou d(v), ao número de arestas que 
sejam incidentes a v. Ou, de forma equivalente, ao número de vértices adjacentes a v. A notação 
d(v) refere-se ao termo degree (inglês). 
Observe que d(v)  IN ; se d(v) = 0 então v é um vértice isolado. 
No grafo do EXEMPLO 1: 
d(v1) = 0 d(v6) = 1 
d(v2) = 1 d(v7) = 1 
d(v3) = 3 d(v8) = 1 
d(v4) = 4 d(v9) = 2 
d(v5) = 2 d(v10) = 1 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
 
 Isomorfismo 
Dois grafos G1(V1,E1) e G2(V2,E2) são isomorfos se existe uma bijeção f: V1  V2 que 
preserve as adjacências entre seus respectivos vértices. Ou seja: 
|V1| = |V2| 
|E1| = |E2| 
(v,w)  E1  ( f(v) , f(w) )  E2. 
Em outras palavras, rearranjamos a disposição dos vértices (que podem até mesmo ser 
renomeados) de forma que as arestas do “novo” grafo correspondam às mesmas arestas (e seus 
respectivos vértices extremos) do grafo original. 
Como consequência da definição acima, é imediato verificar que |V1| = |V2| e |E1| = |E2| 
são condições necessárias (mas não suficientes) para o isomorfismo. Veja o exemplo ilustrado na 
FIGURA 4 abaixo, e complete o quadro a seguir: 
v2
v7
v6
v3
v4v1
v5
e
b
d
a
c
g
f
G1 G2 
FIGURA 4 – GRAFOS ISOMORFOS. 
Complete: f(v1) = f(v2) = f(v3) = f(v4) = 
f(v5) = f(v6) = f(v7) = 
Resposta: f(v1) = g f(v2) = e f(v3) = a f(v4) = c 
f(v5) = f f(v6) = b ou d f(v7) = b ou d 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 6 
O isomorfismo entre grafos pode ser visualizado mesmo sem rotularmos os vértices (apenas 
identificando a mesma estrutura de conectividades), como na FIGURA 5 a seguir. 
G1 G2 G3 G4 
FIGURA 5 – ISOMORFISMO: G1 E G2 SÃO ISOMORFOS. G3 E G4 SÃO ISOMORFOS 
 TEOREMA 1.1: A soma dos graus dos vértices de um grafo G(V, E) é um valor par, igual ao dobro 
do nº de arestas de G: 
mv
v
2||2)( 

Ed
V
 
Cada aresta (v,w) contribui com duas unidades para o somatório acima: sendo uma unidade 
para o grau de cada um de seus extremos, d(v) e d(w). Desta forma, o somatório de todos os graus 
dos vértices de V será igual a 2m. 
 TEOREMA 1.2: Em um grafo qualquer, temos uma quantidade par de vértices de grau ímpar. 
Em um grafo G(V,E), podemos particionar o conjunto de n vértices V = VP  VI, onde: 
VP: subconjunto dos vértices de grau par, com nP = |VP| e 
VI: subconjunto dos vértices de grau ímpar, com nI = |VI|. 
Note que como VP e VI são disjuntos, temos n = nP + nI. Seja S o somatório dos graus de 
todos os vértices de V. Sabemos que S é par, e podemos desmembrá-lo em duas parcelas: 
S = SP + SI, sendo SP: soma dos nP valores pares (todos os graus pares), e 
 SI: soma dos nI valores ímpares (todos os graus ímpares). 
Temos então: 



IP VV
IP
V
dd(SSdS
ip v
i
v
p
v
vvv )())( 
Analisemos SP e SI separadamente: 
(1) SP = 
 PV
d
pv
pv )( Como SP é um somatório de valores pares, SP é um valor par. 
Sabemos que S e SP são pares, e de S = SP + SI decorre que SI também será um valor par. 
(2) SI = 
 IV
d
iv
iv )( Como SI é par, e consiste em um somatório de nI valores ímpares, 
decorre que nI é um valor (quantidade de vértices) par. 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 7 
Comprove os teoremas 1.1 e 1.2 no grafo do EXEMPLO 1: 
d(v1) = 0 d(v6) = 1 
d(v2) = 1 d(v7) = 1 
d(v3) = 3 d(v8) = 1 
d(v4) = 4 d(v9) = 2 
d(v5) = 2 d(v10) = 1 
S = 16 nP = 4 nI = 6 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5 
 Grafo regular: 
Um grafo é dito r-regular, ou regular de grau r (para algum r  IN ) se o grau de todos os seus 
vértices tem o mesmo valor r. Formalmente, 
G é r-regular  ( v  V) d(v) = r. Veja o exemplo ilustrado na FIGURA 6. 
 
FIGURA 6 – UM GRAFO 3-REGULAR 
Problema: Qual é o nº de arestas em um grafo r-regular com n vértices? 
 Grafo completo: Kn 
Um grafo G com n vértices é dito completo – e notado Kn – quando existe aresta unindo 
todo par de vértices de G. Formalmente, ( v,w  V, v  w) (v,w)  E. 
Veja os exemplos ilustrados na FIGURA 7 a seguir. Observe que são ilustradas DUAS VERSÕES 
ISOMORFAS para o K4. 
K1 K2 K3 K4 K4 K5 
FIGURA 7 – GRAFOS COMPLETOS 
Como exercício, tente desenhar outros grafos completos. 
Observe que nem todo grafo regular é completo, mas todo grafo completo é regular. Mais 
precisamente, o Kn é um grafo (n-1)-regular. Por exemplo: observe que o K5 é um grafo 4-regular. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 8 
 Número de arestas do Kn – número máximo de arestas em um grafo 
Qual o número máximo de arestas que um grafo G com n vértices pode ter? 
Colocando em outros termos, quantas arestas tem o Kn? 
A resposta vem da Análise Combinatória: 
A solução consiste em calcular a quantidade de combinações com 2 elementos (pares 
não-ordenados, que podem ser selecionadas dentre os n vértices possíveis. 
22
)1(
!2!)1(
!2
)(
2
2 nnnn
n
n
n
nn











 CKE 
Aplicando ao K5, temos 10
2
45
)K(E 5 

 
Além dos exemplos da FIGURA 7, verifique a fórmula para outros valores de n. 
EXERCÍCIOS 1.1 
1) Construir uma representação geométrica do grafo a seguir: 
V = { A, B, C, D, E, F } 
E = { {A,C}, {A,D}, {A,E}, {B,C}, {B,D}, {B,E}, {C,E}, {D,E} } 
2) Caracterize os conjuntos V e E de cada uma das representações a seguir: 
 a) 
3
2
1
64
5
G1 
V1 = { 
E1 = { 
 b) 
3
2
1
64
5
G2 
V2 = { 
E2 = { 
3) Desenhe os grafos G3 e G4, obtidos do G1 (questão 2) através dos isomorfismos indicados: 
 c) 
 
D
B
A F
C
E
G3 
f : V1  V3 f (1) = A f (2) = B f (3) = C 
 f (4) = D f (5) = E f (6) = F 
 d) 
 
4
2
1 6
3
5
G4
 
g : V1  V4 
g(i) = 7 – i 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 9 
 
4) Calcule d(v) para cada vértice dos grafos G1 e G2 anteriores. 
Verifique se G1 e G2 satisfazem os teoremas 1.1 e 1.2. 
5) Desenhe todos os grafos distintos (não isomorfos) contendo 2, 3 ou 4 vértices. 
6) Existe algum grafocom 6 vértices, cujos graus são 0, 1, 2, 3, 4, 5? 
7) Desenhe algum grafo com 6 vértices, cujos graus são 2, 3, 3, 3, 3, 3; ou prove porque tal grafo 
não existe. 
8) Desenhe um grafo com 10 vértices, em todos os vértices tenham grau 1; ou prove que não 
existe grafo com tais características. 
9) Existe algum grafo com 5 vértices, cujos graus são 0, 1, 2, 3, 4? Por que? 
10) Prove que em qualquer grafo não trivial existem pelo menos dois vértices de mesmo grau. 
11) Desenhe todos os grafos não isomorfos que tenham o mesmo número de vértices e também 
o mesmo número de arestas. Faça isso para n = 3, 4, 5. 
12) Quantos grafos não isomorfos com 5 vértices de graus 1, 1, 1, 1, 2, você consegue desenhar? 
13) Quantos grafos não isomorfos com 5 vértices de graus 1, 1, 1, 2, 3, você consegue desenhar? 
14) Quantos grafos não isomorfos com 6 vértices de graus 1, 1, 1, 1, 1, 3, você consegue 
desenhar? 
15) Desenhe dois grafos NÃO isomorfos com 6 vértices, que tenham graus 1, 1, 1, 2, 2, 3. 
D
B
A F
C
E
 
D
B
A F
C
E
 
16) Desenhe TRÊS grafos NÃO isomorfos que sejam 2 regulares com 8 vértices. 
a) 
 
b) 
 
c) 
 
 
17) Desenhe dois grafos diferentes (não isomorfos) com |V| = 6 e que sejam 3-regulares. 
18) Qual é o nº de arestas em um grafo r-regular com n vértices? 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 10 
19) Existe algum grafo com |V| = 6 e que seja 4-regular? Você consegue desenhar um? 
20) Existe algum grafo com |V| = 5 e que seja 3-regular? Você consegue desenhar um? 
21) Quantos grafos distintos (não isomorfos) 2-regulares com 10 vértices você consegue 
desenhar? E 2-regulares com 11 vértices? E 2-regulares com 12 vértices? 
22) Caracterize um grafo 2-regular. 
23) Você consegue desenhar algum grafo 3-regular com 6 vértices? E com 8 vértices? 
Caracterize o número de vértices em grafos 3-regulares; ou seja: que valores de n admitem 
tais grafos, e que valores não admitem? 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS 
3) 
c) 
D
B
A F
C
E
G3 
d) 
4
2
1 6
3
5
G4 
5) 
 
6) Existe algum grafo com 6 vértices, cujos graus são 0, 1, 2, 3, 4, 5? 
Não. Demonstre esta impossibilidade a partir dos teoremas 1.1 ou 1.2. 
7) Desenhe algum grafo com 6 vértices, cujos graus são 2, 3, 3, 3, 3, 3; ou prove porque tal grafo 
não existe. 
Não. Demonstre esta impossibilidade a partir dos teoremas 1.1 ou 1.2. 
8) 
 
9) Existe algum grafo com 5 vértices, cujos graus são 0, 1, 2, 3, 4? Por que? 
Não. Suponha que exista tal grafo, e sejam os vértices v0 e v5 tais que d(v0) = 0 e d(v5) =5. 
Assim, o vértice v5 DEVERIA ser adjacente a todos os demais vértices do grafo – inclusive 
ao vértice v0. Mas isto é um absurdo, pois v0 é um vértice isolado, e não poderia ser 
adjacente a nenhum outro vértice, inclusive ao v5. Logo, tal grafo não existe. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 11 
10) Prove que em qualquer grafo não trivial existem pelo menos dois vértices de mesmo grau. 
Dica. Em um grafo (simples) com n vértices, todos os graus dos vértices devem ser valores 
entre 0 e n-1 (inclusive). Formalmente: (vV) [ d(v)  { 0,1,2,,n-1} ]. 
Temos então n vértices e n valores distintos para os graus destes vértices. Porém, não 
podemos um vértice grau 0 e também um vértice com grau n-1 no mesmo grafo 
(resultado análogo ao exercício 9). 
Assim, apenas n-1 valores distintos serão graus de algum vértice. 
Temos então: n vértices do grafo, e apenas n-1 valores possíveis para seus graus. 
Consequentemente, pelo Princípio da Cada de Pombos, pelo menos dois vértices terão 
graus idênticos. 
12) 
 
Existe algum outro? 
13) 
 
Existe algum outro? 
14) Dica: existem apenas dois grafos possíveis. 
15) 
D
B
A F
C
E
 
D
B
A F
C
E
 
18) 
Sabemos que mv
v
2)( 
V
d . Se G é r-regular, nrv
v

V
d )( . Logo, nrm 2 ; e assim 
2
nr
m  . 
19) 
 
20) Dica: Aplique os teoremas 1.1 ou 1.2. 
21) Com n = 10 existem 5 grafos não–regulares não isomorfos. Você consegue desenhá-los? 
 Com n = 11 existem 6 grafos não–regulares não isomorfos. Você consegue desenhá-los? 
 E para n = 12, quantos existem? 
22) Descreva a estrutura do grafo. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 12 
1.2 GRAFOS BIPARTIDOS 
 Grafo bipartido (ou bipartite): 
Um grafo G(V,E) é dito bipartido (ou bipartite) quando V pode ser particionado em dois 
subconjuntos V1 e V2 (formalmente, V = V1  V2 sendo V1  V2 = ) de forma que não existam 
arestas unindo vértices de uma mesma partição (subconjunto). 
Formalmente, (u,w)  E  [ {u,w}  V1  {u,w}  V2 ]. A FIGURA 8 ilustra duas 
representações de um mesmo grafo. A representação à direita deixa claro que o grafo é bipartite, 
isolando graficamente as partições V = { A, C }  { B, E, D, F }. 
A
D
C
B E
F
A
DC
B
E
F 
FIGURA 8 – UM GRAFO BIPARTITE, MOSTRADO EM DUAS VERSÕES ISOMORFAS 
 TEOREMA 1.3: Um grafo G(V,E) ´e bipartido se e somente se não possui nenhum ciclo de 
comprimento ímpar. 
A prova do TEOREMA 1.3 será omitida, embora possa ser verificada em diversos livros na 
literatura sobre o assunto. 
 Grafo bipartido completo: 
Um grafo G é bipartido completo é um grafo bipartido que possui arestas unindo todos os 
pares de vértices pertencentes a partições distintas. Formalmente, ( u  V1) ( w  V2) (u,w)  E. 
Um grafo bipartido completo é notado por Kp,q , onde p = |V1| e q = |V2| = q, com n = p + q. 
 
FIGURA 9 – GRAFO BIPARTITE COMPLETO: K2,3 
EXERCÍCIOS 1.2 
1) Seja G um grafo formado por um único ciclo simples contendo todos os seus vértices. 
G é bipartido? 
2) O Kn é bipartido? Para quais valores? Para que valores ele não é bipartido? 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 13 
3) Todo grafo 2-regular (conexo ou não) é bipartido? 
4) O grafo G abaixo é bipartido? Prove sua resposta. Caso seja, desenha uma representação 
isomórfica para G que evidencie esta condição: separe as partições em duas colunas para 
melhor visualização. 
e
b
d
a
c
g
f
 
5) Quantas arestas tem o Kp,q , para p e q quaisquer? 
6) Um grafo estrela (com n vértices) tem um vértice com grau n-1 e n-1 vértices com grau 1 (veja 
exemplo abaixo, onde n = 7). Um grafo estrela é bipartido? É bipartido completo? 
 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS 
1) Dica: use o Teorema 1.3 para sua resposta. 
 Teste alguns exemplos de grafos contento um número par ou ímpar de vértices. 
2) Use o Teorema 1.3. 
3) Use o Teorema 1.3. 
4) Use o Teorema 1.3. Uma partição (coluna) terá 3 vértices, e a outra terá 4 vértices. 
5) 
Temos p vértices em V1: todos com grau q. Temos q vértices em V2: todos com grau p. 
Logo: pq
qppq
vv
vv
qp  
 22
)()()K(E
21 VV
, dd . 
6) Pelo Teorema 1.3, todo grafo estrela, por não conter ciclo de comprimento ímpar, 
é um grafo bipartido. Além disso, todo grafo estrela é um grafo bipartido completo, 
podendo ser notado como K1,n-1. O grafo do exemplo é um K1,6. 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 14 
1.3 REPRESENTAÇÕES COMPUTACIONAIS DE GRAFOS 
Muitas aplicações práticas utilizam modelagem que utilizem determinados grafos, sobre os 
quais serão implementados algoritmos para resolução de problemas específicos. 
As duas estruturas de dados mais utilizadas para representação computacional de grafos são 
as matrizes de adjacências e as listas de adjacências, descritas a seguir. Uma terceira forma, 
menos utilizada é a matriz de incidências, que não será coberta neste estudo. 
 Matriz de Adjacências: 
Uma típica matriz de adjacências de um grafo G = (V, E) é uma matriz An×n definida como: 
 1 ≤ i ≤ n: A[i][i] = 0 vi não é adjacente a si mesmo 
 1 ≤ i , j ≤ n, i ≠ j, A[i][j] = A[j][i] = 1 se vi e vj são adjacentes 
 0 caso contrário. 
A FIGURA 10 ilustra uma típica matriz de adjacências para o grafo do EXEMPLO 1. 
































0100000000
1010000000
01000000000000001000
0000001000
0000001100
0001110100
0000011010
0000000100
0000000000
10
9
8
7
6
5
4
3
2
1
10987654321
 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
 
FIGURA 10 – MATRIZ DE ADJACÊNCIAS PARA O GRAFO DO EXEMPLO 1 
Observe que a matriz de adjacências possui as seguintes características: 
 É uma matriz quadrada; 
 Todos os elementos da diagonal principal são nulos; 
 Ela é simétrica em relação à diagonal principal. 
 Listas de Adjacências 
Dependendo da razão entre a quantidade de arestas e o número de vértices do grafo, 
podemos ter um percentual muito pequeno de elementos não nulos na matriz de adjacências, 
configurando o que se denomina matriz esparsa. Normalmente este desperdício de memória não 
é um problema muito relevante. 
Porém, em determinadas aplicações, a quantidade de grafos (e vértices) pode ser de 
considerável magnitude, e a quantidade de memória pode se tornar um fator relevante. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 15 
Uma forma alternativa de armazenamento computacional de grafos é a representação em 
listas de adjacências, como ilustrado na FIGURA 11 a seguir. 
v7
v4
v3
v1
v2
v3
v4
v5
v6
v7
v8
v9
v10
v5
v9
v8 v10
v9
v4
v4
v4 v3
v3 v5 v6
v3 v2
 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5
FIGURA 11 – LISTAS DE ADJACÊNCIAS PARA O GRAFO DO EXEMPLO 1 
Nesta estrutura, temos uma lista encadeada associada a cada vértice v. Esta lista contém nós 
para todos os vértices adjacentes a ele. O uso de memória para representar “arestas inexistentes” 
é evitado, o que não acontece na matriz de adjacências. 
A economia de memória tem um preço. Na matriz de adjacências, descobrimos se uma 
aresta (v,w)  E de forma imediata: basta verificarmos A[v][w] ou A[w][v]. Já com listas de 
adjacências, devemos percorrer os nós relativos ao vértice v (ou w) para descobrirmos se tal 
aresta existe. 
Temos então um balanço espaço versus desempenho, que deve ser avaliado para a escolha 
da estrutura mais adequada a uma determinada aplicação. 
EXERCÍCIOS 1.3 
1) Desenhe as matrizes e listas de adjacências dos grafos a seguir: 
 a) 
3
2
1
64
5
b) 
CG
E
B
FD
A
 
2) Desenhe uma representação da matriz de adjacências do K4. Quais são as características da 
matriz de adjacências do Kn? Quantos elementos nulos existem? Quantos não nulos? 
3) Quais são as características da matriz de adjacências de um grafo r-regular com n vértices? 
Quantos elementos nulos e não nulos existem em tal matriz? 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 16 
4) Caracterize um grafo cuja matriz de adjacências tenha uma linha com todos os elementos 
nulos. O que você pode dizer da lista de adjacências deste grafo? 
 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS 
3) Caracterize as linhas e colunas da matriz. 
 Obtenha uma expressão em função de n e k. 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 17 
1.4 GRAFOS DIRECIONADOS (DIGRAFOS), GRAFOS PONDERADOS 
Alguns problemas poder exigir uma modelagem que utilize extensões da definição usual de 
um grafo simples. Em determinado problemas de otimização, pode ser necessário que a cada 
aresta seja associado um peso (valor). Outras aplicações exigem que as arestas sejam orientadas 
(modeladas como pares ordenados), indicando um sentido no percurso da aresta em questão. 
 Digrafo 
Um grafo direcionado (ou digrafo) G possui arestas orientadas. Uma aresta orientada é um 
par ordenado de vértices distintos de G. 
Desta forma, uma aresta orientada e será representada como e = (v,w), onde v,w  V, e 
v ≠ w. Neste caso, a aresta (v,w) possui uma única direção: do vértice v para o vértice w. Dizemos 
que a aresta (v,w) é divergente de v e convergente a w. 
 EXEMPLO 2 
Na representação geométrica de um digrafo, as arestas são representadas como setas 
indicativas de direção, conforme ilustrado na FIGURA 12. 
V = { a, b, c, d, e, f, g } 
E = { (a,b), (a,c), (d,a), (d,g), 
 (g,e), (f,g), (e,f), (f,e) } 
c
b
a
g
f
e
d
 
FIGURA 12 – GRAFO DIRECIONADO 
 Digrafos – graus de um vértices, fontes, sumidouros 
Para qualquer vértice v em um dígrafo, definimos: 
grau de entrada de v – in(v): número de arestas convergentes a v (in-degree) 
grau de saída de v – out(v): número de arestas divergentes a v (out-degree) 
No digrafo do EXEMPLO 2, temos: 
in(a) = 1 out(a) = 2 
in(b) = 1 out(b) = 0 
in(c) = 1 out(c) = 0 
in(d) = 0 out(d) = 2 
in(e) = 2 out(e) = 1 
in(f) = 1 out(f) = 2 
in(g) = 2 out(g) = 1 
c
b
a
g
f
e
d
 
FIGURA 13 – GRAUS DE ENTRADA E SAÍDA DO DIGRAFO DO EXEMPLO 2 
Se um vértice tem grau de entrada igual a ZERO, este vértice é chamado fonte. Já um vértice 
cujo grau de saída seja ZERO é chamado sumidouro. No EXEMPLO 2, temos que o vértice d é uma 
fonte, e os vértices b e c são sumidouros. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 18 
 Digrafos – Matriz de Adjacências 
























000000
00000
000000
00000
0000000
0000000
00000
1
11
1
11
11
g
f
e
d
c
b
a
gfedcba
 
c
b
a
g
f
e
d
 
FIGURA 14 – MATRIZ DE ADJACÊNCIAS PARA O DIGRAFO DO EXEMPLO 2 
 Grafos Ponderados 
Em determinadas aplicações, podemos atribuir valores às arestas de um grafo qualquer, seja 
ele direcionado ou não. Formalmente, a cada aresta (v,w) – ou vw em grafos não ponderados –
 será atribuído um peso, tipicamente um valor associado a um custo ou ganho quando tal aresta 
for selecionada ou “percorrida”. Temos então um grafo dito ponderado. 
 EXEMPLO 3: GRAFO PONDERADO 
v3v2
9
v1 v6
4
v7
3
v4
v5
10
6
12
5
8
7
 
FIGURA 15 – GRAFO PONDERADO 
 Matriz de Adjacências em grafos ponderados 
Em um grafo ponderado, o peso de uma aresta vw será atribuído ao seu respectivo 
elemento A[v][w] da sua matriz de adjacências. 
Em aplicações envolvendo grafos, os pesos das arestas geralmente estarão associados a 
funções de ganhos ou a custos, dependendo do tipo de problema considerado. A partir da 
modelagem em um grafo, é elaborar um algoritmo que minimize uma determinada função. Casos 
típicos envolvem a minimização de (funções de) custos ou maximização de (funções de) ganhos. 
Em problemas de otimização, um elemento da matriz cuja aresta não pertence ao grafo 
geralmente recebe um valor muito grande, quando o problema envolve custo, ou muito pequeno, 
quando são computados ganhos. Formalmente, usamos a notação ∞ ou –∞ nestes casos. A figura 
a seguir ilustra a matriz de adjacências do EXEMPLO 3, considerando os pesos como custos 
associados a cada aresta. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 19 
 































37
4
510
34512
101298
96
786
7
6
5
4
3
2
1
7654321
v
v
v
v
v
v
v
vvvvvvv
 
v3v2
9
v1 v6
4
v7
3
v4
v5
10
6
12
5
8
7
 
FIGURA 16 – MATRIZ DE ADJACÊNCIAS PARA O GRAFO DO EXEMPLO 3 
 EXEMPLO 4: DIGRAFOS PONDERADOS 
Os mesmos conceitos de grafos ponderados também se aplicam a grafos direcionados. 
c
b
a
g
f
e
d
5
11
487 7
8
6
 
FIGURA 17 – DIGRAFO PONDERADO 
A matriz de adjacências do grafo do EXEMPLO 4 é representada a seguir, onde os pesos são 
associados a uma função de custo. 































6
87
4
118
75
g
f
e
d
c
b
a
gfedcba
 
c
b
a
g
f
e
d
5
11
487 7
8
6
 
FIGURA 18 – MATRIZ DE ADJACÊNCIAS PARA O DIGRAFO DO EXEMPLO 4 
EXERCÍCIOS 1.4 
1) Preencha os elementos de matriz de adjacências do dígrafo abaixo: 
C
FE
B
D
A






















______
______
______
______
______
______
FEDCBA
F
E
D
C
B
A
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 20 
 
2) Indique os graus de entrada e de saída dos vértices do digrafo da questão 1): 
in(A) = out(A) = 
in(B) = out(B) = 
in(C) = out(C) = 
in(D) = out(D) =in(E) = out(E) = 
in(F) = out(F) = 
Existe alguma fonte ou sumidouro no digrafo acima? Indique quais. 
3) Considere a seguinte definição de um digrafo não-ponderado abaixo: 
EM PASCAL: 
const 
 MAX = 100; 
 
var 
 A: array[1..MAX,1..MAX] of integer; 
 
 n: integer; { Número de vértices } 
 
EM C: 
#define MAX 100 
 
int A[MAX][MAX]; 
 
int n; // Núm. de vértices 
 
A partir das definições acima, escreva o código de duas funções, grauentrada(v) e 
grausaida(v), que retornam, respectivamente, os graus de entrada e de saída de um vértice, 
passado como parâmetro – o valor v é o índice do vértice na matriz de adjacências. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 21 
2. CONECTIVIDADE, PLANARIDADE, COLORAÇÃO 
2.1 GRAFOS SIMPLES – CAMINHOS, CICLOS, GRAFOS EULERIANOS E HAMILTONIANOS 
 caminho, caminho simples, comprimento de um caminho1 
Um caminho em um grafo é uma sequência de vértices tal que quaisquer dois vértices 
consecutivos na sequência sejam adjacentes no grafo. Formalmente, um caminho em G(V,E) é 
uma sequência P = u1, u2,  uk de elementos de V tal que, (ui, ui+1)  E, para i = 1, 2, , k-1. 
O comprimento de um caminho em um grafo simples é o nº de arestas “tomadas” no 
percurso. Ou seja, u1, u2,  uk é um caminho (sequência) com k vértices e de comprimento k-1. 
Neste caso, o vértice u1 é chamado origem do caminho, e uk é o vértice destino. 
No grafo do EXEMPLO 1, podemos enumerar alguns caminhos e seus respectivos 
comprimentos: 
 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5 
Em todos os caminhos exemplificados acima, v2 é a origem e v6 o destino; e também 
dizemos que v2 alcança ou atinge v6. 
Um caminho simples em um grafo G é um caminho em que todos os vértices são distintos; 
ou seja, não temos vértices repetidos. Dos caminhos exemplificados acima, apenas os dois últimos 
são caminhos simples de v2 a v6. Observe que, embora nem todo caminho seja simples, todo 
caminho simples é um caminho. 
 caminho mínimo e distância 
Um caminho mínimo entre dois vértices vi e vj é um caminho de comprimento mínimo 
dentre todos os possíveis caminhos entre eles. Um caminho mínimo (também chamado caminho 
mais curto ou caminho de comprimento mínimo) pode não ser único, podendo existir outros 
caminhos de igual comprimento. Porém nenhum outro caminho tem comprimento menor que o 
do caminho mínimo. 
Observe que um caminho mínimo é necessariamente um caminho simples. No grafo do 
EXEMPLO 1, o caminho v2,v3,v4,v5,v3,v4,v6 certamente não é um caminho mínimo. 
 
1
 Alguns autores utilizam os termos passeio (para caminho) e caminho (para caminho simples). 
v2,v3,v4,v5,v3,v4,v6 comprimento 6 
v2,v3,v4,v3,v4,v6 comprimento 5 
v2,v3,v4,v6 comprimento 3 
v2,v3,v5,v4,v6 comprimento 4 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 22 
A distância entre dois vértices v e w, denotada por d(v,w), é definida como o comprimento 
de um caminho mínimo entre eles. No grafo do EXEMPLO 1, a d(v2,v6) = 3, pois v2,v3,v4,v6 é um 
caminho mínimo entre eles (verifique que não existe um caminho menor). 
 Ciclo, ciclo simples2 
Um ciclo é um caminho de comprimento mínimo TRÊS, em que os vértices origem e destino 
são coincidentes: o percurso “volta” ao vértice inicial. Se todo o caminho da origem ao penúltimo 
vértice for um caminho simples, temos então um ciclo simples: todos os vértices exceto o último 
são distintos. No EXEMPLO 1 temos: 
v2,v3,v2 NÃO é um ciclo, apenas um caminho de comprimento 2 
v2,v3,v4,v5,v3,v2 é um ciclo de comprimento 5 
v3,v4,v5,v3 é um ciclo simples (caminho simples de v3 a v5) de comprimento 3 
Dois ciclos são considerados idênticos se um deles puder ser obtido do outro através da 
rotação de seus vértices ou pela inversão no sentido do percurso. Assim, observe que TEMOS APENAS 
UM CICLO no grafo do EXEMPLO 1: C = <v3,v4,v5,v3>. Os ciclos <v4,v5,v3,v4>, <v5,v3,v4,v5>, 
<v3,v5,v4,v3>, <v5,v4,v3,v5>, e <v4,v3,v5,v4> são todos idênticos ao ciclo C. 
v3
v4
v5 
FIGURA 19 – ÚNICO CICLO SIMPLES DO GRAFO DO EXEMPLO 1: <v3,v4,v5,v3> 
Finalmente, um grafo acíclico é um grafo que não possui nenhum ciclo. 
 Grafo conexo 
Um grafo G = (V, E) é conexo se, para todo par de vértices v,w  V, existe um caminho entre 
v e w. Ou seja, temos todos os nós de um grafo conexo conectados por algum caminho possível. 
Se existirem dois vértices quaisquer sem caminho entre eles, o grafo é dito desconexo. Por 
exemplo, o grafo do EXEMPLO 1 é dito desconexo: não existe caminho entre os vértices v2 e v10. 
Observe que a representação gráfica de um grafo desconexo é uma figura necessariamente 
descontínua. 
 Grafos hamiltonianos, grafos eulerianos 
Um caminho hamiltoniano é um caminho que contenha cada vértice do grafo exatamente 
uma vez. Em outras palavras, um caminho hamiltoniano é um caminho simples que contém todos 
 
2
 Alguns autores utilizam os termos passeio fechado (para ciclo) e ciclo (para ciclo simples). 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 23 
os vértices do grafo. Um ciclo em que todos os vértices da origem até o penúltimo vértice formam 
um caminho hamiltoniano é chamado ciclo hamiltoniano. Um grafo que possui algum ciclo 
hamiltoniano é chamado grafo hamiltoniano. 
Um caminho que contenha cada aresta do grafo exatamente uma vez é chamado caminho 
euleriano. Um ciclo que contenha cada aresta do grafo exatamente uma vez é chamado ciclo 
euleriano. Um grafo que possui um ciclo euleriano é chamado grafo euleriano. 
Como exemplo, para o grafo representado a seguir (FIGURA 20), temos: 
Caminho hamiltoniano: E,D,C,A,B Ciclo hamiltoniano: A,C,E,D,B,A 
Caminho euleriano: C,E,D,C,A,B,D Ciclo euleriano: existe algum? 
C
E
B
D
A
 
FIGURA 20 – CAMINHOS (E CICLOS) HAMILTONIANOS E EULERIANOS. 
Um grafo G admite algum caminho ou ciclo euleriano? Caso afirmativo, como identificá-los? 
Um grafo G admite algum caminho ou ciclo hamiltoniano? Caso afirmativo, como identificá-los? A 
primeira questão é mais simples, e pode ser respondida pelos teoremas a seguir. Identificar ciclos 
ou caminhos hamiltonianos é um problema mais complexo. 
 TEOREMA 1.4: Um grafo conexo é euleriano se e somente se todos os seus vértices possuem 
grau par (nenhum vértice tem grau ímpar). 
A prova do teorema pode ser feita duas partes: 
i. G é euleriano  todo vértice de G tem grau par 
ii. Todo vértice de G tem grau par  G é euleriano 
Veremos a seguir uma demonstração da parte ii, que se baseia em um algoritmo para a 
obtenção de um ciclo euleriano para G conexo com todos os vértices de grau par. A prova 
completa do teorema 1.4 será omitida. 
Seja um grafo G, conexo e com todos os vértices de grau par. Certamente G possui um ciclo 
C1 (por que?). Se tal ciclo possui todas as arestas do grafo, temos então um ciclo euleriano. Caso 
contrário, remova de G todas as arestas em C1, e também os vértices que se tornarem isolados 
após esta operação. O grafo resultante admite outro ciclo C2 (novamente: por que?). Repete-se o 
processo: remove-se as arestas do ciclo encontrado (e vértices isolados), e procura-se novo ciclo, 
removendo suas arestas e vértices isolados, até que não reste nenhuma aresta no grafo 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 24 
resultante. Ao final, teremos k ciclos C1, C2, …, Ck. Pelo menos dois destes ciclos possuem um 
vértice em comum, e podemos uni-los em um único ciclo. No conjunto de ciclos resultante, 
repete-se o processo de união de ciclos com vértice em comum, até que tenhamos um único ciclo 
resultante de todas as uniões, que certamente é um ciclo euleriano. Veja o exemplo a seguir. 
CG
E
B
FD
A
 
FIGURA 21 – UM GRAFO COM UM CICLO EULERIANO - C,E,D,F,E,G,C,A,B,D,C 
PASSO 1 PASSO 2 PASSO 3 
C1 = G,C,E,G C12 = C1  C2 = E,G,C,E,D,F,E (C12)  C3 = C,E,D,F,E,G,C,A,B,D,C 
C2 = D,F,E,D C3 = A,B,D,C,A 
C3 = A,B,D,C,A 
 TEOREMA1.5: Um grafo conexo possui caminho euleriano se e somente se 
 i. nenhum de seus vértices possui grau ímpar, ou 
 ii. exatamente dois de seus vértices possuem grau ímpar. 
O primeiro caso satisfaz o TEOREMA 1.4, e temos um ciclo euleriano. 
No segundo caso, o caminho euleriano não é um ciclo, e deve começar em um 
dos vértices de grau ímpar e terminar no outro. 
Embora a prova do TEOREMA 1.5 seja omitida, verifique que o grafo da FIGURA 20 satisfaz este 
teorema e não satisfaz o TEOREMA 1.4. 
 Comentários sobre o TEOREMA 1.5: 
Pelo Teorema 1.2, sabemos que qualquer grafo contém uma QUANTIDADE PAR de vértices com 
grau ímpar. Se esta quantidade for: 
 ZERO: o grafo admite um ciclo euleriano; 
 DOIS: o grafo admite um caminho euleriano, mas não um ciclo euleriano; 
 QUALQUER OUTRO VALOR PAR: o grafo não admite caminho euleriano. 
EXERCÍCIOS 2.1 
1) Desenhe CINCO grafos não isomorfos com 10 vértices e 2-regulares (conexos ou desconexos). 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 25 
 
2) Prove que o Kn é conexo. 
3) Existe algum grafo com 6 vértices e que seja conexo e 2-regular? 
Existe algum grafo com 6 vértices e que seja desconexo e 2-regular? 
4) Existe algum grafo com 6 vértices e que seja conexo e 3-regular? 
Existe algum grafo com 6 vértices e que seja desconexo e 3-regular? 
5) Qual é o número mínimo de arestas em um grafo conexo com n vértices? 
6) Qual é o número máximo de arestas em um grafo desconexo com n vértices? 
7) Para o grafo a seguir, faça o que se pede: 
C
FE
B
D
A
G
 
a) Indique os graus de todos os vértices: 
d(A) = d(C) = d(E) = d(G) = 
d(B) = d(D) = d(F) = 
b) Indique um caminho hamiltoniano. 
c) Indique um ciclo hamiltoniano. 
d) Qual a distância entre os vértices B e E? d(B,E) = 
e) Indique três caminhos simples de A a F, de comprimentos distintos: 
caminho: comprimento = 
caminho: comprimento = 
caminho: comprimento = 
f) Indique quatro ciclos simples. 
g) Indique um caminho euleriano, ou prove que tal caminho não existe 
h) Indique um ciclo euleriano, ou prove que tal ciclo não existe. 
8) Prove que existe um ciclo hamiltoniano em um grafo conexo e 2-regular. 
9) O Kn possui um caminho euleriano? Para quais valores de n? 
10) O Kn possui um ciclo hamiltoniano? Para quais valores de n? 
11) Use os teoremas apropriados para provar se os grafos a seguir possuem ou não caminhos e 
ciclos eulerianos. Nos casos possíveis, indique os caminhos e ciclos de Euler. 
Tente também encontrar caminhos e ciclos hamiltonianos em cada um destes grafos. 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 26 
 
12) Para o grafo G abaixo, faça o que se pede: 
D
BA
C
GF
E
 
 Grafo G 
a) Indique: 
 d(A) = d(B) = d(C) = d(D) = 
 d(E) = d(F) = d(G) = 
b) Indique um CAMINHO EULERIANO em G (que não seja 
ciclo), ou prove porque G não admite tal caminho.
c) Indique um CICLO EULERIANO em G, ou prove porque G não admite tal ciclo. 
d) Indique um CICLO HAMILTONIANO em G, ou prove porque G não admite tal ciclo. 
e) Indique todos os CICLOS SIMPLES de G. 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS 
1) 
 
5) Resposta: n-1. 
6) Resposta: o número de arestas do Kn-1. Por que? 
7) 
C
FE
B
D
A
G
 
b) A, B, D, G, C, E, F 
c) O grafo não possui um ciclo hamiltoniano. 
d) d(B,E) = 2 
e) A, C, E, F comprimento 3 
A, C, E, D, F comprimento 4 
A, C, G, D, E, F comprimento 5 
A, B, D, G, C, E, F comprimento 6 
f) E, F, D, E 
C, E, D, G, C 
C, E, F, D, G, C 
A, C, G, D, B, A 
g) C, A, B, D, G, C, E, F, D, E. 
h) Veja comentários sobre o TEOREMA 1.5. 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 27 
 
2.2 CAMINHOS E CICLOS EM GRAFOS PONDERADOS E/OU DIRECIONADOS 
Os conceitos relativos a caminhos e ciclos podem ser estendidos a grafos ponderados e 
também a digrafos (ponderados e não ponderados). 
 Caminho e ciclos em digrafos não ponderados 
Os conceitos relativos a caminhos e ciclos são análogos aos grafos não direcionados, apenas 
devendo-se respeitar as direções das arestas. A única exceção é que, em um dígrafo, podemos ter 
um ciclo de comprimento 2. 
No digrafo do EXEMPLO 2 temos: 
Caminho simples: 
d,g,e,f comprimento 3 
 
Ciclos simples: 
f,g,e,f comprimento 3 
e,f,e comprimento 2 
c
b
a
g
f
e
d
 
 Caminho e ciclos em grafos e digrafos ponderados 
Em grafos e digrafos ponderados, os comprimentos dos caminhos e ciclos são calculados 
somando-se os pesos das arestas envolvidas, independendo da quantidade de arestas percorridas 
no caminho. 
No grafo ponderado do EXEMPLO 3, temos: 
Caminhos simples: 
v1,v3,v5 comprimento 18 
v1,v7,v4,v5 comprimento 15 
v3v2
9
v1 v6
4
v7
3
v4
v5
10
6
12
5
8
7
 
 
No digrafo do EXEMPLO 4, temos: 
Caminho simples: 
d,g,e,f comprimento 21 
 
Ciclos simples: 
f,g,e,f comprimento 18 
e,f,e comprimento 11 c
b
a
g
f
e
d
5
11
487 7
8
6
 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 28 
 
EXERCÍCIOS 2.2 
1) Para o digrafo ponderado representado abaixo, faça o que se pede: 
a. Preencha TODOS os elementos da sua matriz de adjacências, considerando que o peso de 
cada aresta está associado a CUSTO. 
C
F
8
E
6
9
B
3
D
A
12
7
5
8
5
 





















______
______
______
______
______
______
FEDCBA
F
E
D
C
B
A
 
b. Enumere os seguintes caminhos de A a D, indicando também seus comprimentos. 
Caminho simples de comprimento mínimo: Comprimento = 
Caminho simples de comprimento máximo: Comprimento = 
 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 29 
 
2.3 SUBGRAFOS, CONECTIVIDADE, EMPARELHAMENTOS 
Os assuntos desta seção serão aplicados a grafos não ponderados, embora também se 
apliquem a grafos ponderados. 
 Subgrafos 
Seja um grafo G = (V, E). Dizemos que G' = (V', E') é um subgrafo de G se V'  V e E'  E. 
Neste caso, dizemos que G é um supergrafo de G'. Observe que o subgrafo G' pode não ter todos 
os vértices e/ou arestas de G, mas não pode ter vértices e/ou arestas que não estejam em G. Um 
possível subgrafo do EXEMPLO 1 é ilustrado a seguir. 
v3
v9
v8
v1
v10v6
v4
v5 
(a)
v3
v2
v9
v8
v1
v10v6
v7
v4
v5 
(b) 
FIGURA 22 – UM SUBGRAFO (a) DO GRAFO DO EXEMPLO 1 (b) 
Se um G' é um subgrafo de G tal que V' = V, dizemos que G' é um subgrafo gerador de G. 
Em outras palavras, um subgrafo gerador tem todos os vértices do supergrafo. Um possível 
subgrafo gerador do EXEMPLO 1 é ilustrado a seguir. 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5 
(a)
v3
v2
v9
v8
v1
v10v6
v7
v4
v5 
(b) 
FIGURA 23 – UM SUBGRAFO GERADOR (a) DO GRAFO DO EXEMPLO 1 (b) 
Se G' é um subgrafo de G tal que todas as arestas de G que unam vértices de G' também 
aparecem em G', dizemos tal que G' é um subgrafo induzido de G. Mais precisamente, G' é um 
subgrafo de G, induzido por V', quando (  v,w  V' ) ( {v,w}  E  {v,w}  E' ). A figura a seguir 
ilustra o subgrafo do EXEMPLO 1 induzido por V' = { v3,v4,v5,v6,v7,v8,v9 }. 
v3
v9
v8
v6
v7
v4
v5 
(a)
v3
v2
v9
v8
v1
v10v6
v7
v4
v5 
(b) 
FIGURA 24 – UM SUBGRAFO (a) DO GRAFO DO EXEMPLO 1 (b), INDUZIDO POR { v3,v4,v5,v6,v7,v8,v9 } 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 30 
 
 Componentes conexos 
Seja G' um subgrafo conexo de G. Dizemos que G' é maximal (quanto à conectividade) 
se G não admite nenhum outro subgrafo G" que contenha G' e também seja conexo. Observe a 
FIGURA 25, representando subgrafo do EXEMPLO 1, ilustrados a seguir. 
v3
v2
v9
v8
v1
v10v6
v7
v4
v5 
v3
v6
v4
v5
v3
v2 v6
v4
v5
v3
v6
v4
v5
G1
G3
G2
G4
v3
v2 v6
v7
v4
v5
 
FIGURA 25 – SUBGRAFOS CONEXOS DE G: G4 É CONEXO E MAXIMAL. 
Na FIGURA 13, vemos quatro subgrafos de G. O subgrafo G1 é conexo, mas não maximal, pois 
podemos adicionar vértices e/ou arestas de G em G1, obtendo outros subgrafos conexos de G. A 
adição de {v3,v5} a G1 resulta no grafo G2, que é conexo. A adição de v2 e {v2,v3} a G1 resulta em G3, 
que é conexo.G2 e G3 são supergrafos conexos de G1, obtidos por adição de vértices e/ou arestas 
de G. Portanto, G1 não é subgrafo maximal quanto à conectividade. Na verdade, G2 e G3 também 
são não maximais: ambos são subgrafos do G4, que é um subgrafo conexo e maximal de G. 
Chamamos componentes conexos de G aos seus subgrafos conexos maximais. Temos então 
outra definição para grafos conexos: grafo é dito conexo quando tem apenas um componente 
conexo. O grafo G da FIGURA 26 é desconexo, pois tem três componentes conexos, ilustrados a 
seguir. 
v3
v2
v9
v8
v1 v10
v6
v7
v4
v5
G4
G5 G6
 
FIGURA 26 – COMPONENTES CONEXOS DE G (FIGURA 13): G4, G5 E G6 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 31 
 
 Exclusão de vértices e arestas 
Em um grafo G(V,E) podemos realizar as operações de remoção de vértices e de arestas. A 
operação de remoção de uma aresta envolve apenas a sua remoção do conjunto E. A remoção de 
um vértice v envolve a sua exclusão de V, e a consequente exclusão, do conjunto E, de todas as 
arestas incidentes a ele. 
Podemos generalizar tais operações para remoção de um subconjunto de vértices ou de 
arestas de um grafo. Formalmente, para subconjuntos V'  V e E'  E: 
G – E' = G' ( V, E – E' ) 
G – V' = G' ( V – V', E – { {v,w} | v V' ou w V' } ) 
 Cortes de vértices, cortes de arestas 
Seja um grafo conexo G(V,E). Um corte de vértices Vc  V é um subconjunto minimal de 
vértices tal que G – Vc é desconexo ou trivial. Como Vc é minimal, para todo subconjunto próprio 
Vc'  Vc, G - Vc' é conexo e não trivial. Analogamente, um corte de arestas VE  E é um 
subconjunto minimal de arestas tal que G - Ec é desconexo. Como Ec é minimal, para qualquer 
subconjunto próprio Ec'  Ec, G - Ec' é conexo. Como exemplo, considere o grafo representado na 
FIGURA 27 a seguir. 
G
H
E
FA
D
B
C
 
FIGURA 27 – CORTES DE VÉRTICES E ARESTAS 
O conjunto de vértices { C,D,F } desconecta o grafo, mas não é minimal (não sendo corte de 
vértices), pois seu subconjunto { C,D } também o desconecta (este último é um corte de vértices). 
Outro corte de vértices é o conjunto { E }, este de cardinalidade mínima 1. 
O conjunto de arestas { AB, CE, DE } desconecta o grafo, mas não é minimal (não sendo corte 
de arestas), pois seu subconjunto { CE, DE } também o desconecta. Os conjuntos { AC, BC, EC } e 
{ CE, DE } são corte de arestas, este último de cardinalidade mínima: não existe outro corte de 
arestas de menor cardinalidade. 
Denomina-se conectividade de vértices cV como o valor da menor cardinalidade de um corte 
de vértices de G; ou seja, o menor número de vértices que o torne desconexo ou trivial. De 
maneira análoga, a conectividade de arestas cE é o valor da menor cardinalidade de um corte de 
arestas de G (o menor número de arestas que o desconecte). Se um grafo G é desconexo, temos 
cV = cV = 0. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 32 
 
Portanto, o grafo da FIGURA 27 acima tem conectividades de vértices e arestas dadas por 
cV = 1 e cE = 2. Como exercício, desenhe os grafos resultantes da remoção de cada um dos cortes 
de vértices e arestas considerados. 
Um grafo é dito k-conexo em vértices quando cV  k; ou seja, não existe corte de vértices 
com menos do que k vértices. De forma análoga, um grafo k-conexo em arestas tem cV  k, não 
existindo corte com menos de k arestas. O grafo da FIGURA 15 é 1-conexo em vértices, 1-conexo 
em arestas e 2-conexo em arestas (também chamado biconexo em arestas). 
Uma importante desigualdade sobre conectividade: para todo grafo, cV  cE (por que?). De 
forma mais completa, sendo w um vértice de grau mínimo de G, temos cV  cE  d(w) (novamente, 
por que?). 
Um vértice v é uma articulação quando G – v é desconexo. Uma aresta e é denominada 
ponte quando G – e é desconexo. O grafo da FIGURA 15 tem o vértice E como articulação, e não tem 
nenhuma ponte (sendo portanto, biconexo em arestas). 
 Emparelhamentos em grafos bipartidos 
Seja G = (V, E) um grafo bipartido. Um emparelhamento em G é um subconjunto de arestas 
de G, E'  E tal que duas arestas distintas de E' não sejam incidentes a nenhum vértice em comum. 
Ou em outras palavras, um emparelhamento “cobre” alguns vértices sem nenhum vértice 
repetido. 
Um emparelhamento é maximal se nenhum outro emparelhamento o contém. Já um 
emparelhamento máximo é um emparelhamento (maximal) com o número máximo de arestas. 
A
F
B
D
E
G
C
(a) 
A
F
B
D
E
G
C
(b) 
A
F
B
D
E
G
C
(c) 
A
F
B
D
E
G
C
(d) 
FIGURA 28 – EMPARELHAMENTOS: (b), (c), (d): os dois últimos são maximais. 
Na FIGURA 28 acima, vemos um grafo (a) e alguns emparelhamentos. O emparelhamento 
{ { C,F } } – item (b) – não é maximal, pois está contido no emparelhamento { { C,F }, { B,E } }, que é 
um emparelhamento maximal, ilustrado no item (c). Já o emparelhamento ilustrado no item (d), 
{ { C,F }, { B,D }, { A,E } }, é um emparelhamento máximo, composto por três arestas. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 33 
 
EXERCÍCIOS 2.3 
1) Prove que o Kn é conexo. 
2) Quais são os valores cV e cE para o grafo Kn? 
3) Você consegue desenhar um grafo conexo 3-regular que tenha uma ponte? 
4) Prove ou dê um contraexemplo. Se a aresta {v,w} é uma ponte então esta aresta é o único 
caminho ente v e w. 
5) Quantas articulações e quantas pontes você consegue encontra no grafo a seguir? 
CG
E
B
FD
A
 
6) Prove ou dê um contraexemplo. Todo grafo conexo que tem uma ponte também tem uma 
articulação. 
7) Prove ou dê um contraexemplo. Se um grafo G é biconexo em arestas (sem pontes) então 
todo par de vértices faz parte de algum ciclo de G. 
8) Quais são os valores cV e cE para cada um dos grafos abaixo? 
 
9) Seja G um grafo formado por um único ciclo simples contendo todos os seus vértices. Para 
que valores de n, G é um grafo bipartido? Nestes casos, qual é o tamanho de um 
emparelhamento máximo de G? 
10) Qual é o tamanho de um emparelhamento máximo do Kp,q ? Demonstre sua solução. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 34 
 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS 
2) cV = cE = n – 1 
 
3) 
 
 
5) Duas articulações: vértices C e D. Duas pontes: arestas: CG e DF 
6) Contra–exemplo: 
 
 
9) Para todo valor n par. A cardinalidade do emparelhamento máximo, neste caso, é n/2. 
10) O tamanho do emparelhamento máximo do Kp,q é o valor máximo dentre p e q. 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 35 
 
2.4 PLANARIDADE 
Uma representação de um grafo qualquer é dita uma representação plana quando não 
existem arestas que se cruzem (apenas se encontram com outras arestas adjacentes nos vértices 
em comum). Dizemos que G é um grafo planar se G admite uma representação plana. Por 
exemplo, o K4 é um grafo planar (veja figuras (b) e (c) abaixo). 
(a) (c)(b)
1
2
3
4
1
2
3
4
1
2
3 5
4
 
FIGURA 29 – DUAS REPRESENTAÇÕES PLANAS PARA O K4: (b) e (c) 
Observe que qualquer representação geométrica de um grafo divide o plano em regiões, ou 
faces, sendo que existe exatamente UMA região ilimitada, denominada face externa. Veja que na 
FIGURA 29 (a), a face externa é representada pela região 5, enquanto nas FIGURAS 29 (b) e (c) a face 
externa é representada pela região 4. 
Quaisquer representações planas de um mesmo grafo possuem sempre o mesmo número 
de faces. Este número, denotado por f, é um valor constante e único para cada grafo. 
 TEOREMA 1.6: (Fórmula de Euler) 
Seja G um grafo planar e conexo. Então n + f = m + 2. 
A prova deste teorema será omitida, e pode ser feita por indução sobre o número de 
arestas. 
 TEOREMA 1.7: Seja G um grafo planar e conexo, com n 3. Então são válidas as seguintes 
desigualdades: 
(a) m  3n – 6; e 
(b) Se G não contém ciclo de comprimento 3, então m  2n – 4. 
A prova deste teorema será omitida, e tem consequências importantes para determinarmos 
se um grafo é planar, como veremosa seguir. 
 LEMA 1.2: Os grafos K5 e K3,3 (FIGURA 30 abaixo) são não–planares. 
K5 K3,3 
FIGURA 30 – GRAFOS NÃO-PLANARES 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 36 
 
Para o K5 temos n = 5 e m = 10, e consequentemente m  3n – 6; desta forma, K5 não é 
planar, pois não satisfaz ao TEOREMA 1.7 (a). Para o K3,3 temos: n = 6 e m = 9. Embora satisfaça ao 
Teorema 1.7 (a), note que o K3,3, que não tem ciclo de comprimento ímpar, não satisfaz ao 
Teorema 1.7 (b), sendo não planar. Os grafos K5 e K3,3 têm um papel especial para a determinação 
de planaridade em grafos, como veremos a seguir. 
 Subdivisão de um grafo, Homeomorfismo 
Seja um grafo G, e {v,w} uma aresta de G. A subdivisão da aresta {v,w} é a inserção de k 
vértices v1,v2,,vk à aresta {v,w} de forma que esta seja transformada em um caminho simples 
v,v1,v2,,vk,w, de forma que todos os k vértices vi tenham grau 2, sendo adjacentes apenas entre 
si (ou então a v ou a w). Dizemos que um grafo G′ é a subdivisão de um grafo G se G′ poder ser 
obtido de G através de subdivisões de arestas de G. A FIGURA 30, abaixo, ilustra a definição. 
D
E
A
C
B
D
E
A
C
B
G G′ 
FIGURA 31 – G′ É SUBDIVISÃO DE G 
Dois grafos G′ e G′′ são ditos homeomorfos se um deles é a subdivisão do outro, ou se 
ambos são resultados da subdivisão de um terceiro grafo G. Na FIGURA 31, G e G′ são 
homeomorfos, enquanto na Figura 32 (abaixo), G e G′ são homeomorfos, bem como G e G′′. 
Ainda, G′ e G′′ são também homeomorfos, pois ambos são subdivisões de G. 
G G′ G′′ 
FIGURA 32 – G, G’ E G′’: GRAFOS HOMEOMORFOS 
 TEOREMA 1.8: (Teorema de Kuratowski) 
Um grafo é planar se e somente se não contém um subgrafo homeomorfo a K5 
ou homeomorfo a K3,3. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 37 
 
EXERCÍCIOS 2.4 
1) Desenhe uma representação plana para o grafo abaixo, ou prove que este grafo é não-planar. 
BA
C D
E
 
2) Desenhe uma representação plana para o grafo abaixo, ou prove que este grafo é não-planar. 
 
3) Desenhe uma representação plana para o K2,3. 
4) Desenhe uma representação plana para o K2,4. 
5) Mostrar que o Grafo de Petersen, ilustrado abaixo, é não-planar. 
Grafo de Petersen 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS 
1) 
BA
C D
E
 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 38 
 
2.5 COLORAÇÃO DE VÉRTICES 
Seja G = (V, E) um grafo qualquer, e C = { c1, c2, c3,  cp } um conjunto de p cores distintas. 
Uma coloração de G é conjunto de atribuições destas cores aos vértices de G, de forma que 
vértices adjacentes tenham cores distintas. Formalmente, uma coloração é uma função 
cor: V  C tal que {v,w}  E  cor(v)  cor(w). 
Uma k-coloração de G é uma coloração que utiliza k cores; ou seja, o conjunto imagem da 
função cor tem cardinalidade k. Neste caso, dizemos que G é k-colorível. Observe que todo grafo é 
n-colorível. Basta pegarmos uma cor distinta para cada vértice de G. Mas o objetivo é utilizarmos o 
menor número possível de cores. 
O número cromático de G, notado por (G), é o valor mínimo de k para o qual o grafo G é 
k-colorível. Qualquer coloração com (G) cores é chamada coloração mínima. A figura abaixo 
mostra um grafo G que admite uma 3-coloração. Pode-se verificar facilmente que esta coloração é 
mínima. Desta forma, (G) = 3. 
D
F
B H
EA
G
C
c2
c1
c2 c3
c3c3
c1
c1
 
FIGURA 33 – UMA 3-COLORAÇÃO (MÍNIMA) PARA G 
 LEMA 1.1: Um grafo é bicolorível se e somente se for bipartido. 
A prova do LEMA 1.1 é bastante simples. Seja G um grafo bipartido, sendo V = V1  V2 tal que 
vértices de uma mesma partição não são adjacentes. Podemos então escolher duas cores, uma 
para colorir os vértices de V1, e outra para colorir os vértices de V2. Reciprocamente, se um grafo é 
bicolorível, então podemos particionar V em subconjuntos de vértices de mesma cor. Como 
vértices de mesma cor não são adjacentes, temos que G é um grafo bipartido. 
 Problema das quatro cores 
O Teorema das Quatro Cores diz que é possível colorir as regiões de qualquer mapa 
desenhado no plano (que pode ser modelado como um grafo planar) usando no máximo quatro 
cores, de forma que regiões adjacentes sejam de cores distintas. A FIGURA 20 abaixo ilustra um 
mapa com 5 regiões, e seu respectivo grafo, que é 4-colorível, como mostrado. O problema das 
quatro cores relaciona os estudos de COLORAÇÃO e PLANARIDADE em grafos. 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 39 
 
A
D
C
B
F
E
F
C
B
A
D
E
c1
c2
c3
c2
c3c4 
FIGURA 34 – UMA 4-COLORAÇÃO DE UM MAPA 
EXERCÍCIOS 2.5 
1) Determine (G) para o grafo G abaixo. Prove que o valor (G) está correto: 
(a) Mostre uma (G)-coloração para o grafo; e 
(b) Prove que esta coloração é mínima. 
D
EA
B
GF
C
 
2) Construa o menor grafo sem triângulos cujo número cromático seja 3. 
Um grafo sem triângulos não tem o K3 como subgrafo. 
3) Qual é o valor de (Kn)? 
4) Seja G um grafo composto apenas por um ciclo simples contendo todos os seus vértices. Qual 
é o número cromático de G? 
5) Determine (G) para todos os grafos abaixo. Mostre a (G)-coloração de cada um deles. 
 
NOTAS DE AULA – PROF. JÚLIO SILVEIRA 
 GRAFOS 40 
 
6) Determine o número cromático do grafo abaixo. Apresente uma coloração para este valor. 
 
RESPOSTAS E COMENTÁRIOS DE ALGUNS EXERCÍCIOS 
1) (G) = 3 
a) 
c1
c2c1
c2
c1c2
c3
 
b) 
G contém um ciclo de comprimento ímpar (A,B,C,D,E,A). 
Portanto, pelo TEOREMA 1.3, G não é bipartido. 
 
Logo, pelo LEMA 1.1, G não é 2-colorível, e a 3-coloração 
apresentada é uma coloração mínima para G.

Mais conteúdos dessa disciplina