Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

Prévia do material em texto

P2 INF1010-Estruturas de Dados Avançadas 2012.2 
26nov2012 Página 1/7 
Aluno(a):__________________________________________ matrícula:____________ 
 
 
1a) 1.0 
2a) 2.0 
3a) 2.0 
4a) 2.0 
5a) 3.0 
 
 
I. A prova é individual e sem consulta. 
II. A interpretação faz parte da questão. 
III. O tempo de prova é 1:30 h. 
IV. As respostas devem seguir as questões. 
V. Caso precise de rascunho use o verso da folha. 
VI. Caso parte da resposta esteja no verso, indique claramente este fato. 
 
 
P2 INF1010-Estruturas de Dados Avançadas 2012.2 
26nov2012 Página 2/7 
1) (1.0 pontos) A árvore a seguir é conhecida como árvore de Fibonacci. Ela é um caso especial 
pois temos o número máximo de altura para um número mínimo de nós em uma árvore 
balanceada. Remova desta árvore o nó 6 e depois faça a inserção dele novamente. Mostre 
graficamente as rotações que aconteceram. 
 
Resp.: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
P2 INF1010-Estruturas de Dados Avançadas 2012.2 
26nov2012 Página 3/7 
2) (2.0 pontos) Responda se a árvore B abaixo é valida e se ela é resultado da inserção das chaves 
exatamente nessa ordem:1, 3, 6, 8, 14, 32, 38, 39, 41. Justifique sua resposta de forma completa. 
 
Resp.: 
 
A árvore apresentada é válida, pois para árvores B a página raiz pode apresentar 
menos da metade dos elementos. Contudo o resultado da inserção dos elementos na 
ordem apresentada geraria uma árvore com a configuração apresentada abaixo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
P2 INF1010-Estruturas de Dados Avançadas 2012.2 
26nov2012 Página 4/7 
3) (2.0 pontos) Escreva em C uma função para determinar se uma árvore é AVL. A função deve 
receber como parâmetro o endereço do nó raiz da árvore e retornar o valor 1 se for AVL e 0 caso 
contrário. Use a seguinte estrutura: 
 
struct no { 
 void *chave; 
 struct no *esq, *dir; 
}; 
 
 
Resp.: 
 
 
int checkAVL( struct no *node ) { 
 if( node==NULL ) return 0; 
 int esq = checkAVL( node->esq ); 
 int dir = checkAVL( node->dir ); 
 if( ( dir < 0 ) || ( esq < 0 ) ) return -1; 
 if( abs( dir - esq ) > 1 ) return -1; 
 return( max( abs( dir ), abs( esq ) ) + 1 ); 
} 
 
int AVL( struct no *node ) { 
 if( checkAVL( node ) >= 0 ) return 1; 
 else return 0; 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
P2 INF1010-Estruturas de Dados Avançadas 2012.2 
26nov2012 Página 5/7 
4) (2.0 pontos) Descreva a diferença entre as árvores B e B+. Exemplifique cada uma das estruturas 
com ordem 3 e altura 3. Por que a árvore B+ é normalmente preferida como estrutura de acesso a 
arquivos de dados? 
Resp.: 
 
A diferença de uma árvore B é que nesta o nós internos possuem apenas chaves, 
somente os nós folhas que possuem chaves e dados, além disso as folhas são ligadas 
por uma lista encadeada. 
 
Um exemplo de árvore B é o seguinte: 
 
 
 
 
 
 
 
 
 
Já os mesmos dados em uma árvore B+ poderiam ser representados como: 
 
 
 
 
 
 
 
 
 
 
 
Com a árvore B+ foi possível organizar um arquivo de maneira que o processamento 
sequencial e aleatório de chaves fossem eficientes. Além disso os apontamentos 
somente nas folhas permitem que nós mais simples sejam usados para indexar a busca 
e depois nós mais completos acessarem os dados em sí. 
 
 
 
 
P2 INF1010-Estruturas de Dados Avançadas 2012.2 
26nov2012 Página 6/7 
5) (3.0 pontos) Considere o grafo ponderado não direcionado abaixo: 
a. (1 ponto) Liste os índices na ordem que eles serão visitados se for realizada uma busca por 
profundidade (depth-first search) começando pelo nó A. Assuma que os vizinhos de um nó são 
visitados por sua ordem alfabética. 
b. (1 ponto) Faça a mesma ordenação com as mesmas regras porém usando busca em largura 
(breadth-first search). 
c. (1 ponto) Usando Kruskal, mostre qual é a árvore geradora de custo mínimo. 
 
Resp.: 
 
a) A – B – C – E – D – I – H – J – F – G – K 
 
b) A – B – G – C – F – E – J – D – I – H – K 
 
c) 
 
 
 
 
 
 
 
 
 
 
 
 
 
P2 INF1010-Estruturas de Dados Avançadas 2012.2 
26nov2012 Página 7/7 
Protótipos e macros que podem ser úteis: 
 
 
stdio.h: 
int scanf (char* formato, ...); 
int printf (char* formato, ...); 
FILE* fopen (char* nome, char* modo); 
int fclose (FILE* fp); 
int fscanf (FILE* fp, char* formato, ...); 
int fprintf (FILE* fp, char* formato, ...); 
char* fgets(char* str, int size, FILE* fp)); 
int sscanf(char* str, char* formato, ...); 
 
math.h: 
double sqrt (double x); 
double pow (double x, double exp); 
double cos (double radianos); 
double sin (double radianos); 
 
string.h: 
int strlen (char* s); 
int strcmp (char* s, char *t); 
char* strcpy (char* destino, char* origem); 
char* strcat (char* destino, char* origem); 
 
stdlib.h: 
int abs ( int n ); 
void* malloc (int nbytes); 
void free (void* p); 
void qsort (void *vet, int n, int tam, int (*comp) (const void*, const void*));

Mais conteúdos dessa disciplina