You are on page 1of 167

Universidade Eduardo Mondlane

ELEMENTOS DE
MATEMTICA DISCRETA
Manual Terico  Prtico

Sergey LABVSKIY

Departamento de Matemtica e Informtica


Maputo 2005

Introduo
A investigao de diferentes problemas em cincia acha a sua reexo em construo de diferentes modelos matemticos. Em fsica e engenharia usam-se
diferentes modelos principalmente na base dos resultados de Anlise Matemtica. Mas problemas de informtica precisam de modelos matemticos de outra
natureza. A distino principal consiste no seguinte: o objectivo de Anlise
Matemtica investigao de processos contnuos, mas informtica estuda processos discretos. Um processo discreto resultado de realizao de um algoritmo.
Investigao de algoritmos o assunto principal da Matemtica Discreta.
Tanto Matemtica Discreta como Anlise Matemtica tm na sua base Teoria de conjuntos, Lgica matemtica e teoria de algoritmos, lgebra abstracta.
Por causa de natureza de conjuntos discretos o captulo Anlise combinatria
faz uma parte importante de Matemtica Discreta.
Neste manual so apresentados elementos dos tpicos principais de Matemtica Discreta:
teoria de conjuntos
anlise combinatria
induo e recursividade
teoria de grafos e algoritmos sobre grafos
autmatos nitos, gramticas e linguagens

O manual reelaborao do manual do autor [4]. Na preparao do presente


manual particularmente foram utilizados diferentes exerccios e matria terica
dos livros [3] e [2].

Contedo
1 Conjuntos, relaes e grafos
1

Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
Mtodos de representao de conjuntos . . . . . .
1.2
Conjuntos frequentemente usados . . . . . . . . . .
1.3
Conjunto de conjuntos . . . . . . . . . . . . . . . .
1.4
Operaes sobre conjuntos . . . . . . . . . . . . . .
1.5
Leis de lgebra de conjuntos . . . . . . . . . . . . .
1.6
Produto directo (cartesiano) . . . . . . . . . . . . .
1.7
Funes . . . . . . . . . . . . . . . . . . . . . . . .
Relaes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
Conceito de relao . . . . . . . . . . . . . . . . .
2.2
Representao geomtrica de relao. Conceito de
orientado . . . . . . . . . . . . . . . . . . . . . . .
2.3
Representao de grafos. Matriz de adjacncia . .
2.4
Relao de equivalncia . . . . . . . . . . . . . . .
2.5
Partio de um conjunto em classes . . . . . . . .
Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1
Algoritmos cclicos . . . . . . . . . . . . . . . . . .
3.2
Ciclos duplos e mltiplos . . . . . . . . . . . . . .
3.3
Complexidade de algoritmos . . . . . . . . . . . . .
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1
Lgica . . . . . . . . . . . . . . . . . . . . . . . . .
4.2
Conjuntos e funes . . . . . . . . . . . . . . . . .
4.3
Relaes . . . . . . . . . . . . . . . . . . . . . . . .

2 Contagem. Anlise combinatria


1

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
grafo
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

Princpios bsicos . . . . . . . . . . . . . . . . . . . . . . . .
1.1
Regra de unio . . . . . . . . . . . . . . . . . . . . .
1.2
Princpio do produto . . . . . . . . . . . . . . . . . .
Permutaes, subconjuntos e distribuies . . . . . . . . . .
r -permutaes (arranjos) . . . . . . . . . . . . . . .
2.1
2.2
Nmero de funes . . . . . . . . . . . . . . . . . . .
2.3
Nmero de subconjuntos. Coecientes binomiais . .
2.4
Teorema binomial, propriedades de coecientes . . .
2.5
Distribuio de n objectos em k caixas diferentes
Permutaes com repeties. Parties . . . . . . . . . . . .
3.1
Permutaes com repeties . . . . . . . . . . . . . .
3.2
Parties de um conjunto . . . . . . . . . . . . . . .
3

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

7
7
8
8
9
9
10
11
12
12
13
14
14
15
16
16
17
18
21
21
21
22

25

25
25
26
26
26
27
27
28
29
31
31
31

CONTEDO

4
4

Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Induo
1

3
4

Induo matemtica . . . . . . . . . . . . . . . .
1.1
Introduo. Exemplo . . . . . . . . . . . .
1.2
Princpio da induo matemtica . . . . .
1.3
O princpio fraco de induo matemtica
1.4
Princpio de escolha de mnimo elemento .
Denies recursivas . . . . . . . . . . . . . . . .
2.1
Descrio do problema . . . . . . . . . . .
2.2
Denio recursiva . . . . . . . . . . . . .
2.3
Extenso de domnio . . . . . . . . . . . .
2.4
Clculo iterativo. Algoritmos . . . . . . .
2.5
Clculo recursivo . . . . . . . . . . . . . .
2.6
Relaes recorrentes lineares . . . . . . .
Denio recursiva e induo matemtica . . . .
3.1
Demonstrao de proposies . . . . . . .
3.2
Induo com base de vrios elementos . .
Exerccios . . . . . . . . . . . . . . . . . . . . . .
4.1
Induo matemtica . . . . . . . . . . . .
4.2
Denies recursivas . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Grafos . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
Grafo orientado (com direces, digrafo) . .
1.2
Vnculo entre grafo orientado e uma relao
1.3
Grafo no orientado (grafo sem direces) .
1.4
Grau de vrtice. Relao de adjacncia . . .
1.5
Caminhos, ciclos . . . . . . . . . . . . . . .
1.6
Matriz de adjacncia . . . . . . . . . . . . .
1.7
Isomorsmo de grafos . . . . . . . . . . . .
Proposies sobre caminhos e ciclos . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

4 Algoritmos cclicos
1

3
4

Introduo . . . . . . . . . . . . . . . . . . .
1.1
Exemplos . . . . . . . . . . . . . . .
1.2
Ciclo innito. Estado . . . . . . . .
1.3
Ciclo com pre-condio . . . . . . .
1.4
Invariante de ciclo . . . . . . . . . .
1.5
Invariante de ciclo com pre-condio
1.6
Demonstrao que o ciclo termina .
Exemplos de algoritmos . . . . . . . . . . .
2.1
Algoritmo de diviso inteira . . . . .
2.2
Algoritmo de Euclid . . . . . . . . .
2.3
Equao em nmeros inteiros . . . .
Formao de um algoritmo cclico . . . . . .
3.1
Colocao problema . . . . . . . . .
Exerccios . . . . . . . . . . . . . . . . . . .
4.1
Algoritmos cclicos . . . . . . . . . .
4.2
Formao de algoritmo . . . . . . . .

5 Introduo teoria de grafos e rvores


1

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

32

36

36
36
38
39
40
41
41
41
42
42
43
44
45
45
46
47
47
49

54

54
54
55
56
56
58
59
59
59
60
61
63
63
64
64
66

68

68
68
69
69
69
71
71
72
72

CONTEDO
3

5
6
7

Problema de percurso de arcos. Circuito de Euler . . . . . . . . .


3.1
Problema sobre as pontes de Knigsberg . . . . . . . . . .
3.2
Proposies . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3
Algoritmo de Fleury . . . . . . . . . . . . . . . . . . . . .
rvores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1
Denies e teoremas gerais . . . . . . . . . . . . . . . . .
4.2
rvores com raiz . . . . . . . . . . . . . . . . . . . . . . .
4.3
rvore binria . . . . . . . . . . . . . . . . . . . . . . . .
rvores geradoras . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1
Algoritmo de produo duma rvore geradora . . . . . . .
5.2
Grafos com pesos, rvore mnima com pesos . . . . . . . .
Percurso de vrtices. Caminho de Hamilton . . . . . . . . . . . .
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1
Denies de grafos orientado e no orientado, diagrama
de grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2
Grau de vrtice, isomorsmo de grafos . . . . . . . . . . .
7.3
Caminhos e ciclos . . . . . . . . . . . . . . . . . . . . . .
7.4
rvores . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5
Exerccios diferentes . . . . . . . . . . . . . . . . . . . . .
7.6
rvore geradora mnima. Algoritmos de Kruskal e de Prim

6 Ordenao de um vector
1
2

Procura binria em vector ordenado . . . . . . .


Ordenao de um vector. Complexidade espacial
2.1
Ordenao por unio (merge sort) . . . .
2.2
Quicksort . . . . . . . . . . . . . . . . . .
2.3
Avaliao de complexidade de ordenao .
Exerccios . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

Conceito geral da denio recursiva . . . . . . . . . . . . .


1.1
Exemplos preliminares . . . . . . . . . . . . . . . . .
1.2
Denio recursiva de um conjunto . . . . . . . . . .
1.3
Forma inversa. Denies determinadas unicamente
1.4
Princpio generalizado da induo matemtica . . .
1.5
Funes sobre conjuntos dados recursivamente . . .
1.6
rvores binrias e rvores com razes . . . . . . . . .
Algoritmos recursivos . . . . . . . . . . . . . . . . . . . . .
2.1
Calculo de funes dadas recursivamente . . . . . . .
2.2
Prova . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
Percurso dos elementos de um conjunto . . . . . . .
Questes principais . . . . . . . . . . . . . . . . . . . . . . .
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

7 Recursividade geral
1

3
4

8 Recursividade e rvores
1
2

Percurso de rvore com raiz


Percurso de rvore binria .
2.1
Procedimentos . . .
2.2
Notao funcional .
Frmulas binrias . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

74
74
74
74
76
76
77
78
79
79
80
81
82
82
83
84
86
88
89

90

90
91
91
92
94
94

95

95
95
97
98
100
102
104
108
109
111
114
116
117

124

124
125
125
126
126

CONTEDO

3.1
Frmulas bem formadas . . . . . . . . . . . . .
3.2
Notao polaca . . . . . . . . . . . . . . . . . .
3.3
Frmulas do clculo proposicional . . . . . . .
rvore com pesos. Mnima rvore binria . . . . . . .
4.1
Mnima rvore binria. Algoritmo de Human
4.2
Cdigo prexo . . . . . . . . . . . . . . . . . .
4.3
Cdigo mnimo . . . . . . . . . . . . . . . . . .
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

Introduo . . . . . . . . . . . . . . . . . . . . . . . . . .
Digrafos com pesos . . . . . . . . . . . . . . . . . . . . .
2.1
Algoritmo de Dijkstra . . . . . . . . . . . . . . .
2.2
Modicao do algoritmo de Dijkstra . . . . . . .
Redes. Fluxo mximo em rede . . . . . . . . . . . . . .
3.1
Rede. Fluxo. Corte . . . . . . . . . . . . . . . .
3.2
Algoritmo para encontrar uxo mximo em rede

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

9 Digrafos, redes
1
2

10 Linguagens e gramticas
1

2
3
4
5

Linguagens e gramticas . . . . . . . . . . . . . . . . . . . . . . .
1.1
Denio de uma gramtica . . . . . . . . . . . . . . . . .
1.2
Derivao . . . . . . . . . . . . . . . . . . . . . . . . . . .
Classicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mquinas nitas . . . . . . . . . . . . . . . . . . . . . . . . . . .
Autmatos nitos . . . . . . . . . . . . . . . . . . . . . . . . . . .
Relao entre autmatos nitos e gramticas . . . . . . . . . . .
5.1
Gramtica regular determina um diagrama . . . . . . . .
5.2
Autmato determina uma gramtica . . . . . . . . . . . .
5.3
Uma gramtica regular determina um autmato indeterminado . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4
Autmato indeterminado  autmato . . . . . . . . . . .
5.5
Construo directa de autmatos . . . . . . . . . . . . . .
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1
Gramticas . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2
Autmatos . . . . . . . . . . . . . . . . . . . . . . . . . .

126
127
130
130
130
132
133
133

137

137
138
138
141
143
143
145

148

148
148
149
151
152
154
156
156
157

158
160
161
162
162
165

Captulo 1

Conjuntos, relaes e grafos


Este capitulo serve como uma introduo. Os objectivos desta introduo so
conceitos principais da disciplina. Tanto em lgebra, geometria e anlise como
em matemtica discreta o conceito de conjunto forma uma base para todos os
passos em criao da teoria. Mas existe uma distino principal entre conjuntos
que considera Anlise Matemtica e conjuntos que so objectos de Matemtica
Discreta. Quase sempre sero considerados conjuntos nitos. Os conjuntos
innitos tais como o conjunto de todos os nmeros naturais N = {1, 2, . . .}
tambm tm estrutura discreta. Deixemos sem ateno a questo sobre denio
rigorosa de um conjunto discreto.
Neste captulo sero considerados os tpicos principais da teoria de conjuntos
e funes, relaes e grafos, conceito informal de algoritmo e sua complexidade.

1 Conjuntos

1.1 Mtodos de representao de conjuntos


Lista

O primeiro mtodo 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 so pares ordenados de nmeros inteiros.

Lista (algoritmo)
Pode-se usar o smbolo
conjuntos innitos

. . .0 (etc.) para conjuntos de grande volume ou para

N100 = {1, 2, 3, . . . , 100}, D3 = {3, 6, 9, . . .}

Mas este mtodo pressupe um algoritmo de formao de elementos do conjunto.


Por exemplo, para vericar se o nmero 36 pertence ao conjunto D3 ou no,
preciso cumprir vrias adies 3 + 3 = 6, 6 + 3 = 9, 9 + 3 = 12, . . . ate
obter ou no o elemento necessrio. Este exemplo sugere mais um mtodo para
denir um conjunto.
7

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

Propriedade caracterstica
Um conjunto pode ser dado por meio de uma propriedade caracterstica. Consideremos vrios 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 varivel ou uma expresso todos os valores


da qual formam o conjunto. A varivel (expresso) seguida pelo smbolo 0 :0 .
A segunda parte contm uma ou vrias condies necessrias e sucientes para
vericar se um elemento pertence ao conjunto. Por exemplo, para vericar se o
nmero 25 pertence ao conjunto F , preciso encontrar um nmero natural
n tal que n2 = 25 . A segunda forma da denio do conjunto F mais
completa e mais clara para usar.

1.2 Conjuntos frequentemente usados

Para os seguintes conjuntos usa-se a notao:

N = {1, 2, 3, . . .} o conjunto de todos os nmeros naturais,


Z o conjunto de todos os nmeros inteiros,

Z+ o conjunto de todos os nmeros inteiros no negativos,


o conjunto vazio.

Seja um conjunto nito no vazio que vamos chamar por alfabeto. Sejam
letras os elementos do . Vamos utilizar a notao para o conjunto de
todas as linhas nitas (sequncias) contendo os elementos do . Elementos de
vamos chamar palavras. Por exemplo, seja = {a, b, c} . Podemos formar
as palavras
(a, a, c, a, b), (b, b, b), (a, b, c, a, b, c), (c),
etc. Usa-se tambm a forma reduzida
aacab, bbb, abcabc, c

Usa-se a palavra vazia = () como elemento do conjunto .

1.3 Conjunto de conjuntos

Seja M um conjunto. Usa-se designao P(M ) para o conjunto de todos os


subconjuntos de M . Por exemplo, seja M = {a, b, c} . O conjunto P(M )
contem 8 elementos
, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}.

A operao P pode ser aplicada duas vezes:


P(P({1})) = P({, {1}}) = {, {}, {{1}}, {, {1}}}.

1. CONJUNTOS

1.4 Operaes sobre conjuntos

Usa-se a notao x A no caso x um dos elementos do conjunto A e


x
/ A no caso contrrio. Sejam M e N dois conjuntos. Se cada um dos
elementos x M tambm elemento do conjunto N diz-se que M um
subconjunto do N e escreve-se M N , isto ,1
M N

Denio 1.1.

se e somente se x M x N.

Denam-se as 3 operaes bsicas sobre conjuntos

A B = {x : x A x B} unio,
A B = {x : x A x B} interseco,
A \ B = {x : x A x
/ B} diferena dos conjuntos A e B

Podem ser consideradas outras operaes, por exemplo A B = (A \ B)


(B \ A) diferena simtrica.
Se num problema consideram-se s subconjuntos de um conjunto U dado
(conjunto universal) designa-se por A = U \ A ou Ac o complemento do
conjunto A .
Exemplo 1.1. Demonstrar que (A B) Ac B .
Seja x (A B) Ac . Ento x A B e x
/ A . Isto
((x A) (x B)) (x
/ A).

Portanto x B .

1.5 Leis de lgebra de conjuntos

Suponhamos que todos os conjuntos so subconjuntos de conjunto U dado


(conjunto universal). possvel demonstrar as frmulas:
1. Leis comutativas
(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,
5. (a) A = A

1o

AA= A

smbolo sinal de implicao, isto A B temos que ler: de A decorre B

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

10

(b) A U = U
(c) A =

(d) A U = A
6. (Ac )c = A
7. A Ac = U,
8. U c = ,

A Ac =

c = U

9. Leis de Morgan
(a) (A B)c = Ac B c ,

(b) (A B)c = Ac B c

1.6 Produto directo (cartesiano)

Sejam S e T dois conjuntos arbitrrios. Consideremos um par ordenado (s, t)


onde s S , t T so elementos arbitrrios destes conjuntos. O conjunto de
todos os pares ordenados chama-se produto directo (ou cartesiano) e designa-se
S T = {(s, t) : s S t T }.

Se S = T escreve-se tambm 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:
(1, a) (2, a) (3, a) (4, a)
(1, b) (2, b) (3, b) (4, b)
(1, c) (2, c) (3, c) (4, c).

Notemos que em caso geral S T 6= T S .


Designemos |S| o nmero de elementos do conjunto S (se S um
conjunto nito). claro que
|S T | = |S| |T |.

Generalizao:
S1 . . . Sn = {(s1 , s2 , . . . , sn ) : sk Sk , k = 1, 2, . . . , n}.

Aqui (s1 , s2 , . . . , sn ) cortejo (ou "conjunto ordenado"). No caso


S1 = S2 = . . . = Sn = S

usa-se designao

S S . . . S = S n.

1. CONJUNTOS

11

1.7 Funes

O que uma funo?


Funo ou aplicao 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
domnio da funo f , e B contradomnio da f . Usa-se notao
f: A B

e diz-se que f age do A para B . Escreve-se tambm y = f (x) onde f (x)


designa o valor da funo f quando argumento da funo toma o valor x A .
A expresso f (x) chama-se tambm imagem do x .
Exemplo 1.3. Sejam A = {a, b, c} e B = {1, 2, 3, 4} . Para denir uma funo
f : A B preciso denir os trs valores de funo: f (a), f (b), f (c) . Por
exemplo, uma das funes possveis pode ser dada pela tabela
x
f (x)

a
2

b
4

c
2

Ento f (a) = 2 , f (b) = 4 , f (c) = 2 .

Imagem e preimagem
Introduz-se tambm a imagem de um conjunto. Seja X A . Por denio
f (X) = {f (x) : x X} {y : y = f (x), x X}.

A expresso 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 notao f 1 (y) . Ento
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 dena-se como unio 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 funo f : A A onde A = {0, 1, 2, 3, 4} ,
denida pela relao2
f (x) = (2x) mod 5.
Encontrar f (A) e f 1 (A) .
Soluo. Consideremos a tabela dos valores da funo
x
f (x)

0 1
0 2

2 3
4 1

4
3

Da tabela logo f (A) = A e f 1 (A) = A .


2 a operao binria mod determina o resto de diviso do operando esquerdo por direito.
Por exemplo 13 mod 5 = 3, 4 mod 7 = 4 .

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

12

2 Relaes

2.1 Conceito de relao

Exemplo. Sejam S um conjunto de todos os estudantes duma universidade e


T conjunto das disciplinas. Consideremos produto directo S T que consiste
de pares (s, t) onde s um estudante, t uma disciplina. Formemos o
subconjunto R S T dos pares (s, t) :
R = {(s, t) : estudante s inscreve-se e assiste a disciplina t}.

Diz-se que dada uma relao entre elementos dos conjuntos S e T .


Sejam S e T conjuntos e R S T . Vamos chamar R por uma relao
entre S e T ou sobre S T . Escreve-se xRy (ou usa-se outro smbolo):
xRy (x, y) R . Mais frequentemente T = S , e R S S .
Exemplo 1.5. Consideremos vrias relaes:

(a) Relao de igualdade E S S, E = {(x, x) : x S} . De facto, dados


dois elementos x, y S pode-se colocada a questo x = y ou no? No
/S.
caso sim o par (x, y) E , no caso contrrio (x, y)
(b) Relao de ordem R N N, R = {(x, y) : x y}
(c) Relao de divisibilidade.
Vamos usar o smbolo | para a relao de divisibilidade sobre o conjunto
Z . A formula m | n diz: m divide n ou m divisor de n . Por
outras palavras a formula m | n signica existncia de um k N tal
que km = n , por exemplo 2 | 6, 7 | 35 etc. Seja R = {(m, n) N
N : m | n} . Ento n divisvel por m se (m, n) R .

Composio de relaes
Sejam R1 S S e R2 S S relaes sobre S . O conjunto
def

R1 R2 = {(x, z) : y : (x, y) R1 , (y, z) R2 }

uma relao que se chama composio das relaes R1 e R2 .


Exemplo 1.6. Consideremos o conjunto S = {1, 2, 3, 4, 5} e a relao
R = {(1, 2), (1, 4), (5, 2), (4, 3)}.

(1.1)

Encontremos a composio RR . Temos por exemplo (1, 4) R e (4, 3) R .


Daqui (1, 3) R R . Desta maneira no possvel encontrar mais pares
(x, y), (y, z) R . Ento, R R = {(1, 3)} .

Exemplo 1.7. Seja R N N, R = {(x, y) : x < y} . Verique se a composio


R R o subconjunto
R R = {(x, y) : x y 2}.

2. RELAES

13
4

3
2

Figura 1.1: Grafo da relao (1.1)

2.2 Representao geomtrica de relao. Conceito de


grafo orientado

Dada uma relao R sobre um conjunto S , isto , R S S . Representemos


os elementos do S por pontos de plano. Isto no difcil realizar se o conjunto
S nito. A relao R pode ser indicada por meio de um conjunto de arcos,
cada um dos quais sai de um ponto e entra a um outro ou o mesmo ponto. Por
exemplo, para a relao 1.1 resultado da representao geomtrica podemos ver
na gura 1.1.
Na gura 1.1 o diagrama apresenta uma estrutura. Esta estrutura consiste
de dois conjuntos, um conjunto o conjunto de pontos (que correspondem aos
elementos do conjunto S ) e o segundo o conjunto de vrios arcos. A cada
um dos arcos correspondem os dois pontos: origem e extremidade do arco. Esta
estrutura chama-se grafo orientado. Ento temos a denio

Denio 1.2.

Grafo orientado G o terno ordenado G = {V, E, } onde

V um conjunto de vrtices, V = V (G)


E um conjunto de arcos, E = E(G)
: E V V ( uma funo com domnio E , os valores da funo
pertencem ao produto directo V V )

Se (e) = (p, q) diz-se " e vai de p a q ", p o vrtice inicial, q a


extremidade do arco e ou o vrtice terminal. Diz-se tambm que cada um dos
vrtices p e q incidente ao arco e .
Se (e) = (f ) = (p, q) arcos e e f chamam-se arcos mltiplos ou paralelos. Caso (e) = (p, q) e p = q o vrtice se chama lao.
Exemplo 1.8. Consideremos o grafo sobre a gura 1.2. O grafo tem 3 laos, os
dois arcos a e b so arcos paralelos. A tabela representa os valores da funo

14

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

e
a
b
c
d
f
g
h
l
m
n

(e)
(v1 , v2 )
(v1 , v2 )
(v1 , v3 )
(v1 , v4 )
(v3 , v1 )
(v3 , v4 )
(v4 , v2 )
(v1 , v1 )
(v2 , v2 )
(v2 , v2 )

v1

m
v2

b
f

v3

v4

Figura 1.2: Grafo orientado

2.3 Representao de grafos. Matriz de adjacncia

Consideremos um digrafo G e o conjunto V (G) = {v1 , v2 , . . . , vn } dos vrtices. A cada par (vi , vj ) corresponde o nmero aij de arcos que saem do
vrtice vi e entram para vj . Obteremos a matriz (aij )i,j=1,n que vamos
chamar matriz de adjacncia. No caso aij = 0 o vrtice vi no adjacente
ao vrtice vj ). Por exemplo para o grafo na gura 1.2 a matriz de adjacncia
tem a forma

1 2 1 1
0 2 0 0

A=
1 0 0 1
0 1 0 0
Matriz de adjacncia descreve completamente a estrutura do grafo e permite
reconstruir o grafo (se a informao sobre natureza dos vrtices e arcos no
importante).

2.4 Relao de equivalncia

Denio 1.3. Relao R S S chama-se relao de equivalncia se satiszer s 3 condies (designemos esta relao por smbolo ):
(R) m m m S

2. RELAES

15

(S) m n n m
(T) m n, n r m r
Estas trs propriedades chamam-se reexividade, simetria e transitividade
respectivamente
Exemplo 1.9. Consideremos relao Rp Z Z, (m, n) Rp se p | (mn) .
Esta relao chama-se relao de congruncia com modulo p . Usa-se a notao
mn

(mod p).

Verique as propriedades (R), (S) e (T).


Exemplo 1.10. Seja R uma relao transitiva. Consideremos a composio
R R . Se (x, z) R R ento existe y S tal que (x, y), (y, z) R . Daqui
(x, z) R . Ento,
R R R.
Demonstre que

R transitiva R R R.

2.5 Partio de um conjunto em classes

n
S
Se um conjunto S representado como unio S =
Sk dos
k=1
T
conjuntos disjuntos, isto , Si Sk = quando i 6= k , ento diz-se que os
subconjuntos S1 , . . . , Sn formam partio do conjunto S (partio em classes
S1 , . . . , Sn ).

Denio 1.4.

Qualquer relao R de equivalncia determina a partio correspondente,


cada classe consiste de elementos equivalentes entre si. A cada um elemento
x S corresponde a classe
S(x) = {y S : (x, y) R}.
T
Verique que S(x) = S(y) se (x, y) R e S(x) S(y) = caso contrrio.

Exemplo 1.11. Consideremos uma relao de equivalncia Rp , relao de congruncia pelo modulo p . Encontremos a partio correspondente. Seja m Z
um nmero. claro que Sm = {m, mp, m2p, m3p, . . .} . Existem exactamente p classes diferentes que correspondem aos nmeros {0, 1, 2, . . . , p 1} .
Caso p = 2 teremos as duas classes: nmeros pares e nmeros mpares.
As vezes uma partio pode ser feita usando a operao preimagem. Sejam
S e T dois conjuntos e f : S T qualquer funo. Se y1 T e y2 T so
dois elementos diferentes, os conjuntos f 1 (y1 ) e f 1 (y2 ) no tm elementos
comuns (exerccio 10). Por isso, uma partio em classes pode ser constituda
de todos os conjuntos da forma Sy = f 1 (y) , onde y percorre o conjunto T .
Exemplo 1.12. Consideremos a funo f : Z {0, 1, 2}
f (n) = n mod 3.

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

16

Os conjuntos S0 = f 1 (0) , S1 = f 1 (1) e S2 = f 1 (2) formam uma partio do Z em 3 classes


S0 = {. . . , 6, 3, 0, 3, 6, . . .}
S1 = {. . . , 5, 2, 1, 4, 7, . . .}

S2 = {. . . , 4, 1, 2, 5, 8, . . .}

3 Algoritmos
Conceito de algoritmo tambm uma noo bsica de Matemtica Discreta.
Este conceito no pode ser denido agora com rigor matemtico e precisa de
preparao sria. Apesar disso o conceito pode ser descrito em termos habituais.
Existe um conjunto nito de instrues que devem ser realizadas passo a passo.
Claro que devem ser dados objectos de aplicao das instrues, condies de
aplicao, ordem de aplicao.
Um exemplo simples de algoritmo algoritmo cclico.

3.1 Algoritmos cclicos

Consideremos um algoritmo para encontrar a soma de n nmeros


s = x1 + x2 + + xn .

Usando uma notao algortmica semelhante com a notao da lngua Pascal o


algoritmo pode ser representado de maneira seguinte:
s := 0
for j := 1 to n do
s := s + xj

end for

Comentrio: introduz-se uma varivel s com valor inicial zero. Depois disso
passo a passo o valor de s aumenta-se em valores de x1 , x2 , . . . , xn . Para
atingir isto usa-se a varivel de controlo j que toma os valores 1, 2, . . . , n
subsequentemente.
O mesmo algoritmo pode ser representado de outra maneira usando a estrutura while (enquanto):
s := 0 ; j := 0
while j < n do
j := j + 1
s := s + xj

end while

Comentrio: o algoritmo cclico que usa while funciona de maneira seguinte:

1. verica-se a condio (neste caso: j < n )


2. Se a condio for falsa o ciclo termina (sada do algoritmo).
3. Se for verdadeira:
(a) executam-se os operadores interiores do ciclo ( j := j + 1 e s := s +
xj )

3. ALGORITMOS

17

(b) o controlo volta para vericar a condio (alinha 1)


Exemplo 1.13. Dados n nmeros x1 , x2 , . . . , xn . Sabe-se que pelo menos um
deles negativo. Achar o ndice k de um nmero negativo.
Uma soluo est apresentada no Algoritmo 1.1.

Input: pelo menos um dos nmeros x1 , x2 , . . . , xn negativo


Output: k o ndice de um nmero xk negativo
j := 1

while

xj 0
j := j + 1

do

end while
k := j

Algoritmo 1.1: ndice de um nmero negativo


Notemos que neste exemplo o nmero dos passos do algoritmo cclico depende dos nmeros dados x1 , . . . , xn . Por isso, no natural resolver este
problema usando a estrutura for.

3.2 Ciclos duplos e mltiplos

Seja (aij )i,j=1,...,n uma matriz quadrada. Um algoritmo para encontrar a soma
de todos os elementos tem a forma de um ciclo duplo
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


Comentrio. O ciclo exterior comea funcionar com o valor de i = 1 . Para
este valor o ciclo interior calcula a soma
s = a11 + a12 + + a1n .

De mesma maneira para os valores i = 2, i = 3, . . . , i = n o ciclo interior


adiciona varivel s as somas
a21 + a22 + + a2n , . . . , an1 + an2 + + ann .

O resultado
s=

n X
n
X

aij .

(1.2)

i=1 j=1

Note que a frmula (1.2) s realmente outra notao para representar o algoritmo (1.2).
Exemplo 1.14. Vamos supor que pelo menos um elemento da matriz (aij )
nmero negativo. Achar os ndices i1 , j1 de um elemento negativo.

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

18

Input: pelo menos um dos nmeros aij negativo


Output: i1 , j1 so os ndices de um elemento ai j

1 1

found := 0 ; i := 0
while found = 0 do
i := i + 1
for j := 1 to n do
if aij < 0 then
found := 1 ; j1 := j

<0

end if
end for
end while
i1 := i

Algoritmo 1.3: ndices de um elemento negativo


n

10

20

30

40

50

1 seg

18 min

12 dias

35 anos

35700 anos

Figura 1.3: Tempo do algoritmo de formao dos subconjuntos


Uma soluo est apresentada na gura 1.3.
Neste exemplo o nmero dos passos do algoritmo cclico depende da matriz
(aij ) . O mnimo nmero dos passos igual a n quando a primeira linha contm
nmeros negativos. O mximo n2 se os nmeros negativos contm s ltima
linha.

3.3 Complexidade de algoritmos

Exemplo 1.15. Dado um conjunto X de n elementos coloquemos o problema


de construo de todos os subconjuntos do conjunto X . Sabe-se que existe
2n tais subconjuntos. Seja t0 o tempo mdio para construir um subconjunto.
Todo o tempo do trabalho de um algoritmo depende do nmero n de elementos
e constituir t = f (n) = 2n t0 . A funo f (n) tem crescimento exponencial,
e portanto possvel realizar o algoritmo para valores n bastante pequenos.
De facto suponhamos que o tempo para formar um subconjunto t0 igual a
um milisegundo. O tempo do trabalho representemos pela tabela sobre a gura
1.3.
Infelizmente no existe nenhum algoritmo que permita resolver o problema
mais rpido. Temos que formar todos os subconjuntos e cada um dos subconjuntos exige o tempo t0 . Mas em diferentes problemas com frequncia podem
existir diferentes algoritmos tempo do trabalho dos quais distingue consideravelmente.
Assim surge o conceito de complexidade temporal de algoritmo. Suponhamos
que num algoritmo existe uma operao principal, e o tempo de trabalho se
pode apreciar pelo produto Qt0 onde Q o nmero de vezes de comprimento
da operao e t0 o tempo de comprimento. Pode-se tambm considerar
conceito de volume ou dimenso de dados. No exemplo precedente o nmero n
de elementos serve como volume de dados.

3. ALGORITMOS

19

Denio 1.5. O nmero de operaes como funo Q = f (n) do volume de


dados n chama-se complexidade de algoritmo.
Notemos que o valor Q pode depender no s de n mas de dados prprios.
Portanto consideram-se os conceitos de complexidade mdia, de complexidade
mxima (o pior caso) e complexidade mnima (o melhor caso).
No exemplo 1.15 a complexidade igual a 2n .
Exemplo 1.16. Para o algoritmo 1.1 a complexidade mdia igual a n/2 , a
complexidade mxima n , a complexidade mnima 1 .
Exemplo 1.17. Calcular o produto de uma matriz quadrada (aij )n1 e de uma
matriz coluna composta de elementos (bj )n1 . O resultado a matriz coluna
n
P
aij bj , i = 1, 2, . . . n .
composta dos elementos ci =

for

i := 1 to n do
s := 0
for j := 1 to n do
s := s + aij bj

j=1

end for
ci := s

end for

A operao de multiplicao operao principal. O parmetro n escolhemos como o parmetro que determina o volume de dados. fcil ver que a
complexidade igual n2 .
Exemplo 1.18. Dados n pontos em espao M1 , M2 , . . . , Mn . Encontrar a
distncia mxima entre todos os pares Mi , Mj , i, j {1, . . . , n} .
Tem-se Cn2 = n(n 1)/2 pares. Portanto complexidade de um algoritmo
que realize a resoluo pode ser igual a n(n 1)/2 . Para isso serve o algoritmo
seguinte
D := 0
for i := 1 to n 1 do
for j := i + 1 to n do
if D < |Mi Mj | then
D := |Mi Mj |

end if
end for
end for

Aqui as complexidades mdia, mxima e mnima coincidem e so iguais a


n(n 1)/2 .
Nos ltimos dois exemplos o crescimento do tempo mais considervel que no
exemplo 1.16 porque
lim

n/2
= 0,
n2

lim

n/2
= 0.
n(n 1)/2

Usa-se notao f (n) = O(g(n)) se existe C > 0 e


|f (n)| C|g(n)|

20

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

para todos bastante grandes n . No exemplo 1.16 f (n) = n/2 = O(n) , no


ltimo exemplo
f (n) = n(n 1)/2 = O(n2 ).

Se f (n) = O(nk ) diz-se que f (n) tem crescimento polinomial. No caso


f (n) = O(2n ) a funo f (n) tem crescimento exponencial.

Exemplo 1.19. Dado um algoritmo triplo. Determinar a complexidade do algoritmo e tipo de crescimento da complexidade.
x := 0
for i := 1 to n do
for j := i + 1 to n do
for k := j + 1 to n do
x := x + 1

end for
end for
end for

Operao principal atribuio x := x + 1 . Calculemos o nmero x ao


terminar do algoritmo. O ciclo interior se cumpre n j vezes. Para j -ciclo
vamos ter
(ni1)+(ni2)+. . .+1 =

(n i)(n i 1)
(1 + (n i 1))(n i 1)
=
.
2
2

Ento
f (n) =

n
X
(n i)(n i 1)
i=1

No necessrio calcular esta soma para determinar tipo do algoritmo. possvel fazer clculo aproximado. O nmero de vezes mdio de cumprimento do
j -ciclo igual a n/2 , o nmero de vezes mdio para k -ciclo uma funo da
forma c n, 0 < c < 1 . Portanto f (n) n n/2 cn = c/2 n3 = O(n3 ) .

4. EXERCCIOS

21

4 Exerccios

4.1 Lgica

1. Demonstrar: se um nmero n natural mltiplo de 4 ento o n par.


2. Como que pode ser demonstrada a implicao P (Q R) ?

4.2 Conjuntos e funes

1. Dentro do conjunto universo U = {1, 2, 3, . . . , 12} dados os conjuntos


A = {1, 3, 5, 7, 9, 11} , B = {2, 3, 5, 7, 11} , C = {2, 3, 6, 12} ,
D = {2, 4, 8} .
(a) Encontrar os conjuntos
i.
ii.
iii.
iv.

AB , AC
(A B) C c
A\B , C \D
BD

(b) Achar as representaes dos conjuntos A, B, C, D usando propriedades caractersticas


2. Demonstrar as leis de Morgan
3. Representar o conjunto P(P({a})) na forma de lista
4. Demonstrar que
(a) A (B C) = (A B) (A C)

(b) A B (A C) (B C)

(c) (A B) C = A (B C)

5. Provar a generalizao da lei de Morgan


(A B C)c = Ac B c C c

6. Sejam A = {a, b, c}, B = {a, b, d}


(a) Formar lista de todos elementos dos conjuntos A A, A B

(b) Formar lista de elementos do conjunto {(x, y) A B : x = y}


