Grupo 2 - Implementação de uma classe simples

Documentos relacionados
Grupo 2 - Implementação de uma Classe Simples

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

Filas de Prioridade e Heaps

Lista de Exercícios 04

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Algoritmos e Estruturas de Dados 2006/2007

Estruturas de dados e algoritmos fundamentais

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Orientação a Objetos AULA 09

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Estruturas de dados para listas arrays e listas ligadas

Exame de Estruturas de Dados 2010.Junho.26

Árvores de Suporte de Custo Mínimo

Estrutura de Dados: Aula 3 - Linguagem C

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Universidade de São Paulo

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

Programação Orientada a Objetos

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Capítulo 8: Abstrações de dados

INF1010 Lista de Exercícios 2

Algoritmos de pesquisa. Tabelas de dispersão/hash

4. Listas, Pilhas, e Filas

4. Listas, Pilhas, e Filas

Pilhas e Filas. Nádia Félix e Hebert Coelho

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Estrutura de dados - Listas Encadeadas

Departamento de Ciência de Computadores Estruturas de Dados (CC114) FCUP 2010/11. 2 o Teste: 20/Junho/2011

Estruturas de Dados Estruturas de Dados Fundamentais

Tabelas de dispersão/hash

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011

Algoritmos e Estruturas de Dados 2005/2006

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

Estruturas de Dados Encadeadas

Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares)

1. Cotação de cada pergunta: / / (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame.

FICHA 8 PILHAS E FILAS

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

INF 1620 P2-23/10/04 Questão 1 Nome:

Motivação. Estrutura de Dados. Motivação. Motivação. Por que estudar os tipos de dados? Duas são as principais preocupações em um projeto de software

Exame de Admissão. Instituto Nacional de Pesquisas Espaciais 18 de setembro de 2018 A: GABARITO

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Desenho e Análise de Algoritmos

Busca em vetores. Para encontrar um elemento em um vetor desordenado é caro Porém, inserir ou remover é barato.

Hashing: conceitos. Hashing

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

Filas Implementação Sequencial

Dicionários. TAD Orientado a conteúdo

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

Aplicações de listas e outras estruturas

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Prova Substitutiva PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Listas Ligadas, Pilhas e Filas

Hashing. ACH Introdução à Ciência da Computação II. Delano M. Beder

Estruturas de Dados I

Estrutura de Dados Listas

Lista 2 - PMR2300. Fabio G. Cozman 24 de maio de 2013

Árvores & Árvores Binárias

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Árvores Binárias de Busca

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Teoria dos Grafos Aula 3

Prof. Jesus José de Oliveira Neto

SCC Algoritmos e Estruturas de Dados I

1 OBJETIVOS 2 HORÁRIO DE AULAS 3 PROGRAMA

- Mapa de memória de um processo - Ponteiros

Análise de Complexidade de Algoritmos

Análise e Síntese de Algoritmos

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

Bubble Sort. Tempo total O(n 2 )

Aplicações de listas Outras estruturas

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

ESTRUTURAS DE DADOS E ALGORITMOS ÁRVORE BINÁRIA

1. Proponha algoritmos para: a. Calcular a altura dos nós de uma árvore binária dada, armazenando o valor da altura no nó.

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Algoritmos e Estruturas de Dados

Desenho e Análise de Algoritmos

Transcrição:

Exame Modelo Estruturas de Dados 2018/2019 Junho de 2019 Duração: 2h30m + 30m Número mecanográco: Nome completo do estudante: Grupo 1 - Fundamentos de Java 1.1. Escreva pequenos excertos de código para cada uma das seguintes alíneas: a) Extrair o algarismo das centenas de um inteiro n: b) Expressão booleana que indica se um número n tem exactamente 2 dígitos: c) Criar um array v com espaço para k caracteres: d) Ir buscar o número de linhas de uma matriz m[][]: e) Ir buscar a última letra de uma string s: f) Ir buscar o penúltimo bit de um inteiro b: Grupo 2 - Implementação de uma classe simples 2.1. Escreva código para denir uma classe Matrix que representa representa uma matriz de inteiros. Inclua atributos para representar a matriz em si, bem como o número de linhas e de colunas. Adicione também um construtor que recebe o número de linhas e colunas, bem como um inteiro k e cria a respetiva matriz (inicialmente com todas as posições preenchidas com k). 2.2. Escreva um excerto de código para criar um objecto m contendo uma matriz de 3 linhas por 4 colunas contendo em todas as posições o inteiro 42: 2.3. Para comparar se dois objectos são iguais é normalmente usado o método equals. Por exemplo, se tivermos duas matrizes m1 e m2, m1.equals(m2) deveria devolver true se as matrizes são iguais (têm exactamente o mesmo conteúdo), ou f alse caso contrário. Escreva um método equals para a classe Matrix com esse comportamento (verica se a matriz é igual a outra) 2.4. Escreva um método transpose() da classe Matrix que devolva uma nova matriz que é a transposta da original (trocar linhas com colunas). Por exemplo, a gura seguinte mostra uma matriz e como car a sua transposta: 1 2 3 4 5 6 [ 1 3 ] 5 2 4 6

