Algoritmos e Estruturas de Dados



Documentos relacionados
Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados

Busca. Pesquisa sequencial

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

EAD Árvore árvore binária

2ª Lista de Exercícios

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

Árvores Binárias - continuação

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Métodos Computacionais. Árvores

INF 1007 Programação II

Tipo de Dados em Linguagem C

Trabalho 3: Agenda de Tarefas

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Algoritmos Eficientes de Ordenação

Árvore Binária de Busca

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Linguagem C: Árvores Binarias

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados I

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Árvores binárias de pesquisa com balanceamento. Algoritmos e Estruturas de Dados II

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

Listas ligadas/listas encadeadas

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

Estruturas de Dados Aula 15: Árvores 17/05/2011

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

Árvores Binárias e Busca. Jeane Melo

Árvores Binárias. Observação: Material elaborado a partir do material do Professor Marcos Costa.

Algoritmos e Estruturas de Dados: Árvore Binária

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Árvores. Algoritmos e Estruturas de Dados 2005/2006

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Árvores Binárias de Busca

EAD Árvore - representação usando listas ligadas

Aula T20 BCC202 Pesquisa (Parte 2) Árvores de Pesquisa. Túlio Toffolo

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

20 Caracteres - Tipo char

Geração de código intermediário. Novembro 2006

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

Algoritmos e Programação

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo

1. Introdução Definição Conceitos relacionados... 2

Algoritmos de pesquisa. Tabelas de dispersão/hash

struct LISTA item quant

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

Funções recursivas. O exemplo mais comum: int fat(int n){ if(n == 0) return 1; return n*fat(n-1); }

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Figura 13.1: Um exemplo de árvore de diretório.

INF 1010 Estruturas de Dados Avançadas

Pesquisa Sequencial e Binária

INF 1005 Programação I

CIÊNCIA DA COMPUTAÇÃO PROVA PARA TRANSFERÊNCIA

Programação Estruturada I

Algoritmos de Pesquisa e Ordenação em Vectores

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

2006/2007 Análise e Síntese de Algoritmos 2

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

7. Estrutura de Decisão

Pragmática das Linguagens de Programação 2004/2005

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2005/ Valores

PROVA P2 INF /10/2014 Programação II

Representação de Dados (inteiros não negativos)

BC1424 Algoritmos e Estruturas de Dados I. Aula 16: Árvores (introdução) Prof. Jesús P. Mena-Chalco. jesus.mena@ufabc.edu.br

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

CT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

17 - Funções e Procedimentos em C Programação Modular

INF 1620 P1-10/04/02 Questão 1 Nome:

Tipo Abstrato de Dados

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

Árvores Binárias de Busca

INF 1005 Programação I

INF 1007 Programação II

UNIVERSIDADE DA BEIRA INTERIOR

Algoritmos de Busca em Tabelas

Programação em C++: Introdução

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

Transcrição:

Introdução aos Algoritmos e Estruturas de Dados 2 o Teste - A Ano lectivo: 2010/2011 2 o Semestre RESOLUÇÃO DO 2 o TESTE Grupo I (2.0 + 2.5 + 2.0 = 6.5 val.) I.a) Considere os tipos enum ocasiao e Presente definidos da seguinte forma: enum ocasiao Aniversario, Natal, DiaEspecial ; typedef struct Presente* Presente; struct Presente int id; int valor; enum ocasiao oc; char* para; ; Escreva, em linguagem C, a função lepresente, declaradaabaixo,quelêdostandard input a informação dos presentes e devolve um vector. Assuma que o nome de cada pessoa a guardar no campo para não ultrapassa 30 caractares alfanuméricos. A função recebe um argumento, que indica onúmerodepresentesacriar. Cadapresentevemdescritonuma linha que contém, separados por espaços: o valor do presente, um inteiro; o tipo de ocasião, queéumcharacter:a, N ou D; onomedo destinatário, que não poderá conter espaços. Cada presente deverá ter um número de identificação ú n i c o. Presente lepresente(int n) Solução: Presente vector; char nome[31]; char ocasiao; vector = (Presente) calloc(n, sizeof(struct Presente));

while(n > 0) n--; vector[n].id = n; scanf("%d %s %s", &(vector[n].valor), &ocasiao, nome); vector[n].para = (char*) calloc(strlen(nome)+1, sizeof(char)); strcpy(vector[n].para, nome); vector[n].oc = Aniversario; switch(ocasiao) case N : vector[n].oc = Natal; break; case D : vector[n].oc = DiaEspecial; break; return vector; 2/13