7. Sobre o conjunto U = {0, 1, 2, 3, 4, 5} denida a funo f : U U
segundo a formula f (x) = x2 mod 6 . Encontrar as imagens e preimagens
f (U ), f 1 (U ) , f (B), f 1 B) onde B = {2, 3, 5} . Resolver a equao
f (x) = x .
8. Sejam A = {0, 1, 2, 3, 4, 5, 6, 7} e f : A A a funo denida pela
frmula f (x) = x2 mod 8 . Achar um elemento x f (A) tal que
x
/ f 1 ({x}) .
9. Demonstrar a incluso f (X1 ) f (X2 ) se X1 X2 . A proposio
inversa verdadeira?

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

22

10. Demonstrar as seguintes propriedades da operao preimagem


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


exemplo quando A =
6 f 1 (f (A))
12. Sejam f : X Y, A X, B Y . Demonstrar que
A f 1 (B) f (A) B.

13. Sejam f : X Y, A X, B Y . Demonstrar que as implicaes


(a) A f 1 (B) f (A) B

(b) f (A) B A f 1 (B)


so falsas.

4.3 Relaes

1. As relaes seguintes so denidas sobre o conjunto N dos nmeros naturais. Formar a lista de todos os pares da relao:
(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 relaes consideradas so simtricas?


2. Achar a composio R R para a relao R = {(1, 2), (1, 4), (5, 2), (4, 3)}
e para cada uma das relaes no exerccio 1.
3. Uma relao R S S transitiva. Demonstrar que R R R .
4. Construir um grafo da relao 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. Vericar se as relaes seguintes so relaes de equivalncia ou no. No


caso 'no' indicar quais das condies (R),(S),(T) no se cumprem:
(a) sobre o conjunto das rectas no espao, relaes da paralelidade, perpendicularidade
(b) sobre o conjunto dos vectores no espao (excepto o vector nulo) relaes de colinearidade, perpendicularidade, relao: vectores a e b
tm a mesma direco
(c) R = {(m, n) N N : |m n| 1}

(d) S = N N, R S S , ponhamos por denio (m, n) (k, l)


se m + l = n + k

4. EXERCCIOS

23

6. Demonstrar que as relaes seguintes so relaes de equivalncia e encontrar partio do conjunto S :


(a) S = {1, 2, 3, . . . , 10},

(b) S = N,
(c) S = Z,

R = {(m, n) : m n (mod 4)}

R = {(m, n) : k Z tal que m = 2k n}

R = {(m, n) : m2 = n2 }

(d) S = {2, 3, 4, . . .} ,

R = {(m, n) : m e n tm o mesmo mnimo divisor primo}

(e) S = N2 , R = {((m, n), (p, q)) : mq = np}


7. Para as seguintes relaes achar a mnima relao de equivalncia que
contm dada:
(a) S = {1, 2, 3, 4},

(b) S = {1, 2, 3, 4},

R = {(1, 2), (4, 3)}


R = {(1, 2), (1, 3)}

8. Para as seguintes relaes achar a mnima relao transitiva que contm


dada:
(a) S = {1, 2, 3, 4},

(b) S = {1, 2, 3, 4},

R = {(1, 2), (4, 3), (2, 3), (3, 2)}


R = {(1, 2), (3, 1), (1, 4), (4, 2)}

Nos exerccios 9  12 achar a complexidade dos algoritmos e ordem de


crescimento.
9.

x := 0

for i := 1 to n do
for j := 1 to i do
x := x + 1

end for
end for
10.

x := 0

for i := 1 to n do
for j := 1 to (i + 1) div 2 do
x := x + 1

end for
end for
11.

x := 0; j := n
j > 0 do
j := j div 2
x := x + 1

while

end while
12.

x := 0; j := n
j > 0 do
i := 1 to j
x := x + 1

while
for

do

CAPTULO 1. CONJUNTOS, RELAES E GRAFOS

24

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

Captulo 2

Contagem. Anlise
combinatria
1 Princpios bsicos
Colocao do problema. Determinar o nmero de elementos de um conjunto
dado.

1.1 Regra de unio

Unio de dois conjuntos


Sejam S e T conjuntos nitos.
Se S e T so disjuntos i.e. S T = ento
|S T | = |S| + |T |
Caso geral

|S T | = |S| + |T | |S T |.

Exemplo 2.1. Seja S = {1, 2, 3, . . . , 1000} . Quantos nmeros de S so divisveis por 3 ou 5?


Resoluo. Designemos Di = {x S : x divisivel por i} . Temos
|D3 D5 | = |D3 | + |D5 | |D3 D5 |.

Como |D3 | = 333 (parte inteira de 1000/3), D5 = 200 e


|D3 D5 | = |D15 | = 66

( 66 parte inteira de 1000/15 ) o nmero procurado igual a 333 + 200


66 = 467 .

25

CAPTULO 2. CONTAGEM. ANLISE COMBINATRIA

26

Unio de trs conjuntos


Para trs conjuntos temos uma situao mais complicada
|A1 A2 A3 | = |A1 | + |A2 | + |A3 |

|A1 A2 | |A1 A3 | |A2 A3 | + |A1 A2 A3 |.

(2.1)

Esta relao pode ser interpretada geometricamente na base de diagrama de


Venn, mas pode-se demonstrada analiticamente.

Caso geral. Unio de

conjuntos



n
n
[
X
X
X


|Ai Aj | +
|Ai Aj Ak |
|Ai |
Ai =


i=1

i=1

i,j

i,j,k

1.2 Princpio do produto

+ (1)n+1 |A1 A2 . . . An |.

(2.2)

Se S1 , S2 , . . . , Sk so conjuntos nitos
|S1 S2 . . . Sk | = |S1 | . . . |Sk |

Generalizao. Seja T S1 . . . Sk . Supe-se que para construir


qualquer elemento do conjunto T , (s1 , . . . , sk ) T existe um algoritmo
que consiste em seguintes passos. Existem n1 variantes para escolha de
s1 S1 . Com s1 tm-se n2 casos para escolha de s2 S2 . Dados s1 e
s2 possvel escolher s3 S3 de n3 variantes, etc. Dados s1 , . . . , sj1
tm-se nj variantes para escolher sj . . .

Ento
|T | = n1 n2 . . . nk .

Exemplo 2.2. Achar a quantidade de todos os nmeros decimais com 3 algarismos diferentes.
Existem n1 = 9 variantes para escolher o primeiro algarismo. Tendo o
primeiro algarismo teremos n2 = 9 variantes para escolher segundo algarismo.
Dados primeiros dois algarismos temos n3 = 8 variantes para escolha do terceiro. Ento teremos n1 n2 n3 = 9 9 8 = 648 nmeros.

2 Permutaes, subconjuntos e distribuies

2.1 r -permutaes (arranjos)

Dado um conjunto nito A = {a1 , . . . , an } de n elementos, encontremos uma


permutao de r n elementos do conjunto A :
ai(1) , ai(2) , . . . , ai(r) A

2. PERMUTAES, SUBCONJUNTOS E DISTRIBUIES

27

(ndices i(1), i(2), . . . , i(r) so ndices diferentes do conjunto {1, 2, . . . , n} ).


Esta sucesso chama-se r -permutao de elementos do conjunto A . Calculemos o total de todas tais permutaes.
Para escolher o primeiro termo ai(1) da sucesso temos n variantes. Dado
o termo ai(1) possvel indicar somente n 1 variantes do segundo termo.
Para os termos ai(1) , ai(2) existem n 2 variantes para a escolha do terceiro
termo, etc.
Segundo do princpio do produto temos
P (n, r) = n(n 1) (n r + 1) =

n!
(n r)!

(2.3)

de r -permutaes, isto , das permutaes de r elementos compostas dos n


elementos dados.
No caso particular, para permutaes dos todos n elementos temos
P (n, n) = n!

(2.4)

Exemplo 2.3. Calcular a quantidade de nmeros decimais de 3 algarismos


diferentes que no contm o zero.
Pela frmula (2.3) temos x = 9 8 7 = 504 .

2.2 Nmero de funes

Sejam S e T conjuntos nitos, |S| = m, |T | = n . Por exemplo


S = {s1 , s2 , . . . , sm }, T = {t1 , t2 , . . . , tn }.

O total de funes f : S T determina-se por:


S
T = |T ||S| = nm

onde T S designa o conjunto de todas funes f : S T .

Exemplo 2.4. Sejam S = {a, b, c}, T = {0, 1} . O total de funes f : S T


igual 23 = 8 . Para melhor imaginar este conjunto observemos que cada funo
denida sobre o conjunto S nito. Portanto possvel construir a tabela
de todos os valores da funo. Por exemplo se f (a) = 1, f (b) = 0, f (c) = 1
teremos a linha 101 . Concluso: o nmero de funes coincide com o nmero
de linhas de comprimento 3 algarismos de 0 e 1 :
000, 001, 010, 011, 100, 101, 110, 111.

2.3 Nmero de subconjuntos. Coecientes binomiais

Dado um conjunto de n elementos. Vamos usar notao Cnr para o nmero


de todos os subconjuntos contendo r elementos. Vamos chamar tambm Cnr
por o nmero de combinaes de n elementos por r elementos.
O nosso objectivo demonstrar que este nmero igual a
Cnr =

n!
.
r!(n r)!

(2.5)

CAPTULO 2. CONTAGEM. ANLISE COMBINATRIA

28

Para isso consideremos de novo o problema de r -permutaes. Mas vamos


usar a regra de produto de outra maneira. No primeiro passo escolhemos um
subconjunto de r elementos que pode ser realizado em n1 = Cnr variantes.
Consideremos por exemplo o conjunto {1, 2, 3, 4, 5} e r = 3 . Suponhamos que
no primeiro passo foi escolhido o subconjunto {2, 3, 5} que uma das C53 = 10
variantes. Tendo este subconjunto passemos para o segundo passo em que temos
3! variantes para obter uma 3 -permutao.
Em caso geral tem-se n2 = r! variantes para obter uma permutao.
Segundo o princpio do produto:
P (n, r) = n1 n2 = Cnr r!

(no nosso exemplo n1 n2 = 10 6 = 60 permutaes). Daqui


P (n, r)
n!
=
.
r!
(n r)! r!
 
n
Nota. Usa-se tambm a designao
= Cnr , por exemplo
r
 
54
5!
5
=
= 10.
= C53 =
2!3!
12
3
Cnr =

Cnr chama-se coeciente binomial.

Exemplo 2.5. Consideremos um grafo no orientado completo de n vrtices,


isto , grafo sem laos e arcos paralelos em que cada par de vrtices par dos
vrtices adjacentes. Calculemos o nmero dos arcos.
O nmero de arcos igual ao nmero dos pares no ordenados,
isto , sub 
n
conjuntos de dois elementos. A quantidade destes pares
= n(n 1)/2 .
2
Exemplo 2.6. Em quantas maneiras se pode escolher 3 equipas de 4, 2 e 2
jogadores respectivamente de um grupo de 8 pessoas.
Vamos usar o princpio do produto. Uma primeira equipa se pode escolher
por meio de n1 = C84 variantes. Dada primeira equipa teremos n2 = C42
variantes para escolha de segunda. Resto de 2 jogadores forma a terceira equipa.
Ento de acordo com o princpio do produto vamos ter
n1 n2 = C84 C42 = 420

variantes.

2.4 Teorema binomial, propriedades de coecientes


Para os nmeros reais a e b e para n N temos
(a + b)n =

n
X

Cnr anr br .

r=0

Por exemplo (a + b)4 = a4 + 4a3 b + 6a2 b2 + 4ab3 + b4 . Pondo a = b = 1


obtemos do teorema binomial a soma dos coecientes binomiais

2. PERMUTAES, SUBCONJUNTOS E DISTRIBUIES

29

(2.6)

2n = Cn0 + Cn1 + + Cnn .

Uma propriedade importante (propriedade caracterstica) dos coecientes


r1
r
Cnr = Cn1
+ Cn1

que junto com as condies

(n > 1, n > r)

(2.7)

Cn0 = Cnn = 1

determina os coecientes de maneira nica.


Exemplo: C53 = 10, C43 = 4, C42 = 6, 10 = 4 + 6 .

2.5 Distribuio de n objectos em k caixas diferentes

Existe uma regra simples mas importante de clculo de elementos de conjunto.

Se existe uma correspondncia biunvoca entre os dois conjuntos


nitos A e B ento estes conjuntos tm o mesmo nmero de elementos: |A| = |B| .
Os problemas a seguir so equivalentes neste sentido. A reposta para todos estes
problemas
k1
D(n, k) = Cn+k1
(2.8)
Para demonstrar esta relao, consideremos os quatro problemas equivalentes.

Problema

1:

O nmero de distribuies

Temos n objectos idnticos e k caixas diferentes: C1 , C2 , . . . , Ck . preciso


calcular o nmero de distribuies de n objectos. Por exemplo, n = 5 objectos
podemos distribuir em k = 3 caixas assim:
2 2 1

ou

0 4 1

etc.

Como vamos ver em baixo, resposta esta questo (pr n objectos idnticos
em k caixas diferentes) pode ser encontrada da formula (2.8).
Exemplo 2.7. O nmero de variantes de distribuio de 5 objectos idnticos em
3 caixas (de cores diferentes) V = C72 = 7 6/2 = 21 .

Existem outros problemas isomorfos ao problema colocado, i.e., possvel


construir uma correspondncia biunvoca entre dois conjuntos: o conjunto de
todas as distribuies e o conjunto num outro problema.

Problema

: O numero de solues da equao

x1 + x2 + . . . + xk = n

Consideremos a equao
x1 + x2 + . . . + xk = n

(2.9)

em nmeros inteiros no negativos. A cada uma soluo desta equao corresponde uma distribuio em n caixas: a primeira caixa contm x1 objectos, a
k1
.
segunda x2 , etc. A reposta questo a mesma, D(n, k) = Cn+k1

CAPTULO 2. CONTAGEM. ANLISE COMBINATRIA

30

Problema

: Sucesses binrias

Consideremos o conjunto das linhas de comprimento n + k 1 contendo n


algarismos 0 e k 1 algarismos 1 . Por exemplo, para n = 5 e k = 3
vamos ter as linhas da forma 0010010, 1000010 etc. A cada uma sucesso
binria pode ser considerada como cdigo de uma distribuio em caixas. Os
zeros consideramos como objectos, mas unidades servem como separadores entre
caixas. Por exemplo na linha 0010010 as unidades dividem os zeros em 3
partes de x1 = 2 , x2 = 2 e x3 = 1 zeros.
s linhas 0010001, 0100010 correspondem as solues
x1 = 2, x2 = 3, x3 = 0

e x1 = 1, x2 = 3, x3 = 1

da equao x1 + x2 + x3 = 5 .
Ento, a concluso que o nmero destas sucesses igual a D(n, k) .

Problema

: O nmero de subconjuntos

A mesma sucesso binria pode ser usada para representar um subconjunto do


conjunto {1, 2, . . . , n, n + 1, . . . , n + k 1} contendo k 1 elementos exactamente. Por exemplo, a sucesso 0010001 indica o subconjunto {3, 7} do
conjunto {1, 2, 3, 4, 5, 6, 7} .
Concluso. Todos os 4 conjuntos considerados tm o mesmo nmero de
k1
elementos D(n, k) , mas o ltimo tem Cn+k1
elementos. Daqui segue (2.8).
Ento, o vnculo entre os problemas considerados permite facilmente encontrar uma soluo na base da soluo do outro. Consideremos mais um problema
que pode ser resolvido desta maneira.
Exemplo 2.8. Achar o numero de funes f : {1, 2, . . . , n} {1, 2, . . . , m} que
so no decrescentes, isto , x1 < x2 implica f (x1 ) f (x2 ) .
Soluo do problema podemos encontrar usando a reduo equao (2.9).
Designemos
d1 = f (1), d2 = f (2) f (1), d3 = f (3) f (2), . . . , dn = f (n) f (n 1).

Os nmeros d1 , . . . , dn so no negativos, d1 1 , e
d1 + d2 + + dn = f (n) m.

Claro que qualquer combinao de nmeros que satisfaam as ltimas condies


determina uma das funes f : {1, 2, . . . , m} {1, 2, . . . , n} . Ento podemos
considerar o problema de nmero de solues da inequao
d1 + d2 + + dn m,

d1 1, di 0, i = 2, . . . , n.

Se introduzirmos mais uma varivel no negativa dn+1 vamos ter equao


d1 + d2 + + dn + dn+1 = m,

d1 1, di 0, i = 2, . . . , n + 1.

Substituindo d1 = 1 + t obteremos a equao t + d2 + + dn + dn+1 = m 1


que tem
n
Cm1+n
3
solues. Este nmero a resposta. Por exemplo, existem C21+3
= 4 funes
no decrescentes f : {1, 2, 3} {1, 2} .

3. PERMUTAES COM REPETIES. PARTIES

31

3 Permutaes com repeties. Parties

3.1 Permutaes com repeties

O nmero de permutaes de n objectos diferentes igual n! . Se entre


n objectos nem todos so diferentes vamos ter outro resultado. Consideremos
por exemplo permutaes das letras de uma palavra. Se sob palavra subentender combinao qualquer de letras, vamos ter uma permutao com repeties.
Quantas palavras diferentes possvel formar das letras da palavra passarada?
O total de permutaes dos 9 elementos 9! , mas as letras s e a ocorrem duas
e quatro vezes respectivamente. Por isso, no possvel distinguir pas1 s2 arada
e pas2 s1 arada se substituir s1 e s2 por s .
Encontremos o nmero total de diferentes palavras (permutaes) a partir
da palavra passarada. O princpio do produto pode ser aplicado de maneira
seguinte. Seja x o total dessas palavras. Introduo de ndices para letras
com repetio, por exemplo pa1 s1 s2 a2 ra3 da4 faz uma permutao de objectos diferentes. Construo de qualquer tal permutao pode ser feito em duas
etapas. A primeira etapa formar uma palavra destas letras que pode ser feito
em x maneiras. Suponhamos que obtida, por exemplo, a palavra ssaaaaprd .
Na segunda etapa temos que escolher uma permutao das letras s1 e s2 em
lugar das ss e uma permutao a1 a2 a3 a4 em lugar de aaaa . Isto pode ser
feito em 2!4! = 48 maneiras. Segundo o princpio de produto o resultado o
produto x 48 . Mas por outro lado o mesmo nmero n! = 9!
x 48 = 9!

Daqui x = 9!/48 = 5 6 7 4 9 = 7560 .


Consideremos caso geral. Temos n = n1 + n2 + . . . + nk objectos, entre os
quais k objectos diferentes a1 , . . . , ak de modo que ai tem ni repeties.
O total de permutaes com repeties igual a
n!
n1 !n2 ! nk !

Por exemplo das letras aaabbccccd possvel formar


10!
= 5 7 4 9 10 = 12600
3!2!4!1!

diferentes palavras. Uma das permutaes bcaaacdccb .

3.2 Parties de um conjunto

Existe um vnculo entre o problema considerado e o problema seguinte. Dado


um conjunto A de n elementos. Achar o total de parties do A em unio
ordenada de k conjuntos
A = A1 A2 Ak

tal que |A1 | = n1 , |A2 | = n2 , . . . |Ak | = nk onde n1 , . . . nk so nmeros


dados, n1 + n2 + . . . + nk = n .
Por exemplo A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} , n1 = 3 , n2 = 2 , n3 = 4 ,
n4 = 1 . Uma das parties {3, 4, 5} {1, 10} {2, 6, 8, 9} {7} .

32

CAPTULO 2. CONTAGEM. ANLISE COMBINATRIA

Para resolver este problema consideremos um vnculo com a questo sobre


o nmero de permutaes com repeties. Ao problema de permutaes com
repeties da palavra aaabbccccd corresponde o problema de parties com
n = 10 , n1 = 3 , n1 = 2 , n1 = 4 , n1 = 1 . De facto para qualquer palavra
(permutao) correspondem quatro conjuntos dos lugares das letras a , b , c
e d respectivamente. Por exemplo para a palavra bcaaacdccb vamos ter os
conjuntos Ca = {3, 4, 5}, Cb = {1, 10} , Cc = {2, 6, 8, 9} e Cd = {7} . Estes
conjuntos formam uma das parties do conjunto
A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

Ento a correspondncia biunvoca entre permutaes e parties permite


armar que o nmero de parties igual a
n!
.
n1 !n2 ! nk !

(2.10)

Nota 1. Neste problema importante a ordem dos conjuntos. Se todos os nmeros n1 , . . . , nk so diferentes a ordem determina-se a partir destes nmeros.
Mas este momento preciso ter em vista no caso de coincidncia de dois nmeros. Por exemplo seja A = {1, 2, 3, 4, 5, 6} e n1 = n2 = 3 . Neste caso
as parties A = {1, 2, 3} {4, 5, 6} e A = {4, 5, 6} {1, 2, 3} so parties
diferentes.
Se no preciso distinguir tais parties tem de ser usada outra formula, a
formula (2.10) neste caso no serve.

4 Exerccios
1. Entre 150 homens 45 sabem nadar, 40 jogam futebol, 50 jogam xadrez. Tambm, 32 homens jogam xadrez mas no jogam futebol, 27
jogam xadrez e nadam, e 10 homens sabem fazer tudo.
(a) Quantos homens jogam xadrez, mas no nadam e no jogam futebol?
(b) Se 21 homens jogam futebol e nadam, quantos homens no sabem
fazer nada de trs actividades?
2. Achar o nmero de permutaes 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 funes f : T S tm valores diferentes ( f (x1 ) 6= f (x2 )
se x1 6= x2 )?

(b) Quantas existem funes f : S T com diferentes valores?


(c) Quantas existem funes f : T S ?

5. (a) Achar o total de nmeros com 3 dgitos


(b) Quantos nmeros tm 3 dgitos diferentes?
(c) Quantos nmeros de 3 dgitos diferentes no so mltiplos de 5 ?

4. EXERCCIOS

33

6. Sejam A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} e B = {2, 3, 5, 7, 11, 13, 19} .


S
T
L
(a) Encontre |A B|, |A B| e |A B| .
(b) Quantos subconjuntos tem A .

(c) Quantos subconjuntos de 4 elementos tem A .


(d) Quantos subconjuntos de 4 elementos com 3 nmeros pares e 1
nmero mpar tem A .
7. Em quantas maneiras possvel escolher do conjunto A = {42, 43, . . . , 52}
sete elementos que contm 3 nmeros pares e 4 nmeros mpares.
8. Quantos subconjuntos do conjunto A = {20, . . . , 30} tm exactamente 3
nmeros pares e 2 nmeros mpares?
9. Uma classe consiste de 12 homens e 18 mulheres. Quantos comits
pode-se formar da classe contendo
(a) sete pessoas?
(b) 3 homens e 4 mulheres?
(c) 7 homens ou 7 mulheres?
10. Dada uma matriz A que contem m linhas e n colunas. Quantos menores de ordem k onde k m, k n possvel formar dos elementos
da A ?
11. De 9 pessoas preciso formar um comit de 4 pessoas. Em quantas
maneiras possvel fazer isso, se duas pessoas, digamos Joo e Ana, no
podem servir no mesmo comit.
12. Seja S o conjunto de todas as sucesses de 0 , 1 e 2 de comprimento
10 (por exemplo 0220110120 S ).
(a) Achar |S| .

(b) Quantas sucesses do S contm cinco 0 e cinco 1 ?


(c) Quantas sucesses do S contm trs 0 e sete 1 ?
(d) Quantas sucesses do S contm trs 0 exactamente (nem mais nem
menos)?
(e) Quantas sucesses do S contm trs 0 , quatro 1 e trs 2 ?
(f) Quantas sucesses do S contm pelo menos um 0 , pelo menos um
1 e pelo menos um 2 ?
13. De quantas maneiras um conjunto de 2n elementos pode ser partido em
dois subconjuntos com n elementos cada?
14. preciso formar um password de 7 smbolos com 3 letras e 4 dgitos.
De quantas maneiras possvel fazer isso (o total das letras 26 )?
15. Achar o nmero de todas as permutaes das letras a, b, c, d, e, f, g, h satisfazendo condio: os pares a e b , c e d , e e f , g e h formam
pares adjacentes. Por exemplo, f ecdbahg .

34

CAPTULO 2. CONTAGEM. ANLISE COMBINATRIA

16. Seja P o nmero de todas as permutaes das letras a, b, c, d, e, f


(a) Achar |P |

(b) Quantas permutaes satisfazem condio: a e b so adjacentes,


e b e c so adjacentes.
(c) Encontrar o nmero de permutaes obedecendo condio: a e b
no so adjacentes?
(d) Encontrar o nmero de permutaes das letras a, b, c, d, e, f se a e
b no so adjacentes e letras b e c tambm?
(e) Encontrar o nmero de permutaes das letras a, b, c, d, e, f obedecendo condio: as letras a e b so adjacentes ou as letras a
e c so adjacentes. Por exemplo, abcef d e bacdef satisfazem
condio, mas cdbeaf no satisfaz.
17. Quantas palavras possvel formar das 3 letras a , 4 letras b e 3
letras c ?
18. (a) Achar o nmero de todas as solues inteiras no negativas da equao x1 + x2 + x3 = 11 .
(b) Quantas nmeros decimais de 3 algarismos tm a soma dos algarismos 11 ?
19. Encontrar o nmero de todas as solues inteiras no negativas da equao
x1 + x2 + x3 + x4 = 10 satisfazendo condio 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 nmero de todas as solues inteiras da equao
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. Tm-se 20 hastes idnticas que ocupam uma linha de vinte lugares diferentes:
| | | | | | |

| | | | | | | | | | | | |,

e seis h de ser escolhidas.


(a) Quantas variantes tm-se para isso?
(b) Quantas variantes tm-se se nenhum par de hastes escolhidas no
pode ser consecutivo?
(c) Quantas variantes tm-se se entre cada um par de hastes escolhidas
deve ser pelo menos dois hastes?

4. EXERCCIOS

35

24. Encontre o nmero de variantes para distribuir 10 bebidas de laranja, 1


bebida de limo e 1 bebida de lime entre 4 estudantes de modo que cada
um dos estudantes recebe pelo menos 1 bebida. As bebidas de limo e
lime so para diferentes estudantes.
25. preciso distribuir 100 estudantes entre trs salas com capacidades de
30, 30, 40 . Em quantas maneiras possvel fazer isso? Assumir que estudantes preferem alguns salas, isto , devemos distinguir as salas com
mesma capacidade.
26. Joan lives in Manhattan, and works at a location that is 10 blocks east
and 15 north from where she lives.
(a) In how many ways can she nd a route to work (assuming her route
is as short as possible, and thus is 25 blocks long)?
(b) If she wants to pass a coee shop on her route, and the coee shop
is located 3 blocks east and 4 block north, how many routes to work
are possible?

Captulo 3

Induo e recursividade
1 Induo matemtica

1.1 Introduo. Exemplo

Induo matemtica um dos mtodos de demonstrao de teoremas e outras


proposies matemticas. Notemos que demonstrao ltima etapa na resoluo de um problema. Tambm, a induo pode servir para descobrir um
resultado, mas isto no induo matemtica, raciocnio indutivo informal.
A ideia do mtodo pode ser interpretada de maneira seguinte. Seja A um
subconjunto do conjunto N de todos os nmeros naturais. Imaginemos que os
nmeros do conjunto A so marcados, digamos tm cor vermelho. Mas todos
os outros tm cor branco. Temos informao certa sobre o conjunto A . Sabese que o nmero 1 tem cor vermelho, isto , 1 A . Mais, se um nmero n
tem cor vermelho, o nmero n + 1 tambm 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 vs de dizer que um nmero n tem cor vermelho, no
exemplo abaixo tem-se uma proposio que que depende do parmetro n .
Exemplo 3.1. Dada a sucesso 2, 5, 8, . . . Achar a expresso (uma frmula) para
o termo geral xn desta sucesso. Aqui x1 = 2, x2 = 5, . . .
xn = xn1 + 3, n 2.

(3.1)

Surge uma hiptese que xn = 3n 1 . Esta frmula serve para vrios


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 concluso que
todos os nmeros naturais tm cor vermelho.
Consideremos a implicao
xk = 3k 1

xk+1 = 3(k + 1) 1, k 1.

36

1. INDUO MATEMTICA

37

Esta implicao pode ser demonstrada:


xk+1 = xk + 3 = (3k 1) + 3 = 3(k + 1) 1.

O k pode tomar qualquer nmero natural, daqui


x1 = 3 1 1 x2 = 3 2 1 x3 3 1

Claro que a proposio xn = 3n 1 deve ser vlida para qualquer nmero


natural n .
Exemplo 3.2. Notemos que as seguintes igualdades
1+2=

23
34
45
, 1+2+3=
, 1+2+3+4=
.
2
2
2

so vlidas. Este fato pode sugerir uma hiptese indutiva


1 + 2 + 3 + ...+ n =

n(n + 1)
,
2

n = 1, 2, 3, . . .

(3.2)

Ainda no sabemos se para todos os valores de n a relao (3.2) verdadeira


ou no. No possvel vericar a relao (3.2) para todos os valores de n N .
Veriquemos que para n = 1 esta proposio vlida. De facto n = 1
12
torna (3.2) em igualdade 1 =
. No segundo passo (passo da induo)
2
suponhamos que para n = k a proposio vlida, isto ,
1 + 2 + ...+ k =

k(k + 1)
.
2

Baseando nesta hiptese demonstremos que para n = k + 1 a proposio ser


vlida tambm, isto ,
1 + . . . + k + (k + 1) =

(k + 1)(k + 2)
.
2

Temos
1 + 2 + . . . + k +(k + 1) =
|
{z
}
suposio

k(k + 1)
+k+1
2
=

(k + 1)(k + 2)
k(k + 1) + 2(k + 1)
=
.
2
2

Este resultado podemos interpretar de maneira seguinte






(k + 1)(k + 2)
k(k + 1)
1 + . . . + k + (k + 1) =
.
1 + ...+ k =
2
2
(3.3)
Vamos agora raciocinar. Da validade da relao (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 ns podemos ver que a relao (3.2) deve ser
vlida para todos n = 1, 2, . . . .

CAPTULO 3. INDUO

38

Em geral vamos ter o mtodo que se chama Mtodo (ou princpio) da induo
matemtica. Para compreenso melhor da estrutura do raciocnio, introduzimos
a designao


n(n + 1)
P (n) = 1 + 2 + 3 + . . . + n =
(3.4)
2

que depende do n (ou predicado). Estrutura do raciocnio consiste dos dois


elementos:
1. P (1) verdadeiro
2. a implicao P (k) P (k + 1) verdadeira
Neste caso temos a sucesso das implicaes
P (1) P (2) P (3)

1.2 Princpio da induo matemtica

Dada uma proposio que depende de parmetro n natural (ou um predicado


P (n) ). Sob certas condies preciso demonstrar que P (n) verdadeiro
qualquer que seja n natural, i.e.
(n N ) P (n).

A demonstrao que utiliza o princpio da induo matemtica consiste em


dois passos, base (B) e passo indutivo (I):
(B) Demonstrar que a proposio dada vlida para n = 1 ;
(I) A partir da suposio que a proposio vlida para n = k mostrar que
a suposio vlida e para n = k + 1 (qualquer que seja k {1, 2, . . .} ).
Usando a designao P (n) para a proposio mencionada o considerado podemos resumir por meio do teorema:

Teorema 3.1 (Princpio de induo matemtica).

Vamos supor que

(B) P (1) verdadeira


(I) P (k) P (k + 1) qualquer que seja k {1, 2, . . .} .
Ento a proposio P (n) verdadeira qualquer que seja n N .
O teorema 3.1 pode ser demonstrado na base do princpio de escolha (veja
o axioma 1 na pagina 40).
No exemplo 1.1 a proposio


n(n + 1)
P (n) = 1 + 2 + 3 + . . . + n =
.
2
A demonstrao est feita conforme o teorema 3.1.
Nos exemplos precedentes as proposies para demonstrar foram dadas.
Consideremos um exemplo, onde usa-se induo informal para predizer uma
proposio.

1. INDUO MATEMTICA

39

Exemplo 3.3. Encontrar a soma


sn = 1 + 3 + 5 + . . . + (2n 1).

Notemos que n -esimo lugar ocupa o nmero 2n 1 (que possvel demonstrar por meio da mesma induo). Consideremos os clculos:
n=1
n=2
n=3
n=4
...

1
1+3=4
1+3+5=9
1 + 3 + 5 + 7 = 16
...

Aparece a suposio (induo informal) que a soma sn igual a n2 . Agora


def
vem etapa da demonstrao. Designemos P (n) = {1 + 3 + 5 + . . . + (2n
1) = n2 } .
(B) P (1) = {1 = 12 } verdade.
(I) Suponhamos que P (k) = {1 + 3 + 5 + . . . + (2k 1) = k 2 } = verdade .
Temos
P (k + 1) = {1 + 3 + 5 + . . . + (2k 1) + (2k + 1) = (k + 1)2 } =

{k 2 + (2k + 1) = (k + 1)2 } = verdade.

Nota 1. Em vez do conjunto N de todos os nmeros naturais pode-se considerar


um subconjunto da forma Nm = {m, m + 1, m + 2, . . .} . Neste caso aplicao
da induo ter a forma
(B) Demonstrar P (m) ;
(I) Demonstrar a implicao P (k) P (k + 1) para todos os valores de
k {m, m + 1, . . .} .

Teorema 3.2 (Princpio de induo, generalizao).

Suponhamos que

(B) P (m) verdadeira


(I) P (k) P (k + 1) qualquer que seja k {m, m + 1, . . .} .
Ento a proposio P (n) verdadeira qualquer que seja n {m, m + 1, . . .} .

1.3 O princpio fraco de induo matemtica

As vezes no possvel usar o princpio indicado. Mas pode ajudar o seguinte


teorema.

Teorema 3.3.

Suponhamos que

(B) P (1) verdade;


(I) Da validade das proposies P (1), . . . , P (k) segue P (k + 1) qualquer que
seja k {1, 2, . . .} .

CAPTULO 3. INDUO

40

Ento P (n) verdadeira para todos os nmeros n naturais.


Exemplo 3.4. Demonstrar que qualquer nmero natural n 2 possvel desenvolver em produto de nmeros primos.
Soluo. Seja P (n) uma proposio: o nmero n possvel desenvolver
em produto de primos.
(B) P (2) verdade evidentemente. O produto contm um nico factor 2
(I) Consideremos P (k + 1) . Se o nmero k + 1 primo claro que P (k + 1)
valida. No caso contrario k + 1 = i j onde i, j < k + 1 . Segundo a
suposio da induo, i e j so produtos de primos, i.e. i = a1 am
e j = b1 bk podemos. Daqui
k + 1 = a1 am b 1 b k

produto de primos.
Existe uma generalizao do princpio fraco:

Teorema 3.4.

Se

(B) P (1), P (2), . . . , P (m) so verdadeiros;


(I) Da validade das proposies P (1), . . . , P (k) segue P (k + 1) qualquer que
seja k {m, m + 1, . . .} .
Ento P (n) verdade para qualquer nmero n natural.

1.4 Princpio de escolha de mnimo elemento

So consideradas diferentes formas de princpios de induo matemtica. Como


podemos ver abaixo existem muitas formas de induo. Mas todas as formas podem ser organizadas e justicadas na base de um axioma que reecte a natureza
do conjunto dos nmeros naturais.

Axioma 1 (Princpio de escolha). Qualquer subconjunto no vazio do conjunto


N dos nmeros naturais tem o mnimo elemento.
Na base do princpio de escolha, axioma 1, pode ser demonstrado o princpio
de induo matemtica 3.1 e outros princpios equivalentes.
Demonstrao do teorema 3.1. Seja P (n) um predicado denido sobre N e
obedecendo s condies (B) e (I) do teorema 3.1. Designemos por E N o
conjunto de todos os valores de n para os quais P (n) falso. Precisamos
de demonstrar que E = . Suponhamos ao contrrio que E no vazio.
Conforme ao axioma 1 o conjunto E tem o mnimo elemento n0 . O n0
diferente de 1 , porque P (1) verdadeira. Como n0 o mnimo, temos
P (n0 1) verdadeira, mas P (n0 ) falso. Mas isto contradiz implicao
P (k) P (k + 1) para k = n0 1 . A contradio obtida permite armar que
E=.

2. DEFINIES RECURSIVAS

41

2 Denies recursivas

2.1 Descrio do problema

A seco precedente mostra que o conjunto de todos os nmeros naturais tem


natureza recursiva. suciente demonstrar a implicao P (k) P (k + 1)
e a partir do nmero 1 possvel obter um resultado para toda a sucesso
das proposies P (1), P (2), P (3), . . . . Esta propriedade dos nmeros naturais
permite denir uma funo f : N Y sobre o N = {1, 2, 3, . . .} utilizando
uma relao entre valores da funo para diferentes argumentos. Notemos que
cada funo denida sobre N a sucesso
f1 , f2 , . . . , fn , . . .

Aqui fn = f (n) . Notemos tambm que o Y qualquer conjunto. O objectivo


desta seco considerar um mtodo de denio de sucesses.

2.2 Denio recursiva

A sucesso 1, 4, 9, 16, . . . pode ser determinada por meio da frmula sn = n2 .


Aqui temos uma denio que permite encontrar sn directamente usando uma
frmula e o argumento n . Denio recursiva de uma sucesso permite encontrar um termo atravs de outros elementos da mesma sucesso.
Exemplo 3.5. Consideremos a sucesso 2, 5, 8, 11, . . . Seja xn o termo geral da
sucesso, i.e., x1 = 2 , x2 = 5, . . . Implicitamente pressupe-se um algoritmo
para calcular xn , isto , para calcular xn temos que calcular previamente
xn1 e encontrar o xn usando a relao
xn = xn1 + 3, n 2,

x1 = 2.

(3.5)

Exemplo 3.6. Consideremos o factorial n! = 1 2 3 . . . n . Realmente esta


denio diz que para calcular n! preciso primeiro calcular (n 1)! e depois
multiplicar por n . Em outros termos temos a denio da forma
1! = 1,

n! = (n 1)! n, se n > 1.

A denio apresenta a informao completa para calcular n! de maneira nica.


Pode-se utilizar outra notao
f1 = 1,

fn = fn1 n, se n > 1.

Temos outra notao mas a mesma denio, por isso fn = n! . Algumas


detalhes de construo correta de denies vamos considerar abaixo.
Exemplo 3.7. A sucesso de Fibonacci dena-se de maneira seguinte
(B) F1 = F2 = 1,
(R) Fk = Fk2 + Fk1 se k 3 .
Daqui F3 = F1 + F2 = 1 + 1 = 2, F4 = F2 + F3 = 1 + 2 = 3, . . .
primeiros termos so: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 .

Os 10

CAPTULO 3. INDUO

42

Destes exemplos podemos fazer a concluso geral. Para denir uma sucesso
sn , n = 1, 2, . . .

um ou vrios primeiros termos pode-se denir directamente, mas para outros


consequentes usa-se uma relao recursiva.

Denio 3.1.

Denio recursiva consiste das duas partes:

(B) um nmero nito de primeiros termos de sucesso determinam-se directamente, i.e. os termos s1 , s2 , . . . , sp onde p 1
(R) todos os outros termos determinam-se por meio de uma relao recursiva
que permite encontrar o termo a partir de certos termos antecedentes
sn = n (s1 , s2 , . . .)

2.3 Extenso de domnio

As vezes cmodo considerar uma extenso do domnio da sucesso denida.


Isto permite pode ser feito na base da denio recursiva. Por exemplo, para
o factorial com frequncia usa-se a conveno 0! = 1 . De facto, este valor
corresponde a relao fn = fn1 n para n = 1 :
f1 = f0 1,

ou 1 = f0 1.

Daqui 0! = f0 = 1 .
Para a sucesso de Fibonacci consideremos a relao dada quando n = 2 :
F2 = F1 + F0 .

Daqui F0 = F2 F1 = 0 . Desta maneira pode-se denir F1 , F2 , . . . na base


da relao
Fn = Fn+2 Fn+1 ,
por exemplo,

F1 = F1 F0 = 1 0 = 1, F2 = F0 F1 = 0 1 = 1.

2.4 Clculo iterativo. Algoritmos

A denio recursiva permite calcular os elementos da sucesso xn termo a


termo. Este mtodo de clculo vamos chamar clculo iterativo. Para calcular
xn calculam-se consequentemente os elementos x1 , x2 , . . . , xn1 .
Um algoritmo para calcular o factorial pode ter a forma
f := 1
for k := 1 to n do
f := f k

end for

Exemplo 3.8. Algoritmo de clculo de soma. Dada uma sucesso a1 , a2 , . . . de


nmeros reais. Consideremos a denio recursiva da soma sn = a1 + . . . + an
s0 = 0,

sk = sk1 + ak , se k 1.

2. DEFINIES RECURSIVAS

43

A extenso da sucesso para o conjunto {0} N d s0 = 0 . Claro que


em vez disso pode ser dada a base s1 = a1 , mas a extenso para o conjunto
{0} N permite simplicar um pouco o algoritmo.
Conforme com esta denio temos o algoritmo para calcular sn :
s := 0
for k := 1 to n do
s := s + ak

end for

Para calcular o n -esimo nmero de Fibonacci introduzimos duas variveis


auxiliares x e y :
x := 1; F := 1
for k := 3 to n do
y := x + F
x := F
F := y

end for

Ao terminar o algoritmo vamos ter F = Fn (a denio do Fn veja no exemplo


3.7).
O algoritmo precisa de anlise e justicao.

2.5 Clculo recursivo

Se usar a denio da sucesso directamente vamos ter clculo recursivo.


Exemplo 3.9. Consideremos clculo recursivo do factorial, por exemplo, 5! .
Temos
5! = 4! 5 = (3! 4) 5 = ((2! 3) 4) 5 = ((1! 2) 3) 4) 5 = 120.

