Buscar

Exercícios Estrutura de Dados

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 7 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 7 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

Continue navegando


Prévia do material em texto

Lista de Exercícios – Estrutura de Dados – Prof. Janderson Aguiar 
Curso de Ciência da Computação – CCEA/UEPB 
 
CENTRO DE CIÊNCIAS EXATAS E SOCIAIS APLICADAS — CCEA 
CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO 
ESTRUTURA DE DADOS 
LISTA DE EXERCÍCIOS 
 
ANÁLISE DE ALGORITMOS 
1) Suponha que há dois computadores: o computador A (que executa um bilhão de instruções 
por segundo) e o computador B (que executa dez milhões de instruções por segundo). 
Suponha ainda que um programador criou um código para o computador A que exige 3n² 
instruções para ordenar n números. Por outro lado, para ordenar n números no computador 
B, outro programador criou um código que exige 25n.log2n instruções. Quanto tempo esses 
computadores ordenam cem números? E mil números? E um milhão de números? 
 
2) Qual é o menor valor de n tal que um algoritmo cujo tempo de execução é 100n² funciona 
mais rápido que um algoritmo cujo tempo de execução é 2n na mesma máquina? 
 
3) Expresse a função n³/1000 - 100n² - 100n + 3 em termos da notação Θ. 
 
4) Considere as seguintes funções f(n) e g(n). Prove ou conteste que f(n) = O(g(n)). 
a) f(n)=n³ e g(n)=200n² 
b) f(n)=2n²+3n+4 e g(n)=n² 
c) f(n)=3+(2/n) e g(n)=1 
 
5) Considere um algoritmo de pesquisa linear (que faz a varredura de um array de n números 
para procurar um valor v). Quantos elementos da sequência de entrada precisam ser 
verificados em média, supondo-se que o elemento que está sendo procurado tenha a 
mesma probabilidade de ser qualquer elemento no array? E no pior caso? Quais são os 
tempos de execução do caso médio e do pior caso da pesquisa linear em notação Θ? 
Justifique suas respostas. 
 
6) Por que a declaração “o tempo de execução no algoritmo A é no mínimo O(n²)” é isenta de 
significado? 
 
7) É verdade que 2n+1 = O(2n)? 
 
8) É verdade que 22n = O(2n)? 
 
9) Considerando que f(n) e g(n) são funções assintoticamente positivas, prove ou conteste 
cada uma destas conjecturas: 
a) f(n)=O(g(n)) implica g(n)=O(f(n)) 
b) f(n)+g(n) = Θ(min(f(n),g(n))) 
c) f(n)=O((f(n))²) 
 
10) Use o método de árvore de recursão para demonstrar que: 
a) T(n) = T(n/3) + T(2n/3) + n ∈ O(n lg n) 
b) T(n) = 3T(n/4) + n ∈ O(n) 
c) T(n) = T(n-1) + Θ(1) ∈ O(n) 
 
Lista de Exercícios – Estrutura de Dados – Prof. Janderson Aguiar 
Curso de Ciência da Computação – CCEA/UEPB 
11) Use o método mestre para fornecer limites assintóticos superiores e inferiores para T(n) em 
cada uma das seguintes recorrências. 
a) T(n) = 4T(n/3) + n 
b) T(n) = 4T(n/2) + n²√n 
c) T(n) = 3T(n/3 − 2) + n/2 
 
12) [POSCOMP 2012] Em relação à pesquisa sequencial e binária, assinale a alternativa correta. 
a) A pesquisa binária em média percorre a metade dos elementos do vetor. 
b) A pesquisa binária percorre no pior caso log2 n elementos. 
c) A pesquisa binária pode ser feita sobre qualquer distribuição dos elementos. 
d) A pesquisa sequencial exige que os elementos estejam completamente ordenados. 
e) A pesquisa sequencial percorre todos os elementos para encontrar a chave. 
 
