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