Sei sulla pagina 1di 63

Universidade Eduardo Mondlane

ELEMENTOS DE
MATEMÁTICA DISCRETA
Manual Teórico – Prático

Sergey LABÓVSKIY

Departamento de Matemática e Informática


Maputo 2005
2

Introdução
A investigação de diferentes problemas em ciência acha a sua reflexão em cons-
trução de diferentes modelos matemáticos. Em física e engenharia usam-se
diferentes modelos de análise matemática. Mas desenvolvimento de informática
precisa de modelos matemáticos de outra natureza. A distinção principal con-
siste no seguinte: o objectivo de Análise Matemática é investigação de processos
contínuos, mas informática estuda processos discretos. Um processo discreto é
resultado de realização de um algoritmo. Investigação de algoritmos é o assunto
principal da Matemática Discreta.
Tanto Matemática Discreta como Análise Matemática têm na sua base Te-
oria de conjuntos, Lógica matemática e teoria de algoritmos, Álgebra abstracta.
Por causa de natureza de conjuntos discretos o capítulo Análise combinatória
faz uma parte importante de Matemática Discreta.
Neste manual são apresentados elementos dos tópicos principais de Matemá-
tica Discreta:

• teoria de conjuntos

• análise combinatória

• indução e recursividade

• teoria de grafos e algoritmos sobre grafos

• autómatos finitos, gramáticas e linguagens

O manual é reelaboração do manual do autor [1]. Na preparação do presente


manual particularmente foram utilizados diferentes exercícios e matéria teórica
dos livros [2] e [3].
Conteúdo

1 Conjuntos, relações e grafos 7


1 Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1 Métodos de representação de conjuntos . . . . . . . . . . 7
1.2 Conjuntos frequentemente usados . . . . . . . . . . . . . . 8
1.3 Conjunto de conjuntos . . . . . . . . . . . . . . . . . . . . 8
1.4 Operações sobre conjuntos . . . . . . . . . . . . . . . . . . 9
1.5 Leis de álgebra de conjuntos . . . . . . . . . . . . . . . . . 9
1.6 Produto directo (cartesiano) . . . . . . . . . . . . . . . . . 10
1.7 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 Relações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1 Conceito de relação . . . . . . . . . . . . . . . . . . . . . 12
2.2 Representação geométrica de relação. Conceito de grafo
orientado . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Representação de grafos. Matriz de adjacência . . . . . . 14
2.4 Relação de equivalência . . . . . . . . . . . . . . . . . . . 14
2.5 Partição de um conjunto em classes . . . . . . . . . . . . 15
3 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1 Algoritmos cíclicos . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Ciclos duplos e múltiplos . . . . . . . . . . . . . . . . . . 17
3.3 Complexidade de algoritmos . . . . . . . . . . . . . . . . . 17
4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1 Lógica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 Conjuntos e funções . . . . . . . . . . . . . . . . . . . . . 21
4.3 Relações . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2 Contagem. Análise combinatória 24


1 Princípios básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.1 Regra de união . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2 Princípio do produto . . . . . . . . . . . . . . . . . . . . . 25
2 Permutações, subconjuntos e distribuições . . . . . . . . . . . . . 25
2.1 r -permutações (arranjos) . . . . . . . . . . . . . . . . . . 25
2.2 Número de funções . . . . . . . . . . . . . . . . . . . . . . 26
2.3 Número de subconjuntos. Coeficientes binomiais . . . . . 26
2.4 Teorema binomial, propriedades de coeficientes . . . . . . 27
2.5 Distribuição de n objectos em k caixas diferentes . . . 28
3 Permutações com repetições. Partições . . . . . . . . . . . . . . . 30
3.1 Permutações com repetições . . . . . . . . . . . . . . . . . 30
3.2 Partições de um conjunto . . . . . . . . . . . . . . . . . . 30

3
4 CONTEÚDO

4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3 Indução, Algoritmos 35
1 Indução matemática . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.1 Introdução. Exemplo . . . . . . . . . . . . . . . . . . . . . 35
1.2 Princípio da indução matemática . . . . . . . . . . . . . . 36
1.3 O princípio fraco de indução matemática . . . . . . . . . 38
1.4 Princípio de escolha de mínimo elemento . . . . . . . . . . 39
2 Definições recursivas . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.1 Descrição do problema . . . . . . . . . . . . . . . . . . . . 39
2.2 Definição recursiva . . . . . . . . . . . . . . . . . . . . . . 40
2.3 Extensão de domínio . . . . . . . . . . . . . . . . . . . . . 41
2.4 Cálculo iterativo. Algoritmos . . . . . . . . . . . . . . . . 41
2.5 Cálculo recursivo . . . . . . . . . . . . . . . . . . . . . . . 42
2.6 Relações recorrentes lineares . . . . . . . . . . . . . . . . 43
3 Definição recursiva e indução matemática . . . . . . . . . . . . . 44
3.1 Demonstração de proposições . . . . . . . . . . . . . . . . 44
3.2 Indução com base de vários elementos . . . . . . . . . . . 44
4 Algoritmos cíclicos . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1 Ciclo infinito. Estado . . . . . . . . . . . . . . . . . . . . 46
4.2 Ciclo com pre-condição . . . . . . . . . . . . . . . . . . . 47
4.3 Invariante de ciclo . . . . . . . . . . . . . . . . . . . . . . 48
4.4 Invariante de ciclo com pre-condição . . . . . . . . . . . . 49
4.5 Algoritmo de divisão inteira . . . . . . . . . . . . . . . . . 50
4.6 Demonstração que o ciclo termina . . . . . . . . . . . . . 51
4.7 Algoritmo de Euclid . . . . . . . . . . . . . . . . . . . . . 51
4.8 Equação em números inteiros . . . . . . . . . . . . . . . . 52
4.9 Formação de um algoritmo cíclico . . . . . . . . . . . . . 54
5 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1 Indução matemática . . . . . . . . . . . . . . . . . . . . . 55
5.2 Definições recursivas . . . . . . . . . . . . . . . . . . . . . 57
5.3 Algoritmos cíclicos . . . . . . . . . . . . . . . . . . . . . . 60
5.4 Formação de algoritmo . . . . . . . . . . . . . . . . . . . . 62

4 Introdução à teoria de grafos e árvores 64


1 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
1.1 Grafo orientado ou grafo com direcções (digrafo) . . . . . 64
1.2 Grafo orientado e uma relação . . . . . . . . . . . . . . . 64
1.3 Grafo não orientado (grafo sem direcções) . . . . . . . . . 65
1.4 Grau de vértice. Relação de adjacência . . . . . . . . . . . 65
1.5 Caminhos, ciclos . . . . . . . . . . . . . . . . . . . . . . . 66
1.6 Matriz de adjacência . . . . . . . . . . . . . . . . . . . . . 67
1.7 Isomorfismo de grafos . . . . . . . . . . . . . . . . . . . . 67
2 Proposições sobre caminhos e ciclos . . . . . . . . . . . . . . . . . 68
3 Problema de percurso de arcos. Circuito de Euler . . . . . . . . . 69
3.1 Problema sobre as pontes de Königsberg . . . . . . . . . . 69
3.2 Proposições . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.3 Algoritmo de Fleury . . . . . . . . . . . . . . . . . . . . . 70
4 Árvores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.1 Definições e teoremas gerais . . . . . . . . . . . . . . . . . 71
CONTEÚDO 5

4.2 Árvores com raiz . . . . . . . . . . . . . . . . . . . . . . . 72


4.3 Árvore binária . . . . . . . . . . . . . . . . . . . . . . . . 73
5 Árvores geradoras . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.1 Algoritmo de produção duma árvore geradora . . . . . . . 74
5.2 Grafos com pesos, árvore mínima com pesos . . . . . . . . 74
6 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.1 Definições de grafos orientado e não orientado, diagrama
de grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.2 Grau de vértice, isomorfismo de grafos . . . . . . . . . . . 76
6.3 Caminhos e ciclos . . . . . . . . . . . . . . . . . . . . . . 78
6.4 Árvores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.5 Exercícios diferentes . . . . . . . . . . . . . . . . . . . . . 80
6.6 Árvore geradora mínima. Algoritmos de Kruskal e de Prim 81

5 Ordenação de um vector 83
1 Procura binária em vector ordenado . . . . . . . . . . . . . . . . 83
2 Ordenação de um vector. Complexidade espacial . . . . . . . . . 84
2.1 Ordenação por união (merge sort) . . . . . . . . . . . . . 84
2.2 Quicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2.3 Avaliação de complexidade de ordenação . . . . . . . . . . 87
3 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

6 Recursividade geral 88
1 Conceito geral da definição recursiva . . . . . . . . . . . . . . . . 88
1.1 Exemplos preliminares . . . . . . . . . . . . . . . . . . . . 88
1.2 Definição recursiva de um conjunto . . . . . . . . . . . . . 90
1.3 Forma inversa. Definições determinadas unicamente . . . 91
1.4 Princípio generalizado da indução matemática . . . . . . 93
1.5 Funções sobre conjuntos dados recursivamente . . . . . . 95
1.6 Árvores binárias e árvores com raízes . . . . . . . . . . . . 97
2 Algoritmos recursivos . . . . . . . . . . . . . . . . . . . . . . . . 101
2.1 Calculo de funções dadas recursivamente . . . . . . . . . . 102
2.2 Prova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.3 Percurso dos elementos de um conjunto . . . . . . . . . . 107
3 Questões principais . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

7 Recursividade e árvores 117


1 Percurso de árvore com raiz . . . . . . . . . . . . . . . . . . . . . 117
2 Percurso de árvore binária . . . . . . . . . . . . . . . . . . . . . . 118
2.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . 118
2.2 Notação funcional . . . . . . . . . . . . . . . . . . . . . . 119
3 Fórmulas binárias . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.1 Fórmulas bem formadas . . . . . . . . . . . . . . . . . . . 119
3.2 Notação polaca . . . . . . . . . . . . . . . . . . . . . . . . 120
3.3 Fórmulas do cálculo proposicional . . . . . . . . . . . . . 123
4 Árvore com pesos. Mínima árvore binária . . . . . . . . . . . . . 123
4.1 Mínima árvore binária. Algoritmo de Huffman . . . . . . 123
4.2 Código prefixo . . . . . . . . . . . . . . . . . . . . . . . . 125
4.3 Código mínimo . . . . . . . . . . . . . . . . . . . . . . . . 126
6 CONTEÚDO

5 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

8 Digrafos, redes 130


1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
2 Digrafos com pesos . . . . . . . . . . . . . . . . . . . . . . . . . . 131
2.1 Algoritmo de Dijkstra . . . . . . . . . . . . . . . . . . . . 131
2.2 Modificação do algoritmo de Dijkstra . . . . . . . . . . . . 134
3 Redes. Fluxo máximo em rede . . . . . . . . . . . . . . . . . . . 136
3.1 Rede. Fluxo. Corte . . . . . . . . . . . . . . . . . . . . . 136
3.2 Algoritmo para encontrar fluxo máximo em rede . . . . . 138

9 Linguagens e gramáticas 141


1 Linguagens e gramáticas . . . . . . . . . . . . . . . . . . . . . . . 141
1.1 Definição de uma gramática . . . . . . . . . . . . . . . . . 141
1.2 Derivação . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
2 Classificação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
3 Máquinas finitas . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
4 Autómatos finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
5 Relação entre autómatos finitos e gramáticas . . . . . . . . . . . 149
5.1 Gramática regular determina um diagrama . . . . . . . . 149
5.2 Autómato determina uma gramática . . . . . . . . . . . . 150
5.3 Uma gramática regular determina um autómato indeter-
minado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
5.4 Autómato indeterminado — autómato . . . . . . . . . . . 153
5.5 Construção directa de autómatos . . . . . . . . . . . . . . 154
6 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
6.1 Gramáticas . . . . . . . . . . . . . . . . . . . . . . . . . . 155
6.2 Autómatos . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Capítulo 1

Conjuntos, relações e grafos

Este capitulo serve como uma introdução. Os objectivos desta introdução são
conceitos principais da disciplina. Tanto em álgebra, geometria e análise como
em matemática discreta o conceito de conjunto forma uma base para todos os
passos em criação da teoria. Mas existe uma distinção principal entre conjuntos
que considera Análise Matemática e conjuntos que são objectos de Matemática
Discreta. Quase sempre serão considerados conjuntos finitos. Os conjuntos
infinitos tais como o conjunto de todos os números naturais N = {1, 2, . . .}
também têm estrutura discreta. Deixemos sem atenção a questão sobre definição
rigorosa de um conjunto discreto.
Neste capítulo serão considerados os tópicos principais da teoria de conjuntos
e funções, relações e grafos, conceito informal de algoritmo e sua complexidade.

1 Conjuntos
1.1 Métodos de representação de conjuntos
Lista
O primeiro método para determinar um conjunto é formar uma lista de todos
os elementos
A = {2, 4, 6, 8, 10}, B = {a, b, c}, C = {(1, 2), (5, −1), (30, 0), (0, 0), (−13, 8)}.
O conjunto B contem os 3 objectos, o conjunto C consiste dos 5 objectos
que são pares ordenados de números inteiros.

Lista (algoritmo)

Pode-se usar o símbolo . . .′ (etc.) para conjuntos de grande volume ou para
conjuntos infinitos
N100 = {1, 2, 3, . . . , 100}, D3 = {3, 6, 9, . . .}
Mas este método pressupõe um algoritmo de formação de elementos do conjunto.
Por exemplo, para verificar se o número 36 pertence ao conjunto D3 ou não,
é preciso cumprir várias adições 3 + 3 = 6, 6 + 3 = 9, 9 + 3 = 12, . . . ate
obter ou não o elemento necessário. Este exemplo sugere mais um método para
definir um conjunto.

