matdis 2006-1 AF 09-08

Propaganda
MATEMÁTICA DISCRETA
AF (09-08-2006)
1. Problema da Torre de Hanói.
Inicialmente os discos formam uma torre onde todos são colocados em um dos pinos em
ordem decrescente de tamanho.
Qual a menor quantidade de movimentos para se transferir os discos do primeiro para o
terceiro pino se movimentos diretos do pino de origem ao pino de destino não são
permitidos? (todos os movimentos devem passar pelo pino intermediário.) Como sempre,
em nenhum momento podemos ter discos maiores em cima de discos menores.
Solução 1 (Marcelino)
Calcule quantos movimentos são necessários para se mover n discos para um pino vizinho
segundo as novas regras, chame-os de T’n, teremos:
T’1 = 1
T’n = 3T’n-1 + 1
(1)
Para mover para o pino de destino, Tn, será o dobro de movimentos, i.e., Tn = 2T’n.
Resolvendo (1), teremos:
Homogênea:
x – 3 = 0, logo x = 3.
Assim, A.3n.
Particular:
P – 3P = 1, logo P = -1/2.
Total:
3A -1/2 = 1, logo A = ½.
Assim,
T’n = ½.3n – ½,
Logo, Tn = 2T’n = 3n – 1.
1
Solução 2 (Knuth)
Você pode resolver direto. Tn mede o número de passos necessários para mover n discos de
um pino na extrema para o pino da outra extrema, com movimentos sempre passando pelo
pino intermediário. Obtém-se a seguinte recorrência:
T0 = 0
Tn = 3Tn-1 + 2
Resolvendo, obtemos: Tn = 3n – 1.
2. O conjunto de todos subconjuntos finitos dos Naturais é enumerável? Se sim, dê uma
enumeração. Se não, prove por diagonalização.
Solução. É enumerável. Podemos mostrar, por indução em n, que a coleção de conjuntos
finitos com n elementos é enumerável para todo n.
Se n = 1.
Os conjuntos de tamanho 1 correspondem aos números naturais portanto é enumerável.
{0}, {1}, {2}, ...
HI: Suponha que os conjuntos de tamanho n são enumeráveis, vamos mostrar que os de
tamanho n +1 são enumeráveis.
Vamos construir nossa matriz de enumeração que temos usado em muitos exemplos.
Na linha coloque os conjuntos de tamanho n segundo uma dada enumeração e na coluna
coloque os números naturais.
A1
A2
A3 ...
Note que Ai ⊆ e |Ai| = n, para todo i.
0
A1∪{0}
A2∪{0}
A3∪{0}
...
1
A1∪{1}
A2∪{1}
A3∪{1}
...
2
A1∪{2}
A2∪{2}
A3∪{2}
...
.
.
.
Assim nas linhas da matriz teremos todos os conjuntos de tamanho n+1 e podemos
enumerá-lo segundo o esquema de preenchimento da matriz pela diagonal.
Provado isto, podemos concluir que o conjunto de todos os subconjuntos finitos de é
simplesmente a união enumerável de Hn onde Hn é a coleção de todos os conjuntos de

tamanho n. A união enumerável de conjuntos enumeráveis é enumerável, portanto  H n é
n 0
enumerável. Alternativamente pode-se montar uma matriz com infinitas linhas em que cada
linha é a coleção de conjuntos de tamanho n, para todo n ∈ .
3. Uma árvore é uma estrutura definida recursivamente como se segue.
(i)
Um único nó é uma árvore.
2
(ii)
Dadas T1, ..., Tn árvores, adicionando-se um novo N nó (a raiz) e ligando-o (por
arestas) às raízes de cada árvore T1, ..., Tn, obtém-se uma nova árvore.
a) Prove por indução estruturada que em qualquer árvore o número de nós é igual ao
número de arestas mais 1.
Solução: Prova por indução estrutural na definição recursiva de árvore.
Note que, n = n1 + ...+nk + 1= (a1 + 1) + (a2 + 1) + ...+ (ak + 1) + 1= a1 + a2 + ... +ak + k + 1,
mas, a = a1 + a2 + ... +ak + k, logo n = a + 1, como se queria demonstrar.
4. Resolva a equação recorrente:
Solução.
Equação característica:
Solução Homogênea:
an + 3an-1 = 4n2 – 2n ; para n  2 e a1 = -4.
α + 3 = 0, logo α = -3.
anh  A( 3 )n
anp  P1 n 2  P2 n  P3
Solução Particular:
Substituindo na equação recorrente obtemos:
P1n2 + P2n + P3 + 3[P1(n-1)2 + P2(n-1) + P3] = 4n2 – 2n
P1n2 + P2n + P3 +3P1n2 – 6P1n + 3P1 + 3P2n – 3P2 + 3P3 = 4n2 – 2n
4P1n2 + (4P2 – 6P1)n + 4P3 + 3P1 – 3P2 = 4n2 – 2n
4P1 = 4
4P2 – 6P1 = –2
4P3 + 3P1 – 3P2 = 0
Logo, P1 = 1, P2 = 1 e P3 = 0.
Assim, anp  n 2  n .
Solução Total: anh  anp  A( 3 )n  n 2  n
Condição de Contorno:  3 A  2  4
Logo, A = 2.
Assim, an = 2(–3)n + n2 + n.
5. Uma lista é definida recursivamente como:
(i) O string vazio  é uma lista.
(ii) Se A é uma lista e c é um átomo, então a concatenação cA é uma lista, onde c é
chamado de cabeça da lista e A é o corpo da lista.
Sendo assim, toda lista pode ser desmembrada em um átomo que é sua cabeça seguida de
uma lista que é o seu corpo. Exemplo lista (a b c). Cabeça a e corpo (b c).
Um programa recursivo para se imprimir os elementos de uma lista é dado por:
Imp(Lista)
SE Lista =  ENTÃO fim-programa
SENÃO
Print(cabeça(lista))
Imp(corpo(lista))
Fim-Programa
Escreva um programa para imprimir os elementos de uma lista em ordem inversa.
Solução.
3
Imp-Inv(Lista)
SE Lista =  ENTÃO fim-programa
SENÃO
Imp-Inv(corpo(lista))
Print(cabeça(lista))
Fim-Programa
4
Download