I.b) Considere a seguinte definição de uma lista duplamente ligada circular: typedef struct CircularDLL* CircularDLL; struct CircularDLL CircularDLL next; CircularDLL prev; Item val; ; Note que numa lista circular o último elemento está ligado ao primeiro. Escreva em C a seguinte função: CircularDLL insert(circulardll list, int i, Item obj) A função deve receber: uma lista duplamente ligada circular; um inteiro i >= 0 que indica a posição ainserir;umainstânciadotipoitem. ApósinseriroItem afunçãodevolvealistacircularquecomeça por esse elemento. Note que a posição 0 significa inserir na cabeça de lista e a posição 1 aseguir ao primeiro elemento, usando o ponteiro next. Observe também que como a lista é circular são permitidas posições maiores que o comprimento da lista. Solução: CircularDLL res; res = (CircularDLL) calloc(1, sizeof(struct CircularDLL)); res->val = obj; res->prev = res; /* Empty case sentinel */ if(list!= NULL) while(i > 0) list = list->next; i--; res->next = list; res->prev = list->prev; res->prev->next = res; /* Finish Empty case */ res->next->prev = res; return res; 3/13

I.c) Considere uma árvore binária de pesquisa equilibrada, com n níveis, contendo todos os números inteiros no intervalo [1, 2 n 1]. No exemplo representado abaixo, temos n =4eportantoaárvore contém todos os números inteiros no intervalo [1, 15]. Implemente um programa em linguagem C que, para um determinado valor de n, lidodostdin, imprimanostdout uma sequência de valores do intervalo [1, 2 n 1] ordenada por forma a que se obtenha uma árvore equilibrada imediatamente após a inserção. Por exemplo, uma sequência possível para criação da árvore abaixo seria: 8, 4, 2, 1, 3, 6, 5, 7, 12, 10, 9, 11, 14, 13, 15. 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15 Sugestão: Implemente uma função recursiva que receba como argumentos os valores mínimo e máximo existentes numa dada sub-árvore, e que imprima o valor da raiz da referida sub-árvore, invocando-se a ela própria de seguida para as sub-árvores do lado esquerdo e direito. Note que uma sub-árvore deste tipo, com valor mínimo x evalormáximoy, temraizcomvalor(x + y)/2. Por exemplo, a árvore acima, com valor mínimo 1 e valor máximo 15, tem raiz com valor 8. O mesmo se verificando para todas a sub-árvores. Solução: #include <stdio.h> void recurs(int x, int y) int r = (x+y)/2; printf("%d\n", r); if(x < y) recurs(x, r-1); recurs(r+1, y); int main() int n, m; scanf("%d", &n); for(m = 1; n > 0; m *= 2, n--); recurs(1, m-1); return 0; 4/13

Grupo II (1.5 + 1.5 + 1.5 + 1.5 = 6.0 val.) II.a) Considere a seguinte implementação, nova, da função de partição do algoritmo de ordenação quicksort: typedef int Item; #define key(a) (A) #define less(a, B) (key(a) < key(b)) #define exch(a, B) Item t = A; A = B; B = t; int partition(item a[], int l, int r) int sl; sl = l; while(l < r) if(less(a[l], a[r])) exch(a[l], a[sl]); sl++; l++; exch(a[sl], a[r]); return sl; Após executar os seguintes comandos: Item a[] = 19, 6, 1, 20, 48, 15, 25, 2, 25, 7 ; partition(a, 0, 9); partition(a, 5, 9); Qual é o estado do vector a[]? a. 7, 6, 1, 2, 19, 15, 20, 25, 25, 48, b. 6, 1, 2, 7, 48, 15, 19, 20, 25, 25, c. 7, 6, 1, 2, 19, 20, 15, 25, 25, 48, d. 7, 6, 1, 2, 19, 20, 25, 15, 25, 48, e. 2, 6, 1, 7, 48, 15, 19, 20, 25, 25, f. 6, 1, 2, 7, 48, 19, 15, 20, 25, 25, Solução: Arespostacertaé(b). 5/13