7
8 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

Propriedade característica
Um conjunto pode ser dado por meio de uma propriedade característica. Con-
sideremos vários exemplos:
1. D = {n : n ∈ N e n é par} = {2, 4, 6, 8, . . .}
2. E = {x : x ∈ R, 1 ≤ x < 3} = [1, 3)
3. F = {n2 : n ∈ N } = {m : m ∈ N, (∃n : m = n2 )}
4. G = {(−1)n : n ∈ N } = {−1, 1}
Em chavetas o primeiro objecto é uma variável ou uma expressão todos os valores
da qual formam o conjunto. A variável (expressão) é seguida pelo símbolo ′ :′ .
A segunda parte contém uma ou várias condições necessárias e suficientes para
verificar se um elemento pertence ao conjunto. Por exemplo, para verificar se o
número 25 pertence ao conjunto F , é preciso encontrar um número natural
n tal que n2 = 25 . A segunda forma da definição do conjunto F é mais
completa e mais clara para usar.

1.2 Conjuntos frequentemente usados


Para os seguintes conjuntos usa-se a notação:
• N = {1, 2, 3, . . .} é o conjunto de todos os números naturais,
• Z é o conjunto de todos os números inteiros,
• Z+ é o conjunto de todos os números inteiros não negativos,
• ∅ é o conjunto vazio.
Seja Σ um conjunto finito não vazio que vamos chamar por alfabeto. Sejam
letras os elementos do Σ . Vamos utilizar a notação Σ∗ para o conjunto de
todas as linhas finitas (sequências) 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 também 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 designação 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 operação P pode ser aplicada duas vezes:

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


1. CONJUNTOS 9

1.4 Operações sobre conjuntos


Usa-se a notação x ∈ A no caso x é um dos elementos do conjunto A e
x ∈/ A no caso contrário. Sejam M e N dois conjuntos. Se cada um dos
elementos x ∈ M é também elemento do conjunto N diz-se que M é um
subconjunto do N e escreve-se M ⊂ N , isto é,1

M ⊂N se e somente se x ∈ M ⇒ x ∈ N.

Definição 1.1. Definam-se as 3 operações básicas sobre conjuntos

• A ∪ B = {x : x ∈ A ∨ x ∈ B} é união,

• A ∩ B = {x : x ∈ A ∧ x ∈ B} é intersecção,

/ B} é diferença dos conjuntos A e B


• A \ B = {x : x ∈ A ∧ x ∈

Podem ser consideradas outras operações, por exemplo A ⊕ B = (A \ B) ∪


(B \ A) é diferença simétrica.
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 . Então 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 são subconjuntos de conjunto U dado
(conjunto universal). É possível demonstrar as fórmulas:

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, A∩A=A

5. (a) A ∪ ∅ = A
1o símbolo ⇒ é sinal de implicação, isto é A ⇒ B temos que ler: de A decorre B
10 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

(b) A ∩ U = U
(c) A ∩ ∅ = ∅
(d) A ∩ U = A

6. (Ac )c = A

7. A ∪ Ac = U, A ∩ Ac = ∅

8. U c = ∅, ∅c = U
9. Leis de Morgan

(a) (A ∪ B)c = Ac ∩ B c ,
(b) (A ∩ B)c = Ac ∪ B c

1.6 Produto directo (cartesiano)


Sejam S e T dois conjuntos arbitrários. Consideremos um par ordenado (s, t)
onde s ∈ S , t ∈ T são elementos arbitrários 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 também S × S = S 2 .
Exemplo 1.2. Sejam S = {1, 2, 3, 4}, T = {a, b, c} . Produto S × T consiste
de 12 pares ordenados:

(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 número de elementos do conjunto S (se S é um
conjunto finito). É claro que

|S × T | = |S| · |T |.

Generalização:

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

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

S1 = S2 = . . . = S n = S

usa-se designação
S × S × . . . × S = Sn.
1. CONJUNTOS 11

1.7 Funções
O que é uma função?
Função ou aplicação f de um conjunto A para um outro (ou o mesmo) con-
junto B é uma regra (uma lei, um algoritmo) que permite a partir de qualquer
valor x ∈ A encontrar um único valor y ∈ B . O conjunto A chama-se
domínio da função f , e B é contradomínio da f . Usa-se notação
f: A→B
e diz-se que f age do A para B . Escreve-se também y = f (x) onde f (x)
designa o valor da função f quando argumento da função toma o valor x ∈ A .
A expressão f (x) chama-se também imagem do x .
Exemplo 1.3. Sejam A = {a, b, c} e B = {1, 2, 3, 4} . Para definir uma função
f : A → B é preciso definir os três valores de função: f (a), f (b), f (c) . Por
exemplo, uma das funções possíveis pode ser dada pela tabela
x a b c
f (x) 2 4 2
Então f (a) = 2 , f (b) = 4 , f (c) = 2 .

Imagem e preimagem
Introduz-se também a imagem de um conjunto. Seja X ⊂ A . Por definição
f (X) = {f (x) : x ∈ X} ≡ {y : y = f (x), x ∈ X}.
A expressão f (X) chama-se a imagem do conjunto X . No exemplo 1.3
f (A) = {2, 4} .
Se f (x) = y o elemento x chama-se preimagem do y . O conjunto de
todos os preimagens do y forma preimagem completo do y . Para preimagem
completo vamos usar notação f −1 (y) . Então
f −1 (y) = {x ∈ A : f (x) = y}.
No exemplo 1.3 f −1 (2) = {a, c}, f −1 (4) = {b}, f −1 (1) = f −1 (3) = ∅ . A
preimagem de um conjunto Y ⊂ B defina-se como união de todos os preimagem
dos elementos y ∈ Y , ou
f −1 (Y ) = {x ∈ A : f (x) ∈ Y }.
No exemplo 1.3 f −1 ({1, 2}) = {a, c} .
Exemplo 1.4. Consideremos uma função f : A → A onde A = {0, 1, 2, 3, 4} ,
definida pela relação2
f (x) = (2x) mod 5.
Encontrar f (A) e f −1 (A) .
Solução. Consideremos a tabela dos valores da função
x 0 1 2 3 4
f (x) 0 2 4 1 3
Da tabela logo f (A) = A e f −1 (A) = A .
2 a operação binária mod determina o resto de divisão do operando esquerdo por direito.

Por exemplo 13 mod 5 = 3, 4 mod 7 = 4 .


12 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

2 Relações
2.1 Conceito de relação
Exemplo. Sejam S um conjunto de todos os estudantes duma universidade e
T conjunto das disciplinas. Consideremos produto directo S × T que 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 relação entre elementos dos conjuntos S e T .


Sejam S e T conjuntos e R ⊂ S × T . Vamos chamar R por uma relação
entre S e T ou sobre S × T . Escreve-se xRy (ou usa-se outro símbolo):
xRy ⇔ (x, y) ∈ R . Mais frequentemente T = S , e R ⊂ S × S .
Exemplo 1.5. Consideremos várias relações:

(a) Relação de igualdade E ⊂ S × S, E = {(x, x) : x ∈ S} . De facto, dados


dois elementos x, y ∈ S pode-se colocada a questão x = y ou não? No
caso sim o par (x, y) ∈ E , no caso contrário (x, y) ∈
/S.

(b) Relação de ordem R ⊂ N × N, R = {(x, y) : x ≤ y}

(c) Relação de divisibilidade.


Vamos usar o símbolo | para a relação 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 ≡ significa existência de um k ∈ N tal
que km = n , por exemplo 2 | 6, 7 | 35 etc. Seja R = {(m, n) ∈ N ×
N : m | n} . Então n é divisível por m se (m, n) ∈ R .

Composição de relações
Sejam R1 ⊂ S × S e R2 ⊂ S × S relações sobre S . O conjunto
def
R1 ◦ R2 = {(x, z) : ∃y : (x, y) ∈ R1 , (y, z) ∈ R2 }

é uma relação que se chama composição das relações R1 e R2 .


Exemplo 1.6. Consideremos o conjunto S = {1, 2, 3, 4, 5} e a relação

R = {(1, 2), (1, 4), (5, 2), (4, 3)}. (1.1)

Encontremos a composição R◦R . Temos por exemplo (1, 4) ∈ R e (4, 3) ∈ R .


Daqui (1, 3) ∈ R ◦ R . Desta maneira não é possível encontrar mais pares
(x, y), (y, z) ∈ R . Então, R ◦ R = {(1, 3)} .
Exemplo 1.7. Seja R ⊂ N × N, R = {(x, y) : x < y} . Verifique se a composição
R ◦ R é o subconjunto

R ◦ R = {(x, y) : x ≤ y − 2}.
2. RELAÇÕES 13

4 5

1 3
2

Figura 1.1: Grafo da relação (1.1)

2.2 Representação geométrica de relação. Conceito de


grafo orientado
Dada uma relação R sobre um conjunto S , isto é, R ⊂ S ×S . Representemos
os elementos do S por pontos de plano. Isto não é difícil realizar se o conjunto
S é finito. A relação 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 relação 1.1 resultado da representação geométrica podemos ver
na figura 1.1.
Na figura 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 vários arcos. A cada
um dos arcos correspondem os dois pontos: origem e extremidade do arco. Esta
estrutura chama-se grafo orientado. Então temos a definição

Definição 1.2. Grafo orientado G é o terno ordenado G = {V, E, γ} onde

• V é um conjunto de vértices, V = V (G)

• E é um conjunto de arcos, E = E(G)

• γ : E → V × V ( γ é uma função com domínio E , os valores da função


γ pertencem ao produto directo V × V )

Se γ(e) = (p, q) diz-se " e vai de p a q ", p é o vértice inicial, q é a


extremidade do arco e ou o vértice terminal. Diz-se também que cada um dos
vértices p e q é incidente ao arco e .
Se γ(e) = γ(f ) = (p, q) arcos e e f chamam-se arcos múltiplos ou para-
lelos. Caso γ(e) = (p, q) e p = q o vértice se chama laço.
Exemplo 1.8. Consideremos o grafo sobre a figura 1.2. O grafo tem 3 laços, os
dois arcos a e b são arcos paralelos. A tabela representa os valores da função
γ
14 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

e γ(e)
a (v1 , v2 )
b (v1 , v2 )
c (v1 , v3 )
d (v1 , v4 )
f (v3 , v1 )
g (v3 , v4 )
h (v4 , v2 )
l (v1 , v1 )
m (v2 , v2 )
n (v2 , v2 )

l a n
m
v1
v2
b

f c h
d

v3 g v4

Figura 1.2: Grafo orientado

2.3 Representação de grafos. Matriz de adjacência


Consideremos um digrafo G e o conjunto V (G) = {v1 , v2 , . . . , vn } dos vér-
tices. A cada par (vi , vj ) corresponde o número aij de arcos que saem do
vértice vi e entram para vj . Obteremos a matriz (aij )i,j=1,n que vamos
chamar matriz de adjacência. No caso aij = 0 o vértice vi não é adjacente
ao vértice vj ). Por exemplo para o grafo na figura 1.2 a matriz de adjacência
tem a forma  
1 2 1 1
0 2 0 0 
A= 1 0 0 1 

0 1 0 0
Matriz de adjacência descreve completamente a estrutura do grafo e permite
reconstruir o grafo (se a informação sobre natureza dos vértices e arcos não é
importante).

2.4 Relação de equivalência


Definição 1.3. Relação R ⊂ S × S chama-se relação de equivalência se satis-
fizer às 3 condições (designemos esta relação por símbolo ∼ ):

(R) m ∼ m ∀m ∈ S
2. RELAÇÕES 15

(S) m ∼ n ⇒ n ∼ m
(T) m ∼ n, n ∼ r ⇒ m ∼ r

Estas três propriedades chamam-se reflexividade, simetria e transitividade


respectivamente
Exemplo 1.9. Consideremos relação Rp ⊂ Z ×Z, (m, n) ∈ Rp se p | (m−n) .
Esta relação chama-se relação de congruência com modulo p . Usa-se a notação

m ≡ n (mod p).

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

2.5 Partição de um conjunto em classes


S
n
Definição 1.4. Se um conjunto S é representado como união S = Sk dos
T k=1
conjuntos disjuntos, isto é, Si Sk = ∅ quando i 6= k , então diz-se que os
subconjuntos S1 , . . . , Sn formam partição do conjunto S (partição em classes
S1 , . . . , Sn ).

Qualquer relação R de equivalência determina a partição 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
Verifique que S(x) = S(y) se (x, y) ∈ R e S(x) S(y) = ∅ caso contrário.
Exemplo 1.10. Consideremos uma relação de equivalência Rp , relação de con-
gruência pelo modulo p . Encontremos a partição correspondente. Seja m ∈ Z
um número. É claro que Sm = {m, m±p, m±2p, m±3p, . . .} . Existem exacta-
mente p classes diferentes que correspondem aos números {0, 1, 2, . . . , p − 1} .
Caso p = 2 teremos as duas classes: números pares e números ímpares.
As vezes uma partição pode ser feita usando a operação preimagem. Sejam
S e T dois conjuntos e f : S → T qualquer função. Se y1 ∈ T e y2 ∈ T são
dois elementos diferentes, os conjuntos f −1 (y1 ) e f −1 (y2 ) não têm elementos
comuns (exercício 10). Por isso, uma partição em classes pode ser constituída
de todos os conjuntos da forma Sy = f −1 (y) , onde y percorre o conjunto T .
Exemplo 1.11. Consideremos a função f : Z → {0, 1, 2}

f (n) = n mod 3.

Os conjuntos S0 = f −1 (0) , S1 = f −1 (1) e S2 = f −1 (2) formam uma parti-


ção do Z em 3 classes

S0 = {. . . , −6, −3, 0, 3, 6, . . .}
S1 = {. . . , −5, −2, 1, 4, 7, . . .}
S2 = {. . . , −4, −1, 2, 5, 8, . . .}
16 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

3 Algoritmos
Conceito de algoritmo é também uma noção básica de Matemática Discreta.
Este conceito não pode ser definido agora com rigor matemático e precisa de
preparação séria. Apesar disso o conceito pode ser descrito em termos habituais.
Existe um conjunto finito de instruções que devem ser realizadas passo a passo.
Claro que devem ser dados objectos de aplicação das instruções, condições de
aplicação, ordem de aplicação.
Um exemplo simples de algoritmo é algoritmo cíclico.

3.1 Algoritmos cíclicos


Consideremos um algoritmo para encontrar a soma de n números

s = x1 + x2 + · · · + xn .

Usando uma notação algorítmica semelhante com a notação da língua Pascal o


algoritmo pode ser representado de maneira seguinte:
s := 0
for j := 1 to n do
s := s + xj
end for
Comentário: introduz-se uma variável 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 variável de controlo j que toma os valores 1, 2, . . . , n
subsequentemente.
O mesmo algoritmo pode ser representado de outra maneira usando a estru-
tura while (enquanto):
s := 0 ; j := 0
while j < n do
j := j + 1
s := s + xj
end while
Comentário: o algoritmo cíclico que usa while funciona de maneira seguinte:

1. verifica-se a condição (neste caso: j < n )

2. Se a condição for falsa o ciclo termina (saída do algoritmo).

3. Se for verdadeira:

(a) executam-se os operadores interiores do ciclo ( j := j + 1 e s := s +


xj )
(b) o controlo volta para verificar a condição (alinha 1)

Exemplo 1.12. Dados n números x1 , x2 , . . . , xn . Sabe-se que pelo menos um


deles é negativo. Achar o índice k de um número negativo.
Uma solução está apresentada na figura 1.1.
Notemos que neste exemplo o número dos passos do algoritmo cíclico de-
pende dos números dados x1 , . . . , xn . Por isso, não é natural resolver este
problema usando a estrutura for.
3. ALGORITMOS 17

Input: pelo menos um dos números x1 , x2 , . . . , xn é negativo


Output: k é o índice de um número xk negativo
j := 1
while xj ≥ 0 do
j := j + 1
end while
k := j

Algoritmo 1.1: Índice de um número negativo

3.2 Ciclos duplos e múltiplos


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

Comentário. O ciclo exterior começa 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 à variável s as somas

a21 + a22 + · · · + a2n , . . . , an1 + an2 + · · · + ann .

O resultado é
n X
X n
s= aij . (1.2)
i=1 j=1

Note que a fórmula (1.2) é só realmente outra notação para representar o algo-
ritmo (1.2).
Exemplo 1.13. Vamos supor que pelo menos um elemento da matriz (aij ) é
número negativo. Achar os índices i1 , j1 de um elemento negativo.
Uma solução está apresentada na figura 1.3.
Neste exemplo o número dos passos do algoritmo cíclico depende da matriz
(aij ) . O mínimo número dos passos é igual a n quando a primeira linha contém
números negativos. O máximo é n2 se os números negativos contém só última
linha.

3.3 Complexidade de algoritmos


Exemplo 1.14. Dado um conjunto X de n elementos coloquemos o problema
de construção de todos os subconjuntos do conjunto X . Sabe-se que existe
18 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

Input: pelo menos um dos números aij é negativo


Output: i1 , j1 são os índices de um elemento ai1 j1 < 0
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
end if
end for
end while
i1 := i

Algoritmo 1.3: Índices de um elemento negativo

n 10 20 30 40 50
t 1 seg 18 min 12 dias 35 anos 35700 anos

Figura 1.3: Tempo do algoritmo de formação dos subconjuntos

2n tais subconjuntos. Seja t0 o tempo médio para construir um subconjunto.


Todo o tempo do trabalho de um algoritmo depende do número n de elementos
e constituirá t = f (n) = 2n · t0 . A função f (n) tem crescimento exponencial,
e portanto é possível 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 figura
1.3.
Infelizmente não existe nenhum algoritmo que permita resolver o problema
mais rápido. Temos que formar todos os subconjuntos e cada um dos subcon-
juntos exige o tempo t0 . Mas em diferentes problemas com frequência podem
existir diferentes algoritmos tempo do trabalho dos quais distingue considera-
velmente.
Assim surge o conceito de complexidade temporal de algoritmo. Suponhamos
que num algoritmo existe uma operação principal, e o tempo de trabalho se
pode apreciar pelo produto Qt0 onde Q é o número de vezes de comprimento
da operação e t0 é o tempo de comprimento. Pode-se também considerar
conceito de volume ou dimensão de dados. No exemplo precedente o número n
de elementos serve como volume de dados.
Definição 1.5. O número de operações como função Q = f (n) do volume de
dados n chama-se complexidade de algoritmo.
Notemos que o valor Q pode depender não só de n mas de dados próprios.
Portanto consideram-se os conceitos de complexidade média, de complexidade
máxima (o pior caso) e complexidade mínima (o melhor caso).

No exemplo 1.14 a complexidade é igual a 2n .


Exemplo 1.15. Para o algoritmo 1.1 a complexidade média é igual a n/2 , a
complexidade máxima é n , a complexidade mínima é 1 .
3. ALGORITMOS 19

Exemplo 1.16. Calcular o produto de uma matriz quadrada (aij )n1 e de uma
matriz coluna composta de elementos (bj )n1 . O resultado é a matriz coluna
Pn
composta dos elementos ci = aij bj , i = 1, 2, . . . n .
j=1
for i := 1 to n do
s := 0
for j := 1 to n do
s := s + aij bj
end for
ci := s
end for
A operação de multiplicação é operação principal. O parâmetro n esco-
lhemos como o parâmetro que determina o volume de dados. É fácil ver que a
complexidade é igual à n2 .

Exemplo 1.17. Dados n pontos em espaço M1 , M2 , . . . , Mn . Encontrar a


distância máxima 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 resolução 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 média, máxima e mínima coincidem e são iguais a
n(n − 1)/2 .
Nos últimos dois exemplos o crescimento do tempo mais considerável que no
exemplo 1.15 porque

n/2 n/2
lim = 0, lim = 0.
n→∞ n2 n→∞ n(n − 1)/2

Usa-se notação f (n) = O(g(n)) se existe C > 0 e

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

para todos bastante grandes n . No exemplo 1.15 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 função f (n) tem crescimento exponencial.

Exemplo 1.18. Dado um algoritmo triplo. Determinar a complexidade do algo-


ritmo e tipo de crescimento da complexidade.
20 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

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
Operação principal é atribuição x := x + 1 . Calculemos o número x ao
terminar do algoritmo. O ciclo interior se cumpre n − j vezes. Para j -ciclo
vamos ter
(1 + (n − i − 1))(n − i − 1) (n − i)(n − i − 1)
(n−i−1)+(n−i−2)+. . .+1 = = .
2 2
Então
n
X (n − i)(n − i − 1)
f (n) = .
i=1
2

Não é necessário calcular esta soma para determinar tipo do algoritmo. É pos-
sível fazer cálculo aproximado. O número de vezes médio de cumprimento do
j -ciclo é igual a n/2 , o número de vezes médio para k -ciclo é uma função da
forma c · n, 0 < c < 1 . Portanto f (n) ≈ n · n/2 · cn = c/2 · n3 = O(n3 ) .
4. EXERCÍCIOS 21

4 Exercícios
4.1 Lógica
1. Demonstrar: se um número n natural é múltiplo de 4 então o n é par.

2. Como pode ser demonstrada a implicação P → (Q → R) ?

4.2 Conjuntos e funções


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. A∪B , A∩C
ii. (A ∪ B) ∩ C c
iii. A\B , C \D
iv. B⊕D
(b) Achar as representações dos conjuntos A, B, C, D usando proprie-
dades características

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 generalização 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} é definida a função 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 equação
f (x) = x .

