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 abab = abab
– Observe: |·| = || = || + ||
• ATENÇÃO!
• abab não é uma sequência, e sim uma operação
|abab| = ? Resp.: |abab| = |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 = XXXX (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 AB)
– 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 (ab)*
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 ( ab ) =
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 ( aab ) =
L (a(ab)) =
L ((ab)(ab)) =
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 = aan–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
(vV) 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 abab, 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 (62)+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: (vV) [ 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.