13) Realize uma análise relativa a algoritmos de Busca Linear e Busca Binária. 
a) Abordagem experimental: implemente e execute os algoritmos (usando Java), 
sem usar recursividade. 
i. Entradas para os algoritmos: 
 Elemento procurado: -1. 
 Vetor (variar!): [1, ... ,100]; [1, ... ,1000]; [1, ... ,10000]. 
ii. Execução do experimento: para cada um dos três vetores de entrada criados, 
execute cada algoritmo de busca pelo menos 10 vezes e registre a média dos 
tempos de execução (colocar em uma tabela como a apresentada abaixo). 
 
Tamanho do 
vetor de entrada 
Média dos tempos de execução 
do algoritmo ‘Busca Linear’ 
(em nanosegundos) 
Média dos tempos de execução 
do algoritmo ‘Busca Binária’ 
(em nanosegundos) 
100 elementos 
1000 elementos 
10000 elementos 
 
iii. Apresentação dos resultados: gerar um gráfico de colunas (sugestão: usar o Excel) 
com estas características: 
 Eixo x: tamanho do vetor de entrada 
 Eixo y: média dos tempos de execução observados 
 Cada algoritmo terá uma barra de uma cor (pode ser preto e branco) 
b) Realize também uma análise do custo de ambos os algoritmos (Busca Linear e 
Busca Binária) com base na identificação das operações primitivas e das outras 
operações (método analítico). 
 
ALGORITMOS DE ORDENAÇÃO 
14) É possível modificar um algoritmo de ordenação para que, no melhor caso, o tempo de 
execução seja Θ(n)? Se sim, como? 
 
15) [POSCOMP 2010] Considere o problema de ordenação onde os vetores a serem ordenados, 
de tamanho n > 0, possuem ⌊n/2⌋ valores iguais a um número real x e ⌈n/2⌉ valores iguais a 
um outro número real y. Considere que os números reais x e y são conhecidos e fixos, 
porém estão distribuídos aleatoriamente no vetor a ser ordenado. Neste caso, é correto 
afirmar: 
a) Podemos ordenar estes vetores a um custo O(n). 
b) No caso médio, o Quicksort será o algoritmo mais eficiente para este problema, 
com um custo O(n log n). 
c) O algoritmo de ordenação por inserção sempre opera no melhor caso com um 
custo O(n). 
d) O limite inferior para esta classe de problema é Ω(n²). 
e) O limite inferior para esta classe de problema é Ω(n logn). 
Lista de Exercícios – Estrutura de Dados – Prof. Janderson Aguiar 
Curso de Ciência da Computação – CCEA/UEPB 
16) Realize uma análise experimental relativa a algoritmos de ordenação (não decrescente). 
a) Implemente estes algoritmos de ordenação: Bubble Sort, Selection Sort, Insertion 
Sort, Merge sort, Quicksort, Counting Sort, Radix Sort, Bucket sort. 
b) Crie três arrays de tamanho 20: 
i. Um array com elementos distintos ordenados de maneira crescente; 
ii. Um array com elementos distintos ordenados de maneira decrescente; 
iii. Um array com elementos aleatórios. 
c) Para cada algoritmo implementado, calcule o tempo de execução (em 
milisegundos ou nanosegundos) relativo a cada um dos três arrays (letra b) a 
serem passados como entrada. Execute pelo menos 10 vezes e calcule a média. 
 OBS. 1: Não se deve criar arrays aleatórios distintos como entrada para cada algoritmo. Os 
arrays devem ser os mesmos para realizar a comparação. 
 OBS. 2: Deve-se atentar para não passar como entrada de um algoritmo a saída de outro 
algoritmo (pois, neste caso, a entrada sempre estará ordenada). 
 OBS. 3: Para as repetições (pelo menos 10 vezes), use a mesma entrada (inclusive no caso 
de array aleatório criado). 
d) Repita o processo (letra b e letra c) com arrays de tamanho 2000. 
e) Apresente os resultados obtidos em uma tabela (como a seguinte) e comente-os. 
i. Cada célula da tabela deve indicar a tempo médio de execução (pelo menos 10 execuções). 
 
