Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
P1 INF1010-Estruturas de Dados Avançadas 2011.1
13abr2011 Página 1/7
Aluno(a):__________________________________________número:____________
1a) 2.0
2a) 2.5
3a) 2.0
4a) 2.0
5a) 1.5
I. A prova é individual e sem consulta. A interpretação faz parte da questão.
II. O tempo de prova é 1:30 h.
III. As repostas devem seguir as questões. Caso precise de rascunho use o verso da folha.
1) (2.0 pontos.) Tabela de dispersão (hash table)
Mostre através de um desenho como ficaria a tabela hash de 7 elementos que recebesse as
seguintes chaves de busca (nesta ordem):
7,10,15,14,17,16
a) Se ela fosse com encadeamento exterior (o do trabalho) e com a função: ���� � �%7
b) Se ela fosse com encadeamento aberto e com a função:
���, � � ��
�%7, � 0,1,2, …
0 7
1 15
2 14
3 10
4 17
5 16
6
P1 INF1010-Estruturas de Dados Avançadas 2011.1
13abr2011 Página 2/7
2) (2.5 pontos) Árvores binárias de busca em ordem crescente. (obs.: os nós nulos não estão
representados nos desenhos).
a) Marque sim [S] ou não [N] se árvores abaixo são ou não árvores binárias de busca.
b) Marque com a letra (m) o nó da ABB abaixo que armazena o menor valor da árvore.
c) Marque com a letra (s) o nó da ABB abaixo que é o sucessor do nó “x”.
d) No algoritmo do trabalho do curso como ficaria a ABB abaixo após a retirada dos nós 17, 30
e 35 (nesta ordem)?
P1 INF1010-Estruturas de Dados Avançadas 2011.1
13abr2011 Página 3/7
3) (2.0 pontos.) Considere o vetor de heap mostrado abaixo. Mostre quais seriam as modificações
que o algoritmo de remoção provocaria no vetor. Ou seja, mostre explicando como o vetor iria
se modificando, chegando até ao heap final.
95,60,78,39,28,66,70,33
Sai 95 e o heap fica com: 33,60,78,39,28,66,70
33 troca com seu maior filho que é o 78: 78,60,33,39,28,66,70
33 na posição 2 tem filhos 2*2+1=5 e 2*2+2=6.
Ou seja, 66 e 70, respectivamente. 33 troca de posição com o 70 (maior).
Final: 78, 60, 70, 39, 28, 66, 33
P1 INF1010-Estruturas de Dados Avançadas 2011.1
13abr2011 Página 4/7
P1 INF1010-Estruturas de Dados Avançadas 2011.1
13abr2011 Página 5/7
4) (2.0 pontos) Escreva a função de inserção numa árvore binária de busca que armazena inteiros
em ordem crescente, cujo protótipo e estruturas estão mostrados abaixo. (obs.: se quiser você
pode criar funções auxiliares, mas elas também têm que ser apresentadas aqui).
typedef struct _abb Abb;
struct _abb {
int info;
Abb* pai;
Abb* esq;
Abb* dir;
};
Abb* abb_insere(Abb* raiz, int info);
Abb* abb_insere (Abb* r, int info){
if (r==NULL) {
Abb* no = (Abb*) malloc(sizeof(Abb));
no->info = info;
no->esq = no->dir = NULL;
return no;
}
else if (info<r->info) {
r->esq = abb_insere(r->esq,info);
r->esq->pai = r;
}
else if (info>r->info) {
r->dir = abb_insere(r->dir,info);
r->dir->pai = r;
}
return r;
}
P1 INF1010-Estruturas de Dados Avançadas 2011.1
13abr2011 Página 6/7
Ou:
static Abb* cria_filho(Abb* pai, int info) {
Abb* filho = (Abb*) malloc(sizeof(Abb);
filho->info = info;
filho->pai = pai;
filho->esq = filho->dir = NULL;
return filho;
}
Abb* abb_insere (Abb* r, int info){
if (r==NULL)
return cria_filho(r,info);
else if (info < r->info) {
if (r->esq==NULL)
r->esq = cria_filho(r,info);
else
r->esq = abb_insere(r->esq,info);
}
else if (info>r->info) {
if (r->dir==NULL)
r->dir = cria_filho(r,info);
else
r->dir = abb_insere(r->dir,info);
}
return r;
}
P1 INF1010-Estruturas de Dados Avançadas 2011.1
13abr2011 Página 7/7
5) (1.5 pontos.) A sequencia de Fibonacci é uma sequencia de números definida do seguinte modo:
�� � 0, �� � 1,… , �� � ����
���� ���� � � 2
Considere os dois algoritmos mostrados abaixo.
Algoritmo 1:
long int fibonacci_a1(long int n){
if (n==0)
return 0;
else if (n==1)
return 1;
else {
long int j,anterior=0,atual=1;
for (j=1;j<n;j++) {
long int proximo=atual+anterior;
anterior=atual;
atual=proximo;
}
return atual;
}
}
Algoritmo 2:
long int fibonacci_a2(long int n){
if (n==0) return 0;
else if (n==1)return 1;
else return fibonacci_a2(n-2)+fibonacci_a2(n-1);
}
a) Qual a complexidade do Algoritmo 1?
b) Quantas chamadas recursivas ocorrem no Algoritmo 2 para n=5?
c) Na sua avaliação qual dos dois algoritmos é mais eficiente? Porque?
a) A complexidade do Alg. 1 é O(n). É um laço de for apenas
b) 14 chamadas!
c) O alg. 1 é bem mais eficiente. Ele calcula apenas uma vez os numero de Fibonacci menores
que o enésimo. Veja no exemplo do item anterior quantas vezes o alg2 calcula F(2), 3!