Grupo 3 - Tipos Abstratos de Dados (TADs) 3.1. Escreva um interface Java para representar um conjunto de palavras, contendo métodos para inserir e remover uma palavra, vericar se uma palavra está no conjunto e devolver o número de palavras do conjunto (use nomes indicativos da sua função para os métodos respetivos). 3.2. Suponha que quer criar uma classe X que concretiza uma implementação do interface anterior. Como deveria ser a primeira linha que declara essa classe? 3.3. Suponha que tem uma implementação do interface anterior que usa como base um array (desordenado) onde são guardadas as palavras (uma por cada posição). Seja n o número de palavras do conjunto. Indique a melhor complexidade temporal (notação O) que conseguiria obter para os seguintes métodos (justicando sucintamente): a) Devolver número de palavras no conjunto: b) Vericar se uma palavra está no conjunto: 3.4. Explique como poderia obter uma implementação mais eciente para a vericar se a palavra está no conjunto, indicando a nova complexidade e outras potenciais vantagens e desvantagens dessa outra implementação quando comparada com o array desordenado (ex: mais algum método é melhor ou pior?) Grupo 4 - Complexidade Algorítmica 4.1. Para os pares de funções seguintes, escreva na caixa em branco Θ, O ou Ω para tornar a armação verdadeira. Note que se as funções em causa tiverem uma relação Θ, não deverá escrever O ou Ω. n 4 = [[]] (4 n ) 2 n = [[]] (2 n+2 ) 42 = [[]] 24 log(log n 2 ) = [[]] (log n 2 ) n = [[]] (log4 n) 4.2. Descreva o pior caso em termos de tempo de execução para os seguintes pedaços de código, usando notação O para a variável n. Use o limite mais "apertado" possível (ex: indicar todos como sendo O(n!) resultará em 0 pontos). a) d) for ( int i =0; i <n ; i ++) for ( int j =0; j<i ; j++) count++; int f 1 ( int n ) { return f 1 ( n 1) + 1 ; } b) c) for ( int i=n / 2 ; i >0; i ) for ( int j =0; j <100; j++) count++; for ( int i =1; i <n ; i=i 2) count++; e) int f 2 ( int n ) { int count = 0 ; for ( int i =0; i <n ; i ++) count++; return count + f 2 ( n /2) + f 2 ( n /2) } Pág. 2

4.3. Justique a sua resposta para a alínea (e) da pergunta anterior, escrevendo a recorrência e desenhando a respectiva árvore de recorrência, indicando porque dá origem à complexidade indicada. Indique um algoritmo que conheça cuja complexidade seja determinada pela mesma recorrência. 4.4. Previsão de Tempo de Execução. Imagine que tem um programa que demora 1 segundo para um dado input. Se o tamanho do input triplicar, quanto tempo estima que o programa demora para cada uma das seguintes complexidades? Se tiver complexidade linear, deverá demorar cerca de Se tiver complexidade quadrática, deverá demorar cerca de Se tiver complexidade cúbica, deverá demorar cerca de segundos. segundos. segundos. Grupo 5 - Listas, Pilhas e Filas 5.1. Considere uma implementação SinglyLinkedList<T> de uma lista ligada simples genérica tal como dada nas aulas com atributos size e rst, e Node<T> representando um nó com atributos value e next. a) Escreva código para denir um método print() que percorre a lista e imprime todos os seus valores (um por linha). Não pode usar qualquer outro método da classe SinglyLinkedList<T>. b) Escreva código para denir um método remove(i) que remove o i-ésimo elemento da lista (elemento na posição i). As posições começam em 0. Se a posição i não existir, o método não deve fazer nada. Não pode usar qualquer outro método da classe SinglyLinkedList<T>. c) Escreva código para denir um método reverse(i) que devolve uma nova lista que é igual à lista inicial invertida (ex: 1 2 3 resultaria numa nova lista 3 2 1). Pode destruir a lista original e usar a API das listas (ex: removefirst, removelast, addfirst, add- Last). Indique a complexidade temporal do método que implementou. 5.2. Indique, justicando, uma situação onde faz mais sentido usar uma lista ligada ao invés de um simples array. Pág. 3