II.b) Considere a seguinte sequência de números inteiros sem sinal, que se encontram representados por palavras de 10 bits: 11, 12, 3, 10, 16, 21, 32, 22, 5, 1 Qual será o quarto elemento da sequência, após dois passos doalgoritmodeordenaçãoradixlsd, considerando que em cada passo é analisado 1 bit? a. 5 b. 11 c. 16 d. 21 e. 22 f. 32 Solução: Arespostacertaé(d). 6/13

II.c) Considere a representação, conceptual, de árvore binária em vector utilizada pela estrutura de dados amontoado. Usando essa representação, qual dos seguintes vectores representa uma árvore binária de pesquisa? a. 5, 8, 12, 1, 6, 11, 13, 2, 3 b. 8, 1, 12, 5, 6, 13, 11, 2, 3 c. 8, 5, 12, 6, 5, 13, 11, 1, 3 d. 8, 5, 12, 2, 6, 11, 13, 1, 3 e. 12, 5, 8, 2, 6, 13, 11, 1, 3 f. 8, 5, 12, 1, 6, 11, 13, 2, 3 Solução: Arespostacertaé(d). 7/13

II.d) Considere que se pretende ordenar o vector abaixo, utilizando o algoritmo de ordenação heapsort. O heapsort começa por transformar o vector a ordenar num amontoado (heap). Após esta fase, qual será o conteúdo do vector? 11, 12, 3, 10, 16, 21, 32, 22, 5, 1 a. 11, 12, 3, 10, 16, 21, 32, 22, 5, 1 b. 32, 22, 11, 12, 16, 21, 3, 10, 5, 1 c. 32, 22, 21, 12, 16, 11, 3, 10, 5, 1 d. 32, 21, 22, 3, 11, 16, 12, 1, 5, 10 e. 32, 21, 22, 12, 16, 11, 3, 10, 5, 1 f. 1, 3, 5, 10, 11, 12, 16, 21, 22, 32 Solução: Arespostacertaé(c). 8/13

Grupo III (1.5 + 1.5 = 3.0 val.) III.a) Qual a posição em que é colocado o último valor da sequência: 32, 20, 90, 10, 12, 53, 42, 9 quando estes são introduzidos numa tabela de dispersão de dimensão 13, com resolução por procura linear (linear probing), inicialmente vazia, sabendo que a função de hash é a dada abaixo? a. primeira b. segunda c. quarta d. quinta e. décima f. décima primeira hash(k) =(k +1)mod 11 Solução: Arespostacertaé(d). 9/13

III.b) Considere uma árvore binária de pesquisa, que contém os nú m e r o s i n t e i r o s d e 1 a 2 7 ( i n c l u - sivé), inseridos por ordem decrescente. Sabendo que o procedimento balancer, apresentadoabaixo, foi utilizado para equilibrar a referida árvore, indique quantas vezes foi invocada a função partr apartirdebalancer?notequeafunçãopartr(h,k) coloca na raíz o (k+1)-ésimo elemento da á r v o r e c o m r a í z e h. m link balancer(link h) if (h->n < 2) return h; h = partr(h, h->n/2); h->l = balancer(h->l); h->r = balancer(h->r); return h; a. 1 b. 13 c. 14 d. 15 e. 18 f. 27 Solução: Arespostacertaé(d). 10/13

Grupo IV (1.5 + 1.5 + 1.5 = 4.5 val.) IV.a) Considere o grafo dirigido e acíclico representado abaixo. Quantas ordenações topológicas existem para os vértices do grafo? a. 1 b. 2 c. 3 d. 4 e. 5 f. 6 Solução: Arespostacertaé(c). 11/13

IV.b) Qual a sequência de vértices visitados numa travessia em profundidade primeiro (DFS), do grafo abaixo, com origem no vértice F? Considere que os vértices são visitados por ordem alfabética equeosvérticesadjacentesdeumdadovérticetambémsãovisitadosporordemalfabética. A C B F D E G a. F, C, B, A, D, E, G b. F, E, G, D, A, B, C c. F, E, G, D, C, B, A d. F, C, B, A, D, G, E e. F, C, A, B, D, G, E f. F, C, A, B, D, E, G Solução: Arespostacertaé(a). 12/13

IV.c) Qual o caminho obtido pelo algoritmo de Dijkstra entre os nós FeGdografoabaixo? A C 7 4 9 B 8 3 D 6 E 11 G 15 1 13 F a. F, E, G b. F, C, B, A, G c. F, C, E, G d. F, C, B, E, G e. F, C, B, E, D, G f. F, E, D, G Solução: Arespostacertaé(d). 13/13