Professional Documents
Culture Documents
ELEMENTOS DE
MATEMTICA DISCRETA
Manual Terico Prtico
Sergey LABVSKIY
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
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 . . . . . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
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 . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
6 Ordenao de um vector
1
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7 Recursividade geral
1
3
4
8 Recursividade e rvores
1
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
1 Conjuntos
Lista (algoritmo)
Pode-se usar o smbolo
conjuntos innitos
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}
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
1. CONJUNTOS
Denio 1.1.
se e somente se x M x N.
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
Portanto x B .
(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
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
Se S = T escreve-se tambm S S = S 2 .
Generalizao:
S1 . . . Sn = {(s1 , s2 , . . . , sn ) : sk Sk , k = 1, 2, . . . , n}.
usa-se designao
S S . . . S = S n.
1. CONJUNTOS
11
1.7 Funes
a
2
b
4
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}.
0 1
0 2
2 3
4 1
4
3
12
2 Relaes
Composio de relaes
Sejam R1 S S e R2 S S relaes sobre S . O conjunto
def
(1.1)
2. RELAES
13
4
3
2
Denio 1.2.
14
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
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).
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).
R transitiva R R R.
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.
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.
16
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.
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
3. ALGORITMOS
17
while
xj 0
j := j + 1
do
end while
k := j
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
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.
18
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
10
20
30
40
50
1 seg
18 min
12 dias
35 anos
35700 anos
3. ALGORITMOS
19
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
n/2
= 0,
n2
lim
n/2
= 0.
n(n 1)/2
20
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
(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
AB , AC
(A B) C c
A\B , C \D
BD
(b) A B (A C) (B C)
(c) (A B) C = A (B C)
22
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}
4. EXERCCIOS
23
(b) S = N,
(c) S = Z,
R = {(m, n) : m2 = n2 }
(d) S = {2, 3, 4, . . .} ,
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
24
end for
j := j div 2
end while
Captulo 2
Contagem. Anlise
combinatria
1 Princpios bsicos
Colocao do problema. Determinar o nmero de elementos de um conjunto
dado.
|S T | = |S| + |T | |S T |.
25
26
(2.1)
conjuntos
n
n
[
X
X
X
|Ai Aj | +
|Ai Aj Ak |
|Ai |
Ai =
i=1
i=1
i,j
i,j,k
+ (1)n+1 |A1 A2 . . . An |.
(2.2)
Se S1 , S2 , . . . , Sk so conjuntos nitos
|S1 S2 . . . Sk | = |S1 | . . . |Sk |
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.
27
n!
(n r)!
(2.3)
(2.4)
n!
.
r!(n r)!
(2.5)
28
variantes.
n
X
Cnr anr br .
r=0
29
(2.6)
(n > 1, n > r)
(2.7)
Cn0 = Cnn = 1
Problema
1:
O nmero de distribuies
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 .
Problema
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
30
Problema
: Sucesses binrias
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
Os nmeros d1 , . . . , dn so no negativos, d1 1 , e
d1 + d2 + + dn = f (n) m.
d1 1, di 0, i = 2, . . . , n.
d1 1, di 0, i = 2, . . . , n + 1.
31
32
(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 )?
4. EXERCCIOS
33
34
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:
| | | | | | |
| | | | | | | | | | | | |,
4. EXERCCIOS
35
Captulo 3
Induo e recursividade
1 Induo matemtica
(3.1)
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
23
34
45
, 1+2+3=
, 1+2+3+4=
.
2
2
2
n(n + 1)
,
2
n = 1, 2, 3, . . .
(3.2)
k(k + 1)
.
2
(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
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
1. INDUO MATEMTICA
39
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
...
Suponhamos que
Teorema 3.3.
Suponhamos que
CAPTULO 3. INDUO
40
produto de primos.
Existe uma generalizao do princpio fraco:
Teorema 3.4.
Se
2. DEFINIES RECURSIVAS
41
2 Denies recursivas
x1 = 2.
(3.5)
n! = (n 1)! n, se n > 1.
fn = fn1 n, se n > 1.
Os 10
CAPTULO 3. INDUO
42
Destes exemplos podemos fazer a concluso geral. Para denir uma sucesso
sn , n = 1, 2, . . .
Denio 3.1.
(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 , . . .)
ou 1 = f0 1.
Daqui 0! = f0 = 1 .
Para a sucesso de Fibonacci consideremos a relao dada quando n = 2 :
F2 = F1 + F0 .
F1 = F1 F0 = 1 0 = 1, F2 = F0 F1 = 0 1 = 1.
end for
sk = sk1 + ak , se k 1.
2. DEFINIES RECURSIVAS
43
end for
end for
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.
(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)
(3.8)
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.
Se r1 = r2 = r ento
sn = c1 rn + c2 nrn .
donde c1 = 1, c2 = 1 e
3 = c1 22 + c2 (1)2
sn = 2n (1)n .
CAPTULO 3. INDUO
46
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.
bn = 2bn1 + bn2 ,
e a proposio
P (n) = {bn < 6bn2 },
se n 2
n 2.
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
4. EXERCCIOS
47
Teorema 3.6.
Suponhamos que
4 Exerccios
n(n + 1)(2n + 1)
, nN
6
an+1 1
(a 6= 1)
(b) 1 + a + a2 + . . . + an =
a1
(a) 12 + 22 + . . . + n2 =
CAPTULO 3. INDUO
48
5. Demonstrar para n N
(a) 5n 4n 1 divisvel por 16
1
n
(f)
i
i=1
(g)
n
X
1
2 n1
i
i=1
m1
m1
m1
m1
Cnm = Cn1
+ Cn2
+ Cn3
+ + Cm1
, n m 0.
a1 + . . . + an
n
a1 . . . an
n
ai 0, i = 1, . . . , n .
(3.9)
a1 . . . an 1.
(3.10)
4. EXERCCIOS
49
(3.11)
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 .
a01 + + an1
= 1.
n1
Usando o passo indutivo podemos supor que
a01 . . . an1 1.
CAPTULO 3. INDUO
50
1
Mn =
0
n
,
1
nN
Fn
Fn1
22
2n
, n = 0, 1, . . .
n!
x(x 1) . . . (x n)
, n0
n!
xn
, n1
n
an (2n)!
, n = 0, 1, 2, . . .
b2n1 n!
n
Y
i=1
ai = an+1
n
Y
i=1
ai
ai .
4. EXERCCIOS
51
sn+1 = an+1 sn , se n 1.
s0 = 1,
sn+1 = an+1 sn , se n 0.
n
X
ai .
i=1
n
[
Aj .
j=1
end for
23
2n
22
+
+ +
2!
3!
n!
CAPTULO 3. INDUO
52
4. EXERCCIOS
53
(f) s0 = s1 = s2 = 1 ,
n+1
2
cos(n + 1) , n 0.
4
0
0
0
2
1
0
0
0
1
2
Captulo 4
Algoritmos cclicos
1 Introduo
1.1 Exemplos
while true do
x := x + 3
end while
end while
54
1. INTRODUO
55
r
30
23
16
9
2
k
0
1
2
3
4
(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)
56
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!
Denio 4.1.
onde S 0 = f (S) .
S = (r, k).
S := f (S)
end while
se a implicao
(4.2)
I(S) I(S 0 ),
while do
S := f (S)
end while
true
S := f (S)
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)
Teorema 4.1.
e P2 (i) = {i mpar}.
end while
while true do
n := n + 1
m := m 2
end while
58
Temos
m0 = 2m = 2 2n = 2n+1 = 2n .
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
do
end while
onde S = f (S) .
0
(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)
else
n := n m
end if
end while
2. EXEMPLOS DE ALGORITMOS
59
Infelizmente existe mais uma possibilidade: ciclo com pre-condio pode trabalhar innitamente. Para demonstrar que o ciclo termina cmodo usar a
seguinte assero:
2 Exemplos de algoritmos
end while
a proposio
I(S) = I(r, k) = {a = kb + r}
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.
60
e r < b.
I P = {a = kr + b r 0} {r < b}.
Teorema 4.3.
Se b 6= 0 ento
MDC(a, b) = MDC(b, r)
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
(4.5)
y = x1 2x = 1 2(1) = 3.
e r = a mod b,
(4.7)
62
com a2 = b1 , b2 = r = a1 mod b1 .
Em caso geral, depois de n passos
X = A1 A2 An Xn .
end while
}
{ n = 0, m = MDC(a, b) X = P X
=P x
X = PX
y
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
7
23
y
y
onde x
= 1, y = t (qualquer nmero inteiro). Daqui temos a soluo geral
x = 4 13t,
y = 7 + 23t.
64
4 Exerccios
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
end while
end while
end while
Designemos m0 = 2m e n0 = 3n . Temos
6
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
(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
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
66
m := m 1
else
x := x x
m := m div 2
end if
end while
end if
k := 2 k
x := x div 2
end while
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
Captulo 5
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.
68
1. GRAFOS
69
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).
Denio 5.3.
70
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)}.
Denio 5.7
Teorema 5.1.
(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
1. GRAFOS
71
H subgrafo de G se
V (H) V (G)
E(H) E(G)
n
X
aik akj .
k=1
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
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 .
Denio 5.14
ento
0 (e0 ) = (u0 , v 0 )
e vice versa.
Denio 5.15
(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.
73
Corolrio 1.
Teorema 5.3
74
P6
P3
P1
I1
I2
P4
P7
P5
M2
3.2 Proposies
Teorema 5.5.
Corolrio 1.
75
Input:
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
76
s
c
r
x
gs
c
r
x
gs
g
h
z
y
y
g
y
g
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.
4 rvores
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 .
Teorema 5.9
Lema 5.3.
Cada rvore com pelo menos 1 arco tem no mnimo duas folhas.
Lema 5.4.
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
(b)
(c)
(d)
Denio 5.21
Denio 5.22
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.
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:
5 rvores geradoras
/V
Escolher um arco {u, w} que liga um u V com um w
V := V {w}
E := E {{u, w}}
end while
80
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 ).
for j := 1 to
if E {ej }
|E(G)| do
acclico then
E := E {ej }
end if
end for
Teorema 5.12.
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 .
81
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.
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
82
7 Exerccios
a
(w, z)
b
(w, x)
c
d
e
(x, z) (z, z) (z, x)
f
g
(z, y) (y, w)
h
(y, x)
7. EXERCCIOS
83
(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, . . .)
(b)
84
(b)
(d)
(b)
(e)
(c)
(f )
(g)
7. EXERCCIOS
85
86
10. Achar um caminho de Euler (se for possvel) para o grafo na gura 5.9
0
1
2
6
7
7.4 rvores
(b)
(c)
(d)
(e)
7. EXERCCIOS
87
(a)
(b)
88
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.
7. EXERCCIOS
89
(a)
(b)
(c)
350
240
120
220
330
180
240
270
320
280
90
200
300
280
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
(6.1)
91
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
100
1000
10000
100000
1000000
t = f (n)t0
0.5 s
50 s
1 hora 23 min
139 horas
579 dias
92
(6.2)
(6.3)
2.2 Quicksort
93
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
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:
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;
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 .
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
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.
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+ }.
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
97
2. s = as0 e s0 M
Mas se s comea com b , s
/M !
Denio 7.1.
(7.1)
XS
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.
(7.3)
98
e
1 3 9 27 13 39 117 351 175 51 25 12.
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)
99
100
Teorema 7.1
es
(7.5)
Sn .
n=0
Consideremos a proposio:
M (n) = (s Sn )P (s).
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).
Base
1 = 20 verdadeiro.
Parte recursiva
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 .
102
ou mais geral
f (s) = (f (s1 ), . . . , f (sm ), s1 , . . . , sm ).
Denio 7.3.
forma
(B)
(R)
103
(1) = 1
se x S , (2x) = (x) + 2x
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
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.
104
ou
f (2, 2) = 1 + f (2, 1) = 1 + 2f (1, 1) = 3.
-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
(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).
105
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.
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
ou simplesmente
T = lig(r, G, H).
(7.6)
(7.7)
106
lig(r, G, H)
r
e1
e2
Denio 7.6
3
5
Dena-se o conjunto Ab :
precisamente, se (g, G), (h, H) Areg ento (r, T ) = lig(r, (g, G), (h, H)) Areg
107
e3
e2
r1
r3
r2
G1
G3
G2
Denio 7.8
e de um elemento r se:
/
1. Os conjuntos V1 , . . . , Vk so disjuntos e r
2. V = V1 . . . Vk {r} , e
Vi
ou
G = lig(r, G1 , G2 , . . . , Gk )
(7.8)
108
ento T Araiz .
Uma rvore obtida por meio da construo de ligamento veja na gura 7.4:
T = lig(r, T1 , T2 , T3 )
onde
T3 = lig(r3 , g, h, i)
r
r1
r3
r2
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
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
110
f (1) = 0,
f ( 1) = f (),
f ( 01) = f () + 1.
se = 1,
0,
f () = f (1 ),
se = 1 1 e 1 = 2 1,
f (2 ) + 1, se = 2 01
h( x) = 0,
h(A) = 1 + max{h(esq(A)), h(dir(A))}
2. ALGORITMOS RECURSIVOS
111
2.2 Prova
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
112
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.
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:
vrios elementos x1 , . . . , xk e
se f (xi ) = 1 para todos i = 1, . . . , k ento f (x) = 1 .
Se o resultado Negativo:
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
114
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)
se length() = n,
Bn () = {},
Bn () = ,
se length() > n,
(7.11)
(7.12)
2. ALGORITMOS RECURSIVOS
115
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
116
se length() = 8,
S() = {},
[
S( v), se length() < 8 onde v no contradiz com .
S() =
v{1,...,8}
S = S()
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
4 Exerccios
(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
(R) Se x, y A ento x + y A e x y A .
(a) Mostrar que 1 A
118
4. EXERCCIOS
119
(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)}
a ab abb abbb.
b bb abb abbb.
120
f () = 0
Vamos experimentar:
f (a) = f (a) = f () + 1 = 1,
f (ab) = 2f (a) = 2.
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
4. EXERCCIOS
121
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
(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
f (01) = f (),
f () = 0,
f (1 2 ) = f (1 ) + f (2 ) + 1
122
(2n + 1) = (n) + (n + 1)
(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
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)
4. EXERCCIOS
123
Algoritmos recursivos
(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
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 .
v3
v6
v10
v4
v7
v11
v12
v8
v13
PREORDER
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).
2.1 Procedimentos
INORDER:
POSTORDER:
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).
126
PREORDER
3 Frmulas binrias
3. FRMULAS BINRIAS
127
+
2
3
y
Denio 8.1.
2, 3 (2 3),
128
Denio 8.2.
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.
(8.2)
index(F ) = 1.
index( GH) = 1
3. FRMULAS BINRIAS
129
Lema 8.2.
(8.3)
index(F 0 ) 0.
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.
Teorema 8.1.
Teorema 8.2.
130
4
9
7
2
Denio 8.4.
n
X
wi li .
i=1
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,
131
(8.5)
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.
132
78
38
40
15
23
9
10
13
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)
0010
0011
000
010
011
1
5. EXERCCIOS
133
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 .
POSTORDER
PRE-
4. Realizar o algoritmo
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
134
(x (y z) u)
(1 + 1 + 1 + 1)
(b)
(d)
a b c
ab c
(b)
(d)
a b c
abc + a b c
(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
5. EXERCCIOS
135
(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
4. Como que deve ser denida uma funo? Forma inversa. Saber dar
denies
136
POSTORDER, INORDER
Captulo 9
Digrafos, redes
1 Introduo
Lembramos a denio de digrafo ou grafo orientado.
Denio 9.1.
Vrios teoremas sobre grafos possvel reformular para digrafos. Por exemplo valido o seguinte teorema:
Teorema 9.2.
menos 1 ocaso.
137
138
com vrtices,
W (v1 v2 . . . vm+1 ) =
m
X
(9.1)
W (vi , vi+1 ).
i=1
v4
v6
8
2
v1
9
v3
4
9
v5
v7
vrtices u e v achar um
Se tal caminho no existe
maneira pode ser resolvido
vrtices.
139
(9.2)
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)
Input:
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
140
iL
(9.3)
W (i1 , k1 )
k1
i1
D i1
W (i, k)
Di
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
v4
v6
8
2
v1
9
v3
4
9
v5
v7
v T,
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
v7
143
(Te, r)
(T, r)
r
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)
144
4, 4
b
3, 1
5, 4
z
3, 3
a
5, 5
8, 2
g
c
7, 5
Denio 9.4.
Denio 9.5.
soma
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
145
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 .
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)
3,1
8,4
a b g z.
146
Input:
a fonte, z ocaso
cij capacidade do arco (i, j)
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
Procedimento
Output:
end if
end for
end while
{z M M =V }
z M then
V := V {z}
if
end if
147
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.
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.
Denio 10.2.
onde
um subconjunto T A ,
N = A\T ,
P (A \ T ) A um subconjunto nito,
N um elemento certo (marcado).
1. LINGUAGENS E GRAMTICAS
149
1.2 Derivao
Denio 10.3.
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.
Denio 10.4.
T = {a, b} ,
150
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.
ou l = bn abm S
(10.1)
usa-se a forma
A ::= 1 |2 | . . . |n .
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
(10.2)
T = {a, b},
152
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 `
3 Mquinas nitas
Denio 10.6.
de
FSM
Escrevemos M = (I, O, S, f, g, ) .
3. MQUINAS FINITAS
153
a/0
b/0
b/1
1
a/1
=
=
=
=
0
1
1
1
g(0 , a)
g(0 , b)
g(1 , a)
g(1 , b)
=
=
=
=
0
1
1
0
a
0
1
g
b
1
1
a
0
1
b
1
0
Denio 10.7
154
Smbolo de entrada
Smbolo de saida
4 Autmatos nitos
Autmato nito um caso particular de
FSM:
Denio 10.8.
FSM
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
b
b
S = {0 , 1 , 2 },
A = 2 ,
= 0
Denio 10.10.
(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
156
Denio 10.11.
b
a
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).
157
N = { , C} com as
b , aC, C bC, C b
C C F.
b
a
x1 1 .
(10.3)
L(G) = Ac(A).
(S S 0 )
S xS 0 .
(10.4)
(S Sa )
S x.
(10.5)
158
P aI,
I bI,
I aP
e
I b,
P a
Teorema 10.1.
T =I
Denio 10.12
e consiste de
A
{C}
{ }
{C, F }
159
I = {a, b},
A = {F },
{ , C}
{D}
{C}
{C, D}
b
a
a
a
Denio 10.13
160
(a) 0 =
n
2
1
n
1
0
C C F
D D C C C C.
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 = .
Teorema 10.2.
161
onde F
/ N T
(
[ F se x P ,
0
0
f (, x) = { | x P }
no caso contrrio.
S = N {F }
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
a
b
B2
BA
F1
162
6 Exerccios
6.1 Gramticas
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
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 .
164
I ::= aIII|b|b0 ,
U ::= aI|bD,
livre de contexto.
6. EXERCCIOS
165
6.2 Autmatos
0 0 0 1 0 0 1 2 .
166
a
b
F
b
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
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