Escolar Documentos
Profissional Documentos
Cultura Documentos
ELEMENTOS DE
MATEMÁTICA DISCRETA
Manual Teórico – Prático
Sergey LABÓVSKIY
Introdução
A investigação de diferentes problemas em ciência acha a sua reflexão em cons-
trução de diferentes modelos matemáticos. Em física e engenharia usam-se
diferentes modelos principalmente na base dos resultados de Análise Matemá-
tica. Mas problemas de informática precisam de modelos matemáticos de outra
natureza. A distinção principal consiste no seguinte: o objectivo de Análise
Matemática é investigação de processos contínuos, mas informática estuda pro-
cessos discretos. Um processo discreto é resultado de realização de um algoritmo.
Investigação de algoritmos é o assunto principal da Matemática Discreta.
Tanto Matemática Discreta como Análise Matemática têm na sua base Te-
oria de conjuntos, Lógica matemática e teoria de algoritmos, Álgebra abstracta.
Por causa de natureza de conjuntos discretos o capítulo Análise combinatória
faz uma parte importante de Matemática Discreta.
Neste manual são apresentados elementos dos tópicos principais de Matemá-
tica Discreta:
• teoria de conjuntos
• análise combinatória
• indução e recursividade
• teoria de grafos e algoritmos sobre grafos
3
4 CONTEÚDO
4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3 Indução 36
1 Indução matemática . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.1 Introdução. Exemplo . . . . . . . . . . . . . . . . . . . . . 36
1.2 Princípio da indução matemática . . . . . . . . . . . . . . 38
1.3 O princípio fraco de indução matemática . . . . . . . . . 39
1.4 Princípio de escolha de mínimo elemento . . . . . . . . . . 40
2 Definições recursivas . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.1 Descrição do problema . . . . . . . . . . . . . . . . . . . . 41
2.2 Definição recursiva . . . . . . . . . . . . . . . . . . . . . . 41
2.3 Extensão de domínio . . . . . . . . . . . . . . . . . . . . . 42
2.4 Cálculo iterativo. Algoritmos . . . . . . . . . . . . . . . . 42
2.5 Cálculo recursivo . . . . . . . . . . . . . . . . . . . . . . . 43
2.6 Relações recorrentes lineares . . . . . . . . . . . . . . . . 44
3 Definição recursiva e indução matemática . . . . . . . . . . . . . 45
3.1 Demonstração de proposições . . . . . . . . . . . . . . . . 45
3.2 Indução com base de vários elementos . . . . . . . . . . . 46
4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1 Indução matemática . . . . . . . . . . . . . . . . . . . . . 47
4.2 Definições recursivas . . . . . . . . . . . . . . . . . . . . . 49
4 Algoritmos cíclicos 54
1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.1 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.2 Ciclo infinito. Estado . . . . . . . . . . . . . . . . . . . . 55
1.3 Ciclo com pre-condição . . . . . . . . . . . . . . . . . . . 56
1.4 Invariante de ciclo . . . . . . . . . . . . . . . . . . . . . . 56
1.5 Invariante de ciclo com pre-condição . . . . . . . . . . . . 58
1.6 Demonstração que o ciclo termina . . . . . . . . . . . . . 59
2 Exemplos de algoritmos . . . . . . . . . . . . . . . . . . . . . . . 59
2.1 Algoritmo de divisão inteira . . . . . . . . . . . . . . . . . 59
2.2 Algoritmo de Euclid . . . . . . . . . . . . . . . . . . . . . 60
2.3 Equação em números inteiros . . . . . . . . . . . . . . . . 61
3 Formação de um algoritmo cíclico . . . . . . . . . . . . . . . . . . 63
3.1 Colocação problema . . . . . . . . . . . . . . . . . . . . . 63
4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.1 Algoritmos cíclicos . . . . . . . . . . . . . . . . . . . . . . 64
4.2 Formação de algoritmo . . . . . . . . . . . . . . . . . . . . 66
6 Ordenação de um vector 90
1 Procura binária em vector ordenado . . . . . . . . . . . . . . . . 90
2 Ordenação de um vector. Complexidade espacial . . . . . . . . . 91
2.1 Ordenação por união (merge sort) . . . . . . . . . . . . . 91
2.2 Quicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.3 Avaliação de complexidade de ordenação . . . . . . . . . . 94
3 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7 Recursividade geral 95
1 Conceito geral da definição recursiva . . . . . . . . . . . . . . . . 95
1.1 Exemplos preliminares . . . . . . . . . . . . . . . . . . . . 95
1.2 Definição recursiva de um conjunto . . . . . . . . . . . . . 97
1.3 Forma inversa. Definições determinadas unicamente . . . 98
1.4 Princípio generalizado da indução matemática . . . . . . 100
1.5 Funções sobre conjuntos dados recursivamente . . . . . . 102
1.6 Árvores binárias e árvores com raízes . . . . . . . . . . . . 104
2 Algoritmos recursivos . . . . . . . . . . . . . . . . . . . . . . . . 108
2.1 Calculo de funções dadas recursivamente . . . . . . . . . . 109
2.2 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.3 Percurso dos elementos de um conjunto . . . . . . . . . . 114
3 Questões principais . . . . . . . . . . . . . . . . . . . . . . . . . . 116
4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Este capitulo serve como uma introdução. Os objectivos desta introdução são
conceitos principais da disciplina. Tanto em álgebra, geometria e análise como
em matemática discreta o conceito de conjunto forma uma base para todos os
passos em criação da teoria. Mas existe uma distinção principal entre conjuntos
que considera Análise Matemática e conjuntos que são objectos de Matemática
Discreta. Quase sempre serão considerados conjuntos finitos. Os conjuntos
infinitos tais como o conjunto de todos os números naturais N = {1, 2, . . .}
também têm estrutura discreta. Deixemos sem atenção a questão sobre definição
rigorosa de um conjunto discreto.
Neste capítulo serão considerados os tópicos principais da teoria de conjuntos
e funções, relações e grafos, conceito informal de algoritmo e sua complexidade.
1 Conjuntos
1.1 Métodos de representação de conjuntos
Lista
O primeiro método para determinar um conjunto é formar uma lista de todos
os elementos
A = {2, 4, 6, 8, 10}, B = {a, b, c}, C = {(1, 2), (5, −1), (30, 0), (0, 0), (−13, 8)}.
O conjunto B contem os 3 objectos, o conjunto C consiste dos 5 objectos
que são pares ordenados de números inteiros.
Lista (algoritmo)
′
Pode-se usar o símbolo . . .′ (etc.) para conjuntos de grande volume ou para
conjuntos infinitos
N100 = {1, 2, 3, . . . , 100}, D3 = {3, 6, 9, . . .}
Mas este método pressupõe um algoritmo de formação de elementos do conjunto.
Por exemplo, para verificar se o número 36 pertence ao conjunto D3 ou não, é
preciso cumprir várias adições 3 + 3 = 6, 6 + 3 = 9, 9 + 3 = 12, . . . ate obter ou
não o elemento necessário. Este exemplo sugere mais um método para definir
um conjunto.
7
8 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS
Propriedade característica
Um conjunto pode ser dado por meio de uma propriedade característica. Con-
sideremos vários exemplos:
1. D = {n : n ∈ N e n é par} = {2, 4, 6, 8, . . .}
2. E = {x : x ∈ R, 1 ≤ x < 3} = [1, 3)
3. F = {n2 : n ∈ N } = {m : m ∈ N, (∃n : m = n2 )}
4. G = {(−1)n : n ∈ N } = {−1, 1}
Em chavetas o primeiro objecto é uma variável ou uma expressão todos os valores
da qual formam o conjunto. A variável (expressão) é seguida pelo símbolo ′ :′ .
A segunda parte contém uma ou várias condições necessárias e suficientes para
verificar se um elemento pertence ao conjunto. Por exemplo, para verificar se o
número 25 pertence ao conjunto F , é preciso encontrar um número natural n
tal que n2 = 25 . A segunda forma da definição do conjunto F é mais completa
e mais clara para usar.
∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}.
M ⊂N se e somente se x ∈ M ⇒ x ∈ N.
((x ∈ A) ∨ (x ∈ B)) ∧ (x ∈
/ A).
Portanto x ∈ B .
(a) A ∪ B = B ∪ A ,
(b) A ∩ B = B ∩ A
2. Leis associativas
(a) (A ∪ B) ∪ C = A ∪ (B ∪ C) ,
(b) (A ∩ B) ∩ C = A ∩ (B ∩ C)
3. Leis distributivas
(a) A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C) ,
(b) A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C)
4. A ∪ A = A, A∩A=A
5. (a) A ∪ ∅ = A
1o símbolo ⇒ é sinal de implicação, isto é A ⇒ B temos que ler: de A decorre B
10 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS
(b) A ∪ U = U
(c) A ∩ ∅ = ∅
(d) A ∩ U = A
6. (Ac )c = A
7. A ∪ Ac = U, A ∩ Ac = ∅
8. U c = ∅, ∅c = U
9. Leis de Morgan
(a) (A ∪ B)c = Ac ∩ B c ,
(b) (A ∩ B)c = Ac ∪ B c
S × T = {(s, t) : s ∈ S ∧ t ∈ T }.
Se S = T escreve-se também S × S = S 2 .
Exemplo 1.2. Sejam S = {1, 2, 3, 4}, T = {a, b, c} . Produto S × T consiste
de 12 pares ordenados:
S1 × . . . × Sn = {(s1 , s2 , . . . , sn ) : sk ∈ Sk , k = 1, 2, . . . , n}.
S1 = S2 = . . . = Sn = S
usa-se designação
S × S × . . . × S = S n.
1. CONJUNTOS 11
1.7 Funções
O que é uma função?
Função ou aplicação f de um conjunto A para um outro (ou o mesmo) conjunto
B é uma regra (uma lei, um algoritmo) que permite a partir de qualquer valor
x ∈ A encontrar um único valor y ∈ B . O conjunto A chama-se domínio da
função f , e B é contradomínio da f . Usa-se notação
f: A → B
e diz-se que f age do A para B . Escreve-se também y = f (x) onde f (x)
designa o valor da função f quando argumento da função toma o valor x ∈ A .
A expressão f (x) chama-se também imagem do x .
Exemplo 1.3. Sejam A = {a, b, c} e B = {1, 2, 3, 4} . Para definir uma função
f : A → B é preciso definir os três valores de função: f (a), f (b), f (c) . Por
exemplo, uma das funções possíveis pode ser dada pela tabela
x a b c
f (x) 2 4 2
Então f (a) = 2 , f (b) = 4 , f (c) = 2 .
Imagem e preimagem
Introduz-se também a imagem de um conjunto. Seja X ⊂ A . Por definição
f (X) = {f (x) : x ∈ X} ≡ {y : y = f (x), x ∈ X}.
A expressão f (X) chama-se a imagem do conjunto X . No exemplo 1.3 f (A) = {2, 4} .
Se f (x) = y o elemento x chama-se preimagem do y . O conjunto de
todos os preimagens do y forma preimagem completo do y . Para preimagem
completo vamos usar notação f −1 (y) . Então
f −1 (y) = {x ∈ A : f (x) = y}.
No exemplo 1.3 f −1 (2) = {a, c}, f −1 (4) = {b}, f −1 (1) = f −1 (3) = ∅ . A
preimagem de um conjunto Y ⊂ B defina-se como união de todos os preimagem
dos elementos y ∈ Y , ou
f −1 (Y ) = {x ∈ A : f (x) ∈ Y }.
No exemplo 1.3 f −1 ({1, 2}) = {a, c} .
Exemplo 1.4. Consideremos uma função f : A → A onde A = {0, 1, 2, 3, 4} ,
definida pela relação2
f (x) = (2x) mod 5.
Encontrar f (A) e f −1 (A) .
Solução. Consideremos a tabela dos valores da função
x 0 1 2 3 4
f (x) 0 2 4 1 3
2 Relações
2.1 Conceito de relação
Exemplo. Sejam S um conjunto de todos os estudantes duma universidade
e T conjunto das disciplinas. Consideremos produto directo S × T que con-
siste de pares (s, t) onde s é um estudante, t é uma disciplina. Formemos o
subconjunto R ⊂ S × T dos pares (s, t) :
Composição de relações
Sejam R1 ⊂ S × S e R2 ⊂ S × S relações sobre S . O conjunto
def
R1 ◦ R2 = {(x, z) : ∃y : (x, y) ∈ R1 , (y, z) ∈ R2 }
R ◦ R = {(x, y) : x ≤ y − 2}.
2. RELAÇÕES 13
4 5
1 3
2
e γ(e)
a (v1 , v2 )
b (v1 , v2 )
c (v1 , v3 )
d (v1 , v4 )
f (v3 , v1 )
g (v3 , v4 )
h (v4 , v2 )
l (v1 , v1 )
m (v2 , v2 )
n (v2 , v2 )
l a n
m
v1
v2
b
f c h
d
v3 g v4
0 1 0 0
(S) m ∼ n ⇒ n ∼ m
(T) m ∼ n, n ∼ r ⇒ m ∼ r
Estas três propriedades chamam-se reflexividade, simetria e transitividade
respectivamente
Exemplo 1.9. Consideremos relação Rp ⊂ Z × Z, (m, n) ∈ Rp se p | (m − n) .
Esta relação chama-se relação de congruência com modulo p . Usa-se a notação
f (n) = n mod 3.
16 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS
S0 = {. . . , −6, −3, 0, 3, 6, . . .}
S1 = {. . . , −5, −2, 1, 4, 7, . . .}
S2 = {. . . , −4, −1, 2, 5, 8, . . .}
3 Algoritmos
Conceito de algoritmo é também uma noção básica de Matemática Discreta.
Este conceito não pode ser definido agora com rigor matemático e precisa de
preparação séria. Apesar disso o conceito pode ser descrito em termos habituais.
Existe um conjunto finito de instruções que devem ser realizadas passo a passo.
Claro que devem ser dados objectos de aplicação das instruções, condições de
aplicação, ordem de aplicação.
Um exemplo simples de algoritmo é algoritmo cíclico.
s = x1 + x2 + · · · + xn .
Notemos que neste exemplo o número dos passos do algoritmo cíclico de-
pende dos números dados x1 , . . . , xn . Por isso, não é natural resolver este
problema usando a estrutura for.
s := 0
for i := 1 to n do
for j := 1 to n do
s := s + aij
end for
end for
Algoritmo 1.2: Ciclo duplo
O resultado é
n X
X n
s= aij . (1.2)
i=1 j=1
Note que a fórmula (1.2) é só realmente outra notação para representar o algo-
ritmo (1.2).
Exemplo 1.14. Vamos supor que pelo menos um elemento da matriz (aij ) é
número negativo. Achar os índices i1 , j1 de um elemento negativo.
18 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS
n 10 20 30 40 50
t 1 seg 18 min 12 dias 35 anos 35700 anos
n/2 n/2
lim = 0, lim = 0.
n→∞ n2 n→∞ n(n − 1)/2
|f (n)| ≤ C|g(n)|
20 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS
Não é necessário calcular esta soma para determinar tipo do algoritmo. É pos-
sível fazer cálculo aproximado. O número de vezes médio de cumprimento do
j -ciclo é igual a n/2 , o número de vezes médio para k -ciclo é uma função da
forma c · n, 0 < c < 1 . Portanto f (n) ≈ n · n/2 · cn = c/2 · n3 = O(n3 ) .
4. EXERCÍCIOS 21
4 Exercícios
4.1 Lógica
1. Demonstrar: se um número n natural é múltiplo de 4 então o n é par.
2. Como é que pode ser demonstrada a implicação P → (Q → R) ?
(A ∩ B ∩ C)c = Ac ∪ B c ∪ C c
S S
(a) f −1 (A B) = f −1 (A) f −1 (B)
T T
(b) f −1 (A B) = f −1 (A) f −1 (B)
c
(c) f −1 (Ac ) = f −1 (A)
11. Seja f : X → Y . Demonstrar que A ⊂ f −1 (f (A)), A ⊂ X . Dar um
6 f −1 (f (A))
exemplo quando A =
12. Sejam f : X → Y, A ⊂ X, B ⊂ Y . Demonstrar que
A ⊂ f −1 (B) ⇔ f (A) ⊂ B.
4.3 Relações
1. As relações seguintes são definidas sobre o conjunto N dos números na-
turais. Formar a lista de todos os pares da relação:
(a) R1 = {(m, n) : m + n = 5}
(b) R2 = {(m, n) : max{m, n} = 2}
(c) R3 = {(m, n) : min{m, n} = 2} (neste caso obter só 5 pares)
As relações consideradas são simétricas?
2. Achar a composição R ◦ R para a relação R = {(1, 2), (1, 4), (5, 2), (4, 3)}
e para cada uma das relações no exercício 1.
3. Uma relação R ⊂ S × S é transitiva. Demonstrar que R ◦ R ⊂ R .
4. Construir um grafo da relação dada sobre o conjunto S
(a) S = {1, 2, 3, 4}, R = {(1, 2), (1, 1), (4, 1), (2, 3), (2, 2)}
(b) S = {1, . . . , 10}, R = {(m, n) : m|n}
5. Verificar se as relações seguintes são relações de equivalência ou não. No
caso ’não’ indicar quais das condições (R),(S),(T) não se cumprem:
(a) sobre o conjunto das rectas no espaço, relações da paralelidade, per-
pendicularidade
(b) sobre o conjunto dos vectores no espaço (excepto o vector nulo) rela-
ções de colinearidade, perpendicularidade, relação: vectores a e b
têm a mesma direcção
(c) R = {(m, n) ∈ N × N : |m − n| ≤ 1}
(d) S = N × N, R ⊂ S × S , ponhamos por definição (m, n) ∼ (k, l) se
m+l =n+k
4. EXERCÍCIOS 23
end for
j := j div 2
end while
13. Demonstre que no exemplo 1.19 f (n) ≈ n3 /6
14. Demonstre que f (n) = n(n − 1)(n − 2)/6
Capítulo 2
Contagem. Análise
combinatória
1 Princípios básicos
Colocação do problema. Determinar o número de elementos de um conjunto
dado.
|S ∪ T | = |S| + |T |
• Caso geral
|S ∪ T | = |S| + |T | − |S ∩ T |.
|D3 ∩ D5 | = |D15 | = 66
25
26 CAPÍTULO 2. CONTAGEM. ANÁLISE COMBINATÓRIA
[n X n X X
Ai = |Ai | − |Ai ∩ Aj | + |Ai ∩ Aj ∩ Ak | − · · ·
i=1 i=1 i,j i,j,k
P (n, n) = n! (2.4)
S = {s1 , s2 , . . . , sm }, T = {t1 , t2 , . . . , tn }.
P (n, r) = n1 n2 = Cnr · r!
P (n, r) n!
Cnr = = .
r! (n − r)! · r!
n
Nota. Usa-se também a designação = Cnr , por exemplo
r
5 5! 5·4
= C53 = = = 10.
3 2!3! 1·2
variantes.
2 2 1 ou 0 4 1 etc.
Como vamos ver em baixo, resposta à esta questão (pôr n objectos idênticos
em k caixas diferentes) pode ser encontrada da formula (2.8).
Exemplo 2.7. O número de variantes de distribuição de 5 objectos idênticos em
3 caixas (de cores diferentes) V = C72 = 7 · 6/2 = 21 .
Existem outros problemas isomorfos ao problema colocado, i.e., é possível
construir uma correspondência biunívoca entre dois conjuntos: o conjunto de
todas as distribuições e o conjunto num outro problema.
x1 + x2 + . . . + xk = n (2.9)
em números inteiros não negativos. A cada uma solução desta equação corres-
ponde uma distribuição em n caixas: a primeira caixa contém x1 objectos, a
k−1
segunda x2 , etc. A reposta à questão é a mesma, D(n, k) = Cn+k−1 .
30 CAPÍTULO 2. CONTAGEM. ANÁLISE COMBINATÓRIA
x · 48 = 9!
n!
n1 !n2 ! · · · nk !
A = A1 ∪ A2 ∪ · · · ∪ Ak
A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.
4 Exercícios
1. Entre 150 homens 45 sabem nadar, 40 jogam futebol, 50 jogam xadrez.
Também, 32 homens jogam xadrez mas não jogam futebol, 27 jogam
xadrez e nadam, e 10 homens sabem fazer tudo.
(a) Quantos homens jogam xadrez, mas não nadam e não jogam futebol?
(b) Se 21 homens jogam futebol e nadam, quantos homens não sabem
fazer nada de três actividades?
2. Achar o número de permutações de um conjunto de 10 elementos.
3. Encontrar C83 , C80 , C85 .
4. Sejam S = {a, b, c, d} e T = {1, 2, 3, 4, 5, 6, 7} .
(a) Quantas funções f : T → S têm valores diferentes ( f (x1 ) 6= f (x2 )
se x1 6= x2 )?
(b) Quantas existem funções f : S → T com diferentes valores?
(c) Quantas existem funções f : T → S ?
5. (a) Achar o total de números com 3 dígitos
(b) Quantos números têm 3 dígitos diferentes?
(c) Quantos números de 3 dígitos diferentes não são múltiplos de 5 ?
4. EXERCÍCIOS 33
(a) Achar |P |
(b) Quantas permutações satisfazem á condição: a e b são adjacentes,
e b e c são adjacentes.
(c) Encontrar o número de permutações obedecendo à condição: a e b
não são adjacentes?
(d) Encontrar o número de permutações das letras a, b, c, d, e, f se a e
b não são adjacentes e letras b e c também?
(e) Encontrar o número de permutações das letras a, b, c, d, e, f obede-
cendo à condição: as letras a e b são adjacentes ou as letras a
e c são adjacentes. Por exemplo, abcef d e bacdef satisfazem à
condição, mas cdbeaf não satisfaz.
17. Quantas palavras é possível formar das 3 letras a , 4 letras b e 3 letras
c?
18. (a) Achar o número de todas as soluções inteiras não negativas da equa-
ção x1 + x2 + x3 = 11 .
(b) Quantas números decimais de 3 algarismos têm a soma dos algaris-
mos 11 ?
19. Encontrar o número de todas as soluções inteiras não negativas da equação
x1 + x2 + x3 + x4 = 10 satisfazendo à condição x1 ≤ 3 .
20. Em quantas maneiras se pode distribuir 10 objectos iguais em 4 caixas
diferentes sabendo que cada caixa cabe 7 objectos?
21. Achar o número de todas as soluções inteiras da equação
x1 + x2 + x3 + x4 + x5 = 8,
se xi ≥ 0, i = 1, . . . , 5 e x1 ≤ 7 .
22. Em quantas maneiras se pode distribuir 10 objectos iguais em 4 caixas
diferentes sabendo que cada caixa cabe 4 objectos?
23. Têm-se 20 hastes idênticas que ocupam uma linha de vinte lugares dife-
rentes:
| | | | | | | | | | | | | | | | | | | |,
Indução e recursividade
1 Indução matemática
1.1 Introdução. Exemplo
Indução matemática é um dos métodos de demonstração de teoremas e outras
proposições matemáticas. Notemos que demonstração é última etapa na re-
solução de um problema. Também, a indução pode servir para descobrir um
resultado, mas isto não é indução matemática, é raciocínio indutivo informal.
A ideia do método pode ser interpretada de maneira seguinte. Seja A um
subconjunto do conjunto N de todos os números naturais. Imaginemos que os
números do conjunto A são marcados, digamos têm cor vermelho. Mas todos
os outros têm cor branco. Temos informação certa sobre o conjunto A . Sabe-se
que o número 1 tem cor vermelho, isto é, 1 ∈ A . Mais, se um número n tem
cor vermelho, o número n + 1 é também de cor vermelho. O que é que podemos
dizer relativamente ao conjunto A ? Claro que 2 tem cor vermelho, porque 1
é do A e 1 + 1 = 2 . Mas o que é que podemos dizer sobre o 3 ?
Intuitivamente claro que A = N . O exemplo abaixo é baseado sobre a
mesma ideia. Mas em vês de dizer que um número n tem cor vermelho, no
exemplo abaixo tem-se uma proposição que que depende do parâmetro n .
Exemplo 3.1. Dada a sucessão 2, 5, 8, . . . Achar a expressão (uma fórmula) para
o termo geral xn desta sucessão. Aqui x1 = 2, x2 = 5, . . .
xn = xn−1 + 3, n ≥ 2. (3.1)
Surge uma hipótese que xn = 3n − 1 . Esta fórmula serve para vários
primeiros valores de n :
n xn 3n − 1
1 2 2
2 5 5
3 8 8
··· ··· ···
Vamos raciocinar de mesma maneira como foi feita em cima a conclusão que
todos os números naturais têm cor vermelho.
Consideremos a implicação
xk = 3k − 1 → xk+1 = 3(k + 1) − 1, k ≥ 1.
36
1. INDUÇÃO MATEMÁTICA 37
x1 = 3 · 1 − 1 → x2 = 3 · 2 − 1 → x3 · 3 − 1 → · · ·
n(n + 1)
1 + 2 + 3 + ...+ n = , n = 1, 2, 3, . . . (3.2)
2
Ainda não sabemos se para todos os valores de n a relação (3.2) é verdadeira
ou não. Não é possível verificar a relação (3.2) para todos os valores de n ∈ N .
Verifiquemos que para n = 1 esta proposição é válida. De facto n = 1
1·2
torna (3.2) em igualdade 1 = . No segundo passo (passo da indução)
2
suponhamos que para n = k a proposição é válida, isto é,
k(k + 1)
1 + 2 + ...+ k = .
2
Baseando nesta hipótese demonstremos que para n = k + 1 a proposição será
válida também, isto é,
(k + 1)(k + 2)
1 + . . . + k + (k + 1) = .
2
Temos
k(k + 1)
1 + 2 + . . . + k +(k + 1) = +k+1
| {z } 2
suposição
k(k + 1) + 2(k + 1) (k + 1)(k + 2)
= = .
2 2
Este resultado podemos interpretar de maneira seguinte
k(k + 1) (k + 1)(k + 2)
1 + ...+ k = → 1 + . . . + k + (k + 1) = .
2 2
(3.3)
Vamos agora raciocinar. Da validade da relação (3.2) para n = 1 teremos
validade para n = 2 , mas isto implica validade para n = 3 , o último implica
para n = 4 , etc. Intuitivamente nós podemos ver que a relação (3.2) deve ser
válida para todos n = 1, 2, . . . .
38 CAPÍTULO 3. INDUÇÃO
Em geral vamos ter o método que se chama Método (ou princípio) da indução
matemática. Para compreensão melhor da estrutura do raciocínio, introduzimos
a designação
n(n + 1)
P (n) = 1 + 2 + 3 + . . . + n = (3.4)
2
que depende do n (ou predicado). Estrutura do raciocínio consiste dos dois
elementos:
1. P (1) é verdadeiro
2. a implicação P (k) → P (k + 1) é verdadeira
Neste caso temos a sucessão das implicações
∀(n ∈ N ) P (n).
sn = 1 + 3 + 5 + . . . + (2n − 1).
Notemos que n -esimo lugar ocupa o número 2n− 1 (que é possível demons-
trar por meio da mesma indução). Consideremos os cálculos:
n=1 1
n=2 1+3=4
n=3 1+3+5=9
n=4 1 + 3 + 5 + 7 = 16
... ...
Aparece a suposição (indução informal) que a soma sn é igual a n2 . Agora
def
vem etapa da demonstração. Designemos P (n) = {1 + 3 + 5 + . . . + (2n −
1) = n2 } .
(B) P (1) = {1 = 12 } é verdade.
k + 1 = a1 · · · · · am b 1 · · · · · b k
é produto de primos.
Existe uma generalização do princípio fraco:
Teorema 3.4. Se
(B) P (1), P (2), . . . , P (m) são verdadeiros;
(I) Da validade das proposições P (1), . . . , P (k) segue P (k + 1) qualquer que
seja k ∈ {m, m + 1, . . .} .
Então P (n) é verdade para qualquer número n natural.
2 Definições recursivas
2.1 Descrição do problema
A secção precedente mostra que o conjunto de todos os números naturais tem
natureza recursiva. É suficiente demonstrar a implicação P (k) → P (k + 1)
e a partir do número 1 é possível obter um resultado para toda a sucessão
das proposições P (1), P (2), P (3), . . . . Esta propriedade dos números naturais
permite definir uma função f : N → Y sobre o N = {1, 2, 3, . . .} utilizando
uma relação entre valores da função para diferentes argumentos. Notemos que
cada função definida sobre N é a sucessão
f1 , f2 , . . . , fn , . . .
xn = xn−1 + 3, n ≥ 2, x1 = 2. (3.5)
1! = 1, n! = (n − 1)! · n, se n > 1.
f1 = 1, fn = fn−1 · n, se n > 1.
Destes exemplos podemos fazer a conclusão geral. Para definir uma sucessão
sn , n = 1, 2, . . .
sn = ϕn (s1 , s2 , . . .)
f1 = f0 · 1, ou 1 = f0 · 1.
Daqui 0! = f0 = 1 .
Para a sucessão de Fibonacci consideremos a relação dada quando n = 2 :
F2 = F1 + F0 .
s0 = 0, sk = sk−1 + ak , se k ≥ 1.
2. DEFINIÇÕES RECURSIVAS 43
O seguinte exemplo mostra mais uma variante para utilizar elementos ante-
cedentes da sucessão:
44 CAPÍTULO 3. INDUÇÃO
function Fib(n:integer):integer;
begin
if (n=1) or (n=2) then
Fib:=1
else
Fib:=Fib(n-2)+Fib(n-1)
end;
begin
write(Fib(6))
end.
sn = rn , n ≥ 0. (3.7)
Se r é uma das raízes da equação a progressão geométrica vai ser uma das
soluções da equação (3.6).
Sejam xn e yn duas soluções da equação (3.6), isto é,
sn = c1 r1n + . . . + cp rpn , n = 1, 2, . . .
sn = asn−1 + bsn−2 .
Equação característica:
r2 = ar + b.
Solução da relação. Se r1 6= r2 teremos
sn = c1 r1n + c2 r2n .
Se r1 = r2 = r então
sn = c1 rn + c2 nrn .
Exemplo 3.11. Consideremos a relação recorrente sn = sn−1 + 2sn−2 onde
s1 = s2 = 3 . Temos sucessão sn :
3 = c1 21 + c2 (−1)1 3 = c1 22 + c2 (−1)2
donde c1 = 1, c2 = −1 e
sn = 2n − (−1)n .
A1 = {a, b}, A2 = {ab, ba, bb}, A3 = {aba, abb, bab, bba, bbb}.
4 Exercícios
4.1 Indução matemática
1. Demonstrar as identidades
n(n + 1)(2n + 1)
(a) 12 + 22 + . . . + n2 = , n∈N
6
n+1
a −1
(b) 1 + a + a2 + . . . + an = (a 6= 1)
a−1
2. Demonstrar que para todos os números n naturais
(a) n5 − n é divisível por 10
(b) 11n − 4n é divisível por 7
1 1 n 1 n
3. Dada a matriz A = . Demonstrar que A = .
0 1 0 1
4. Seja M um conjunto finito contendo n elementos. P(M ) designa o
conjunto de todos os subconjuntos de M . Determinar o número dos
membros de P(M )
48 CAPÍTULO 3. INDUÇÃO
5. Demonstrar para ∀n ∈ N
(a) 5n − 4n − 1 é divisível por 16
(b) 5n+1 + 2 · 3n + 1 é divisível por 8
(c) n! ≥ 2n−1
(d) 8n+2 + 92n+1 é divisível por 73
(e) 13 + 23 + . . . + n3 = (1 + 2 + . . . + n)2
Xn
1 √
(f) √ ≥ n
i=1
i
Xn
1 √
(g) √ ≤2 n−1
i=1
i
(h) an − 1 ≥ n(a − 1) (a > 0)
6. Demonstrar
(a)
m−1 m−1 m−1 m−1
Cnm = Cn−1 + Cn−2 + Cn−3 + · · · + Cm−1 , n ≥ m ≥ 0.
(b)
Cn1 + 2Cn2 + 3Cn3 + · · · + nCnn = n2n−1 .
7. Demonstre os teoremas 3.2, 3.3, 3.4, 3.5, 3.6.
8. Seja P (n) um predicado definido sobre o N . Suponhamos que P (n)
satisfaz às condições:
(a) P (1) é verdadeiro,
(b) P (k) → P (k + 2), k ≥ 1
Demonstre que P (n) é verdadeiro qualquer que seja n ímpar.
9. Prove by induction that a 2n by 2n chessboard minus any single square
can always be covered by L -shaped pieces (with 3 squares in each piece).
(Suggestion: divide the 2n+1 by 2n+1 chessboard into four smaller chess-
boards).
10. Demonstrar que ∀n ∈ N
√ a1 + . . . + an
n
a1 · . . . · an ≤
n
ai ≥ 0, i = 1, . . . , n .
Solução. Consideremos o caso particular quando o médio aritmético
a1 + . . . + an
= 1. (3.9)
n
a1 · . . . · an ≤ 1. (3.10)
4. EXERCÍCIOS 49
então
a′1 a′n = (a1 −x)(an +x) = a1 an +x((a1 −an )−x) = a1 an +x(a1 −1) > a1 an .
a′1 · . . . · an−1 ≤ 1.
ai = mxi , i = 1, 2, . . . , n.
Demonstrar que
1 n
Mn = , n∈N
0 1
x(x − 1) · . . . · (x − n)
Pn = Pn (x) = , n≥0
n!
onde x é um número real.
x−n
Resposta: P0 = x , Pn = Pn−1 , n≥1
n
13. Dar uma definição recursiva para a sucessão
an (2n)!
xn = , n = 0, 1, 2, . . .
b2n−1 n!
s0 = 1, sn+1 = an+1 sn , se n ≥ 0.
Algoritmos cíclicos
1 Introdução
1.1 Exemplos
Algoritmo cíclico é um dos métodos principais em construção de algoritmos.
Resultados de trabalho de um algoritmo cíclico pode-se representar em forma
de uma tabela onde cada linha apresenta resultado depois de um passo do
algoritmo.
Exemplo 4.1. Consideremos por exemplo o algoritmo
x := 2
while true do
x := x + 3
end while
A seguinte tabela representa os valores da variável x depois de n passos do
ciclo
n x
0 2
1 5
2 8
3 11
4 14
... ...
O algoritmo calcula n -ésimo elemento da sucessão
x0 = 2, xn = xn−1 + 3, se n ≥ 1.
54
1. INTRODUÇÃO 55
n r k
0 30 0
1 23 1
2 16 2
3 9 3
4 2 4
S := f (S). (4.1)
A letra S usa-se para indicar o bloco (cortejo, estado) de todas as variáveis que
se alteram no algoritmo. O cortejo destas variáveis vamos chamar por estado
(situação actual, meio ambiente) designada pela letra S .
Exemplo 4.3. No ciclo infinito
r := 30; k := 0
while true do
r := r − 7;
k := k + 1
end while
S = (r, k)
e a função f tem a representação
S0 , S1 , . . . , Sn , . . . ,
(30, 0), (23, 1), (16, 2), (9, 3), (2, 4), . . .
¬P (S)
é verdadeira!
r′ + 7k ′ = r − 7 + 7(k + 1) = r + 7k = 1.
while true do
S := f (S) S := f (S)
end while
S := S0
S := S0 { I(S0 ) }
P (S)
Não while P (S) do
S := f (S)
Sim end while
{ ¬P (S) ∧ I(S) }
S := f (S)
2 Exemplos de algoritmos
2.1 Algoritmo de divisão inteira
Exemplo 4.7. Demonstremos que no algoritmo
r := a ; k := 0
while r ≥ b do
r := r − b
k := k + 1
end while
a proposição
I(S) = I(r, k) = {a = kb + r}
é invariante. De facto designemos os valores novos de r e k por r′ e k ′
respectivamente, i.e.
{a = kb + r} → {a = k ′ b + r′ }.
Demonstração:
k ′ b + r′ = (k + 1)b + r − b = kb + r = a.
No exemplo 4.7 vemos um algoritmo. Como poderemos ver que este algo-
ritmo serve para encontrar quociente incompleto k e resto de divisão r do
número inteiro não negativo a por número natural b . Notemos que antes de
demonstrar é preciso dar definição correspondente.
Definição 4.4. Se o número a é representado em forma a = kb + r onde
0 ≤ r < b , números inteiros k e r chamam-se quociente e resto de divisão a
por b respectivamente.
60 CAPÍTULO 4. ALGORITMOS CÍCLICOS
a = kr + b e r < b.
I(r, k) = {a = kr + b ∧ r ≥ 0}.
I ∧ ¬P = {a = kr + b ∧ r ≥ 0} ∧ {r < b}.
MDC(a, b) = MDC(b, r)
m := a ; n := b
while n 6= 0 do
r := m mod n
(m, n) := (n, r)
end while
{ n = 0 ∧ m = MDC(a, b) }
d := m
Algoritmo 4.1: Euclid
ax + by = c (4.5)
x = −1, y = x1 − 2x = 1 − 2(−1) = 3.
k = ⌊a/b⌋ e r = a mod b,
a2 x2 + b2 y2 = c (4.7)
com a2 = b1 , b2 = r = a1 mod b1 .
62 CAPÍTULO 4. ALGORITMOS CÍCLICOS
X = A1 A2 · · · An Xn .
an xn + bn yn = c
x
então X = é uma das soluções da equação inicial (4.5).
y
algoritmo
k m n P
1 0
início 23 13
0 1
0 1
1 13 10
1 −1
1 −1
1 10 3
−1 2
−1 4
3 3 1
2 −7
4 −13
3 1 0
−7 23
Ao terminar o algoritmo temos
x 4 −13 x̃
= ·
y −7 23 ỹ
x = 4 − 13t, y = −7 + 23t.
4 Exercícios
4.1 Algoritmos cíclicos
1. Obter a lista de cinco primeiros valores de x em cada um dos algoritmos
(a) x := 0
while 0 ≤ x do
x := 2x + 3
end while
(b) x := 1
while 0 ≤ x do
x := 2x + 3
end while
(c) x := 0
while x ≥ 0 do
x := 2x − 1
end while
2. A lista dos estados durante cumprimento do algoritmo
m := 0; n := 0
while n 6= 4 do
m := m + 2n + 1
n := n + 1
end while
apresentar em forma da tabela
3. Mostrar que as proposições I1 (m, n) = {m + n é par} e I2 (m, n) = {m +
n é ímpar} são invariantes do ciclo
while 1 ≤ m do
m := m + 1
n := n + 1
end while
4. Mostrar que as proposições n2 ≥ m3 e 2m6 < n4 são invariantes do
ciclo
while 1 ≤ m do
m := 2m
n := 3n
end while
Resolução para a proposição P (m, n) = {2m6 < n4 } :
Designemos m′ = 2m e n′ = 3n . Temos
6 4
P (m′ , n′ ) = {2m′ < n′ } = {2 · 26 m6 < 34 n4 }.
5. Consideremos o ciclo
4. EXERCÍCIOS 65
while j ≥ n do
i := i + 2; j := j + 1
end while
Quais das seguintes asserções
(a) i < j 2 se n = 1
(b) i < j 2 se n = 0
(c) i ≤ j 2 se n = 1
(d) i ≤ j 2 se n = 0
são invariantes ?
6. Demonstre que a proposição {2k 3l x = a} ( a é um número real dado) é
um invariante do algoritmo cíclico
k := 0; l := 0; x := a;
while (x mod 2 = 0) ∨ (x mod 3 = 0) do
if x mod 2 = 0 then
k := k + 1
x := x div 2
else
l := l + 1
x := x div 3
end if
end while
Demonstre que o ciclo termina e descreve o resultado.
7. Dado o algoritmo
p := 1; x := a; i := n
while i > 0 do
if odd(i) then
p := p ∗ x
end if
x := x ∗ x
i := i div 2
end while
Demonstre que
(a) A proposição {pxi = an } é um invariante do algoritmo cíclico ( n é
um número natural, a é um número real)
(b) Ao terminar o ciclo p = an
(c) O ciclo termina
8. Demonstrar que a proposição {kxm = an } é um invariante do algoritmo
cíclico ( n é um número natural)
k := 1; x := a; m := n
while m > 0 do
if odd(m) then
k := k ∗ x
66 CAPÍTULO 4. ALGORITMOS CÍCLICOS
m := m − 1
else
x := x ∗ x
m := m div 2
end if
end while
Demonstrar que o ciclo termina e logo ao terminar k = an .
9. Demonstrar que a proposição {kx + y = a} é invariante no algoritmo
cíclico ( a é um número natural)
k := 1; x := a; y := 0
while x > 1 do
if odd(x) then
y := y + k
end if
k := 2 ∗ k
x := x div 2
end while
Demonstrar que o ciclo termina e logo ao terminar x = 1 .
1. Calcular n!
2. Sucessão de Fibonacci: F1 = F2 = 1, Fk = Fk−1 + Fk−2 se k ≥ 3 .
(a) Calcular Fn .
(b) Dado M > 0 achar o primeiro número n tal que Fn > M .
3. Encontrar soma dos dígitos de um número natural.
1 Grafos
1.1 Grafo orientado (com direcções, digrafo)
O conceito de grafo surge de maneira natural de diferentes problemas de infor-
mática. Organização de dados em estruturas tem sua reflexão em usar o conceito
de grafo. Claro que é cómodo representar as estruturas geometricamente. Gra-
fos também têm representação geométrica. Os elementos principais de grafo são
objectos-vértices e arcos que representam uma relação entre objectos.
Notemos que o conceito de grafo é um conceito mais geral do que o conceito
de relação. Como se sabe cada relação sobre um conjunto finito pode ser repre-
sentada em forma de um diagrama onde cada vértice representa um elemento do
conjunto e cada par (x, y) ordenado da relação pode ser representado por meio
de um arco orientado. Em geral é possível considerar vários arcos (ou múltiplos
arcos) que ligam dois vértices. Desta maneira temos o conceito geral de grafo
orientado.
Definição 5.1. Grafo orientado G é o terno ordenado G = (V, E, γ) onde
• V é um conjunto de vértices, V = V (G)
• E é um conjunto de arcos, E = E(G)
• γ : E → V × V ( γ é uma função com domínio E . Valores da função γ
pertencem ao produto directo V × V )
Exemplo 5.1. Sejam V = E = {0, 1, 2, . . . , n − 1} e a função γ definida pela
fórmula
γ(k) = (k, (k + p) mod n), k ∈ E
onde p ∈ {1, . . . , n − 1} . Se p = 1 , o grafo pode ser desenhado como um
polígono regular com n vértices. Os vértices do polígono são os vértices do
grafo e os lados do polígono representam os arcos do grafo.
Desenhe o grafo para n = 4 nos casos p = 2 , p = 3 .
68
1. GRAFOS 69
R = γ(E).
pontes uma e uma só vez cada e retornar ao ponto inicial? O problema foi
resolvido pelo matemático Euler em ano 1736.
Para construir o grafo sobre a figura 5.1 é necessário substituir as áreas de
terra por vértices e as pontes por arcos. Surge a questão: existe um caminho
fechado que usa cada um dos arcos uma única vez? Vamos chamar tal caminho
por circuito de Euler do grafo. Um caminho simples contendo todos arcos de
um grafo G chama-se caminho de Euler.
M1
P2
P6
P3
P1
I1 I2
P4
P7
P5
M2
Figura 5.1: Grafo de Königsberg
3.2 Proposições
Teorema 5.5. Se um grafo G contém um circuito de Euler então o grafo tem
todos os vértices de grau par.
Corolário 1. Se um grafo G tem um caminho de Euler então G tem dois
vértices de grau ímpar ou não tem vértices de grau ímpar.
Teorema 5.6 (Euler). Se todos os vértices de um grafo conexo têm grau par
então ele tem um circuito de Euler.
Corolário 1. Grafo conexo G que tem dois vértices de grau ímpar e outros de
grau par tem um caminho de Euler.
• () é sucessão vazia
• A concatenação de uma sucessão s e um elemento x vamos designar por
s + x , por exemplo (a, b, c) + d = (a, b, c, d)
Inicialmente: a variável v é um vértice de grau ímpar se tal vértice existe.
No caso contrário v é um vértice arbitrário.
Input: G é um grafo conexo com todos os vértices de grau par ou com dois
vértices de grau ímpar
Output: V S e ES são sucessões dos vértices e dos arcos de um circuito de
Euler (ou caminho de Euler)
V S := (v) ; ES := ();
V := V (G) ; E := E(G)
while deg(v) > 0 do
if deg(v) = 1 {γ(e) = {v, w}} then
E := E \ e ; V := V \ v
else { deg(v) > 1 }
escolher um arco e ( γ(e) = {v, w} ) tal que se eliminarmos o arco e
obteremos um grafo conexo
E := E \ {e}
end if
V S := V S + w ; ES := ES + e
adicionar w e e no fim das sucessões V S e ES
v := w {agora v = w é o vértice corrente}
end while
Algoritmo 5.1: Fleury
v VS ES V E
z (z) () {x, y, z, r, s, t} {a, b, c, d, f, g, h, i}
y (z, y) (i) {x, y, r, s, t} {a, b, c, d, f, g, h}
x (z, y, x) (i, f ) {x, y, r, s, t} {a, b, c, d, g, h}
r (z, y, x, r) (i, f, a) {x, y, r, s, t} {b, c, d, g, h}
s (z, y, x, r, s) (i, f, a, b) {x, y, s, t} {c, d, g, h}
t (z, y, x, r, s, t) (i, f, a, b, c) {x, y, t} {d, g, h}
x (z, y, x, r, s, t, x) (i, f, a, b, c, d) {x, y} {g, h}
y (z, y, x, r, s, t, x, y) (i, f, a, b, c, d, h) {y} {g}
y (z, y, x, r, s, t, x, y, y) (i, f, a, b, c, d, h, g) {y} ∅
76 CAPÍTULO 5. INTRODUÇÃO À TEORIA DE GRAFOS E ÁRVORES
r r r
b f y b f y b y
x x x
s a gs a gs a g
c d h i c d h c d h
t t t
z
x y y y
g g
h
Teorema 5.7. Para cada grafo conexo com vértices de grau par o algoritmo
de Fleury produz um circuito de Euler. No caso de existência de 2 vértices de
grau ímpar, o algoritmo produz um caminho de Euler.
Demonstração do teorema pode ser realizada na base dos teoremas de Euler
e 5.4.
4 Árvores
4.1 Definições e teoremas gerais
Definição 5.17 (árvore). Grafo conexo e acíclico chama-se árvore. Grafo ací-
clico não conexo chama-se floresta.
Notemos que árvore não tem arcos paralelos e laços porque é acíclico. Exis-
tem só uma árvore de 2 vértices (não distinguir árvores isomorfas), uma árvore
de 3 vértices, duas árvores com 4 vértices.
Consideremos grafo conexo G = (V, E) sem laços e arcos paralelos ( V é o
conjunto de vértices).
Definição 5.18 (arvore geradora). Uma árvore A = (V, E ′ ), E ′ ⊂ E (sub-
grafo de G ) chama-se árvore geradora (ou árvore abrangente) do grafo G . Por
outras palavras, árvore geradora contém todos os vértices do grafo G .
Definição 5.19 (folha). Vértice de grau 1 de uma árvore chama-se folha.
Teorema 5.8 (existência de árvore geradora). Cada grafo finito conexo tem
uma árvore geradora.
Demonstração. Seja (V, E) um grafo finito conexo. Consideremos todos os
subgrafos conexos (V, E ′ ) com E ′ ⊂ E e escolhemos um com o mínimo número
de arcos. Este subgrafo é acíclico. De facto, se este grafo contém um ciclo,
segundo o teorema 5.4 é possível eliminar um arco deste ciclo e obter grafo
conexo com número menor dos arcos. Isso contradiz à suposição. Então este
subgrafo é conexo e acíclico e portanto é uma árvore contendo V .
4. ÁRVORES 77
(a) (b)
(c) (d)
5 Árvores geradoras
5.1 Algoritmo de produção duma árvore geradora
Consideremos um algoritmo que permite encontrar uma árvore geradora para
grafo conexo dado G = (E(G), V (G)) . Se n = |V | árvore geradora contém
n − 1 arcos. Vamos começar a partir de qualquer vértice do grafo e adicionar
arco a arco ate obter uma arvore geradora. O código de um algoritmo Tree(v)
está apresentado sobre a figura algoritmo 5.2.
Algoritmo de Kruskal
No algoritmo de Kruskal os arcos dispõem-se em ordem crescente dos pesos:
para a sucessão de arcos e1 , e2 , . . . , en temos
é um invariante do ciclo
2. Inicialmente E = ∅ e evidentemente P (E) é verdadeiro
Daqui pode ser concluído que ao terminar o ciclo a proposição será verdadeira.
Para demonstrar isto consideremos um passo do ciclo. Na entrada temos um
conjunto E . Vale a pena considerar só o caso E ′ = E ∪ {ej } é acíclico. Seja T
uma mínima árvore geradora contendo E . É preciso demonstrar que existe uma
miníma árvore geradora T ′ ⊃ E ′ . Se ej ∈ T então E ′ ⊂ T . Consideremos o
caso ej ∈/T.
Neste caso ej pertence a um ciclo C do grafo T ∪ {ej } 1 . E ′ é acíclico,
por isso o ciclo C contém um arco
f ∈ T, f ∈
/ E, f 6= ej .
T ′ = (T ∪ {ej }) \ {f }.
W (T ′ ) ≤ W (T ).
1 por causa do teorema 5.4 ou do teorema 5.10
2 por causa do teorema 5.10
6. PERCURSO DE VÉRTICES. CAMINHO DE HAMILTON 81
Algoritmo de Prim
Existe mais um algoritmo para resolver o mesmo problema. No algoritmo de
Prim 5.4 não é necessário ordenar os arcos antes de construir uma árvore. Tam-
bém, no algoritmo de Prim não é preciso controlar que o grafo corrente obtido
não é acíclico. Realmente, este algoritmo é um caso especial do algoritmo Tree
(algoritmo 5.2).
Teorema 5.13. Algoritmo de PRIM produz uma mínima árvore geradora.
nem sempre pode dar resultado positivo, mas no caso do problema de percurso
do quadro de xadrez o algoritmo serve.
7 Exercícios
7.1 Definições de grafos orientado e não orientado, dia-
grama de grafo
1. Dada a tabela da função γ : E(G) → V (G) × V (G) construir o diagrama
do grafo G :
e a b c d e f g h
γ(e) (w, z) (w, x) (x, z) (z, z) (z, x) (z, y) (y, w) (y, x)
(a) (b)
6. Verificar se os grafos (a) e (b) sobre a figura 5.6 são isomorfos ou não?
(a) (b)
0 3 6
1 7
4
2 5 8
7.4 Árvores
1. Desenhar todas as árvores com 1, 2, 3, 4, 5 e 6 vértices não isomorfas.
2. Quais das árvores na figura 5.10 são isomorfas?
3. Consideremos uma árvore com n vértices. Sabe-se que ela possui n − 1
arcos. Daqui a soma dos graus dos vértices é igual a 2n − 2 .
(a) Uma árvore tem 2 vértices de grau 4, um vértice de grau 3, um vértice
de grau 2. Se outros vértices têm grau 1 quantos vértices tem esta
árvore?
(b) Desenhar pelo menos uma árvore correspondente a alínea (a).
4. Repetir o exercício 3 para uma árvore com 2 vértices de grau 5 , 3 vértices
de grau 3 , 2 de grau 2 e o resto de grau 1.
5. (a) Mostrar que existe uma árvore com 6 vértices de grau 1 , um vértice
de grau 2 , um vértice de grau 3 , 1 vértice de grau 5 e não existem
outros.
(b) Para n ≥ 2 consideremos n números inteiros positivos d1 , . . . , dn
cuja soma é 2n − 2 . Mostrar que tem-se uma árvore com n vértices
cujos vértices têm graus d1 , . . . , dn .
(c) Mostrar que a alínea (a) ilustra a alínea (b) onde n = 9
6. Desenhar as figuras de todos grafos conexos com 4 arcos e 4 vértices,
não esquecendo os laços e arcos paralelos.
7. Construir todos os subgrafos não isomorfos do grafo completo K5 que têm
5 vértices e 5 arcos. Construir os complementos4 dos grafos obtidos. Para
4 para
o grafo (V, E) e um subgrafo (V, E ′ ) o complemento é (V, E \ E ′ ) , por exemplo,
para o grafo completo K4 representado como um quadrado com diagonais o complemento do
quadrado é o par das diagonais
7. EXERCÍCIOS 87
(a) (b)
|E(G)| = |V (G)| + 2.
350
240 220
120
330
180 240
270 320
280
90
200 300
280
Ordenação de um vector
i := 1; j := n;
while i < j do begin
l := (i + j) div 2;
if K(l) = C then begin
i := l; j := l
end;
if K(l) < C then
i := l + 1
else
j := l − 1
end
90
2. ORDENAÇÃO DE UM VECTOR. COMPLEXIDADE ESPACIAL 91
2.2 Quicksort
A ideia do algoritmo é conseguir a uma partição do vector (a1 , . . . , an ) em
duas partes de modo que cada elemento em primeira parte não é maior do que
cada elemento da segunda parte. Alem de mais temos que fazer isto sem usar
a memoria complementar. Claro que é melhor dividir em partes possivelmente
iguais. Depois de realizar a partição é suficiente ordenar cada parte usando o
mesmo algoritmo. Então vamos ter um algoritmo recursivo:
2. ORDENAÇÃO DE UM VECTOR. COMPLEXIDADE ESPACIAL 93
f (n) = n − 1 + f (m) + f (n − m)
onde o valor m ∈ {1, . . . , n − 1} . No pior caso pode ser por exemplo sempre
m = 1 e f (n) = n − 1 + f (1) + f (n − 1) = n − 1 + f (n − 1) . Daqui
coincide com a complexidade do algoritmo Merge sort. Daqui claro que o pro-
blema principal é construir um algoritmo ’partição’ para partir em duas partes
possivelmente iguais. Mas isto depende de escolha de um elemento x que divide
o vector. À esquerda dispomos todos os elementos menores do x e à direita os
elementos maiores. Um tal algoritmo é representado abaixo:
j:=j-1;
{ K(j) <= x <= K(i) }
if i<=j then begin
troca(i,j); { K(i) <= x <= K(j) }
i:=i+1; j:=j-1; { K(i-1) <= x <= K(j+1) }
end;
end;
end;
h ≥ ⌈log2 n!⌉ .
3 Exercícios
1. Usando a indução matemática demonstre que no algoritmo Binary Search
6.1 para procura binária
f (n) = ⌊log2 n⌋
for i := n downto 2 do
for j := 1 to i − 1 do
if a[j] > a[j + 1] then
Permutar (a[j], a[j + 1])
Recursividade geral
95
96 CAPÍTULO 7. RECURSIVIDADE GERAL
A condição (R) contem uma regra de construção que serve para construir
elementos do conjunto S a partir dos elementos já construídos. Mas a regra
não permite verificar se um número natural dado pertence ao conjunto S .
Consideremos uma forma inversa da (R) que se pode usar para verificar
isso:
(R’) n ∈ S se n/2 ∈ S .
Claro que esta condição vale a pena aplicar só para os números n pares. Então,
temos a segunda forma da definição do conjunto S :
Um número natural n ∈ S num dos dois casos:
(B) n = 1 ou
(R’) n é par e n/2 ∈ S .
Mas se n for ímpar e n 6= 1 então n ∈
/ S!
Para verificar se n ∈ S por exemplo para o número n = 12 segundo (R)
precisamos provar o número n1 = 6 depois n2 = 3 que dá resultado n2 ∈
/S e
portanto n1 , n ∈
/S.
Notemos que usando a indução matemática pode-se demonstrar que
S ⊃ {2m : m ∈ Z+ }.
etc. Claro que não é possível construir desta maneira nenhuma palavra que
começa com letra b .
Agora consideremos uma forma inversa para verificar se uma palavra de Σ∗
pertence ao conjunto M : uma palavra s ∈ M num dos casos seguintes
(B) s = a
(R’) 1. s = as′ b e s′ ∈ M
1. CONCEITO GERAL DA DEFINIÇÃO RECURSIVA 97
2. s = as′ e s′ ∈ M
Mas se s começa com b , s ∈
/M!
As duas definições consideradas são recursivas por motivo seguinte. Para
verificar se um objecto é um elemento do conjunto definido é preciso chamar o
mesmo procedimento para um ou vários objectos da mesma espécie. Notemos
que as definições têm as duas formas. A primeira, forma de construção, permite
construir elementos do conjunto, mas a segunda permite verificar se um objecto
pertence ao conjunto definido ou não. A segunda vamos chamar forma inversa
ou forma de verificação.
1 → 3 → 9 → 4 → 12
Claro que esta definição não é determinada unicamente (não satisfaz a con-
dição DU )
100 CAPÍTULO 7. RECURSIVIDADE GERAL
Sn = Sn−1 ∪ Tn
Consideremos a proposição:
Claro que suficiente demonstrar que M (n) é verdadeiro qualquer que seja
n ∈ {0, 1, 2, . . .} . Para isso consideremos a indução. Se n = 0 a proposição
M (0) é verdadeira, porque P (s) é verdadeira para s ∈ S0 = X . Demonstre-
mos a implicação
M (k) → M (k + 1).
Seja s ∈ Sk+1 = Sk ∪ Tk+1 . Se s ∈ Sk , P (s) é verdadeira segundo a suposição
sobre M (k) . Se s ∈ Tk+1 ,
s = r(s1 , . . . , sm )
S ⊂ TP
Base 1 = 20 é verdadeiro.
Parte recursiva Conforme a regra x = 2n, n ∈ S . Segundo a suposição
n = 2m o elemento x = 2 · 2m = 2m+1 também tem forma da potência
de expoente inteira m + 1 com base 2 .
ω = (a1 , a2 , . . . , an )
ou mais geral
f (s) = Φ(f (s1 ), . . . , f (sm ), s1 , . . . , sm ).
Em palavras, o valor da função determina-se a partir dos valores da mesma
função sobre os elementos s1 , . . . , sm e provavelmente usando os próprios ele-
mentos.
• σ(1) = 1
• se x ∈ S , σ(2x) = σ(x) + 2x
Verifique que σ(x) = 2x − 1 .
Exemplo 7.12. Consideremos a definição do conjunto Σ∗ das sucessões de sím-
bolos ou palavras de um alfabeto (um conjunto finito) Σ .
(B) λ ∈ Σ∗ onde λ é palavra vazia
(R) Se ω ∈ Σ∗ e x ∈ Σ então ωx ∈ Σ∗
As letras ω e x são variáveis e servem para indicar a regra, ωx é uma conca-
tenação de uma palavra ω ∈ Σ∗ e uma letra x ∈ Σ .
Determinemos o comprimento l(ω) de uma palavra ω ∈ Σ∗ por meio da
definição:
• l(λ) = 0
• se ω ∈ Σ∗ e x ∈ Σ então l(ωx) = l(ω) + 1
A cada uma das regras da definição do conjunto corresponde uma relação
na definição de uma função. Por exemplo, consideremos mais uma definição
recursiva de um conjunto de números naturais A ⊂ N .
Exemplo 7.13. Dada uma definição de um conjunto A :
(B) 1 ∈ A
(R) Se x ∈ A então 2x ∈ A e 2x + 1 ∈ A
Qualquer função f : A → B que corresponde à definição deve ter a forma
• f (1) = . . .
• se x ∈ A então f (2x) = Φ(f (x)) e f (2x + 1) = Ψ(f (x))
Aqui Φ(f (x)) e Ψ(f (x)) são funções dadas que permitem encontrar valores a
partir do valor f (x) . Por exemplo
• f (1) = 1
• se x ∈ A então f (2x) = f (x) e f (2x + 1) = f (x) + 1
Exemplos de cálculo: f (2) = f (1) = 1 , f (5) = f (2) + 1 = 2 , f (11) = f (5) +
1 = 3.
É cómodo usar a forma inversa da definição do conjunto para definir funções.
No último exemplo a função f pode ser definida de maneira seguinte
• f (1) = 1
• f (x) = f (x/2) se x é par, e f (x) = f ( x−1
2 ) + 1 se x é ímpar
ou
(a, b, c), (a, d, e), (f, (a, b, c), d), (f, (a, b, c), (a, d, e)), (f, ·, (a, d, e)), . . .
Vamos chamar o primeiro elemento do terno (r, T1 , T2 ) por raiz, segundo por
sub B -objecto esquerdo e terceiro por sub B -objecto direito. Por exemplo no
B -objecto (f, (a, b, c), d) a raiz é f , o sub B -objecto esquerdo é (a, b, c) e o
sub B -objecto direito é d . O símbolo vazio · serve para indicar que o sub B -
objecto respectivo não é apresentado (é ausente).
1. CONCEITO GERAL DA DEFINIÇÃO RECURSIVA 105
Árvores binárias
Aqui consideremos uma definição recursiva de árvores binárias que não utiliza
B -objectos. É cómodo introduzir previamente uma construção que vamos cha-
mar construção de ligamento de dois grafos. Sejam G e H dois grafos com
conjuntos V (G) ∩ V (H) = ∅ disjuntos e g ∈ G , h ∈ H dois vértices marca-
dos. Então temos os dois grafos (g, G) e (h, H) com vértices marcados. Para
simplicidade vamos omitir o vértice marcado e escrever G e H se está claro
que vértice está marcado.
Definição 7.5 (Construção de ligamento de dois grafos). Diz-se que o grafo
T = (V, E, γ)
com vértice marcado r é obtido por meio da construção de ligamento dos grafos
(veja a figura 7.1) com vértices marcados (g, G) e (h, H) e do elemento r se:
1. r ∈ / V (H) , V (G) ∩ V (H) = ∅ ,
/ V (G), r ∈
2. V = V (G) ∪ V (H) ∪ {r} ,
3. E = E(G) ∪ E(H) ∪ {e1 , e2 } , onde o arco e1 liga r com g , e2 liga r
com h .
O vértice r é o vértice marcado do grafo R .
É cómodo introduzir a notação
ou simplesmente
T = lig(r, G, H). (7.6)
Nota 2. Os subgrafos G e H vamos chamar subgrafo esquerdo e subgrafo
direito respectivamente e usar a notação
lig(r, G, H)
r
e1 e2
g h
G H
2
3
4 5
6 7
Para formar uma definição de árvores binárias que não são necessariamente
regulares e realizar isto de maneira mais simples vamos considerar árvores vazias.
Árvores vazias vamos usar para indicar faltas de uma (ou duas) das subárvo-
res. Designemos árvore vazia pelo símbolo nil . Temos que mudar também o
conteúdo da operação lig(r, G, H) . Por exemplo, no caso G = nil , o grafo
lig(r, nil, H) não tem arco que ligue o r com vértice não existente do grafo nil .
Vamos ter a seguinte definição
Definição 7.7 (Árvores binárias). Defina-se o conjunto Ab :
(B) nil ∈ Ab ,
(R) Se G, H ∈ Ab , então T = lig(r, G, H) ∈ Ab .
1 mais precisamente, se (g, G), (h, H) ∈ Areg então (r, T ) = lig(r, (g, G), (h, H)) ∈ Areg
1. CONCEITO GERAL DA DEFINIÇÃO RECURSIVA 107
G1 = (V1 , E1 , γ1 ), . . . , Gk = (Vk , Ek , γk )
lig(r, G1 , G1 , G3 )
r
e1 e3
r1 e2 r3
r2
G1 G3
G2
e de um elemento r se:
[
1. Os conjuntos V1 , . . . , Vk são disjuntos e r ∈
/ Vi
i
2. V = V1 ∪ . . . ∪ Vk ∪ {r} , e
3. E = E1 ∪ . . . ∪ Ek ∪ {e1 , . . . , ek } , onde o arco ei liga os vértices r e ri ,
isto é, γ(ei ) = (r, ri ) .
ou
G = lig(r, G1 , G2 , . . . , Gk ) (7.8)
Usando esta operação de ligação podemos dar uma definição recursiva do
conjunto Araiz de árvores com raiz :
108 CAPÍTULO 7. RECURSIVIDADE GERAL
T = lig(r, T1 , T2 , . . . , Tk )
então T ∈ Araiz .
Uma árvore obtida por meio da construção de ligamento veja na figura 7.4:
T = lig(r, T1 , T2 , T3 )
onde
T1 = lig(r1 , ⊙ a, lig(b, ⊙ c, ⊙ d)),
T2 = lig(r2 , lig(e, ⊙ f )),
T3 = lig(r3 , ⊙ g, ⊙ h, ⊙ i)
r1 r3
r2
2 Algoritmos recursivos
Usando as definições recursivas pode-se construir algoritmos recursivos. Vamos
seguir ao esquema
A forma inversa:
f (1) = 1,
f (n) = nf (n − 1), se n ∈ N e n > 1.
Para calcular esta função vamos ter algoritmo recursivo (função) na língua
de programação Pascal
Function f(n: integer): integer;
begin
if n=1 then
f:=1
else
f:=n*f(n-1)
End;
Nota importante: o conjunto N é determinado unicamente, isto é, qualquer
elemento tem definição única. Isto permite dar definição correta para função
f (n) . O elemento n tem único elemento n − 1 a partir do qual n pode ser
derivado: n − 1 → n .
110 CAPÍTULO 7. RECURSIVIDADE GERAL
A forma inversa:
h(⊙ x) = 0,
h(A) = 1 + max{h(esq(A)), h(dir(A))}
Figura 7.6: Algoritmo para encontrar altura de uma árvore binária regular
2.2 Prova
Consideremos uma definição recursiva e o problema de prova se um elemento s
pertence ao conjunto S , isto é, se s satisfaz à definição recursiva. A distinção
principal do problema de prova e do cálculo de uma função consiste em domínio.
Cálculo de uma função só pode ser considerado sobre o conjunto S definido
recursivamente. Mas aqui o domínio D contém S , D ⊃ S , e é definido de
uma maneira mais simples.
Exemplo 7.19. Consideremos a definição do conjunto S no exemplo 7.1:
(B) 1 ∈ S
(R) Se n ∈ S então 2n ∈ S .
Sempre temos que encontrar uma forma inversa da definição para construir um
algoritmo:
(B) 1 ∈ S
(R’) m ∈ S se m é par e m/2 ∈ S
É importante: na forma inversa são apresentadas as condições suficientes e
necessárias da inclusão m ∈ S . Então, se m 6= 1 e m é ímpar, m ∈ S !
Para verificar se um número n pertence ao conjunto S vejamos uma função
f : S → {0, 1} tal que f (m) = 1 para m ∈ S e f (m) = 0 se m ∈ /S.
Segundo as regras (B) e (R’) teremos
1, se m = 1
f (m) = f (m/2) se m é par
0, se m é ímpar e m 6= 1.
Forma geral
Inicialmente temos um domínio D que contém S . O argumento da função
recursiva é um elemento x do conjunto D . Vamos construir uma função que
produz o valor 1 se o elemento x pertence ao conjunto S e o valor 0 caso
contrário, isto é, x ∈ D \ S .
Notemos que em geral a forma inversa de definição recursiva é a seguinte:
(B) x ∈ X
(R’) x ∈ X se o x pode ser produzido por meio de uma das regras a partir
de elementos x1 , . . . , xk ∈ S
Note que a definição pode ter várias regras e o resultado vai ser positivo se pelo
menos uma das regras apresenta o resultado positivo. Isto podemos chamar por
o princípio de disjunção.
Daqui a prova deve conter as partes:
Base: Se x ∈ X então f (x) = 1 .
Regras: Se x pode ser produzido a partir de vários elementos x1 , . . . , xk e se
f (xi ) = 1 para todos i = 1, . . . , k então f (x) = 1 .
Se o resultado é Negativo: No caso contrário f (x) = 0 .
Exemplo 7.20. No exercício 7.10 (pagina 101) é determinado o conjunto F de
sucessões binárias ω formadas dos 0 e 1 . Vamos construir um algoritmo para
verificar inclusão ω ∈ F i.e. construir uma função: f (ω) = 1 se ω ∈ F e
f (ω) = 0 se ω ∈ / F.
Notemos que da definição podemos concluir que o último algarismo de cada
linha ω ∈ F é 1 . A forma inversa da definição:
2. ALGORITMOS RECURSIVOS 113
(B) 1 ∈ F
(R1) ω ∈ F se ω = ω1 ∗ 1 e ω1 ∈ F
(R2) ω ∈ F se ω = ω2 ∗ 01 e ω2 ∈ F .
A resposta negativa vamos ter se não funcionam todas as três alternativas.
Daqui temos a definição da função f :
• f (ω) = 1 se pelo menos uma das condições é verdadeira:
1. ω = 1
2. ω = ω1 ∗ 1 e f (ω1 ) = 1
3. ω = ω2 ∗ 01 e f (ω) = 1
• f (ω) = 0 no caso contrário
Mas para optimizar o algoritmo notemos que se ω termina por 0 ou ω = λ
(sucessão vazia) então nenhum dos primeiros três casos não serve. Se ω = ω1 ∗ 0
ou ω = λ , f (ω) = 0 .
Agora é fácil construir o algoritmo correspondente em Pascal (com exemplo
de uma chamada):
end;
114 CAPÍTULO 7. RECURSIVIDADE GERAL
B = B(λ) (7.9)
[
B(ω) = B(ω ∗ 0) B(ω ∗ 1). (7.10)
Bn = Bn (λ) (7.11)
Bn (ω) = {ω},
se length(ω) = n,
Bn (ω) = ∅, se length(ω) > n, (7.12)
S
Bn (ω) = Bn (ω ∗ 0) Bn (ω ∗ 1), no caso contrário.
F = F ((1))
F (ω) = F (ω ∗ 1) ∪ F (ω ∗ 01).
const n=6;
procedure Fib(om: string);
begin
if length(om)=n then
writeln(om)
else if length(om)<n then
begin
Fib(om+’1’);
Fib(om+’01’)
end
end;
Begin
Fib(’1’)
End.
v 6= fi e |v − fi | 6= k + 1 − i ∀i = 1, . . . , k
116 CAPÍTULO 7. RECURSIVIDADE GERAL
3 Questões principais
1. Dada uma definicao recursiva de um conjunto A
(a) Usar a definição para construir elementos x ∈ A
(b) Quantos passos é necessário para construir?
(c) Achar o conjunto T1 (veja a demonstração do teorema 7.1), o con-
junto T2 , . . .
(d) Achar o conjunto A (achar uma descrição directa) se for possível
2. Construir uma forma inversa (forma de verificação) para uma definição
recursiva. Usar a forma obtida para demonstrar que x ∈ A ou x ∈ / A.
Verificar se a definição dada é determinada unicamente?
4. EXERCÍCIOS 117
4 Exercícios
Definições recursivas de conjuntos. Funções
1. Temos a definição recursiva de um conjunto A ⊂ N :
(B) 1 ∈ A
(R) Se x ∈ A então x + 4 ∈ A .
2. Consideremos a definição
(B) 2, 3 ∈ F
(R) Se x, y ∈ F então xy ∈ F .
∀((m, n) ∈ N × N )P (m, n)
• f (λ) = 0
• se s ∈ S então f (as) = f (s) + 1 e f (sb) = 2f (s)
Vamos experimentar:
Esta ambiguidade mostra que para definir funções temos de usar defini-
ções determinadas unicamente. Consideremos outra tentativa definir uma
função conforme a segunda definição do mesmo exercício.
• f (λ) = 0
• se s ∈ S então f (as) = f (s) + 1 e se a primeira letra de s não é
letra a (ou s é a palavra vazia λ ) então f (bs) = 2f (s) .
Neste caso temos único valor para f (ab) = f (b) + 1 = 2f (λ) + 1 = 1 .
15. Repetir o exercício 13 para o subconjunto T de sucessões que têm uma e
só uma letra a .
16. Seja Σ = {a, b} e um subconjunto B ⊂ Σ é definido recursivamente
(B) a e b ∈ B ;
(R) w ∈ B =⇒ abw e baw ∈ B .
f (m, 0) = f (0, n) = 1,
f (m, n) = f (m − 1, n) + f (m, n − 1).
Calcular f (2, 3) .
Usando o princípio generalizado da indução matemática demonstrar
que
m n
f (m, n) = Cm+n = Cm+n .
19. (a) Dar uma definição recursiva para a classe de árvores m -árias regu-
lares
(b) Fazer o mesmo para as árvores m -árias completas
f (λ) = 0,
f (0ω1) = f (ω), f (ω1 ω2 ) = f (ω1 ) + f (ω2 ) + 1
2 Definição: β é uma parte inicial da α se α = βγ para uma γ , γ pode ser e linha vazia
122 CAPÍTULO 7. RECURSIVIDADE GERAL
Φ(1) = 1,
Φ(2n) = Φ(n), Φ(2n + 1) = Φ(n) + Φ(n + 1)
r(a) = a, r(b) = b
r(aω) = r(ω) ∗ a, r(bω) = r(ω) ∗ b
Algoritmos recursivos
1. Construir uma algoritmo recursivo para calcular a função
Recursividade e árvores
v1
v2 v3 v4
v5 v6 v7 v8
124
2. PERCURSO DE ÁRVORE BINÁRIA 125
raiz r pode ser obtida através da operação de ligamento de árvores com raízes
(r1 , T1 ), . . . , (rm , Tm ) , é possível reduzir o problema dada aos mesmos proble-
mas para subárvores. Designemos as subárvores como
Algoritmo PREORDER que podemos ver na figura 8.2 realiza o percurso para
uma árvore A . Sob a chamada visitar(x) subentende-se qualquer operação
aplicada ao vértice x . No nosso caso visitar(x) significa: adicionar o vértice
x no fim da lista. A função raiz(A) devolve a raiz da árvore A . Seja ns(A)
o número das subárvores A1 , . . . , Ans(A) da árvore A . Note que se a árvore A
tem único vértice, o número das subárvores ns(A) = 0 .
Relativamente a outros ordens veja o exercício 1.
3 Fórmulas binárias
3.1 Fórmulas bem formadas
Há um vínculo entre árvores binárias e fórmulas binárias. Pode-se para cada
fórmula binária formar uma árvore binária de maneira única. Por exemplo a
expressão algébrica
(x − 4) ∗ 2 − (y + 2)/3
3. FÓRMULAS BINÁRIAS 127
∗ /
− +
2 3
x 4 y 2
x, 4, −, 2, ∗, y, 2, +, 3, /, −
Omitindo as vírgulas vamos ter uma fórmula na forma chamada forma polaca
inversa ou forma posfixa ou sufixa. A seguinte definição serve para obter o
conjunto Fpinv fórmulas em forma polaca inversa.
Definição 8.3. Fórmulas na forma polaca inversa (ou forma posfixa)
(B) As variáveis x, y, z, . . . e constantes são fórmulas, i.e., x, y, z, . . . ∈ Fpinv
(R) Se F e G são fórmulas então F G+, F G−, F G∗ e F G/ ∈ Fpinv .
Para calcular uma fórmula representada na forma prefixa ou na forma posfixa
é preciso verificar se as definições dos conjuntos Fp ou Fpinv determinam
as fórmulas de maneira única. Neste caso qualquer função recursiva sobre os
conjuntos pode ser definida correctamente.
Concederemos a definição do conjunto Fp . Previamente estabelecemos as
duas propriedades características dos elementos do conjunto.
Lema 8.1. Sejam c(F ) e z(F ) os números de letras e das operações da F
respectivamente. Seja
index(F ) = z(F ) − c(F ). (8.1)
Para qualquer fórmula F ∈ Fp temos
4 7
9 7
2 6
W (T ) = 4 · 1 + 7 · 1 + 9 · 2 + 7 · 2 + 2 · 3 + 6 · 3.
onde A′ = lig(f1 + f2 , A1 , A2 ) .
Teorema 8.3 (Huffman). O algoritmo de Huffman constrói uma árvore mínima
binária.
Demonstração. Demonstração pode ser dada usando indução. Suponhamos que
para a lista f1 +f2 , f3 , . . . , fn o algoritmo apresenta uma árvore mínima T com
peso W (T ) . Depois de substituir f1 + f2 por árvore lig(f1 + f2 , ⊙ f1 , ⊙ f2 )
vamos ter a árvore com o peso
W (T ) + f1 + f2 . (8.5)
W (T ) ≤ W (T ′ ), W (Tm ) = W (T ′ ) + f1 + f2 .
Destas relações e da relação (8.5) segue que W (T )+f1 +f2 é o mínimo peso.
Exemplo 8.3. Construir uma mínima árvore binária para a lista
78
38 40
15 23
9
6 10 13
4 5
0 1
f (40)
0 1
0 1 0 1
a(4) b(5)
a 0010
b 0011
c 000
d 010
e 011
f 1
5. EXERCÍCIOS 133
5 Exercícios
1. Construir o algoritmo para percorrer uma árvore com raiz com condição
que todos os vértices devem seguir depois dos seus filhos. Por exemplo
para árvore na figura 8.1 deve ser obtida a lista
v9 , v10 , v5 , v11 , v6 , v2 , v12 , v13 , v7 , v3 , v8 , v4 , v1 .
2. Desenhe uma árvore com raiz e aplique a esta árvore os algoritmos PRE-
ORDER e POSTORDER
3. Compor os algoritmos INORDER e POSTORDER para árvores binárias
4. Realizar o algoritmo
11. Seja F uma fórmula na forma posfixa que satisfaz à definição 8.3. Vamos
usar a notação c(F ) e z(F ) do exercício 10, mas neste caso z(F ) é o
número das operações +, −, ∗, / .
(a) Demonstre que c(F ) − z(F ) = 1
(b) Seja F ′ qualquer parte inicial da F , isto é, F ′ começa com o pri-
meiro símbolo da F . Por exemplo, para F = abc + −a∗ a parte
inicial é uma das linhas a , ab , abc , abc+ , abc + − , abc + −a ou
toda a fórmula F .
Demonstre que c(F ′ ) − z(F ′ ) ≥ 1
5. EXERCÍCIOS 135
17. Dada uma árvore binária A e uma lista L de símbolos. É preciso marcar
os vértices usando os símbolos da lista. Construir o algoritmo.
Digrafos, redes
1 Introdução
Lembramos a definição de digrafo ou grafo orientado.
indeg(v) = outdeg(v)
137
138 CAPÍTULO 9. DIGRAFOS, REDES
3
8
v1 2 1 5 4
7
9 9
v3 4 v5 v7
L
W (i1 , k1 )
k1
i1
D i1
W (i, k)
Di i k
Teorema 9.4. Se os pesos dos arcos do grafo G são não negativos então o
algoritmo de Dijkstra termina com D(j) = W ∗ (1, j), j = 2, . . . , n .
2. DIGRAFOS COM PESOS 141
L D2 D3 D4 D5 D6 D7 Caminhos encontrados
∅ 3 9 ∞ ∞ ∞ ∞ (estado inicial)
{2} 3 9 10 4 ∞ ∞ 1, 2, 4 e 1, 2, 5
{2, 5} 3 8 9 4 13 ∞ 1, 2, 5, 3 e 1, 2, 5, 6
{2, 5, 3} 3 8 9 4 13 ∞
{2, 5, 3, 4} 3 8 9 4 11 17 1, 2, 5, 4, 6 e 1, 2, 5, 4, 7
{2, 5, 3, 4, 6} 3 8 9 4 11 15 1, 2, 5, 4, 6, 7
v2 7 v4 2 v6
3
8
v1 2 1 5 4
7
9 9
v3 4 v5 v7
v2 7 v4 2 v6 v2 7 v4 2 v6
3 3
8 8
v1 2 1 5 4 v1 2 1 5 4
7 7
9 9 9 9
v3 4 v5 v7 v3 4 v5 v7
v2 7 v4 2 v6 v2 7 v4 2 v6
3 3
8 8
v1 2 1 5 4 v1 2 1 5 4
7 7
9 9 9 9
v3 4 v5 v7 v3 4 v5 v7
v2 7 v4 2 v6 v2 7 v4 2 v6
3 3
8 8
v1 2 1 5 4 v1 2 1 5 4
7 7
9 9 9 9
v3 4 v5 v7 v3 4 v5 v7
e = (Te, r) )
ou se designarmos a árvore com raiz por uma letra R = (T, r) (e R
então
Re = Add(R, v, u),
(T, r) (Te, r)
r r
v v
Definição 9.3. Fluxo na rede G é uma função não negativa dada sobre o con-
junto dos arcos E(G) , i.e. f (i, j) (arco com extremidades i e j ) obedecendo
as condições:
1. fij ≤ cij , i.e. o fluxo não excede as capacidades
2. Para cada vértice j diferente da fonte e do ocaso
X X
fij = fjk (9.5)
i k
i.e. o fluxo que entra para o vértice vj coincide com o fluxo que sai do
vértice (condição de conservação do fluxo)
144 CAPÍTULO 9. DIGRAFOS, REDES
4, 4 d
b
3, 1 5, 4
z
3, 3
a
5, 5 8, 2
g
c 7, 5
Daqui logo
X X X
F = fij − fji ≤ cij = C. (9.9)
i∈V ′ ,j∈V ′′ i∈V ′ ,j∈V ′′ i∈V ′ ,j∈V ′′
Então, fluxo arbitrário não pode ser superior do que capacidade de corte qual-
quer: F ≤ C . Isto pode ser interpretado, se considerar a rede como rede
de transmissão de um produto. Cada unidade do produto deve percorrer um
caminho da fonte para o ocaso. Este caminho contem pelo menos um arco
(i, j), i ∈ V ′ , j ∈ V ′′ .
Para encontrar uma sucessão desse tipo serve o procedimento Marcação (veja o
algoritmo 9.3). A partir da fonte a realiza-se marcação de vértices adjacentes
tais que ate esses vértices existe uma sucessão de arcos para aumentar o fluxo.
Se atingir desta maneira o vértice z , aparece possibilidade aumentar o fluxo.
O resultado do algoritmo Marcação (algoritmo 9.3) é um conjunto V ∈ V (G)
que contem os vértices v ∈ V marcados por pares (vp , δ) onde vp é o vértice
que precede o vértice v , δ é o valor em que pode ser aumentado o fluxo. Se o
z ∈ V existe uma sucessão de vértices do a para o z que usa-se para aumentar
o fluxo. Por exemplo, consideremos a marcação para a situação na rede sobre a
figura 9.7.
isto é, o fluxo coincide com a capacidade do corte (V, V (G) \ V ) . Mas para
qualquer fluxo e qualquer corte temos F ≤ C , veja (9.9). Daqui o F é o fluxo
máximo e (V, V (G) \ V ) é o corte mínimo.
Capítulo 10
Linguagens e gramáticas.
Autómatos finitos
1 Linguagens e gramáticas
Linguagens formais têm estrutura bastante simples e têm aplicações em forma-
ção de linguagens de programação. Linguagem formal introduzem-se por meio
de uma gramática.
G = (N, T, P, σ ∗ )
onde
• um subconjunto T ⊂ A ,
• N =A\T ,
• P ⊂ (A∗ \ T ∗ ) × A∗ é um subconjunto finito,
• σ ∗ ∈ N é um elemento certo (marcado).
O conjunto T ⊂ A chama-se o conjunto de símbolos terminais, N ⊂ A é um
conjunto de símbolos não terminais, P é o conjunto de regras de derivação ou
produção, σ ∗ é o símbolo inicial.
148
1. LINGUAGENS E GRAMÁTICAS 149
1.2 Derivação
O conjunto P das regras vamos usar para derivar (produzir) as palavras da
linguagem L ⊂ A∗ i.e. linhas finitas de símbolos de A . A partir do elemento
inicial σ ∗ podem ser derivadas diferentes palavras conforme à definição
Definição 10.3. Seja G = (N, T, P, σ ∗ ) uma gramática. Se α → β é uma
regra de derivação e xαy ∈ A∗ então diz-se que xβy é derivável directamente
de xαy e escrever
xαy ⊢ xβy.
Se αi ∈ A para i = 1, . . . , n e αi+1 é derivável de αi (i = 1, . . . , n − 1) então
diz-se que αn é derivável de α1 e escreve-se
α1 ⊢ αn .
A definição 10.4 é caso particular da definição geral 7.1 para definir conjuntos
recursivamente. De facto o conjunto X na definição 7.1 neste caso consiste de
um só elemento σ ∗ e qualquer elemento de L(G) pode ser obtido por meio de
regras certas a partir de outros elementos obtidos antes (definição 10.3).
Exemplo 10.3. Seja G gramática no exemplo 10.2. Vamos analisar a linguagem
L(G) .
Por meio de um passo (directamente do σ ∗ ) é possível obter 2 elementos
só: bσ ∗ e aS . Notemos que cada uma destas palavras não é de T ∗ . Por meio
de 2 passos vamos ter
bbσ ∗ , baS e abS, ab.
Apenas a última linha ab é linha terminal, i.e., ab pertence ao conjunto T ∗ .
Continuação desta investigação mostra que L(G) consiste de todas as linhas
da forma bn abm onde n ≥ 0, m ≥ 1 e nada mais:
L(G) = {bn abm : n ≥ 0, m ≥ 1}.
Aqui bn é designação para a palavra de n letras b :
bb . . . }b
| {z .
n elementos
Demonstração. Vamos usar o princípio generalizado da indução matemática.
Demonstremos que cada linha l obtida tem forma
l = bn σ ∗ ou l = bn abm S̃ (10.1)
onde S̃ = S or S̃ = λ . Além disso se S̃ = λ então m ≥ 1 .
Base. É evidente que o símbolo σ ∗ obedece à condição dada.
Indução. Seja l = bn σ ∗ . As linhas bn+1 σ ∗ e bn aS que podem ser derivadas
da l directamente têm a forma (10.1). Agora seja l = bn abm S̃ . Caso S̃ = λ
a linha l é linha terminal e obedece a condição (10.1). Caso S̃ = S temos
l ⊢ bn abm+1 S, l ⊢ bn abm+1 . As últimas linhas satisfazem à condição (10.1).
As vezes usa-se uma notação mais curta para apresentar as regras, a notação
em forma de Backus – Naur. Por exemplo, várias regras de forma
A → α1 , A → α2 , . . . , A → αn
usa-se a forma
A ::= α1 |α2 | . . . |αn .
Exemplo 10.4. Um número inteiro é definido como uma sucessão de algarismos
que pode ter o sinal ( + ou − ) a frente. A seguir temos uma gramática para
isso
1. N = {D, I, S, U } , D é (digit) algarismo, I é inteiro, S é (signed integer)
inteiro com sinal, U é (unsigned integer) inteiro sem sinal
2. T = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, −}
D ::= 0|1|2|3|4|5|6|7|8|9
I ::= S|U
S ::= +U | − U
U ::= D|DU
I é o símbolo inicial.
2. CLASSIFICAÇÃO 151
2 Classificação
Definição 10.5 (Gramáticas regulares, livres de contexto, contexto sensíveis).
Consideremos os três casos abaixo
(A) Se cada regra de produção tem forma
A→δ
A → α ou A → αB
N = {σ ∗ , R, U, V }, T = {a, b},
RB → RS, RS → BS, BS → BR
o símbolo inicial é σ ∗ .
Notemos que esta gramática não é regular mas é livre de contexto. Verifi-
quemos se a linha abbbaabab pertence a L(G) , isto é abbbaabab ∈ L(G) ?
Primeiro consideremos todas as linhas que não contêm símbolos terminais
a, b . Tem-se uma simetria: se uma linha de letras A e B for derivável
de σ ∗ então a linha obtida por meio de troca A → B e B → A é tam-
bém derivável. Consideremos portanto a linha BAB só. Aplicando as regras
A → AB, B → BA é possível obter todas as linhas da forma BAm B n Al B k . . .
onde m ≥ 1, n ≥ 1 e linhas desta forma só (demonstre usando a indução mate-
mática).
Obteremos primeiro a linha ABBAA :
Em cada passo a barra mostra a letra para a qual aplicamos uma das regras.
3 Máquinas finitas
Definição 10.6. Uma máquina finita ou FSM (Finite State Machine) consiste
de
• Um conjunto finito I de símbolos de entrada
• Um conjunto finito O de símbolos de saída
• Um conjunto finito S de estados
• Uma função f : S × I → S que determina estado consequente
• Uma função (de extracção) g : S × I → O
• Um estado inicial σ ∗ ∈ S .
Escrevemos M = (I, O, S, f, g, σ ∗ ) .
Exemplo 10.7. Sejam I = {a, b}, O = {0, 1}, S = {σ0 , σ1 } . Determinemos as
funções f e g :
f (σ0 , a) = σ0 g(σ0 , a) = 0
f (σ0 , b) = σ1 g(σ0 , b) = 1
f (σ1 , a) = σ1 g(σ1 , a) = 1
f (σ1 , b) = σ1 g(σ1 , b) = 0
ou que é o mesmo por meio da tabela
f g
a b a b
σ0 σ0 σ1 0 1
σ1 σ1 σ1 1 0
a/0 b/0
b/1
σ0 σ1
a/1
aababba
0011001.
Estado corrente σ0 σ0 σ0 σ1 σ1 σ1 σ1 σ1
Símbolo de entrada a a b a b b a
Símbolo de saida 0 0 1 1 0 0 1
4 Autómatos finitos
Autómato finito é um caso particular de FSM:
Definição 10.8. Autómato finito é uma máquina finita A = (I, O, S, f, g, σ ∗ )
que satisfaz às condições
154 CAPÍTULO 10. LINGUAGENS E GRAMÁTICAS
b/0 a/1
b a
a/1
a/1 a
σ0 b/0 σ1 σ2 σ0 σ1 a σ2
b
b/0 b
• O = {0, 1}
• Estado corrente determina a última saída.
Os estados para os quais a última saída foi 1 chamam-se estados aceitáveis.
Exemplo 10.9. Consideremos FSM A definida por meio da tabela
f g
a b a b
σ0 σ1 σ0 1 0
σ1 σ2 σ0 1 0
σ2 σ2 σ0 1 0
A = (I, S, f, A, σ ∗ )
consiste de
• Um conjunto finito I de símbolos de entrada
• Um conjunto finito S de estados
• Uma função f : I × S → S
• Um subconjunto A ⊂ S de estados aceitáveis
4. AUTÓMATOS FINITOS 155
a b
b
σ0 σ1 b σ2
a
• Um estado inicial σ ∗ ∈ S
Exemplo 10.10. Consideremos o autómato finito A = (I, S, f, A, σ ∗ ) onde
a b
σ0 σ0 σ1
σ1 σ0 σ2
σ2 σ0 σ2
(a) σ0 = σ ∗
(b) f (σi−1 , xi ) = σi para i = 1, . . . , n
diz-se que a linha α representa o caminho
1 x 2 x x
σ0 −→ σ1 −→ · · · −→
n
σn
b b
a
P I
σ ∗ → bσ ∗ , σ ∗ → aC, C → bC, C → b
b b
a b
σ∗ C F
e
I → b, P →a
respectivamente. A gramática G = (N, T, P, σ ∗ ) com N = {P, I}, σ ∗ = P
vai gerar a linguagem L(G) = Ac(A) . De facto L(G) consiste de palavras
contendo número ímpar de letras a .
158 CAPÍTULO 10. LINGUAGENS E GRAMÁTICAS
N = S, T =I
L(G) = Ac(A).
e
L(G) = Ac(A).
a b
b b
σ∗ {C} {σ ∗ }
a b C ∅ {C, F }
σ∗ C F
F ∅ ∅
Este exemplo mostra que não é suficiente inverter o método do teorema 10.1.
Definição 10.12 (Autómato indeterminado). Autómato finito indeterminado
e consiste de
A
(a) Um conjunto finito I de símbolos de entrada
(b) Um conjunto finito S de estados
(c) Uma função f : S × I → P(S) onde P(S) significa o conjunto de todos
os subconjuntos de S
5. RELAÇÃO ENTRE AUTÓMATOS FINITOS E GRAMÁTICAS 159
I = {a, b}, S = {σ ∗ , C, F }, A = {F },
a b
σ∗ {σ ∗ , C} {D}
C ∅ {C}
D {C, D} ∅
O resultado é apresentado sobre a figura 10.8.
a b a
a a
σ∗ C F
(c) σn ∈ A
vamos chamar α aceitável por A . Designemos Ac(A) o conjunto de todas as
linhas aceitáveis.
Notemos que a sucessão σ0 , . . . , σn e as marcas x0 , . . . , xn dos arcos no
diagrama de transições determinam um caminho (único) no digrafo que apre-
senta o diagrama de transições. Em termos do digrafo pode-se dizer que a linha
α = x1 . . . xn é aceitável se e somente se existe um caminho
1 x 2 x x
σ0 −→ σ1 −→ · · · −→
n
σn
160 CAPÍTULO 10. LINGUAGENS E GRAMÁTICAS
Ac(A′ ) = Ac(A).
Para analisar isso consideremos o problema seguinte. Dada uma linha (pa-
lavra) α = x1 x2 . . . xn , xi ∈ I achar o conjunto de todos os estados atingíveis
usando esta linha α . Um estado σ vai ser atingível se existe pelo menos um
caminho representado pela α do estado inicial para o estado σ , isto é, um
caminho da forma
x x x
σ ∗ −→
1 2
σ1 −→ · · · −→
n
σn , σn = σ.
I=T
S = N ∪ {F } onde F ∈ / N ∪T
(
[ F se σ → x ∈ P ,
f (σ, x) = {σ ′ | σ → xσ ′ ∈ P }
∅ no caso contrário.
a a
σ1 b b
B1 F1
a
a a
a
b a b
σ∗ B2 BA F1
b b
O método considerado no exemplo 10.15 utiliza raciocínio que pode ser cha-
mado uso de informação dos estados. O método serve bom para autómatos
bastante simples.
6 Exercícios
6.1 Gramáticas
Nos exercícios 1-6 determinar se a gramática dada é contexto-sensível, livre de
contexto, regular ou não pertence a nenhuma classe.
1. T = {a, b}, N = {σ ∗ , A} com regras
σ ∗ → bσ ∗ , σ ∗ → aA, A → aσ ∗ , A → bA, A → a, σ ∗ → b
e símbolo inicial σ ∗ .
2. T = {a, b, c}, N = {σ ∗ , A, B} com regras de produção
σ ∗ → AB, AB → BA, A → aA, B → Bb, A → a, B → b
162 CAPÍTULO 10. LINGUAGENS E GRAMÁTICAS
e símbolo inicial σ ∗ .
3. T = {a, b}, N = {σ ∗ , A, B} com regras de produção
e símbolo inicial σ ∗ .
4. T = {a, b, c}, N = {σ ∗ , A, B} com regras de produção
e símbolo inicial σ ∗ .
5. Regras em forma de Backus – Naur
S ::= bS | aA | a
A ::= aS | bB
B ::= bA | aS | b
e símbolo inicial S .
6. T = {a, b}, N = {σ ∗ , A, B} com regras
σ ∗ → AAσ ∗ , AA → B, B → bB, A → a
e símbolo inicial σ ∗ .
Nos exercícios 7–11 mostrar que as linhas abaixo α ∈ L(G) para as gra-
máticas G correspondentes.
7. bbabbab , exercício 1
8. abab , exercício 2
9. aabbaab , exercício 3
10. abbbaabab , exercício 4
11. abaabbabba , exercício 5
Nos exercícios 12–13 caracterizar as gramáticas
12. Seja G a gramática do exercício 1. Mostrar que α ∈ L(G) se e somente
se α é linha não vazia e contém um número par de letras a .
13. Caracterizar L(G) para G do exercício 5.
Solução. Para qualquer l ∈ (T ∪ N )∗ introduzimos a designação na (l)
que é o número das letras a desta linha. Por exemplo na (abbabaa) = 4 .
L(G) consiste de linhas que têm a forma l = l′ b2m onde l′ termina em
a (isto é, l termina em b2m ), m ≥ 0 , e na (l) é um número ímpar.
Indicação. Demonstre que se aplicarmos apenas as regras não terminais
(excepto S → a e B → b ), vamos ter uma linha l que satisfaz a uma
das condições seguintes
6. EXERCÍCIOS 163
Nos exercícios 14-18 formar uma gramática regular que gera as linhas não
vazias com propriedades indicadas.
Nos exercícios 20-21 formar uma gramática livre de contexto que gera as
linhas de letras a e b não vazias com propriedades indicadas.
σ0 ::= aB|bA,
B ::= bσ0 |aBB|b,
A ::= aσ0 |bAA|a,
σ0 ::= aII|bU, I ::= aIII|b|bσ0 , U ::= aI|bD, D ::= a|aσ0 |bU D|bDU
L = {an bn ck : n, k ≥ 1}
é livre de contexto.
6.2 Autómatos
1. Determinar se a linha α = aabaabb é aceitável por autómato no exemplo
10.10 (veja a figura 10.4)?
6. EXERCÍCIOS 165
a a
b
σ∗ F
Solução do exercício 4d
Existe um método que permite construir um autómato directamente. Já sa-
bemos qualquer linha das letras determina um caminho sobre o diagrama do
autómato. Depois de usar uma parte inicial da linha o autómato está numa
posição (num estado), e este estado deve caracterizar a parte inicial indicada da
linha. Por exemplo, consideremos o exercício 4d. Introduzimos a tabela seguinte
das proposições que vamos aplicar a parte inicial da linha:
proposição a linha corrente . . .
B termina em b
BA termina em ba
A termina em a
Cbb contém bb
Cbab contém bab
F estado final, F = Cbb ∧ Cbab
Cada um dos estados pode ser caracterizado por meio das proposições da tabela.
Por exemplo, o estado Cbab ∧ A diz que a parte inicial corrente contém bab e
termina em a .
O resultado veja sobre a figura 10.12:
a b b a
b b a a
σ∗ B Cbb , B Cbb , BA Cbb , A
a b
a
a
b
b a
BA Cbab , B Cbab , A F b
b
a
Solução do exercício 4h
Solução do exercício 4h. Consideremos a negação da proposição, i.e., uma linha
contém ba e contém bbb . Seja σ0 o símbolo inicial. A seguir são as regras de
uma gramática que é equivalente a uma gramática regular
B ::= aB|bB|bbb|bbbF
Esta gramática permite construir uma autómato indeterminado. O autómato
pode ser invertido no sentido de fazer aceitável cada um de estados não aceitáveis
e vice versa.
Bibliografia
168