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!