Este exemplo mostra que o mtodo recursivo utiliza a denio directamente


e consiste em chamada da mesma denio mas com outro argumento (neste
exemplo k chama o predecessor k 1 ). Este processo continua-se at o
momento quando ser possvel calcular o valor directamente (ao atingir a base;
neste exemplo k = 1 ). A partir deste momento os clculos se cumprem na
ordem inversa.
No exemplo considerado que cada elemento da sucesso depende de um
s predecessor mas por exemplo na denio dos nmeros de Fibonacci cada
elemento tem 2 predecessores que complica muito os clculos:
F6 = (F4 + F5 ) = (F2 + F3 ) + (F3 + F4 )
= (1 + (F1 + F2 )) + ((F1 + F2 ) + (F2 + F3 ))
= (1 + (1 + 1)) + (1 + 1) + (1 + (F1 + F2 ))
3 + 2 + (1 + (1 + 1)) = 8.

Estes clculos realiza o algoritmo recursivo 3.1. Notemos que a forma do


algoritmo praticamente uma cpia da denio recursiva, mas utiliza notao
da linguagem Pascal.
O seguinte exemplo mostra mais uma variante para utilizar elementos antecedentes da sucesso:

CAPTULO 3. INDUO

44

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.
Figura 3.1: Clculo recursivo do nmero F6 de Fibonacci
Exemplo 3.10. Consideremos a denio
(B) s(0) = 0, s(1) = 1
(R) s(n) = s(bn/2c) + s(bn/5c) para n 2
Aqui bxc designa a parte inteira de x . Observemos que no h diferena
principal entre notao com ndice sn e com argumento s(n) .
Calculemos recursivamente por exemplo o nmero s(73) .
s(73) =
=
=
=
=
=

s(36) + s(14)
(s(18) + s(7)) + (s(7) + s(2))
s(18) + 2s(7) + s(2)
s(9) + s(3) + 2(s(3) + s(1)) + s(1) + s(0)
...
8s(1) + 6s(0) = 8.

2.6 Relaes recorrentes lineares

Dado um nmero natural p e a relao

sn = a1 sn1 + a2 sn2 + + ap snp .

(3.6)

Esta relao chama-se relao recorrente linear. Se denir directamente os primeiros p termos s1 , s2 , . . . , sp vamos ter uma denio recursiva de uma sucesso (sn ) .
Existe um mtodo para encontrar uma frmula para termo geral sn da
sucesso. Consideremos uma soluo na forma de progresso geomtrica
sn = rn , n 0.

(3.7)

Substituindo (3.7) na equao (3.6) vamos ter


rn = a1 rn1 + a2 rn2 + + ap rnp .

Daqui temos a equao caracterstica


rp = a1 rp1 + a2 rp2 + . . . + ap .

(3.8)

3. DEFINIO RECURSIVA E INDUO MATEMTICA

45

Se r uma das razes da equao a progresso geomtrica vai ser uma das
solues da equao (3.6).
Sejam xn e yn duas solues da equao (3.6), isto ,
xn = a1 xn1 + a2 xn2 + + ap xnp ,
yn = a1 yn1 + a2 yn2 + + ap ynp .

A soma zn = xn + yn uma soluo tambm que pode ser vericado directamente. Claro que
zn = C1 xn + C2 yn
soluo.
Se a equao (3.8) tem p razes diferentes r1 , . . . , rp a combinao
sn = c1 r1n + . . . + cp rpn ,

n = 1, 2, . . .

uma soluo da equao (3.6). As constantes c1 , c2 , . . . , cp podem ser determinadas a partir da condio que os primeiros termos so dadas (condies
iniciais).
No caso p = 2 vamos ter
sn = asn1 + bsn2 .

Equao caracterstica:

r2 = ar + b.

Soluo da relao. Se r1 6= r2 teremos


sn = c1 r1n + c2 r2n .

Se r1 = r2 = r ento

sn = c1 rn + c2 nrn .

Exemplo 3.11. Consideremos a relao recorrente sn = sn1 + 2sn2 onde


s1 = s2 = 3 . Temos sucesso sn :
3, 3, 9, 15, 33, 63, . . .

A equao caracterstica r2 = r + 2 tem razes r1 = 2 e r2 = 1 . Portanto


sn = c1 2n + c2 (1)n . Ponhamos aqui n = 1 e n = 2 e vamos ter
3 = c1 21 + c2 (1)1

donde c1 = 1, c2 = 1 e

3 = c1 22 + c2 (1)2

sn = 2n (1)n .

3 Denio recursiva e induo matemtica

3.1 Demonstrao de proposies

natural que o vnculo acima mencionado entre induo matemtica e relaes


recursivas permite usar induo para demonstrar asseres diferentes sobre a
sucesso denida. Tanto induo matemtica como uma denio recursiva
tm uma base e uma parte indutiva (recursiva).

CAPTULO 3. INDUO

46

Exemplo 3.12. A sucesso sn denida recursivamente s0 = 1 , sk = 2sk1


se k > 0 . Demonstrar que sn = 2n , n N {0} .
Demonstrao fcil dar por meio da induo matemtica. Base s1 = 20
vlida. Passo indutivo: demonstrar a implicao
(sk = 2k ) (sk+1 = 2k+1 )

Seja que sk = 2k . Ento sk+1 = 2sk = 2 2k = 2k+1 .


Este exemplo mostra que demonstrao de proposies em relao s funes
denidas recursivamente natural realizar utilizando induo matemtica.
Seja uma denio recursiva tem a estrutura seguinte. Dado o elemento x0
e a relao xn = (xn1 ), n 1 . Qualquer proposio P (n) relativamente a
esta sucesso xn pode ser demonstrada usando a induo matemtica de modo
seguinte
1. Vericar P (0)
2. Provar a implicao P (k) P (k + 1)

3.2 Induo com base de vrios elementos

Para denies recursivas que tem no lado direito da relao vrios argumentos,
i.e.
xn = n (xn1 , xn2 , . . . , xnl )
preciso usar outro principio de induo matemtica. Por exemplo, no caso
l = 2 deve ser usado o teorema seguinte

Teorema 3.5.

Seja m N . Suponhamos que

(B) P (m), P (m + 1) so verdadeiras

(I) As proposies P (k), P (k + 1) implicam P (k + 2) qualquer que seja


km.
Ento P (n) verdade para todos os n {m, m + 1, m + 2, . . .} .

Exemplo 3.13. Consideremos a sucesso dada recursivamente


b0 = b1 = 1,

bn = 2bn1 + bn2 ,

e a proposio
P (n) = {bn < 6bn2 },

se n 2

n 2.

preciso demonstrar que P (n) verdadeira para n 4 . Para isso vamos


usar o teorema 3.5.
Base. Temos b2 = 3, b3 = 7, b4 = 17, b5 = 41 . Como m = 4 preciso
vericar directamente n = 4 e n = 5 :
b4 < 6b2 , i.e. 17 < 6 3,

e b5 < 6b3 , i.e. 41 < 6 7.

Induo. Sejam que bk < 6bk2 e bk+1 < 6bk1 . Temos que demonstrar:
bk+2 < 6bk . Ento:
bk+2

=
<
=
=

2bk+1 + bk
denio
12bk1 + 6bk2 suposio
6(2bk1 + bk2 )
6bk
denio

Em virtude do teorema 3.5 bn < 6bn2 para todos n 4 .

4. EXERCCIOS

47

Exemplo 3.14. Seja = {a, b} . Calculemos o nmero sn de todas as palavras


de de comprimento n no contendo duas letras a consecutivas.
Resoluo. Seja An o conjunto descrito das palavras. Claro que
A1 = {a, b}, A2 = {ab, ba, bb}, A3 = {aba, abb, bab, bba, bbb}.

Ento, s1 = 2, s2 = 3, s3 = 5 . cmodo admitir que A0 = {} onde


palavra vazia. Logo s0 = 1 .
Seja n 2 . O conjunto An dividamos em duas partes. O primeiro
subconjunto A0n consiste das palavras com primeira letra a e no segundo A00n
a primeira letra de cada palavra b . Claro que cada palavra do A0n comea
das letras ab e resto tem n 2 letras. Mas o resto palavra arbitraria do
conjunto An2 . Por isso, |A0n | = sn2 . Agora o resto de cada palavra do A00n
contem n 1 letras e logo |A00n | = sn1 .
Ento temos a relao
sn = sn2 + sn1
que a segunda parte da denio da sucesso de Fibonacci Fn mas aqui os
primeiros dois termos so 2 e 3 .
Usando o teorema 3.5 pode-se provar que sn = Fn+2 .
Uma generalizao do teorema 3.5 tem a forma:

Teorema 3.6.

Suponhamos que

(B) P (m), P (m + 1), . . . , P (m + l 1) so verdadeiros;


(I) As proposies P (k), . . . , P (k + l 1) implicam P (k + l) qualquer que
seja k m .
Ento P (n) verdade para todos os nmeros n {m, m + 1, . . .} .

4 Exerccios

4.1 Induo matemtica


1. Demonstrar as identidades

n(n + 1)(2n + 1)
, nN
6
an+1 1
(a 6= 1)
(b) 1 + a + a2 + . . . + an =
a1

(a) 12 + 22 + . . . + n2 =

2. Demonstrar que para todos os nmeros n naturais

(a) n5 n divisvel por 10


(b) 11n 4n divisvel por 7




1 1
1 n
3. Dada a matriz A =
. Demonstrar que An =
.
0 1
0 1
4. Seja M um conjunto nito contendo n elementos. P(M ) designa o
conjunto de todos os subconjuntos de M . Determinar o nmero dos
membros de P(M )

CAPTULO 3. INDUO

48
5. Demonstrar para n N
(a) 5n 4n 1 divisvel por 16

(b) 5n+1 + 2 3n + 1 divisvel por 8


(c) n! 2n1

(d) 8n+2 + 92n+1 divisvel por 73


(e) 13 + 23 + . . . + n3 = (1 + 2 + . . . + n)2
n
X

1
n
(f)
i
i=1
(g)

n
X

1
2 n1
i
i=1

(h) an 1 n(a 1) (a > 0)


6. Demonstrar
(a)
(b)

m1
m1
m1
m1
Cnm = Cn1
+ Cn2
+ Cn3
+ + Cm1
, n m 0.

Cn1 + 2Cn2 + 3Cn3 + + nCnn = n2n1 .

7. Demonstre os teoremas 3.2, 3.3, 3.4, 3.5, 3.6.


8. Seja P (n) um predicado denido sobre o N . Suponhamos que P (n)
satisfaz s condies:
(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 chessboards).
10. Demonstrar que n N

a1 + . . . + an
n
a1 . . . an
n
ai 0, i = 1, . . . , n .

Soluo. Consideremos o caso particular quando o mdio aritmtico


a1 + . . . + an
= 1.
n

(3.9)

a1 . . . an 1.

(3.10)

preciso demonstrar que

4. EXERCCIOS

49

Se a1 = a2 = = an = 1 , a desigualdade (3.10) verdadeira. No caso


contrrio existem nmeros maiores e menores do que 1 . Seja a1 > 1 e
an < 1 . Se substituirmos este par por nmeros a01 e a0n de modo que
a01 + a0n = a1 + an e a0n = 1 ento vamos ter a mesma soma e o mesmo
mdio aritmtico 1 dos nmeros a01 , a2 , . . . , an1 , a0n . Ao mesmo tempo
a1 . . . an < a01 . . . a0n = a01 . . . an1

(3.11)

por causa da desigualdade a1 an < a01 a0n . De fato, se


a01 = a1 x,

1 = a0n = an + x,

0 < x < a1 an ,

ento
a01 a0n = (a1 x)(an +x) = a1 an +x((a1 an )x) = a1 an +x(a1 1) > a1 an .

Agora notemos que

a01 + + an1
= 1.
n1
Usando o passo indutivo podemos supor que
a01 . . . an1 1.

Daqui e da relao (3.11) deduzimos verdadeira da desigualdade (3.10).


A base da induo fcil vericar.
a1 + + an
O caso geral, quando o mdio aritmtico m =
um nmero
n
qualquer, reduz-se ao caso considerado por meio da substituio
ai = mxi , i = 1, 2, . . . , n.

4.2 Denies recursivas

1. Sucesso (xn ) determinada recursivamente


p
x1 = 1, xn = 2 + xn1 para n > 1.

Demonstrar que (n N ) xn < 2 .

2. Demonstrar que xn > 5 e que xn decrescente onde a sucesso xn


dada recursivamente


1
5
x0 = 3, xn =
para n > 0.
xn1 +
2
xn1
3. Dados a, b, S0 = a,
Sn e demonstr-l.

Sn = 2Sn1 + b . Encontrar uma frmula para

4. Achar uma frmula explcita para sn onde s0 = 3 e sn = 2sn1 para


n1
5. Demonstrar que se sn = asn1 para n 1 e a 6= 0 ento sn = an s0
para n N .

CAPTULO 3. INDUO

50

6. Demonstre que a sucesso xn = 1+1/xn1 para n 2 e x1 = 1 satisfaz


a relao xn = Fn+1 /Fn onde Fn n -simo nmero de Fibonacci.
7. Demonstrar que F1 + F2 + . . . + Fn = Fn+2 1 , n N onde Fn a
sucesso de Fibonacci.
8. A sucesso das matrizes M1 , M2 , . . . denida por




1 1
1 1
M1 =
para n 2.
, Mn = Mn1
0 1
0 1
Demonstrar que


1
Mn =
0


n
,
1

nN

9. Demonstre que para qualquer n natural



n 
1 1
Fn+1
=
1 0
Fn

Fn
Fn1

onde Fn n -esimo nmero de Fibonacci


10. (a) Dar uma denio recursiva para a sucesso (2, 4, 16, 256, . . .) . A
sucesso pode ser representada (2, 22 , (22 )2 , ((22 )2 )2 , . . .) .
(b) Dar uma denio recursiva da sucesso (2, 4, 16, 65536, . . .) . Esta
2

22

sucesso pode ser representada na forma (2, 22 , 22 , 22 , . . .) .


11. Dar uma denio recursiva para a sucesso pn =

2n
, n = 0, 1, . . .
n!

12. Dar uma denio recursiva para a sucesso dos polinmios


Pn = Pn (x) =

x(x 1) . . . (x n)
, n0
n!

onde x um nmero real.


Resposta: P0 = x , Pn = Pn1

xn
, n1
n

13. Dar uma denio recursiva para a sucesso


xn =

an (2n)!
, n = 0, 1, 2, . . .
b2n1 n!

14. Construir uma denio recursiva para o produto


sn = a1 a2 an =

n
Y

i=1

Soluo: consideremos a propriedade


n+1
Y
i=1

ai = an+1

n
Y

i=1

ai

ai .

4. EXERCCIOS

51

donde temos a denio


s1 = a1 ,

sn+1 = an+1 sn , se n 1.

Pode-se extender o domnio admitindo s0 = 1 . cmodo considerar que


0
Q
ai = 1 :
o produto que no contem factores
i=1

s0 = 1,

sn+1 = an+1 sn , se n 0.

15. Dar denio recursiva para a soma


sn = a1 + a2 + + an =

sobre o domnio {0, 1, 2, . . .}

n
X

ai .

i=1

16. Sejam S um conjunto e (A1 , A2 , . . .) uma sucesso de subconjuntos do


conjunto S .
(a) De uma denio recursiva para unio