Algoritmo 
Entrada ordenada Entrada aleatória Entrada ordenada inversamente 
n=20 n=2000 n=20 n=2000 n=20 n=2000 
Bubble sort 
Selection sort 
Insertion sort 
Merge sort 
Quicksort 
Counting sort 
Radix sort 
Bucket sort 
 
PILHA / FILA 
17) Como fica o estado de uma pilha inicialmente vazia após a execução destes comandos: 
 push(10) 
 push(5) 
 pop() 
 push(7) 
 top() 
 pop() 
 isEmpty() 
 
18) Como fica o estado de uma fila inicialmente vazia após a execução dos comandos: 
 enqueue(10) 
 enqueue(5) 
 dequeue() 
 enqueue(7) 
 head() 
 dequeue() 
 isEmpty() 
 
Lista de Exercícios – Estrutura de Dados – Prof. Janderson Aguiar 
Curso de Ciência da Computação – CCEA/UEPB 
19) Suponha que uma pilha S inicialmente vazia realizou um total de 25 operações PUSH, 12 
operações TOP e 10 operações POP em uma determinada ordem. 3 operações POP 
retornaram StackUnderflowException. Qual é o tamanho atual da pilha S? 
 
20) Em relação às estruturas Pilha e Fila, implemente em Java: 
a) Uma Pilha, utilizando um array de tamanho 10. 
b) Uma Fila (abordagem circular), utilizando um array de tamanho 10. 
c) Uma Fila a partir de duas Pilhas (com base na implementaçãoda letra a). 
d) Uma Pilha a partir de duas Filas (com base na implementação da letra b). 
 
LISTA ENCADEADA 
21) Implemente em Java: 
a) Uma Lista Simplesmente Encadeada utilizando métodos iterativos. 
b) Uma Lista Simplesmente Encadeada utilizando métodos recursivos. 
c) Uma Pilha, a partir de uma Lista Simplesmente Encadeada (item a ou b), com as 
operações PUSH e POP em tempo O(1). 
d) Uma Fila, a partir de uma Lista Simplesmente Encadeada (item a ou b), com as 
operações ENQUEUE e DEQUEUE em tempo O(1). 
e) Refaça os itens a e b para uma Lista Duplamente Encadeada. 
 
22) Considere que se tem a implementação de uma SingleLinkedList com as operações 
getHead(), size() e isEmpty(). Considere também que cada elemento dessa estrutura 
de dados é um SingleLinkedListNode, com as operações getNext(), getData() e 
isNIL(). Escreva métodos iterativos (pseudocódigos) para: 
a) Encontrar o maior elemento da lista; 
b) Encontrar o menor elemento da lista; 
c) Inverter os elementos da lista. 
 
ÁRVORE BINÁRIA DE BUSCA 
23) Implemente em Java uma Árvore Binária de Busca (BST). Considere que a árvore é criada 
a partir das inserções de uma sequência de números inteiros (passados por meio de um 
array). Além dos elementos passados pelo array, deve ser possível inserir mais elementos 
na BST. Além disso, deve ser possível mostrar na tela os elementos da árvore via 
percursos de Pré-ordem, Em-ordem e Pós-Ordem. 
 
24) Considere duas sequências de elementos representando uma determinada Árvore Binária 
de Busca: a sequência <4,2,1,3,6,5,7> representa o percurso Pré-ordem e a 
sequência <1,2,3,4,5,6,7> representa o percurso Em-ordem. A partir dessas 
sequências, é possível recuperar a estrutura da árvore? Se sim, desenhe a árvore e mostre 
a sequência resultante do percurso Pós-Ordem. 
 