8. Sejam A = {0, 1, 2, 3, 4, 5, 6, 7} e f : A → A a função definida pela


fórmula f (x) = x2 mod 8 . Achar um elemento x ∈ f (A) tal que
x∈/ f −1 ({x}) .

9. Demonstrar a inclusão f (X1 ) ⊂ f (X2 ) se X1 ⊂ X2 . A proposição


inversa é verdadeira?
22 CAPÍTULO 1. CONJUNTOS, RELAÇÕES E GRAFOS

10. Demonstrar as seguintes propriedades da operação 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)

4.3 Relações
1. As relações seguintes são definidas sobre o conjunto N dos números na-
turais. Formar a lista de todos os pares da relação:
(a) R1 = {(m, n) : m + n = 5}
(b) R2 = {(m, n) : max{m, n} = 2}
(c) R3 = {(m, n) : min{m, n} = 2} (neste caso obter só 5 pares)
As relações consideradas são simétricas?
2. Achar a composição R ◦ R para a relação R = {(1, 2), (1, 4), (5, 2), (4, 3)}
e para cada uma das relações no exercício 1.
3. Uma relação R ⊂ S × S é transitiva. Demonstrar que R ◦ R ⊂ R .
4. Construir um grafo da relação dada sobre o conjunto S
(a) S = {1, 2, 3, 4}, R = {(1, 2), (1, 1), (4, 1), (2, 3), (2, 2)}
(b) S = {1, . . . , 10}, R = {(m, n) : m|n}
5. Verificar se as relações seguintes são relações de equivalência ou não. No
caso ’não’ indicar quais das condições (R),(S),(T) não se cumprem:
(a) sobre o conjunto das rectas no espaço, relações da paralelidade, per-
pendicularidade
(b) sobre o conjunto dos vectores no espaço (excepto o vector nulo) rela-
ções de colinearidade, perpendicularidade, relação: vectores a e b
têm a mesma direcção
(c) R = {(m, n) ∈ N × N : |m − n| ≤ 1}
(d) S = N × N, R ⊂ S × S , ponhamos por definição (m, n) ∼ (k, l)
se m + l = n + k
6. Demonstrar que as relações seguintes são relações de equivalência e en-
contrar partição do conjunto S :
(a) S = {1, 2, 3, . . . , 10}, R = {(m, n) : m ≡ n (mod 4)}
(b) S = N, R = {(m, n) : ∃k ∈ Z tal que m = 2k n}
(c) S = Z, R = {(m, n) : m2 = n2 }
(d) S = {2, 3, 4, . . .} ,

R = {(m, n) : m e n têm o mesmo mínimo divisor primo}

7. Para as seguintes relações achar a mínima relação de equivalência que


contém dada:
4. EXERCÍCIOS 23

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


(b) S = {1, 2, 3, 4}, R = {(1, 2), (1, 3)}
(c) S = N, R = {(m, n) : ∃k ∈ Z tal que m = 2k n}

8. Para as seguintes relações achar a mínima relação transitiva que contém


dada:

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

9. Demonstre que no exemplo 1.18 f (n) ≈ n3 /6

10. Demonstre que f (n) = n(n − 1)(n − 2)/6


Nos exercícios 11 — 14 achar a complexidade dos algoritmos e ordem do
crescimento.
11. x := 0
for i := 1 to n do
for j := 1 to i do
x := x + 1
end for
end for
12. x := 0
for i := 1 to n do
for j := 1 to (i + 1) div 2 do
x := x + 1
end for
end for
13. x := 0; j := n
while j > 0 do
j := j div 2
x := x + 1
end while
14. x := 0; j := n
while j > 0 do
for i := 1 to j do
x := x + 1
end for
j := j div 2
end while
Capítulo 2

Contagem. Análise
combinatória

1 Princípios básicos
Colocação do problema. Determinar o número de elementos de um conjunto
dado.

1.1 Regra de união


União de dois conjuntos
Sejam S e T conjuntos finitos.

• Se S e T são disjuntos i.e. S ∩ T = ∅ então

|S ∪ T | = |S| + |T |

• Caso geral
|S ∪ T | = |S| + |T | − |S ∩ T |.

Exemplo 2.1. Seja S = {1, 2, 3, . . . , 1000} . Quantos números de S são divisí-


veis por 3 ou 5?
Resolução. 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 número procurado é igual a 333 + 200 −


66 = 467 .

24
2. PERMUTAÇÕES, SUBCONJUNTOS E DISTRIBUIÇÕES 25

União de três conjuntos


Para três conjuntos temos uma situação mais complicada

|A1 ∪ A2 ∪ A3 | = |A1 | + |A2 | + |A3 |


− |A1 ∩ A2 | − |A1 ∩ A3 | − |A2 ∩ A3 | + |A1 ∩ A2 ∩ A3 |. (2.1)

Esta relação pode ser interpretada geometricamente na base de diagrama de


Venn, mas pode-se demonstrada analiticamente.

Caso geral. União de n conjuntos