n
[

Aj .

j=1

(b) De que modo poderamos denir a "unio vazia"?


n
\
Aj .
(c) Responder a mesma questo para a interseco
j=1

17. Dada a denio recursiva P0 = a0 e Pn = Pn1 x + an se n 1 .


Demonstrar que Pn = a0 xn + a1 xn1 + . . . + an . Construir um algoritmo
para calcular Pn
18. Vericar que a sucesso dada por sn = 2n+1 +(1)n satisfaz s condies
s0 = s1 = 3 e sn = sn1 + 2sn2
19. Dada a denio recursiva u0 = 1 , a0 = 1 , un = un1 /n , an = an1 +
un se n 1 . Demonstrar que
1
1
1
+ + + .
1! 2!
n!
Construir um algoritmo para calcular iterativamente an .
an = 1 +

Indicao. Demonstre primeiro que un = 1/n! .


O algoritmo:
u := 1 ; a := 1 {u = u0 , a = a0 }
for k := 1 to n do
u := u/k ; a := a + u

end for

20. Construir uma denio recursiva para a sucesso


sn = 1 + 2 +

23
2n
22
+
+ +
2!
3!
n!

Indicao: utilize a sucesso auxiliar un = 2n /n! .


Construir um algoritmo para calcular iterativamente sn .

CAPTULO 3. INDUO

52

21. Determinemos recursivamente a0 = a1 = 1 e an = an1 + 2an2 para


n2.
(a) calcular a6 recursivamente
(b) demonstrar que todos os termos an so mpares
22. Mostrar que se a sucesso sn satisfaz s1 = 2, s2 = 3 e sn = sn2 +
sn1 para n 3 ento sn = Fn+2 onde Fn sucesso de Fibonacci:
F1 = 1, F2 = 1 , Fn = Fn2 + Fn1 se n 3 .
23. Demonstrar que se Fn sucesso de Fibonacci ento Fn1 Fn+1 = Fn2 1
onde sinal + corresponde ao nmero n par e sinal escolhemos caso
contrrio.
24. Demonstrar que 2Fn > 5Fn2 para n 6 onde Fn n -simo nmero
de Fibonacci ( F1 = F2 = 1, Fn = Fn1 + Fn2 , n 3 )
25. Uma sucesso sn denida recursivamente:
s0 = s1 = s2 = 1,

sn = sn1 + sn2 + sn3 , se n 3 .

Demonstre que sn < 2sn1 para n 4


26. Demonstrar que
Fm+n = Fm1 Fn + Fm Fn+1 , m 2, n 1

onde Fn n -simo nmero de Fibonacci.


27. Consideremos todas as palavras formadas de letras a e b (por exemplo
aabab, abb ). Seja sn o nmero de todas as palavras de comprimento n
e no contendo a parte aab .
(a) calcular s0 , s1 , s2 , s3
(b) encontrar uma relao recursiva para sn
(c) calcular s8
Indicao. O conjunto das palavras que comeam com b tem sn1 elementos. Demonstre que sn = sn1 + sn2 + 1 , n 2 .
28. Achar uma frmula explcita para sn onde s0 = 3, s1 = 6 e sn = sn1 +
2sn2 .
Resposta: sn = 3 2n .
29. Em cada um dos seguintes casos achar uma frmula explcita para sn .
(a) s0 = 2, s1 = 1 e sn = sn1 + 6sn2 para n 2

(b) s0 = 2 e sn = 5sn1 para n 1

(c) s0 = 1, s1 = 8 e sn = 4sn1 4sn2 para n 2

(d) s0 = c, s1 = d e sn = 5sn1 6sn2 para n 2


(e) s0 = 1, s1 = 4 e sn = sn2 para n 2

4. EXERCCIOS

53

(f) s0 = s1 = s2 = 1 ,

sn = sn1 sn2 + sn3 para n 3

30. Seja s0 = 1, s1 = 8 e sn = 4sn1 4sn2 para n 2 . Usando induo


demonstrar que
sn = (1 + 3n)2n , n 0.
31. Dada a denio recursiva s0 = 1, s1 = 0 , sn = 2(sn1 sn2 ) para
n 2 . Usando induo demonstrar que
sn = 2

n+1
2

cos(n + 1) , n 0.
4

32. Achar o valor do determinante de ordem n :



2 1 0 . . .

1 2 1 . . .

0 1 2 . . .
n =
...
...
0 0 0 . . .

0 0 0 . . .

0
0
0
2
1


0
0
0


1
2

Indicao. Demonstrar que n = 2n1 n2 se n 3 .

Captulo 4

Algoritmos cclicos
1 Introduo

1.1 Exemplos

Algoritmo cclico um dos mtodos principais em construo de algoritmos.


Resultados de trabalho de um algoritmo cclico 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 varivel 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 sucesso
x0 = 2, xn = xn1 + 3, se n 1.

Sobre a sucesso xn dos valores da varivel x podemos dizer que xn = 2 +


3n . Esta ltima proposio pode ser demonstrada usando induo na base da
denio recursiva.
Exemplo 4.2. Consideremos o ciclo
r := 30 ; k := 0
while r 7 do
r := r 7 ; k := k + 1

end while

54

1. INTRODUO

55

Cada passo do algoritmo cclico faz uma alterao das variveis r e k . A


tabela a seguir apresenta os passos do algoritmo.
n
0
1
2
3
4

1.2 Ciclo innito. Estado

r
30
23
16
9
2

k
0
1
2
3
4

Um ciclo innito tem o uxograma apresentado na gura 4.1. A direita da gura


o cdigo usando uma linguagem formal. Letra f representa o operador do
ciclo. Realmente, um operador-algoritmo que executa-se consequentemente.
O resultado do operador-algoritmo representa-se por meio de atribuio
S := f (S).

(4.1)

A letra S usa-se para indicar o bloco (cortejo, estado) de todas as variveis que
se alteram no algoritmo. O cortejo destas variveis vamos chamar por estado
(situao actual, meio ambiente) designada pela letra S .
Exemplo 4.3. No ciclo innito
r := 30; k := 0

while true do
r := r 7;
k := k + 1

end while

S = (r, k)

e a funo f tem a representao


f (S) = f ((r, k)) = (r 7, k + 1).

O ciclo produz uma sucesso


S0 , S1 , . . . , Sn , . . . ,

onde S0 estado inicial, Sn estado depois de n passos do algoritmo.


No exemplo 4.3 temos a seguinte sucesso dos estados
(30, 0), (23, 1), (16, 2), (9, 3), (2, 4), . . .

A representao do operador f na forma (4.1) signica que uma funo


f : S S produz o estado novo S 0 = f (S) e a seguir a atribuio S := S 0
serve para substituir a memria: S toma o valor novo S 0 . Aqui S o
conjunto de todos os estados possveis (o domnio do operador f ).
No exemplo 4.3 S = Z Z o conjunto de todos os pares ordenados dos
nmeros inteiros.

CAPTULO 4. ALGORITMOS CCLICOS

56

1.3 Ciclo com pre-condio

Ciclo com pre-condio tem o uxograma que vemos sobre a gura 4.2. O ciclo
pode funcionar innitamente ou terminar depois de um dos passos.
Na gura 4.2 so apresentadas duas proposies (mais precisamente: predicados) I(S) e P (S) . As funes P e I com argumento S pode tomar
apenas os dois valores verdade e falso . O predicado P (S) chama-se precondio do ciclo e serve para terminar o ciclo. O ciclo termina quando a precondio P (S) for falso. Portanto logo ao terminar o ciclo podemos armar
que a negao
P (S)
verdadeira!

1.4 Invariante de ciclo

Denio 4.1.

Uma proposio I(S) chama-se invariante do operador f se


verdadeira a implicao
I(S) I(S 0 ),

onde S 0 = f (S) .

Por exemplo, consideremos o operador no exemplo 4.3:


S 0 = (r0 , k 0 ) = (r 7, k + 1),

S = (r, k).

A igualdade r + 7k = 1 um invariante. De fato,


r0 + 7k 0 = r 7 + 7(k + 1) = r + 7k = 1.

Denio 4.2. Uma proposio


while true do

I(S) chama-se invariante de ciclo

S := f (S)

end while

se a implicao

(4.2)

I(S) I(S 0 ),

onde S = f (S) verdadeira, o seja, se I(S) invariante do operador f .


0

while do
S := f (S)
end while
true

S := f (S)

Figura 4.1: Ciclo innito

1. INTRODUO

57

S := S0

while P (S) do
S := f (S)
end while

S := S0 { I(S0 ) }

P (S)

Nao

Sim

{ P (S) I(S) }

S := f (S)

Figura 4.2: Ciclo com pre-condio


Um invariante proposio que sendo verdadeira na entrada do ciclo ser
verdadeira depois de cada um dos passos do algoritmo cclico. Por meio da
induo matemtica fcil demonstrar o seguinte teorema:

Teorema 4.1.

Seja S0 , S1 , . . . , Sn , . . . a sucesso dos estados no algoritmo


cclico 4.1, e I(S) invariante do operador f . Se I(S0 ) verdadeiro ento
I(Sn ) tambm verdadeiro para todos n = 0, 1, 2, . . . .
Nota 1. O teorema 4.1 valido tambm para o ciclo com pre-condio mas at
terminar. Observemos que invariante ser verdadeiro ao terminar o ciclo.
Exemplo 4.4. Para a atribuio i := i + 2 podemos indicar invariantes
P1 (i) = {i par}

e P2 (i) = {i mpar}.

Consideremos o ciclo innito


while true do
i := i + 2

end while

com estado S = i . Se na entrada a varivel i toma o valor par, ento depois


de cada passo do ciclo o i tem um valor par. O mesmo podemos armar sobre
valores mpares.
Exemplo 4.5. Seja S = (m, n) . Demonstrar que I(S) = {m = 2n } um
invariante do ciclo

while true do
n := n + 1
m := m 2

end while

CAPTULO 4. ALGORITMOS CCLICOS

58

Por conveno vamos usar a notao I(m, n) em vez de I(S) . Designemos


m0 = 2m, n0 = n + 1 . Segundo denio 4.2 temos que demonstrar a
implicao
0

I(m, n) I(m0 , n0 ) ou {m = 2n } {m0 = 2n }.

Temos

m0 = 2m = 2 2n = 2n+1 = 2n .

Compare esta demonstracao com a demonstracao deductiva puramente


0

{m = 2n } {2m = 2 2n = 2n+1 } {m0 = 2n }.

1.5 Invariante de ciclo com pre-condio

No caso de ciclo com pre-condio temos a possibilidade de utilizar a informao sobre estado obtida na pre-condio. Isto altera um pouco o conceito do
invariante (4.2). De facto, dentro do ciclo possvel usar a pre-condio P (S)
que verdadeira.

Denio 4.3.

condio
S := S0
while P (S)
S := f (S)
se

A proposio I(S) chama-se invariante de ciclo com pre-

do

end while

onde S = f (S) .
0

I(S) P (S) I(S 0 )

(4.3)

O seguinte teorema justica a denicao 4.3

Teorema 4.2. Seja I(S) um invariante do ciclo (g. 4.2) i.e. I(S) satisfaz
condio (4.3). Se para o estado inicial S0 a proposio I(S0 ) verdadeira
ento ao terminar o ciclo verdadeira a assero
I(S) P (S).

(4.4)

Exemplo 4.6. Consideremos o ciclo


while m 6= n do
if m > n then
m := m n

else

n := n m

end if
end while

natural introduzir o estado S = (m, n) . A proposio


I(S) = I(m, n) = {m > 0 n > 0}

invariante do algoritmo. No caso m > n temos alterao apenas da varivel


m e o valor novo de m ser positivo. Caso contrrio m n mas (precondio!) m 6= n e portanto m < n e valor novo da varivel n ser positivo.

2. EXEMPLOS DE ALGORITMOS

59

Se inicialmente as variveis m e n tm valores positivos ao terminar o


ciclo vamos ter
I(S) P (S) = {m > 0 n > 0} {m = n} = {m = n > 0}.

1.6 Demonstrao que o ciclo termina

Infelizmente existe mais uma possibilidade: ciclo com pre-condio pode trabalhar innitamente. Para demonstrar que o ciclo termina cmodo usar a
seguinte assero:

No existe nenhuma sucesso decrescente innita de nmeros naturais.


Exemplos de aplicao podemos ver em baixo.

2 Exemplos de algoritmos

2.1 Algoritmo de diviso 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 proposio
I(S) = I(r, k) = {a = kb + r}

invariante. De facto designemos os valores novos de r e k por r0 e k 0


respectivamente, i.e.
(r0 , k 0 ) = f ((r, k)) = (r b, k + 1),

onde f designa o operador contendo as atribuies r := r b; k := k + 1 .


Ento r0 = r b , k 0 = k + 1 . Temos que demonstrar a implicao
{a = kb + r} {a = k 0 b + r0 }.

Demonstrao:
k 0 b + r0 = (k + 1)b + r b = kb + r = a.

No exemplo 4.7 vemos um algoritmo. Como poderemos ver que este algoritmo serve para encontrar quociente incompleto k e resto de diviso r do
nmero inteiro no negativo a por nmero natural b . Notemos que antes de
demonstrar preciso dar denio correspondente.

Denio 4.4.

Se o nmero a representado em forma a = kb + r onde


0 r < b , nmeros inteiros k e r chamam-se quociente e resto de diviso a
por b respectivamente.

CAPTULO 4. ALGORITMOS CCLICOS

60

O exemplo 4.7 diz que a igualdade a = kr + b invariante do ciclo. O


teorema 4.2 (equao (4.3)) permite armar que por m do ciclo as variveis k
e r obedecem as condies:
a = kr + b

e r < b.

Mas ns no temos desigualdade r 0 . Em tais casos possvel conseguir


o resultado por meio de uma extenso do invariante. Consideremos o segundo
invariante: r 0 . De facto seja r0 = r b valor novo da varivel r .
Porquanto r b para r0 temos r0 = r b 0 . Notemos que aqui usamos
a denio (4.3) do invariante para ciclo com pre-condio. O nosso invariante
extendido
I(r, k) = {a = kr + b r 0}.
Agora por m do ciclo temos

I P = {a = kr + b r 0} {r < b}.

Inicialmente no algoritmo no exemplo 4.7 r = a e k = 0 e a proposio I(r, k)


vlida. Ento ns podemos dizer que o algoritmo ao terminar d o resultado
certo.
No algoritmo de diviso consideremos a varivel r . O primeiro valor de r
igual a a 0 . A varivel r toma consequentemente as valores a, a b, a
2b, . . . onde b > 0 . A ltima sucesso no innita e portanto o ciclo termina.

2.2 Algoritmo de Euclid

Algoritmo de Euclid serve para encontrar o mximo divisor comum MDC(a, b)


dos dois nmeros inteiros positivos a e b . Por exemplo MDC(21, 35) = 7 .
A ideia principal reduzir os elementos do par (a, b) e obter um par (a1 , b1 )
com o mesmo mximo divisor comum:
MDC(a1 , b1 ) = MDC(a, b).

Manuteno desta igualdade manuteno de um invariante. O algoritmo utiliza o teorema

Teorema 4.3.

Se b 6= 0 ento
MDC(a, b) = MDC(b, r)

onde r = a mod b o resto de diviso a por b .


No algoritmo 4.1 a e b so grandezas dadas e m e n so variveis que
obedecem ao invariante
MDC(a, b) = MDC(m, n).

O resultado do algoritmo MDC(a, b) = d .


Demonstremos que o ciclo termina. Notemos que r < n e a desigualdade
m > n um invariante do ciclo. A sucesso dos valores n decrescente e
portanto no sucesso innita.

2. EXEMPLOS DE ALGORITMOS

61

m := a ; n := b
n 6= 0 do
r := m mod n
(m, n) := (n, r)

while

end while

{ n = 0 m = MDC(a, b) }
d := m
Algoritmo 4.1: Euclid

2.3 Equao em nmeros inteiros

O algoritmo de Euclid pode-se aplicar para resolver a equao em nmeros


inteiros. Consideremos a equao
ax + by = c

(4.5)

onde a, b, c so constantes inteiras, a, b > 0 . preciso encontrar todas as


solues inteiras da equao.
Por exemplo, dada equao 8x+3y = 1 . Substituindo 8 = k3+r = 23+2
vamos ter equao (2 3 + 2)x + 3y = 1 ou 3x1 + 2x = 1 onde x1 = 2x + y .
Esta ltima equao tem uma das solues x1 = 1, x = 1 . Ento
x = 1,

y = x1 2x = 1 2(1) = 3.

Consideremos agora esta reduo em forma geral. Seja


k = ba/bc

e r = a mod b,

i.e. a = kb + r, 0 r < b . Substituindo na (4.5) vamos ter


(kb + r)x + by = b(kx + y) + rx = c.

Sejam a1 = b , b1 = r , x1 = kx + y ou y = x1 kx , y1 = x . Ento (4.5)


reduz-se equao
a1 x1 + b1 y1 = c
(4.6)
com a1 = b, b1 = r = a mod b .
Esta reduo pode ser realizada vrias vezes. O resultado um algoritmo
cclico. Representemos a substituio em forma matricial
  
 
x
x1
0 1
=
1 k
y1
y
 
x1
ou X = A1 X1 onde X1 =
e x1 , y1 uma das solues da equao
y1
(4.6).
Depois de segunda substituio vamos ter
 
x2
,
X = A1 X1 = A1 A2 X2 , X2 =
y2
a2 x2 + b2 y2 = c

(4.7)

CAPTULO 4. ALGORITMOS CCLICOS

62

com a2 = b1 , b2 = r = a1 mod b1 .
Em caso geral, depois de n passos
X = A1 A2 An Xn .

importante: depois de qualquer passo temos a proposio:


 
xn
uma das solues da equao
Se Xn =
yn
an xn + bn yn = c
 
x
ento X =
uma das solues da equao inicial (4.5).
y

A sucesso dos pares (ak , bk ) a mesma sucesso que tnhamos no algoritmo


de Euclid. Por isso depois de um nmero nito k de passos o algoritmo termina
com ak = d = MDC(a, b) e bk = 0 . Suponhamos que c divisvel por d e
vamos ter
d xk + 0 yk = c

donde xk = c/d e yk nmero qualquer. A soluo X pode ser encontrada


da frmula X = Pk Xk onde Pk = A1 A2 . . . Ak .


1 0
m := a ; n := b ; P :=
0 1
while n 6= 0 do
k := m div n ; r := m k n
(m, n) := 
(n, r) 
0 1
P := P
1 k

end while

}
{ n = 0, m = MDC(a, b) X = P X

Algoritmo 4.2: Euclid (extenso)


uma das solues da
No algoritmo 4.2 vamos ter o invariante: Se X
equao me
x + ne
y = c ento
 

=P x
X = PX
y

uma das solues da equao (4.5).


Por exemplo, consideremos 23x + 13y = 1 . A tabela mostra o resultado do

3. FORMAO DE UM ALGORITMO CCLICO

63

algoritmo
k

23

13

13

10

10

incio

P


1 0
0 1


0 1
1 1


1 1
1 2


1 4
2 7


4 13
7 23

Ao terminar o algoritmo temos


  
  
x
x
4 13
=

7
23
y
y

onde x
= 1, y = t (qualquer nmero inteiro). Daqui temos a soluo geral
x = 4 13t,

y = 7 + 23t.

3 Formao de um algoritmo cclico

3.1 Colocao problema

preciso construir um algoritmo para encontrar um cortejo S = (x, y, . . .) que


satisfaa a uma condio dada. Suponhamos que esta condio pode ser representada em forma I(S) F (S) onde I(S) e F (S) so asseres (predicados).
A proposio I(S) vai servir como invariante, F (S) d a condio nal e ser
verdadeira por m do ciclo.

Etapas da resoluo do problema


Para obter um algoritmo para encontrar S preciso:
1. Formular as condies I(S) e F (S) a partir da colocao do problema,
isto , representar a condio dada em forma I(S) F (S) .
2. Encontrar um estado inicial S0 tal que I(S0 ) verdadeiro.
3. Encontrar operao f tal que no altera o invariante I(S) e vericar o
invariante usando o Teorema 4.2.
4. Demonstrar que o ciclo termina, i.e. que a sucesso S0 , S1 , . . . , Sn
nita.

CAPTULO 4. ALGORITMOS CCLICOS

64

4 Exerccios

4.1 Algoritmos cclicos

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 proposies I1 (m, n) = {m + n par} e I2 (m, n) = {m +
n mpar} so invariantes do ciclo
while 1 m do
m := m + 1
n := n + 1

end while

4. Mostrar que as proposies n2 m3 e 2m6 < n4 so invariantes do


ciclo
while 1 m do
m := 2m
n := 3n

end while

Resoluo para a proposio P (m, n) = {2m6 < n4 } :

Designemos m0 = 2m e n0 = 3n . Temos
6

P (m0 , n0 ) = {2m0 < n0 } = {2 26 m6 < 34 n4 }.

Como 26 < 34 a ltima assero decorre de P (m, n) i.e.


P (m, n) 2m6 < n4

5. Consideremos o ciclo

2 26 m6 < 34 n4 P (m0 , n0 )

4. EXERCCIOS

65

while

j n do
i := i + 2; j := j + 1

end while

Quais das seguintes asseres


(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
so invariantes ?
6. Demonstre que a proposio {2k 3l x = a} ( a um nmero real dado)
um invariante do algoritmo cclico
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 proposio {pxi = an } um invariante do algoritmo cclico ( n
um nmero natural, a um nmero real)
(b) Ao terminar o ciclo p = an
(c) O ciclo termina
8. Demonstrar que a proposio {kxm = an } um invariante do algoritmo
cclico ( n um nmero natural)
k := 1; x := a; m := n
while m > 0 do
if odd(m) then
k := k x

CAPTULO 4. ALGORITMOS CCLICOS

66
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 proposio {kx + y = a} invariante no algoritmo
cclico ( a um nmero 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 .

4.2 Formao de algoritmo

Em todos os problemas construir um algoritmo realizando as primeiras 5 etapas


indicadas em cima.
1. Calcular n!
2. Sucesso de Fibonacci: F1 = F2 = 1,

Fk = Fk1 + Fk2 se k 3 .

(a) Calcular Fn .
(b) Dado M > 0 achar o primeiro nmero n tal que Fn > M .
3. Encontrar soma dos dgitos de um nmero natural.
4. Representar nmero arbitrrio natural N em forma N = 2k x onde x
um nmero mpar.
5. Representar nmero arbitrrio natural N em forma N = 2k 3l x onde
MDC(x, 6) = 1 .
6. Dado nmero A encontrar o primeiro nmero natural n para o qual
soma 1 + 1/2 + 1/3 + . . . + 1/n > A .
7. Encontrar o mnimo divisor primo de um nmero natural.
8. Dados nmeros a1 , . . . , an
(a) Achar a soma a1 + . . . + an
(b) Achar o nmero mximo max{a1 , . . . , an } e o seu ndice

(c) Achar o ndice do primeiro nmero negativo (supondo que tal nmero
existe)

4. EXERCCIOS

67

9. Dados nmeros naturais d, p , d < p , p > 1 . A sucesso a0 , a1 , . . .


denida por meio da relao recursiva a0 = 1, ak+1 = ak d mod p .
Encontrar o primeiro ndice k para o qual ak = 1 .
10. Sucesso de Fibonacci de restos da diviso por nmero natural p > 1
dado. Sucesso fk , k = 1, 2, . . . denida por meio da relao recursiva
f1 = f2 = 1 , fk = (fk2 + fk1 ) mod p . Demonstrar que a sucesso tem
o ciclo (perodo), isto , existe o nmero natural T tal que k fk+T = fk .
Encontrar o T .

Captulo 5

Introduo teoria de grafos


e rvores
1 Grafos

1.1 Grafo orientado (com direces, digrafo)

O conceito de grafo surge de maneira natural de diferentes problemas de informtica. Organizao de dados em estruturas tem sua reexo em usar o conceito
de grafo. Claro que cmodo representar as estruturas geometricamente. Grafos tambm tm representao geomtrica. Os elementos principais de grafo so
objectos-vrtices e arcos que representam uma relao entre objectos.
Notemos que o conceito de grafo um conceito mais geral do que o conceito
de relao. Como se sabe cada relao sobre um conjunto nito pode ser representada em forma de um diagrama onde cada vrtice representa um elemento do
conjunto e cada par (x, y) ordenado da relao pode ser representado por meio
de um arco orientado. Em geral possvel considerar vrios arcos (ou mltiplos
arcos) que ligam dois vrtices. Desta maneira temos o conceito geral de grafo
orientado.

Denio 5.1.

Grafo orientado G o terno ordenado G = (V, E, ) onde

V um conjunto de vrtices, V = V (G)


E um conjunto de arcos, E = E(G)
: E V V ( uma funo com domnio E . Valores da funo
pertencem ao produto directo V V )

Exemplo 5.1. Sejam V = E = {0, 1, 2, . . . , n 1} e a funo denida pela


frmula
(k) = (k, (k + p) mod n), k E

onde p {1, . . . , n 1} . Se p = 1 , o grafo pode ser desenhado como um


polgono regular com n vrtices. Os vrtices do polgono so os vrtices do
grafo e os lados do polgono representam os arcos do grafo.
Desenhe o grafo para n = 4 nos casos p = 2 , p = 3 .

68

1. GRAFOS

69

Denio 5.2 (Incidncia, arcos paralelos, lao).


Se (e) = (p, q) diz-se e vai de p a q , p o vrtice inicial, q a
extremidade do arco e ou o vrtice terminal. Diz-se tambm que cada
um dos vrtices p e q incidente ao arco e .
Se (e) = (f ) = (p, q) arcos e e f chamam-se arcos mltiplos ou
paralelos. Caso (e) = (p, q) e p = q o vrtice chama-se lao.

1.2 Vnculo entre grafo orientado e uma relao

Consideremos um grafo sem arcos paralelos. A funo determina correspondncia biunvoca ( bijectiva) entre E e o subconjunto R V V que
forma uma relao sobre o conjunto V
R = (E).

Inversamente, a cada relao R V V podemos considerar o grafo (V, R, )


onde a funo dada por ((v1 , v2 )) = (v1 , v2 ) se (v1 , v2 ) R .

1.3 Grafo no orientado (grafo sem direces)

Denio 5.3.

Grafo G terno G = (V, E, ) onde

V o conjunto de vrtices, V = V (G)


E o conjunto de arcos (arestas), E = E(G)
: E {{u, v} : u, v V } (Valores da funo so subconjuntos de
V e estes subconjuntos so pares no ordenados)

Nota 1. Se u = v , o conjunto {u, v} consiste de um s elemento, isto ,


{u, u} = {u} .

O termo grafo vamos usar no sentido de grafo no orientado, enquanto que


para grafos orientados usaremos termo digrafo.

1.4 Grau de vrtice. Relao de adjacncia

Denio 5.4. Seja G um digrafo (grafo orientado). Dois vrtices u e v


do digrafo G so adjacentes se existe um arco e E(G) que liga u e v
( u vrtice inicial), isto , (u, v) = (e) . Ento, a relao de adjacencia A
dena-se por meio da frmula
A = (E(G)) V V.

Relao de adjacncia para grafo no orientado determina-se analogamente.


Nota 2. Grafos diferentes G1 e G2 que tm o mesmo conjunto V de vrtices
podem ter as mesmas relaes de adjacncia no caso de existncia de arcos
paralelos.

70

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES

Denio 5.5 (graus de vrtices, digrafo). Para um vrtice v V (G) consideremos o nmero dos arcos com extremidade no vrtice v , i.e., o nmero de
elementos do conjunto
{e E(G) : (e) = (u, v)}.

Este nmero designemos por indeg(v) . Analogamente o nmero de arcos que


partem de v designemos por outdeg(v) . Para o vrtice v3 na gura 1.2
indeg(v3 ) = 1, outdeg(v3 ) = 2 .
Se omitir as direces obteremos o conceito de grau de vrtice de grafo no
orientado.

Denio 5.6 (Grau de vrtice).

deg(v) o nmero de todos os arcos {v, w}


onde w 6= v mais duas vezes o nmero de laos {v, v} .

Denio 5.7

(Sucesso de graus). D0 (G) o nmero de vrtices isolados


(de grau 0 ), Dk (G) o nmero de vrtices de grau k . A sucesso de graus
a sucesso
D0 , D1 , D2 , . . .

Teorema 5.1.

As seguintes relaes so validas:

1. Soma de todos graus de vrtices de um grafo G igual duas vezes o


nmero de arcos:
X
deg(v) = 2|E(G)|
vV (G)

2. A mesma soma pode ser representada em forma


D1 (G) + 2D2 (G) + 3D3 (G) + . . . = 2|E(G)|

(5.1)

Demonstrao. Cada um dos arcos tem duas extremidades, e a cada extremidade corresponde uma unidade de grau do vrtice. Formalmente a demonstrao
pode ser realizada por meio da induo em relao ao numero dos arcos de grafo.
Se aumentarmos um arco, logo aparecem duas unidades dos vrtices incidentes
ao arco.
A segunda frmula (5.1) vamos ter se agrupar o conjunto de todos os vrtices
em blocos onde em cada um dos blocos os vrtices tm o mesmo grau.
Nota 1. Para grafos orientados vlida a relao seguinte entre graus indeg e
outdeg
X
X
outdeg(v).
indeg(v) =
(5.2)
vV (G)

vV (G)

Esta proposio pode ser facilmente demonstrada usando induo matemtica em relao ao nmero dos arcos.

Denio 5.8

(grafos regular e completo). Um grafo regular se todos os


vrtices tm o mesmo grau.
Grafo completo de n vrtices (designao Kn ) um grafo sem laos e
arcos paralelos em que cada vrtice adjacente a todos vrtices do grafo.
O grafo Kn pode ser desenhado como polgono regular de n vrtices com
todas as diagonais.

1. GRAFOS

71

Denio 5.9. Subgrafo:

H subgrafo de G se

V (H) V (G)
E(H) E(G)

a funo 1 para G concorde com 2 para H sobre E(H) , i.e.,


2 (e) = 1 (e) para e E(H)

1.5 Caminhos, ciclos

Denio 5.10 (Caminho de comprimento n ). Dado um digrafo G . Um


caminho do vrtice u para o vrtice v de comprimento n dene-se por meio
das duas sucesses: a sucesso dos arcos e1 , e2 , . . . , en e a sucesso dos vrtices
x1 , x2 , . . . , xn+1 . O primeiro e o ltimo vrtices so x1 = u , xn+1 = v e
(ei ) = (xi , xi+1 ) , i = 1, 2, . . . n .
No caso x1 = xn+1 o caminho chama-se caminho fechado.
Para um grafo no orientado caminho de comprimento n dena-se de
mesma maneira mas neste caso (ei ) = {xi , xi+1 } , i = 1, 2, . . . , n .
A denio a seguir para grafo no orientado.

Denio 5.11 (Caminho simples, ciclo). Um caminho simples se todos os


arcos do caminho so diferentes. Ciclo caminho fechado, simples e os vrtices
x1 , x2 , . . . , xn so diferentes (mas x1 = xn+1 ).
Denio 5.12 (Grafo acclico, caminho acclico). Grafo acclico um grafo
que no contm ciclos. Um caminho acclico se o subgrafo que consiste de
todos arcos e vrtices do caminho acclico.
Denio 5.13 (grafo conexo).

Grafo G chama-se grafo conexo se existe pelo


menos um caminho entre cada um par de vrtices do G .
Em geral vamos considerar componentes de grafo. Um subgrafo G0 chamase componente se no existe outro subgrafo conexo contendo G0 e diferente de
G0 .

1.6 Matriz de adjacncia

Consideremos o seguinte problema: calcular o nmero cij de todos os caminhos


de comprimento 2 com vrtice inicial vi e vrtice terminal vj . Primeiro
n
P
tk onde tk nmero de caminhos com vrtices vi , vk , vj
notemos que cij =
k=1

(vrtice intermdio vk ). Segundo o princpio do produto tk = aik akj . Ento


cij =

n
X

aik akj .

k=1

A ltima relao mostra que cij


Por exemplo a matriz

1 2
0 2
2
C=A =
1 0
0 1

o elemento da matriz C = A2 .
1
0
0
0

2
1
2
0
0
=
1
1
0
0

7
4
3
2

1
0
1
0

2
0

1
0

72

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES

fornece informao completa sobre os caminhos de comprimento 2 . Por exemplo, existem 3 caminhos de comprimento 2 com vrtice inicial v3 e vrtice
terminal v2 .
Da mesma maneira possvel demonstrar que a matriz An contm informao sobre os caminhos do comprimento n . O elemento ci,j o nmero dos
caminhos de comprimento n com vrtice inicial vi e vrtice terminal vj .

1.7 Isomorsmo de grafos

Denio 5.14

(Isomorsmo de digrafos). Os dois grafos G = (V, E, ) e


G0 = (V 0 , E 0 , 0 ) chamam-se isomorfos se existem duas bijees f : V V 0 e
g : E E 0 que conservam correspondncia (incidncia) entre arcos e vrtices.
Se (e) = (u, v)
u u0 = f (u), v v 0 = f (v), e e0 = g(e)

ento

0 (e0 ) = (u0 , v 0 )

e vice versa.

Denio 5.15

(Isomorsmo de grafos no orientados). Neste caso temos a


mesma denio, necessrio s mudar os pares ordenados para conjuntos de
dois elementos: . . . {u, v} . . . {u0 , v 0 } .

Denio 5.16 (Invariante de isomorsmo).

Todos os conceitos dados por meio


de elementos principais de grafos, no se alteram se passarmos de um grafo para
outro isomorfo. Esses conceitos chamam-se invariantes de isomorsmos. Por
exemplo, conceitos de grau de vrtice, caminho simples, ciclo, proposies do
tipo tem n vrtices, etc. Pode-se usar invariantes para determinar se os grafos
dados so isomorfos ou no.

2 Proposies sobre caminhos e ciclos


Lema 5.1. Cada caminho fechado de comprimento n pelo menos 3 com
vrtices x1 , . . . , xn diferentes ( x1 = xn+1 ) ciclo.
Note que no caso n = 2 o caminho x1 x2 x3 (x1 = x3 ) pode ser no ciclo.

Lema 5.2. Caminho tem todos vrtices diferentes se e somente se o caminho


simples e acclico.
Teorema 5.2

(sobre caminho simples acclico). Se u e v so vrtices diferentes de um grafo G e existe um caminho do vrtice u para v ento existe
tambm um caminho simples acclico entre os vrtices u e v .
Demonstrao. Entre todos os caminhos de u para v escolhemos qualquer
um com o mnimo comprimento possvel. Seja x1 , x2 , . . . , xn sucesso dos
vrtices ( x1 = u, xn = v ). Mostremos que todos os vrtices so diferentes.
Suponhamos que xi = xj , i < j . Neste caso possvel eliminar os vrtices
xi+1 , . . . , xj e arcos correspondentes do caminho e obter um caminho mais curto
que contradiz escolha. Segundo a lema 5.2 o caminho simples e acclico.

2. PROPOSIES SOBRE CAMINHOS E CICLOS

73

Corolrio 1.

Se o arco f arco de um caminho simples fechado ento o arco


f pertence a um ciclo.
Demonstrao. O arco f tem extremidades u e v . Caso u = v o arco f
nico arco do ciclo que lao. Seja u 6= v . Podemos eliminar o arco f do
caminho e obter outro caminho que vai de u para v . De acordo com teorema
5.2 existe um caminho simples acclico de u para v e no contendo o arco
f (porquanto o primeiro caminho consiste de arcos diferentes). Incluindo f
obteremos um ciclo.

Teorema 5.3

(nico caminho simples). Se u e v so vrtices de um grafo


acclico ento pode existir o mximo um caminho simples de u para v .

Demonstrao. Sejam x1 , x2 , . . . , xn e y1 , y2 , . . . , ym as sucesses de vrtices


dos dois caminhos simples com x1 = y1 = u e xn = ym = v .
Se estes caminhos no tm vrtices comuns excepto as extremidades podemos
formar o caminho fechado x1 , . . . , xn , ym1 , . . . , y1 que ciclo. Isto contradiz
condio que o grafo acclico.
Ento, os caminhos tm um vrtice w = xk = yi comum. O vrtice w
divide cada um dos caminhos em duas partes. Claro que entre os vrtices u e
w ou entre os vrtices w e v temos dois caminhos simples diferentes. Sobre
estes caminhos podemos repetir o raciocnio.
Neste processo vamos uma sucesso de pares de vrtices. Claro que tal
processo no pode ser innito e depois de numero nito de passos vai ser obtido
um ciclo. Isto contradiz condio.

Teorema 5.4. Seja e um arco de um grafo conexo G . As seguintes proposies so equivalentes:


(a) G \ {e} conexo

(b) o arco e pertence a um ciclo

(c) o arco e pertence a um caminho simples e fechado


Demonstrao. Vamos comear dos dois casos especcos. Se e um lao, o
grafo G \ {e} conexo. Se e liga dois vrtices diferentes u e v e existe mais
um arco paralelo f entre u e v , ento G \ {e} conexo tambm e ef
ciclo que contem e . Nestes dois casos o teorema valido. Por isso podemos
assumir que e nico arco que liga dois vrtices diferentes u e v .
Ento e nico arco entre u e v . Consideremos equivalncia (a) (b) .
(a) (b) . Suponhamos que G \ {e} conexo. Segundo o teorema 5.2
existe um caminho simples e acclico x1 x2 . . . xn onde x1 = u e x2 = v .
Como no existe arco entre u e v no grafo G \ {e} temos n 3 . Todos
os vrtices x1 , . . . , xn so diferentes e por isso x1 x2 . . . xn u um ciclo que
contem o arco e .
(b) (a) . Seja existe um ciclo que contem o arco e . Seja c qualquer
caminho que contem o arco e . possvel substituir o e por resto do ciclo e
obter um caminho com as mesmas extremidades. Ento G \ {e} conexo.
Agora consideremos equivalncia (b) (c) . A implicao (b) (c)
evidente. A implicao (c) (b) segue do corolrio do teorema 5.2.

74

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES

3 Problema de percurso de arcos. Circuito de


Euler

3.1 Problema sobre as pontes de Knigsberg

Um dos primeiros problemas formulados em termos de grafos o problema sobre


pontes de Knigsberg (g. 5.1): ser possvel percorrer numa cidade, todas as
pontes uma e uma s vez cada e retornar ao ponto inicial? O problema foi
resolvido pelo matemtico Euler em ano 1736.
Para construir o grafo sobre a gura 5.1 necessrio substituir as reas de
terra por vrtices e as pontes por arcos. Surge a questo: 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

Figura 5.1: Grafo de Knigsberg

M2

3.2 Proposies
Teorema 5.5.

Se um grafo G contm um circuito de Euler ento o grafo tem


todos os vrtices de grau par.

Corolrio 1.

Se um grafo G tem um caminho de Euler ento G tem dois


vrtices de grau mpar ou no tem vrtices de grau mpar.

Teorema 5.6 (Euler). Se todos os vrtices de um grafo conexo tm grau par


ento ele tem um circuito de Euler.
Corolrio 1. Grafo conexo G que tem dois vrtices de grau mpar e outros de
grau par tem um caminho de Euler.

3.3 Algoritmo de Fleury

O algoritmo de Fleury abaixo serve para encontrar um circuito de Euler para


um grafo conexo com todos os vrtices de grau par e um caminho de Euler se
dois vrtices tm grau mpar mas todos os outros tm grau par. O caminho

3. PROBLEMA DE PERCURSO DE ARCOS. CIRCUITO DE EULER

75

encontrado representa-se por meio das duas sucesses de vrtices V S e arcos


ES . A varivel v serve para um vrtice corrente. As variveis V e E so
os conjuntos de vrtices e arcos respectivamente para um subgrafo G obtido
depois de cada um dos passos do algoritmo cclico.
Vamos usar a notao:
(x1 , . . . , xn ) uma sucesso
() sucesso vazia
A concatenao de uma sucesso s e um elemento x vamos designar
por s + x , por exemplo (a, b, c) + d = (a, b, c, d)

Inicialmente: a varivel v um vrtice de grau mpar se tal vrtice existe.


No caso contrrio v um vrtice arbitrrio.

Input:

G um grafo conexo com todos os vrtices de grau par ou com dois


vrtices de grau mpar
Output: V S e ES so sucesses dos vrtices 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 m das sucesses V S e ES
v := w {agora v = w o vrtice corrente}

end while

Algoritmo 5.1: Fleury


Nota 1. A pre-condio deg(v) > 0 do ciclo while signica que o algoritmo
termina quando no existirem vrtices adjacentes ao vrtice v . Em cada passo
elimina-se um arco do subgrafo (V, E) e acrescenta-se no m da sucesso ES .
possvel demonstrar que, caso o grafo conexo e todos vrtices tm grau par,
este algoritmo vai construir um circuito de Euler (teorema 5.7)
Exemplo 5.2. Para o grafo sobre a gura 5.2 so mostradas situaes correntes
durante execuo do algoritmo de Fleury.
A seguinte tabela representa os passos do algoritmo para o grafo na gura
5.2.

76

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES


r
b
a

s
c

r
x

gs
c

r
x

gs

g
h

z
y

y
g

y
g

Figura 5.2: Algoritmo de Fleury

v
z
y
x
r
s
t
x
y
y

VS
(z)
(z, y)
(z, y, x)
(z, y, x, r)
(z, y, x, r, s)
(z, y, x, r, s, t)
(z, y, x, r, s, t, x)
(z, y, x, r, s, t, x, y)
(z, y, x, r, s, t, x, y, y)

ES
()
(i)
(i, f )
(i, f, a)
(i, f, a, b)
(i, f, a, b, c)
(i, f, a, b, c, d)
(i, f, a, b, c, d, h)
(i, f, a, b, c, d, h, g)

V
{x, y, z, r, s, t}
{x, y, r, s, t}
{x, y, r, s, t}
{x, y, r, s, t}
{x, y, s, t}
{x, y, t}
{x, y}
{y}
{y}

E
{a, b, c, d, f, g, h, i}
{a, b, c, d, f, g, h}
{a, b, c, d, g, h}
{b, c, d, g, h}
{c, d, g, h}
{d, g, h}
{g, h}
{g}

Teorema 5.7.

Para cada grafo conexo com vrtices de grau par o algoritmo


de Fleury produz um circuito de Euler. No caso de existncia de 2 vrtices de
grau mpar, o algoritmo produz um caminho de Euler.

Demonstrao do teorema pode ser realizada na base dos teoremas de Euler


e 5.4.

4 rvores

4.1 Denies e teoremas gerais

Denio 5.17

(rvore). Grafo conexo e acclico chama-se rvore. Grafo acclico no conexo chama-se oresta.

Notemos que rvore no tem arcos paralelos e laos porque acclico. Existem s uma rvore de 2 vrtices (no distinguir rvores isomorfas), uma rvore
de 3 vrtices, duas rvores com 4 vrtices.
Consideremos grafo conexo G = (V, E) sem laos e arcos paralelos ( V o
conjunto de vrtices).

4. RVORES

77

Denio 5.18

(arvore geradora). Uma rvore A = (V, E 0 ), E 0 E (subgrafo de G ) chama-se rvore geradora (ou rvore abrangente) do grafo G .
Por outras palavras, rvore geradora contm todos os vrtices do grafo G .

Denio 5.19 (folha). Vrtice de grau 1 de uma rvore chama-se folha.


Teorema 5.8 (existncia de rvore geradora). Cada grafo nito conexo tem

uma rvore geradora.

Demonstrao. Seja (V, E) um grafo nito conexo. Consideremos todos os


subgrafos conexos (V, E 0 ) com E 0 E e escolhemos um com o mnimo nmero
de arcos. Este subgrafo acclico. De facto, se este grafo contm um ciclo,
segundo o teorema 5.4 possvel eliminar um arco deste ciclo e obter grafo
conexo com nmero menor dos arcos. Isso contradiz suposio. Ento este
subgrafo conexo e acclico e portanto uma rvore contendo V .

Teorema 5.9

(propriedade caracterstica 1). Dado um grafo G com mais do


que 1 vrtice sem laos e arcos paralelos. As seguintes proposies so equivalentes
1. G rvore
2. Cada par de vrtices diferentes pode ser ligado por um nico caminho
simples
3. G conexo, mas se eliminar qualquer arco obteremos um grafo no conexo
4. G acclico, mas se adicionar qualquer arco obteremos um grafo no
acclico

Lema 5.3.

Cada rvore com pelo menos 1 arco tem no mnimo duas folhas.

Demonstrao. Consideremos um caminho simples de comprimento mximo


v1 v2 . . . vn . Ento v1 6= vn , v1 e vn so folhas.

Lema 5.4.

Qualquer rvore com n vrtices tem n 1 arcos.

fcil demonstrar o lema por meio de induo matemtica.

Teorema 5.10 (propriedade caracterstica 2). Seja G um grafo nito com n


vrtices (sem laos e arcos paralelos). As seguintes proposies so equivalentes:
1. G rvore
2. G acclico e tem n 1 arcos
3. G conexo e tem n 1 arcos

4.2 rvores com raiz

O conceito de rvore com raiz ou rvore de raiz simples mas muito importante
em aplicaes.

Denio 5.20 (rvore com raiz). Sejam A rvore, v um dos seus vrtices.
O par (A, v) chama-se rvore com raiz v . Vrtices com grau 1 (excepto a raiz
v ) chamam-se folhas da rvore com raiz.

78

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES

Nota 1. As rvores (A, v1 ) e (A, v2 ) cujas razes so v1 e v2 ( v1 6= v2 )


com mesma arvore A so rvores de razes diferentes. Como podemos ver na
gura 5.3, as rvores (a) e (b) no so isomorfas (as razes so marcados).
Vamos representar as rvores com raiz de maneira apresentada nos casos (c) e
(d) (a raiz est em cima).
(a)

(b)

(c)

(d)

Figura 5.3: Arvores com raiz no isomorfas


A raiz serve para organizar os dados em uma estrutura hierrquica. Tambm,
rvore de raiz uma base para diferentes algoritmos.
Para qualquer rvore com raiz fcil denir orientao e considerar a rvore
de raiz como digrafo. De facto sejam u e v vrtices adjacentes. Existe s
um nico caminho simples de r para u e um nico caminho simples de r
para v . Podem ser duas s situaes: u esta situada sobre caminho de r
para v ou situao reciproca (demonstre isto!). No primeiro caso determina-se
a direco de u para v . Em outras palavras se u0 , u1 , u2 , . . . , un caminho
simples, onde u0 = r raiz, cada par (uk , uk+1 ) mostra a direco.

Denio 5.21

(nivel, altura). Vamos chamar nvel de um vrtice de uma


rvore com raiz o comprimento de caminho simples de raiz para o vrtice.
Altura de uma rvore o mximo nvel dos seus vrtices.
O nvel zero tem a raiz s.

Denio 5.22

(descendentes). Se os vrtices u e v so adjacentes com o


arco (u, v) diz-se que u pai do v, v lho do u . Mais geralmente, w
descendente de v se w 6= v e v vrtice de caminho nico de raiz r para
w.
Segundo a denio para digrafo o nmero de todos os lhos de v igual
a outdeg(v) .

Denio 5.23 (subrvore). Subrvore com raiz v uma rvore que consiste
de v e de todos descendentes e de todos arcos (direccionados) que ligam estes
vrtices.

4.3 rvore binria

Denio 5.24 (binria). Suponhamos que numa rvore de raiz cada vrtice
tem o mximo dois lhos. Se os lhos so diferentes e chamados o lho esquerdo
e o lho direito vamos chamar a rvore rvore binria.

5. RVORES GERADORAS

79

Neste caso temos no s restrio em nmero dos lhos. aceitvel a situao quando no existe um dos lhos (ou ambos). Por exemplo, existe um
lho esquerdo mas no existe direito. Existe uma generalizao do conceito de
rvore binria:

Denio 5.25 ( m -ria). Para m 2 uma rvore m -ria rvore em que


todos os lhos de cada pai so marcados (assinalados) por nmeros diferentes
de {1, 2, . . . , m} .
Se, qualquer que seja vrtice v , outdeg(v) = m ou outdeg(v) = 0 diz-se
que rvore regular.
Uma rvore regular chama-se rvore completa se todas as folhas tm o mesmo
nvel. Este nvel chama-se altura da rvore.

5 rvores geradoras

5.1 Algoritmo de produo 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 contm
n 1 arcos. Vamos comear a partir de qualquer vrtice do grafo e adicionar
arco a arco ate obter uma arvore geradora. O cdigo de um algoritmo Tree(v)
est apresentado sobre a gura algoritmo 5.2.

Input: G um grafo conexo, v um vrtice de grafo G


Output: E o conjunto dos arcos de uma rvore geradora
V := {v} ; E :=

while existem arcos de


do

G que ligam vrtices em V com vrtices de V (G)\V

/V
Escolher um arco {u, w} que liga um u V com um w
V := V {w}
E := E {{u, w}}

end while

Algoritmo 5.2: Tree(v)

Teorema 5.11 (Algoritmo Tree).

Se G um grafo conexo o algoritmo Tree(v)


produz uma rvore geradora do grafo.
Demonstrao. Notemos primeiro que o algoritmo tem o invariante
(V, E) subgrafo conexo e acclico.

De fato, depois de adicionar o arco {u, w} existe um caminho de qualquer


vrtice para o vrtice w atravs do vrtice u . Por isso, o grafo obtido conexo.
O arco {u, w} no pode pertencer a nenhum ciclo no subgrafo obtido porque o
vrtice w tem grau 1 (no subgrafo). Ento, ao terminar o algoritmo o grafo
G0 = (V, E) rvore.
Se V (G) \ V 6= existe um caminho entre qualquer vrtice de V para
qualquer vrtice do V (G) \ V . Este caminho deve conter um arco {u, w}
que liga um u V com um w
/ V . Por isso, ao terminar o algoritmo
V (G) \ V = .

80

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES

5.2 Grafos com pesos, rvore mnima com pesos

Se a cada arco e dum grafo G corresponde um nmero negativo W (e) (que


vamos chamar o peso do arco e ) o grafo G chama-se grafo com pesos. O
peso W (H) de um subgrafo H G a soma de pesos de todos os arcos de
H . Consideremos o seguinte problema: encontrar uma rvore geradora mnima,
i.e. a rvore geradora cujo peso menor ou igual ao peso de qualquer rvore
geradora. Por exemplo, pode ser colocado o problema de minimizar as despesas
de construo de uma rede de caminhos que deve ligar todas as cidades num
pas.

Algoritmo de Kruskal
No algoritmo de Kruskal os arcos dispem-se em ordem crescente dos pesos:
para a sucesso de arcos e1 , e2 , . . . , en temos
W (e1 ) W (e2 ) . . . W (en ).

Input: G um grafo com arcos em ordem crescente de pesos


Output: E um conjunto de todos os arcos de uma rvore geradora mnima
E :=

for j := 1 to
if E {ej }

|E(G)| do
acclico then
E := E {ej }

end if
end for

Algoritmo 5.3: Kruskal

Teorema 5.12.

Algoritmo de Kruskal produz uma mnima rvore geradora.

Demonstrao. Notemos que


1. A proposio
P (E) { E uma parte de uma mnima rvore geradora}

um invariante do ciclo
2. Inicialmente E = e evidentemente P (E) verdadeiro

Daqui pode ser concludo que ao terminar o ciclo a proposio ser verdadeira.
Para demonstrar isto consideremos um passo do ciclo. Na entrada temos um
conjunto E . Vale a pena considerar s o caso E 0 = E {ej } acclico.
Seja T uma mnima rvore geradora contendo E . preciso demonstrar que
existe uma minma rvore geradora T 0 E 0 . Se ej T ento E 0 T .
Consideremos o caso ej
/T .
Neste caso ej pertence a um ciclo C do grafo T {ej } 1 . E 0 acclico,
por isso o ciclo C contm um arco
1 por

f T, f
/ E, f 6= ej .

causa do teorema 5.4 ou do teorema 5.10

6. PERCURSO DE VRTICES. CAMINHO DE HAMILTON

81

Se remover o f e adicionar o ej vamos ter


T 0 = (T {ej }) \ {f }.

Notemos que T 0 = (T C) \ {f } . Por isso, T 0 conexo. O grafo T 0 uma


rvore geradora2. Para mostrar que T 0 uma mnima rvore comparemos os
pesos de ej e f . Como E {f } T o grafo E {f } T acclico. Mas
ej foi escolhido antes do f , por isso W (ej ) W (f ) . Isto resulta
W (T 0 ) W (T ).

Ento, T 0 rvore geradora mnima. A demonstrao sobre o invariante do


ciclo realizada.
Agora para completar a demonstrao do teorema preciso demonstrar que
ao terminar o ciclo o grafo acclico com o conjunto dos arcos E conexo.
Sejam u e v dois vrtices do grafo G . Dentro do grafo G existe um
caminho entre u e v . Se um arco f no pertence ao caminho, E {f }
contm um ciclo (no caso contrrio o f devia ser escolhido no algoritmo).
possvel substituir o f por resto do ciclo e obter um outro caminho entre u e
v . Podemos fazer todas tais substituies necessrias.

Algoritmo de Prim
Existe mais um algoritmo para resolver o mesmo problema. No algoritmo de
Prim 5.4 no necessrio ordenar os arcos antes de construir uma rvore. Tambm, no algoritmo de Prim no preciso controlar que o grafo corrente obtido
no acclico. Realmente, este algoritmo um caso especial do algoritmo Tree
(algoritmo 5.2).

Teorema 5.13.

Algoritmo de PRIM produz uma mnima rvore geradora.

Input: G um grafo com arcos ordenados arbitrariamente


Output: E o conjunto de todos os arcos de uma rvore geradora mnima

E :=
V := {w} {onde w V (G) qualquer vrtice}
while V 6= V (G) do
Escolher um arco {u, v} E(G) onde u V e v V (G) \ V com o
mnimo peso possvel
E := E {{u, v}}
V := V {v}

end while

Algoritmo 5.4: Prim

6 Percurso de vrtices. Caminho de Hamilton


Existem aplicaes importantes que precisam resolver o percurso dos vrtices
de um grafo. O problema consiste em seguinte. Dado um grafo conexo G .
2 por

causa do teorema 5.10

82

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES

Figura 5.4: Caminho de um cavalo de Xadrez


preciso encontrar um caminho que usa todos os vrtices, uma vez cada. Este
caminho chama-se caminho de Hamilton. Se o caminho for fechado, chama-se
circuito de Hamilton, e o grafo Hamiltoniano. O problema mais complicado
que o problema de percurso de arcos. No existe algoritmo simples para encontrar um caminho. Existem condies sucientes para existncia do caminho de
Hamilton.
Consideremos o problema de percorrer o quadro de xadrez por meio de cavalo
de xadrez. Uma soluo apresentada na gura 5.4. O algoritmo que foi
aplicado o seguinte. Depois de cada passo de algoritmo para cada um dos
vrtices do grafo existem vrias possibilidades. Entre os vrtices que podem ser
seguidos escolhe-se um com o mnimo numero de possibilidades. O algoritmo
nem sempre pode dar resultado positivo, mas no caso do problema de percurso
do quadro de xadrez o algoritmo serve.

7 Exerccios

7.1 Denies de grafos orientado e no orientado, diagrama de grafo

1. Dada a tabela da funo : E(G) V (G) V (G) construir o diagrama


do grafo G :
e
(e)

a
(w, z)

b
(w, x)

c
d
e
(x, z) (z, z) (z, x)

f
g
(z, y) (y, w)

h
(y, x)

2. O conjunto dos vrtices de um grafo V = {1, 2, 3, 4, 5, 6} , o conjunto


dos arcos E = {a12 , a23 , a34 , a35 , a11 , a53 , a51 , a22 } . Para cada um dos

7. EXERCCIOS

83

arcos dena-se o valor da funo de maneira seguinte


(aij ) = {i, j}.

Construir o diagrama do grafo.


3. No grafo G = (V, E, ) temos V = N = {1, 2, . . .} , E = {ai : i N} ,
(ai ) = (i, i + 1) . Desenhar o diagrama do grafo.

7.2 Grau de vrtice, isomorsmo de grafos

1. Conrmar o Teorema 5.1 para cada grafo sobre a gura 5.7.


2. Um grafo tem 21 arcos, 7 vrtices de grau 1 , 3 de grau 2 , 7 de
grau 3 . Os vrtices restantes tm grau 4 . Quantos vrtices tem o grafo?
3. Quais das sucesses
(a)
(c)
(e)
(g)

(1, 1, 0, 3, 1, 0, 0, . . .) (b)
(0, 1, 0, 2, 1, 0, 0, . . .) (d)
(0, 0, 1, 2, 1, 0, 0, . . .) (f )
(0, 1, 0, 1, 1, 1, 0, . . .) (h)

(4, 1, 0, 3, 1, 0, 0, . . .)
(0, 0, 2, 2, 1, 0, 0, . . .)
(0, 1, 0, 1, 1, 1, 0, . . .)
(0, 1, 0, 1, 1, 1, 0, . . .)

so as sucesses de graus de um grafo? Construir os grafos ou explicar


porque no existe grafo com a sucesso correspondente.
4. Um grafo conexo de n vrtices tem n + 1 arcos, um vrtice de grau 3 ,
um vrtice de grau 4 . Demonstrar que o grafo tem vrtices de grau 1 .
5. Vericar se os grafos (a) e (b) sobre a gura 5.5 so isomorfos ou no?
(a)

(b)

Figura 5.5: Grafos


6. Vericar se os grafos (a) e (b) sobre a gura 5.6 so isomorfos ou no?
7. Indicar os pares de grafos isomorfos (gura 5.7, (d),(e),(f),(g)).
8. (a) Construir todos os 14 grafos possveis com 3 vrtices e 3 arcos
no isomorfos
(b) Construir todos os grafos possveis com 4 vrtices e 4 arcos sem
laos e arcos paralelos
(c) Escolher dos grafos resultantes precedentes os grafos regulares.
9. (a) Construir todos os 5 grafos regulares com 4 vrtices de grau 2
(b) Construir todos os grafos regulares com 4 vrtices de grau 3 , e sem
laos e arcos paralelos

84

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES


(a)

(b)

Figura 5.6: Grafos


(a)

(d)

(b)

(e)

(c)

(f )

(g)

Figura 5.7: Grafos


(c) Construir todos os grafos regulares com 5 vrtices de grau 3 .
10. Um grafo sem laos e arcos paralelos G tem n 2 vrtices. Demonstrar
que pelo menos dois vrtices tm o mesmo grau
11. Achar o nmero de automorsmos de um subgrafo G0 K3,3 obtido por
meio de eliminao de um arco.3
12. Eliminando dois arcos do grafo sobre a gura 5.8 obter todos no isomorfos

7.3 Caminhos e ciclos

1. D um exemplo de um grafo com vrtices x, y, z e com 3 seguintes


propriedades:
(a) tem-se um ciclo usando x e y

3 O conjunto de vrtices do grafo K


m,n a unio M N , |M | = m , |N | = n . Todos
os arcos so os arcos que ligam um vrtice do M com um vrtice do N

7. EXERCCIOS

85

Figura 5.8: Escolher no isomorfos


(b) tem-se um ciclo usando y e z
(c) no se tem um ciclo usando x e z
2. Suponhamos que um ciclo contm um lao. Qual o seu comprimento?
3. Consideremos o grafo completo K8 com vrtices v1 , . . . , v8 .
(a) Quantos subgrafos de K8 so isomorfos ao grafo K5 ?
(b) Quantos caminhos simples de 3 ou menos arcos tm-se de v1 para
v2 ?
(c) Quantos caminhos simples com 3 ou menos arcos tm-se em K8 ?
4. Quantos ciclos de comprimento 3 tem o grafo G obtido a partir do grafo
K5 removendo um arco?
5. Consideremos um grafo Cn que pode ser chamado cubo n -dimensional.
Os vrtices do grafo so os vectores da forma x = (x1 , . . . , xn ) onde
xk = 0 ou xk = 1 , k {1, . . . , n} . Dois vrtices x e y so adjacentes
se e somente se n 1 componentes (coordenadas) coincidem, mas x e y
diferem numa coordenada. Por exemplo, x = (1, 0, 0, 1) e y = (1, 0, 1, 1)
so vrtices adjacentes do cubo 4 -dimensional.
(a) Quantos vrtices tem Cn ?
(b) Quantos arcos tem Cn ?
(c) Quantos ciclos de comprimento 4 tem Cn ?
6. Mostrar que qualquer grafo nito cujos vrtices tm no mnimo grau 2 ,
contm um ciclo.
Resoluo. Consideremos um caminho com vrtices diferentes de mximo
comprimento possvel: x1 , x2 , . . . , xn . O vrtice xn tem grau que no
menor que 2 portanto existem pelo menos dois arcos que ligam xn com
outros vrtices. Um arco e1 {xn1 , xn } e outro arco e2 {xn , v}
onde v um dos vrtices do caminho: v = xi , i {1, . . . , n} . Seno
temos contradio com escolha do caminho (mximo comprimento!). Ento temos o ciclo xi , xi+1 , . . . , xn , xi (caso i < n 1 segundo o lema 5.1,
caso i = n temos o lao  ciclo, caso i = n 1 temos ciclo com os dois
arcos diferentes e1 e e2 ).
7. Mostrar que cada grafo com n vrtices e pelo menos n arcos contm
um ciclo (use induo matemtica e exerccio precedente)

86

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES


8. Num grafo conexo G todos os vrtices tm grau 2 . Demonstrar que o
grafo tem nico ciclo que contm todos os vrtices do grafo.
9. Achar o nmero de ciclos de comprimento 4 no grafo K3,3 .

10. Achar um caminho de Euler (se for possvel) para o grafo na gura 5.9
0
1
2

6
7

Figura 5.9: Achar um caminho de Euler

7.4 rvores

1. Desenhar todas as rvores com 1, 2, 3, 4, 5 e 6 vrtices no isomorfas.


2. Quais das rvores na gura 5.10 so isomorfas?
(a)

(b)

(c)

(d)

(e)

Figura 5.10: Achar isomorfas


3. Consideremos uma rvore com n vrtices. Sabe-se que ela possui n 1
arcos. Daqui a soma dos graus dos vrtices igual a 2n 2 .
(a) Uma rvore tem 2 vrtices de grau 4, um vrtice de grau 3, um vrtice
de grau 2. Se outros vrtices tm grau 1 quantos vrtices tem esta
rvore?
(b) Desenhar pelo menos uma rvore correspondente a alnea (a).
4. Repetir o exerccio 3 para uma rvore com 2 vrtices de grau 5 , 3
vrtices de grau 3 , 2 de grau 2 e o resto de grau 1.
5. (a) Mostrar que existe uma rvore com 6 vrtices de grau 1 , um vrtice
de grau 2 , um vrtice de grau 3 , 1 vrtice de grau 5 e no existem
outros.
(b) Para n 2 consideremos n nmeros inteiros positivos d1 , . . . , dn
cuja soma 2n 2 . Mostrar que tem-se uma rvore com n vrtices
cujos vrtices tm graus d1 , . . . , dn .
(c) Mostrar que a alnea (a) ilustra a alnea (b) onde n = 9

7. EXERCCIOS

87
(a)

(b)

Figura 5.11: rvores geradoras


6. Desenhar as guras de todos grafos conexos com 4 arcos e 4 vrtices,
no esquecendo os laos e arcos paralelos.
7. Construir todos os subgrafos no isomorfos do grafo completo K5 que
tm 5 vrtices e 5 arcos. Construir os complementos4 dos grafos obtidos.
Para cada um dos grafos do primeiro grupo achar um grafo isomorfo do
segundo grupo.
8. (a) Mostrar que uma oresta com n vrtices e m componentes tem
n m arcos.

(b) Mostrar que um grafo com n vrtices, m componentes e n m


arcos uma oresta.

9. Calcular o nmero de rvores geradoras para cada um dos grafos na gura


5.11
10. Esboce uma rvore com pelo menos um arco e sem folhas.
11. Para o grafo K3,3 encontrar 2 rvores geradoras no isomorfas.
12. Mostrar que qualquer grafo conexo com n vrtices tem pelo menos n 1
arcos.
13. Num grafo conexo G eliminamos um arco e introduzimos um novo arco.
O grafo G0 resultante uma rvore. Demonstrar que G rvore.
14. Se um arco a pertence a todas as rvores geradoras de um grafo G ento
o arco a no pertence a nenhum ciclo. Demonstrar.
15. Dado um grafo conexo G . Um vrtice x folha de uma rvore geradora.
Se eliminar o x e todos os arcos incidentes vamos ter um subgrafo G0 .
Demonstrar que G0 conexo.
16. Um grafo conexo tem 30 arcos. Um vrtice x de grau 3 folha de uma
rvore geradora. Demonstrar que o grafo tem no mximo 30 vrtices.
4 para o grafo (V, E) e um subgrafo (V, E 0 ) o complemento (V, E \ E 0 ) , por exemplo,
para o grafo completo K4 representado como um quadrado com diagonais o complemento
do quadrado o par das diagonais

88

CAPTULO 5. INTRODUO TEORIA DE GRAFOS E RVORES

17. Um grafo conexo tem a sucesso de graus (0, 16, 3, 3, 3, 3) . Demonstrar


que o grafo tem pelo menos um ciclo.
18. Construir todas as rvores binrias regulares de altura 3 e com 4 vrtices. Quantas arvores binrias tem altura h e h + 1 vrtices?

7.5 Exerccios diferentes

1. Construir todos os grafos conexos sem laos e arcos paralelos que contm
nico ciclo e a sucesso de graus (0, x, 1, 1, 1) . Justicar o resultado.
2. Construir pelo menos trs grafos conexos que tm nico ciclo e a mesma
sucesso de graus
3. Um grafo conexo sem vrtices de graus 1 e 2 satisfaz condio
|E(G)| = |V (G)| + 2.

Demonstrar que |V (G)| 4 . Encontrar 3 tais grafos com 4 vrtices


4. Construir todas as rvores no isomorfas que tm a sucesso de graus
(0, x, 0, 2, 1)
5. Quantos automorsmos tem o grafo K2,3 ?
6. Construir todas as rvores com raiz no isomorfas de altura 2 e com 5
vrtices
7. Construir todas as rvores com raiz no isomorfas com 6 vrtices e altura
3.
8. Demonstrar que o nmero das folhas de qualquer rvore no menor do
que o grau mximo dos vrtices
9. Construir todas as rvores binrias regulares no isomorfas com 7 vrtices
10. Uma rvore binria tem F folhas e altura h . Demonstrar que F 2h .
11. Um vrtice v de um grafo G vamos chamar vrtice crtico se depois de
remover o v e todos os arcos incidentes, o subgrafo obtido vai ser no
conexo.
(a) Construir um grafo com 6 vrtices que tm exactamente 2 vrtices
crticos
(b) Fazer o mesmo com condio que os vrtices crticos no so adjacentes
12. Do grafo completo com os vrtices a, b, c, d, e, f, g, h so removidos os 4
arcos: {a, b} , {c, d} , {e, f } , {g, h} . Quantos ciclos de comprimento
3 tem o grafo obtido?
13. Achar o numero de rvores binrias regulares com n folhas

7. EXERCCIOS

89

(a)

(b)

(c)

Figura 5.12: Algoritmo TREE

7.6 rvore geradora mnima. Algoritmos de Kruskal e de


Prim
1. Aplicar o algoritmo Tree(1) aos grafos sobre a gura 5.12

2. Aplicar os algoritmos de Kruskal e de Prim ao grafo sobre a gura 5.13

350

240

120

220

330
180

240
270

320
280
90

200

300

280

Figura 5.13: Algoritmos de Kruskal e de Prim


3. Seja G um grafo nito com pesos conexo em que todos os arcos tm pesos
diferentes. Mostre que G tem uma nica rvore geradora mnima.
Indicao. Suponhamos que G tem duas (ou mais) rvores geradoras
mnimas. Consideremos um arco com o mnimo peso que pertence a uma
rvore mas no pertence segunda. . .

Captulo 6

Ordenao de um vector
1 Procura binria em vector ordenado
Dado o vector a1 , a2 , . . . , an que podemos imaginar como uma base de dados.
Suponhamos que existe uma funo K(i) que coloque em correspondncia ao
elemento ai uma sua caracterstica. Vamos chamar K(i) por chave do elemento ai . Por exemplo ai uma informao sobre um cliente de um banco e
K(i) o apelido do cliente.
O vector ordenado conforme a comparao das chaves:
K(1) K(2) . . . K(n).

O seguinte algoritmo acha um ndice l para o valor dado C de chave tal que
K(i) = C .
Notemos que ao terminar o ciclo no necessrio K(l) = C . Calculemos
a complexidade f (n) do algoritmo considerando a operao de comparao
K(l) < C como operao principal. O resultado depende dos dados a1 , . . . , an
portanto vamos calcular a complexidade mxima. O volume de dados o nmero
de elementos. Dentro do ciclo vamos car com os dados ai , . . . , aj com volume
j i + 1 . No difcil ver que
f (n) = 1 + f (bn/2c)
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

Figura 6.1: Algoritmo Binary Search


90

(6.1)

2. ORDENAO DE UM VECTOR. COMPLEXIDADE ESPACIAL

91

( bxc parte inteira do x ). De facto, por exemplo, para n = 31 vamos ter


l = 16 e passamos para um dos intervalos 1..15 ou 17..31 . Caso n = 32
vamos ter l = 16 e intervalos 1..15 ou 17..32 . Ento o comprimento novo do
intervalo duas vezes menor que o comprimento precedente e a complexidade
satisfaz a relao recorrente (6.1). Seja n = 2m . Neste caso
f (n) = 1 + f (2m1 ) = 2 + f (2m2 ) = . . . = m + f (1) = m = log2 n.

Usando a induo matemtica demonstre que caso geral


f (n) = blog2 nc.

2 Ordenao de um vector. Complexidade espacial


Colocao do problema. Dado um vector (a1 , . . . , an ) (base de dados) de elementos de um conjunto R (por exemplo, registos de clientes de um banco). Seja
K(i) uma chave do elemento ai (por exemplo, K(i) o nome do cliente ai ).
preciso ordenar o vector (a1 , . . . , an ) , isto , obter uma permutao ordenada
ak1 , . . . , akn segundo os valores das chaves
K(k1 ) K(k2 ) . . . K(kn ).

Para denir complexidade de um algoritmo de ordenao vamos usar operao de comparao de duas chaves. No exerccio 2 podemos ver um algoritmo
que serve para ordenar um vector (a1 , . . . , an ) de nmeros reais em ordem
crescente. O algoritmo chama-se ordenao por bolha. Este algoritmo tem a
complexidade
f (n) = (n 1) + (n 2) + . . . + 1 =

n(n 1)
= O(n2 )
2

e tem ordem 2 de crescimento. O algoritmo no eciente. Por exemplo,


suponhamos que uma comparao de elementos precisa de tempo t0 = 0.0001
segundos. A gura 6.2 apresenta comparao de tempo do trabalho do algoritmo
para diferentes valores de n .
n

100

1000

10000

100000

1000000

t = f (n)t0

0.5 s

50 s

1 hora 23 min

139 horas

579 dias

Figura 6.2: Tempo de ordenao

2.1 Ordenao por unio (merge sort)


Ideia do algoritmo merge sort

A ideia do algoritmo consiste em seguinte:

CAPTULO 6. ORDENAO DE UM VECTOR

92

1. Dividir a1 , . . . , an em duas partes iguais a1 , . . . , an/2 e an/2 , . . . , an


2. Ordenar a cada parte separadamente
3. Formar um vector das duas partes por meio de um algoritmo que se chama
Merge.
Notemos que para ordenar cada parte usa-se o mesmo algoritmo e portanto
o algoritmo recursivo.

Complexidade do algoritmo merge sort


Suponhamos que a complexidade do algoritmo merge sort o nmero de comparaes necessrias para ordenar o vector (a1 , . . . , an ) . Seja f (n) a complexidade. Da denio do algoritmo
f (n) = 2f (n/2) + (n)
f (1) = 0

(6.2)

onde (n) a complexidade do algoritmo Merge. A primeira relao valida se


n par. Mas se n = 2k + 1 , f (2k + 1) = f (k) + f (k + 1) . possvel realizar
o Merge com complexidade (n) = n 1 . Para simplicidade podemos tomar
que (n) n . Para simplicidade consideremos tambm o caso n = 2m :
f (2m ) 2f (2m1 ) + 2m 2(2f (2m2 ) + 2m1 ) + 2m = 4f (2m2 ) + 2 2m
8f (2m3) + 3 2m . . . 2k f (2mk ) + k2m ,

k m . Ento nalmente vamos ter


f (2m ) 2m f (1) + m2m = m2m .

No exerccio (3) pode-se ver uma relao exacta.


e em termos da varivel n
f (n) n log2 n.

(6.3)

Esta relao pode ser demonstrada para qualquer n , no s da forma n = 2m .


Daqui podemos concluir que a complexidade do algoritmo Merge muito melhor
que do algoritmo do exerccio 2.
Alem disso, possvel demonstrar que cada algoritmo de ordenao tem
complexidade no mnimo O(n log2 n) .
Infelizmente a parte principal do algoritmo merge precisa de memria complementar e portanto no se usa em programas reais. Consideremos mais um
algoritmo que se usa com frequncia e chama-se quicksort.

2.2 Quicksort

A ideia do algoritmo conseguir a uma partio do vector (a1 , . . . , an ) em


duas partes de modo que cada elemento em primeira parte no 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 partio suciente ordenar cada parte usando o
mesmo algoritmo. Ento vamos ter um algoritmo recursivo:

2. ORDENAO DE UM VECTOR. COMPLEXIDADE ESPACIAL

93

Procedure Quicksort( l, r : integer);


var
i, j : integer;
begin
if l < r then begin
Partio( l, r, i, j );
Quicksort( l, j );
Quicksort( i, r )
end
end
Os argumentos l, r do algoritmo servem para indicar o subvector (segmento)
al , . . . , ar que deve ser ordenado. A chamada Quicksort( 1, n ) realiza todo o
processo. O subalgoritmo Partio vai dividir o subvector em partes al , . . . , aj
e ai , . . . , ar como acima indicado.
Realizar o algoritmo 'Partio' possvel por meio de diferentes mtodos
que tm a complexidade n ou n 1 (onde n o nmero de elementos) de
um subvector. Sendo f (n) a complexidade do Quicksort(1, n) vamos ter
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
f (n) = n(n 1)/2

e a complexidade coincide com a complexidade de ordenao por bolha. Mas


no melhor caso a complexidade
f (n) = n 1 + f (bn/2c) + f (b(n + 1)/2c)

coincide com a complexidade do algoritmo Merge sort. Daqui claro que o problema principal construir um algoritmo 'partio' 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:

procedure partio(l,r: integer; var i,j: integer);


{ intervalo l..r dividimos em intervalos l..j e i..r }
var
x: keytype;
{ Resultado do procedimento
K(l)...K(i-1) <= x <= K(j+1)...K(r) ,
i > j
}
begin
x:=K((l+r) div 2);
i:=l; j:=r;
while i<=j do begin
while less(K(i),x) do
i:=i+1;
while less(x,K(j)) do

CAPTULO 6. ORDENAO DE UM VECTOR

94

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;

2.3 Avaliao de complexidade de ordenao

Cada algoritmo de ordenao pode ser representado por meio de uma rvore
binria onde vrtices so comparaes e uma subrvore corresponde a resposta
'sim' e outra - a resposta 'no'. Aplicar o algoritmo signica passar de raiz at
uma folha marcada por uma permutao s1 , s2 , . . . , sn dos ndices 1, 2, . . . , n .
Esta permutao signica
as1 as2 . . . asn .

A complexidade do algoritmo no pior caso altura da rvore. Como existem n!


tais permutaes a rvore contm pelo menos n! folhas. Sejam h altura da
rvore e N nmero das folhas. Mas a rvore binria tem o mximo 2h folhas
e N 2h donde h log2 N log2 n! . Ento temos a avaliao
h dlog2 n!e .

fcil demonstrar que n! (n/2)n/2 e portanto


h

n
n
n
log = (log n 1).
2
2
2

3 Exerccios
1. Usando a induo matemtica demonstre que no algoritmo
6.1 para procura binria
f (n) = blog2 nc

Binary Search

2. Dado um vector (var a: array[1..n] of real). Achar a complexidade do


algoritmo
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])
O que que faz o algoritmo?
3. Demonstre que se
f (2m ) = 2f (2m1 ) + 2m 1 e f (1) = 0

ento f (2m ) = (m 1)2m + 1 .

Captulo 7

Recursividade geral
1 Conceito geral da denio recursiva
Em construo de algoritmos usam-se os dois mtodos principais:
o mtodo de algoritmos cclicos e mtodo de algoritmos recursivos.
Para vericar algoritmos cclicos serve o mtodo da induo matemtica. Neste captulo vamos considerar um princpio generalizado
de induo matemtica que permite vericar algoritmos recursivos,
i.e., justicar que um algoritmo recursivo d o resultado correto.
Notemos que o problema de percurso de rvores que tem aplicaes
importantes pode ser facilmente resolvido por meio de algoritmos
recursivos.

1.1 Exemplos preliminares

O mtodo da induo matemtica usa a seguinte propriedade do conjunto N


dos nmeros naturais
(B) 1 N
(R) Se n N ento n + 1 N .
As condies (B) e (R) formam uma propriedade caracterstica do conjunto N ,
quer dizer, estas condies completamente descrevem o conjunto N e podem
servir como uma Denio do conjunto N de todos os nmeros naturais. Essa
ideia sugere um mtodo geral para denies de conjuntos e chama-se Denio
recursiva de um conjunto. Vejamos dois exemplos de denies dessa forma.
Exemplo 7.1. Consideremos o subconjunto S N de todos os nmeros naturais
que consiste dos nmeros satisfazendo as duas condies:
(B) 1 S
(R) Se n S ento 2n S .
Conforme a regra (R) o conjunto S contem os nmeros 2, 4, 8, . . . . Todos
os nmeros naturais que podem ser derivados (construdos) desta maneira so
elementos do conjunto S . Mas se um nmero natural x no possvel derivar
desta maneira, x
/S!
95

CAPTULO 7. RECURSIVIDADE GERAL

96

A condio (R) contem uma regra de construo que serve para construir
elementos do conjunto S a partir dos elementos j construdos. Mas a regra
no permite vericar se um nmero natural dado pertence ao conjunto S .
Consideremos uma forma inversa da (R) que se pode usar para vericar
isso:
(R') n S se n/2 S .
Claro que esta condio vale a pena aplicar s para os nmeros n pares. Ento,
temos a segunda forma da denio do conjunto S :
Um nmero 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 ento n
/S!
Para vericar se n S por exemplo para o nmero n = 12 segundo (R)
precisamos provar o nmero n1 = 6 depois n2 = 3 que d resultado n2
/S
e portanto n1 , n
/S.
Notemos que usando a induo matemtica pode-se demonstrar que
S {2m : m Z+ }.

Para demonstrar isto considere a proposio P (m) = {2m S}, m Z+ . Por


outro lado possvel demonstrar que S no contem outros nmeros (veja o
exemplo 7.8 na pgina 101).
A denio considerada determina um subconjunto de nmeros naturais. No
seguinte exemplo dena-se um subconjunto do conjunto de todas as sucesses
nitas de smbolos (vamos chamar palavras).
Exemplo 7.2. Sejam = {a, b} e o conjunto de todas as sucesses nitas
compostas dos smbolos a e b . Consideremos o conjunto M denido por
meio das regras
(B) a M
(R) Se s M ento as concatenaes asb M e as M .
Aqui s serve para qualquer s , isto , s uma varivel o valor da qual
uma palavra que contm os smbolos a e b . Por exemplo, s = ababb, s = aa
etc.
Usando a denio podemos concluir que
aab M, aaabb M, aaab M

etc. Claro que no possvel construir desta maneira nenhuma palavra que
comea com letra b .
Agora consideremos uma forma inversa para vericar se uma palavra de
pertence ao conjunto M : uma palavra s M num dos casos seguintes
(B) s = a
(R')

1. s = as0 b e s0 M

1. CONCEITO GERAL DA DEFINIO RECURSIVA

97

2. s = as0 e s0 M
Mas se s comea com b , s
/M !

As duas denies consideradas so recursivas por motivo seguinte. Para


vericar se um objecto um elemento do conjunto denido preciso chamar o
mesmo procedimento para um ou vrios objectos da mesma espcie. Notemos
que as denies tm as duas formas. A primeira, forma de construo, permite
construir elementos do conjunto, mas a segunda permite vericar se um objecto
pertence ao conjunto denido ou no. A segunda vamos chamar forma inversa
ou forma de vericao.

1.2 Denio recursiva de um conjunto

As denies consideradas tm referncia para o mesmo conceito e portanto


chamam-se denies recursivas. Qualquer denio recursiva tem as duas partes, uma dena directamente um ou vrios elementos (ou um conjunto innito),
mas outra contm recursividade.

Denio 7.1.

Denio recursiva de um conjunto S consiste das duas partes:

(B) uma base da forma

(7.1)

XS

onde o conjunto X denido directamente.


(R) uma parte recursiva que consiste de uma ou vrias regras r1 , . . . , rl da
forma
s1 , s2 , . . . , sm s ou s = r(s1 , s2 , . . . , sm ).
(7.2)

Se s construdo a partir de vrios elementos de S por meio de uma


das regras dadas ento s S .

Notemos que, as vezes, os elementos s1 , . . . , sm S obrigam-se obedecer condies suplementares que so parte das regras, isto , as condies formam um
domnio da regra (veja o exemplo 7.3).
Exemplo 7.3. Determinemos um subconjunto A de nmeros naturais por
(B) 1 A ;
(R) Se n A ento 3n A (regra 1 ) e se 2k + 1 A ento k A
(regra 2 ).
A segunda regra pressupe que um elemento n pode ser representado na forma
n = 2k + 1 , quer dizer se n A um nmero mpar ento (n 1)/2 A !
Ento, a segunda regra nem sempre pode ser usada.
Investiguemos a denio. Aplicando duas vezes a regra 1 vamos ter os
nmeros 3 e 9 . Usando a regra 2 para os nmeros 3 e 9 obteremos 1
(que j existe) e 4 . Vejamos mais um processo da produo de nmeros:
1

1 3 9 27 13 6.

De quais nmeros consiste o conjunto A ? Uma hiptese diz que


A = {1, 3, 4, 6, 7, 9, 10, 12, 13, . . .} = {n N : n 6 2 (mod 3)}.

(7.3)

98

CAPTULO 7. RECURSIVIDADE GERAL

Neste exemplo e no exemplo 7.2 um elemento do A pode ser produzido a


partir de elementos diferentes. Por exemplo, o nmero 12 pode ser derivado a
partir dos nmeros 4 ou 25 . Existem diferentes caminhos para formar o 12
1 3 9 4 12

e
1 3 9 27 13 39 117 351 175 51 25 12.

1.3 Forma inversa. Denies determinadas unicamente

Exemplo 7.4. Em lnguas de programao usa-se a noo de identicador (que


serve para nomes de variveis) que uma sucesso (ou uma palavra) de letras
e algarismos comeando com uma letra. Consideremos a denio recursiva:
(B) Uma palavra de uma s letra identicador
(R) A concatenao I de um identicador I e de um smbolo que
uma letra ou um algarismo tambm um identicador
Esta denio pode ser tambm representada numa forma inversa que permite vericar se uma sucesso dada for identicador:
(B) Uma palavra de uma s letra identicador
(R') A palavra dada identicador se cumprem-se as condies
(a) o ultimo smbolo letra ou algarismo
(b) depois de eliminar o ltimo smbolo obtm-se identicador
Mas a palavra vazia no identicador.
Por exemplo, consideremos a sucesso = ab4d . Apliquemos a segunda
denio
ab4d ab4 ab
O ltimo smbolo no letra nem algarismo. Ento a palavra no identicador.

Como j temos visto dos exemplos a parte recursiva (7.2) pode ser invertida e
apresentada numa forma inversa que permita vericar se um elemento pertence
ou no ao conjunto ao considerar. Para obter uma forma inversa preciso
inverter cada uma das regras, isto , achar o bloco (s1 , . . . , sk ) a partir do
elemento s
s (s1 , . . . , sk ).
(7.4)

Nota 1. A primeira forma de denio serve para construir (derivar) elementos


do conjunto denido, mas a segunda para vericar se um objecto dado
elemento do conjunto ou no.
No exemplo 7.3 a forma inversa da parte recursiva da denio
(R') n A se n/3 A ou se 2n + 1 A .

1. CONCEITO GERAL DA DEFINIO RECURSIVA

99

O exemplo 7.3 mostra uma situao quando um elemento do conjunto pode


ter derivado a partir de diferentes elementos (usando regras diferentes ou uma
regra). Como vamos ver, importante as vezes evitar esta situao e elaborar
denies quando qualquer elemento do conjunto tenha caminho nico de derivao. Quer dizer, para qualquer elemento x seja possvel indicar de maneira
nica os elementos precedentes (a partir dos quais pode ser derivado o elemento
x ).
DU ). Se qualquer elemento de um conjunto denido
recursivamente pode ser construdo de maneira nica (determina-se de maneira
nica), diz-se que a denio determinada unicamente. Neste caso vamos
dizer que a denio satisfaz a condio DU .

Denio 7.2 (Condio

No exemplo 7.3 a denio do conjunto S no determinado unicamente


(no satisfaz a condio DU ).
Exemplo 7.5. Seja = {a, b} . Consideremos a denio:
(B) S ;

(R) Se w S ento a concatenao awb S (aqui w nome duma palavra,


i.e., a varivel os valores da qual so palavras).
Neste exemplo o conjunto inicial X = = {a, b} . Temos uma nica regra
na parte recursiva, a letra w usa-se na regra para designar s uma sucesso e
no letra prpria. Se aplicarmos a regra (R) aos elementos a e b obteremos as
palavras aab e abb respectivamente. Segunda aplicao produz as sucesses
aaabb e aabbb . Surge a suposio que o conjunto S consiste das palavras
da forma aa . . . abb . . . b com nmero n de a e nmero n 1 de b ou
reciprocamente.
A forma inversa:
(R') w S se a primeira letra a , a ltima b , isto , w = aw0 b , e se
w0 S . Mas a palavra vazia
/S

As denies consideradas tm formas inversas simples, porque qualquer que


seja um elemento x do conjunto denido possvel indicar um elemento a partir
do qual o elemento x foi formado. Mas existem situaes mais complicadas.
Exemplo 7.6. possvel determinar o conjunto de rvores nitas recursivamente.
Diz-se que o grafo G0 obtido do grafo G por meio de ligao com folha v
no caso
1. V (G0 ) = V (G) {v} 6= V (G) ,
2. E(G0 ) = E(G) {e} onde o arco e liga v com um vrtice de G .
Denio. A classe de rvores determina-se recursivamente:
(B) Cada grafo de 1 vrtice sem arcos rvore (trivial);
(R) Se T rvore e T 0 obtido de T por meio de ligao com folha ento
T 0 rvore.
Claro que esta denio no determinada unicamente (no satisfaz a condio DU )

CAPTULO 7. RECURSIVIDADE GERAL

100

Exemplo 7.7. Consideremos o conjunto S determinado por


(B) 1 S ;
(R) (regra 1) se n S ento 2n S , (regra 2) se 3n + 1 S com n mpar
ento n S .
A forma inversa para (R):
(R') n S se n par e n/2 S (regra 1), ou n mpar e 3n + 1 S
(regra 2).
Como podemos ver, qualquer elemento do S tem denio nica.
Existe a suposio que S = N mas este hiptese ningum no demonstrou.

1.4 Princpio generalizado da induo matemtica

No princpio de induo matemtica considera-se o conjunto N de todos os


nmeros naturais e uma proposio P (n) dada sobre este conjunto. A generalizao consiste em considerar um conjunto denido recursivamente, em vez do
conjunto N .
Seja dada uma denio recursiva de um conjunto S (denio 7.1) e uma
proposio P (s) denida sobre S .

Teorema 7.1

es

(Induo geral). Suponhamos que P (s) satisfaz as duas condi-

(B) P (s) verdadeiro para todos s X e


(R) P (s) verdadeiro sempre que s pode ser produzido de outros elementos
t S para os quais P (t) verdadeiro, isto , para cada uma das regras
s = r(s1 , . . . , sm ) temos a implicao verdadeira
P (s1 ) P (s2 ) P (sm ) P (s).

(7.5)

Ento P (s) verdadeiro qualquer que seja s S .


Demonstrao. Seja S0 = X . Seja S1 o conjunto de todos os elementos do
X e elementos que podem ser construdos por meio de aplicao de uma das
regras aos elementos do conjunto X . De maneira anloga podemos considerar
os conjuntos S2 , S3 , . . . , Sn , . . . onde
Sn = Sn1 Tn

onde Tn o conjunto de todos os elementos que podem ser construdos a partir


dos elementos do Sn1 . Notemos que qualquer elemento do conjunto Tn pode
ser construdo aplicando as regras n vezes exactamente. Claro que
S=

Sn .

n=0

Consideremos a proposio:
M (n) = (s Sn )P (s).

1. CONCEITO GERAL DA DEFINIO RECURSIVA

101

Claro que suciente demonstrar que M (n) verdadeiro qualquer que seja
n {0, 1, 2, . . .} . Para isso consideremos a induo. Se n = 0 a proposio
M (0) verdadeira, porque P (s) verdadeira para s S0 = X . Demonstremos a implicao
M (k) M (k + 1).

Seja s Sk+1 = Sk Tk+1 . Se s Sk , P (s) verdadeira segundo a suposio


sobre M (k) . Se s Tk+1 ,
s = r(s1 , . . . , sm )

com P (s1 ), P (s2 ), . . . , P (sm ) verdadeiras. Daqui e da implicao 7.5 podemos


armar que P (s) verdadeira.
Nota 1. Consideremos uma interpretao do princpio em termos de conjuntos.
Seja TP = {s : P (s)} , isto , TP o conjunto de todos os elementos s que
satisfazem condio P (s) . Notemos que sempre s percorre no s o conjunto
S mas o conjunto que envolve o S . O contedo do teorema 7.1
S TP

Agora consideremos vrios exemplos para mostrar aplicao do teorema 7.1.


Exemplo 7.8. Para a denio recursiva do conjunto S no exemplo 7.1 na
pgina 95 demonstremos que cada elemento x S tem a forma x = 2m onde
m 0 um inteiro.

Base

1 = 20 verdadeiro.

Parte recursiva

Conforme a regra x = 2n, n S . Segundo a suposio


n = 2m o elemento x = 2 2m = 2m+1 tambm tem forma da potncia
de expoente inteira m + 1 com base 2 .

Exemplo 7.9. Consideremos o conjunto S denido no exemplo 7.5. Demonstremos que qualquer elemento s S tem uma das formas s = an bn+1 ou
s = an+1 bn onde n 0 . Aqui usa-se a notao reduzida an = aa
. . . a} .
| {z
n

Base. a = a1 b0 , b = a0 b1 .
Induo. awb = aan bn+1 b = an+1 bn+2 ou awb = aan+1 bn b = an+2 bn+1 .

Exemplo 7.10. Consideremos um conjunto F das sucesses binrias


= (a1 , a2 , . . . , an )

onde ai {0, 1} . Nas regras a seguir vamos usar a designao 1 para a


concatenao das sucesses e 1 , por exemplo
(1, 0, 1) (0, 0, 1) = (1, 0, 1, 0, 0, 1).

Vamos usar tambm a notao reduzida 101 001 = 101001 .


(B) (1) F
(R) se F ento as sucesses 1 e 01 pertencem ao conjunto F .

CAPTULO 7. RECURSIVIDADE GERAL

102

Investiguemos o conjunto F por meio de deduo de vrios elementos do conjunto:


1 11 111 . . . ,
1 101 1011 101101.

Uma concluso que pode-se deduzida daqui : qualquer F no tem dois


zeros consecutivos. Notemos tambm que o primeiro e o ltimo elemento so
unidades. Demonstremos isto por meio do teorema 7.1:
Base. A sucesso de um elemento (1) no tem zeros e o primeiro e o ltimo
elementos so unidades.
Induo. Seja A e satisfaz as condies dadas. Claro que 1 satisfaz
tambm as mesmas. O mesmo podemos armar e para a sucesso 01 . De
fato, o penltimo zero no tem zeros adjacentes, porque a sucesso termina
em 1 .

1.5 Funes sobre conjuntos dados recursivamente

Se um conjunto S denido recursivamente, natural usar recursividade para


denir uma funo sobre o S . Ou seja f : S A onde A conjunto de
valores de f . Vamos usar frequentemente A = N , mas existem problemas
de aplicaes com o conjunto A tendo uma estrutura mais complicada, por
exemplo, o conjunto A pode coincidir com S .
A estrutura de denio de uma funo a seguinte. Para os elementos do
conjunto X os valores da funo denam-se directamente. Para cada uma das
regras s = r(s1 , . . . , sm ) deve ser apresentada uma relao da forma
f (s) = (f (s1 ), . . . , f (sm ))

ou mais geral
f (s) = (f (s1 ), . . . , f (sm ), s1 , . . . , sm ).

Em palavras, o valor da funo determina-se a partir dos valores da mesma


funo sobre os elementos s1 , . . . , sm e provavelmente usando os prprios elementos.

Denio 7.3.

forma

(B)
(R)

A estrutura da denio recursiva de uma funo f tem a

f (s) = {uma denio directa} se s X

Para cada uma das regras da forma s = r(s1 , . . . , sm )


f (s) = (f (s1 ), . . . , f (sm ), s1 , . . . , sm ).

Consideremos vrios exemplos.


Exemplo 7.11. Consideremos mais uma vez o conjunto S :
(B) 1 S
(R) Se n S ento 2n S .
Podemos denir sobre o S , por exemplo, a funo de maneira seguinte

1. CONCEITO GERAL DA DEFINIO RECURSIVA

103

(1) = 1
se x S , (2x) = (x) + 2x

Verique que (x) = 2x 1 .

Exemplo 7.12. Consideremos a denio do conjunto das sucesses de smbolos ou palavras de um alfabeto (um conjunto nito) .
(B) onde palavra vazia
(R) Se e x ento x

As letras e x so variveis e servem para indicar a regra, x uma


concatenao de uma palavra e uma letra x .
Determinemos o comprimento l() de uma palavra por meio da
denio:
l() = 0
se e x ento l(x) = l() + 1

A cada uma das regras da denio do conjunto corresponde uma relao


na denio de uma funo. Por exemplo, consideremos mais uma denio
recursiva de um conjunto de nmeros naturais A N .
Exemplo 7.13. Dada uma denio de um conjunto A :
(B) 1 A
(R) Se x A ento 2x A e 2x + 1 A

Qualquer funo f : A B que corresponde denio deve ter a forma


f (1) = . . .
se x A ento f (2x) = (f (x)) e f (2x + 1) = (f (x))

Aqui (f (x)) e (f (x)) so funes dadas que permitem encontrar valores a


partir do valor f (x) . Por exemplo
f (1) = 1
se x A ento f (2x) = f (x) e f (2x + 1) = f (x) + 1

Exemplos de clculo: f (2) = f (1) = 1 , f (5) = f (2) + 1 = 2 , f (11) = f (5) +


1=3.
cmodo usar a forma inversa da denio do conjunto para denir funes.
No ltimo exemplo a funo f pode ser denida de maneira seguinte
f (1) = 1
f (x) = f (x/2) se x par, e f (x) = f ( x1
2 ) + 1 se x mpar

Consideremos a questo de ambiguidade. Nos exemplos precedentes os conjuntos satisfazem condio DU . Mas se o mesmo elemento x pode ser
obtido usando regras diferentes, o clculo pode dar diferentes valores para o
mesmo f (x) , isto , f (x) no tem valor nico. Neste caso a denio no
correcta.

CAPTULO 7. RECURSIVIDADE GERAL

104

Exemplo 7.14. Seja f : N N N a funo denida de maneira seguinte


f (1, 1) = 1
f (m + 1, n) = 2f (m, n) , f (m, n + 1) = 1 + f (m, n) .

Esta denio correcta? No. Podemos encontrar f (2, 2) usando os dois


caminhos:
f (2, 2) = 2f (1, 2) = 2(1 + f (1, 1)) = 4

ou
f (2, 2) = 1 + f (2, 1) = 1 + 2f (1, 1) = 3.

Claro que a causa que a denio correspondente do conjunto no satisfaz


condio DU :
(B) (1, 1) A
(R) Se (m, n) A ento (m + 1, n), (m, n + 1) A .

1.6 rvores binrias e rvores com razes


B

-objectos

rvores binrias um objecto que tem natureza recursiva. De facto, consideremos as subrvores esquerda e direita de uma rvore binria. fcil ver que
cada uma delas tm a mesma estrutura. Esta estrutura ser usada na denio
abaixo. Primeiro vejamos uma denio de um conjunto B .

Denio 7.4

( B -objectos). Seja X um conjunto que pode ser chamado


conjunto universo. O conjunto B denido por meio da denio recursiva:
(B) X B .
(R) Se r X, T1 , T2 B ento os ternos ordenados
(r, T1 , T2 ), (r, , T2 ), (r, T1 , ) B.

O smbolo ' ` vamos chamar smbolo vazio. Os elementos do conjunto B vamos


chamar B -objectos.
Investiguemos a denio. Seja X = {a, b, c, d, . . . , z} . Podemos formar,
por exemplo, os seguintes B -objectos:
(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 smbolo vazio serve para indicar que o
sub B -objecto respectivo no apresentado ( ausente).

1. CONCEITO GERAL DA DEFINIO RECURSIVA


B

105

-objectos e rvores binrias

Suponhamos que em qualquer processo de construo de B -objectos todos os


elementos do conjunto X so diferentes. Nesta restrio a cada um elemento
do conjunto B corresponde uma rvore binria se introduzirmos os arcos orientados da raiz para sub B -objectos. Por exemplo ao terno (f, (a, b, c), d) correspondem os arcos
f a, f d, a b, a c.

O smbolo vazio utiliza-se no caso um vrtice no tem um lho (esquerdo ou


direito).
Concluso. Temos uma denio recursiva para o conjunto auxiliar B mas
possvel no distinguir este conjunto e conjunto de rvores binrias (com condio que na formao de B -objectos utilizam-se elementos do X diferentes).
Neste sentido o conjunto B e o conjunto de rvores binrias so isomorfos.

rvores binrias
Aqui consideremos uma denio recursiva de rvores binrias que no utiliza
B -objectos. cmodo introduzir previamente uma construo que vamos chamar construo de ligamento de dois grafos. Sejam G e H dois grafos com
conjuntos V (G) V (H) = disjuntos e g G , h H dois vrtices marcados. Ento temos os dois grafos (g, G) e (h, H) com vrtices marcados. Para
simplicidade vamos omitir o vrtice marcado e escrever G e H se est claro
que vrtice est marcado.

Denio 7.5 (Construo de ligamento de dois grafos).

Diz-se que o grafo

T = (V, E, )

com vrtice marcado r obtido por meio da construo de ligamento dos grafos
(veja a gura 7.1) com vrtices marcados (g, G) e (h, H) e do elemento r se:
/ V (G), r
/ V (H) , V (G) V (H) = ,
1. 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 vrtice r o vrtice marcado do grafo R .
cmodo introduzir a notao
(r, T ) = lig(r, (g, G), (h, H))

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 notao
G = esq(T ), H = dir(T ).

(7.7)

Agora consideremos uma denio recursiva de rvores binrias regulares

CAPTULO 7. RECURSIVIDADE GERAL

106

lig(r, G, H)
r
e1

e2

Figura 7.1: Ligao de dois grafos

Denio 7.6

(rvores binrias regulares). Seja U um conjunto universo.


Dena-se o conjunto Areg de rvores binrias regulares com vrtices do conjunto U :
(B) Se T um grafo com nico vrtice r U e sem arcos ento este grafo
T Areg ,

(R) Se G, H Areg , r U ento T = lig(r, G, H) Areg 1


Note que deve ser V (G) V (H) = , r
/ V (G) V (H) .

cmodo introduzir a notao: x rvore que tem nico vrtice x .


Por exemplo, a rvore na gura 7.2 pode ser representada na forma
lig(1, lig(2, 4, lig(5, 6, 7)), 3).
1
2
4

3
5

Figura 7.2: rvore binria


Para formar uma denio de rvores binrias que no so 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 subrvores. Designemos rvore vazia pelo smbolo nil . Temos que mudar tambm o
contedo da operao lig(r, G, H) . Por exemplo, no caso G = nil , o grafo
lig(r, nil, H) no tem arco que ligue o r com vrtice no existente do grafo
nil . Vamos ter a seguinte denio

Denio 7.7 (rvores binrias).


(B) nil Ab ,

Dena-se o conjunto Ab :

(R) Se G, H Ab , ento T = lig(r, G, H) Ab .


1 mais

precisamente, se (g, G), (h, H) Areg ento (r, T ) = lig(r, (g, G), (h, H)) Areg

1. CONCEITO GERAL DA DEFINIO RECURSIVA

107

rvores com razes


De mesma maneira pode-se construir uma denio recursiva de rvores com
razes. Antes que dar denio consideremos uma construo de ligamento de
grafos que pode ser dada anloga com que foi feita para rvores binrias. Sejam
G1 = (V1 , E1 , 1 ), . . . , Gk = (Vk , Ek , k )

grafos com os conjuntos V1 , . . . , Vk de vrtices disjuntos. Seja ri Vi um


elemento marcado. Ento, temos os grafos com elementos marcados (distintos):
(r1 , G1 ), (r2 , G2 ), . . . , (rk , Gk ).
lig(r, G1 , G1 , G3 )
r
e1

e3
e2

r1

r3

r2
G1

G3
G2

Figura 7.3: Construo de ligamento

Denio 7.8

(Construo de ligamento). Diz-se que o grafo com elemento


marcado r , (r, G) = (r, (V, E, )) obtido por meio da construo de ligamento dos grafos (veja a gura 7.3) com elementos marcados
(r1 , G1 ), (r2 , G2 ), . . . , (rk , Gk )

e de um elemento r se:
/
1. Os conjuntos V1 , . . . , Vk so disjuntos e r

2. V = V1 . . . Vk {r} , e

Vi

3. E = E1 . . . Ek {e1 , . . . , ek } , onde o arco ei liga os vrtices r e


ri , isto , (ei ) = (r, ri ) .
cmodo introduzir a notao
(r, G) = lig(r, (r1 , G1 ), (r2 , G2 ), . . . , (rk , Gk ))

ou
G = lig(r, G1 , G2 , . . . , Gk )

(7.8)

Usando esta operao de ligao podemos dar uma denio recursiva do


conjunto Araiz de rvores com raiz :

CAPTULO 7. RECURSIVIDADE GERAL

108

Denio 7.9 (rvores com raiz).


(B) Se T um grafo com nico vrtice r ( T = r ) e sem arcos ento
T Araiz ;
(R) Se T obtido de T1 , T2 , . . . , Tk Araiz e de um vrtice r U por
meio da construo de ligamento:
T = lig(r, T1 , T2 , . . . , Tk )

ento T Araiz .

Uma rvore obtida por meio da construo de ligamento veja na gura 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)
r
r1

r3

r2

Figura 7.4: Ligamento de rvores


Usando as denies recursivas de rvores no difcil denir funes sobre
o conjunto de rvores.
Exemplo 7.15. Determinemos altura de rvores de razes usando a denio
recursiva. Dena-se a funo h(T ) :
(B) Altura de rvore T = x com nico vrtice zero: h( x) = 0 .
(R) Se T = lig(r, T1 , . . . , Tk ) ento
h(T ) = 1 + max{h(T1 ), . . . , h(Tk )}.

2 Algoritmos recursivos
Usando as denies recursivas pode-se construir algoritmos recursivos. Vamos
seguir ao esquema
Denio recursiva

Algoritmo recursivo

Suponhamos que tem-se uma denio recursiva de um conjunto S . Os algoritmos podem ser classicadas e separadas em trs seguintes partes

2. ALGORITMOS RECURSIVOS

109

1. Clculo de funes dadas recursivamente sobre o conjunto S .


2. Prova que elemento dado pertence ao S .
3. Produo (ou percurso) dos elementos do conjunto S .
claro que cada um dos algoritmos recursivos possui as propriedades parecidas com denies correspondentes. Notemos que a denio recursiva consiste
de duas partes e respectivamente o algoritmo correspondente deve ter duas
partes respectivas. A primeira parte vai considerar os elementos denidos directamente e a segunda parte a prpria recursividade contendo chamadas
recursivas.

2.1 Calculo de funes dadas recursivamente

O problema consiste em Construir um algoritmo para calcular uma funo dada


recursivamente sobre um conjunto S denido recursivamente.
Estrutura de denio recursiva de uma funo apresentada na denio
7.3. Construo de algoritmo consiste s em representar a denio dada na
forma usando notao especca. Mas o momento principal consiste em passar
da forma directa para a forma inversa da denio da funo.
Exemplo 7.16. O conjunto de todos os nmeros naturais pode ser denido de
maneira seguinte:
(B) 1 N .
(R) Se n N ento n + 1 N .
Conforme esta denio sobre o conjunto N pode ser denida, por exemplo,
a funo f (n) = n! :

f (1) = 1,
f (n + 1) = (n + 1) f (n), se n N.
A forma inversa:


f (1) = 1,
f (n) = nf (n 1), se n N e n > 1.

Para calcular esta funo vamos ter algoritmo recursivo (funo) na lngua
de programao 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 denio nica. Isto permite dar denio correta para funo
f (n) . O elemento n tem nico elemento n 1 a partir do qual n pode ser
derivado: n 1 n .

CAPTULO 7. RECURSIVIDADE GERAL

110

Exemplo 7.17. Consideremos a funo sobre o conjunto F denido no exemplo


7.10 (pagina 101) que calcula o nmero dos zeros da sucesso:

f (1) = 0,
f ( 1) = f (),

f ( 01) = f () + 1.

Para construir a forma inversa notemos que qualquer F termina em 1 :

se = 1,
0,
f () = f (1 ),
se = 1 1 e 1 = 2 1,

f (2 ) + 1, se = 2 01

Notemos que a denio correta s para F . O algoritmo apresentado na


gura 7.5 pressupe que o argumento omega um elemento do conjunto F .

function f(omega: string): integer;


var l: integer;
begin
l:=length(omega);
if omega='1' then
f := 0
else if copy(omega,l-1,l)='01' then
f := 1 + f(copy(omega,1,l-2))
else
f := f(copy(omega,1,l-1))
end;
Figura 7.5: Algoritmo no exemplo 7.17
O nosso objectivo no considerar ecincia do algoritmo. Este exemplo
apresenta s uma aplicao da denio recursiva para construir algoritmo.

Exemplo de uma funo para rvores binrias


Exemplo 7.18. Consideremos um algoritmo para calcular altura de uma rvore
binria regular. Antes de elaborar o prprio algoritmo consideremos a denio
de altura (veja o exemplo 7.15):

h( x) = 0,
h(lig(x, A1 , A2 )) = 1 + max{h(A1 ), h(A2 )}
A forma inversa:


h( x) = 0,
h(A) = 1 + max{h(esq(A)), h(dir(A))}

As esq(A) e dir(A) representam as subrvores esquerda e direita da rvore


A . O algoritmo podemos ver na gura 7.6.

2. ALGORITMOS RECURSIVOS

111

type arvorebin = ...


function h(A: arvorebin): integer;
begin
if A tem nico vrtice then
h := 0
else
h := 1 + max(esq(A),dir(A))
end;
Figura 7.6: Algoritmo para encontrar altura de uma rvore binria regular

2.2 Prova

Consideremos uma denio recursiva e o problema de prova se um elemento s


pertence ao conjunto S , isto , se s satisfaz denio recursiva. A distino
principal do problema de prova e do clculo de uma funo consiste em domnio.
Clculo de uma funo s pode ser considerado sobre o conjunto S denido
recursivamente. Mas aqui o domnio D contm S , D S , e denido de
uma maneira mais simples.
Exemplo 7.19. Consideremos a denio do conjunto S no exemplo 7.1:
(B) 1 S
(R) Se n S ento 2n S .
Sempre temos que encontrar uma forma inversa da denio para construir um
algoritmo:
(B) 1 S
(R') m S se m par e m/2 S
importante: na forma inversa so apresentadas as condies sucientes e
necessrias da incluso m S . Ento, se m 6= 1 e m mpar, m S !
Para vericar se um nmero n pertence ao conjunto S vejamos uma funo
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

se m = 1
1,
f (m) = f (m/2) se m par

0,
se m mpar e m 6= 1.
O algoritmo correspondente pode-se exprimir assim

Function f(m: integer): integer;


begin
if m=1 then
f:=1
else if not odd(n) {m 'e par} then
f:=f(m div 2)

CAPTULO 7. RECURSIVIDADE GERAL

112

else {m 'e mpar, m>1}


f:=0
End;
A chamada

Begin
write(f(12),f(8))
End.
produz os nmeros 0 e 1.
Como funciona o algoritmo? A chamada f(12) leva a chamada f(6), depois
f(3) d logo 0. Podemos representar isto pelo esquema:
f (12) f (6) f (3) = 0.

Mais uma chamada: f (8) f (4) f (2) f (1) = 1 .


Outra forma do mesmo algoritmo que usa o tipo boolean em Pascal:

Function pertence(m: integer): boolean;


begin
pertence := (n=1) or (not odd(m) and pertence(m div 2))
end;
Note que esta forma no considera a terceira variante com resposta negativa!

Forma geral
Inicialmente temos um domnio D que contm S . O argumento da funo
recursiva um elemento x do conjunto D . Vamos construir uma funo que
produz o valor 1 se o elemento x pertence ao conjunto S e o valor 0 caso
contrrio, isto , x D \ S .
Notemos que em geral a forma inversa de denio 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 denio pode ter vrias regras e o resultado vai ser positivo se pelo
menos uma das regras apresenta o resultado positivo. Isto podemos chamar por
o princpio de disjuno.
Daqui a prova deve conter as partes:

Base: Se x X ento f (x) = 1 .


Regras: Se x pode ser produzido a partir de

vrios elementos x1 , . . . , xk e
se f (xi ) = 1 para todos i = 1, . . . , k ento f (x) = 1 .

Se o resultado Negativo:

No caso contrrio f (x) = 0 .

Exemplo 7.20. No exerccio 7.10 (pagina 101) determinado o conjunto F de


sucesses binrias formadas dos 0 e 1 . Vamos construir um algoritmo
para vericar incluso F i.e. construir uma funo: f () = 1 se F
e f () = 0 se
/F.
Notemos que da denio podemos concluir que o ltimo algarismo de cada
linha F 1 . A forma inversa da denio:

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 no funcionam todas as trs alternativas.
Daqui temos a denio da funo f :
f () = 1 se pelo menos uma das condies verdadeira:

1. = 1
2. = 1 1 e f (1 ) = 1

3. = 2 01 e f () = 1
f () = 0 no caso contrrio

Mas para optimizar o algoritmo notemos que se termina por 0 ou =


(sucesso vazia) ento nenhum dos primeiros trs casos no serve. Se = 1 0
ou = , f () = 0 .
Agora fcil construir o algoritmo correspondente em Pascal (com exemplo
de uma chamada):

function f(s: string): integer;


var l: integer;
begin
l:=length(s);
if (l=0) or (s[l]='0') then
f:=0
else if s='1' then
f:=1
else if s[l-1]='0' {s=s1*'01'} then
f:=f(copy(s,1,l-2))
else {s=s1*'11'}
f:=f(copy(s,1,l-1));
end;
Begin
writeln(f('100101'))
End.
Pode ser mais natural usar o tipo boolean do Pascal:

function f(s: string): boolean;


var l: integer;
begin
l:=length(s);
f := (s='1')
or ((s[l]='1') and f(copy(s,1,l-1))
or ((copy(s,l-1,l)='01') and f(copy(s,1,l-2))
end;

114

CAPTULO 7. RECURSIVIDADE GERAL

2.3 Percurso dos elementos de um conjunto

O exemplo a seguir simples mas pode servir como base de raciocnios em casos
mais complicados
Exemplo 7.21. Seja B o conjunto de todas as sucesses binrias 0 10010 ,0 010
etc. Este conjunto pode ser denido recursivamente
(B) B ( a sucesso vazia)
(R) Se B ento 0 B e 1 B .
Introduzimos a designao: B() o conjunto de todas as sucesses binrias
com parte inicial , isto , o subconjunto do B das sucesses derivveis a
partir da . Daqui vamos ter as duas relaes
B = B()
[
B() = B( 0) B( 1).

(7.9)
(7.10)

O conjunto B innito. Para resolver um problema real preciso introduzir


uma restrio para obter um conjunto nito. Por exemplo, consideremos o
conjunto de todas as sucesses de comprimento n . Vamos usar a designao
Bn para este subconjunto. Seja length() o comprimento da sucesso .
Consideremos as seguintes relaes
Bn = Bn ()

se length() = n,
Bn () = {},
Bn () = ,
se length() > n,

Bn () = Bn ( 0) Bn ( 1), no caso contrrio.

(7.11)
(7.12)

Daqui vamos ter o algoritmo na notao do Pascal (com exemplo de uma


chamada):

procedure B(om: string; n: integer);


var l: integer;
begin
l:=length(om);
if l=n then
writeln(om)
else if l<n then
begin
B(om+'0',n);
B(om+'1',n)
end
end;
begin
B('',n)
end.

2. ALGORITMOS RECURSIVOS

115

Exemplo 7.22. Consideremos mais uma vez o conjunto F denido no exerccio


7.10 (pagina 101) e o problema: encontrar todas as sucesses que tm comprimento n .
Sejam F sucesso arbitrria e F () F o conjunto de todas as
sucesses de F que podem ser geradas a partir da sucesso . Da denio
segue
F = F ((1))
F () = F ( 1) F ( 01).

Daqui decorre o algoritmo (com exemplo de uma chamada):

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.
Exemplo 7.23. Consideremos o seguinte problema (de Gauss). Dispor no quadro de xadrez 8 rainhas de modo que 2 rainhas arbitrrias no tm encontro:
cada um par de rainhas esta situada sobre diferentes linhas horizontais, verticais
e diagonais. Observemos que 8 rainhas devem dispor-se sobre diferentes verticais. Sobre a gura 7.7 podemos ver uma das solues. Sejam f1 , f2 , . . . f8 os
nmeros das linhas horizontais que podem ocupar rainhas. Ento cada sucesso
ordenada = (f1 , f2 , . . . f8 ) determina disposio de rainhas. No desenho 7.7
a disposio
= (1, 5, 8, 6, 3, 7, 2, 4).
Para resolver o problema consideremos o conjunto S de disposies aceitveis com nmero arbitrrio de rainhas. Vamos considerar as disposies
(f1 , . . . , fk ) onde f1 , . . . , fk so posies de k rainhas que ocupam as primeiras k verticais. Claro que k = 8 corresponde a uma soluo, k = 0
signica que o quadro est vazio.
Podemos determinar subconjunto S de todas as disposies recursivamente
de modo seguinte:
(B) S ( = () a sucesso vazia).
(R) Se = (f1 , f2 , . . . , fk ) S ento v = (f1 , f2 , . . . , fk , v) S se a
posio v no contradiz com cada um das primeiras k rainhas, i.e. se
v 6= fi

e |v fi | 6= k + 1 i i = 1, . . . , k

CAPTULO 7. RECURSIVIDADE GERAL

116

Figura 7.7: Uma soluo do problema de Gauss


Seja S() o conjunto de todas as sucesses de S que podem ser geradas
a partir da sucesso S . Da denio temos as relaes:

se length() = 8,
S() = {},
[
S( v), se length() < 8 onde v no contradiz com .
S() =

v{1,...,8}

Todo o conjunto S tem a representao:

S = S()

O algoritmo tem a seguinte estrutura usando a notao de Pascal:

procedure Rainhas(om: string);


begin
if length(om)=n then
writeln(om)
else if length(om)<n then
for v:=1 to 8 do
if om*v satisfaz a condicao necessaria then
Rainhas(om*v)
end;

3 Questes principais
1. Dada uma denicao recursiva de um conjunto A
(a) Usar a denio para construir elementos x A
(b) Quantos passos necessrio para construir?
(c) Achar o conjunto T1 (veja a demonstrao do teorema 7.1), o conjunto T2 , . . .
(d) Achar o conjunto A (achar uma descrio directa) se for possvel
2. Construir uma forma inversa (forma de vericao) para uma denio
recursiva. Usar a forma obtida para demonstrar que x A ou x
/A.
Vericar se a denio dada determinada unicamente?

4. EXERCCIOS

117

3. Usar o Principio generalizado de induo (teorema 7.1) para demonstrar


uma proposio (um predicado) denida sobre o conjunto.
4. Funes: vericar se a denio de uma funo denida sobre o conjunto
correta? Calcular os valores da funo (usando mtodos iterativo e
recursivo).
5. Dar uma denio recursiva de uma funo
6. Construir algoritmos recursivos para:
(a) calcular os valores de uma funo
(b) vericar se um elemento x A

(c) realizar o percurso do conjunto A ou um subconjunto do A

4 Exerccios

Denies recursivas de conjuntos. Funes

1. Temos a denio recursiva de um conjunto A N :


(B) 1 A

(R) Se x A ento x + 4 A .
(a) Achar o conjunto A
(b) Construir uma forma inversa da denio
/A
(c) Mostrar que 3

2. Consideremos a denio
(B) 2, 3 F

(R) Se x, y F ento xy F .
(a) Mostrar que 24 F

(b) Construir uma forma inversa da denio


(c) Mostrar que 30
/F

(d) Achar o conjunto F

3. Consideremos a denio de um conjunto A Z


(B) 5, 8 A

(R) Se x, y A ento x + y A e x y A .
(a) Mostrar que 1 A

(b) Mostrar que A = Z


(c) Se em vez de 5 e 8 considerar dois nmeros inteiros a e b , qual
ser a condio para A = Z ?
4. Consideremos a denio no exemplo 7.2.

CAPTULO 7. RECURSIVIDADE GERAL

118

(a) Verique se as sucesses aaab, aabb, abab so elementos do M ?


(b) Usando a forma inversa verique que aaabb M
5. Seja S o conjunto denido no exemplo 7.1 (pgina 95).
(a) Mostrar que 2m S para todos m Z+

(b) Mostrar que se n S ento n tem a forma n = 2m para certo


m Z+
(c) Concluir que S = {2m : m Z+ }

6. Seja A o conjunto denido no exemplo 7.3.


(a) Mostrar que se n A ento n 0 (mod 3) ou n 1 (mod 3)

(b) Mostrar que 4, 6, 10, 12 A

7. Seja S o conjunto denido no exemplo 7.7.


(a) Mostrar que 1, 2, 3, 4, 5, 6 S

(b) Mostrar que 7 S

8. O subconjunto S de Z+ Z+ denido recursivamente


(B) (0, 0) S ;

(R) Se (m, n) S e m < n ento (m + 1, n) S e


se (m, m) S ento (0, m + 1) S .
(a) Descrever o conjunto S .
(b) Mostrar que (1, 2) S .

(c) Esta denio determinada unicamente?

9. Repetir o exerccio precedente para a denio:


(B) (0, 0) T ;

(R) Se (m, n) T ento (m, n + 1) T e (m + 1, n + 1) T .


10. Consideremos a denio recursiva para um subconjunto T Z+ Z+ :
(B) (0, 0) T ;

(R) (m, n) T (m + 1, n), (m + 1, n + 1) e (m + 1, n + 2) T .


(a) Indicar seis elementos do conjunto T .
(b) Mostrar que 2m n (m, n) T .

(c) Esta denio determinada unicamente?

11. Consideremos a seguinte denio para o subconjunto A N N :


(B) (1, 1) A ;

(R) (m, n) A (m + 1, n) e (m, n + 1) A .


(a) Mostrar que A = N N

4. EXERCCIOS

119

(b) Seja P (m, n) uma proposio dada sobre N N . Descrever o


procedimento de demonstrao
((m, n) N N )P (m, n)

usando o princpio generalizado da induo matemtica


12. Um conjunto S Z+ Z+ denido recursivamente:
(B) (0, 0) S ;

(R1) (m, 0) S (m + 1, 0) S ,
(R2) (0, n) S (0, n + 1) S ,

(R3) (m, n) S (m + 1, n + 2) S .
(a) Mostrar que para qualquer (m, n) S valida a assero:
P (m, n) {(n par) (n 2m + 1)}

13. Seja S o conjunto de todas as sucesses (palavras) das letras a e b em


que todas as letras a precedem s letras b . Por exemplo aaab, abb, a, b
e sucesso vazia (designemos por ). Mas bab
/ S, ba
/S.
(a) Dar denio recursiva do S .
(b) Use esta denio para mostrar que abbb S .
(c) Esta denio determinada unicamente?

Resoluo. A primeira denio:


(B) S

(R) Se s S ento as S (regra 1) e sb S (regra 2).


Demonstremos que abbb S :
1

a ab abb abbb.

Existe um outro mtodo de produo, por exemplo


2

b bb abb abbb.

Por isso a denio dada no determinada unicamente.


Para o mesmo conjunto existe uma denio determinada unicamente:
(B) S

(R) Se s S ento as S (regra 1) e se a primeira letra de s no


letra a (ou s a palavra vazia ) ento bs S (regra 2).
Esta denio permite construir as palavras de S de maneira nica, por
exemplo
2
2
2
1
b bb bbb abbb.
14. Consideremos uma funo sobre o conjunto S denido no exerccio 13.

CAPTULO 7. RECURSIVIDADE GERAL

120
f () = 0

se s S ento f (as) = f (s) + 1 e f (sb) = 2f (s)

Vamos experimentar:
f (a) = f (a) = f () + 1 = 1,

f (ab) = 2f (a) = 2.

mas podemos calcular o f (ab) e usando outro caminho


f (b) = f (b) = 2f () = 0,

f (ab) = f (b) + 1 = 1.

Esta ambiguidade mostra que para denir funes temos de usar denies determinadas unicamente. Consideremos outra tentativa denir uma
funo conforme a segunda denio do mesmo exerccio.
f () = 0

se s S ento f (as) = f (s) + 1 e se a primeira letra de s no


letra a (ou s a palavra vazia ) ento f (bs) = 2f (s) .

Neste caso temos nico valor para f (ab) = f (b) + 1 = 2f () + 1 = 1 .


15. Repetir o exerccio 13 para o subconjunto T de sucesses que tm uma
e s uma letra a .
16. Seja = {a, b} e um subconjunto B denido recursivamente
(B) a e b B ;

(R) w B = abw e baw B .


(a) Construir seis elementos do B
(b) Mostrar que o comprimento de w B mpar

(c) A proposio inversa para a parte (b) verdadeira?

(d) A denio determinada unicamente?


17. Lembremos os nmeros Cnk de combinaes (coecientes binomiais) importantes em diferentes aplicaes. Sabe-se que eles satisfazem s relaes:
(B) Cn0 = Cnn = 1
k1
k
(R) Cnk = Cn1
se 0 < k < n .
+ Cn1

Estes nmeros so valores de uma funo f (n, k) = Cnk denida sobre


um conjunto S Z+ Z+ :
(B) (n, 0), (n, n) S , n Z+

(R) (n 1, k 1), (n 1, k) S (n, k) S .


18. O conjunto S Z+ Z+ denido recursivamente:
(B) (m, 0), (0, n) S , m, n Z+

(R) se (m 1, n) S e (m, n 1) S ento (m, n) S .


possvel demonstrar que S = Z+ Z+ .

4. EXERCCIOS

121

(a) Justicar que a denio determinada unicamente


(b) Consideremos a funo dada recursivamente sobre S
f (m, 0) = f (0, n) = 1,
f (m, n) = f (m 1, n) + f (m, n 1).

Calcular f (2, 3) .
Usando o princpio generalizado da induo matemtica demonstrar
que
m
n
f (m, n) = Cm+n
= Cm+n
.
19. (a) Dar uma denio recursiva para a classe de rvores m -rias regulares
(b) Fazer o mesmo para as rvores m -rias completas

Exerccios em anexo. Funes

1. O conjunto Sb de todas as sucesses binrias pode ser denido de maneira


seguinte
(B) 0, 1 Sb

(R) se Sb ento 0 Sb e 1 Sb .
Verique que a funo recursiva
f (0) = 0, f (1) = 1, f (0) = f (), f (1) = f () + 1

calcula o nmero das unidades de Sb


2. Consideremos um conjunto P de sucesses binrias denido de maneira
seguinte
(B) P

(R) se P ento 01 P , se 1 , 2 P ento 1 2 P .


(a) Demonstre que para P o nmero dos zeros da igual ao
nmero das unidades
(b) Demonstre que para qualquer parte inicial2 de qualquer P o
nmero dos zeros maior ou igual do que o nmero das unidades
(c) Demonstre que qualquer sucesso binria que satisfaz as condies
(a) e (b) um elemento do conjunto P
(d) Verique que a denio no determinada unicamente mas a funo
f com a denio a seguir denida correctamente

f (01) = f (),

f () = 0,
f (1 2 ) = f (1 ) + f (2 ) + 1

2 Denio: uma parte inicial da se = para uma , pode ser e linha


vazia

CAPTULO 7. RECURSIVIDADE GERAL

122

(e) Calcule f (001011010011)


3. Dada uma funo : A N , A N
(1) = 1,
(2n) = (n),

(2n + 1) = (n) + (n + 1)

(a) Calcule (85)


(b) Demonstre que denida sobre o N
4. O conjunto de todas as sucesses binrias onde = {a, b} pode ser
denido recursivamente de maneira seguinte
(B) a, b

(R) Se ento a e b
Claro que esta denio determinada unicamente (porque?). Consideremos a seguinte funo:3
r(a) = a,
r(a) = r() a,

r(b) = b
r(b) = r() b

Achar r(abbab) . O que que encontra a funo r ? Justicar a resposta.


5. Dada a denio de uma funo



1
1 2

, ,
se x

2
3 3



1
1
f (x) =
se x 0,
,
f (3x)

2
3




1 1
2

,1 .
+ f (3x 2) se x
2 2
3

(7.13)

Verique se a funo denida correctamente?

rvores binrias e com razes

Consideremos as denies 7.6, 7.7, 7.9 dos conjuntos Areg , Ab , Araiz de


rvores binrias regulares, binrias, com raiz respectivamente. Note: x a
rvore com nico vrtice x .
1. Desenhe a rvore
T = lig(a, b, lig(c, lig(e, m, n), d)).

Desenhe qualquer rvore binria e represente usando a operao lig


2. (a) Verique que a denio de altura dada no exemplo 7.15 concorde
com a denio de altura como o nvel mximo dos vrtices
(b) Dene a altura para rvores de Ab . Como que deve ser denido
h(nil) ?
3o

smbolo signica a operao de concatenao

4. EXERCCIOS

123

3. Demonstre que a funo n(T ) denida recursivamente


n( r) = 1,

n(lig(r, T1 , T2 )) = 1 + n(T1 ) + n(T2 )

representa o nmero dos vrtices da rvore T


4. Consideremos a denio de uma funo p(n, T ) onde n N , T uma
rvore binria regular:
p(n, x) = n,

p(n, T ) = n + p(n + 1, esq(T )) + p(n + 1, dir(T )).

Calcule p(1, T ) para a rvore na gura 7.2.


5. Seja f : Ab Ab denida por
f (nil) = nil,

f (lig(x, T1 , T2 )) = lig(x, f (T2 ), f (T1 )).

Desenhe f (T ) para a rvore na gura 7.2.

Algoritmos recursivos

1. Construir uma algoritmo recursivo para calcular a funo


f (1) = 1, f (2n) = f (n), f (2n + 1) = f (n) + 1

onde n N . Apresentar o funcionamento do algoritmo para os clculos


de f (15) e f (13) .
2. O conjunto B de todas as sucesses binrias pode ser denido pelas
condies:
(B) {0, 1} B ,

(R) B 0, 1 B
Construir uma algoritmo recursivo para calcular a funo
f (1) = 1, f (0) = 0, f ( 0) = f (), f ( 1) = f () + 1

Apresentar o funcionamento do algoritmo para os clculos de f (1101) e


f (0101) .
3. Construir um algoritmo para formar uma lista de todas as sucesses binrias de comprimento n que contem m (m n) unidades. Veja o
exemplo 7.21.

Captulo 8

Recursividade e rvores
1 Percurso de rvore com raiz
rvores com raiz tm grande importncia em aplicaes. Um dos problemas
necessrios para rvores com raiz percurso, isto , o problema seguinte. Dada
uma rvore A = (r, T ) com raiz r . preciso percorrer a rvore, i.e. visitar
todos os vrtices em ordem certo.
Existem diferentes ordens de percurso. Por exemplo, dada uma rvore com
raiz. preciso formar uma lista de todos os vrtices v1 , . . . , vn de modo que
todos os lhos seguirem depois dos seus pais. O mesmo vamos exigir para cada
uma das subrvores. Antes de formar um algoritmo consideremos um exemplo
de uma rvore percorrida segundo a ordem indicada. A gura 8.1 mostra uma
rvore e um caminho que realiza percurso. Neste mtodo depois de cada um
pai seguirem todos os lhos dele. Obteremos a lista
v1 , v2 , v5 , v9 , v10 , v6 , v11 , v3 , v7 , v12 , v13 , v4 , v8 .

Para formar o algoritmo recursivo natural usar a denio recursiva 7.9


na pgina 108 de rvores com raiz. Baseando sobre uma denio recursiva
muito fcil construir um algoritmo. Como cada rvore A = (r, T ) com
v1
v2
v5
v9

v3
v6

v10

v4
v7

v11

v12

Figura 8.1: Percurso de rvore.


124

v8
v13

PREORDER

2. PERCURSO DE RVORE BINRIA

125

raiz r pode ser obtida atravs da operao de ligamento de rvores com razes
(r1 , T1 ), . . . , (rm , Tm ) , possvel reduzir o problema dada aos mesmos problemas para subrvores. Designemos as subrvores como
subarvore(1), subarvore(2), . . . , subarvore(m).

Ento, o conjunto de todos os vrtices unio dos vrtices das subrvores e a


raiz r . Para resolver o nosso problema suciente dizer que deve ser visitada
a raiz e devem ser percorridas as subrvores. Mas o percurso das subrvores
pode ser feito recursivamente!

Procedure PREORDER(A: arvore);


begin
visitar(raiz(A));
For i:=1 to ns(A) do
PREORDER(subarvore(i,A))
end
Figura 8.2: Algoritmo PREORDER
Algoritmo PREORDER que podemos ver na gura 8.2 realiza o percurso para
uma rvore A . Sob a chamada visitar(x) subentende-se qualquer operao
aplicada ao vrtice x . No nosso caso visitar(x) signica: adicionar o vrtice
x no m da lista. A funo raiz(A) devolve a raiz da rvore A . Seja ns(A)
o nmero das subrvores A1 , . . . , Ans(A) da rvore A . Note que se a rvore
A tem nico vrtice, o nmero das subrvores ns(A) = 0 .
Relativamente a outros ordens veja o exerccio 1.

2 Percurso de rvore binria

2.1 Procedimentos

Para rvores binrias preciso indicar no algoritmo se existe um lho (esquerdo


ou direito). Os trs casos diferentes obteremos se considerarmos as ordens diferentes para visitar raiz e subrvores: os algoritmos PREORDER, INORDER e
POSTORDER
PREORDER:

raiz, subrvore esquerda, subrvore direita

INORDER:

subrvore esquerda, raiz, subrvore direita

POSTORDER:

subrvore esquerda, subrvore direita, raiz

Sejam esq(A) e dir(A) rvores esquerda e direita da rvore A respectivamente. O algoritmo PREORDER est apresentado na gura 8.3.
De maneira anloga podem ser realizados e os algoritmos INORDER e POSTORDER (veja os exerccios 3).

CAPTULO 8. RECURSIVIDADE E RVORES

126

Procedure PREORDER(A: arvorebin);


begin
visitar(raiz(A));
if existe arvore esquerda then
PREORDER(esq(A));
if existe arvore direita then
PREORDER(dir(A))
end
Figura 8.3:

PREORDER

para rvore binria

2.2 Notao funcional

Se a operao visitar(x) consiste em adicionar o vrtice x no m da lista dos


vrtices, o resultado do percurso uma sucesso de todos os vrtices da rvore.
Temos a correspondncia
Arvore Lista.

Esta correspondncia determina uma funo denida sobre o conjunto de todas


rvores binrias (suponhamos que os vrtices das rvores so elementos de um
conjunto certo, por exemplo, so as letras a, b, c, . . . , z ). cmodo usar a
notao funcional
f (A) = L

onde A rvore, L o resultado (lista). A funo f pode ser denida


recursivamente. Consideremos uma denio recursiva para esta funo no caso,
por exemplo, da ordem: raiz, subrvore esquerda, subrvore direita. Vamos usar
a notao lig introduzida na equao (7.8) (pgina 107) e para a operao
de concatenao
f (nil) = ,

f (lig(x, A1 , A2 )) = x f (A1 ) f (A2 )

Desta denio decorre o algoritmo em notao de Pascal

function lista(A: arvorebin):string;


begin
if A = nil then
lista := ''
else
lista := raiz(A)+lista(esq(A))+lista(dir(A))
end

3 Frmulas binrias

3.1 Frmulas bem formadas

H um vnculo entre rvores binrias e frmulas binrias. Pode-se para cada


frmula binria formar uma rvore binria de maneira nica. Por exemplo a
expresso algbrica
(x 4) 2 (y + 2)/3

3. FRMULAS BINRIAS

127

+
2

3
y

Figura 8.4: rvore binria para uma frmula binria


pode-se representar em forma de uma rvore (a gura 8.4)
Notemos que o percurso desta rvore por meio de algoritmo INORDER d
a frmula binria inicial, mas sem parntesis x 4 2 y + 2/3 . Isto surge
ambiguidade. Para as duas rvores binrias pode ser obtida a mesma lista como
resultado do percurso. Por exemplo, a lista a + b c pode ser obtida a partir
das duas rvores, uma com a raiz + , outra com a raiz . Mas as parntesis
permitem evitar ambiguidade.
Frmulas binrias podem ser denidas recursivamente. Para manter a ordem
de operaes vamos utilizar as parntesis: `(' e `)'. Nesta denio expresso da
forma (F + G) signica a concatenao dos cinco elementos (smbolos)
( ,F ,+ ,G ,)

Denio 8.1.

Dena-se o conjunto F de linhas (frmulas) recursivamente:

(B) As letras x, y, z, . . . e constantes so frmulas, isto , x, y, z, . . . F

(R) Se F F e G F ento (F + G), (F G), (F G) e (F/G) so


elementos do F .
Um exemplo de aplicao desta denio:
a, b (a b),

2, 3 (2 3),

(a b), (2 3) ((a b)/(2 3)).

Se no usar as regras de clculo (ordem de operaes) no se pode omitir


parntesis. Uso das parntesis permitem derivar qualquer frmula de maneira
nica (a denio determinada unicamente). As parntesis servem para indicar
esta ordem e escolher um nico caminho para calcular. Utilizamos o mtodo
formal, por isso nem cada frmula que pode ser usada em lgebra frmula
segundo a denio 8.1. Por exemplo a expresso a + (b c) no frmula
(segundo a denio 8.1) porque no contm parntesis exteriores.

3.2 Notao polaca

Se aplicarmos o algoritmo PREORDER rvore na gura 8.4 vamos ter a lista


dos smbolos , , , x, 4, 2, /, +, y, 2, 3 . Se omitirmos as vrgulas vamos ter o
resultado que se chama frmula na forma polaca ou forma prexa: x42/ +
y23 . Note que aqui 42 a lista dos dois elementos 4 e 2 , no o nmero 42 .
A vantagem desta forma que no necessrio usar as parntesis, a ordem dos
clculos determina-se de maneira nica (veja o exerccio 12 na pgina 135). A
seguir apresentada a denio recursiva de frmulas binrias na forma polaca:

CAPTULO 8. RECURSIVIDADE E RVORES

128

Denio 8.2.

Frmulas na forma polaca (ou forma prexa)

(B) As variveis x, y, z, . . . e constantes so frmulas, i.e., x, y, z, . . . Fp


(R) Se F e G so frmulas ento +F G, F G, F G e /F G Fp .
Exemplo 8.1. Calcular o valor v(F ) da frmula F = / a + bc abc com
valores a = 5 , b = 3 , c = 6 .
Resoluo: v1 = +bc = 3+6 = 9 , v2 = ab = 53 = 2 , v3 = av1 = 5
9 = 4 . Daqui
v(F ) = / av1 v2 c = /(4) 2, 6 = /(4)12 = (4)/12 = 1/3.

Notemos que a forma inxa correspondente (a (b + c))/((a b) c) .


O algoritmo POSTORDER para rvore na gura 8.4 forma a lista
x, 4, , 2, , y, 2, +, 3, /,

Omitindo as vrgulas vamos ter uma frmula na forma chamada forma polaca
inversa ou forma posxa ou suxa. A seguinte denio serve para obter o
conjunto Fpinv frmulas em forma polaca inversa.

Denio 8.3.

Frmulas na forma polaca inversa (ou forma posxa)

(B) As variveis x, y, z, . . . e constantes so frmulas, i.e., x, y, z, . . . Fpinv


(R) Se F e G so frmulas ento F G+, F G, F G e F G/ Fpinv .
Para calcular uma frmula representada na forma prexa ou na forma posxa
preciso vericar se as denies dos conjuntos Fp ou Fpinv determinam
as frmulas de maneira nica. Neste caso qualquer funo recursiva sobre os
conjuntos pode ser denida correctamente.
Concederemos a denio do conjunto Fp . Previamente estabelecemos as
duas propriedades caractersticas dos elementos do conjunto.

Lema 8.1. Sejam c(F ) e z(F ) os nmeros de letras e das operaes da F


respectivamente. Seja
index(F ) = z(F ) c(F ).
(8.1)
Para qualquer frmula F Fp temos

(8.2)

index(F ) = 1.

Demonstrao. Base. Se F uma letra, index(F ) = 0 1 = 1 .


Agora consideremos a implicao
{index(G) = 1, index(H) = 1}

index( GH) = 1

onde qualquer das operaes +, , , / . Temos


index( GH) = 1 + index(G) + index(H) = 1 + (1) + (1) = 1.

Conforme o princpio de induo, index(F ) = 1 qualquer que seja F Fp .

3. FRMULAS BINRIAS

129

Lema 8.2.

Seja F 0 qualquer parte inicial prpria da F , isto , F 0 comea


com o primeiro smbolo da F mas F 0 6= F . Ento

(8.3)

index(F 0 ) 0.

Demonstrao. Um exemplo: para a frmula F = / a + bc abc e partes


iniciais / , / , / a , etc. vamos ter os ndices
1, 2, 1, 2, 1, 0, 1, 2, 1, 0, 1.

natural que para linha vazia temos index() = 0 . Daqui para a base
{a, b, . . .} Fp esta proposio verdadeira. A implicao tem a forma: se
F = GH
(G0 , H 0 ){index(G0 ) 0, index(H 0 ) 0}

(F 0 ) index(F 0 ) 0.

Temos que considerar os casos seguintes: F 0 = G0 , F 0 = GH 0 (pode ser,


G0 = ou H 0 = ). No primeiro caso, index(F 0 ) = 1 + index(G0 ) 1 ,
no segundo index(F 0 ) = 1 + (1) + index(H 0 ) 0 . Conforme o princpio de
induo, index(F 0 ) 0 qualquer que seja F Fp .

Teorema 8.1.

Nas denies 8.2 e 8.3 os conjuntos Fp e Fpinv so determinados unicamente.

Demonstrao do teorema 8.1. Consideremos s o conjunto Fp .


Deve ser demonstrado que qualquer F Fp tem nica representao na
forma F = GH onde qualquer das operaes, e G, H Fp ou F
contm nico elemento (letra ou constante).
Das propriedades precedentes segue que para encontrar G necessrio escolher F 0 = G tal que index(F 0 ) = 0 (porque deve ser index(G) = 1 ),
mas qualquer parte inicial G0 prpria deve ter ndice index(G0 ) 0 . O G
determina-se unicamente pelo primeiro 0 na sucesso dos ndices (claro que tal
zero existe).
As propriedades estabelecidas nas lemas 8.1 e 8.2 so propriedades caractersticas, isto , qualquer sucesso composta das variveis e operaes que satisfaz
as condies (8.2) e (8.3) um elemento do conjunto Fp .

Teorema 8.2.

Seja qualquer sucesso composta das variveis e operaes.


Se satisfaz as condies (8.2) e (8.3) ento Fp .

Demonstrao. Consideremos a induo em relao a comprimento n da .


Para n = 1 a proposio verdadeira: se tem nico elemento = x , x
deve ser uma varivel porque index(x) = 1 . Mas x Fp .
Suponhamos agora que qualquer de comprimento n k que satisfaz
as condies (8.2) e (8.3) frmula do conjunto F . Demonstremos que se
tem comprimento k + 1 e satisfaz as condies (8.2) e (8.3) ento Fp .
Na sucesso dos ndices da F o primeiro zero determina as partes G e H
tais que F = GH , index( G) = 0 , index( G0 ) 1 para qualquer parte
inicial G0 da G . Daqui claro que G e H satisfazem as condies (8.2) e
(8.3). Mas segundo a suposio G, H Fp . Isto implica que F Fp .
Exemplo 8.2. Achar G e H a partir da linha F = + ab cd/xy .
A sucesso de ndices: 1, 2, 3, 2, 1, 2, 1, 0, 1, 0, 1 . O primeiro zero determina
G = ab cd e H = /xy .

CAPTULO 8. RECURSIVIDADE E RVORES

130

4
9

7
2

Figura 8.5: rvore com pesos

3.3 Frmulas do clculo proposicional

Mais uma denio serve como exemplo de denies recursivas de frmulas


binrias. Neste caso temos a denio das frmulas do clculo proposicional.

Denio 8.4.

Frmulas do clculo proposicional: o conjunto Fcp

(B) As variveis p, q, r, . . . so frmulas, i.e., Fcp


(R) Se F e G
F Fp .

Fcp ento (F G), (F G), (F G), (F G) e

Por exemplo (p (p q)) frmula do conjunto Fcp .

4 rvore com pesos. Mnima rvore binria


Uma rvore com pesos uma rvore com raiz em que a cada folha assinalado um
nmero certo no negativo chamado por peso da folha. Sejam T uma rvore,
n nmero das folhas e w1 , . . . , wn pesos das folhas. Designemos por l1 , . . . , ln
os nveis das folhas (i.e. li comprimento do nico caminho da raiz ate a folha
com peso wi ). Por denio o peso da rvore T soma
W (T ) =

n
X

wi li .

i=1

Para a rvore T sobre a gura 8.5 temos


W (T ) = 4 1 + 7 1 + 9 2 + 7 2 + 2 3 + 6 3.

Existem aplicaes diferentes que levam para rvores com pesos.

4.1 Mnima rvore binria. Algoritmo de Human

Consideremos o problema: dada a lista de nmeros positivos f1 , . . . , fn construir uma rvore binria com folhas marcadas pelos nmeros f1 , . . . , fn e com o
mnimo peso possvel. Vamos chamar esta rvore mnima rvore binria. Para
encontrar uma mnima rvore binria serve o algoritmo de Human.
A ideia do algoritmo: achar os dois nmeros mnimos na lista f1 , . . . , fn ,
digamos f1 e f2 , substituir estes nmeros por soma f1 + f2 . Depois disso,

4. RVORE COM PESOS. MNIMA RVORE BINRIA

131

resolver o problema (recursivamente) para a lista obtida com resultado que


uma rvore A0 . E ltimo passo substituir a folha marcada por f1 + f2
por rvore binria dos 3 elementos com duas folhas marcadas por f1 e f2 .
Como base pode servir uma lista de um s elemento, neste caso a rvore nica
e contm um s elemento.
Formalmente o considerado o pode se exprimido de modo seguinte. Sejam
f = (f1 , f2 , . . . , fn ) lista dada e A o resultado do algoritmo, isto , rvore
binria. Notaremos esta situao por A = H(f ) . Para H temos a seguinte
denio recursiva. Sejam A1 = f1 , . . . , An = (fn ) , isto , a lista dos
nmeros vamos representar por lista das rvores cada uma das quais tem nico
vrtice.
(
se A lista de um elemento (uma rvore)
H(A) = A,
(8.4)
H((A1 , A2 , . . . , An )) = H((A0 , A3 , . . . , An ))
onde A0 = lig(f1 + f2 , A1 , A2 ) .

Teorema 8.3 (Human).


binria.

O algoritmo de Human constri uma rvore mnima

Demonstrao. Demonstrao pode ser dada usando induo. Suponhamos que


para a lista f1 + f2 , f3 , . . . , fn o algoritmo apresenta uma rvore mnima 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)

Consideremos qualquer rvore mnima Tm . fcil ver que na arvore Tm os


vrtices marcados por f1 e f2 tm o mximo nvel porque, no caso contrario,
seja possvel trocar os pesos e diminuir o peso Wm = W (Tm ) . Podemos tomar
que f1 e f2 tm o mesmo pai x . Se substituirmos lig(x, f1 , f2 ) por um
elemento f1 + f2 vamos ter uma rvore T 0 . Temos
W (T ) W (T 0 ),

W (Tm ) = W (T 0 ) + f1 + f2 .

Destas relaes e da relao (8.5) segue que W (T )+f1 +f2 o mnimo peso.
Exemplo 8.3. Construir uma mnima rvore binria para a lista
4, 5, 6, 10, 13, 40.

Temos T1 = lig(9, 4, 5) . A nova lista de nmeros


6, 9, 10, 13, 40,
9 a marca da raiz da rvore T1 . Os seguintes passos: T2 = lig(15, 6, T1 ) ,
T3 = lig(23, 10, 13) , T4 = lig(38, T2 , T3 ) , T = lig(78, T4 , 40) .
O resultado representado na gura 8.6.

CAPTULO 8. RECURSIVIDADE E RVORES

132

78
38

40

15

23
9

10

13

Figura 8.6: Algoritmo de Human

4.2 Cdigo prexo

Codicao binria de smbolos baseada sobre um nmero xo de zeros e unidades (bits) apresenta um mtodo simples mas no nico.
Cdigo prexo um cdigo binrio que satisfaz as duas condies. A primeira: o cdigo de qualquer smbolo no pode ser uma parte inicial do cdigo
de qualquer outro smbolo. Para exprimir a segunda consideremos uma rvore
binria regular e assinalemos a cada uma das folhas um smbolo. A partir da
raiz para cada folha existe um nico caminho. Este caminho pode ser codicado
por uma sucesso binria se marcar cada arco por 0 ou 1 . Por conveno,
os arcos que saem de vrtices para lho esquerdo vamos marcar por 0 , para
lho direito  por 1 . Por exemplo, para a rvore sobre a gura 8.6 vamos ter
a marcao mostrada na gura 8.7.
0
0
0
c(6)

1
0
a(4)

f (40)

1
0
d(10)

1
e(13)

b(5)

Figura 8.7: Cdigo prexo


Daqui vamos ter os seguintes cdigos
a
b
c
d
e
f

0010
0011
000
010
011
1

5. EXERCCIOS

133

A segunda condio para o cdigo prexo que a rvore binria regular.

4.3 Cdigo mnimo

A importncia da questo sobre arvore mnima binria aparece no seguinte problema. Consideremos uma mensagem que contem smbolos de um conjunto. Por
exemplo, dada uma mensagem com as letras a, b, c, d, e, f com as ocorrncias
4, 5, 6, 10, 13, 40 . Se usar os cdigos da tabela em cima o comprimento total da
mensagem ser igual a
4 4 + 5 4 + 6 3 + 10 3 + 13 3 + 40 1.

Esta soma o peso da rvore sobre a gura 8.7. Entre todos os cdigos prexos, o cdigo que corresponde arvore binria mnima apresenta a soluo que
minimiza o comprimento da mensagem.

5 Exerccios
1. Construir o algoritmo para percorrer uma rvore com raiz com condio
que todos os vrtices devem seguir depois dos seus lhos. Por exemplo
para rvore na gura 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


ORDER e POSTORDER
3. Compor os algoritmos INORDER e

POSTORDER

PRE-

para rvores binrias

4. Realizar o algoritmo

Procedure PreMarcar(A: arvorebin);


begin
contador:=contador+1;
marcar(raiz(A),contador);
PreMarcar(esq(A));
PreMarcar(dir(A))
end
(supondo que o valor inicial do contador 0 ) para a rvore
A = lig(a, lig(b, c, d), lig(e, lig(f, g, h), i)).

Aqui a operao marcar(x,k) signica: assinalar ao vrtice x o nmero


natural k .
5. A lista a, b, c, d, e, f, g, h, i, k, l, m, n o resultado do algoritmo PREORDER aplicado a uma rvore. Os vrtices tm os nmeros dos lhos dados
pela tabela
a
3

b c
0 2

Reconstruir a rvore.

d e f
1 0 2

g
1

h i
0 1

k
2

l m
0 0

n
0

CAPTULO 8. RECURSIVIDADE E RVORES

134

6. Dadas as listas f bhnkmpdcga e hmpkdnbgacf de vrtices duma rvore


binria regular obtidas por meio dos algoritmos PREORDER e POSTORDER respectivamente. Reconstruir a rvore.
7. Calcule as frmulas F1 , F2 , F3 em forma polaca e apresente a rvore binria correspondente: F1 = 123456 + + , F2 = 2 + 3 4 1/ ,
F3 = 184 + 96 / .
8. Verique se as expresses seguintes so frmulas segundo denio 8.1:
(a)
(c)

(x (y z) u)
(1 + 1 + 1 + 1)

(b)
(d)

(((x + y)/(x y)) + 1)


(x y) (x + y)

9. O conjunto de frmulas binrias determina-se atravs da denio recursiva:


(B) as letras a, b, . . . , z so frmulas
(R) se F1 e F2 so frmulas ento as linhas ' F1 F2 ', ' F1 F2 '
e ' F1 F2 + ' so frmulas (representam produto, diferena e soma
respectivamente)
Determinar quais das expresses seguintes so frmulas. Justicar a resposta.
(a)
(c)

a b c
ab c

(b)
(d)

a b c
abc + a b c

A denio determinada unicamente?


10. Consideremos um conjunto A denido recursivamente que um subconjunto de linhas de caracteres contendo os caracteres a, b, . . . , z e o smbolo
.
(B) a, b, . . . , z A .

(R) F1 , F2 , F3 A F1 F2 F3 A .
(a) Apresente duas linhas diferentes do A de comprimento 10 .
(b) Qualquer que seja F A designemos por c(F ) o nmero das letras da F e por z(F ) o nmero dos smbolos . Demonstre que
F A c(F ) = 2z(F ) + 1 .
11. Seja F uma frmula na forma posxa que satisfaz denio 8.3. Vamos
usar a notao c(F ) e z(F ) do exerccio 10, mas neste caso z(F ) o
nmero das operaes +, , , / .
(a) Demonstre que c(F ) z(F ) = 1

(b) Seja F 0 qualquer parte inicial da F , isto , F 0 comea com o


primeiro smbolo da F . Por exemplo, para F = abc + a a parte
inicial uma das linhas a , ab , abc , abc+ , abc + , abc + a
ou toda a frmula F .
Demonstre que c(F 0 ) z(F 0 ) 1

5. EXERCCIOS

135

(c) Seja F qualquer linha composta das letras e operaes +, , , / .


Note que em geral F
/ Fpinv .
Demonstre que se c(F 0 ) z(F 0 ) 1 para qualquer parte inicial F 0
e c(F ) z(F ) = 1 ento F Fpinv .

(d) Demonstre que nas condies precedentes a linha F tem nica representao da forma F = F1 F2 x onde x uma das operaes.
12. Seja F uma frmula na forma prexa que satisfaz denio 8.2. Vamos
usar a notao c(F ) e z(F ) do exerccio 10, mas neste caso z(F ) o
nmero das operaes +, , , / . Seja index(F ) = z(F ) c(F ) .
(a) Demonstrar que index(F ) = 1

(b) Seja F 0 qualquer parte inicial prpria da F , isto , F 0 comea


com o primeiro smbolo da F mas F 0 6= F . Demonstrar que
index(F 0 ) 0
(c) Demonstrar que nas condies precedentes qualquer F Fp tem
nica representao da forma F = xF1 F2 onde x uma das operaes, F1 , F2 Fp

13. Seja a sucesso a1 , a2 , . . . , as resultado de percurso de uma rvore binria


segundo o algoritmo POSTORDER. Demonstrar que o algoritmo PREORDER, mas conforme o esquema
raiz subrvore direita subrvore esquerda
produz a sucesso inversa as , as1 , . . . , a2 , a1 .
14. Dada uma rvore binria. Construir um algoritmo para encontrar
(a) o nmero de todos os vrtices
(b) o nmero de todas as folhas
(c) a altura da rvore
15. Todos os vrtices de P
uma rvore binria so marcados por nmeros inteiros. Achar a soma
wi li onde wi o peso e li o nvel do vrtice
i.
16. Construir um algoritmo para encontrar o peso de uma rvore com pesos
17. Dada uma rvore binria A e uma lista L de smbolos. preciso marcar
os vrtices usando os smbolos da lista. Construir o algoritmo.

Questes para teste

1. Denio recursiva de um conjunto. Estrutura


2. Forma inversa, uso para vericar x A ou x
/A
3. Princpio generalizado de induo

4. Como que deve ser denida uma funo? Forma inversa. Saber dar
denies

136

CAPTULO 8. RECURSIVIDADE E RVORES

5. rvores com raiz, rvores binrias, operao lig


6. Funes sobre os conjuntos de arvores. Saber dar denies
7. Algoritmos recursivos. Funcionamento de algoritmo
8. Percurso de rvores, algoritmos PREORDER,

POSTORDER, INORDER

9. Formulas binrias. Formas prexa (polaca), inxa, posxa (suxa, polaca


inversa)

Captulo 9

Digrafos, redes
1 Introduo
Lembramos a denio de digrafo ou grafo orientado.

Denio 9.1.

Digrafo G terno G = {V, E, } onde

V conjunto de vrtices, V = V (G)


E conjunto de arcos, E = E(G)
: E V V (funo ou aplicao com domnio E . Valores desta
funo pertencem ao conjunto V V )

Vrios teoremas sobre grafos possvel reformular para digrafos. Por exemplo valido o seguinte teorema:

Teorema 9.1. Se u e v so vrtices diferentes dum digrafo G , e se existe


um caminho no G de u para v , ento existe um caminho acclico de u para
v.
Para digrafos vamos ter tambm e outros conceitos. Sejam indeg(v) o
nmero dos arcos que entram ao vrtice v e outdeg(v) o nmero dos arcos
que saem do v . Os casos indeg(v) = 0 e outdeg(v) 6= 0 vamos chamar que
v fonte e v um ocaso se indeg(v) 6= 0 e outdeg(v) = 0 .

Teorema 9.2.

menos 1 ocaso.

Cada digrafo nito acclico tem pelo menos 1 fonte e pelo

O teorema seguinte representa o teorema de Euler para digrafos.

Teorema 9.3. Suponhamos que um digrafo nito G conexo se considerar o


como grafo no orientado. Existe um caminho fechado no G usando todos os
arcos de G se e somente se
indeg(v) = outdeg(v)

para cada um dos vrtices v V (G) .

137

CAPTULO 9. DIGRAFOS, REDES

138

2 Digrafos com pesos


Existem aplicaes quando precisa-se saber se existe um caminho num digrafo
G de um vrtice u para um vrtice v . Este problema caso particular do
problema que consiste em encontrar um caminho mais curto, se introduzirmos os
comprimentos dos arcos. Suponhamos que a cada um dos arcos de um digrafo G
atribudo um nmero positivo, por exemplo preo do arco, peso, comprimento
etc. Este nmero vamos chamar peso e designar W (a) onde a E(G)
qualquer arco. Vamos considerar apenas digrafos sem arcos paralelos e usar a
notao W (u, v) em vez de W (a) se u e v so as extremidades do a (isto
, (a) = (u, v) , veja a denio 9.1).
m
P
W (ei ) . Ou, se usar a notao
Peso de um caminho e1 e2 . . . em a soma
i=1

com vrtices,

W (v1 v2 . . . vm+1 ) =

m
X

(9.1)

W (vi , vi+1 ).

i=1

Por exemplo no digrafo (g. 9.1) os caminhos v1 v2 v4 e v1 v2 v5 v4 tm os


pesos 3 + 7 = 10 e 3 + 1 + 5 = 9 respectivamente.
v2

v4

v6

8
2

v1

9
v3

4
9

v5

v7

Figura 9.1: Digrafo com pesos


Consideremos o seguinte problema: para dados
caminho com o peso mnimo W (u, v) possvel.
ento por denio W (u, v) = + . Ento, desta
o problema de existncia de um caminho entre dois

2.1 Algoritmo de Dijkstra

vrtices u e v achar um
Se tal caminho no existe
maneira pode ser resolvido
vrtices.

O algoritmo de Dijkstra permite encontrar os valores da funo W (u, v) . Isto


achar os pesos dos caminhos mnimos do vrtice u para todos os vrtices
v do digrafo G . Este algoritmo utiliza a ideia seguinte. Comparemos dois
caminhos
ux1 x2 xn zv e uy1 y2 ym zv.

Estes caminhos tm o ltimo arco comum zv . Claro que o resultado de


comparao depende de comparao das primeiras partes dos caminhos:
W (ux1 x2 xn zv) = W (ux1 x2 xn z) + W (z, v)
W (uy1 y2 ym zv) = W (uy1 y2 ym z) + W (z, v)

2. DIGRAFOS COM PESOS

139

Ento, entre todos os caminhos de u para v com penltimo vrtice z o


mnimo peso vai ter o ptimo (mnimo) caminho de u para z mais o arco
(z, v) . Daqui segue a concluso: para encontrar um mnimo caminho de u
para v suciente achar os mesmos de u para todos os z1 , z2 , . . . adjacentes
ao v que formam os arcos z1 v, z2 v, . . . com v :
W (u, v) = min{W (u, z1 ) + W (z1 , v), W (u, z2 ) + W (z2 , v), . . .}

(9.2)

Note que W (u, v) no o peso do arco (u, v) ! Isto o peso de um caminho


mnimo de u para v .
Para simplicar a notao suponhamos que V = {1, 2, . . . , n} e u = 1 .
O algoritmo de Dijkstra 9.1 permite passo a passo determinar vrtices j e os
valores dos pesos de caminhos mnimos W (1, j) . Seja o conjunto de todos
tais vrtices
L {2, . . . n}.

Este conjunto consiste dos vrtices para cada dos quais o peso mnimo W (1, j)
encontrado. Inicialmente L = e ao terminar o algoritmo o conjunto L deve
ser igual a L = {2, 3, . . . , n} .
Introduzimos as variveis D2 , . . . , Dn que so os pesos correntes de caminhos de 1 para os vrtices 2, . . . n respectivamente. Inicialmente,
D2 = W (1, 2), D3 = W (1, 3), . . . , Dn = W (1, n)

representam os pesos dos caminhos que contm apenas um arco. Se no existe


arco de 1 para j atribumos por denio W (1, j) = . No m do algoritmo
de Dijkstra deve ser Dj = W (1, j) .

Input:

um digrafo G sem laos e arcos paralelos, uma funo W : V (G)


V (G) [0, ] (os pesos)
Output: valores da funo W (1, j) que representa os pesos de caminhos
mnimos
L := ; V := {2, . . . , n} ;
for i V do
Di := W (1, i)

end for
while V

6= do
achar k V com mnimo Dk
L := L {k} ; V := V \ {k}
for j V do
if Dj > Dk + W (k, j) then
Dj := Dk + W (k, j)

end if
end for
end while
for j L do

W (1, j) := Dj

end for

Algoritmo 9.1: Algoritmo de Dijkstra


As condies a seguir so invariantes do algoritmo e permitem demonstrar
que o algoritmo faz realmente o trabalho que deve fazer:

CAPTULO 9. DIGRAFOS, REDES

140

Inicialmente e depois de cada passo do algoritmo o valor Dj o peso de um


caminho de 1 para j tal que
(A) Di = W (1, i) se i L
(B) Di Dk para quaisquer i L e k
/L
(C) Se k
/ L , Dk o peso de um caminho de 1 para k com todos os
vrtices intermedirios do L , alem disso
Dk = min(Di + W (i, k)) = min(W (1, i) + W (i, k))
iL

iL

(9.3)

W (i1 , k1 )
k1

i1

D i1

W (i, k)
Di

Figura 9.2: Dk = W (1, k)


Nestas condies, se escolher um k com o mnimo valor Dk , k
/ L,
vamos ter
Dk = W (1, k).
(9.4)
De fato, qualquer caminho (veja a gura 9.2) C1,k = 1, . . . , i1 , k1 , . . . , k de 1
para k onde i1 L , k1 , . . . , k
/ L tem peso no menor que Dk porque
W (C1,k ) Di1 + W (i1 , k1 ) + Di + W (i, k) Dk .

O algoritmo de Dijkstra permite


manter as condies (A),(B),(C) como um invariante
passo a passo aumentar o conjunto L
por m do algoritmo atingir a igualdade L = V (G) \ {1}

Exemplo 9.1. O funcionamento do algoritmo para o digrafo do g. 9.1 podemos


ver na g. 9.3 (conveno vi = i ). Observemos que os vrtices 2, 5, 3, 4, 6, 7
so escolhidos em ordem crescente dos pesos dos caminhos: 3, 4, 8, 9, 11, 15 .

Teorema 9.4. Se os pesos dos arcos do grafo G so no negativos ento o


algoritmo de Dijkstra termina com D(j) = W (1, j), j = 2, . . . , n .

2. DIGRAFOS COM PESOS

L
D2

3
{2}
3
{2, 5}
3
{2, 5, 3}
3
{2, 5, 3, 4}
3
{2, 5, 3, 4, 6} 3

D3
9
9
8
8
8
8

141

D4

10
9
9
9
9

D5

4
4
4
4
4

D6

13
13
11
11

Caminhos encontrados
(estado inicial)
1, 2, 4 e 1, 2, 5
1, 2, 5, 3 e 1, 2, 5, 6

D7

17
15

1, 2, 5, 4, 6 e 1, 2, 5, 4, 7
1, 2, 5, 4, 6, 7

Figura 9.3: Protocolo do Algoritmo de Dijkstra


v2

v4

v6

8
2

v1

9
v3

4
9

v5

v7

Figura 9.4: rvore dos caminhos mnimos


O algoritmo 9.1 no apresenta os caminhos mnimos. Uma modicao do
algoritmo pode dar todos os caminhos de 1 para j . Inicialmente temos os
caminhos de 1 para j de comprimento 1 se D(j) = W (1, j) < . No
exemplo 9.1 estes caminhos so (v1 , v2 ) e (v1 , v3 ) . Consideremos estes dois
arcos como rvore de raiz v1 . Depois de cada passo do algoritmo vamos ter um
novo caminho e como vamos ver abaixo, teremos uma rvore com raiz v1 at o
m do processo. Am de demonstrar esta assero discutimos uma construo
de modicao de rvores com raiz.

2.2 Modicao do algoritmo de Dijkstra

O algoritmo de Dijkstra permite encontrar os pesos de caminhos mnimos de


um vrtice ate todos os outros. Mas este algoritmo no apresenta os caminhos
prprios. Sobre a gura 9.4 podemos ver esses caminhos. Note que os caminhos
formam uma rvore com raiz no vrtice inicial.
Temos uma rvore (T, r) . Se ligar mais uma rvore (Tk+1 , rk+1 ) evidentemente que vamos ter outra rvore com a mesma raiz r . Observemos tambm
que possvel substituir a subrvore (Ti , ri ) arbitrria por outra rvore com
raiz. Cada vrtice v da rvore raiz duma subrvore (T 0 , v) . Se ligarmos a
/ T vamos ter a subrvore (T 00 , v) onde T 00 = T 0 {v} .
aresta (v, u) onde u
Designemos esta operao por
(Te, r) = Add((T, r), v, u),

v T,

CAPTULO 9. DIGRAFOS, REDES

142

v2

v4

v6

v2

8
2

v1

v2

v5

v6

v2

v2

v5

9
v3

v5

4
9

v2

v5

v7

v4

v6

8
2

v1

9
v7

v6

8
1

v3

v6

9
4

v4

8
2

v1

v7

v7

v4

v1

9
4

v3

v6

v5

v3

8
2

v1

1
7

v7

v4

2
8

v1

9
4

v3

v4

v3

4
9

v5

Figura 9.5: O processo de construo da rvore ptima


e = (Te, r) )
ou se designarmos a rvore com raiz por uma letra R = (T, r) (e R
ento
e = Add(R, v, u),
R

(veja g. 9.6).


A gura 9.5 mostra os estados consequentes depois de cada passo do algoritmo.
Vamos chamar v pai do u ( u lho do v ). A aresta que vai do v para u
uma nica aresta que vai para u . Designemos esta aresta por Indicator(u) ,
i.e. cada vrtice 'sabe' o seu Indicator(u) .
Introduzimos uma varivel R que inicialmente vai ter o valor ({1}, 1) i.e.
e = Add(R, v, u) vai conservar
a rvore tem um vrtice 1 . A operao R
assero: R rvore de raiz 1 . Ns temos que nos convencer que esta rvore
vai conservar todos os caminhos ptimos de 1 at vrtices da R . O que
podemos ver do exemplo 9.1, depois de cada passo do algoritmo, a rvore R
contm o conjunto L de vrtices na subseco 2.1 com caminhos ptimos.

v7

3. REDES. FLUXO MXIMO EM REDE

143
(Te, r)

(T, r)
r

Figura 9.6: Mais um arco mantm rvore

3 Redes. Fluxo mximo em rede

3.1 Rede. Fluxo. Corte

Rede um digrafo G com caractersticas e restries certas. A cada um dos


arcos do digrafo G atribudo um nmero que pode ser tempo, preo, capacidade etc. Em geral o grafo G tem nico vrtice chamado fonte e um nico
vrtice terminal (ocaso).
Uma classe considervel de problemas em redes envolve o conceito de movimento de quantidades de um artigo a partir da fonte para o vrtice terminal. Os
arcos em rede representam canais para o uxo de informao, carros (problema
de trco), gua etc.

Denio 9.2. Rede um digrafo G acclico conexo sem arcos paralelos satisfazendo s condies:
1. O grafo G tem um nico vrtice a (vamos chamar fonte) que no tem
arcos que entram para este vrtice, indeg(a) = 0
2. O grafo G tem um nico vrtice z (vamos chamar ocaso) que no tem
arcos que saem do vrtice, outdeg(z) = 0
3. A cada arco e = (i, j) atribudo um nmero c(i, j) no negativo que
se chama capacidade do arco.

Denio 9.3.

Fluxo na rede G uma funo no negativa dada sobre o conjunto dos arcos E(G) , i.e. f (i, j) (arco com extremidades i e j ) obedecendo
as condies:
1. fij cij , i.e. o uxo no excede as capacidades
2. Para cada vrtice j diferente da fonte e do ocaso
X
X
fij =
fjk
i

(9.5)

i.e. o uxo que entra para o vrtice vj coincide com o uxo que sai do
vrtice (condio de conservao do uxo)

CAPTULO 9. DIGRAFOS, REDES

144
4, 4

b
3, 1

5, 4
z

3, 3

a
5, 5

8, 2
g
c

7, 5

Figura 9.7: Rede


natural introduzir o valor de uxo (diz-se tambm uxo) como soma
X
fai
F =
(9.6)
i

O problema principal encontrar o uxo mximo possvel na rede.


Para analisar este questo consideremos uma noo de corte.

Denio 9.4.

Corte da rede G = (V, E) uma partio do conjunto dos


vrtices V em dois subconjuntos V 0 , V 00 , i.e. V 0 V 00 = V, V 0 V 00 = tal
que a fonte a V 0 e o ocaso z elemento do conjunto V 00 .

Denio 9.5.

soma

Capacidade de um corte (V 0 , V 00 ) da rede G = (V, E) a


X
cij
iV 0 ,jV 00

das capacidades de todos os arcos que saem do conjunto V 0 e entram para o


conjunto V 00 .
Para analisar relao entre capacidade de um corte e o uxo consideremos a
matriz

se (i, j) E(G) um arco,


fij
fij = fji se (j, i) E(G) um arco,
(9.7)

caso contrrio.
0

Por exemplo, para a rede sobre a gura 9.7, a matriz tem a forma
a
b
c
d
g
z

a
b
c

1
5
1

3 5

d
g z

4 3

2
4 2

Todas as linhas da matriz excepto a primeira e a ltima tm a soma zero. Mas


a soma te todos os elementos da matriz zero. Ento
X
X
fjz .
F =
fak =
k

3. REDES. FLUXO MXIMO EM REDE

145

Consideremos um corte, por exemplo V 0 = {a, b, c}, V 00 = {d, g, z} . A soma


dos elementos nas primeiras trs linhas ltimas trs colunas tambm o valor
do uxo, porque a soma dos elementos das primeiras trs linhas e colunas zero:
X
F =
fij .
iV 0 ,jV 00

Se considerar os arcos prprios s,


X
F =

iV 0 ,jV 00

fij

(9.8)

fji

iV 0 ,jV 00

Daqui logo
F =

fij

iV 0 ,jV 00

iV 0 ,jV 00

fji

cij = C.

(9.9)

iV 0 ,jV 00

Ento, uxo arbitrrio no pode ser superior do que capacidade de corte qualquer: F C . Isto pode ser interpretado, se considerar a rede como rede
de transmisso 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 0 , j V 00 .

3.2 Algoritmo para encontrar uxo mximo em rede

Existe um algoritmo simples para encontrar o uxo mximo em rede. O algoritmo consiste em aumentar sucessivamente o uxo por meio de uma sucesso
de arcos do fonte para o ocaso. A sucesso pode no ser no um caminho porque
pode ter arcos que tem orientao oposta. Por exemplo para a rede na gura
9.7 usando a sucesso
3,1
3,3
8,2
a b g z
possvel aumentar o uxo

3,3

3,1

8,4

a b g z.

Para encontrar uma sucesso desse tipo serve o procedimento Marcao (veja o
algoritmo 9.3). A partir da fonte a realiza-se marcao de vrtices adjacentes
tais que ate esses vrtices existe uma sucesso de arcos para aumentar o uxo.
Se atingir desta maneira o vrtice z , aparece possibilidade aumentar o uxo.
O resultado do algoritmo Marcao (algoritmo 9.3) um conjunto V V (G)
que contem os vrtices v V marcados por pares (vp , ) onde vp o vrtice
que precede o vrtice v , o valor em que pode ser aumentado o uxo. Se
o z V existe uma sucesso de vrtices do a para o z que usa-se para
aumentar o uxo. Por exemplo, consideremos a marcao para a situao na
rede sobre a gura 9.7.
a(?, )
b(a, 2)

b(a, 2)
g(b, 2)

g(b, 2)
c(g, 2)
z(g, 2)

O resultado de reviso do uxo o seguinte


3,3

3,1

8,4

a b g z.

CAPTULO 9. DIGRAFOS, REDES

146

Input:

G uma rede com vrtices ordenados a = 0, . . . , n = z

a fonte, z ocaso
cij capacidade do arco (i, j)

Output: uxo mximo f (i, j),


for all arcos (i, j) do

i, j 0, . . . , n

atribuir fij := 0

end for
repeat

MARCAO (V ) {Encontrar um conjunto V de vrtices ate os quais possvel aumentar o uxo usando o procedimento Marcao, veja em baixo o
algoritmo 9.3}

if

z V then
revisar o uxo

end if
until z / V

Algoritmo 9.2: Fluxo mximo em rede

Procedimento

MARCAO(var V: subset in V(G))

Output:

um conjunto V V (G) de vrtices ate os quais possvel aumentar


o uxo, cada um dos vrtices tem marca da forma (vp , ) onde vp o vrtice
que precede e o valor que possvel aumentar
Marcar a fonte a por (?, ) ; M := {a}
V :=
while z / M M \ V 6= do
escolher um vrtice M \ V { (, ) marca do vrtice }
V := V {}
for all vrtices w / M adjacentes para do
if arco (, w) E(G) and fw < cw then
Marcar w por (, min{, cw fw })
M := M {w}
else if arco (w, ) E(G) and fw > 0 then
Marcar w por (, min{, fw })
M := M {w}

end if
end for
end while

{z M M =V }
z M then
V := V {z}

if

end if

Algoritmo 9.3: Procedimento Marcao

3. REDES. FLUXO MXIMO EM REDE

147

Claro que o algoritmo termina se considerar s nmeros inteiros. Ao terminar


o algoritmo vamos ter um conjunto V que no contem z e que satisfaz
condio: para qualquer arco (i, j) com i V e j
/ V temos fij = cij ,
/ V , j V ento fij = 0 .
mas se i
De fato, ao terminar o algoritmo Marcao temos M = V . Alem disso,
o algoritmo Marcao tem um invariante a seguir: todos os arcos (i, j) com
iV e j
/ V e fij < cij tem extremidade j M , tambm, se i
/ V ,
j V , fij > 0 ento i M (verique!). Como M = V , no existem arcos
deste tipo.
Agora da equao (9.8) temos
X
cij ,
F =C=
iV,j V
/

isto , o uxo coincide com a capacidade do corte (V, V (G) \ V ) . Mas para
qualquer uxo e qualquer corte temos F C , veja (9.9). Daqui o F o uxo
mximo e (V, V (G) \ V ) o corte mnimo.

Captulo 10

Linguagens e gramticas.
Autmatos nitos
1 Linguagens e gramticas
Linguagens formais tm estrutura bastante simples e tm aplicaes em formao de linguagens de programao. Linguagem formal introduzem-se por meio
de uma gramtica.

1.1 Denio de uma gramtica

Seja A um conjunto nito. Vamos chamar A por alfabeto. Usa-se a designao: A o conjunto de todas as linhas de elementos de A . A a linha
vazia.

Denio 10.1.

Seja L A um subconjunto denido de uma maneira certa.


Vamos chamar L por linguagem formal. Elementos do L vamos chamar
palavras.
Na prtica o conjunto L introduz-se recursivamente. Para este objectivo
introduz-se uma noo de gramtica atravs da qual derivam-se as palavras da
linguagem L .

Denio 10.2.

Seja A um alfabeto. Uma gramtica um cortejo


G = (N, T, P, )

onde
um subconjunto T A ,
N = A\T ,

P (A \ T ) A um subconjunto nito,
N um elemento certo (marcado).

O conjunto T A chama-se o conjunto de smbolos terminais, N A um


conjunto de smbolos no terminais, P o conjunto de regras de derivao ou
produo, o smbolo inicial.
148

1. LINGUAGENS E GRAMTICAS

149

O conjunto P tem papel principal em gramtica, porque instrumento de


criao de palavras. Notemos que cada regra par ordenado (, ) onde
tem pelo menos um smbolo no terminal. Para apresentar as regras em vez de
(, ) vamos usar a forma .
Exemplo 10.1. Sejam T = {a, b} , N = {c, d} , = c , o conjunto P das
regras
P = {c bc, c a, bc d}.

Ento (N, T, P, ) gramtica.

1.2 Derivao

O conjunto P das regras vamos usar para derivar (produzir) as palavras da


linguagem L A i.e. linhas nitas de smbolos de A . A partir do elemento
inicial podem ser derivadas diferentes palavras conforme denio

Denio 10.3.

Seja G = (N, T, P, ) uma gramtica. Se uma


regra de derivao e xy A ento diz-se que xy derivvel directamente
de xy e escrever
xy ` xy.

Se i A para i = 1, . . . , n e i+1 derivvel de i (i = 1, . . . , n 1)


ento diz-se que n derivvel de 1 e escreve-se
1 ` n .

Note que as letras x, y, e servem para designar diferentes linhas (palavras) do conjunto A e sob xy subentende-se a concatenao simples das
linhas.
Consideremos duas derivaes para a gramtica denida no exemplo 10.1:
c ` bc ` bbc ` bba
c ` bc ` bbc ` bd.

No possvel continuar a partir das palavras bba e bd .

Denio 10.4.

Sejam A um alfabeto, G = (N, T, P, ) uma gramtica.


Elementos derivveis atravs da gramtica G vamos chamar linhas terminais
se eles consistem de smbolos terminais que so elementos do conjunto T .
O conjunto L(G) T de todas as linhas terminais forma linguagem formal
que se chama linguagem gerada por G .
cmodo usar as letras maisculas para smbolos no terminais e letras
minsculas para smbolos terminais. Consideremos mais uma gramtica
Exemplo 10.2. Sejam N = { , S},

T = {a, b} ,

P = { b , aS, S bS, S b}.

Temos aSbb ` abSbb (regra S bS ).


A linha bbab derivvel de i.e. ` bbab . A derivao
` b ` bb ` bbaS ` bbab.

Ento bbab L(G) .

150

CAPTULO 10. LINGUAGENS E GRAMTICAS

A denio 10.4 caso particular da denio geral 7.1 para denir conjuntos
recursivamente. De facto o conjunto X na denio 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 (denio 10.3).
Exemplo 10.3. Seja G gramtica no exemplo 10.2. Vamos analisar a linguagem
L(G) .
Por meio de um passo (directamente do ) possvel obter 2 elementos
s: b e aS . Notemos que cada uma destas palavras no 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 .


Continuao desta investigao 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 designao para a palavra de n letras b :


bb
. . . }b
.
| {z
n elementos

Demonstrao. Vamos usar o princpio generalizado da induo matemtica.


Demonstremos que cada linha l obtida tem forma
l = bn

ou l = bn abm S

(10.1)

onde S = S or S = . Alm disso se S = ento m 1 .


Base. evidente que o smbolo obedece condio dada.
Induo. Seja l = bn . As linhas bn+1 e bn aS que podem ser derivadas da l directamente tm a forma (10.1). Agora seja l = bn abm S . Caso
S = a linha l linha terminal e obedece a condio (10.1). Caso S = S
temos l ` bn abm+1 S, l ` bn abm+1 . As ltimas linhas satisfazem condio
(10.1).
As vezes usa-se uma notao mais curta para apresentar as regras, a notao
em forma de Backus  Naur. Por exemplo, vrias regras de forma
A 1 , A 2 , . . . , A n

usa-se a forma
A ::= 1 |2 | . . . |n .

Exemplo 10.4. Um nmero inteiro denido como uma sucesso de algarismos


que pode ter o sinal ( + ou ) a frente. A seguir temos uma gramtica 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, +, }

2. CLASSIFICAO

151

D ::= 0|1|2|3|4|5|6|7|8|9
I ::= S|U
S ::= +U | U

U ::= D|DU
I o smbolo inicial.

2 Classicao
Denio 10.5 (Gramticas regulares, livres de contexto, contexto sensveis).
Consideremos os trs casos abaixo

(A) Se cada regra de produo tem forma


A

(10.2)

onde , A , A N, A \ {} vamos chamar G por gramtica


contexto sensvel,
(B) Se cada regra de produo tem forma
A

onde A N, A \ {} vamos chamar G gramtica livre de contexto


(C) Se cada regra de produo tem forma
A ou A B

onde A, B N, T \ {} vamos chamar G gramtica regular.


Exemplo 10.5. Consideremos a gramtica representada pelos conjuntos dos smbolos no terminais e terminais
N = { , R, U, V },

T = {a, b},

o conjunto das regras


aU V, aV, U aU R, U aR, V ba, Rb bR, Ra baa

e o smbolo inicial . A gramtica no gramtica contexto sensvel porque


a regra Rb bR no satisfaz condio (10.2).
Os casos (B) e (C) so casos particulares do (A) e portanto G no livre
de contexto e no regular.
Mas existe uma gramtica que equivalente a esta e contexto sensvel. As
duas gramticas G1 e G2 so equivalentes se as linguagens geradas so iguais,
isto
L(G1 ) = L(G2 ).

CAPTULO 10. LINGUAGENS E GRAMTICAS

152

No caso da gramtica no exemplo 10.5 em regras que contm b o b pode ser


substitudo por um smbolo no terminal B , a regra RB BR pode ser
substituda pelas regras
RB RS, RS BS, BS BR

e introduzida uma nova regra B b .


possvel mostrar que L(G) = {an bn an : n 1} .

Exemplo 10.6. Consideremos a gramtica: T = {a, b, c}, N = { , A, B} , as


regras so
BAB, ABA, A AB, B BA, A aA, A ab, B b,

o smbolo inicial .
Notemos que esta gramtica no regular mas livre de contexto. Veriquemos se a linha abbbaabab pertence a L(G) , isto abbbaabab L(G) ?
Primeiro consideremos todas as linhas que no contm smbolos terminais
a, b . Tem-se uma simetria: se uma linha de letras A e B for derivvel
de ento a linha obtida por meio de troca A B e B A tambm derivvel. Consideremos portanto a linha BAB s. Aplicando as regras
A AB, B BA possvel 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 induo
matemtica).
Obteremos primeiro a linha ABBAA :
` ABA ` ABAA ` ABBAA `

abBBAA ` abbBAA ` abbbAA ` abbbaAA ` abbbaabA ` abbbaabab.

Em cada passo a barra

mostra a letra para a qual aplicamos uma das regras.

3 Mquinas nitas
Denio 10.6.
de

Uma mquina nita ou

FSM

(Finite State Machine) consiste

Um conjunto nito I de smbolos de entrada


Um conjunto nito O de smbolos de sada
Um conjunto nito S de estados
Uma funo f : S I S que determina estado consequente
Uma funo (de extraco) g : S I O
Um estado inicial S .

Escrevemos M = (I, O, S, f, g, ) .

3. MQUINAS FINITAS

153
a/0

b/0
b/1

1
a/1

Figura 10.1: Mquina nita


Exemplo 10.7. Sejam I = {a, b}, O = {0, 1}, S = {0 , 1 } . Determinemos
as funes f e g :
f (0 , a)
f (0 , b)
f (1 , a)
f (1 , b)

=
=
=
=

0
1
1
1

g(0 , a)
g(0 , b)
g(1 , a)
g(1 , b)

=
=
=
=

0
1
1
0

ou que o mesmo por meio da tabela


f
0
1

a
0
1

g
b
1
1

a
0
1

b
1
0

Usa-se uma representao geomtrica de mquinas. As funes f e g podem


ser denidas atravs do diagrama de transies (gura 10.1)
O diagrama de transies um digrafo onde os vrtices so estados. O estado
inicial = 0 indicado por uma seta. Como f (0 , b) = 1 e g(0 , b) = 1
desenhamos um arco com direco de vrtice 0 para vrtice 1 e marcamos
a por b/1 . Temos quatro tais transies que so arcos do digrafo.

Denio 10.7

(Diagrama de transies). Seja M = (I, O, S, f, g, ) uma


FSM. Diagrama de transies de M um digrafo G cujos vrtices so elementos de S e com arcos marcados. Um arco orientado existe se e somente se
existe um i I tal que f (, i) = 0 . Neste caso se g(, i) = s ento o arco
(, 0 ) est marcado por i/s .
Uma seta indica o estado inicial .
A partir de uma linha de entrada de elementos de I a mquina nita M
pode produzir uma linha de sada elementos do conjunto O .
Exemplo 10.8. Encontrar a linha de sada correspondente linha de entrada
aababba

para FSM no exemplo 10.7 (a diagrama de transies apresentada na gura


10.1).
Inicialmente camos no estado 0 . O primeiro smbolo de entrada a .
Encontramos o arco que sai do 0 e marcado por a/x onde x sada. Em
nosso caso x = 0 . Continuando teremos
0011001.

CAPTULO 10. LINGUAGENS E GRAMTICAS

154

Representemos isto em forma da tabela


Estado corrente

Smbolo de entrada

Smbolo de saida

4 Autmatos nitos
Autmato nito um caso particular de

FSM:

Denio 10.8.

Autmato nito uma mquina nita A = (I, O, S, f, g, )


que satisfaz s condies
O = {0, 1}
Estado corrente determina a ltima sada.

Os estados para os quais a ltima sada foi 1 chamam-se estados aceitveis.


Exemplo 10.9. Consideremos

FSM

A denida por meio da tabela


f

O diagrama de transies apresentada sobre a Figura 10.2.


O A um autmato nito porque
os valores da funo g so 1 e 0
para os estados 1 e 2 a ltima sada 1 , para o estado 0 a ltima
sada 0 .

Os estados aceitveis so 1 e 2 .
Vamos omitir sobre diagrama de transies smbolos de sada mas indicar os
estados aceitveis por meio de circunferncias duplas: veja a gura 10.3.
Tendo em vista esta conveno sobre diagramas de transies introduzimos
uma denio alternativa para autmato nito.

Denio 10.9.

Autmato nito
A = (I, S, f, A, )

consiste de
Um conjunto nito I de smbolos de entrada

4. AUTMATOS FINITOS

155

b/0

a/1

a/1
0

b/0

a
a

a/1

b/0

Figura 10.2: Mqina

Figura 10.3: Autmato


a

b
b

Figura 10.4: Diagrama de transies


Um conjunto nito S de estados
Uma funo f : I S S
Um subconjunto A S de estados aceitveis
Um estado inicial S

Exemplo 10.10. Consideremos o autmato nito A = (I, S, f, A, ) onde


I = {a, b},

S = {0 , 1 , 2 },

A = 2 ,

= 0

e a funo f dada por meio da tabela


a

O diagrama de transies apresentada sobre a gura 10.4.

Denio 10.10.

Se = x1 x2 . . . xn uma linha de entrada e

(a) 0 =
(b) f (i1 , xi ) = i para i = 1, . . . , n
diz-se que a linha representa o caminho
x

n
2
1
n

1
0

CAPTULO 10. LINGUAGENS E GRAMTICAS

156

O problema principal consiste em seguinte. Dada uma linha de smbolos de


I determinar se ltimo estado for aceitvel ou no.

Denio 10.11.

Sejam A = (I, S, f, A, ) um FSA e = x1 . . . xn uma


linha no vazia com xi I . Se existe uma sucesso de estados 0 , . . . , n
satisfazendo
(a) 0 =
(b) f (i1 , xi ) = i para i = 1, . . . , n
(c) n A
vamos chamar aceitvel por A .
Em outras palavras, aceitvel se representa um caminho com estado
terminal aceitvel.
Vamos usar a notao Ac(A) para o conjunto de todas as linhas aceitveis
segundo o autmato A .
Se analisarmos o autmato no exemplo 10.10 (veja a gura 10.4) podemos
notar que qualquer linha l aceitvel termina por duas letras b consecutivas.
Verique que esta condio tambm suciente para l Ac(A) .
Exemplo 10.11. Construir uma autmato que aceita as linhas que contm um
nmero mpar das letras a .
Soluo. Para distinguir linhas com nmero par ou mpar das letras a
suciente introduzir os dois estados I (mpar) e P (par). Sempre que aparece
letra a , temos mudana do estado corrente. A letra b no tem importncia
para estado corrente. A soluo apresentada na gura 10.5
b
P

b
a

Figura 10.5: O nmero de letras a mpar

5 Relao entre autmatos nitos e gramticas

5.1 Gramtica regular determina um diagrama

Segundo a denio de gramtica regular cada regra de produo tem uma das
duas formas
S x ou S xS1

onde x um smbolo terminal e S e S1 so smbolos no terminais. Consideremos o processo de derivao usando regras desta forma. Qualquer linha derivada a partir do smbolo inicial consiste de vrios smbolos terminais e termina
em smbolo no terminal. Isto permite introduzir um diagrama e interpretar
o processo de derivao como um caminho sobre o diagrama (veja o exemplo
10.12 abaixo).

5. RELAO ENTRE AUTMATOS FINITOS E GRAMTICAS


Exemplo 10.12. Dada a gramtica regular T = {a, b},
regras de produo

157

N = { , C} com as

b , aC, C bC, C b

e com smbolo inicial . Consideremos por exemplo o processo de derivao


de uma palavra bbabb L(G) :
` b ` bb ` bbaC ` bbabC ` bbabb.

Notemos que o processo pode ser codicado por meio do caminho


b

C C F.

Este caminho um caminho no diagrama (gura 10.6).


b

b
a

Figura 10.6: Gramtica Diagrama


O diagrama est feita de modo que se L(G) ento a Ac(A) . Para
x
atingir isto, a cada regra da forma x1 constri-se um arco 1 :
x

x1 1 .

Mas para usar as regras terminais introduz-se mais um mais um elemento F .

5.2 Autmato determina uma gramtica

Autmatos nitos tm os diagramas de transies. Consideremos o problema


inverso, a partir do diagrama de transies de um autmato A achar uma
gramtica regular
A G.
Para isso bastante inverter o precedente.
O objectivo : para um autmato nito A = (I, S, f, A, ) preciso encontrar uma gramtica regular G tal que

(10.3)

L(G) = Ac(A).

Isto pode ser realizado usando as duas regras:


x

A cada arco orientado (S S 0 ) com marca x introduzimos a regra de


produo da forma S xS 0
x

(S S 0 )

S xS 0 .

(10.4)

Alm disso a cada arco (S S1 ) que liga o estado S com um estado


aceitvel Sa deve ser introduzida uma regra da forma S x .
x

(S Sa )

S x.

(10.5)

158

CAPTULO 10. LINGUAGENS E GRAMTICAS

Exemplo 10.13. Consideremos o autmato sobra a gura 10.5.


O nosso objectivo determinar uma gramtica G = (N, T, P, ) que satisfaa a relao (10.3). Claro que T = {a, b} = I . No nosso caso temos o
conjunto P de regras
P bP,

P aI,

I bI,

I aP

e
I b,

P a

respectivamente. A gramtica 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 nmero mpar de letras a .

Teorema 10.1.

Seja A = (I, S, f, A, ) um autmato nito. Consideremos


a gramtica G = (N, T, P, ) obtida do A pelas igualdades
N = S,

T =I

e (10.4), (10.5). Ento G gramtica regular com


L(G) = Ac(A).

5.3 Uma gramtica regular determina um autmato indeterminado

Agora consideremos o problema inicial: a partir de uma gramtica G regular


construir um autmato nito
G A.

Dada uma gramtica regular G encontrar um autmato nito de modo que


L(G) = Ac(A) onde Ac(A) o conjunto de todas as linhas aceitveis por
autmato A . Isto ser feito por meio de dois passos. O primeiro permite
e tal que
construir um autmato indeterminado A
e
L(G) = Ac(A).

O segundo permite construir um autmato nito A tal que


e = Ac(A).
Ac(A)

Vamos inverter o mtodo do teorema 10.1. Para regras da produo da forma


x
x
S xS 0 e S x construmos os arcos (S S 0 ) e (S F ) onde F um
estado introduzido como estado nal aceitvel.
Por exemplo, consideremos a gramtica do exemplo 10.12. Ento temos os
4 arcos (Fig. 10.7). Mas o resultado no autmato. O vrtice C no tem
arcos marcados por a que saem do C e tem dois arcos marcados por b .
Este exemplo mostra que no suciente inverter o mtodo do teorema 10.1.

Denio 10.12
e consiste de
A

(Autmato indeterminado). Autmato nito indeterminado

(a) Um conjunto nito I de smbolos de entrada

5. RELAO ENTRE AUTMATOS FINITOS E GRAMTICAS

{C}

{ }

{C, F }

159

Figura 10.7: Autmato indeterminado


(b) Um conjunto nito S de estados
(c) Uma funo f : S I P(S) onde P(S) signica o conjunto de todos
os subconjuntos de S
(d) Um subconjunto A S de estados aceitveis
(e) Um estado inicial S
O diagrama sobre Fig. 10.7 representa o autmato indeterminado
S = { , C, F },

I = {a, b},

A = {F },

com estado inicial e a funo f dada pela tabela na mesma gura.


Exemplo 10.14. Construir o diagrama de transies para autmato indeterminado
I = {a, b}, S = { , C, D}, A = {C, D},

com estado inicial e funo f dada pela tabela


a

{ , C}

{D}

{C}

{C, D}

O resultado apresentado sobre a gura 10.8.


a

b
a

a
a

Figura 10.8: Diagrama de transies


Temos que dar denio de linhas aceitveis por autmato indeterminado.

Denio 10.13

e = (I, S, f, A, ) autmato in(Linha aceitvel). Sejam A


determinado e = x1 . . . xn uma linha no vazia com xi I . Se existe uma
sucesso de estados 0 , . . . , n satisfazendo

CAPTULO 10. LINGUAGENS E GRAMTICAS

160
(a) 0 =

(b) i f (i1 , xi ) para i = 1, . . . , n


(c) n A

vamos chamar aceitvel por A . Designemos Ac(A) o conjunto de todas


as linhas aceitveis.
Notemos que a sucesso 0 , . . . , n e as marcas x0 , . . . , xn dos arcos no
diagrama de transies determinam um caminho (nico) no digrafo que apresenta o diagrama de transies. Em termos do digrafo pode-se dizer que a linha
= x1 . . . xn aceitvel se e somente se existe um caminho
x

n
2
1
n

1
0

com um estado aceitvel n . Vamos dizer que a linha representa o caminho.


A linha = bbabb aceitvel por autmato em diagrama 10.7. De facto
existe o caminho
a

C C F

que leva para estado aceitvel. suciente encontrar um tal caminho.


A linha = aabaabbb aceitvel por autmato no diagrama 10.7. O
caminho correspondente
a

D D C C C C.

5.4 Autmato indeterminado  autmato

O objectivo desta seco encontrar um algoritmo para construir um autmato


nito A0 equivalente a um autmato indeterminado A . A equivalncia dos
autmatos A e A0 entende-se como sempre:
Ac(A0 ) = Ac(A).

Para analisar isso consideremos o problema seguinte. Dada uma linha (palavra) = x1 x2 . . . xn , xi I achar o conjunto de todos os estados atingveis
usando esta linha . Um estado vai ser atingvel se existe pelo menos um
caminho representado pela do estado inicial para o estado , isto , um
caminho da forma
x

n
2
1
n ,

1

n = .

Por exemplo, os valores f ( , a) e f ( , b) no caso de I = {a, b} representam


os conjuntos de estados atingveis para as linhas que contm nica letra ( a ou
b ).
Para encontrar o conjunto atingvel, por exemplo, para a linha bbab , suciente encontrar o conjunto C para a linha bba e depois achar a unio
[
f (, b), C.

A sucesso bbab determina uma sucesso de conjuntos de maneira nica. Isto


permite construir um autmato nito com estados que so subconjuntos do
conjunto de estados S .
O teorema 10.2 concluso desta seco.

5. RELAO ENTRE AUTMATOS FINITOS E GRAMTICAS

Teorema 10.2.

161

Seja G = {N, T, P, } gramtica regular. Sejam


I=T

onde F
/ N T
(
[ F se x P ,
0
0
f (, x) = { | x P }
no caso contrrio.
S = N {F }

Ento o autmato A = (I, S, f, A, ) aceita exactamente as linhas de L(G)


isto
Ac(A) = L(G).

5.5 Construo directa de autmatos

Exemplo 10.15. Construir dois autmatos que aceitam as linhas que contm bb
e bab respectivamente (linhas formadas das letras a e b , isto , I = {a, b} ).
As respostas so apresentadas nas guras 10.9 e 10.10. Vamos analisar as
solues.
O estado B1 do primeiro autmato diz que uma linha corrente termina em
b . Isto resulta logo que no estado F1 vamos ter uma linha corrente que contem
duas letras b consecutivas.
Agora consideremos o diagrama do segundo autmato. O B2 tem a mesma
informao: a linha corrente termina em b . O estado BA diz que alinha
corrente termina em ba .
a

a
1

B1

F1

a
b

Figura 10.9: Contem bb


a

a
b

B2

BA

F1

Figura 10.10: Contem bab


O mtodo considerado no exemplo 10.15 utiliza raciocnio que pode ser chamado uso de informao dos estados. O mtodo serve bom para autmatos
bastante simples.

CAPTULO 10. LINGUAGENS E GRAMTICAS

162

6 Exerccios

6.1 Gramticas

Nos exerccios 1-6 determinar se a gramtica dada contexto-sensvel, livre de


contexto, regular ou no pertence a nenhuma classe.
1. T = {a, b}, N = { , A} com regras
b , aA, A a , A bA, A a, b

e smbolo inicial .
2. T = {a, b, c}, N = { , A, B} com regras de produo
AB, AB BA, A aA, B Bb, A a, B b

e smbolo inicial .
3. T = {a, b}, N = { , A, B} com regras de produo
A, AAB, Aa ABa, A aa, Bb ABb, AB ABB, B b

e smbolo inicial .
4. T = {a, b, c}, N = { , A, B} com regras de produo
BAB, ABA, A AB, B BA, A aA, A ab, B b

e smbolo inicial .
5. Regras em forma de Backus  Naur
S ::= bS | aA | a

A ::= aS | bB
B ::= bA | aS | b

e smbolo inicial S .
6. T = {a, b}, N = { , A, B} com regras
AA , AA B, B bB, A a

e smbolo inicial .
Nos exerccios 711 mostrar que as linhas abaixo L(G) para as
gramticas G correspondentes.
7. bbabbab , exerccio 1
8. abab , exerccio 2
9. aabbaab , exerccio 3
10. abbbaabab , exerccio 4

6. EXERCCIOS

163

11. abaabbabba , exerccio 5


Nos exerccios 1213 caracterizar as gramticas
12. Seja G a gramtica do exerccio 1. Mostrar que L(G) se e somente
se linha no vazia e contm um nmero par de letras a .
13. Caracterizar L(G) para G do exerccio 5.

Soluo. Para qualquer l (T N ) introduzimos a designao na (l)


que o nmero das letras a desta linha. Por exemplo na (abbabaa) = 4 .
L(G) consiste de linhas que tm a forma l = l0 b2m onde l0 termina em
a (isto , l termina em b2m ), m 0 , e na (l) um nmero mpar.

Indicao. Demonstre que se aplicarmos apenas as regras no terminais


(excepto S a e B b ), vamos ter uma linha l que satisfaz a uma
das condies seguintes
(a) na (l) mpar e l termina em A ou B
(b) na (l) par e l termina em S

Nos exerccios 14-18 formar uma gramtica regular que gera as linhas no
vazias com propriedades indicadas.
14. T = {a, b} , a primeira letra a .

Resoluo. Seja o smbolo inicial. A primeira regra pode ter a forma


aS . Se usarmos regras de gramtica livre de contexto nenhuma
substituio no pode mudar a primeira letra a (est para sempre). O
smbolo S serve como smbolo inicial para criar todas as palavras de
letras a e b
S ::= a|b|aS|bS
Desta maneira podemos derivar palavra qualquer que contm pelo menos
2 smbolos. preciso introduzir a regra a . Ento, as regras da
gramtica so
::= aS|a, S ::= a|b|aS|bS.

15. T = {a, b} , no m tem ba .

Resoluo. As regras ::= a |b podemos interpretar assim: se uma


palavra termina em ba ento as palavras a e b terminam em
ba tambm. Uma soluo
::= a |b |ba.

A terceira regra pode ser usada no m do processo de derivao. Esta


regra pode ser substituda por duas regras bA e A a para
obter uma gramtica regular.
16. T = {a, b} , contm ba .

Resoluo. Pode-se raciocinar de mesma maneira: as regras ::= a |b


servem para indicar que a parte inicial qualquer ate apanhar ba . Adicionamos mais duas regras bA e A aS para formar ba . Mas A
serve para qualquer palavra que comea com a : A ::= a|aS . Resposta:
::= a |b |bA, A ::= a|aS, S ::= a|b|aS|bS

CAPTULO 10. LINGUAGENS E GRAMTICAS

164

17. T = {a, b} , no termina em ab

18. Nmeros inteiros que no comeam com 0 (veja o exemplo 10.4)


Nos exerccios 20-21 formar uma gramtica livre de contexto que gera as
linhas de letras a e b no vazias com propriedades indicadas.
19. T = {a, b} , linhas simtricas x1 . . . xn = xn . . . x1

20. Sejam na e nb os nmeros de letras a e letras b respectivamente. A


condio na = nb . Quer dizer, os nmeros das letras a e b devem
ser iguais. Por exemplo, abbaba .
Soluo. Seja 0 smbolo inicial.
0 ::= aB|bA,
B ::= b0 |aBB|b,
A ::= a0 |bAA|a,

Estas regras podem ser interpretadas de maneira seguinte. Designemos


por dif(l) = na nb a diferena entre os nmeros na e nb de letras
a e b da linha l . Suponhamos que uma linha l derivada usando
a primeira regra aB : ` aB ` . . . l . Claro que a partir de
B pode ser derivadas apenas linhas com condio dif() = 1 . O
mesmo pode ser dito sobre A : dif() = 1 , se a linha pode ser
derivada a partir de A . Agora tem de ser claro o contedo da regra
B aBB . Por exemplo uma derivao B ` aBB . . . ` aaababbbba
pode ser construda de maneira seguinte: dividimos aaababbbbab em trs
partes a, aababbb, bab . Porque assim? As linhas l1 = aababbb e l2 = bab
satisfazem condio dif(l1 ) = 1 e dif(l2 ) = 1 , e por isso podem ser
derivadas a partir de B !
21. ( ) Repetir o exerccio 20 com a condio 2na = nb .
Resposta:
0 ::= aII|bU,

I ::= aIII|b|b0 ,

U ::= aI|bD,

D ::= a|a0 |bU D|bDU

Indicao. Introduzimos uma caracterstica de linha que vamos chamar


por ndice
index(l) = 2na nb .

A mesma caracterstica index(X) = index(l) introduz-se e para smbolos


no terminais se a partir do smbolo X pode ser derivada uma palavra
l com index(l) .
Temos
index(0 ) = 0, index(I) = 1, index(U ) = 1, index(D) = 2.

Note que no suciente substituir D por U U .


22. Demonstrar que a linguagem
L = {an bn ck : n, k 1}

livre de contexto.

6. EXERCCIOS

165

6.2 Autmatos

1. Determinar se a linha = aabaabb aceitvel por autmato no exemplo


10.10 (veja a gura 10.4)?
O caminho que corresponde = aabaabb
a

0 0 0 1 0 0 1 2 .

O estado nal 2 e por isso a linha aceitvel.


2. Demonstrar que uma linha que consiste de letras a e b for aceitvel
por o autmato 10.10 se e somente se tem na extremidade bb .
Necessidade. claro que contm no menor que duas letras. Letra
a leva para o estado 0 e no possvel alcanar 2 por meio de uma
transio. Sucincia evidente.
3. Construir um diagrama de transies de um autmato nito que aceita o
conjunto de linhas contendo a e b e satisfazendo a uma das condies:
(a) Contm pelo menos uma letra b (veja a resposta sobre a gura
10.11).
(b) Contm um nmero mpar de a (veja a gura 10.5).
(c) Contem ab .
(d) Termina em ab .
4. Elaborar um autmato indeterminado que aceita linhas no vazias de a
e b e satisfazendo s condies
(a) comea com abb ou ba
(b) termina em abb ou ba
(c) contm abb ou ba
(d) contm bab e bb
(e) cada um de b tem a seguir um a (ou vrios)
(f) comea com abb e termina em ab
(g) comea com ab e no termina em ab
(h) no contm ba ou bbb (signica que no contm pelo menos uma
das duas linhas)
(i) no contm abba ou bbb

Solues dos exerccios 4d, 4h


Existe um mtodo que permite directamente construir um autmato. A cada
um dos estados programados vamos atribuir uma informao necessria para
construir os arcos marcados por a ou b (o resultado veja sobre a gura 10.12):

CAPTULO 10. LINGUAGENS E GRAMTICAS

166

a
b

F
b

Figura 10.11: Contm pelo menos uma letra b


proposio
B
BA
A
Cbb
Cbab
F

a linha corrente . . .
termina em b
termina em ba
termina em a
contm bb
contm bab
estado nal, F = Cbb Cbab

b
b

Cbb , B

Cbb , A

b
a

b
BA

Cbb , BA

Cbab , B

Cbab , A
b

F
a

Figura 10.12: Contm bab e bb


Por exemplo, consideremos o estado Cbab , A . Se a letra corrente a , no
h nenhuma alterao, porque a linha com esta letra a continua terminar em
a . Por isso, temos lao. Se a letra corrente b , a linha com letra b termina
em b , e estado a seguir Cbab , B .
Soluo do exerccio 4h. Consideremos a negao da proposio, i.e., uma
linha contm ba e contm bbb . Seja 0 o smbolo inicial. A seguir so as
regras de uma gramtica que equivalente a uma gramtica regular
0 ::= a0 |b0 |baB|bbbA

onde B contm bbb , A contm a . Para A e B deve ser:


A ::= bA|aF |a, F ::= aF |bF |a|b
B ::= aB|bB|bbb|bbbF

Esta gramtica permite construir uma autmato indeterminado. O autmato


pode ser invertido no sentido de fazer aceitvel cada um de estados no aceitveis
e vice versa.

Bibliograa
[1] N. L. Biggs. Discrete Mathematics. School of Economics, University of
London, Clarendon Press, 1990.
[2] R. Johnsonbaugh. Discrete Mathematics. Macmillan Publishing Company,
New York, Collier Macmillan Publishers, London, 1989.
[3] Kenneth A. Ross and Charles R.B. Wright. Discrete Mathematics. PrenticeHall International, 1992.
[4] S. Labovski. Elementos de Matemtica Discreta. UEM, DMI, Maputo, 1999.

167

You might also like