Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Um algoritmo A resolve um problema em tempo (n2 ) no pior caso, enquanto um outro algoritmo B resolve
o mesmo problema em O(n2 ) no melhor caso. Qual dos dois algoritmos e o mais r apido. Explique sucintamente.
3. Os algoritmos A e B requerem exatamente TA (n) = 10n lg n +20 e TB (n) = 2n2 +3n opera c oes elementares,
respectivamente, para um entrada de tamaho n. a) Qual o algoritmo mais eciente do ponto de vista assint otico? Escreva as ordens de complexidade de A e B em nota c ao assint otica. b) Existe alguma entrada para o qual o algoritmo menos eciente do ponto de vista assint otico e mais r apido? Se sim, d e um exemplo. Caso contr ario, justique sucintamente.
4. Escreva em pseudo-c odigo um algoritmo que recebe como entrada um vetor V de n inteiros positivos e modica-o de forma a eliminar os elementos repetidos. O algoritmo deve manter a mesma ordem dos valores originais por em deslocando elementos ` a esquerda de forma a ocupar o lugar de elementos repetidos eventualmente eliminados. As posi c oes nais eventualmente livres devem ser preenchidas com zeros.
Exemplo : V = (2, 4, 3, 9, 4, 2, 5, 8, 5) V = (2, 4, 3, 9, 5, 8, 0, 0, 0). Importante: O algoritmo s o poder a usar, al em do vetor de entrada, uma quantidade xa de mem oria adicional, i.e., n ao e permitido criar um vetor ou lista auxiliar.
5.
a) O c alculo de algumas fun c oes matem aticas pode ser muito custoso. Assim, se um programa calcula muitas vezes, por exemplo, a fun c ao fatorial, pode ser u til manter uma tabela com valores pr e-computados. Escreva em pseudo-c odigo uma fun c ao pcfatorial que recebe um n umero n N e devolve como sa da um vetor F = (0!, 1!, 2!, . . . , n!). b) Um exemplo de tal programa seria um programa que calcula o Tri angulo de Pascal :
0 0 1 0 2 0 1 1 2 1
. . .
. . .
2 2
. . .
n 0
. . .
n 1
. . .
n 2
. . .
. . . .
..
,
n n
. . .
..
Escreva uma fun c ao tpascal em pseudo-c odigo que recebe como entrada um valor n N e devolve como sa da i1 uma matriz P(n+1)(n+1) contendo as n + 1 primeiras linhas do Tri angulo de Pascal, i.e. P [i, j ] = j , se 1 a a i j . Importante: Esta fun c ao deve usar a fun c ao pcfatorial do item (a) e a identidade b = ab .
1
c) Suponha que tenhamos um jogo no qual fazemos n N tentativas independentes, cada uma com a mesma probabilidade de sucesso p [0, 1]. A probabilidade de termos exatamente s sucessos nas n tentativas e dada pela fun c ao de probabilidade da chamada distribui c ao binomial como f (s; n, p) = n s p (1 p)ns . s
Escreva uma fun c ao binom que recebe como entrada tr es vetores N = (n1 , . . . , nr ) Nr , P = (p1 , . . . , pr ) r r [0, 1] e S = (s1 , . . . , sr ) N e devolve como resposta o vetor B = (f (s1 ; n1 , p1 ), . . . , f (sr ; nr , pr )). Importante: Esta fun c ao deve usar a fun c ao tpascal do item (b) e pode assumir que si ni , para i = 1, . . . , r.
6. Escreva um algoritmo em pseudo-c odigo que recebe como entrada uma lista simplesmente encadeada L que
utiliza a estrutura de n o habitual e que a modica de forma a invert e-la. Por exmplo, a lista
deve ser convertida em . Importante: O algoritmo s o poder a usar, al em da lista de entrada, uma quantidade xa de mem oria adicional, i.e., n ao e permitido copiar a lista para uma lista ou vetor auxiliar.
7. Express oes aritm eticas podem ser escritas com o aux lio de par enteses de forma a eliminar ambiguidades e
especicar uma ordem precisa de execu c ao das opera c oes. Por exemplo, a express ao 10+352 pode ser avaliada de v arias maneiras se n ao assurmirmos uma ordem de preced encia. Por em, ao escrevermos (10 + ((3 5) 2)) a express ao deve ser inequivocamente avaliada como 23. Entretanto, para que esteja sintaticamente correta, a express ao deve ter par enteses balanceados, ou seja, cada ( dever ter seu correspondente ), e cada ) deve sempre fechar um ( anterior. Escreva em pseudoc odigo um algoritmo que recebe como entrada uma express ao aritm etica e devolve como resposta o valor verdadeiro (V), se a express ao estiver corretamente balanceada, ou falso (F), caso contr ario. Importante: A express ao de entrada vai estar codicada como uma lista de strings na qual cada elemento cont em um n umero, um operador aritm etico, ou um par enteses. Por exemplo, a express ao 2 + (3 + 5) ser a codicada como
. Al em dessa lista de entrada, o algoritmo s o poder a usar mais uma pilha e mais uma quantidade xa de vari aveis que armazenam valores retirados da la ou da pilha. Pode-se assumir como dadas apenas as fun c oes enleirar /desenleirar e empilhar /desempilhar, sendo que n ao e permitido desenleirar/desempilhar elementos de uma la/pilha vazia.
h(T ) =
onde r representa um n o e TL , TR as sub- arvores bin arias ` a esquerda e ` a direita de r. A altura de um n o de uma arvore bin aria e ent ao denida como a altura da sub- arvore nele enraizada. Escreva um procedimento recursivo que recebe um ponteiro para a raiz de uma arvore bin aria e imprime a altura dos n os desta arvore em p os-ordem.
9.
Seja n um n o de uma arvore bin aria e D(n) o n umero de descendentes de n (i.e. lhos, lhos dos lhos, lhos dos lhos dos lhos, etc.)
a) Escreva uma deni c ao recursiva de D(n). b) Escreva um algoritmo em pseudo-c odigo para imprimir os valores de D(n) em p os-ordem para cada n de uma arvore bin aria fornecida como entrada.
10. Escreva um algoritmo que recebe um apontador root para a raiz de uma arvore bin aria e visita os valores
dos seus n ospor ordem de profundidade. Nesta ordem, primeiro e visitada a raiz (n vel 0), depois os lhos da raiz (n vel 1), depois os lhos dos lhos da raiz (n vel 2) etc., sempre da esquerda para a direita. Dica: um percurso em pr e-ordem faz uso da pilha de chamadas recursivas. Considere usar explicitamente outra ED linear.
11. Escreva em pseudo-c odigo um algoritmo recursivo CheckBST que recebe como entrada um apontador root
para a raiz de uma arvore bin aria T e devolve uma tripla (bst, min, max), onde bst e um booleano que indica se T e uma arvore de busca bin aria e min, max indicam, respectivamente, os valores do menor e maior elemento de T . 12. Arvores de busca bin aria s ao u teis para busca de valores dentro de intervalos. Escreva em pseudo-c odigo um procedimento recursivo que recebe um apontador root para a raiz de uma arvore de busca bin aria, dois inteiros , r, r, e imprime, em ordem crescente, todos os elementos da arvore cujo valor situa-se no intervalo [ , r].
13. A remo c ao de um n o de uma arvore AVL faz-se como numa arvore de busca bin aria, seguida por rota c oes
eventualmente necess arias para a restaura c ao do seu balanceamento. Escreva em pseudo-c odigo o procedimento de remo c ao de um n o de uma arvore AVL.
14. Considere a arvore AVL T resultante da inser c ao dos valores (5, 3, 10, 2, 4, 7, 11, 1, 6, 9, 12, 8) nesta ordem.
Pede-se: a) Desenhar T b) Desenhar T logo ap os a remo c ao do valor 10 (antes das eventuais rota c oes) c) Desenhar T ap os cada rota c ao necess aria
15.
a) Represente a arvore AVL cujos n os enumerados em pr e-ordem s ao 3, 2, 1, 5, 4, 7, 6, 8. b) Represente a remo c ao do elemento 1 da arvore do item (a), desenhando a arvore imediatamente ap os a remo c ao (antes das rota c oes) e tamb em ap os cada rota c ao que se zer necess aria.