Escolar Documentos
Profissional Documentos
Cultura Documentos
ERI
ALS
UPL
EME
NTARP
ARAACOMP
ANHAR
Guia de Estudos Online
Capítulo
Lógica Formal 1
O Capítulo 1 é uma introdução à lógica simbólica, ou formal, e a algumas de suas aplicações
à ciência da computação. Precisamos encontrar, primeiro, uma notação para representar
argumentos lógicos de maneira formal ou simbólica. Inicialmente isso pode parecer
estranho — por que deveríamos tentar tornar algo sem sentido? Porque retirar o significado
(e quaisquer noções preconceituosas que possamos ter sobre aquele significado) permite que
nos concentremos na forma pura do argumento.
Como compreendemos o significado dessas afirmações — e como todas elas são verda-
deiras —, poderíamos achar que esse é um argumento lógico. Mas não é; essas são apenas
três afirmações separadas e verdadeiras. A afirmação de que Honolulu é a capital do Havaí
não é uma consequência lógica das duas primeiras afirmações.
Se simbolizarmos esse argumento como
A
B
portanto, C,
é fácil ver que as diversas frases não estão relacionadas e esse não é um argumento lógico.
Em um argumento lógico, a conclusão segue por causa da maneira em que está relacionada
estruturalmente com as hipóteses. A lógica simbólica estuda essas relações estruturais de
modo abstrato para se concentrar em sua forma.
No Capítulo 1, veremos como representar um argumento simples simbolicamente e
determinar se é um argumento lógico correto. A Seção 1.1 começa com afirmações simples
(às vezes denominadas proposições) que não são verdadeiras nem falsas e depois discute
como essas afirmações simples podem ser combinadas usando-se conectivos lógicos que
manipulam os valores lógicos de acordo com regras bem definidas. As afirmações resul-
tantes são chamadas de fórmulas bem formuladas proposicionais. A Seção 1.2 discute
regras de dedução que podem ser usadas para gerar um argumento válido envolvendo fór-
mulas proposicionais bem formuladas.
As letras de proposição, as regras de equivalência e as regras de inferência da lógica
proposicional não são suficientes para provar tudo que consideraríamos um argumento ló-
gico válido. Em vez de letras de proposição simples, introduzimos quantificadores que
nos permitem decidir se “alguns” ou “todos” os elementos de determinado domínio têm
alguma propriedade específica. O quantificador existencial ($x)P(x) diz que pelo menos
um elemento no domínio tem a propriedade P. O quantificador universal (∀x)P(x) diz que
1
2 Guia de Estudos Online
P1 P2 ... Pn Q
em que os Pi e o Q são fbf (fórmulas bem formuladas) predicadas. Esse será um argumento
válido se for verdadeiro em todas as interpretações possíveis. Para provar a validade,
introduzimos regras de inferência adicionais a nosso sistema lógico formal que nos permi-
tem inserir ou retirar quantificadores. Como a lógica proposicional, a lógica de predicados
(Seção 1.4) é um sistema formal completo e correto.
Além de fornecer a estrutura subjacente para o pensamento lógico, a lógica formal tem
duas aplicações diretas para a ciência da computação — programação lógica e demons-
tração de correção. Esses tópicos são discutidos nas Seções 1.5 e 1.6, respectivamente.
Argumento Lógico P Q
Lógica Proposicional Lógica de Predicados
P Q é uma tautologia P Q é válida
Pode testar através de uma tabela-verdade Não existe teste mecânico
Proposições são sentenças com valores lógicos. Uma frase simples pode ser representada
por uma letra de proposição (A, B etc.). Letras de proposição podem ser combinadas em
proposições novas usando os conectivos lógicos de
• conjunção
• disjunção
• condicional
• equivalência
• negação
Guia de Estudos Online 3
Os valores lógicos da proposição nova são obtidos dos valores lógicos de suas componentes
de acordo com as tabelas-verdade para os conectivos. As tabelas-verdade definem como
cada conectivo opera nos valores lógicos. As tabelas-verdade são relativamente intuitivas,
com a possível exceção do condicional. O condicional
A B
P Q
Você também pode usar o Algoritmo TestaTautologia para decidir se é uma tautologia.
Esse algoritmo funciona atribuindo a P o valor V e a Q o valor F. Você então segue as con-
sequências dessas atribuições passando pelas várias componentes até todas as ocorrências
de uma letra de proposição terem recebido um valor lógico. Se alguma letra tiver recebido
dois valores lógicos diferentes durante esse processo, então as atribuições originais P-V e
Q-F são impossíveis e a fbf é uma tautologia. Caso contrário, você encontrou uma atribui-
ção que torna P-V e Q-F possível e a fbf não é uma tautologia.
• Conjunção ( )
• Disjunção ( )
• Condicional ( )
• Equivalência ( )
• Negação ( 9 )
A B A B A B A B A B A9
V V V V V V F
V F F V F F F
F V F V V F V
F F F F V V V
Solução:
Passo 1. Construa o início da tabela-verdade. Decida quantas linhas ela terá e forneça valo-
res lógicos às letras de proposição.
A B C
V
F
V
F
V
F
V
F
A B C
V V
V F
F V
F F
V V
V F
F V
F F
A B C
V V V
V V F
V F V
V F F
F V V
F V F
F F V
F F F
A B C A9
V V V F
V V F F
V F V F
V F F F
F V V V
F V F V
F F V V
F F F V
Guia de Estudos Online 5
A B C A9 A9 B
V V V F V
V V F F V
V F V F V
V F F F V
F V V V V
F V F V V
F F V V F
F F F V F
A B C A9 A9 B C9
V V V F V F
V V F F V V
V F V F V F
V F F F V V
F V V V V F
F V F V V V
F F V V F F
F F F V F V
A B C A9 A9 B C9 C9 A ( A9 B) ( C9 A)
V V V F V F V V
V V F F V V V V
V F V F V F V V
V F F F V V V V
F V V V V F F F
F V F V V V V V
F F V V F F F F
F F F V F V V V
[(A B9) B] A
é uma tautologia.
Solução:
Passo 1. Decida sobre o método a ser usado — Algoritmo TestaTautologia.
6 Guia de Estudos Online
W1
W2
Solução:
Construiremos uma sequência de demonstração. (Uma tabela-verdade poderia ser usada
para verificar que a fbf é uma tautologia, o que significa — já que o sistema é completo —
que é um teorema, mas queremos, de fato, construir a demonstração.)
n. C B conclusão desejada
A B contraposição
1. A (B C) hipótese
2. B9 A9 hipótese
3. A hipótese
4. B C 1, 3, mp
5. A B 2, cont
Das duas uma: ou seu carro está com defeito, ou não é sua culpa. Se seu carro estiver com
defeito, a seguradora irá pagar. É sua culpa. Portanto, a seguradora irá pagar.
Solução:
Representaremos o argumento em lógica proposicional e depois construiremos uma de-
monstração.
A B9 Das duas uma: ou seu carro está com defeito, ou não é sua culpa.
A C Se seu carro estiver com defeito, a seguradora irá pagar.
B É sua culpa.
C A seguradora irá pagar.
1. A B9 hipótese
2. A C hipótese
3. B hipótese
1. A B9 hipótese
2. A C hipótese
3. B hipótese
4. B9 A 1, com
5. B A 4, cond
1. A B9 hipótese
2. A C hipótese
3. B hipótese
4. B9 A 1, com
5. B A 4, cond
6. A 3, 5 mp
7. C 2, 6 mp
Guia de Estudos Online 9
Considere a afirmação “Todo aluno adora matemática discreta”. Essa é uma afirmação ver-
dadeira (talvez não!), mas, de qualquer jeito, as fbfs da Seção 1.1 (denominadas fbfs propo-
sicionais) não podem representar o que essa afirmação diz, ou seja, que todos os objetos de
determinada coleção (os alunos) têm determinada propriedade (adoram matemática discreta).
Precisamos de uma representação nova para as propriedades que objetos podem ter e se
alguns ou todos os objetos têm essa propriedade.
Notações como P(x), Q(y), W(x, y) são usadas para significar que x tem a propriedade
P, y tem a propriedade Q e x e y têm a propriedade W. Quantificadores (o quantificador
universal, simbolizado por ∀, e o quantificador existencial, simbolizado por $) indicam
quantos objetos têm determinada propriedade. Fbfs predicadas são feitas de quantificado-
res, símbolos predicados e símbolos constantes, além de conectivos lógicos. O valor lógico
de uma fbf predicada depende de sua interpretação, que consiste em três partes:
• o domínio — a coleção dos objetos sob discussão, dos quais deve existir pelo menos um
• a atribuição de uma propriedade dos objetos no domínio para cada símbolo predicado
• a atribuição de um objeto particular do domínio a cada símbolo constante
Assim, a fbf predicada
(∀x)P(x)
é verdadeira com a interpretação de que o domínio é o conjunto dos inteiros maiores do que
10 e P(x) significa “x é positivo”, já que todo inteiro maior do que 10 é positivo. A fbf
($y)G( y, 0)
Solução:
Passo 1. Comece com a fbf (a). Coloque os quantificadores e conectivos em português.
(a): Para todo x no domínio, se M(x), então C(x).
Passo 2. Aplique a interpretação para escrever a fbf em português e decidir sobre seu valor
lógico.
(a): Para todo x no domínio, se M(x), então C(x).
Para todo animal x, se x for um mamífero, então x será um cavalo.
Todos os mamíferos são cavalos.
FALSO
Passo 2. Aplique a interpretação para escrever a fbf em português e decidir sobre seu valor
lógico.
(b): Existe um x no domínio com as propriedades M(x) e O(x).
Existe um mamífero que põe ovos.
VERDADE
Solução:
Passo 1. Decida sobre os predicados e sua notação.
F(x) — x é felpudo
G(x) — x é um gato
C(x) — x é um cachorro
S(x, y) — x sibila para y
Problema:
Represente a afirmação
a. Existe um gato felpudo.
como uma fbf predicada. Suponha que o domínio é o mundo inteiro.
Solução:
F(x) — x é felpudo
G(x) — x é um gato
C(x) — x é um cachorro
S(x, y) — x sibila para y
($x)F(x) G(x)
Problema:
Represente a afirmação
b. Apenas gatos sibilam para cachorros.
como uma fbf predicada. Suponha que o domínio é o mundo inteiro.
Guia de Estudos Online 11
Solução:
F(x) — x é felpudo
G(x) — x é um gato
C(x) — x é um cachorro
S(x, y) — x sibila para y
Problema:
Represente a afirmação
b. Apenas gatos sibilam para cachorros.
como uma fbf predicada. Suponha que o domínio é o mundo inteiro.
Solução:
F(x) — x é felpudo
G(x) — x é um gato
C(x) — x é um cachorro
S(x, y) — x sibila para y
ou
(∀x)(∀y)(C(x) S(y, x) G(y))
Problema:
Represente a afirmação
b. Apenas gatos sibilam para cachorros.
como uma fbf predicada. Suponha que o domínio é o mundo inteiro.
Solução:
Mas existe uma grande diferença. Você pode usar uma tabela-verdade para testar se
uma fbf proposicional é uma tautologia, de modo que você nunca precisa, de fato, construir
uma sequência de demonstração (só fizemos para praticar). Você não pode testar se uma fbf
predicada é válida, de modo que você não tem escolha a não ser construir uma sequência de
demonstração (foi por isso que praticamos).
Argumento Lógico P Q
Lógica Proposicional Lógica de Predicados
P Q é uma tautologia P Q é válida
Pode testar através de uma tabela-verdade Não existe teste mecânico
As regras de dedução nos permitem provar todo condicional P Q que é verdadeiro (o sistema
é completo) e nada que não seja verdade (o sistema é correto). Novamente, “verdade” na
lógica proposicional significa tautologia e na lógica de predicados significa validade.
Solução:
Vamos construir uma sequência de demonstração. Em primeiro lugar, note que a fbf parece
ser válida — se P é sempre verdade e se existem dois valores para os quais Q é verdade
então existem dois valores para os quais P e Q são verdadeiras.
1. (∀x)P(x) hipótese
2. ($x)($y)Q(x, y) hipótese
3. ($y)Q(a, y) 2, pe
4. Q(a, b) 3, pe
5. P(a) 1, pu
1. (∀x)P(x) hipótese
2. ($x)($y)Q(x, y) hipótese
3. ($y)Q(a, y) 2, pe
4. Q(a, b) 3, pe
5. P(a) 1, pu
6. P(a) Q(a, b) 4, 5, conj
1. (∀x)P(x) hipótese
2. ($x)($y)Q(x, y) hipótese
3. ($y)Q(a, y) 2, pe
4. Q(a, b) 3, pe
5. P(a) 1, pu
6. P(a) Q(a, b) 4, 5, conj
7. ($x)[P(x) Q(x, b)] 6, ge
8. ($y)($x)[P(x) Q(x, y)] 7, ge
Solução:
Vamos representar o argumento na notação da lógica de predicados e depois construir uma
demonstração.
A lógica formal não é apenas um modo de pensar sobre as coisas de maneira lógica, tem
aplicações diretas na ciência da computação. Uma linguagem de programação (Prolog) ba-
seada na lógica de predicados é muito usada em inteligência artificial, especialmente na área
de sistemas especialistas. Um programa em Prolog (um banco de dados) consiste em propo-
sições sobre quais objetos no domínio satisfazem determinadas propriedades ou proposições
que são definições para predicados novos. A execução de um programa em Prolog consiste
em consultas sobre as conclusões lógicas que podem ser deduzidas dessas hipóteses. As
regras de dedução e como fazer as deduções estão embutidas na própria linguagem.
controla(ComidasEngracadas, RefriIrados)
controla(ComidasEngracadas, Gostosuras)
controla(Gostosuras, AbobrinhasLtda.)
Guia de Estudos Online 15
controla(RJT, ProdutosSaudaveis)
controla(ProdutosSaudaveis, FertilizantesDaFazenda)
controla(IndustriasCapitais, ComidasEngracadas)
Formule uma regra Prolog para definir quando uma companhia é dona de outra. Formule
uma consulta sobre que companhias pertencem às Indústrias Capitais.
Solução:
Defina, primeiro, a regra donade(x, y). Essa regra pode se tornar parte do banco de dados
Prolog. A pesquisa poderia ser formulada durante a execução do programa.
Como “ser dona de” é uma propriedade que pode ser passada por uma hierarquia de
companhias, sua definição deve usar uma regra recursiva.
Caso básico: donade(x, y) se controla(x, y) ou donade(x, y) <= controla(x, y)
Problema:
Um banco de dados Prolog contém atualmente informação sobre sociedades que controlam
diretamente outras companhias. Os fatos atuais são:
controla(ComidasEngracadas, RefriIrados)
controla(ComidasEngracadas, Gostosuras)
controla(Gostosuras, AbobrinhasLtda.)
controla(RJT, ProdutosSaudaveis)
controla(ProdutosSaudaveis, FertilizantesDaFazenda)
controla(IndustriasCapitais, ComidasEngracadas)
Solução:
?donade(IndustriasCapitais, X)
Os resultados da consulta são:
ComidasEngracadas (obtido da relação controla)
RefriIrados
Gostosuras
AbobrinhasLtda.
{x = 11}
y = x – 1
{y = 10}
se y ≤ 0 então
z=y–1
senão
z=y13
fim do se
{z = 13}
Solução:
O programa tem duas proposições: a primeira é uma atribuição, e a segunda é um condicional.
Elas têm que ser tratadas separadamente.
Atribuição:
{?} y = x – 1 {y = 10}
x – 1 = 10
x = 11
Condicional:
{y = 10 e y ≤ 0} z = y – 1 {z = 13}
{y = 10 e y > 0} z = y 1 3 {z = 13}
Parte do se:
{y = 10 e y ≤ 0} z = y – 1 {z = 13}
F
Parte do senão:
{y = 10 e y > 0} z = y 1 3 {z = 13}
{?} z = y 1 3 {z = 13}
{y = 10 e y > 0} z = y 1 3 {z = 13}
{?} z = y 1 3 {z = 13}
y 1 3 = 13
y = 10
y = 10 e y > 0
Capítulo
Demonstrações, Indução e
Teoria dos Números
2
Mas não fizemos demonstrações o tempo todo — demonstrações em lógica proposicional
e demonstrações em lógica de predicados? Sim, mas provamos argumentos universalmente
verdadeiros devido à sua estrutura interna — argumentos que eram tautologias (lógica pro-
posicional) ou fbfs válidas (lógica de predicados).
Suponha que queremos provar resultados sobre alguma área específica — física, geome-
tria, teoria dos números, álgebras de Boole etc. Ainda vamos querer demonstrar algo da forma
P Q, mas Q não será consequência de P por lógica pura, será devido a fatos adicionais que
são verdadeiros na área sob discussão. Fatos específicos de cada área tornam-se hipóteses
adicionais para a demonstração de que P Q nesse contexto específico. É claro que o truque
é saber reconhecer quais fatos serão relevantes para que você possa deduzir Q de P.
Demonstrações, em geral, não são tão formais como as dadas em lógica proposicional e
lógica de predicados. Elas são feitas, muitas vezes, como narrativas, em vez de um formato
passo a passo. As justificativas podem ser menos explícitas do que em uma demonstração
formal. Entretanto, isso não é desculpa para argumentos feitos de qualquer jeito, sem os de-
vidos cuidados; se for necessário, você tem que ser capaz de transformar sua demonstração
informal em uma demonstração formal, justificando cada passo. Se não puder fazer isso,
provavelmente sua demonstração informal está errada.
A Seção 2.1 apresenta algumas abordagens genéricas para demonstrações e fornece al-
gumas provas simples em “teoria dos números”, ou seja, sobre inteiros. A Seção 2.2 discute
uma técnica de demonstração especialmente importante em ciência da computação, indu-
ção matemática. A indução nos permite estender as ideias sobre correção de programas,
introduzidas na Seção 1.6, para incluir laços (Seção 2.3). A Seção 2.4 explora tópicos adi-
cionais sobre teoria dos números, como o Teorema Fundamental da Aritmética, números
primos e máximo divisor comum.
17
18 Guia de Estudos Online
Solução:
Passo 1. Compreenda todos os termos.
Passo 4. Para terminar a demonstração por absurdo, deduza alguma situação impossível.
n2 1 n 1 1 = pq em que p e q são inteiros diferentes de 1.
n2 1 n 1 1 2 pq = 0 .........???
n2 1 n 2 pq = 21 .........???
n( n 1 1) 2 pq = 21 .........???
Sem saída?
Contraexemplo!
Solução:
Passo 1. Compreenda todos os termos.
n4 – n2 ser divisível por 3 significa que n4 – n2 = 3k para algum inteiro k.
Guia de Estudos Online 19
n4 2 n2 = n(n)(n 1 1)(n 2 1)
n = 2: 24 2 22 = 12 = 2*2*3*1
n = 3: 34 2 32 = 72 = 3*3*4*2
n = 4: 44 2 42 = 240 = 4*4*5*3
Solução:
Passo 1. Compreenda todos os termos.
n2 – 2 ser divisível por 3 significa que n2 – 2 = 3k para algum inteiro k.
Suponha que n2 = 3k 1 2
Suponha que n2 = 3k 1 2.
20 Guia de Estudos Online
Solução:
Como queremos demonstrar alguma coisa para todos os inteiros positivos, a indução mate-
mática é uma técnica de demonstração apropriada.
O caso básico é n = 1.
Caso básico
n = 1:
1 = (1/2)(3*12 – 1)
= (1/2)(3 – 1)
= (1/2)(2)
=1
Verdade
Mostrar: Hipótese:
1 1 4 1 7 1 ... 1 (3(k 1 1) – 2) = (1/2)[3(k 1 1)2 – (k 1 1)] 1 1 4 1 7 1 ... 1 (3k – 2) = (1/2)(3k2 – k)
1 1 4 1 7 1 ... 1 (3(k 1 1) – 2) =
1 1 4 1 7 1 ... 1 (3k – 2) 1 (3(k 1 1) – 2)
Mostrar: Hipótese:
1 1 4 1 7 1 ... 1 (3(k 1 1) – 2) = (1/2)[3(k 1 1)2 – (k 1 1)] 1 1 4 1 7 1 ... 1 (3k – 2) = (1/2)(3k2 – k)
1 1 4 1 7 1 ... 1 (3(k 1 1) – 2) =
1 1 4 1 7 1 ... 1 (3(k 1 1) – 2) =
1 1 4 1 7 1 ... 1 (3k – 2) = (3(k 1 1) – 2) = (1/2)(3k2 – k) 1 (3(k 1 1) – 2)
= (1/2)(3k2 – k) 1 (3k 1 3 – 2)
= (1/2)(3k2 – k) 1 (3k 1 1)
= (1/2)(3k2 – k) 1 (1/2)(6k 1 2)
= (1/2)[3k2 – k 1 6k 1 2]
= (1/2)[3k2 1 5k 1 2]
= (1/2)[3k2 1 6k 1 3 – k – 1]
= (1/2)[3(k 1 1)2 – (k 1 1)]
Solução:
Seja P(n) a afirmação n = 2p + 3q, em que p e q são inteiros não negativos. O problema é
mostrar que P(n) é verdade para todo n ≥ 4.
Problema:
Prove que n = 2p + 5q para todo n ≥ 4.
Solução:
Caso básico
Verdade
Problema:
Prove que n = 2p + 5q para todo n ≥ 4.
Solução:
k + 1 = (k 2 1) + 2.
P(k + 1) depende de P(k – 1), não de P(k). Use o segundo princípio de indução.
Suponha que P(r) é verdade, 4 ≤ r ≤ k. Mostre P(k + 1).
Para k – 1 ≥ 4, é preciso que k + 2 ≥ 6.
P(4) verdade
P(5): 5 = 0*2 + 1*5. verdade
P(4) verdade, P(5) verdade.
Suponha que P(r) é verdade, 4 ≤ r ≤ k. Mostre P(k + 1).
Ilustração:
4 = 2*2 + 0*5
5 = 0*2 + 1*5
6 = 4 + 2 = (2*2 + 0*5) + 2 = 3*2 + 0*5
7 = 5 + 2 = (0*2 + 1*5) + 2 = 1*2 + 1*5
8 = 6 + 2 = (3*2 + 0*5) + 2 = 4*2 + 0*5
9 = 7 + 2 = (1*2 + 1*5) + 2 = 2*2 + 1*5
10 = 8 + 2 = (4*2 + 0*5) + 2 = 5*2 + 0*5 = 0*2 + 2*5
Guia de Estudos Online 23
Em nossa busca por métodos formais para demonstrar a correção de programas, encontra-
mos regras de inferência para tratar comandos de atribuição e condicionais. O único outro
tipo de trechos de programa que precisamos discutir são laços. Uma regra de inferência para
a demonstração de correção de um laço depende da existência de um invariante de laço —
uma relação que seja verdadeira antes da entrada no laço e que permaneça verdadeira depois
de cada iteração. Como o número de iterações é arbitrário, demonstramos invariantes de
laço usando indução matemática.
Solução:
Use a Regra de Inferência do Laço.
Problema:
Prove a correção do segmento de programa
i=1
j=x
B
enquanto (i n) faça
{
S j=j+x
P
i=i+1
}
Solução:
Use a Regra de Inferência do Laço.
A condição B é “i n”.
24 Guia de Estudos Online
Queremos {Q}s{Q B9}, que significa que tanto Q quanto B9 devem ser verdadeiras
depois da execução de s.
A condição j = nx também deve ser verdadeira depois da execução de s, de modo que
Q B9 tem que ser j = nx.
B9 é i = n.
Q é a condição j = ix.
Q(n): jn = inx.
Solução:
Prove o invariante do laço.
Q(n): j = ix depois de n passagens pelo laço.
Caso básico
n = 0: j0 = x, i0 = 1, logo j0 = i0x
Problema:
Prove a correção do segmento de programa.
i=1
j=x
enquanto (i n) faça
{
j=j+x
i=i+1
}
//j agora tem o valor nx
retorne j
Solução:
Prove o invariante do laço.
Q(n): j = ix depois de n passagens pelo laço.
Suponha Q(k): jk = ik x
Mostre Q(k + 1): jk+1 = ik+1x
jk+1 = jk + x ik+1 = ik + 1
= ik x + x hipótese de indução
= (ik + 1)x colocando x em evidência
= (ik + 1)x = (ik + 1 = ik + 1)
A teoria dos números consiste — surpresa! — no estudo dos números, em geral os intei-
ros positivos. Como estamos todos familiarizados com esse sistema numérico, conhecemos
Guia de Estudos Online 25
bem um monte de resultados de teoria dos números. Mas muitas conjecturas — fáceis de
enunciar e de compreender — permanecem sem demonstração.
Um resultado bem conhecido é que qualquer inteiro positivo maior ou igual a 2 pode
ser escrito de maneira única como um produto de números primos. Por exemplo, 50 = 2*52;
2 e 5 são primos e nenhum outro produto de primos tem o valor 50. A demonstração desse
Teorema Fundamental da Aritmética envolve, é claro, propriedades de números primos
(inteiros maiores do que 1 divisíveis apenas por 1 e por eles mesmos). Também envolve o
máximo divisor comum entre dois inteiros positivos a e b.
O algoritmo de Euclides da Seção 2.3 é um método para encontrar o mdc(a, b), mas
também pode ser usado para revelar os coeficientes inteiros i e j que tornam o mdc(a, b)
uma combinação linear ia + jb de a e b. De fato, o mdc(a, b) é a menor combinação linear
positiva de a e b. Se mdc(a, b) = 1, então a e b são primos entre si. Por exemplo, 4 e 15
são primos entre si, embora nenhum deles seja um número primo. Poderíamos perguntar
quantos números menores ou iguais a 15 têm essa propriedade (4 é um desses números).
O resultado pode ser expresso usando a função fi de Euler, j(15). Como 15, expresso como
produto de primos, é igual a 3*5, j(15) tem o valor 2*4 = 8. Os oito números são 1, 2, 4, 7,
8, 11, 13, 14.
Solução:
Use o algoritmo de Euclides para encontrar mdc(2268, 735) e, “trabalhando de trás para a
frente”, encontre i.
2268 = 3*735 + 63
735 = 11*63 + 42
63 = 1*42 + 21
42 = 2*21 + 0
21 = 63 2 1*42
42 = 735 2 11*63
63 = 2268 2 3*735
21 = 63 2 1*42 (Equação 1)
= 63 2 1*[735 2 11*63] (Equação 2)
= 12*63 2 1*735 (simplificando)
= 12*[2268 2 3*735] 2 1*735 (Equação 3)
= 12*2268 2 37*735 (simplificando)
21 = 12*2268 2 37*735
Capítulo
Recursividade, Relações de
Recorrência e Análise de Algoritmos
3
Uma definição recorrente inclui a coisa sendo definida como parte da definição. Em par-
ticular,
S(1) = 1
S(n) = 5S(n 2 1) + (n 2 1) para n ≥ 2
Você deve ser capaz de aplicar uma definição recorrente para gerar coisas que fo-
ram definidas recursivamente ou testar se algum item específico pode ser gerado dessa
forma.
Solução:
Decida quais cadeias podem ser geradas pela “receita”.
Todas as quatro cadeias começam com pq ou qp — até aqui tudo bem.
Cadeia (a): pq | q = pqX onde X = q > C
pqq > C
Solução:
Cadeia (b): pq | l mas l R C
pq R C
Cadeia (c): pq | pp mas pp R C
pqpp R C
Cadeia (d): qp | qpq
(1) S(1) = a
(2) S(n) = cS(n 2 1) + g(n) n≥2
Você então pode resolver tal relação de recorrência identificando c e g(n) e substituindo
na solução geral, embora essa não seja uma expressão em forma fechada até que a soma
seja calculada.
Relações de recorrência lineares homogêneas de segunda ordem com coeficientes
constantes são da forma
sujeita às condições iniciais (casos básicos) S(1) = a e S(2) = b. Sua solução depende da
resolução da “equação característica”
t 2 2 c1t 2c2 = 0
(1) S(1) = a
(2) S(n) = cS(n/2) + g(n) para n ≥ 2, n = 2m.
Essa não é uma relação de primeira ordem nem de segunda ordem, já que o valor de
S(n) não depende do termo anterior nem dos dois termos anteriores, mas de um valor na
metade do caminho. A fórmula da solução geral é
−n
log
S(n) = clog n S(1)=+ c(log n)−2i g(2i)
i=
=1
S(1) = 3
S(n) = 3S(n 2 1) + 3 n≥2
Solução:
Use o método expandir/conjecturar/verificar.
Expanda:
S(n) = 3S(n 2 1) + 3
= 3[3S(n 2 2) + 3] + 3 = 32S(n 2 2) + 32 + 3
= 32[3S(n 2 3) + 3] + 32 + 3 = 33S(n 2 3) + 33 + 32 + 3
= 3kS(n 2 k) + 3k + 3k 2 1 + ... + 32 + 3
Guia de Estudos Online 29
Quando n – k = 1 e k = n – 1,
= 3n 2 1 S(1) + 3n 2 1 + 3n 22 + ... + 32 + 3
= 3n + 3n 2 1 + 3n 22 + ... + 32 + 3
S(n) = 3n + 3n 2 1 + 3n 22 + ... + 32 + 3
S(n) = 3 2 3*3n = 3 2 3n 1 1 = 3n 1 12 3
123 22 2
S(n) = 3n 1 12 3
2
S(n) = 3n 1 12 3
2
= 3 3k 1 12 3 1 3 (hipótese de indução)
2
= 3k 1 22 32 1 6 = 3k 1 22 3 (álgebra)
2 2 2
S(1) = 3
S(n) = 3S(n 2 1) 1 3 n ≥ 2
Solução:
Use a fórmula geral para a solução de uma relação de recorrência linear de primeira ordem
com coeficientes constantes.
Sabemos que a solução geral é da forma
S(n) = 3S(n 2 1) 1 3
c=3
g(n) = 3
30 Guia de Estudos Online
−
n
S(n) = cn21 S(1)=+ cn2ig(i)
−
i=
=2
−n −
n
= 3n 2 1 S(1)=+ 3n 2 −
i
(3) = 3n 21 (3)=+ + 3n −
2i+1
i=
=2 i=
=2
= 3n + 3n 2 1 + 3n 22 + ... + 32 + 3
S(n) = 3n + 3n 2 1 + 3n 22 + ... + 32 + 3
S(n) = 3 2 3*3n = 3 2 3n 1 1 = 3n 1 12 3
123 22 2
Solução:
Use a solução geral para relações de recorrência da forma
n
(
S(n) = cS 2 + g(n)
(
Forma geral:
n
(
S(n) = cS 2 + g(n)
(
n
(
S(n) = 2S 2 + 4
(
c=2 g(n) = 4 para todos os valores do argumento n
−n
log
S(n) = 2log n S(1)=+ n) 2 i
2(log− (4)
i=1
=
Guia de Estudos Online 31
Simplifique:
−n
log
S(n) = 2log n S(1)=+ 2(log n)−2 i (4) (2log n2 n)
i=1
=
−n
log
n) 2 i
= 2n=+ 2(log − (4)
i=1
=
Simplifique:
−n
log
S(n) = 2n=+ 2(log n)−2 i (4)
i=1
=
−n
log
S(n) = 2n +=4 2(log n)−2 i
i=1
=
Simplifique:
−n
log
S(n) = 2n +=4 2(log n)−2 i
i=1
=
Simplifique:
S(n) = 2n + 4[2log n 2 1]
Simplifique:
S(n) = 2n + 4[2log n 2 1]
= 2n + 4[n2 1]
= 6n 2 4
Muitas vezes estamos interessados em analisar a eficiência de um algoritmo. Para isso, de-
cidimos qual é a “unidade de trabalho” básica efetuada pelo algoritmo e contamos o número
de vezes em que é efetuada uma unidade de trabalho quando o algoritmo é executado. Esse
número, em geral, é uma função do tamanho n da entrada do algoritmo — quanto maior a
entrada, maior o trabalho para processá-la. Mas o trabalho pode não crescer de modo linear
com o tamanho da entrada; pode ocorrer que, se a entrada for dobrada, o trabalho não au-
mente por um fator de dois, mas por um fator de dois ao quadrado ou até mais!
Para um algoritmo direto, a análise pode ser feita, muitas vezes, simplesmente olhando-
se um esquema do pseudocódigo do algoritmo. Se a unidade de trabalho aparecer dentro de
um laço de para (um laço com contador) que vai de 1 até n, então a unidade de trabalho será
executada n vezes. Mas se o algoritmo for recursivo, o número de execuções de uma unidade
de trabalho como função do tamanho n da entrada será, em geral, expresso por uma relação
de recorrência em n. Nesse caso, a análise do algoritmo envolve a resolução de uma relação de
recorrência. Aprendemos diversas técnicas para resolver relações de recorrência na Seção 3.2.
Versão iterativa:
função Máximo(lista L)
i=1
max = L[i]
Solução:
Identifique a unidade de trabalho e determine o número de vezes que ela é executada quando
o algoritmo roda.
A versão iterativa do algoritmo percorre a lista do princípio ao fim, atualizando o valor
máximo se for encontrado um elemento maior na lista.
O trabalho fundamental executado por esse algoritmo é comparar elementos da lista
com o valor atual de max.
Essa unidade de trabalho ocorre dentro de um laço que vai de 2 até n, logo n – 1 vezes. Por-
tanto, o número de comparações é n – 1 (em todos os casos — pior caso, caso médio, melhor caso).
Problema:
Analise uma versão iterativa e uma versão recursiva de um algoritmo para encontrar o ele-
mento máximo em uma lista com n elementos L[1], L[2], . . ., L[n].
Solução:
A versão recursiva do algoritmo tem como caso básico uma lista com um elemento. Caso
contrário, encontra-se o valor máximo de cada metade da lista e o maior desses valores é o
valor máximo geral.
A unidade de trabalho é comparação entre elementos na lista, mas, por causa da recor-
rência, é difícil ver quantas vezes essa operação é executada.
Seja C(n) = o número de comparações feitas para se encontrar o máximo em uma lista
com n elementos.
Então C(1) = 0.
Seja C(n) = o número de comparações feitas para se encontrar o máximo em uma lista
com n elementos.
Então C(n/2) representa o número de comparações feitas para se encontrar o máximo
em uma lista com n/2 elementos.
C(1) = 0
C(n) = C(n/2) + C(n/2) + 1
= 2C(n/2) + 1
C(1) = 0
C(n) = 2C(n/2) + 1
n
C(n) = cC + 2 ( ( g(n)
34 Guia de Estudos Online
Forma geral:
c = 2, g(n) = 1
Resolva
C(1) = 0
C(n) = 2C(n/2) + 1
c = 2, g(n) = 1
Solução geral:
−
logn
C(n) = clogn C(1)=+ −i g(2i )
clogn 2
i=1
=
Meu caso:
−
n −
n
C(n) = 2logn(0)=+ 2logn −
2i
(1) = 0=+ 2logn −
2i
i=1
= i=1
=
Resolva
C(1) = 0
C(n) = 2C(n/2) + 1
Solução:
C(n) = n 2 1
Capítulo
Conjuntos, Combinatória
e Probabilidade
4
A Seção 4.1 introduz (embora nunca defina formalmente) o conceito de conjunto. Conjuntos
podem ser combinados e manipulados de diversas maneiras. Conjuntos podem ser finitos
ou infinitos, e existem diversos “tamanhos de infinito”. Entretanto, iremos nos preocupar
principalmente com conjuntos finitos. Em particular, estaremos interessados no número de
elementos pertencentes a algum conjunto finito.
As Seções de 4.2 a 4.4 fornecem diversas técnicas para resolver problemas de conta-
gem ou combinatórios. Essas técnicas incluem as dadas a seguir, que também podem ser
misturadas.
Embora o termo “conjunto” não tenha sido definido formalmente, significa, informal-
mente, uma coleção não ordenada de objetos caracterizados por alguma propriedade em
comum. Assim,
descreve o conjunto dos inteiros pares. Um conjunto importante é o conjunto vazio >, o
conjunto que não tem elemento algum.
35
36 Guia de Estudos Online
As identidades básicas que governam essas operações estão listadas na Seção 4.1. Note
que elas vêm em pares, cada identidade tendo uma identidade dual obtida trocando-se
união por interseção e vice-versa, e trocando-se o conjunto vazio pelo conjunto universal
e vice-versa.
Em um conjunto finito com k elementos, podemos listar todos os elementos: s1, s2, ..., sk.
Um conjunto enumerável é um conjunto infinito no qual é possível enumerar os elementos
de tal maneira que cada elemento do conjunto apareça nessa enumeração. Por exemplo, o
conjunto dos inteiros pares positivos é um conjunto enumerável, pois 2, 4, 6, 8, 10, 12, ...
é uma enumeração do conjunto inteiro. O argumento da diagonalização de Cantor mostra
que existem conjuntos grandes demais para serem enumerados; tais conjuntos são ditos não
enumeráveis.
Encontre A B, A B, B9 e B92 A.
Solução:
Aplique as definições dessas operações nos conjuntos.
S = todos os inteiros entre 1 e 15, inclusive
A = {1, 4, 9}
B = {9, 10, 11, 12, 13, 14, 15}
Solução:
Esse é um problema de contagem. Analise os eventos.
Eventos disjuntos:
maneiras de escolher placas regulares + maneiras de escolher placas customizadas
maneiras de escolher placas regulares: escolha o caractere 1, depois o caractere 2, depois
o caractere 3, depois o caractere 4, depois o caractere 5 e depois se é simples ou ambiental
26*26*10*10*10*2
26*26*26*26*26*2
26*26*10*10*10*2 + 26*26*26*26*26*2
38 Guia de Estudos Online
|A B| = | A| + | B| 2| A B|.
A fórmula pode ser estendida para qualquer número finito de conjuntos finitos.
O Princípio das Casas de Pombo diz que, se você tentar colocar mais de k coisas em k
caixas, pelo menos uma caixa terminará com mais de uma coisa. Esse princípio pode ser
usado para resolver determinados problemas de contagem se você puder identificar corre-
tamente as coisas e as caixas.
Solução:
Identifique os conjuntos e use o Princípio de Inclusão e Exclusão.
A = conjunto de surfistas
B = conjunto de corredores
C = conjunto de ciclistas
| A B C| = 22
| A| = 10
| B| = 16
| C| = 13
| A B| = 7
| A C| = 6
| B C| = 9
|A B C| = | A| + | B| + | C| 2 | A B| 2 | A C| 2 | B C| + | A B C|
22 = 10 + 16 + 13 2 7 2 6 2 9 + | A B C|
|A B C| = 5
Guia de Estudos Online 39
12 alunos de biologia
9 alunos de química
10 alunos de ciência da computação
5 alunos de geologia
7 alunos de matemática
2 alunos de física
Ninguém está fazendo dois cursos ao mesmo tempo. Deve-se escolher um conselho com
5 estudantes. De quantas maneiras é possível formar tal conselho se
Solução:
Devemos selecionar subconjuntos de pessoas de várias maneiras em um grupo. Use permu-
tações ou combinações.
40 Guia de Estudos Online
b. O conselho tem que ter exatamente 2 alunos de biologia e 1 aluno de ciência da com-
putação * maneiras de escolher 2 alunos de biologia * maneiras de escolher 1 aluno de
ciência da computação * maneiras de escolher o resto = C(12,2) * C(10, 1) * C(23, 2)
Dadas duas quantidades a e b, o binômio (a + b) pode ser elevado a uma potência inteira
não negativa n. O valor de
(a + b)n
(a + b)n = C(n, 0)anb0 + C(n, 1)an21b1 + C(n, 2)an22b2 +...+ C(n, k)an2kbk +...+ C(n, n)a0bn
A fórmula é fácil de lembrar; comece o primeiro termo com “a” elevado a n e “b” ele-
vado a 0. Para cada termo sucessivo, diminua a potência de a de 1 e aumente a potência de
b de 1. Os coeficientes são, simplesmente, as diversas combinações de r coisas escolhidas
entre n coisas, com r variando de r = 0 até r = n, que formam a n-ésima linha do triângulo
de Pascal.
A fórmula também permite que você encontre qualquer parcela particular na expansão
binomial. O termo
C(n, k)an2kbk
(3c – 2)6
Guia de Estudos Online 41
Solução:
Use o teorema binomial.
Passo 1. Identifique a, b e n.
(a + b)n
a: 3c
b: –2
n: 6
(3c – 2)6 = ([3c] + [–2])6 = C(6, 0)(3c)6(–2)0 + C(6, 1)(3c)5(–2)1 + C(6, 2)(3c)4(–2)2 +
C(6, 3)(3c)3(–2)3 + C(6, 4)(3c)2(–2)4 + C(6, 5)(3c)1(–2)5 + C(6,6)(3c)0(–2)6
n!
C(n, r) =
r!(n 2 r)!
em
(3c – 2)6 = C(6, 0)(3c)6(–2)0 + C(6, 1)(3c)5(–2)1 + C(6, 2)(3c)4(–2)2 + C(6, 3)(3c)3(–2)3
+ C(6, 4)(3c)2(–2)4 + C(6, 5)(3c)1(–2)5 + C(6, 6)(3c)0(–2)6
obtemos
6! 6! 6!
= (3c)6(–2)0 + (3c)5(–2)1 + (3c)4(–2)2 +
0!(6 2 0)! 1!(6 2 1)! 2!(6 2 2)!
6! 6! 6!
(3c)3(–2)3 + (3c)2(–2)4 + (3c)1(–1)5 +
3!(6 2 3)! 4!(6 2 4)! 5!(6 2 5)!
6!
(3c)0(–2)6
6!(6 2 6)!
Solução:
Use o teorema binomial.
(a + b)n
(7x + 3y)12
a: 7x
b: 3y
n: 12
k: 7
12! 12 . 11 . 10 . 9 . 8 5 7 5 7
= (7x)5(3y)7 = 73xy
7!(12 2 7)! 1.2.3.4.5
|E|
P(E) =
|S|
Por exemplo, ao se jogar uma moeda equilibrada, uma em que é igualmente provável
dar cara ou coroa, a probabilidade de dar cara é ½, já que o espaço amostral contém dois
valores, C (cara) e K (coroa), enquanto o evento desejado contém apenas um valor, C.
O espaço amostral ou o evento poderia ser formado como uma união ou interseção
de conjuntos; nesse caso, encontrar o tamanho do espaço amostral ou do evento poderia
envolver o princípio de adição ou o de multiplicação, o princípio de inclusão e exclusão ou
a fórmula para a combinação de r coisas escolhidas em um conjunto com n coisas, C(n, r).
Como a probabilidade de E mede a razão entre o tamanho de um subconjunto de S e o
tamanho do próprio S, seu valor máximo é 1,0, o que ocorrerá se o evento for todo o espaço
amostral (acontece com certeza). O valor mínimo é 0,0, o que ocorrerá se o evento for o
conjunto vazio (nunca acontece).
Quando todos os resultados em S são igualmente prováveis, então, para um dado evento
E, cada resultado em E tem uma probabilidade igual a 1/|S|. A probabilidade de E é a soma
de cada uma dessas probabilidades separadas:
|E| − 1 −
P(E) = == ==− p(xi)−
| S | xi=E% | S | xi=E%
> >
Guia de Estudos Online 43
Se os resultados em S não forem igualmente prováveis, pode ser atribuída uma proba-
bilidade a cada resultado distinto xi. Usando essa distribuição de probabilidade, a probabi-
lidade do evento E, novamente, é igual a
−
==
P(E) p(xi)−
xi=
>E%
Solução:
Encontre o tamanho do espaço amostral e o tamanho de cada evento.
S = seleção de 2 coisas entre 21
21! 21*20
| S | = C(21,2) = = = 210
19!2! 2
| S | = 210
E = 2 carros novos
12! 12*11
| E | = C(12,2) = = = 66
10!2! 2
| S | = 210
E = 2 pacotes de férias
9! 9*8
| E | = C(9,2) = = = 36
7!2! 2
| S | = 210
45
46 Guia de Estudos Online
A tabela a seguir lista algumas propriedades que uma relação binária r em um conjunto
S pode ter.
Informalmente, a reflexividade significa que todo elemento no conjunto está relaciona-
Nome da
Definição
Propriedade
Reflexividade (∀x)(x > S (x, x) > r)
Simetria (∀x)(∀y)(x > S y>S (x, y) > r ( y, x) > r)
Transitividade (∀x)(∀y)(∀z)(x > S y>S z>S (x, y) > r ( y, z) > r (x, z) > r)
Antissimetria (∀x)(∀y)(x > S y>S (x, y) > r ( y, z) > r x = y)
do consigo mesmo. A simetria diz que, se x estiver relacionado com y, então y estará relacio-
nado com x. A transitividade afirma que, se x estiver relacionado com y e y estiver relacionado
com z, então x estará relacionado com z. A antissimetria diz que a única maneira de x estar
relacionado com y e y estar relacionado com x ao mesmo tempo é x ser igual a y.
Uma relação binária em um conjunto que é reflexiva, antissimétrica e transitiva é uma
ordem parcial no conjunto. A característica que distingue uma ordem parcial de outras
relações binárias (em um conjunto finito) é que ela pode ser visualizada por meio de um
diagrama de Hasse. Uma relação binária em um conjunto que é reflexiva, simétrica e tran-
sitiva é uma relação de equivalência no conjunto. A característica que distingue uma rela-
ção de equivalência de outras relações binárias é que ela forma uma partição do conjunto,
dividindo-o em classes de equivalência distintas e disjuntas. Depois as classes podem ser
tratadas como objetos.
Solução:
Aplique as definições das diversas propriedades. Mas, primeiro, compreenda o conjunto S.
S consiste em todas as cadeias de comprimento finitas formadas pelos símbolos “p” e “q”,
tais como p, ppqqq e qpqpqp.
|p| = 1
|ppqqq| = 5
|qpqpqp| = 6
S é um conjunto infinito.
Guia de Estudos Online 47
|pqq| = 3
Exemplo:
1. Seja x = p, de modo que |x| = 1.
2. Para que x r y, |y| tem que ser ímpar. Seja y = qqq.
3. Então, para que y r z, |z| também tem que ser ímpar. Seja z = q.
4. Então |xz| = |pq| = 2 e x r z.
Demonstração:
1. Suponha que |x| é ímpar.
2. Para que x r y, |y| tem que ser ímpar.
3. Então, para que y r z, |z| também tem que ser ímpar.
4. Então |xz| é par (concatenação de duas cadeias ímpares) e x r z.
5. Suponha que |x| é par.
6. Para que x r y, |y| tem que ser par.
7. Então, para que y r z, |z| também tem que ser par.
8. Então |xz| é par (concatenação de duas cadeias pares) e x r z.
r é transitiva
r é reflexiva, simétrica e transitiva, logo r é uma relação de equivalência em S.
Solução:
Pense sobre quais cadeias estão relacionadas entre si.
[x] = { y | y > S x r y}
se |x| for par, então [x] = {cadeias de comprimento par em S}
48 Guia de Estudos Online
cadeias de
comprimento
ímpar
Dado um conjunto de tarefas em que algumas têm que ser completadas antes que outras
possam começar, podemos usar essa informação de “pré-requisitos” para definir uma ordem
parcial no conjunto de tarefas. Suponha que é dado um tempo de finalização para cada ta-
refa. Então o diagrama de Hasse para essa ordem parcial, desenhado de lado, é chamado de
um diagrama PERT (do nome em inglês, Program Evaluation and Review Technique, que
significa Técnica de Avaliação e Revisão de Programas). Logo, um diagrama PERT é um
grafo direcionado, em que as tarefas que têm que ser completadas primeiro ficam à esquerda
das que são feitas depois. Os caminhos ao longo do diagrama PERT podem ser traçados para
se determinar o tempo mínimo de finalização do conjunto completo de tarefas, e as tarefas
ao longo do caminho crítico podem ser identificadas (as tarefas que, se atrasarem, atrasarão
a finalização do conjunto inteiro de tarefas).
Uma ordenação topológica em uma ordem parcial em um conjunto finito é uma ordem
total que preserva a relação de predecessor. Se uma ordem parcial representar um conjunto
de tarefas, então uma ordenação topológica fornecerá um modo de as tarefas serem com-
pletadas sequencialmente. Uma ordenação topológica para uma ordem parcial não é única,
em geral.
Solução:
Identifique os pré-requisitos de cada tarefa e use essa relação como base para a ordem parcial.
2(75)
1(30)
3(80)
4(70)
2(75)
As tarefas 5, 6 e 7 dependem da 4.
5(20)
1(30)
3(80) 7(45)
4(70)
2(75) 6(25)
5(20)
1(30) 9(20)
3(80) 7(45)
4(70)
2(75) 8(45)
6(25)
Solução:
Use o Algoritmo de Ordenação Topológica; remova sucessivamente os elementos minimais
do conjunto de nós e adicione-os à lista totalmente ordenada.
50 Guia de Estudos Online
Elementos minimais: 1 e 2
Ordenação Total: 1
5(20) 10(65)
9(20)
3(80) 7(45)
11(50)
4(70)
8(45) 12(30)
2(75)
6(25)
Solução:
Elemento minimal: 2
Ordenação Total: 1, 2
5(20) 10(65)
9(20)
3(80) 7(45)
11(50)
4(70)
8(45) 12(30)
6(25)
Solução:
Elementos minimais: 3 e depois 4
Ordenação Total: 1, 2, 3, 4
5(20) 10(65)
9(20)
7(45)
11(50)
8(45) 12(30)
6(25)
Solução:
Elementos minimais: 5, 6, 7
Ordenação Total: 1, 2, 3, 4, 7, 6, 5
9(20) 10(65)
11(50)
8(45) 12(30)
Solução:
Elementos minimais: 8, 9 e depois 10, 11, 12
Ordenação Total: 1, 2, 3, 4, 7, 6, 5, 8, 9, 10, 11, 12
O poder de um banco de dados vem da maneira em que as operações podem ser exe-
cutadas em relações para criar relações novas. A operação de restrição seleciona determi-
nadas linhas em uma tabela de relação de acordo com as características de alguns dos atri-
butos; a operação de projeção seleciona determinadas colunas. A operação de junção liga
duas tabelas que tenham um atributo em comum. Podem ser executadas diversas pesquisas
em um banco de dados relacional combinando essas operações de maneiras adequadas.
A álgebra relacional, a linguagem internacional padrão de banco de dados relacional,
SQL, e o cálculo relacional fornecem sintaxe para combinar essas operações em um banco
de dados. São, portanto, linguagens para formular pesquisas em bancos de dados.
Na manutenção de um banco de dados — adicionar informações novas, modificar ou
apagar informações existentes — é preciso tomar cuidado para preservar a integridade
(consistência) do banco de dados. A integridade da entidade diz que cada tupla tem que
ter um conjunto completo de valores não nulos para os atributos de sua chave primária. A
integridade dos dados diz que os valores dos atributos de uma tupla têm que vir do domí-
nio apropriado. E a integridade referencial diz que os valores de uma chave estrangeira
têm que estar de acordo com os valores das chaves primárias nas outras relações (ou ser
nulos), de modo que não ocorram exclusões ou inclusões “parciais”.
Empregado
Nome Idade Cargo
Paula Costa 32 Cortador de tecidos
Samanta Teixeira 41 Comprador
Ana Wong 37 Projetista
Artur Santos 25 Cortador de tecidos
Carla Williams 33 Vendedor
Shirley Quaresma 45 Vendedor
EscalaDePagamento
Cargo Valor
Projetista 18,50
Comprador 14,00
Vendedor 12,50
Cortador de tecidos 8,75
52 Guia de Estudos Online
Solução:
Execute as operações para produzir tabelas novas.
Empregado
Nome Idade Cargo
Paula Costa 32 Cortador de tecidos
Samanta Teixeira 41 Comprador
Ana Wong 37 Projetista
Artur Santos 25 Cortador de tecidos
Carla Williams 33 Vendedor
Shirley Quaresma 45 Vendedor
EscalaDePagamento
Cargo Valor
Projetista 18,50
Comprador 14,00
Vendedor 12,50
Cortador de tecidos 8,75
Solução:
Execute as operações para produzir tabelas novas.
Resultado1
Nome Idade Cargo
Carla Williams 33 Vendedor
Shirley Quaresma 45 Vendedor
Resultado2
Nome Cargo
Paula Costa Cortador de tecido
Samanta Teixeira Comprador
Ana Wong Projetista
Artur Santos Cortador de tecido
Carla Williams Vendedor
Shirley Quaresma Vendedor
Resultado3
Nome Idade Cargo Valor
Paula Costa 32 Cortador de tecido 8,75
Samanta Teixeira 41 Comprador 14,00
Ana Wong 37 Projetista 18,50
Artur Santos 25 Cortador de tecido 8,75
Carla Williams 33 Vendedor 12,50
Shirley Quaresma 45 Vendedor 12,50
Guia de Estudos Online 53
a. álgebra relacional
b. SQL
c. cálculo relacional
Empregado
Nome Idade Cargo
Paula Costa 32 Cortador de tecidos
Samanta Teixeira 41 Comprador
Ana Wong 37 Projetista
Artur Santos 25 Cortador de tecidos
Carla Williams 33 Vendedor
Shirley Quaresma 45 Vendedor
EscalaDePagamento
Cargo Valor
Projetista 18,50
Comprador 14,00
Vendedor 12,50
Cortador de tecidos 8,75
Solução:
Encontre as operações relacionais apropriadas e expresse-as na sintaxe de cada abordagem.
a. álgebra relacional:
projeção de (junção de Empregado e (restrição de EscalaDePagamento onde Valor <
“15,00”) sobre Cargo) sobre Nome fornecendo Resultado4
b. SQL:
SELECT Nome
FROM Empregado, EscalaDePagamento
WHERE Empregado.Cargo = EscalaDePagamento.Cargo
AND Valor < “15.00”
f: 1 1
f (x): x + 1
Solução:
Aplique o teste padrão para cada propriedade.
Mas, primeiro, compreenda a função.
f (0) = 1
f (1) = 2
f (2) = 3
Visualize a função.
0 1 2 3 4 5 6
0 1 2 3 4 5 6
Não é sobrejetora
Guia de Estudos Online 55
0 1 2 3 4 5 6
0 1 2 3 4 5 6
É injetora
Para provar que não é sobrejetora, mostre que 0 é diferente de f (x) para todo x em 1.
Contradição! -1 R 1.
f = (4, 2, 3, 1)
g = (5, 2, 1, 3, 4)
Solução:
Determine o que f ∘ g e g ∘ f fazem com cada elemento do domínio.
( f ∘ g)(x) = f ( g(x))
f ∘ g = (4, 2, 3, 1) ∘ (5, 2, 1, 3, 4)
1 3
3 1
logo 1 1
f ∘ g = (4, 2, 3, 1) ∘ (5, 2, 1, 3, 4)
2 1
1 4
logo 2 4
f ∘ g = (2, 4 ...
56 Guia de Estudos Online
Ordem de grandeza é uma expressão geral para a “taxa de crescimento” de uma função.
Funções que têm a mesma ordem de grandeza são funções que crescem a taxas aproxima-
damente equivalentes quando seus argumentos ficam cada vez maiores. Usando o conceito
de ordem de grandeza, podemos classificar o trabalho executado por diversos algoritmos em
ordens de grandeza diferentes. Coeficientes constantes não afetam a ordem de grandeza, de
modo que podemos dizer que f (x) = 4x2 e g(x) = 15x2 têm a mesma ordem de grandeza; ambas
têm a mesma ordem de grandeza que x2. Isso poderia ser escrito como
f = Q(g) = Q(x2)
26 + n2 para ≥ 2
Solução:
Lembre-se do Teorema Mestre, verifique que essa relação de recorrência é da forma neces-
sária para aplicar o Teorema Mestre e faça os cálculos necessários.
Teorema Mestre
Considere a relação de recorrência
1 >0
=a + nc para ≥
b
em que n = bm, a e b são inteiros, a ≥ 1, b > 1 e c é um número real não negativo. Então
Teorema Mestre
a = 6, b = 2, c = 2
6 > 22
Teorema Mestre
a = 6, b = 2, c = 2
Dado um inteiro positivo n, a função módulo n opera em qualquer inteiro x da seguinte ma-
neira: divida x por n e escreva o resultado com um resto positivo.
x = qn + r, 0 ≤ r < n
Depois de construir a tabela, descreva o que acontece se for feita uma busca pelos
números 26 e 8.
Solução:
Construa a tabela de dispersão aplicando a função de dispersão a cada valor e usando listas
encadeadas em cada índice. Todas as listas na tabela inicial estão vazias.
0 l
1 l
2 l
3 l
4 l
5 l
6 l
21 mod 7 = 0
0 21 l
1 l
2 l
3 l
4 l
5 l
6 l
12 mod 7 = 5
15 mod 7 = 1
Guia de Estudos Online 59
0 21 l
1 15 l
2 l
3 l
4 l
5 12 l
6 l
14 mod 7 = 0
0 14 21 l
1 15 l
2 l
3 l
4 l
5 12 l
6 l
26 mod 7 = 5
54 mod 7 = 5
0 14 21 l
1 15 l
2 l
3 l
4 l
5 54 26 12 l
6 l
60 Guia de Estudos Online
26 mod 7 = 5
0 14 21 l
1 15 l
2 l
Não é igual,
3 l continue Sucesso
4 l
5 54 26 12 l
6 l
8 mod 7 = 1
0 14 21 l
1 15 l
2 l
3 l
Não é igual —
4 l falha
5 54 26 12 l
6 l
Solução:
Aplique os passos do algoritmo RSA.
Solução:
Eis os passos iniciais e as condições.
7 e 13 são primos
n = p*q = 7*13 = 91
j(n) = ( p 2 1) * (q 2 1) = 6*12 = 72
mdc(e, j(n)) = mdc (11, 72) = 1
0<T<n
e = 11, j(n) = 72
Guia de Estudos Online 61
72 = 6*11 + 6 ou 6 = 72 2 6*11
11 = 1*6 + 5 5 = 11 2 1*6
6 = 1*5 + 1 1 = 6 2 1*5
5 = 5*1 + 0
e = 11, j(n) = 72. Encontre d e f tais que 1 = d*e + f *j(n). Pelo algoritmo de Euclides,
6 = 72 2 6*11
5 = 11 21*6
1 = 6 21*5
Usando essas equações de baixo para cima, resolva para 1 como combinação linear de 11 e 72.
1 = 6 2 1*5
= 6 2 1[11 2 1*6] = 2*6 2 1*11
= 2*[72 2 6*11] 2 1*11 = 2*72 2 13*11 = 213*11 + 2*72
1 = 213*11 + 2*72
Manipule a combinação linear para obter um valor para d, 1 < d < j(n).
e = 11, j(n) = 72
1 = 213*11 + 2*72
= 213*11 + 11*72 + 2*72 2 11*72
= 59*11 2 9*72
d = 59
Codifique a mensagem T.
e = 11, n = 91, T = 12
Uma matriz é um arranjo retangular de valores. Matrizes de mesmo tamanho podem ser
somadas por meio da soma de seus elementos correspondentes. Se A e B forem matrizes
n 3 m, então C = A + B será a matriz n 3 m dada por
Para encontrar o produto matricial A . B, o número de colunas de A tem que ser igual
ao número de linhas de B. Assim, se A for n 3 m e B for m 3 p, o produto C = A . B será
a matriz n 3 p definida por
−
m
cij== aikbkj−
k=
=1
Multiplicando Matrizes
Problema:
Dadas as matrizes
−
−
= =
encontre A . B
Solução:
Siga as regras para a multiplicação de matrizes.
A é 2 3 3, B é 3 3 2. O resultado será uma matriz 2 3 2.
(4 3 2) + (3 3 4) + (22 3 0) = 8 + 12 + 0 = 20
(1 3 2) + (3 3 4) + (5 3 0) = 2 + 12 + 0 = 14
(1 3 (21)) + (3 3 3) + (5 3 3) = 21 + 9 + 15 = 23
= =
encontre A 3 B
Solução:
Siga as regras para a multiplicação booleana de matrizes.
A é 2 3 3, B é 3 3 3. O resultado será uma matriz 2 3 3.
3 =
3 =
3 =
3 =
Capítulo
Grafos e Árvores 6
Grafos são convenientes para visualizar certos tipos de informação, e muitas coisas bastante
úteis podem ser modeladas como grafos (redes de computadores, sistemas de comutação
telefônica e fluxo de informação em uma organização, para citar algumas). Árvores são ti-
pos especiais de grafos usadas, muitas vezes, para representar relações entre itens de dados.
A Seção 6.1 introduz um monte de terminologia sobre grafos. Define, também, o que
significa dois grafos serem isomorfos. Isomorfismo é um tópico que encontraremos nova-
mente; duas estruturas são isomorfas se uma é a imagem espelhada da outra, ou seja, as
duas se comportam da mesma forma sob um esquema apropriado de mudanças de nome.
Grafos isomorfos são nosso primeiro encontro com esse conceito. Grafos podem repre-
sentar visualmente itens (os nós do grafo) que têm determinadas relações (as arestas do
grafo). Dado um grafo, precisamos de um modo de armazenar suas informações sobre nós
e arestas em um computador, de modo que sua representação visual possa ser recriada mais
tarde. As escolhas usuais são as representações usando a matriz de adjacência ou a lista de
adjacência.
A Seção 6.2 apresenta a terminologia de árvores, representação para árvores binárias e
maneiras sistemáticas de “visitar” cada nó em uma árvore.
Árvores de decisão, que foram usadas no Capítulo 4 para resolver alguns problemas de
contagem, são usadas na Seção 6.3 para representar as ações de algoritmos. A análise de
árvores de decisão pode fornecer uma cota inferior para o trabalho necessário feito por um
algoritmo que usa comparação para procurar ou ordenar elementos em uma lista.
O algoritmo de codificação de Huffman, na Seção 6.4, usa árvores binárias para en-
contrar esquemas de codificação binária com comprimento variável para caracteres em um
arquivo. Esse esquema pode resultar em compressão significativa de dados, mas requer
uma análise do conteúdo do arquivo para ser aplicado.
Certifique-se de que você compreendeu o significado de cada um dos termos a seguir sobre
grafos:
• nó (vértice)
• aresta (arco)
• nós adjacentes
• laço
• arestas paralelas
• grafo simples
• grau de um nó
• grafo completo
64
Guia de Estudos Online 65
• caminho
• comprimento de um caminho
• grafo conexo
• ciclo
• grafo acíclico
• ponto inicial
• ponto final
• caminho
• nó acessível
Dois grafos G e H serão ditos isomorfos se existirem uma bijeção do conjunto de nós
de G no conjunto de nós de H e outra bijeção do conjunto de arestas de G no conjunto de
arestas de H tais que arcos correspondentes ligam pontos correspondentes. Se o grafo for
simples, então basta uma bijeção entre os nós, já que existe, no máximo, um arco entre dois
nós, de modo que a bijeção entre as arestas fica determinada. A bijeção entre os nós é um
isomorfismo.
Grafos isomorfos são estruturalmente idênticos, embora suas aparências físicas pos-
sam ser diferentes. Por exemplo, os dois grafos a seguir são isomorfos.
O isomorfismo está ilustrado a seguir. Note que nós adjacentes são levados em nós
adjacentes.
Nesse caso, é fácil ver que os grafos são estruturalmente idênticos: se o grafo à esquer-
da for “aberto” e colocado em linha reta, vai ficar igualzinho ao grafo à direita.
Muitas vezes pensamos em um grafo como uma representação visual de dados (nos
nós) e relações entre dados (quais vértices são adjacentes). Hoje em dia poderíamos arma-
zenar um arquivo de imagem, preservando, assim, uma representação visual do grafo. Mas
aí não teríamos como manipular os dados contidos nos nós. Além disso, a definição de um
grafo não inclui sua representação visual e podem ser feitas figuras diferentes para o mes-
mo grafo. De modo que não é a representação visual que é importante, e sim os dados e suas
relações de adjacência. Podemos armazenar essa informação em uma forma
Prove que Dois Grafos são Isomorfos ou Prove que Não São
Problema:
Prove que os dois grafos a seguir são isomorfos ou explique por que não são.
Solução:
Examine as propriedades dos dois grafos. Procure coisas que pode mostrar que não são
isomorfos.
Cada grafo tem 5 nós. Isso não mostra que não são isomorfos.
Cada grafo tem 6 arestas. Isso não mostra que não são isomorfos.
Ambos os grafos são simples.
Ambos os grafos são conexos.
Guia de Estudos Online 67
Ambos os grafos contêm ciclos. Isso não mostra que não são isomorfos.
Cada grafo contém três nós de grau 2.
Cada grafo contém dois nós de grau 3. Isso não mostra que não são isomorfos.
1 2
3 4
Solução:
Construa uma matriz n 3 n e preencha os elementos com base na adjacência.
_ _ _ _
_ _ _ _
A=
_ _ _ _
_ _ _ _
0 _ _ _
_ _ _ _
A=
_ _ _ _
_ _ _ _
0 1 1 1
_ _ _ _
A=
_ _ _ _
_ _ _ _
0 1 1 1
A= 1 1 0 1
_ _ _ _
_ _ _ _
0 1 1 1
A= 1 1 0 1
1 0 0 1
_ _ _ _
68 Guia de Estudos Online
0 1 1 1
A= 1 1 0 1
1 0 0 1
1 1 1 0
1 2 3 l
2 1 3 l
3 l
4 2 l
5 l
Solução:
Coloque a informação contida na lista de adjacência em forma visual.
2 3
2 3
2 3
2 3
4 5
Guia de Estudos Online 69
Certifique-se de que você compreende o significado dos seguintes termos sobre árvores:
• raiz
• nó filho
• nó pai
• nó interno
• nó folha
• profundidade de um nó
• profundidade de uma árvore
• árvore binária
• árvore binária cheia
Árvores binárias são particularmente úteis em ciência da computação, e são usadas repre-
sentações especiais para árvores binárias de modo a capturar as propriedades de filhos esquer-
dos e filhos direitos. Novamente, são possíveis representações com arrays ou com ponteiros.
Algoritmos para percurso em uma árvore em ordem simétrica, em pré-ordem ou em
pós-ordem fornecem maneiras sistemáticas de visitar todos os nós na árvore.
D E F
G H I
Solução:
Lembre-se das regras para o percurso em ordem simétrica.
Esquerda, Raiz, Direita
Considere a subárvore esquerda de a.
C
D E F
G H I
D E F
G H I
70 Guia de Estudos Online
Solução:
Lembre-se das regras para o percurso em ordem simétrica.
Esquerda, Raiz, Direita
Agora visite a raiz b.
Percurso: e, b, ...
C
D E F
G H I
D E F
G H I
D E F
G H I
Solução:
Identifique a comparação que ocorre em cada nó.
A lista consiste em
x: L[3]
x: L[3]
< >
x: L[1] x: L[5]
72 Guia de Estudos Online
[/=?
[/=? [/=?
[/=?
[/=? [/=?
[ /=?
/=?[/=? /=?[/=? /=?[/=?
/=?[/=? /=?[/=?
[/=?
[/=? [/=?
SURIXQGLGDGH
[ /=?
/=?[/=? /=?[/=? /=?[/=?
/=?[/=? /=?[/=?
Solução:
Leia os elementos da esquerda para a direita e insira cada um deles na árvore binária de
busca.
54
78 > 54
54
78
23 < 54
54
23 78
74 Guia de Estudos Online
""""
70 não está na árvore.
Um esquema de codificação usual para representar caracteres em forma binária é ASCII (do
inglês American Standard Code for Information Interchange, que significa Código Ameri-
cano Padrão para Troca de Informação). Ele associa um único código (palavra) binário de
8 bits a cada caractere. O padrão novo Unicode permite códigos de comprimento fixo de 8,
16 ou 32 bits para cada caractere. Usando códigos de comprimento fixo de n bits, o número
de bits necessário para armazenar um arquivo é, simplesmente, o produto do número de
caracteres no arquivo por n.
Um esquema de codificação de comprimento variável poderia economizar arma-
zenamento atribuindo cadeias binárias de comprimento menor aos caracteres usados
com mais frequência e de comprimento maior aos caracteres pouco usados. Para tal
esquema, seria necessário conhecer o conteúdo do arquivo a ser armazenado, a saber,
a frequência de ocorrência de cada caractere. Além disso, há o custo computacional
adicional para determinar que código usar para cada caractere. Logo esses esquemas
de compressão ou compactação de dados só são úteis para arquivos grandes que não
devem ser modificados.
Guia de Estudos Online 75
O código de qualquer caractere não deve ser o prefixo de um código para algum
caractere diferente. Isso evita falsos começos e voltas para trás ao decodificar uma ca-
deia binária. Tais códigos de prefixo podem ser representados como árvores binárias,
tendo os caracteres como folhas. Começar na raiz e percorrer o caminho até uma folha
dada revela o código binário para aquela folha, usando uma convenção de que todo ramo
esquerdo representa 0 e todo ramo direito representa 1. A profundidade da folha será,
então, o número de bits em seu código binário. Logo, o número total de bits no arquivo
será proporcional a
−
= −
(d(i)f(i))
= as
todas
folhas i
Caracteres r e b s m
Frequência 13 32 17 22 16
Solução:
Construa uma árvore de Huffman.
Ordene as frequências
13 16 17 22 32
17 22 29 32
13 16
76 Guia de Estudos Online
39
17 22 29 32
13 16
13 16 17 22
29 32 39
13 16 17 22
17 22 29 32
13 16
Some as duas frequências menores
100
39 61
17 22 29 32
13 16
39 61
17 22 29 32
13 16
39 61
17 22 29 32
b s e
13 16
r m
Capítulo
Já sabemos que um grafo direcionado sem arcos paralelos tem uma representação na forma
de uma matriz booleana de adjacência. Podemos também definir uma relação binária no
conjunto de nós do grafo: o nó i está relacionado com o nó j se existe uma aresta de i para j.
De qualquer uma dessas três formas — o grafo, a matriz booleana ou os pares ordenados na
relação de adjacência — pode-se encontrar as outras duas representações.
A acessibilidade em um grafo direcionado é uma questão importante. Se você é um nó
em uma rede de computadores, por exemplo, você quer ser acessível de outros computado-
res ou nunca vai receber seus e-mails (o que na verdade pode ser interessante!). Embora seja
fácil identificar nós não acessíveis em uma representação visual de um grafo direcionado
pequeno, isso não resolve o problema para grafos direcionados grandes. Precisamos de uma
solução algorítmica para o problema de acessibilidade.
Dois algoritmos são desenvolvidos na Seção 7.1, ambos envolvendo manipulação de
matrizes.
77
78 Guia de Estudos Online
1. Considere a coluna k + 1 em Mk
2. Para cada linha com 0 nessa coluna, copie essa linha e coloque em Mk + 1.
3. Para cada linha com 1 nessa coluna, faça a operação booleana ou dessa linha
com a linha k + 1 e coloque o resultado na linha correspondente em Mk + 1.
0 1 0 1
A= 0 0 1 0
0 0 0 1
0 0 0 0
Solução:
Aplique os passos do algoritmo de Warshall para construir as matrizes M1, M2, M3 e M4 = R.
0 1 0 1
M0 = 0 0 1 0
0 0 0 1
0 0 0 0
0 1 0 1 0 1 0 1
M0 = 0 0 1 0 M1 = 0 0 1 0
0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0
0 1 0 1 0 1 0 1 2 2 2 2
M0 = 0 0 1 0 M1 = 0 0 1 0 M2 = 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 0 1 0 1 0 1 1 1
M0 = 0 0 1 0 M1 = 0 0 1 0 M2 = 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 0 1 0 1 0 1 1 1
M0 = 0 0 1 0 M1 = 0 0 1 0 M2 = 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0
2 2 2 2
M3 = 2 2 2 2
0 0 0 1
0 0 0 0
0 1 0 1 0 1 0 1 0 1 1 1
M0 = 0 0 1 0 M1 = 0 0 1 0 M2 = 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1
M3 = 0 0 1 1
0 0 0 1
0 0 0 0
80 Guia de Estudos Online
0 1 0 1 0 1 0 1 0 1 1 1
M0 = 0 0 1 0 M1 = 0 0 1 0 M2 = 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 1 1 1
M3 = 0 0 1 1 M4 = 0 0 1 1
0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0
0 1 0 1 0 1 0 1 0 1 1 1
M0 = 0 0 1 0 M1 = 0 0 1 0 M2 = 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 1 1 1
M3 = 0 0 1 1 M4 = R = 0 0 1 1
0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0
1 2
4 3
Um caminho de Euler em um grafo é um caminho que usa cada arco do grafo exatamente
uma vez. A determinação da existência ou não de um caminho de Euler é chamada, algumas
vezes, de “problema do inspetor de rodovias”. Exceto em alguns casos triviais, o grafo tem
que ser conexo para que exista um caminho de Euler, de modo que vamos supor que o grafo
é conexo.
A resposta sobre a existência de um caminho de Euler pode ser encontrada por meio
de uma abordagem de força bruta, traçando todos os caminhos possíveis no grafo, mas o
esforço e a manutenção dos registros necessários para tal abordagem são proibitivos para
um grafo de qualquer tamanho. Uma abordagem muito mais eficiente usa os graus dos nós
no grafo. O grau de um nó é o número de extremidades de arcos naquele nó. Classificamos
um nó como ímpar ou par com base em seu grau. Não é difícil provar que todo grafo tem
que ter um número par de nós ímpares. A tabela a seguir resume o problema de existência
de um caminho de Euler.
Guia de Estudos Online 81
Solução:
Use o algoritmo CaminhoDeEuler
Numere os nós e construa a matriz de adjacência.
6 2
3
5 4
0 1 0 0 0 1
1 0 1 1 0 0
0 1 0 1 0 0
A=
0 1 1 0 1 1
0 0 0 1 0 1
1 0 0 1 1 0
82 Guia de Estudos Online
Some o número de elementos não nulos em cada linha da matriz. Determine se o grau é par
ou ímpar.
0 1 0 0 0 1 2 par
1 0 1 1 0 0 3 ímpar
0 1 0 1 0 0 2 par
A=
0 1 1 0 1 1 4 par
0 0 0 1 0 1 2 par
1 0 0 1 1 0 3 ímpar
0 1 0 0 0 1 2 par
1 0 1 1 0 0 3 ímpar
0 1 0 1 0 0 2 par
A=
0 1 1 0 1 1 4 par
0 0 0 1 0 1 2 par
1 0 0 1 1 0 3 ímpar
Comece no nó 2, termine no nó 6.
1
6 2
3
5 4
6 2
3
5 4
6 2
3
5 4
6 2
3
5 4
Guia de Estudos Online 83
Dados dois nós x e y em um grafo conexo simples com pesos, existe um caminho — talvez
mais de um — de x para y. O problema do caminho mínimo consiste em encontrar o cami-
nho de peso mínimo. Esse é um problema extremamente prático de roteamento para redes
de computadores, sistemas de comutação telefônica, rotas de caminhões etc.
Primeiro, modifique a matriz de adjacência A do grafo para que o elemento A[i, j] seja
o peso do arco de i para j, se existir; caso contrário, coloque o valor ∞ (na prática, ∞ é um
valor suficientemente grande para ser reconhecido como não representando arco algum).
O algoritmo de Dijkstra para resolver o problema do caminho mínimo usa um con-
junto IN de nós do grafo que contém, inicialmente, só o nó x. O conjunto IN vai aumentando
à medida que o algoritmo prossegue. Em qualquer ponto e para qualquer nó atualmente em
IN, o algoritmo conhece o caminho mais curto de x para z usando apenas nós pertencentes
a IN e conhece o nó em IN adjacente a z nesse caminho. Na figura a seguir, o caminho mais
curto de x para z usando só nós em IN passa pelo nó w, que é adjacente a z nesse caminho.
z
w
p
x
IN
Para expandir o conjunto IN, o nó que não está atualmente em IN e que corresponde ao
caminho mais curto é colocado em IN (vínculos são quebrados arbitrariamente). Quando é
acrescentado um nó novo em IN, todos os outros nós não pertencentes a IN são reavaliados
para ver se eles encurtam o caminho de x até esse novo nó. Na figura anterior, p é o nó fora
de IN que fornece o menor caminho a partir de x, de modo que é o próximo nó a ser incluído
em IN. Agora que p pertence a IN, z descobre um caminho passando por p que é mais curto
que o que passa por w (veja a figura a seguir). O nó z tem um caminho mais curto novo e
um nó novo adjacente nesse caminho.
z
w
p
x
IN
X 4 a 5 b
2
6 5 3 4 y
5
c 2 d
Solução:
Use o algoritmo de Dijkstra.
a b c d x y
a ∞ 5 5 3 4 ∞
b
c
d
x
y
a b c d x y
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2
c 5 ∞ ∞ 2 6 ∞
d 3 4 2 ∞ ∞ 5
x 4 ∞ 6 ∞ ∞ ∞
y ∞ 2 ∞ 5 ∞ ∞
Guia de Estudos Online 85
Inicialize IN, d e s.
a b c d x y
IN = {x}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2
c 5 2 6 a b c d x y
∞ ∞ ∞
d 4 ∞ 6 ∞ 0 ∞
d 3 4 2 ∞ ∞ 5
x 4 ∞ 6 ∞ ∞ ∞
y ∞ 2 ∞ 5 ∞ ∞
a b c d x y
IN = {x}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2
c 5 2 6 a b c d x y
∞ ∞ ∞
d 4 ∞ 6 ∞ 0 ∞
d 3 4 2 ∞ ∞ 5
s x x x x - x
x 4 ∞ 6 ∞ ∞ ∞
y ∞ 2 ∞ 5 ∞ ∞
a b c d x y
IN = {x}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2
c 5 2 6 a b c d x y
∞ ∞ ∞
d 4 ∞ 6 ∞ 0 ∞
d 3 4 2 ∞ ∞ 5
s x x x x - x
x 4 ∞ 6 ∞ ∞ ∞
y ∞ 2 ∞ 5 ∞ ∞ IN = {x, a}
a b c d x y
IN = {x}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2 a b c d x y
c 5 ∞ ∞ 2 6 ∞ d 4 ∞ 6 ∞ 0 ∞
d 3 4 2 ∞ ∞ 5 s x x x x - x
x 4 ∞ 6 ∞ ∞ ∞
y 5 IN = {x, a}
∞ 2 ∞ ∞ ∞
a b c d x y
d 4 9 6 ∞ 0 ∞
s x a x x - x
86 Guia de Estudos Online
a b c d x y
IN = {x}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2 a b c d x y
c 5 ∞ ∞ 2 6 ∞ d 4 ∞ 6 ∞ 0 ∞
d 3 4 2 ∞ ∞ 5 s x x x x - x
x 4 ∞ 6 ∞ ∞ ∞
y 5 IN = {x, a}
∞ 2 ∞ ∞ ∞
a b c d x y
d 4 9 6 7 0 ∞
s x a x a - x
a b c d x y
IN = {x}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2 a b c d x y
c 5 ∞ ∞ 2 6 ∞ d 4 ∞ 6 ∞ 0 ∞
d 3 4 2 ∞ ∞ 5 s x x x x - x
x 4 ∞ 6 ∞ ∞ ∞
y 5 IN = {x, a}
∞ 2 ∞ ∞ ∞
a b c d x y
d 4 9 6 7 0 ∞
s x a x a - x
IN = {x, a, c}
a b c d x y
d 4 9 6 7 0 ∞
s x a x a - x
a b c d x y
IN = {x} IN = {x, a, c, d}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2 a b c d x y a b c d x y
c 5 ∞ ∞ 2 6 ∞ d 4 ∞ 6 ∞ 0 ∞ d 4 9 6 7 0 12
d 3 4 2 ∞ ∞ 5 s x x x x - x s x a x a - d
x 4 ∞ 6 ∞ ∞ ∞
y 5 IN = {x, a}
∞ 2 ∞ ∞ ∞
a b c d x y
d 4 9 6 7 0 ∞
s x a x a - x
IN = {x, a, c}
a b c d x y
d 4 9 6 7 0 ∞
s x a x a - x
Guia de Estudos Online 87
a b c d x y
IN = {x} IN = {x, a, c, d}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2 a b c d x y a b c d x y
c 5 ∞ ∞ 2 6 ∞ d 4 ∞ 6 ∞ 0 ∞ d 4 9 6 7 0 12
d 3 4 2 ∞ ∞ 5 s x x x x - x s x a x a - d
x 4 ∞ 6 ∞ ∞ ∞
y ∞ 2 ∞ 5 ∞ ∞ IN = {x, a} IN = {x, a, c, d, b}
a b c d x y a b c d x y
d 4 9 6 7 0 ∞ d 4 9 6 7 0 11
s x a x a - x s x a x a - b
IN = {x, a, c}
a b c d x y
d 4 9 6 7 0 ∞
s x a x a - x
a b c d x y
IN = {x} IN = {x, a, c, d}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2 a b c d x y a b c d x y
c 5 ∞ ∞ 2 6 ∞ d 4 ∞ 6 ∞ 0 ∞ d 4 9 6 7 0 12
d 3 4 2 ∞ ∞ 5 s x x x x - x s x a x a - d
x 4 ∞ 6 ∞ ∞ ∞
y ∞ 2 ∞ 5 ∞ ∞ IN = {x, a} IN = {x, a, c, d, b}
a b c d x y a b c d x y
d 4 9 6 7 0 ∞ d 4 9 6 7 0 11
s x a x a - x s x a x a - b
IN = {x, a, c} IN = {x, a, c, d, b, y}
a b c d x y a b c d x y
d 4 9 6 7 0 ∞ d 4 9 6 7 0 11
s x a x a - x s x a x a - b
Caminho = y, b, a, x ou x, a, b, y
X 4 a 5 b
2
6 5 3 4 y
5
c 2 d
Solução:
Use o algoritmo de Prim.
a b c d x y
IN = {a}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2
c 5 2 6 a b c d x y
∞ ∞ ∞
d 0 5 5 3 4 ∞
d 3 4 2 ∞ ∞ 5
s a a a a a a
x 4 ∞ 6 ∞ ∞ ∞
y ∞ 2 ∞ 5 ∞ ∞
a b c d x y
IN = {a}
a ∞ 5 5 3 4 ∞
b 5 ∞ ∞ 4 ∞ 2 a b c d x y
c 5 ∞ ∞ 2 6 ∞ d 0 5 5 3 4 ∞
d 3 4 2 ∞ ∞ 5 s a a a a a a
x 4 ∞ 6 ∞ ∞ ∞
y 5 IN = {a, d}
∞ 2 ∞ ∞ ∞
a b c d x y
d 0 4 2 3 4 5
s a d d a a d
Guia de Estudos Online 89
a b c d x y IN = {a}
a ∞ 5 5 3 4 ∞
b 5 4 2 a b c d x y
∞ ∞ ∞
d 0 5 5 3 4 ∞
c 5 ∞ ∞ 2 6 ∞ s a a a a a a
d 3 4 2 ∞ ∞ 5
x 4 ∞ 6 ∞ ∞ ∞ IN = {a, d}
y ∞ 2 ∞ 5 ∞ ∞
a b c d x y
d 0 4 2 3 4 5
s a d d a a d
IN = {a, d, c}
a b c d x y
d 0 4 2 3 4 5
s a d d a a d
a b c d x y IN = {a} IN = {a, d, c, b}
a ∞ 5 5 3 4 ∞
b 5 4 2 a b c d x y a b c d x y
∞ ∞ ∞
d 0 5 5 3 4 ∞ d 0 4 2 3 4 2
c 5 ∞ ∞ 2 6 ∞ s a
s a a a a a a d d a a b
d 3 4 2 ∞ ∞ 5
x 4 ∞ 6 ∞ ∞ ∞ IN = {a, d}
y ∞ 2 ∞ 5 ∞ ∞ a b c d x y
d 0 4 2 3 4 5
s a d d a a d
IN = {a, d, c}
a b c d x y
d 0 4 2 3 4 5
s a d d a a d
a b c d x y IN = {a} IN = {a, d, c, b}
a ∞ 5 5 3 4 ∞
b 5 4 2 a b c d x y a b c d x y
∞ ∞ ∞
d 0 5 5 3 4 ∞ d 0 4 2 3 4 2
c 5 ∞ ∞ 2 6 ∞ s a
s a a a a a a d d a a b
d 3 4 2 ∞ ∞ 5
x 4 ∞ 6 ∞ ∞ ∞ IN = {a, d} IN = {a, d, c, b, y}
y ∞ 2 ∞ 5 ∞ ∞ a b c d x y a b c d x y
d 0 4 2 3 4 5 d 0 4 2 3 4 2
s a d d a a d s a d d a a b
IN = {a, d, c}
a b c d x y
d 0 4 2 3 4 5
s a d d a a d
90 Guia de Estudos Online
a b c d x y IN = {a} IN = {a, d, c, b}
a ∞ 5 5 3 4 ∞
b 5 4 2 a b c d x y a b c d x y
∞ ∞ ∞
d 0 5 5 3 4 ∞ d 0 4 2 3 4 2
c 5 ∞ ∞ 2 6 ∞ s a
s a a a a a a d d a a b
d 3 4 2 ∞ ∞ 5
x 4 ∞ 6 ∞ ∞ ∞ IN = {a, d} IN = {a, d, c, b, y}
y ∞ 2 ∞ 5 ∞ ∞
a b c d x y a b c d x y
d 0 4 2 3 4 5 d 0 4 2 3 4 2
s a d d a a d s a d d a a b
IN = {a, d, c} IN = {a, d, c, b, y, x}
a b c d x y a b c d x y
d 0 4 2 3 4 5 d 0 4 2 3 4 2
s a d d a a d s a d d a a b
p r
s
w
x
z
u q
t
y
Guia de Estudos Online 91
Solução:
Use o algoritmo de busca em profundidade.
Pilha: w
p r
s
w
x
z
u q
t
y
Pilha: w, p, r, x
p r
s
w
x
z
u q
t
y
Pilha: w, p, r, x, s
p r
s
w
x
z
u q
t
y
92 Guia de Estudos Online
Pilha: w, p, r, x, s, y
p r
s
w
x
z
u q
t
y
Pilha: w, p, r, x, s, y, z, q
p r
s
w
x
z
u q
t
y
Pilha: w, p, r, x, s, y, z, q, u
w, p, r, x, s, y, z, q, u
p r
s
w
x
z
u q
t
y
Guia de Estudos Online 93
Pilha: w, p, r, x, s, y, z, q, u, t
w, p, r, x, s, y, z, q, u, t
p r
s
w
x
z
u q
t
y
s
w
x
z
u q
t
y
Solução:
Use o algoritmo de busca em nível.
Fila: w
p r
s
w
x
z
u q
t
y
94 Guia de Estudos Online
Fila: w, p, t, x
p r
s
w
x
z
u q
t
y
Visite e coloque na fila os nós não visitados adjacentes a p, depois retire p da fila.
Fila: w, p, t, x, r
p r
s
w
x
z
u q
t
y
Retire t da fila.
Fila: w, p, t, x, r
Visite e coloque na fila os nós não visitados adjacentes a x, depois retire x da fila.
Fila: w, p, t, x, r, s, y, z
Retire r, s e y da fila.
Fila: w, p, t, x, r, s, y, z
p r
s
w
x
z
u q
t
y
Guia de Estudos Online 95
Fila: w, p, t, x, r, s, y, z, q, u
p r
s
w
x
z
u q
t
y
Remova q e u da fila.
Fila: w, p, t, x, r, s, y, z, q, u
Em um grafo que representa uma rede de comunicações, é importante que todos os nós se-
jam acessíveis a partir de todos os outros, ou seja, que o grafo seja conexo. Uma árvore mí-
nima geradora (Seção 7.3) forma um grafo conexo com seus nós, mas um no qual não pode
haver falha em um único arco. Um ponto de articulação em um grafo conexo simples é um
nó cuja falha (o que removeria, logicamente, o nó e todos os seus arcos adjacentes) tornaria
o grafo resultante desconexo. A Seção 7.5 apresenta um algoritmo para detectar pontos de
articulação em um grafo conexo simples.
O algoritmo depende de um percurso usando uma busca em profundidade, junto com
um esquema de numeração que mantém o número de árvore de cada nó (a ordem segundo
a qual o nó é visitado na busca em profundidade) e o número de trás de cada nó (o número
de árvore do nó mais longe — o menor número de árvore — no percurso do grafo aces-
sível desse nó). Como a busca em profundidade volta para um nó visitado anteriormente,
pode ser necessário ajustar o número de trás daquele nó com base nos caminhos de trás
de nós mais embaixo no caminho da busca em profundidade. Um ponto de articulação
ocorre quando, nesse processo de voltar atrás, nenhum nó abaixo do nó atual n tem nú-
mero de trás menor do que n; isso significa que a única maneira de acessar nós abaixo do
nó n é através de n, de modo que, se n for removido, esses nós se tornarão inacessíveis e
o grafo ficará desconexo.
a b
d c
f g
(1,1)a b(2,2)
(4,4)d c(3,3)
f g
(1,1)a b(2,2)
1
(4,4)d c(3,3)
f g
(1,1)a b(2,2)
1
(4,4)d c(3,3)
(5,5)e
(6,6)f g(7,7)
Guia de Estudos Online 97
(1,1)a b(2,2)
1
(4,4)d c(3,3)
(5,5)e
5
(6,6)f g(7,7)
Volte para f e ajuste seu número de trás. Volte para e. O número de trás de f é igual ao
número de árvore de e, logo e é um ponto de articulação.
(1,1)a b(2,2)
1
(4,4)d c(3,3)
(5,5)e
5 5
(6,6)f g(7,7)
(1,1)a b(2,2)
1
(4,4)d c(3,3)
(5,5)e
5 5
(6,6)f g(7,7)
1
(1,1)a b(2,2)
1 1
(4,4)d c(3,3)
(5,5)e
5 5
(6,6)f g(7,7)
98 Guia de Estudos Online
d c
f g
Capítulo
Álgebra de Boole 8
Tanto em lógica proposicional quanto em teoria dos conjuntos, trabalhamos com uma cole-
ção de elementos, alguns dos quais eram especiais, efetuamos operações nesses elementos e
observamos determinadas regras. Veja a tabela a seguir.
Uma álgebra de Boole é qualquer coleção de elementos contendo dois elementos es-
peciais, 0 e 1, em conjunto com as operações de +, . e 9 satisfazendo as mesmas 10 regras
aplicadas às operações de álgebras de Boole. Como anteriormente, as regras ocorrem em
pares duais. Assim, a lógica proposicional e a teoria dos conjuntos são exemplos de álgebras
de Boole.
Usando essas regras, provaremos (Seção 8.1) algumas outras propriedades de álgebras
de Boole. A ideia de isomorfismo também se aplica à estrutura de álgebras de Boole. Para
grafos isomorfos, precisávamos de uma bijeção entre nós que preservasse a adjacência;
para álgebras de Boole, precisamos de uma bijeção entre os elementos que preserve os
efeitos das operações.
Álgebras de Boole são importantes porque um circuito lógico (igual a centenas do
mesmo tipo que são encontradas dentro de seu computador) pode ser representado por uma
expressão booleana. Reciprocamente, qualquer expressão booleana tem uma representação
como um circuito. Podemos usar a álgebra de Boole para desenvolver uma expressão bo-
oleana para fazer algumas coisas e depois construir o circuito correspondente (Seção 8.2).
Foram desenvolvidos algoritmos para simplificar expressões booleanas e, consequentemen-
te, seus circuitos lógicos correspondentes (Seção 8.3).
99
100 Guia de Estudos Online
(x . y) . (z + w)
(x . y) . z + (x . y) . w
(z + w) . (x . y)
com
z . (x . y) + w . (x . y)
(z + w) . (x . y) = (x . y) . (z + w) 1b
= (x . y) . z + (x . y) . w 3b
= z . (x . y) + w . (x . y) 1b
Para definir qualquer álgebra de Boole particular, você precisa especificar os elemen-
tos, identificar os elementos especiais 0 e 1 e definir as operações +, . e 9. O ponto aqui é que
você precisa ver os símbolos das operações +, . e 9 abstratamente, de maneira genérica. Em
qualquer álgebra booleana específica, + não significa, necessariamente, soma — significa
o que quer que tenha sido definido. (Poderia significar união de conjuntos, por exemplo.)
Além disso, não se engane pensando que as regras de álgebras de Boole são como as
regras da álgebra usual, ou seja, que tudo vai ser como na soma e multiplicação de números.
Guia de Estudos Online 101
Algumas propriedades são iguais, como x + y = y + x, mas outras não. Um dos Problemas
Práticos, por exemplo, mostra que x + 1 = 1, o que certamente não é verdade na soma usual
de números quando x é um número.
Suponha que [B, +, . , 9, 0, 1] é uma álgebra de Boole e que [b, &, *, 99, f, 1] é outra
álgebra de Boole. Nessa segunda álgebra, & é o símbolo usado para representar a operação
+ na definição, * é o símbolo usado para representar a operação . etc. Para que essas duas
álgebras de Boole sejam isomorfas, você tem que encontrar uma função f: B 6 b tal que
1. f é uma bijeção
2. f (x + y) = f (x) & f ( y)
3. f (x . y) = f (x) * f ( y)
4. f (x9) = [ f (x)]99
x . y + (x + y) . ( y + x9) = y
x . y + (x + y) . ( y + x9)
x . y + (x + y) . ( y + x9)
3a x + ( y . z) = (x + y) . (x + z)
Regra 3a x + ( y . z) = (x + y) . (x + z)
x . y + (x + y) . ( y + x9) = x . y + ( y + x) . ( y + x9) 1a
102 Guia de Estudos Online
Regra 3a x + ( y . z) = (x + y) . (x + z)
x . y + (x + y) . ( y + x9) = x . y + ( y + x) . ( y + x9) 1a
= x . y + [ y + ( x . x9) 3a
x . y + (x + y) . ( y + x9) = x . y + ( y + x) . ( y + x9) 1a
= x . y + [ y + ( x . x9)] 3a
= x . y + [ y + 0] 5b
=x.y+y 4a
concentre em y ...
x . y + (x + y) . ( y + x9) = x . y + ( y + x) . ( y + x9) 1a
= x . y + [ y +(x . x9)] 3a
= x . y + [ y + 0] 5b
= x.y+y 4a
= y.x+y 1b
y . x + y . 1
= 4b
y . (x + 1)
= 3b
y . 1
= Problema Prático
y
= 4b
Uma função booleana leva n-uplas de valores V-F em um valor V-F. (As tabelas-verdade
para as fbfs proposicionais faziam a mesma coisa.)
Dada qualquer expressão booleana, é possível construir uma tabela que descreve a fun-
ção booleana representada por ela. Você também pode desenhar um circuito lógico para
a expressão (usando portas E, OU e inversores para as operações booleanas +, . e 9) que
representa a mesma função booleana, ou seja, dado um padrão de entradas de zeros e uns,
o circuito produzirá o valor lógico determinado pela função.
Dado um circuito lógico, você pode construir uma tabela para sua função booleana ou
a expressão booleana que representa a mesma função.
Finalmente, dada qualquer função booleana (na forma de uma tabela), você pode
obter uma expressão booleana que a representa e, portanto, um circuito lógico corres-
pondente.
Em outras palavras, a partir de qualquer uma das representações a seguir, você pode
obter qualquer uma das outras duas:
O mais difícil é obter uma expressão booleana correspondente começando com uma fun-
ção booleana. Felizmente, existe um algoritmo que faz isso. O algoritmo produz uma forma
Guia de Estudos Online 103
canônica como soma de produtos. O que isso significa? Uma soma de produtos poderia
ser uma expressão da forma
(x1x2x3) + (x19x2x39)
Logo, a expressão é uma soma de produtos. A parte “canônica” significa que esse al-
goritmo sempre funciona, embora seja possível encontrar uma expressão mais simples em
alguns casos apenas examinando a função booleana. Isso é análogo ao que ocorre com a
fórmula para equações do segundo grau — é um algoritmo que sempre funciona, embora
em alguns casos (quando as raízes são inteiras) você seja capaz de encontrar a solução mais
rapidamente por fatoração.
A tabela a seguir mostra os passos necessários para construir uma expressão booleana
em forma canônica como soma de produtos a partir de uma função booleana.
xy + x9
Solução:
Use portas E, portas OU e inversores para representar as operações booleanas.
Componentes necessários:
x xy
x9
x xy
x9 xy + x9
x xy
Solução:
Use o Algoritmo Soma-De-Produtos.
0 1 1 0
0 1 0 1
0 0 1 0
0 0 0 0
x1x2x39
x1x2x39 + x1x29x3
A partir de uma função booleana, podemos produzir uma expressão booleana em forma ca-
nônica como soma de produtos. Podemos então transformar essa expressão em um circuito
lógico que implementa a função booleana. Gostaríamos de ser capazes de minimizar uma
expressão booleana, ou seja, obter uma expressão mais simples que representa a mesma
função booleana. Então o circuito lógico correspondente teria menos portas.
A Seção 8.3 contém dois algoritmos que simplificam uma soma de produtos em uma
soma de produtos mínima (que pode não corresponder ao mínimo absoluto). A abordagem
do mapa de Karnaugh, que depende de escrever a expressão booleana em determinado
arranjo retangular, é fácil de usar, mas só funciona para um número pequeno de variáveis.
O método de Quine-McCluskey, mais complicado de fazer à mão, pode ser facilmente au-
tomatizado e funciona para qualquer número de variáveis.
Ao montar o mapa de Karnaugh, tome cuidado para nomear corretamente os rótulos.
Esse método depende de os rótulos de quadrados adjacentes corresponderem a expressões
que diferem em apenas uma variável; se você colocar rótulos errados, irá obter resultados
incorretos.
1 1 0 1 1
1 1 0 0 0
1 0 1 1 0
1 0 1 0 1
1 0 0 1 0
1 0 0 0 0
0 1 1 1 1
0 1 1 0 1
0 1 0 1 1
0 1 0 0 0
0 0 1 1 0
0 0 1 0 1
0 0 0 1 0
0 0 0 0 0
Solução:
Desenhe um mapa de Karnaugh com 4 variáveis, preencha com 1 apropriadamente e agrupe
os quadrados marcados.
x3 x4
x3 x49
x39x49
x39x4
x3 x4 1
x3 x49
x39x49
x39x4
Guia de Estudos Online 107
x3 x4 1
x3 x49
x39x49
x39x4 1
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
108 Guia de Estudos Online
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
Guia de Estudos Online 109
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
x3 x4 1 1
x3 x49 1 1 1
x39x49
x39x4 1 1
Vamos considerar estruturas que consistem em um conjunto não vazio S de elementos junto
com uma operação binária no conjunto. Lembre-se de que, para que ∘ seja uma operação
binária em S, é preciso que, quaisquer que sejam x, y > S,
110
Guia de Estudos Online 111
(Essas estruturas são mais simples do que álgebras de Boole, que têm duas operações biná-
rias e uma operação unária.)
Seja S um conjunto não vazio no qual está definida uma operação binária ∘. Então [S, ∘]
será um grupo se todas as propriedades da tabela a seguir forem satisfeitas:
Propriedade Significado
O conjunto S pode ser um conjunto de números e a operação ∘ pode ser uma operação
aritmética usual. Por exemplo, [Z, +] é um grupo, em que Z é o conjunto dos inteiros e + é
a soma usual de números inteiros. Para ver isso, note que + está bem definida e é fechada
em Z; além disso,
No entanto, quando você for testar se um conjunto S junto com uma operação binária
forma um grupo, lembre-se de que S pode ter elementos que são matrizes, ou funções, ou
cadeias, ou polinômios, ou ..., e que a operação pode ser multiplicação de matrizes, ou com-
posição de funções, ou concatenação de cadeias, ou soma de polinômios, ou .... O símbolo
∘ na definição acima é, simplesmente, uma representação da operação binária em S; é um
símbolo genérico que pode ser substituído por uma operação real em qualquer exemplo
particular. (O livro usa um ponto para esse símbolo genérico, mas o símbolo ∘ é mais fácil
de ver na tela.)
Se não for necessário existir um inverso em S para cada elemento, então você terá uma
estrutura chamada de monoide. Se retirar também a propriedade de existência de um ele-
mento identidade, terá um semigrupo. As propriedades para um semigrupo são as menos
restritivas, enquanto as propriedades para um grupo são as mais restritivas. Todo grupo é
um monoide, e todo monoide também é um semigrupo, mas existem semigrupos que não
são monoides e existem monoides que não são grupo.
semigrupo
monoide
grupo
Usando as propriedades que um grupo tem que satisfazer segundo a definição, pode-
mos demonstrar outras propriedades de grupo, de maneira análoga ao que fizemos para
provar outras propriedades de álgebras de Boole. Entre essas propriedades estão: o ele-
mento identidade é único, o inverso de cada elemento é único, as leis de cancelamento são
112 Guia de Estudos Online
válidas em qualquer grupo e equações lineares têm soluções únicas em um grupo. Essas
últimas propriedades são fundamentais para a álgebra usual, e você as usa há muitos anos.
Poderíamos afirmar, por exemplo, no grupo [Z, +],
se x + 3 = y + 3, então x = y
se x + 7 = 10, então existirá uma única solução para x em Z
Existem quatro transformações que podem ser aplicadas no retângulo e que manterão
inalterada sua imagem no plano. São elas:
(Por exemplo, se você considerar o retângulo como um pedaço de papelão, T1 vira para
baixo a face de cima e coloca a extremidade que estava à direita do lado esquerdo, mas o
formato das bordas externas permanece o mesmo.)
Seja S o conjunto dessas transformações e seja ∘ a composição. Por exemplo, T1 ∘ T3
diz para primeiro aplicar a transformação T3 e depois aplicar a transformação T1. (A com-
posição sempre é da direita para a esquerda.) Prove que [S, ∘] é um grupo.
Guia de Estudos Online 113
Solução:
Testes as propriedades necessárias de grupo. Numere os cantos e imagine que o lado de cima
é branco e o de baixo é cinza.
V
1 2
4 3
Aplique T3
V T3 V
1 2 3 4
H H
4 3 2 1
Depois aplique T1
V T1 V
3 4 4 3
H H
2 1 1 2
V T1 o T3 V
1 2 4 3
H H
4 3 1 2
114 Guia de Estudos Online
V T2 V
1 2 4 3
H H
4 3 1 2
T1 ∘ T3 = T2
∘ T1 T2 T3 T4
T1 T2
T2
T3
T4
T1 ∘ T3 = T2
∘ T1 T2 T3 T4
T1 T4 T3 T2 T1
T2 T3 T4 T1 T2
T3 T2 T1 T4 T3
T4 T1 T2 T3 T4
Guia de Estudos Online 115
A composição é associativa.
∘ T1 T2 T3 T4
T1 T4 T3 T2 T1
T2 T3 T4 T1 T2
T3 T2 T1 T4 T3
T4 T1 T2 T3 T4
A composição é associativa.
∘ T1 T2 T3 T4
T1 T4 T3 T2 T1
T2 T3 T4 T1 T2
T3 T2 T1 T4 T3
T4 T1 T2 T3 T4
0 1 1
1 0 1
H= 1 0 0
0 1 0
0 0 1
Solução:
m = n – r = 2. H codifica todo o Z2m em um subgrupo de Z2n, ou seja, todo o Z22 é codificado
em um subgrupo de Z25. As mensagens codificadas consistirão em dois bits de Z22 seguidos
de três bits de verificação determinados pela multiplicação pela matriz H.
O conjunto Z22 é {00, 01, 10, 11}. Cada 2-upla binária será convertida em uma mensa-
gem codificada que é uma 5-upla binária.
Escolha mensagens codificadas da forma x1x2 x3x4x5 tais que
0 1 1
1 0 1
(x1x2x3x4x5) . 1 0 0 = (000)
0 1 0
0 0 1
0 1 1
1 0 1
(x1x2c1c2c3) . 1 0 0 = (000)
0 1 0
0 0 1
Guia de Estudos Online 117
0 1 1
1 0 1
.
(01c1c2c3) 1 0 0 = (000)
0 1 0
0 0 1
01 6 01101
0 1 1
1 0 1
(10c1c2c3) . 1 0 0 = (000)|
0 1 0
0 0 1
10 6 10011
00 6 00000
01 6 01101
10 6 10011
11 6 11110
1 1 0 0
1 0 1 0
1 0 0 1
0 1 0 1
0 0 1 1
0 1 1 0
1 1 1 0
H= 1 1 0 1
1 0 1 1
0 1 1 1
1 1 1 1
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1 |
Solução:
Encontre a síndrome da mensagem codificada X, encontre o líder da classe lateral E com
essa síndrome e calcule a soma X +2 E.
A síndrome de X é
1 1 0 0
1 0 1 0
1 0 0 1
0 1 0 1
0 0 1 1
0 1 1 0
1 1 1 0
.
(110100110100011) 1 1 0 1 = (0100)
1 0 1 1
0 1 1 1
1 1 1 1
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Guia de Estudos Online 119
Os grupos na Seção 9.1 eram modelos da aritmética. Para uma visão mais geral de compu-
tação, vamos considerar máquinas de estado finito, que modelam muitas características de
um computador de propósito geral.
Uma máquina de estado finito pode estar em qualquer um entre um número finito de
estados e pode receber um único símbolo de um alfabeto de entrada. Usando esse par es-
tado atual/símbolo atual, uma função de saída nos dá o único símbolo do alfabeto de saída
que sairá da máquina, e a função próximo estado irá dizer em que estado a máquina ficará.
Assim, uma máquina de estado finito é descrita por meio de um conjunto de estados, os
alfabetos de entrada e de saída e essas duas funções. Essas descrições podem ser na forma
de tabelas de estado ou grafos de estado.
São dados a seguir uma tabela de estado e um grafo de estado para uma máquina com
três estados e alfabeto de entrada = alfabeto de saída = {0, 1}. Tanto a tabela quanto o grafo,
dizem, por exemplo, que quando a máquina está no estado s0 e recebe um símbolo de entra-
da 0 irá fornecer um símbolo de saída 0 e irá para o estado s1.
Próximo estado
Entrada atual
Estado atual 0 1 Saída
s0 s1 s0 0
s1 s2 s1 1
s2 s1 s0 1
Supõe-se que a máquina sempre começa no estado s0 e que o primeiro símbolo de saída
é, simplesmente, uma reflexão desse estado inicial, não uma resposta a uma entrada, logo
pode ser ignorado. Cadeias de símbolos de entrada são processadas pela mudança de estado
para estado, como direcionado pela função próximo estado.
Máquinas de estado finito podem ser usadas para o reconhecimento de determinados
tipos de cadeias de entrada. Certos estados da máquina são designados como estados fi-
nais e a máquina reconhece qualquer cadeia que leva a máquina a um estado final no final
do processamento da cadeia. Ocorre que as máquinas de estado finito podem reconhecer
exatamente os conjuntos de cadeias que podem ser descritos usando expressões regulares.
Uma expressão regular representa um conjunto regular que é construído de símbolos
120 Guia de Estudos Online
(11 0)*
l (a cadeia vazia)
11 (uma repetição, escolhendo 11)
0 (uma repetição, escolhendo 0)
011 (duas repetições, escolhendo primeiro 0 e depois 11)
11011
00011
etc.
Uma vez encontrada uma máquina que reconhece determinado conjunto regular, seria
bom minimizar essa máquina — encontrar uma máquina que reconhece o mesmo conjun-
to, mas tem o menor número possível de estados. O algoritmo para fazer isso consiste em
definir uma relação de equivalência no conjunto dos estados, dividindo o conjunto de esta-
dos em classes de equivalência e usando essas classes como os estados da nova máquina.
Esse é o mesmo tipo de abstração um nível acima que discutimos ao definir uma relação
de equivalência no conjunto de frações e transformar as classes de equivalência resultantes
em número racionais.
Solução:
Desenhe um grafo de estado.
s0
1
s0 s1
s2
Guia de Estudos Online 121
1 1
s0 s1 s3
s2
122 Guia de Estudos Online
Solução:
Decida sobre as quíntuplas na máquina de Turing.
1101*0010bbb 6 X101*0010bbb
0 1
X101*0010bbb 6 X101*0010bbb
1 2
X101*0010bbb 6 X101*X010bbb
2 3
X101*X010bbb 6 X101*X010bbb
3 0
X101*X010bbb 6 XX01*XX10bbb
1 0
0 5 6
0 7 8
0 2
0 7
0 6
Solução:
Decida os quíntuplos da máquina de Turing.
Função: 1 6 3 2 6 6 0 6 0
Fita: 11 6 1111 111 6 1111111 161
0 1 25
0 1 3
3 4 5 6
6 6 7 1
1 8 8
Nossa tentativa final de “modelagem” trata de linguagens, tanto as linguagens naturais (fala-
das) quanto as linguagens de programação. Consideraremos linguagens formais, a estrutura
abstrata projetada para capturar as propriedades importantes de linguagens “reais”. Certa-
mente, as construções permitidas na linguagem são propriedades importantes. As regras de
sintaxe determinam que, por exemplo,
128 Guia de Estudos Online
é uma frase aceitável em português, já que segue as regras de sintaxe que esperamos encon-
trar (tem um substantivo e um verbo, por exemplo), enquanto
está correto sintaticamente, tendo exatamente a mesma sintaxe que a primeira frase acima
(artigo, substantivo, verbo, advérbio), mas não faz sentido semanticamente. Em outras pala-
vras, a forma está correta, mas o sentido não está claro.
A sintaxe, tanto das linguagens naturais quanto das linguagens de programação, pode
ser determinada pelas regras de gramática da linguagem. Embora linguagens de progra-
mação inteiras tenham sido completamente especificadas por gramáticas formais, as lin-
guagens naturais não o foram, apesar de gramáticas formais terem aparecido inicialmente
como um esforço para analisar linguagens naturais. O problema é que linguagens naturais
são muito mais complexas e maiores do que linguagens de programação (mesmo lingua-
gens “grandes” como C++).
Uma gramática formal identifica símbolos terminais e símbolos não terminais, além
de um símbolo não terminal específico chamado de símbolo inicial. A gramática também
define produções da forma a 6 b, em que a e b são cadeias que permitem que a seja
substituído por b em qualquer cadeia em que ocorra a. Dessa maneira, pode-se começar
com o símbolo inicial e, usando produções, gerar uma série de cadeias até resultar em uma
cadeia formada por terminais. Tal cadeia de terminais pertence à linguagem especificada
pela gramática.
Um compilador para uma linguagem de programação usa as produções da gramática da
linguagem para determinar se uma asserção ou um comando no programa é, de fato, uma
cadeia de símbolos na linguagem, ou seja, se pode ser gerado do “símbolo inicial” usando
as produções da linguagem. Se a asserção não puder ser gerada assim, então não está sin-
taticamente correta e o compilador vai apontar um erro de sintaxe (com graus variáveis de
facilidade ou ajuda).
Solução:
Crie as produções que geram todas essas cadeias e nenhuma outra.
Amostras de cadeias em L:
001
0001
0011
00001
00011
Guia de Estudos Online 129
00101
00111
000001
etc.
S 6 00A1
A 6 l | 0A | 1a
S 6 00A1
A 6 l | 0A | 1A
Gere 0001001
S 6 00A1
S 6 00A1
A 6 l | 0A | 1A
Gere 0001001
S 6 00A1 6 000A1
S 6 00A1
A 6 l | 0A | 1A
Gere 0001001
S 6 00A1
A 6 l | 0A | 1A
Gere 0001001
S 6 00A1
A 6 l | 0A | 1A
Gere 0001001