Buscar

Prova de Estrutura de Dados II

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

Prévia do material em texto

Universidade Federal da Fronteira Sul
Cieˆncia da Computac¸a˜o
Estrutura de Dados II
Marcelo Cezar Pinto
Prova de Recuperac¸a˜o
Chapeco´, 12 de dezembro de 2014.
Respostas:
1. (2 pontos) Escreva uma func¸a˜o file2buffer com o proto´tipo indicado abaixo que
recebe:
• um ponteiro de arquivo f — considere que o arquivo esta´ aberto;
• um inteiro delta para ler o conteu´do do arquivo f a partir da posic¸a˜o atual
+delta;
• um vetor de caracteres b — o buffer — de tamanho size caracteres — na˜o
esquec¸a o espac¸o para o terminador ’\0’;
• um inteiro n que indica quantos caracteres ja´ esta˜o presentes no buffer b da
posic¸a˜o 0 a posic¸a˜o n-1.
A func¸a˜o deve devolver, se poss´ıvel, o buffer b totalmente preenchido a partir da
posic¸a˜o b[n] com o conteu´do do arquivo f a partir da posic¸a˜o atual deslocada em
delta bytes e devolver a quantidade de caracteres escritos no buffer de fato.
int file2buffer( FILE *f, int delta, char *b, unsigned int size, int n);
Soluc¸a˜o:
int file2buffer( FILE *f, int delta , char *b, unsigned int size ,
int n) {
int r = 0;
if ( size - n - 1 > 0 ) {
fseek(f, delta , SEEK_CUR);
r = fread(&b[n], 1, size -n-1, f);
b[n+r] = ’\0’;
if ( (r != size -n-1) && !feof(f) ) return 0;
return r;
}
return 0;
}
Universidade Federal da Fronteira Sul
Cieˆncia da Computac¸a˜o
Estrutura de Dados II
Marcelo Cezar Pinto
Prova de Recuperac¸a˜o
2. (2 pontos) Escreva uma func¸a˜o insertBST com o proto´tipo indicado abaixo que, se
o valor value passado como paraˆmetro na˜o esta´ na a´rvore bina´ria de busca com raiz
root, insere um novo no´ na a´rvore de forma que se value < root->v o no´ deve ficar
na suba´rvore esquerda da raiz e se value > root->v o no´ deve ficar na suba´rvore
direita da raiz; e assim recursivamente.
Entretanto, caso o valor value ja´ esteja na a´rvore, a func¸a˜o apenas aumenta em 1
sua quantidade no no´ cujo valor seja igual a value.
A func¸a˜o devolve 1 se um novo no´ foi criado, 0 se o no´ ja´ existia na a´rvore e -1 em
outras situac¸o˜es.
int insertBST( Tree **root, int value);
Use a seguinte estrutura de a´rvore:
typedef struct bstfreq {
int value, quantity;
struct bstfreq *p, *left, *right;
} Tree;
Soluc¸a˜o:
int insertBSTrec(Tree *n, int v);
Tree *newnodeBST( int v) {
Tree *n = NULL;
n = (Tree *) malloc( sizeof(Tree) );
if ( n != NULL ) {
n->value = v;
n->quantity = 1;
n->p = n->left = n->right = NULL;
}
return n;
}
int insertBST( Tree **root , int value) {
if ( *root == NULL ) {
*root = newnodeBST(value);
if ( *root == NULL ) return -1;
return 1;
}
return insertBSTrec (*root , value);
}
Universidade Federal da Fronteira Sul
Cieˆncia da Computac¸a˜o
Estrutura de Dados II
Marcelo Cezar Pinto
Prova de Recuperac¸a˜o
int insertBSTrec(Tree *n, int v) {
if ( v == n->value ) {
n->quantity ++;
return 0;
}
else if ( v < n->value ) {
if ( n->left != NULL ) return insertBSTrec(n->left , v);
n->left = newnodeBST(v);
if ( n->left == NULL ) return -1;
n->left ->p = n;
return 1;
}
else {
if ( n->right != NULL ) return insertBSTrec(n->right , v);
n->right = newnodeBST(v);
if ( n->right == NULL ) return -1;
n->right ->p = n;
return 1;
}
return -1;
}
/* Antes de usar a funcao insertBST , a *
* variavel root deve ser alocada assim: *
* Tree **root = NULL; *
* root = (Tree **) malloc(sizeof(Tree *)); *
* *root = NULL; */
3. (2 pontos) Considere um heap ma´ximo H e as seguintes operac¸o˜es poss´ıveis:
I x: insere o nu´mero x em H;
R: remove a raiz de H;
M: mostra o vetor que armazena H.
Para a sequeˆncia de operac¸o˜es a seguir escreva em um arquivo texto, para cada
operac¸a˜o M, o vetor que armazena o heap H no formato:
H 123 45 100 20 5 99 2 19
i 0 1 2 3 4 5 6 7
onde H[i] e´ o valor armazenado na posic¸a˜o i do vetor que repreesenta o heap.
Operac¸o˜es:
M
I 8
I 98
I 14
Universidade Federal da Fronteira Sul
Cieˆncia da Computac¸a˜o
Estrutura de Dados II
Marcelo Cezar Pinto
Prova de Recuperac¸a˜o
I 5
I 57
I 1
M
R
I 23
I 75
I 42
R
M
R
M
Soluc¸a˜o:
(heap vazio)
H
i
insere 8, 98, 14, 5, 57, 1;
H 98 57 14 5 8 1
i 0 1 2 3 4 5
remove 98; insere 23, 75, 42; remove 75;
H 57 42 23 8 1 14 5
i 0 1 2 3 4 5 6
remove 57;
H 42 8 23 5 1 14
i 0 1 2 3 4 5
4. (2 pontos) Considere uma tabela hash de tamanho m = 1000 e uma func¸a˜o hash
correspondente h(k) = bm(kA mod 1)c para A = (√5−1)/2. Escreva em um arquivo
texto os locais em que as chaves 61, 62, 63, 64 e 65 sera˜o mapeadas.
Respostas sem apresentar os ca´lculos recebem nota zero.
Soluc¸a˜o:
h(k) = piso( 1000*( 0,618033989*k mod 1 ) )
A funcao x mod 1 remove a parte inteira de x,
deixando apenas a parte fracionaria.
Universidade Federal da Fronteira Sul
Cieˆncia da Computac¸a˜o
Estrutura de Dados II
Marcelo Cezar Pinto
Prova de Recuperac¸a˜o
h(61) = piso( 1000*( 37,700073314 mod 1 ) )
h(61) = piso( 1000 * 0,700073314 )
h(61) = piso( 700,073314 )
h(61) = 700
h(62) = piso( 1000*( 38,318107302 mod 1 ) )
h(62) = piso( 1000 * 0,318107302 )
h(62) = piso( 318,107302 )
h(62) = 318
h(63) = piso( 1000*( 38,936141291 mod 1 ) )
h(63) = piso( 1000 * 0,936141291 )
h(63) = piso( 936,141291 )
h(63) = 936
h(64) = piso( 1000*( 39,55417528 mod 1 ) )
h(64) = piso( 1000 * 0,55417528 )
h(64) = piso( 554,17528 )
h(64) = 554
h(65) = piso( 1000*( 40,172209269 mod 1 ) )
h(65) = piso( 1000 * 0,172209269 )
h(65) = piso( 172,209269 )
h(65) = 172
5. (2 pontos) Calcule a ordem p dos no´s internos e a ordem pf dos no´s folha de uma
a´rvore B+ onde o tamanho de um bloco e´ 1024 bytes, ponteiros de dados ocupam 8
bytes, ponteiros de a´rvore ocupam 4 bytes e cada chave utiliza 12 bytes.
Escreva estes resultados em um arquivo texto juntamente com a altura da a´rvore
— lembre-se: a raiz esta´ na altura zero! — para armazenar 25 mil chaves distintas
quando os no´s esta˜o 75% cheios.
Respostas sem apresentar os ca´lculos recebem nota zero.
Soluc¸a˜o:
B = 1024
Pa = 4
Pd = 8
K = 12
Universidade Federal da Fronteira Sul
Cieˆncia da Computac¸a˜o
Estrutura de Dados II
Marcelo Cezar Pinto
Prova de Recuperac¸a˜o
Nos internos:
p*Pa + (p-1)*K <= B
4p + 12(p-1) <= 1024
16p <= 1024 + 12
p <= 1036/16 = 64,75
p = 64
Nos folha:
pf*(K + Pd) + Pa <= B
(12+8)pf + 4 <= 1024
20pf <= 1024 - 4
pf <= 1020/20 = 51
pf = 51
Nos internos a 75% de ocupacao:
0,75*p = 0,75*64 = 48 ponteiros ocupados por no
Nos folha a 75% de ocupacao:
0,75*pf = 0,75*51 = 38,25 ponteiros ocupados por no
25000 chaves ocupam 654 nos folha (25000/38,25 = 653,6).
Cada no interno aponta para 48 nos folha. No nivel imediatamente
acima das folhas, existem 14 nos internos (654/48 = 13,6).
O proximo nivel e a raiz pois os 14 nos internos ocupam
somente 1 no interno (14/48 = 0,3).
Assim, a arvore tem altura 2.

Outros materiais