5.3. Explique (não é preciso código) como remover o primeiro elemento de uma lista circular que apenas tenha uma referência para o último elemento da lista (e não para o primeiro). Não se esqueça de descrever como e em que atributos tinha de mexer e indique a complexidade temporal do método que descreveu. 5.4. Explique (não é preciso código) como inverter o conteúdo de uma pilha, sendo que para interagir com a pilha apenas pode usar a sua API (push, pop e size). Indique a complexidade temporal do método que descreveu. Grupo 6 - Árvores 6.1. Considerando a árvore da gura seguinte, responda às seguintes alíneas: a) Qual o nó raíz? b) Quais os nós folha? c) Um par de nós irmãos? d) Qual a altura da árvore? e) Os nós da árvore em preorder: f) Os nós da árvore em inorder: g) Os nós numa pesquisa em largura: 6.2. Consider uma implementação BTree<T> de uma árvore binária genérica tal como dada nas aulas com um atributo root a apontar para a raíz que é um BNode<T> representando um nó com atributos value, left e right. a) Escreva código para denir um método depth() da classe BTree<T> que devolve a profundidade da árvore (sem usar a API das árvores). b) Escreva código para denir um método estático count(btree<integer> t) que devolva a quantidade de nós que armazenam números pares. 6.3. Suponha que quer um método para procurar um número numa árvore binária simples (não é de pesquisa nem impõe nenhuma propriedade sobre a maneira como guarda os números). Indique, justicando, qual a melhor complexidade temporal que conseguiria para implementar esse método. Pág. 4

Grupo 7 - Árvores Binárias de Pesquisa 7.1. Vamos inserir (por esta ordem) os seguintes números numa árvore binária de pesquisa: 42, 20, 24, 50, 53, 11. Para as 3 alíneas de baixo desenhe a árvore correspondente (depois de completa a operação respetiva): a) Como ca a árvore original depois de inseridos os 6 números? b) Como ca a árvore (original) depois de adicionarmos um 51? c) Como ca a árvore (original) depois de removermos o 42? 7.2. Suponha que quer inserir os elementos 1, 2, 3, 4, 5, 6, 7 numa árvore binária de pesquisa. Qual a mínima altura possível da árvore? Indique por qual ordem deve inserir os elementos pra garantir essa altura mínima. 7.3. Em que nó ca guardado o elemento mínimo numa árvore binária de pesquisa? Justique sucintamente. 7.4. Explique (por palavras) um algoritmo para procurar um elemento numa árvore binária de pesquisa. Indique, justicando, a complexidade temporal do método que descreveu supondo que a árvore está equilibrada. 7.5. Suponha que tem um TAD Dicionário BTMap<K,V> que mapeia chaves do tipo K em valores do tipo V implementado com uma árvore binária de pesquisa e que esta está sempre equilibrada. Suponha também que tem acesso a uma lista de n reviews de hotéis. Cada review atribui uma nota de 0 a 10 a um hotel, que é identicado pelo nome. Usando a API dos dicionários (put, get, keys, size) explique com algum detalhe (pode ser só por palavras) um algoritmo que descubra quais os hotéis com pelo menos 20 reviews e nota média superior a 8. Indique, justicando, a a complexidade temporal do método que descreveu. Pág. 5

Grupo 8 - Filas de Prioridade e Heaps 8.1. Imagine que tem uma minheap descrita pelo seguinte array 3 4 5 8 7 10 Para as 3 alíneas de baixo desenhe a árvore (a heap) correspondente (sempre já com o invariante reposto): a) Qual a heap representada pelo array original? b) Como ca a heap (original) depois de adicionarmos um 2? c) Como ca a heap (original) depois de removermos o mínimo? 8.2. Explique como poderia usar uma minheap para guardar um conjunto (dinâmico) de números e ir sempre conseguindo retirar o maior elemento (ao invés de retirar o menor) em tempo logarítmico. Use simplesmente a API normal da minheap, sem mudar a sua implementação. 8.3. Suponha que lê um conjunto de n números, inserindo-os um a um numa la de prioridade implementada com uma minheap. Depois retira-os um a um da heap e vai escrevendo os valores à medida que vão sendo removidos. a) Qual a ordem em que aparecem os números no output? b) Indique, justicando, a complexidade temporal e espacial (memória) de todo o processo descrito. Pág. 6

(pode usar esta página para a continuação de respostas que necessitem de mais espaço para além do que foi dado) Pág. 7

(pode usar esta página para a continuação de respostas que necessitem de mais espaço para além do que foi dado) Pág. 8