HEAP 
25) Implemente em Java uma Max Heap e uma Min Heap. Considere que as estruturas são 
criadas a partir de uma sequência de números inteiros (passados por meio de um array). 
Além dos elementos passados pelo array, deve ser possível inserir mais elementos nas 
heaps. Além disso, considerando que a estrutura se trata de uma Árvore Binária, deve ser 
possível mostrar na tela os elementos da árvore via percursos de Pré-ordem, Em-ordem e 
Pós-Ordem. 
OBS.: Considerando a abordagem 
recursiva para a implementação de uma 
SingleLinkedList, refaça a questão 
22 escrevendo métodos recursivos! 
Lista de Exercícios – Estrutura de Dados – Prof. Janderson Aguiar 
Curso de Ciência da Computação – CCEA/UEPB 
26) A sequência <23,17,14,6,13,10,1,5,7,12> é uma Min heap? É uma Max heap? 
 
27) Considere o array A=[27,17,3,16,13,10,1,5,7,12,4,8,9,0] que representa uma 
Max heap. Ilustre a operação de HEAPIFY(A, 3). 
 
28) Considere um array A que representa uma Max heap. Comente o efeito de chamar 
HEAPIFY(A,i) nos seguintes casos: (i) quando o elemento A[i] é maior que seus filhos; 
(ii) para i > heap-size[A]/2. 
 
29) Ilustre a operação de BUILD-MAX-HEAP sobre o array A=[5,3,17,10,84,19,6,22,9]. 
 
TABELAS HASH 
30) Implemente, em Java, uma Tabela Hash, resolvendo colisões por meio de endereçamento 
fechado (usando uma Lista Simplesmente Encadeada, com inserções no início) e usando o 
método da divisão (passando m como parâmetro na criação da tabela). Além dos métodos 
de inserção, busca e remoção, implemente um método print() para mostrar na tela todos os 
elementos de cada posição da tabela. Lembrete: não deve ser permitido armazenar 
elementos repetidos. 
 
31) Desenhe uma tabela hash com endereçamento aberto e tamanho 9 (com probing linear). 
Use a função de hash h(k)=k%9. Insira as chaves: 5, 29, 20, 0, 27 e 18 na tabela nessa 
ordem e mostre o estado final da tabela após executar todas as operações. 
 
32) Suponha que você deseja fazer um estudo comparativo entre duas tabelas hash de 
tamanho 11. Uma delas usa endereçamento aberto com probing linear e função primária 
de hash h(k)=k%m. A outra usa a mesma função primária e probing quadrático com c1=1 e 
c2=3. Qual a melhor tabela considerando que as operações realizadas foram apenas 
inserções dos valores: 10, 22, 31, 4, 15, 28, 17, 88, 59? 
 
33) [POSCOMP 2009] Considere uma tabela de espalhamento (tabela hash) de comprimento 
m=11, que usa endereçamento aberto (open addressing), a técnica de tentativa linear 
(linear probing) para resolver colisões e com a função de dispersão (função hash) 
h(k) = k mod m, onde k é a chave a ser inserida. Considere as seguintes operações 
sobre essa tabela: 
 Inserção das chaves 3, 14, 15, 92, 65, 35 (nesta ordem); 
 Remoção da chave 15; e 
 Inserção da chave 43. 
Escolha a opção que representa esta tabela após estas operações: 
a) 65 – ø – 35 – 14 – ø – 92 – 3 – ø – ø – ø – 43 
b) 43 – ø – 35 – 3 – 14 – 92 – ø – ø – ø – ø – 65 
c) 65 – ø – 35 – X – 14 – 92 – 3 – ø – ø – ø – 43 
d) 65 – ø – 35 – 3 – 14 – 92 – ø – ø – ø – ø – 43 
e) 43 – ø – 35 – 3 – 14 – X – 92 – ø – ø – ø – 65 
 
ÁRVORES AVL 
34) Partindo de uma árvore AVL vazia, realize a inserção da seguinte sequência de chaves: 99, 
44, 71, 80, 74, 63, 59, 120, 98, 150. Redesenhe a árvore após cada inserção. Indique para 
cada rotação feita, o nó desregulado e a rotação aplicada (LL, RR, LR, RL). 
 
