Академический Документы
Профессиональный Документы
Культура Документы
Questão 1 2 3 4 5 6 7 8 Total
Valor 1 1 1 1 1 1 2 2 10,0
Nota
________________________________ _______________________________
Nome legível Assinatura: (como na lista de presença)
Questão 1 (1 ponto):
8 15 28 37 45 54 64 73
Com esses 8 números, diga qual o conteúdo da tabela HASH nos casos abaixo:
a) Tabela HASH simples com função de HASH: x % 10 (resto da divisão por 10).
i 0 1 2 3 4 5 6 7 8 9
tab[i] 64 None None 73 54 15 45 37 8 28
i 0 1 2 3 4 5 6 7 8 9
tab[i] 54 28 None 64 45 15 73 37 8 None
Questão 2 (1 ponto):
O Algoritmo de Boyer-Moore (versão 1) para procurar uma palavra A em um texto B, verifica qual o
próximo caractere de B para decidir qual o deslocamento de A para a próxima comparação com B. A
comparação é feita da direita para a esquerda.
Considere agora como texto A a string com seu NUSP de 8 dígitos. Com esse algoritmo, diga qual o
deslocamento a ser feito em A quando o próximo caractere de B for igual a um dos dígitos de 0 a 9.
Caractere Deslocamento
0 9
1 9
2 9
3 1
4 2
5 4
6 9
7 5
8 6
9 9
Questão 3 (1 ponto):
a) Dê uma permutação desse NUSP para a qual sejam necessárias 5 trocas usando o método da
Bolha para a classificação.
44557388
44557883
c) Considerando a permutação onde o seu NUSP tem os mesmos dígitos em ordem decrescente.
Exemplo: Se o seu NUSP é 43367432, em ordem decrescente seria: 76443332
8 8 7 5 5 4 4 3
25
Questão 4 (1 ponto):
Considere uma lista V com 8 elementos. Cada elemento contém um algarismo de seu NUSP.
i 0 1 2 3 4 5 6 7
V[i] – exemplo 8 4 7 8 3 6 2 4
V[i] com seu NUSP 8 4 7 8 3 6 2 4
a) Usando o algoritmo de partição da tabela usado pelo método Quick em que o último elemento é
o pivô (no exemplo acima o 4) qual seria a situação da tabela com seu NUSP no final da
primeira operação de partição.
i 0 1 2 3 4 5 6 7
V[i] 2 4 3 4 8 6 7 8
i 0 1 2 3 4 5 6 7
V[i] – exemplo 8 8 7 6 4 4 3 2
V[i] com seu NUSP 8 8 7 6 4 4 3 2
decrescente
i 0 1 2 3 4 5 6 7
V[i] 2 8 7 6 4 4 3 8
Questão 5 (1 ponto):
i 0 1 2 3 4 5 6 7
V[i] – exemplo 2 3 4 4 6 7 8 8
V[i] com seu NUSP 2 3 4 4 6 7 8 8
Usando o algoritmo de busca binária em tabela ordenada, diga quantas comparações serão necessárias
com elementos da tabela para se procurar cada um dos dígitos de 0 a 9 nesta tabela:
Para cada um dos algoritmos abaixo, diga qual a sua ordem em função de n (notação O(n)):
Uma ABB é uma estrutura onde todos os elementos à esquerda de um determinado elemento possuem
info menores e os da direita maiores ou iguais.
A solução tem que ser recursiva (ou com a ajuda de uma pilha) porque temos que analisar a parte
esquerda, voltar a raiz para imprimir ou “appendar” e em seguida verificar a parte direita.
Trata-se então de percorrer a ABB na seguinte sequência: parte esquerda, raiz, parte direita.
a) Escreva uma função ImprimeMI (R, x) que recebe uma ABB R e um valor x. Imprime todos os
elementos da ABB (campo info) maiores ou iguais a x em ordem crescente.
A solução acima só verifica a parte esquerda quando necessário, pois se R,info == x os maiores oi
iguais estarão sempre a direita. Mas também funciona verificar a parte esquerda quando é igual embora
desnecessário. As duas variações abaixo fazem isso:
b) Escreva uma função MontaTabMI(R, x, Tab) que recebe uma ABB R, um valor x e uma lista
Tab (inicialmente vazia). Coloca em Tab todos os elementos (campo info) da ABB maiores ou
iguais a x em ordem crescente. Análoga a anterior. Em vez de imprimir, monta uma lista.
Ou ainda:
Escreva uma função ImprimePE(v)que recebe uma lista v, com números inteiros, calcula e imprime
o produto escalar de v por todas as sequências de mesmo tamanho contendo apenas zeros e uns.
Exemplo:
Supondo v = [2 -2 1], imprimir:
[2 -2 1] . [0, 0, 0] = 0
[2 -2 1] . [0, 0, 1] = 1
[2 -2 1] . [0, 1, 0] = -2
[2 -2 1] . [0, 1, 1] = -1
...
[2 -2 1] . [1, 1, 1] = 1
A solução deve funcionar para qualquer lista v não somente para lista de tamanho 3 como no exemplo.
Trata-se de gerar todas as sequencias do tamanho de v que contenham apenas zeros e uns e multiplicar
por v. Equivalente a gerar todos os números na base 2 de [0, 0, ..., 0] até [1, 1, ..., 1]. É o primeiro
algoritmo de enumeração visto no curso.