n
[ X n X X

Ai = |Ai | − |Ai ∩ Aj | + |Ai ∩ Aj ∩ Ak | − · · ·

i=1 i=1 i,j i,j,k

+ (−1)n+1 |A1 ∩ A2 ∩ . . . ∩ An |. (2.2)

1.2 Princípio do produto


• Se S1 , S2 , . . . , Sk são conjuntos finitos

|S1 × S2 × . . . × Sk | = |S1 | · . . . · |Sk |

• Generalização. Seja T ⊂ S1 × . . . × Sk . Supõe-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 têm-se n2 casos para escolha de s2 ∈ S2 . Dados s1 e
s2 é possível escolher s3 ∈ S3 de n3 variantes, etc. Dados s1 , . . . , sj−1
têm-se nj variantes para escolher sj . . .
Então
|T | = n1 n2 . . . nk .

Exemplo 2.2. Achar a quantidade de todos os números decimais com 3 alga-


rismos 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 ter-
ceiro. Então teremos n1 n2 n3 = 9 · 9 · 8 = 648 números.

2 Permutações, subconjuntos e distribuições


2.1 r -permutações (arranjos)
Dado um conjunto finito A = {a1 , . . . , an } de n elementos, encontremos uma
permutação de r ≤ n elementos do conjunto A :

ai(1) , ai(2) , . . . , ai(r) ∈ A


26 CAPÍTULO 2. CONTAGEM. ANÁLISE COMBINATÓRIA

(índices i(1), i(2), . . . , i(r) são índices diferentes do conjunto {1, 2, . . . , n} ).


Esta sucessão chama-se r -permutação de elementos do conjunto A . Calcule-
mos o total de todas tais permutações.
Para escolher o primeiro termo ai(1) da sucessão temos n variantes. Dado
o termo ai(1) é possível 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 princípio do produto temos
n!
P (n, r) = n(n − 1) · · · (n − r + 1) = (2.3)
(n − r)!

de r -permutações, isto é, das permutações de r elementos compostas dos n


elementos dados.
No caso particular, para permutações dos todos n elementos temos

P (n, n) = n! (2.4)

Exemplo 2.3. Calcular a quantidade de números decimais de 3 algarismos


diferentes excepto o zero.
Pela fórmula (2.4) temos x = 9 · 8 · 7 = 504 .

2.2 Número de funções


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

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

O total de funções f : S → T determina-se por:


S
T = |T ||S| = nm

onde T S designa o conjunto de todas funções f : S → T .


Exemplo 2.4. Sejam S = {a, b, c}, T = {0, 1} . O total de funções f : S → T é
igual 23 = 8 . Para melhor imaginar este conjunto observemos que cada função
é definida sobre o conjunto S finito. Portanto é possível construir a tabela
de todos os valores da função. Por exemplo se f (a) = 1, f (b) = 0, f (c) = 1
teremos a linha 101 . Conclusão: o número de funções coincide com o número
de linhas de comprimento 3 algarismos de 0 e 1 :

000, 001, 010, 011, 100, 101, 110, 111.

2.3 Número de subconjuntos. Coeficientes binomiais


Dado um conjunto de n elementos. Vamos usar notação Cnr para o número
de todos os subconjuntos contendo r elementos. Vamos chamar também Cnr
por o número de combinações de n elementos por r elementos.
O nosso objectivo é demonstrar que este número é igual a
n!
Cnr = . (2.5)
r!(n − r)!
2. PERMUTAÇÕES, SUBCONJUNTOS E DISTRIBUIÇÕES 27

Para isso consideremos de novo o problema de r -permutações. 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 -permutação.
Em caso geral tem-se n2 = r! variantes para obter uma permutação.
Segundo o princípio do produto:

P (n, r) = n1 n2 = Cnr · r!

(no nosso exemplo n1 n2 = 10 · 6 = 60 permutações). Daqui

P (n, r) n!
Cnr = = .
r! (n − r)! · r!
 
n
Nota. Usa-se também a designação = Cnr , por exemplo
r
 
5 5! 5·4
= C53 = = = 10.
3 2!3! 1·2

Cnr chama-se coeficiente binomial.


Exemplo 2.5. Consideremos um grafo não orientado completo de n vértices,
isto é, grafo sem laços e arcos paralelos em que cada par de vértices é par dos
vértices adjacentes. Calculemos o número dos arcos.
O número de arcos é igual ao número dos pares não 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 princípio 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.
Então de acordo com o princípio do produto vamos ter

n1 n2 = C84 C42 = 420

variantes.

2.4 Teorema binomial, propriedades de coeficientes


Para os números reais a e b e para n ∈ N temos
n
X
(a + b)n = Cnr an−r 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 coeficientes binomiais
28 CAPÍTULO 2. CONTAGEM. ANÁLISE COMBINATÓRIA

2n = Cn0 + Cn1 + · · · + Cnn . (2.6)


Uma propriedade importante (propriedade característica) dos coeficientes é
r−1
Cnr = Cn−1
r
+ Cn−1 (n > 1, n > r) (2.7)

que junto com as condições


Cn0 = Cnn = 1
determina os coeficientes de maneira única.
Exemplo: C53 = 10, C43 = 4, C42 = 6, 10 = 4 + 6 .

2.5 Distribuição de n objectos em k caixas diferentes


Existe uma regra simples mas importante de cálculo de elementos de conjunto.

Se existe uma correspondência biunívoca entre os dois conjuntos


finitos A e B então estes conjuntos têm o mesmo número de ele-
mentos: |A| = |B| .

Os problemas a seguir são equivalentes neste sentido. A reposta para todos estes
problemas é
k−1
D(n, k) = Cn+k−1 (2.8)
Para demonstrar esta relação, consideremos os quatro problemas equivalentes.

Problema 1 : O número de distribuições


Temos n objectos idênticos e k caixas diferentes: C1 , C2 , . . . , Ck . É preciso
calcular o número de distribuições 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 questão (pôr n objectos idênticos
em k caixas diferentes) pode ser encontrada da formula (2.8).
Exemplo 2.7. O número de variantes de distribuição de 5 objectos idênticos em
3 caixas (de cores diferentes) V = C72 = 7 · 6/2 = 21 .
Existem outros problemas isomorfos ao problema colocado, i.e., é possível
construir uma correspondência biunívoca entre dois conjuntos: o conjunto de
todas as distribuições e o conjunto num outro problema.

Problema 2 : O numero de soluções da equação x1 + x2 + . . . + xk = n


Consideremos a equação

x1 + x2 + . . . + xk = n (2.9)

em números inteiros não negativos. A cada uma solução desta equação corres-
ponde uma distribuição em n caixas: a primeira caixa contém x1 objectos, a
k−1
segunda x2 , etc. A reposta à questão é a mesma, D(n, k) = Cn+k−1 .
2. PERMUTAÇÕES, SUBCONJUNTOS E DISTRIBUIÇÕES 29

Problema 3 : Sucessões binárias


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 sucessão
binária pode ser considerada como código de uma distribuição 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 soluções
x1 = 2, x2 = 3, x3 = 0 e x1 = 1, x2 = 3, x3 = 1
da equação x1 + x2 + x3 = 5 .
Então, a conclusão é que o número destas sucessões é igual a D(n, k) .

Problema 4 : O número de subconjuntos


A mesma sucessão binária pode ser usada para representar um subconjunto do
conjunto {1, 2, . . . , n, n + 1, . . . , n + k − 1} contendo k − 1 elementos exac-
tamente. Por exemplo, a sucessão 0010001 indica o subconjunto {3, 7} do
conjunto {1, 2, 3, 4, 5, 6, 7} .
Conclusão. Todos os 4 conjuntos considerados têm o mesmo número de
k−1
elementos D(n, k) , mas o último tem Cn+k−1 elementos. Daqui segue (2.8).

Então, o vínculo entre os problemas considerados permite facilmente encon-


trar uma solução na base da solução do outro. Consideremos mais um problema
que pode ser resolvido desta maneira.
Exemplo 2.8. Achar o numero de funções f : {1, 2, . . . , n} → {1, 2, . . . , m} que
são não decrescentes, isto é, x1 < x2 implica f (x1 ) ≤ f (x2 ) .
Solução do problema podemos encontrar usando a redução à equação (2.9).
Designemos
d1 = f (1), d2 = f (2) − f (1), d3 = f (3) − f (2), . . . , dn = f (n) − f (n − 1).
Os números d1 , . . . , dn são não negativos, d1 ≥ 1 , e
d1 + d2 + · · · + dn = f (n) ≤ m.
Claro que qualquer combinação de números que satisfaçam as últimas condições
determina uma das funções f : {1, 2, . . . , m} → {1, 2, . . . , n} . Então podemos
considerar o problema de número de soluções da inequação
d1 + d2 + · · · + dn ≤ m, d1 ≥ 1, di ≥ 0, i = 2, . . . , n.
Se introduzirmos mais uma variável não negativa dn+1 vamos ter equação
d1 + d2 + · · · + dn + dn+1 = m, d1 ≥ 1, di ≥ 0, i = 2, . . . , n + 1.
Substituindo d1 = 1 + t obteremos a equação t + d2 + · · · + dn + dn+1 = m − 1
que tem
n
Cm−1+n
3
soluções. Este número é a resposta. Por exemplo, existem C2−1+3 = 4 funções
não decrescentes f : {1, 2, 3} → {1, 2} .
30 CAPÍTULO 2. CONTAGEM. ANÁLISE COMBINATÓRIA

3 Permutações com repetições. Partições


3.1 Permutações com repetições
O número de permutações de n objectos diferentes é igual à n! . Se entre
n objectos nem todos são diferentes vamos ter outro resultado. Consideremos
por exemplo permutações das letras de uma palavra. Se sob palavra subenten-
der combinação qualquer de letras, vamos ter uma permutação com repetições.
Quantas palavras diferentes é possível formar das letras da palavra passarada?
O total de permutações dos 9 elementos é 9! , mas as letras s e a ocorrem duas
e quatro vezes respectivamente. Por isso, não é possível distinguir pas1 s2 arada
e pas2 s1 arada se substituir s1 e s2 por s .
Encontremos o número total de diferentes palavras (permutações) a partir
da palavra passarada. O princípio do produto pode ser aplicado de maneira
seguinte. Seja x o total dessas palavras. Introdução de índices para letras
com repetição, por exemplo pa1 s1 s2 a2 ra3 da4 faz uma permutação de objec-
tos diferentes. Construção de qualquer tal permutação 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 permutação das letras s1 e s2 em
lugar das ss e uma permutação a1 a2 a3 a4 em lugar de aaaa . Isto pode ser
feito em 2!4! = 48 maneiras. Segundo o princípio de produto o resultado é o
produto x · 48 . Mas por outro lado o mesmo número é 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 repetições.
O total de permutações com repetições é igual a

n!
n1 !n2 ! · · · nk !

Por exemplo das letras aaabbccccd é possível formar


10!
= 5 · 7 · 4 · 9 · 10 = 12600
3!2!4!1!
diferentes palavras. Uma das permutações é bcaaacdccb .

3.2 Partições de um conjunto


Existe um vínculo entre o problema considerado e o problema seguinte. Dado
um conjunto A de n elementos. Achar o total de partições do A em união
ordenada de k conjuntos

A = A1 ∪ A2 ∪ · · · ∪ Ak

tal que |A1 | = n1 , |A2 | = n2 , . . . |Ak | = nk onde n1 , . . . nk são números


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 partições é {3, 4, 5} ∪ {1, 10} ∪ {2, 6, 8, 9} ∪ {7} .
4. EXERCÍCIOS 31

Para resolver este problema consideremos um vínculo com a questão sobre


o número de permutações com repetições. Ao problema de permutações com
repetições da palavra aaabbccccd corresponde o problema de partições com
n = 10 , n1 = 3 , n1 = 2 , n1 = 4 , n1 = 1 . De facto para qualquer palavra
(permutação) 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 partições do conjunto

A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

Então a correspondência biunívoca entre permutações e partições permite


afirmar que o número de partições é igual a
n!
. (2.10)
n1 !n2 ! · · · nk !
Nota 1. Neste problema é importante a ordem dos conjuntos. Se todos os nú-
meros n1 , . . . , nk são diferentes a ordem determina-se a partir destes números.
Mas este momento é preciso ter em vista no caso de coincidência de dois nú-
meros. Por exemplo seja A = {1, 2, 3, 4, 5, 6} e n1 = n2 = 3 . Neste caso
as partições A = {1, 2, 3} ∪ {4, 5, 6} e A = {4, 5, 6} ∪ {1, 2, 3} são partições
diferentes.
Se não é preciso distinguir tais partições tem de ser usada outra formula, a
formula (2.10) neste caso não serve.

4 Exercícios
1. Entre 150 homens 45 sabem nadar, 40 jogam futebol, 50 jogam xa-
drez. Também, 32 homens jogam xadrez mas não jogam futebol, 27
jogam xadrez e nadam, e 10 homens sabem fazer tudo.
(a) Quantos homens jogam xadrez, mas não nadam e não jogam futebol?
(b) Se 21 homens jogam futebol e nadam, quantos homens não sabem
fazer nada de três actividades?

2. Achar o número de permutações de um conjunto de 10 elementos.

3. Encontrar C83 , C80 , C85 .

4. Sejam S = {a, b, c, d} e T = {1, 2, 3, 4, 5, 6, 7} .

(a) Quantas funções f : T → S têm valores diferentes ( f (x1 ) 6= f (x2 )


se x1 6= x2 )?
(b) Quantas existem funções f : S → T com diferentes valores?
(c) Quantas existem funções f : T → S ?

5. (a) Achar o total de números com 3 dígitos


(b) Quantos números têm 3 dígitos diferentes?
(c) Quantos números de 3 dígitos diferentes não são múltiplos de 5 ?
32 CAPÍTULO 2. CONTAGEM. ANÁLISE COMBINATÓRIA

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 números pares e 1
número ímpar tem A .

7. Em quantas maneiras é possível escolher do conjunto A = {42, 43, . . . , 52}


sete elementos que contêm 3 números pares e 4 números ímpares.

8. Quantos subconjuntos do conjunto A = {20, . . . , 30} têm exactamente 3


números pares e 2 números ímpares?

9. Uma classe consiste de 12 homens e 18 mulheres. Quantos comités


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 me-
nores de ordem k onde k ≤ m, k ≤ n é possível formar dos elementos
da A ?

11. De 9 pessoas é preciso formar um comité de 4 pessoas. Em quantas


maneiras é possível fazer isso, se duas pessoas, digamos João e Ana, não
podem servir no mesmo comité.

12. Seja S o conjunto de todas as sucessões de 0 , 1 e 2 de comprimento


10 (por exemplo 0220110120 ∈ S ).

(a) Achar |S| .


(b) Quantas sucessões do S contêm cinco 0 e cinco 1 ?
(c) Quantas sucessões do S contêm três 0 e sete 1 ?
(d) Quantas sucessões do S contêm três 0 exactamente (nem mais nem
menos)?
(e) Quantas sucessões do S contêm três 0 , quatro 1 e três 2 ?
(f) Quantas sucessões do S contêm 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. Achar o número de todas as permutações das letras a, b, c, d, e, f, g, h sa-


tisfazendo à condição: os pares a e b , c e d , e e f , g e h formam
pares adjacentes. Por exemplo, f ecdbahg .

15. Seja P o número de todas as permutações das letras a, b, c, d, e, f

(a) Achar |P |
4. EXERCÍCIOS 33

(b) Quantas permutações satisfazem á condição: a e b são adjacentes,


e b e c são adjacentes.
(c) Encontrar o número de permutações obedecendo à condição: a e b
não são adjacentes?
(d) Encontrar o número de permutações das letras a, b, c, d, e, f se a e
b não são adjacentes e letras b e c também?
(e) Encontrar o número de permutações das letras a, b, c, d, e, f obede-
cendo à condição: as letras a e b são adjacentes ou as letras a
e c são adjacentes. Por exemplo, abcef d e bacdef satisfazem à
condição, mas cdbeaf não satisfaz.
16. Quantas palavras é possível formar das 3 letras a , 4 letras b e 3
letras c ?
17. (a) Achar o número de todas as das soluções inteiras não negativas da
equação x1 + x2 + x3 = 11 .
(b) Quantas números decimais de 3 algarismos têm a soma dos algaris-
mos 11 ?
18. Encontrar o número de todas as soluções inteiras não negativas da equação
x1 + x2 + x3 + x4 = 10 satisfazendo à condição x1 ≤ 3 .
19. Em quantas maneiras se pode distribuir 10 objectos iguais em 4 caixas
diferentes sabendo que cada caixa cabe 7 objectos?
20. Achar o número de todas as soluções inteiras da equação

x1 + x2 + x3 + x4 + x5 = 8,

se xi ≥ 0, i = 1, . . . , 5 e x1 ≤ 7 .
21. Em quantas maneiras se pode distribuir 10 objectos iguais em 4 caixas
diferentes sabendo que cada caixa cabe 4 objectos?

22. Têm-se 20 hastes idênticas que ocupam uma linha de vinte lugares dife-
rentes:

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

e seis há de ser escolhidas.


(a) Quantas variantes têm-se para isso?
(b) Quantas variantes têm-se se nenhum par de hastes escolhidas não
pode ser consecutivo?
(c) Quantas variantes têm-se se entre cada um par de hastes escolhidas
deve ser pelo menos dois hastes?
23. Encontre o número de variantes para distribuir 10 bebidas de laranja, 1
bebida de limão e 1 bebida de lime entre 4 estudantes de modo que cada
um dos estudantes recebe pelo menos 1 bebida. As bebidas de limão e
lime são para diferentes estudantes.
34 CAPÍTULO 2. CONTAGEM. ANÁLISE COMBINATÓRIA

24. É preciso distribuir 100 estudantes entre três salas com capacidades de
30, 30, 40 . Em quantas maneiras é possível fazer isso? Assumir que es-
tudantes preferem alguns salas, isto é, devemos distinguir as salas com
mesma capacidade.

25. 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 find 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 coffee shop on her route, and the coffee shop
is located 3 blocks east and 4 block north, how many routes to work
are possible?
Capítulo 3

Indução e recursividade.
Algoritmos cíclicos

1 Indução matemática
1.1 Introdução. Exemplo
Indução matemática é um dos métodos de demonstração de teoremas e outras
proposições matemáticas. Notemos que demonstração é última etapa na re-
solução de um problema. Também, a indução pode servir para descobrir um
resultado, mas isto não é indução matemática, é raciocínio indutivo informal.
A ideia do método pode ser interpretada de maneira seguinte. Seja A um
subconjunto do conjunto N de todos os números naturais. Imaginemos que os
números do conjunto A são marcados, digamos têm cor vermelho. Mas todos
os outros têm cor branco. Temos informação certa sobre o conjunto A . Sabe-
se que o número 1 tem cor vermelho, isto é, 1 ∈ A . Mais, se um número n
tem cor vermelho, o número n + 1 é também de cor vermelho. O que é que
podemos dizer relativamente ao conjunto A ? Claro que 2 tem cor vermelho,
porque 1 é do A e 1 + 1 = 2 . Mas o que podemos dizer sobre o 3 ?
Intuitivamente claro que A = N . O exemplo abaixo é baseado sobre a
mesma ideia. Mas em vês de dizer que um número n tem cor vermelho, no
exemplo abaixo tem-se uma proposição que que depende do parâmetro n .

Exemplo 3.1. Notemos que as seguintes igualdades


2·3 3·4 4·5
1+2= , 1+2+3= , 1+2+3+4= .
2 2 2
são válidas. Este fato pode sugerir a suposição indutiva

n(n + 1)
1 + 2 + 3 + ... + n = , n = 1, 2, 3, . . . (3.1)
2
Ainda não sabemos se para todos os valores de n a relação (3.1) é verdadeira
ou não. Não é possível verificar a relação (3.1) para todos os valores de n ∈ N .
Felizmente existe um método que permite demonstrar a relação da mesma
maneira como foi feita em cima a conclusão que todos os números naturais têm

35
36 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

cor vermelho. O método chama-se Método (ou princípio) da indução matemá-


tica. Consideremos o raciocínio a seguir.
Verifiquemos que para n = 1 esta proposição é válida. De facto n = 1
1·2
torna (3.1) em igualdade 1 = . No segundo passo (passo da indução)
2
suponhamos que para n = k a proposição é válida, isto é,
k(k + 1)
1 + 2 + ... + k = .
2
Baseando nesta suposição demonstremos que para n = k + 1 a suposição será
válida também, isto é,
(k + 1)(k + 2)
1 + . . . + k + (k + 1) = .
2
Temos

k(k + 1)
1 + 2 + . . . + k +(k + 1) = +k+1
| {z } 2
suposição
k(k + 1) + 2(k + 1) (k + 1)(k + 2)
= = .
2 2
Este resultado podemos interpretar de maneira seguinte
   
k(k + 1) (k + 1)(k + 2)
1 + ... + k = → 1 + . . . + k + (k + 1) = .
2 2
(3.2)
Vamos agora raciocinar. Da validade da relação (3.1) para n = 1 teremos
validade para n = 2 , mas isto implica validade para n = 3 , o último implica
para n = 4 , etc. Intuitivamente nós podemos ver que a relação (3.1) deve ser
válida para todos n = 1, 2, . . . .
Para distinguir a estrutura do raciocínio, introduzimos a designação
 
n(n + 1)
P (n) = 1 + 2 + 3 + . . . + n = (3.3)
2
que depende do n (ou predicado). Estrutura do raciocínio consiste dos dois
elementos:
1. P (1) é verdadeiro
2. a implicação P (k) → P (k + 1) é verdadeira

1.2 Princípio da indução matemática


Colocação do problema: dada uma proposição que depende de parâmetro n
natural (ou um predicado P (n) ). Sob certas condições é preciso demonstrar
que P (n) é verdadeiro qualquer que seja n natural, i.e.

∀(n ∈ N ) P (n).

A demonstração que utiliza o princípio da indução matemática consiste em


dois passos, base (B) e passo indutivo (I):
1. INDUÇÃO MATEMÁTICA 37

(B) Demonstrar que a proposição dada é válida para n = 1 ;


(I) A partir da suposição que a proposição é válida para n = k mostrar que
a suposição é válida e para n = k + 1 (qualquer que seja k ∈ {1, 2, . . .} ).
Usando a designação P (n) para a proposição mencionada o considerado pode-
mos resumir por meio do teorema:
Teorema 3.1 (Princípio de indução matemática). Suponhamos que
(B) P (1) é verdadeira
(I) P (k) → P (k + 1) qualquer que seja k ∈ {1, 2, . . .} .
Então a proposição P (n) é verdadeira qualquer que seja n ∈ N .
O teorema 3.1 pode ser demonstrado na base do princípio de escolha (veja
o axioma 1 na pagina 39).
No exemplo 1.1 a proposição é
 
n(n + 1)
P (n) = 1 + 2 + 3 + . . . + n = .
2
A demonstração está feita conforme o teorema 3.1.
O segundo exemplo é muito simples mas pode dar melhor compreensão do
método.
Exemplo 3.2. Dada a sucessão 2, 5, 8, . . . Achar a expressão (formula) para o
termo geral xn desta sucessão. Aqui x1 = 2, x2 = 5, . . .
Existe suposição que xn = 3n − 1 . Consideremos a proposição
P (n) ≡ {xn = 3n − 1}.
Base. P (1) = {x1 = 3 · 1 − 1} é verdadeira porque 2 = 3 · 1 − 1 .
Indução. É necessário demonstrar a implicação
xk = 3k − 1 → xk+1 = 3(k + 1) − 1.
Que informação podemos usar na demonstração? É o método de construção:
xn = xn−1 + 3 .
xk+1 = xk + 3 = (3k − 1) + 3 = 3k + 2 = 3(k + 1) − 1.
Nos exemplos precedentes as proposições para demonstrar foram dadas.
Consideremos um exemplo, onde usa-se indução informal para predizer uma
proposição.
Exemplo 3.3. Encontrar a soma
sn = 1 + 3 + 5 + . . . + (2n − 1).
Notemos que n -esimo lugar ocupa o número 2n − 1 (que é possível de-
monstrar por meio da mesma indução). Consideremos os cálculos:

n=1 1
n=2 1+3=4
n=3 1+3+5=9
n=4 1 + 3 + 5 + 7 = 16
... ...
38 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

Aparece a suposição (indução informal) que a soma sn é igual a n2 . Agora


def
vem etapa da demonstração. Designemos P (n) = {1 + 3 + 5 + . . . + (2n −
1) = n2 } .
(B) P (1) = {1 = 12 } é verdade.
(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 números naturais pode-se considerar


um subconjunto da forma Nm = {m, m + 1, m + 2, . . .} . Neste caso aplicação
da indução terá a forma

(B) Demonstrar P (m) ;


(I) Demonstrar a implicação P (k) → P (k + 1) para todos os valores de
k ∈ {m, m + 1, . . .} .
Teorema 3.2 (Princípio de indução, generalização). Suponhamos que
(B) P (m) é verdadeira
(I) P (k) → P (k + 1) qualquer que seja k ∈ {m, m + 1, . . .} .
Então a proposição P (n) é verdadeira qualquer que seja n ∈ {m, m + 1, . . .} .

1.3 O princípio fraco de indução matemática


As vezes não é possível usar o princípio indicado. Mas pode ajudar a seguinte
asserção.
Teorema 3.3. Suponhamos que
(B) P (1) é verdade;
(I) Da validade das proposições P (1), . . . , P (k) segue P (k +1) qualquer que
seja k ∈ {1, 2, . . .} .
Então P (n) é verdadeira para todos os números n naturais.
Exemplo 3.4. Demonstrar que qualquer número natural n ≥ 2 é possível de-
senvolver em produto de números primos.
Solução. Seja P (n) uma proposição: o número n é possível desenvolver
em produto de primos.
(B) P (2) é verdade evidentemente. O produto contém um único factor 2
(I) Consideremos P (k + 1) . Se o número k + 1 é primo claro que P (k + 1)
é valida. No caso contrario k + 1 = i · j onde i, j < k + 1 . Segundo a
suposição da indução, i e j são produtos de primos, i.e. i = a1 · · · · · am
e j = b1 · · · · · bk podemos. Daqui
k + 1 = a1 · · · · · am b1 · · · · · bk
é produto de primos.
2. DEFINIÇÕES RECURSIVAS 39

Existe uma generalização do princípio fraco:


Teorema 3.4. Se

(B) P (1), P (2), . . . , P (m) são verdadeiros;

(I) Da validade das proposições P (1), . . . , P (k) segue P (k +1) qualquer que
seja k ∈ {m, m + 1, . . .} .

Então P (n) é verdade para qualquer número n natural.

1.4 Princípio de escolha de mínimo elemento


São consideradas diferentes formas de princípios de indução matemática. Como
podemos ver abaixo existem muitas formas de indução. Mas todas as formas po-
dem ser organizadas e justificadas na base de um axioma que reflecte a natureza
do conjunto dos números naturais.

Axioma 1 (Princípio de escolha). Qualquer subconjunto não vazio do conjunto


N dos números naturais tem o mínimo elemento.

Na base do princípio de escolha, axioma 1, pode ser demonstrado o princípio


de indução matemática 3.1 e outros princípios equivalentes.

Demonstração do teorema 3.1. Seja P (n) um predicado definido sobre N e


obedecendo às condições (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 contrário que E não é vazio.
Conforme ao axioma 1 o conjunto E tem o mínimo elemento n0 . O n0 é
diferente de 1 , porque P (1) é verdadeira. Como n0 é o mínimo, temos
P (n0 − 1) é verdadeira, mas P (n0 ) é falso. Mas isto contradiz à implicação
P (k) → P (k + 1) para k = n0 − 1 . A contradição obtida permite afirmar que
E=∅.

2 Definições recursivas
2.1 Descrição do problema
A secção precedente mostra que o conjunto de todos os números naturais tem
natureza recursiva. É suficiente demonstrar a implicação P (k) → P (k + 1)
e a partir do número 1 é possível obter um resultado para toda a sucessão
das proposições P (1), P (2), P (3), . . . . Esta propriedade dos números naturais
permite definir uma função f : N → Y sobre o N = {1, 2, 3, . . .} utilizando
uma relação entre valores da função para diferentes argumentos. Notemos que
cada função definida sobre N é a sucessão

f1 , f2 , . . . , fn , . . .

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


desta secção é considerar um método de definição de sucessões.
40 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

2.2 Definição recursiva


A sucessão 1, 4, 9, 16, . . . pode ser determinada por meio da fórmula sn = n2 .
Aqui temos uma definição que permite encontrar sn directamente usando uma
fórmula e o argumento n . Uma definição recursiva tem outra estrutura e
precisam de cumprir um algoritmo. Vamos começar de vários exemplos.
Exemplo 3.5. Consideremos a sucessão 2, 5, 8, 11, . . . Seja xn o termo geral da
sucessão, i.e., x1 = 2 , x2 = 5, . . . Implicitamente pressupõe-se um algoritmo
para calcular xn , isto é, para calcular xn temos que calcular previamente
xn−1 e encontrar o xn usando a relação

xn = xn−1 + 3, n ≥ 2, x1 = 2. (3.4)

Claro que existe a fórmula xn = 3n − 1 que é definição directa, mas uma


fórmula pode ser encontrada nem sempre.
Notemos que a formula xn = 3n − 1 deve ser verificada que pode ser feito
na base da definição recursiva (3.4).
Exemplo 3.6. Consideremos o factorial n! = 1 · 2 · 3 · . . . · n . Realmente esta
definição diz que para calcular n! é preciso primeiro calcular (n − 1)! e depois
multiplicar por n . Em outros termos temos a definição da forma

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

A definição apresenta a informação completa para calcular n! de maneira única.


Pode-se utilizar outra notação

f1 = 1, fn = fn−1 · n, se n > 1.

Temos outra notação mas a mesma definição, por isso fn = n! . Algumas


detalhes de construção correta de definições vamos considerar abaixo.
Exemplo 3.7. A sucessão de Fibonacci defina-se de maneira seguinte
(B) F1 = F2 = 1,
(R) Fk = Fk−2 + Fk−1 se k ≥ 3 .
Daqui F3 = F1 + F2 = 1 + 1 = 2, F4 = F2 + F3 = 1 + 2 = 3, . . . Os 10
primeiros termos são: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 .
Destes exemplos podemos fazer a conclusão geral. Para definir uma sucessão

sn , n = 1, 2, . . .

um ou vários primeiros termos pode-se definir directamente, mas para outros


consequentes usa-se uma relação recursiva.
Definição 3.1. Definição recursiva consiste das duas partes:
(B) um número finito de primeiros termos de sucessão determinam-se directa-
mente, i.e. os termos s1 , s2 , . . . , sp onde p ≥ 1
(R) todos os outros termos determinam-se por meio de uma relação recursiva
que permite encontrar o termo a partir de certos termos antecedentes

sn = ϕn (s1 , s2 , . . .)
2. DEFINIÇÕES RECURSIVAS 41

2.3 Extensão de domínio


As vezes é cómodo considerar uma extensão do domínio da sucessão definida.
Isto permite fazer na base da definição recursiva. Por exemplo, para o factorial
com frequência usa-se a convenção 0! = 1 . De facto, este valor corresponde a
relação fn = fn−1 · n para n = 1 :

f1 = f0 · 1, ou 1 = f0 · 1.

Daqui 0! = f0 = 1 .
Para a sucessão de Fibonacci consideremos a relação dada quando n = 2 :

F2 = F1 + F0 .

Daqui F0 = F2 − F1 = 0 . Desta maneira pode-se definir F−1 , F−2 , . . .

2.4 Cálculo iterativo. Algoritmos


A definição recursiva permite calcular os elementos da sucessão xn termo a
termo. Este método de cálculo vamos chamar cálculo iterativo. Para calcular
xn calculam-se consequentemente os elementos x1 , x2 , . . . , xn−1 .
Um algoritmo para calcular o factorial pode ter a forma
f := 0
for k := 1 to n do
f := f ∗ k
end for
Exemplo 3.8. Algoritmo de cálculo de soma. Dada uma sucessão a1 , a2 , . . . de
números reais. Consideremos a definição recursiva da soma sn = a1 + . . . + an

s0 = 0, sk = sk−1 + ak , se k ≥ 1.

A extensão da sucessão para o conjunto {0} ∪ N dá s0 = 0 . Claro que


em vez disso pode ser dada a base s1 = a1 , mas a extensão para o conjunto
{0} ∪ N permite simplificar um pouco o algoritmo.
Conforme com esta definição temos o algoritmo para calcular sn :
s := 0
for k := 1 to n do
s := s + ak
end for
Para calcular o n -esimo número de Fibonacci introduzimos duas variáveis
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 definição do Fn veja no exemplo
3.7).
O algoritmo precisa de análise e justificação.
42 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

2.5 Cálculo recursivo


Se usar a definição da sucessão directamente vamos ter cálculo recursivo.
Exemplo 3.9. Consideremos cálculo 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 método recursivo utiliza a definição directamente


e consiste em chamada da mesma definição mas com outro argumento (neste
exemplo k chama o predecessor k − 1 ). Este processo continua-se até o
momento quando será possível calcular o valor directamente (ao atingir a base;
neste exemplo k = 1 ). A partir deste momento os cálculos se cumprem na
ordem inversa.
No exemplo é considerado que cada elemento da sucessão depende de um
só predecessor mas por exemplo na definição dos números de Fibonacci cada
elemento tem 2 predecessores que complica muito os cálculos:

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.

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: Cálculo recursivo do número F6 de Fibonacci

Estes cálculos realiza o algoritmo recursivo 3.1. Notemos que a forma do


algoritmo é praticamente uma cópia da definição recursiva, mas utiliza notação
da linguagem Pascal.

O seguinte exemplo mostra mais uma variante para utilizar elementos ante-
cedentes da sucessão:
Exemplo 3.10. Consideremos a definição

(B) s(0) = 0, s(1) = 1

(R) s(n) = s(⌊n/2⌋) + s(⌊n/5⌋) para n ≥ 2


2. DEFINIÇÕES RECURSIVAS 43

Aqui ⌊x⌋ designa a parte inteira de x . Observemos que não há diferença


principal entre notação com índice sn e com argumento s(n) .
Calculemos recursivamente por exemplo o número 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 Relações recorrentes lineares


Dado número natural p a relação

sn = a1 sn−1 + a2 sn−2 + . . . + ap sn−p

chama se relação recorrente linear. Se definir directamente os primeiros p ter-


mos s1 , s2 , . . . , sp obteremos definição recursiva de uma sucessão sk .
Existe um método para encontrar uma fórmula para termo geral sk da
sucessão. Consideremos a equação característica

rp = a1 rp−1 + a2 rp−2 + . . . + ap .
Se esta equação tem p raízes diferentes r1 , . . . , rp existirem números c1 , . . . , cp
tais que
sn = c1 r1n + . . . + cp rpn , n = 1, 2, . . .
As constantes c1 , c2 , . . . , cp podem ser determinadas a partir da condição que
os primeiros termos são dadas. Caso p = 2 vamos ter

sn = asn−1 + bsn−2 .

Equação característica:
r2 = ar + b.
Solução da relação. Se r1 6= r2 teremos

sn = c1 r1n + c2 r2n .

Se r1 = r2 = r então
sn = c1 rn + c2 nrn .
Exemplo 3.11. Consideremos a relação recorrente sn = sn−1 + 2sn−2 onde
s1 = s2 = 3 . Temos sucessão sn :

3, 3, 9, 15, 33, 63, . . .

A equação característica r2 = r + 2 tem raízes 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 3 = c1 22 + c2 (−1)2

donde c1 = 1, c2 = −1 e
sn = 2n − (−1)n .
44 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

3 Definição recursiva e indução matemática


3.1 Demonstração de proposições
É natural que o vínculo acima mencionado entre indução matemática e relações
recursivas permite usar indução para demonstrar asserções diferentes sobre a
sucessão definida. Tanto indução matemática como uma definição recursiva
têm uma base e uma parte indutiva (recursiva).
Exemplo 3.12. A sucessão sn é definida recursivamente s0 = 1 , sk = 2sk−1
se k > 0 . Demonstrar que sn = 2n , ∀n ∈ N ∪ {0} .
Demonstração é fácil dar por meio da indução matemática. Base s1 = 20
é válida. Passo indutivo: demonstrar a implicação

(sk = 2k ) → (sk+1 = 2k+1 )

Seja que sk = 2k . Então sk+1 = 2sk = 2 · 2k = 2k+1 .


Este exemplo mostra que demonstração de proposições em relação às funções
definidas recursivamente é natural realizar utilizando indução matemática.
Seja uma definição recursiva tem a estrutura seguinte. Dado o elemento x0
e a relação xn = ϕ(xn−1 ), n ≥ 1 . Qualquer proposição P (n) relativamente a
esta sucessão xn pode ser demonstrada usando a indução matemática de modo
seguinte
1. Verificar P (0)
2. Provar a implicação P (k) → P (k + 1)

3.2 Indução com base de vários elementos


Para definições recursivas que tem no lado direito da relação vários argumentos,
i.e.
xn = ϕn (xn−1 , xn−2 , . . . , xn−l )
é preciso usar outro principio de indução matemática. 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) são verdadeiras
(I) As proposições P (k), P (k + 1) implicam P (k + 2) qualquer que seja
k≥m.
Então P (n) é verdade para todos os n ∈ {m, m + 1, m + 2, . . .} .
Exemplo 3.13. Consideremos a sucessão dada recursivamente

b0 = b1 = 1, bn = 2bn−1 + bn−2 , se n ≥ 2

e a proposição
P (n) = {bn < 6bn−2 }, n ≥ 2.
É preciso demonstrar que P (n) é verdadeira para n ≥ 4 . Para isso vamos
usar o teorema 3.5.
4. ALGORITMOS CÍCLICOS 45

Base. Temos b2 = 3, b3 = 7, b4 = 17, b5 = 41 . Como m = 4 é preciso


verificar directamente n = 4 e n = 5 :

b4 < 6b2 , i.e. 17 < 6 · 3, e b5 < 6b3 , i.e. 41 < 6 · 7.

Indução. Sejam que bk < 6bk−2 e bk+1 < 6bk−1 . Temos que demonstrar:
bk+2 < 6bk . Então:

bk+2 = 2bk+1 + bk definição


< 12bk−1 + 6bk−2 suposição
= 6(2bk−1 + bk−2 )
= 6bk definição

Em virtude do teorema 3.5 bn < 6bn−2 para todos n ≥ 4 .


Exemplo 3.14. Seja Σ = {a, b} . Calculemos o número sn de todas as palavras
de Σ∗ de comprimento n não contendo duas letras a consecutivas.
Resolução. Seja An o conjunto descrito das palavras. Claro que

A1 = {a, b}, A2 = {ab, ba, bb}, A3 = {aba, abb, bab, bba, bbb}.

Então, s1 = 2, s2 = 3, s3 = 5 . É cómodo admitir que A0 = {λ} onde λ é


palavra vazia. Logo s0 = 1 .
Seja n ≥ 2 . O conjunto An dividamos em duas partes. O primeiro
subconjunto A′n consiste das palavras com primeira letra a e no segundo A′′n
a primeira letra de cada palavra é b . Claro que cada palavra do A′n começa
das letras ab e resto tem n − 2 letras. Mas o resto é palavra arbitraria do
conjunto An−2 . Por isso, |A′n | = sn−2 . Agora o resto de cada palavra do A′′n
contem n − 1 letras e logo |A′′n | = sn−1 .
Então temos a relação
sn = sn−2 + sn−1
que é a segunda parte da definição da sucessão de Fibonacci Fn mas aqui os
primeiros dois termos são 2 e 3 .
Usando o teorema 3.5 pode-se provar que sn = Fn+2 .
Uma generalização do teorema 3.5 tem a forma:
Teorema 3.6. Suponhamos que
(B) P (m), P (m + 1), . . . , P (m + l − 1) são verdadeiros;
(I) As proposições P (k), . . . , P (k + l − 1) implicam P (k + l) qualquer que
seja k ≥ m .
Então P (n) é verdade para todos os números n ∈ {m, m + 1, . . .} .

4 Algoritmos cíclicos
Algoritmo cíclico é um dos métodos principais em construção de algoritmos.
Resultados do trabalho de um algoritmo pode-se representar em forma de uma
tabela onde cada linha apresenta resultado depois de um passo do algoritmo.
Consideremos por exemplo o algoritmo
x := 2
46 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

while true do
x := x + 3
end while
A seguinte tabela representa os valores da variável x depois de n passos
do ciclo
n x
0 2
1 5
2 8
3 11
4 14
... ...
Sobre a sucessão xn dos valores da variável x podemos dizer que xn = 2 +
3n . Esta última proposição pode ser demonstrada usando indução na base da
definição recursiva

x0 = 2, xn = xn−1 + 3, se n ≥ 1.

Claro que num algoritmo podem participar duas ou várias variáveis.


Exemplo 3.15. Consideremos o ciclo
r := 30 ; k := 0
while r ≥ 7 do
r := r − 7 ; k := k + 1
end while
Cada passo do algoritmo cíclico faz uma alteração das variáveis r e k . A
tabela a seguir apresenta os passos do algoritmo.

n r k
0 30 0
1 23 1
2 16 2
3 9 3
4 2 4

4.1 Ciclo infinito. Estado


Um ciclo infinito tem o fluxograma apresentado na figura 3.2. A direita da figura
é o código 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 atribuição

S := f (S). (3.5)

A letra S usa-se para indicar o bloco (cortejo, estado) de todas as variáveis


que se alteram no algoritmo. O ciclo produz uma sucessão

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

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


A representação do operador f na forma (3.5) significa que uma função
f : S → S produz o estado novo S ′ = f (S) e a seguir a atribuição S := S ′
4. ALGORITMOS CÍCLICOS 47

serve para substituir a memória: S toma o valor novo S ′ . Aqui S é o


conjunto de todos os estados possíveis (o domínio do operador f ).
No exemplo 3.15 S é o conjunto de todos os pares ordenados dos números
inteiros.

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

Figura 3.2: Ciclo infinito

Operador f pode alterar valores de diferentes variáveis. O cortejo destas


variáveis formam um bloco, ou estado (situação actual, meio ambiente) desig-
nada pela letra S . Por exemplo no ciclo do exemplo 3.15 é natural introduzir
o estado S como o par ordenado

S = (r, k).

Exemplo 3.16. No ciclo infinito


r := 30; k := 0
while true do
r := r − 7;
k := k + 1
end while
vamos ter a seguinte sucessão dos estados

(30, 0), (23, 1), (16, 2), (9, 3), (2, 4), . . .

4.2 Ciclo com pre-condição


Ciclo com pre-condição tem o fluxograma que vemos sobre a figura 3.3. O ciclo
pode funcionar infinitamente ou terminar depois de um dos passos.
Na figura 3.3 são apresentadas duas proposições (mais precisamente: pre-
dicados) I(S) e P (S) . As funções P e I com argumento S pode tomar
apenas os dois valores verdade e falso . O predicado P (S) chama-se pre-
condição do ciclo e serve para terminar o ciclo. O ciclo termina quando a pre-
condição P (S) for falso. Portanto logo ao terminar o ciclo podemos afirmar
que a negação
¬P (S)
é verdadeira!
48 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

S := S0

S := S0 { I(S0 ) }
P (S)
Não while P (S) do
S := f (S)
Sim end while
{ ¬P (S) ∧ I(S) }
S := f (S)

Figura 3.3: Ciclo com pre-condição

4.3 Invariante de ciclo


Definição 3.2. Uma proposição I(S) chama-se invariante do operador f se
é verdadeira a implicação
I(S) → I(S ′ ),
onde S ′ = f (S) .
Definição 3.3. Uma proposição I(S) chama-se invariante de ciclo
while true do
S := f (S)
end while
se a implicação
I(S) → I(S ′ ), (3.6)

onde S = f (S) é verdadeira, o seja, se I(S) é invariante do operador f .
Um invariante é proposição que sendo verdadeira na entrada do ciclo será
verdadeira depois de cada um dos passos do algoritmo cíclico. Por meio da
indução matemática é fácil demonstrar o seguinte teorema:
Teorema 3.7. Seja S0 , S1 , . . . , Sn , . . . a sucessão dos estados no algoritmo
cíclico 3.2, e I(S) é invariante do operador f . Se I(S0 ) é verdadeiro então
I(Sn ) é também verdadeiro para todos n = 0, 1, 2, . . . .
Nota 1. O teorema 3.7 é valido também para o ciclo com pre-condição mas até
terminar. Observemos que invariante será verdadeiro ao terminar o ciclo.
Exemplo 3.17. Para a atribuição i := i + 2 podemos indicar invariantes

P1 (i) = {i é par} e P2 (i) = {i é ímpar}.

Consideremos o ciclo infinito


4. ALGORITMOS CÍCLICOS 49

while true do
i := i + 2
end while
com estado S = i . Se na entrada a variável i toma o valor par, então depois
de cada passo do ciclo o i tem um valor par. O mesmo podemos afirmar sobre
valores ímpares.
Exemplo 3.18. 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
Por convenção vamos usar a notação I(m, n) em vez de I(S) . Designemos
m′ = 2m, n′ = n + 1 . Segundo à definição 3.3 temos que demonstrar a
implicação

I(m, n) → I(m′ , n′ ) ou {m = 2n } → {m′ = 2n }.

Temos ′
m′ = 2m = 2 · 2n = 2n+1 = 2n .
Compare esta demonstracao com a demonstracao deductiva puramente

{m = 2n } → {2m = 2 · 2n = 2n+1 } → {m′ = 2n }.

4.4 Invariante de ciclo com pre-condição


No caso de ciclo com pre-condição temos a possibilidade de utilizar a informa-
ção sobre estado obtida na pre-condição. Isto altera um pouco o conceito do
invariante (3.6). De facto, dentro do ciclo é possível usar a pre-condição P (S)
que é verdadeira.
Definição 3.4. A proposição I(S) chama-se invariante de ciclo com pre-
condição
S := S0
while P (S) do
S := f (S)
end while
se
I(S) ∧ P (S) → I(S ′ ) (3.7)
onde S ′ = f (S) .
O seguinte teorema justifica a definicao 3.4
Teorema 3.8. Seja I(S) um invariante do ciclo (fig. 3.3) i.e. I(S) satisfaz
à condição (3.7). Se para o estado inicial S0 a proposição I(S0 ) é verdadeira
então ao terminar o ciclo é verdadeira a asserção

I(S) ∧ ¬P (S). (3.8)


50 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

Exemplo 3.19. 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 proposição

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

é invariante do algoritmo. No caso m > n temos alteração apenas da variável


m e o valor novo de m será positivo. Caso contrário m ≤ n mas (pre-
condição!) m 6= n e portanto m < n e valor novo da variável n será positivo.
Se inicialmente as variáveis m e n são positivos ao terminar o ciclo teremos

I(S) ∧ ¬P (S) = {m > 0 ∧ n > 0} ∧ {m = n} = {m = n > 0}.

4.5 Algoritmo de divisão inteira


Exemplo 3.20. Demonstremos que no algoritmo
r := a ; k := 0
while r ≥ b do
r := r − b
k := k + 1
end while
a proposição
I(S) = I(r, k) = {a = kb + r}
é invariante. De facto designemos os valores novos de r e k por r′ e k ′
respectivamente, i.e.

(r′ , k ′ ) = f ((r, k)) = (r − b, k + 1),

onde f designa o operador contendo as atribuições r := r − b; k := k + 1 .


Então r′ = r − b , k ′ = k + 1 . Temos que demonstrar a implicação

{a = kb + r} → {a = k ′ b + r′ }.

Demonstração:

k ′ b + r′ = (k + 1)b + r − b = kb + r = a.

No exemplo 3.20 vemos um algoritmo. Como poderemos ver que este algo-
ritmo serve para encontrar quociente incompleto k e resto de divisão r do
número inteiro não negativo a por número natural b . Notemos que antes de
demonstrar é preciso dar definição correspondente.
Definição 3.5. Se o número a é representado em forma a = kb + r onde
0 ≤ r < b , números inteiros k e r chamam-se quociente e resto de divisão a
por b respectivamente.
4. ALGORITMOS CÍCLICOS 51

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


teorema 3.8 (equação (3.7)) permite afirmar que por fim do ciclo as variáveis k
e r obedecem as condições:

a = kr + b e r < b.

Mas nós não temos desigualdade r ≥ 0 . Em tais casos é possível conseguir


o resultado por meio de uma extensão do invariante. Consideremos o segundo
invariante: r ≥ 0 . De facto seja r′ = r − b valor novo da variável r .
Porquanto r ≥ b para r′ temos r′ = r − b ≥ 0 . Notemos que aqui usamos
a definição (3.7) do invariante para ciclo com pre-condição. O nosso invariante
extendido é
I(r, k) = {a = kr + b ∧ r ≥ 0}.
Agora por fim do ciclo temos

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

Inicialmente no algoritmo no exemplo 3.20 r = a e k = 0 e a proposição


I(r, k) é válida. Então nós podemos dizer que o algoritmo ao terminar dá o
resultado certo.

4.6 Demonstração que o ciclo termina


Infelizmente existe mais uma possibilidade: ciclo com pre-condição pode tra-
balhar infinitamente. Para demonstrar que o ciclo termina é cómodo usar a
asserção:

Não existe nenhuma sucessão decrescente infinita de números naturais.

No algoritmo de divisão consideremos a variável r . O primeiro valor de r é


igual a a ≥ 0 . A variável r toma consequentemente as valores a, a − b, a −
2b, . . . onde b > 0 . A última sucessão não é infinita e portanto o ciclo termina.

4.7 Algoritmo de Euclid


Algoritmo de Euclid serve para encontrar o máximo divisor comum MDC(a, b)
dos dois números 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 máximo divisor comum:

MDC(a1 , b1 ) = MDC(a, b).

Manutenção desta igualdade é manutenção de um invariante. O algoritmo uti-


liza o teorema

Teorema 3.9. Se b 6= 0 então

MDC(a, b) = MDC(b, r)

onde r = a mod b é o resto de divisão a por b .


52 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

m := a ; n := b
while n 6= 0 do
r := m mod n
(m, n) := (n, r)
end while
{ n = 0 ∧ m = MDC(a, b) }
d := m
Algoritmo 3.1: Euclid

No algoritmo 3.1 a e b são grandezas dadas e m e n são variáveis 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 sucessão dos valores n é decrescente e
portanto não é sucessão infinita.

4.8 Equação em números inteiros


O algoritmo de Euclid pode-se aplicar para resolver a equação em números
inteiros. Consideremos a equação

ax + by = c (3.9)

onde a, b, c são constantes inteiras, a, b > 0 . É preciso encontrar todas as


soluções inteiras da equação.
Por exemplo, dada equação 8x+3y = 1 . Substituindo 8 = k·3+r = 2·3+2
vamos ter à equação (2 · 3 + 2)x + 3y = 1 ou 3x1 + 2x = 1 onde x1 = 2x + y .
Esta última equação tem uma das soluções x1 = 1, x = −1 . Então

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

Consideremos agora esta redução em forma geral. Seja

k = ⌊a/b⌋ e r = a mod b,

i.e. a = kb + r, 0 ≤ r < b . Substituindo na (3.9) 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 . Então (3.9)


reduz-se à equação
a1 x1 + b1 y1 = c (3.10)
com a1 = b, b1 = r = a mod b .
Esta redução pode ser realizada várias vezes. O resultado é um algoritmo
cíclico. Representemos a substituição em forma matricial
    
x 0 1 x1
=
y 1 −k y1
4. ALGORITMOS CÍCLICOS 53

 
x1
ou X = A1 X1 onde X1 = e x1 , y1 é uma das soluções da equação
y1
(3.10).
Depois de segunda substituição vamos ter
 
x2
X = A1 X1 = A1 A2 X2 , X2 = ,
y2

a2 x2 + b2 y2 = c (3.11)
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 proposição:


 
xn
Se Xn = é uma das soluções da equação
yn

an xn + bn yn = c
 
x
então X = é uma das soluções da equação inicial (3.9).
y

A sucessão dos pares (ak , bk ) é a mesma sucessão que tínhamos no algoritmo


de Euclid. Por isso depois de um número finito k de passos o algoritmo termina
com ak = d = MDC(a, b) e bk = 0 . Suponhamos que c é divisível por d e
vamos ter
d · xk + 0 · yk = c
donde xk = c/d e yk é número qualquer. A solução X pode ser encontrada
da fórmula 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 3.2: Euclid (extensão)

No algoritmo 3.2 vamos ter o invariante: Se X̃ é uma das soluções da


equação me y = c então
x + ne
 

X = P X̃ = P

é uma das soluções da equação (3.9).


54 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

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


algoritmo

k m n P
 
1 0
início 23 13
0 1
 
0 1
1 13 10
1 −1
 
1 −1
1 10 3
−1 2
 
−1 4
3 3 1
2 −7
 
4 −13
3 1 0
−7 23
Ao terminar o algoritmo temos
     
x 4 −13 x̃
= ·
y −7 23 ỹ

onde x̃ = 1, ỹ = t (qualquer número inteiro). Daqui temos a solução geral

x = 4 − 13t, y = −7 + 23t.

4.9 Formação de um algoritmo cíclico


Colocação problema
É preciso construir um algoritmo para encontrar um cortejo S = (x, y, . . .) que
satisfaça a uma condição dada. Suponhamos que esta condição pode ser repre-
sentada em forma I(S) ∧ F (S) onde I(S) e F (S) são asserções (predicados).
A proposição I(S) vai servir como invariante, F (S) dá a condição final e será
verdadeira por fim do ciclo.

Etapas da resolução do problema


Para obter um algoritmo para encontrar S é preciso:

1. Formular as condições I(S) e F (S) a partir da colocação do problema,


isto é, representar a condição dada em forma I(S) ∧ F (S) .

2. Encontrar um estado inicial S0 tal que I(S0 ) é verdadeiro.

3. Encontrar operação f tal que não altera o invariante I(S) e verificar o


invariante usando o Teorema 3.8.

4. Demonstrar que o ciclo termina, i.e. que a sucessão S0 , S1 , . . . , Sn é


finita.
5. EXERCÍCIOS 55

5 Exercícios
5.1 Indução matemática
1. Demonstrar as identidades
n(n + 1)(2n + 1)
(a) 12 + 22 + . . . + n2 = , n∈N
6
an+1 − 1
(b) 1 + a + a2 + . . . + an = (a 6= 1)
a−1
2. Demonstrar que para todos os números n naturais

(a) n5 − n é divisível por 10


(b) 11n − 4n é divisível por 7
   
1 1 1 n
3. Dada a matriz A = . Demonstrar que An = .
0 1 0 1

4. Seja M um conjunto finito contendo n elementos. P(M ) designa o


conjunto de todos os subconjuntos de M . Determinar o número dos
membros de P(M )
5. Demonstrar para ∀n ∈ N

(a) 5n − 4n − 1 é divisível por 16


(b) 5n+1 + 2 · 3n + 1 é divisível por 8
(c) n! ≥ 2n−1
(d) 8n+2 + 92n+1 é divisível por 73
(e) 13 + 23 + . . . + n3 = (1 + 2 + . . . + n)2
Xn
1 √
(f) √ ≥ n
i=1
i
Xn
1 √
(g) √ ≤2 n−1
i=1
i
(h) an − 1 ≥ n(a − 1) (a > 0)

6. Demonstrar
m−1 m−1 m−1 m−1
Cnm = Cn−1 + Cn−2 + Cn−3 + · · · + Cm−1

7. Demonstrar que ∀n ∈ N
√ a1 + . . . + an
n
a1 · . . . · an ≤
n
ai ≥ 0, i = 1, . . . , n .

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

9. Seja P (n) um predicado definido sobre o N . Suponhamos que P (n)


satisfaz às condições:
56 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

(a) P (1) é verdadeiro,


(b) P (k) → P (k + 2), k ≥ 1
Demonstre que P (n) é verdadeiro qualquer que seja n ímpar.
10. Prove by induction that a 2n by 2n chessboard minus any single square
can always be covered by L -shaped pieces (with 3 squares in each piece).
(Suggestion: divide the 2n+1 by 2n+1 chessboard into four smaller chess-
boards.)

Solução do exercício 7. Demonstrar a desigualdade


√ a1 + . . . + an
n
a1 · . . . · an ≤ ,
n
ai ≥ 0, i = 1, . . . , n . Consideremos o caso particular quando o médio aritmé-
tico
a1 + . . . + an
= 1. (3.12)
n
É preciso demonstrar que

a1 · . . . · an ≤ 1. (3.13)

Se a1 = a2 = · · · = an = 1 , a desigualdade (3.13) é verdadeira. No


caso contrário existem números maiores e menores do que 1 . Seja a1 > 1
e an < 1 . Se substituirmos este par por números a′1 e a′n de modo que
a′1 + a′n = a1 + an e a′n = 1 então vamos ter a mesma soma e o mesmo médio
aritmético 1 dos números a′1 , a2 , . . . , an−1 , a′n . Ao mesmo tempo

a1 · . . . · an < a′1 · . . . · a′n = a′1 · . . . · an−1 (3.14)

por causa da desigualdade a1 an < a′1 a′n . De fato, se

a′1 = a1 − x, 1 = a′n = an + x, 0 < x < a1 − an ,

então

a′1 a′n = (a1 − x)(an + x) = a1 an + x((a1 − an ) − x) = a1 an + x(a1 − 1) > a1 an .

Agora notemos que


a′1 + · · · + an−1
= 1.
n−1
Usando o passo indutivo podemos supor que

a′1 · . . . · an−1 ≤ 1.

Daqui e da relação (3.14) deduzimos verdadeira da desigualdade (3.13). A base


da indução é fácil verificar.
a1 + · · · + an
O caso geral, quando o médio aritmético m = é um número
n
qualquer, reduz-se ao caso considerado por meio da substituição

ai = mxi , i = 1, 2, . . . , n.
5. EXERCÍCIOS 57

5.2 Definições recursivas


1. Sucessão (xn ) é determinada recursivamente
p
x1 = 1, xn = 2 + xn−1 para n > 1.

Demonstrar que ∀(n ∈ N ) xn < 2 .



2. Demonstrar que xn > 5 e que xn é decrescente onde a sucessão xn
dada recursivamente
 
1 5
x0 = 3, xn = xn−1 + para n > 0.
2 xn−1

3. Dados a, b, S0 = a, Sn = 2Sn−1 + b . Encontrar uma fórmula para


Sn e demonstrá-lá.

4. Demonstre que a sucessão xn = 1+1/xn−1 para n ≥ 2 e x1 = 1 satisfaz


a relação xn = Fn+1 /Fn onde Fn é n -esimo número de Fibonacci.

5. Mostrar que se a sucessão sn satisfaz s1 = 2, s2 = 3 e sn = sn−2 +


sn−1 para n ≥ 3 então sn = Fn+2 onde Fn é sucessão de Fibonacci:
F1 = 1, F2 = 1 , Fn = Fn−2 + Fn−1 se n ≥ 3 .

6. Demonstrar que F1 + F2 + . . . + Fn = Fn+2 − 1 , n ∈ N onde Fn é a


sucessão de Fibonacci.

7. Demonstrar que se Fn é sucessão de Fibonacci então Fn−1 Fn+1 = Fn2 ±1


onde sinal " + "corresponde ao número n par e sinal " − "escolhemos
caso contrário.

8. Consideremos todas as palavras formadas de letras a e b (por exemplo


aabab, abb ). Seja sn o número de todas as palavras de comprimento n
e não contendo a parte aab .

(a) calcular s0 , s1 , s2 , s3
(b) encontrar uma relação recursiva para sn
(c) calcular s8

9. Demonstrar que se sn = asn−1 para n ≥ 1 e a 6= 0 então sn = an · s0


para n ∈ N .

10. Determinemos recursivamente a0 = a1 = 1 e an = an−1 + 2an−2 para


n≥2.

(a) calcular a6 recursivamente


(b) demonstrar que todos os termos an são ímpares

11. Verificar que a sucessão dada por sn = 2n+1 +(−1)n satisfaz às condições
s0 = s1 = 3 e sn = sn−1 + 2sn−2
58 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

12. A sucessão das matrizes M1 , M2 , . . . é definida por


   
1 1 1 1
M1 = , Mn = Mn−1 para n ≥ 2.
0 1 0 1
Demonstrar que  
1 n
Mn = , n∈N
0 1

13. Dada a definição recursiva u0 = 1 , a0 = 1 , un = un−1 /n , an = an−1 +


un se n ≥ 1 . Demonstrar que
1 1 1
an = 1 + + + ··· + .
1! 2! n!
Construir um algoritmo para calcular iterativamente an .
Indicação. 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
14. Achar uma fórmula explícita para sn onde s0 = 3 e sn = −2sn−1 para
n≥1
15. (a) Dar uma definição recursiva para a sucessão (2, 4, 16, 256, . . .) . A
sucessão pode ser representada (2, 22 , (22 )2 , ((22 )2 )2 , . . .) .
(b) Dar uma definição recursiva da sucessão (2, 4, 16, 65536, . . .) . Esta
2 22
sucessão pode ser representada na forma (2, 22 , 22 , 22 , . . .) .
2n
16. Dar uma definição recursiva para a sucessão pn = , n = 0, 1, . . .
n!
17. Dar uma definição recursiva para a sucessão dos polinómios
x(x − 1) · . . . · (x − n)
Pn = Pn (x) = , n≥0
n!
onde x é um número real.
18. Dar uma definição recursiva para a sucessão
an (2n)!
xn = , n = 0, 1, 2, . . .
b2n−1 n!
19. Construir uma definição recursiva para o produto
n
Y
sn = a1 a2 · · · · · an = ai .
i=1

Solução: consideremos a propriedade


n+1
Y n
Y
ai = an+1 ai
i=1 i=1
5. EXERCÍCIOS 59

donde temos a definição

s1 = a1 , sn+1 = an+1 sn , se n ≥ 1.

Pode-se extender o domínio admitindo s0 = 1 . É cómodo considerar que


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

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

20. Dar definição recursiva para a soma


n
X
sn = a1 + a2 + · · · + an = ai .
i=1

sobre o domínio {0, 1, 2, . . .}

21. Sejam S um conjunto e (A1 , A2 , . . .) uma sucessão de subconjuntos do


conjunto S .
n
[
(a) De uma definição recursiva para união Aj .
j=1

(b) De que modo poderíamos definir a "união vazia"?


\n
(c) Responder a mesma questão para a intersecção Aj .
j=1

22. Achar uma fórmula explícita para sn onde s0 = 3, s1 = 6 e sn = sn−1 +


2sn−2

23. Em cada um dos seguintes casos achar uma fórmula explícita para sn .

(a) s0 = 2, s1 = −1 e sn = −sn−1 + 6sn−2 para n ≥ 2


(b) s0 = 2 e sn = 5sn−1 para n ≥ 1
(c) s0 = 1, s1 = 8 e sn = 4sn−1 − 4sn−2 para n ≥ 2
(d) s0 = c, s1 = d e sn = 5sn−1 − 6sn−2 para n ≥ 2
(e) s0 = 1, s1 = 4 e sn = sn−2 para n ≥ 2

24. Achar o valor do determinante de ordem n :



2 1 0 . . . 0 0

1 2 1 . . . 0 0

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

0 0 0 . . . 1 2
60 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

5.3 Algoritmos cíclicos


1. Obter a lista de cinco primeiros valores de x em cada um dos algoritmos
(a) x := 0
while 0 ≤ x do
x := 2x + 3
end while
(b) x := 1
while 0 ≤ x do
x := 2x + 3
end while
(c) x := 0
while x ≥ 0 do
x := 2x − 1
end while
2. A lista dos estados durante cumprimento do algoritmo
m := 0; n := 0
while n 6= 4 do
m := m + 2n + 1
n := n + 1
end while
apresentar em forma da tabela
3. Mostrar que as proposições I1 (m, n) = {m + n é par} e I2 (m, n) = {m +
n é ímpar} são invariantes do ciclo
while 1 ≤ m do
m := m + 1
n := n + 1
end while
4. Mostrar que as proposições n2 ≥ m3 e 2m6 < n4 são invariantes do
ciclo
while 1 ≤ m do
m := 2m
n := 3n
end while
Resolução para a proposição P (m, n) = {2m6 < n4 } :
Designemos m′ = 2m e n′ = 3n . Temos
6 4
P (m′ , n′ ) = {2m′ < n′ } = {2 · 26 m6 < 34 n4 }.

Como 26 < 34 a última asserção decorre de P (m, n) i.e.

P (m, n) ≡ 2m6 < n4 ⇒ 2 · 26 m6 < 34 n4 ≡ P (m′ , n′ )

5. Consideremos o ciclo
while j ≥ n do
i := i + 2; j := j + 1
5. EXERCÍCIOS 61

end while
Quais das seguintes asserções

(a) i < j 2 se n = 1
(b) i < j 2 se n = 0
(c) i ≤ j 2 se n = 0
(d) i ≤ j 2 se n = 0

são invariantes ?

6. Demonstre que a proposição {2k 3l x = a} ( a é um número natural) é


um invariante do algoritmo cíclico
k := 0; l := 0; x := a;
while (x mod 2 = 0) ∨ (x mod 3 = 0) do
if x mod 2 = 0 then
k := k + 1
x := x div 2
else
l := l + 1
x := x div 3
end if
end while
Demonstre que o ciclo termina e descreve o resultado.

7. Dado o algoritmo
p := 1; x := a; i := n
while i > 0 do
if odd(i) then
p := p ∗ x
end if
x := x ∗ x
i := i div 2
end while
Demonstre que

(a) A proposição {pxi = an } é um invariante do algoritmo cíclico ( n


é um número natural, a é um número real)
(b) Ao terminar o ciclo p = an
(c) O ciclo termina

8. Demonstrar que a proposição {kxm = an } é um invariante do algoritmo


cíclico ( n é um número natural)
k := 1; x := a; m := n
while m > 0 do
if odd(m) then
k := k ∗ x
m := m − 1
else
62 CAPÍTULO 3. INDUÇÃO, ALGORITMOS

x := x ∗ x
m := m div 2
end if
end while
Demonstrar que o ciclo termina e logo ao terminar k = an .
9. Demonstrar que a proposição {kx + y = a} é invariante no algoritmo
cíclico ( a é um número natural)
k := 1; x := a; y := 0
while x > 1 do
if odd(x) then
y := y + k
end if
k := 2 ∗ k
x := x div 2
end while
Demonstrar que o ciclo termina e logo ao terminar x = 1 .

5.4 Formação de algoritmo


Em todos os problemas construir um algoritmo realizando as primeiras 5 etapas
indicadas em cima.
1. Calcular n!
2. Sucessão de Fibonacci: F1 = F2 = 1, Fk = Fk−1 + Fk−2 se k ≥ 3 .
(a) Calcular Fn .
(b) Dado M > 0 achar o primeiro número n tal que Fn > M .
3. Encontrar soma dos dígitos de um número natural.
4. Representar número arbitrário natural N em forma N = 2k x onde x
é um número ímpar.
5. Representar número arbitrário natural N em forma N = 2k 3l x onde
MDC(x, 6) = 1 .
6. Dado número A encontrar o primeiro número natural n para o qual
soma 1 + 1/2 + 1/3 + . . . + 1/n > A .
7. Encontrar o mínimo divisor primo de um número natural.
8. Dados números a1 , . . . , an
(a) Achar a soma a1 + . . . + an
(b) Achar o número máximo max{a1 , . . . , an } e o seu índice
(c) Achar o índice do primeiro número negativo (supondo que tal número
existe)
9. Dados números naturais d, p , d < p , p > 1 . A sucessão a0 , a1 , . . .
é definida por meio da relação recursiva a0 = 1, ak+1 = ak · d mod p .
Encontrar o primeiro índice k para o qual ak = 1 .
5. EXERCÍCIOS 63

10. Sucessão de Fibonacci de restos da divisão por número natural p > 1


dado. Sucessão fk , k = 1, 2, . . . é definida por meio da relação recursiva
f1 = f2 = 1 , fk = (fk−2 + fk−1 ) mod p . Demonstrar que a sucessão tem
o ciclo (período), isto é, existe o número natural T tal que ∀k fk+T = fk .
Encontrar o T .

Potrebbero piacerti anche