Lista de Exercícios – Estrutura de Dados – Prof. Janderson Aguiar 
Curso de Ciência da Computação – CCEA/UEPB 
35) Usando a árvore construída no exercício anterior, remova os nós 59 e 63 mostrando as 
árvores resultantes a cada exclusão e a rotação aplicada (quando necessário). 
 
36) Um programador A inseriu os elementos do vetor [14,8,25,19,16,6,3,4,5] em ordem em 
uma árvore AVL inicialmente vazia. Um programador B inseriu os elementos do vetor 
[14,8,25,19,16,6,3,5,4] em ordem em uma outra árvore AVL inicialmente vazia. Ambos 
programadores afirmam que apenas rotações simples aconteceram. Eles estão corretos? 
Justifique sua resposta. 
 
37) Imagine que você tem o seguinte vetor [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] e quer 
inserir seus elementos em uma árvore AVL inicialmente vazia de forma a evitar rotações. 
Note que, se você inserir nessa ordem, a árvore começa a pesar para a direita e as 
rotações inevitavelmente acontecem. Você teria alguma ideia para inserir esses elementos 
na árvore AVL de forma a evitar qualquer rotação? Se sim, descreva sua ideia. 
 
ÁRVORES SPLAY 
38) Dada uma árvore splay inicialmente vazia, insira as chaves 0, 2, 4, 6, 8 (nessa ordem) e 
desenhe a árvore depois de cada operação. 
 
39) Considerando a árvore splay construída na questão anterior (após as inserções), pesquise 
pelas chaves 1, 3, 5, 7 (nessa ordem) e mostre as árvores splay resultantes após cada 
operação de busca. 
 
40) Considerando a árvore splay da questão anterior (após as operações de busca), remova as 
chaves 0, 2, 4, 6, 8 (nessa ordem) e mostre as árvores resultantes após cada operação de 
remoção. 
 
41) Dada a seguinte árvore splay: 
 
a) Mostre a árvore resultante do splay do nó 14. 
b) Encontre uma sequência de operações (inserir, excluir ou pesquisar) na árvore 
inicialmente vazia, que resultará na seguinte árvore. 
 
 
42) Mostre o resultado da inserção (árvore final) dos elementos 3, 1, 4, 5, 2, 9, 6, 8 em uma 
árvore splay inicialmente vazia. Em seguida remova o elemento 3 e mostre a árvore 
resultante. 
 
Lista de Exercícios – Estrutura de Dados – Prof. Janderson Aguiar 
Curso de Ciência da Computação – CCEA/UEPB 
ÁRVORES PV 
43) Insira os seguintes valores em uma árvore PV inicialmente vazia e mostre a árvore 
(incluindo a cor dos nós) após cada operação: 41, 38, 31, 12, 19, 8. 
 
44) Suponha que uma chave x é inserida em uma árvore PV e logo em seguida é removida. A 
árvore resultante é a mesma antes da inserção de x? Justifique sua resposta. 
 
45) Implemente um algoritmo recursivo que retorna a quantidade de nós pretos em uma árvore 
PV. 
 
46) Qual a altura máxima de uma árvore PV com altura preta igual a 4? 
 
ÁRVORES B47) Qual a ordem da árvore B a seguir? 
 
 
48) Qual o número máximo de elementos que podem ser armazenados em uma árvore B de 
ordem 20 com altura 2? Justifique sua resposta. 
 
49) Considerando a representação abaixo de árvore B, implemente um método (usando 
recursão) que retorna o maior elemento armazenado em uma árvore B. 
 
 
public class BNode<T extends Comparable<T>> { 
LinkedList<T> elements; 
LinkedList<BNode<T>> children; 
BNode<T> parent; 
intmaxKeys; 
intmaxChildren; 
... 
} 
 
public class BTreeImpl<K,V> implementsBTree<K, V> { 
BNode<K,V> root; 
int order; 
... 
}