Enunciados das aulas práticas de. Algoritmos e Modelação Matemática

Tamanho: px
Começar a partir da página:

Download "Enunciados das aulas práticas de. Algoritmos e Modelação Matemática"

Transcrição

1 Enunciados das aulas práticas de Algoritmos e Modelação Matemática Paulo Mateus André Souto 2013

2 ii À guardiã

3 Precaução dirigida aos alunos Os temas apresentados neste trabalho são uma versão muito preliminar da sebenta da cadeira de Algoritmos e Modelação Matemática dos cursos de Engenharia Biomédica e de Matemática Aplicada à Computação do Instituto Superior Técnico da Universidade de Lisboa. Notem que pode haver gralhas, exemplos incompletos, definições e teoremas que podem estar apresentados de forma não uniforme. Na verdade podem existir tópicos que necessitarão de ser reescritos ou escritos de raiz. Parte dos exercícios são retirados das referências bibliográficas dadas. Futuramente, serão substituídos por outros que possam servir os nossos propósitos enquanto docentes da cadeira e de acordo com os objetivos estabelecidos para os conhecimentos a adquirir pelos alunos. No que diz respeito a esta notas o leitor deve estar preparado para se deparar com problemas de compreensão das matérias abordadas, dado que serão para já muito incompletas, e portanto sugerimos a leitura de livros considerados importantes nas áreas que serão abordadas de modo a complementarem a informação apresentada. Sugerimos por exemplo a leitura de [?], [?] e outras referências que faremos ao longo deste trabalho. iii

4

5 Prefácio Este trabalho tenciona compilar num livro os conteúdos programáticos de um curso introdutório à Algoritmia e à Modelação Matemática. Os temas abordados neste trabalho são naturalmente parte integrante dos conteúdos programáticos planeados para a cadeira de Algoritmos e Modelação Matemática a lecionar nos cursos de Engenharia Biomédica e de Matemática Aplicada à Computação do Instituto Superior Técnico da Universidade de Lisboa. A primeira compilação data do ano de A ideia deste trabalho é providenciar ao alunos (e não só) uma referência de estudo, ainda que incompleta, sobre algoritmia com uma forte componente matemática de análise e correção sendo por isso dado um especial enfase a estas problemática sob o ponto de vista de matemático e do ponto de vista das ciências da computação. A juntar a este objetivo pretende-se que este compêndio possa futuramente ser também uma ferramenta útil para outros cursos que abordem temáticas semelhantes. Pelo apoio financeiro, o autor André Souto está profundamente grato à Fundação para a Ciência e Tecnologia pela bolsa SFRH/BPD/76231/2011. Estamos também gratos a todos os membros do SQIG pelo excelente ambiente de trabalho pelo encorajamento dado. Ficamos também gratos aos alunos por qualquer comentário que ajudem a melhorar este trabalho Departamento de Matemática Instituto Superior Técnico, Universidade de Lisboa Security and Quantum Information Group v

6 Instituto de Telecomunicações Conteúdo Precaução dirigida aos alunos Prefácio iii v Conteúdo 1 1 Introdução ao Eclipse Exercícios propostos para a aula Criação de um projeto no Eclipse Compilação, Debugging e correção dos programas Implementação de dados abstratos Exercícios propostos para a aula Exercícios propostos adicionais Notação assimptótica Exercícios propostos para a aula Pesquisa binária e árvores de pesquisa Exercícios propostos para a aula Grafos com matrizes de adjacência Exercício propostos para a aula Exercícios propostos Pesquisa em profundidade em grafos Exercícios propostos para a aula

7

8 Prática 1 Introdução ao Eclipse Exercícios propostos para a aula SECÇÃO 1.1 A primeira aula de laboratório tem como objetivo a introdução à escrita, compilação e debugging de programas escritos em Java, utilizando o ambiente de desenvolvimento integrado Eclipse. Pretende-se nesta aula implementar um programa que realiza um conjunto de operações sobre números naturais. Ao longo da aula serão realizadas as seguintes tarefas: 1. criação e configuração de um novo projeto no Eclipse; 2. compilação, debugging e correção do programa; 3. implementação recursiva de algumas operações. 3

9 1.1.1 Criação de um projeto no Eclipse 1. Comece por entrar na sua área de trabalho, com o login e password do Fenix. Inicie o programa Eclipse Juno. 2. Crie um novo projecto File > New Java Project. Coloque o título Aula1. 3. Crie uma nova classe File > New Class. Coloque no nome Utils e verifique as opções. 4. Está pronto para desenvolver funções de pacotes de utilitários Compilação, Debugging e correção dos programas 1. Crie a função fatorial. Teste a função para alguns valores fazendo output destes valores; 2. Depure o programa: Crie breakpoints e entre na vista de Debug. 3. Implemente recursivamente a função fatorial e depure-a. 4. Escreva um algoritmo de ordenação à sua escolha. Depure o programa criado. 5. Escreva uma função que calcula o traço de uma matriz. 6. Escreva um função que testa se um dado elemento ocorre num vetor. Melhore a função anterior supondo que o vetor recebido está ordenado. 4

10 Algumas propostas de resolução Apresenta-se algum do código da resolução de alguns exercícios da aula. O código para a implementação do cálculo da função fatorial quando é dado um número n: 1 public class Utils { 2 3 public static void main ( String [] args ) { 4 int n =4; 5 boolean x; 6 x= teste (n); 7 if(x == true ){ 8 System. out. println ("O valor de " + n+"! e :" + factorial (n)); 9 } else { 10 System. out. println ("O valor de " + n+" esta incorrecto."); 11 } 12 } private static boolean teste ( int n) { 15 if(n >0) { 16 return true ;} 17 else { 18 return false ; 19 } 20 } 21 5

11 22 private static int factorial ( int n) { 23 int i=1, r =1; 24 while (i< n){ 25 i ++; 26 r*=i; 27 } 28 return r; 29 } 30 } A implementação de forma recursiva pode ser feita através do seguinte código: 1 public class Utils2 { 2 3 public static void main ( String [] args ) { 4 int n =6; 5 boolean x; 6 x= teste (n); 7 if(x == true ){ 8 System. out. println ("O valor de " + n+"! e :" + fatorial (n)); 9 } else { 10 System. out. println ("O valor de " + n+" esta incorreto."); 11 } 12 } private static boolean teste ( int n) { 15 if(n >0) { 16 return true ;} 17 else { 18 return false ; 19 } 20 } 6

12 21 22 private static int factorial ( int n) { 23 if(n ==1) { 24 return 1; 25 } 26 else { 27 return n* factorial (n -1) ; 28 } 29 } 30 } Uma possível implementação da ordenação de um vetor pode ser idealizado através de: 1 public class Utils3 { 2 3 public static void main ( String [] args ) { 4 int vec []; 5 vec = new int [4]; 6 vec [0]=1; 7 vec [1]=5; 8 vec [2]=3; 9 vec [3]=2; 10 int i; 11 i =0; 12 while (i< vec. length ){ 13 int j=i,min = vec [i], pos =i; 14 int aux ; 15 while (j< vec. length ){ 16 if(vec [j]< min ){ 17 pos =j; 18 } 19 aux = vec [i]; 20 vec [i]= vec [ pos ]; 21 vec [ pos ]= aux ; 7

13 22 j ++; 23 } 24 i ++; 25 } 26 System. out. println ( vec [0] + ";" + vec [1] + ";" + vec [2] + ";" + vec [3]) ; 27 } 28 } Uma possível implementação do cálculo do traço de uma matriz é: 1 public class Utils5 { 2 3 public static void main ( String [] args ) { 4 double mat [][]; 5 mat = new double [2][2]; 6 mat [0][0]=1.5; 7 mat [0][1]=5.5; 8 mat [1][0]=3.3; 9 mat [1][1]=2.2; 10 int i =0; 11 double soma =0; 12 while (i <= mat. length -1) { 13 soma += mat [i][i]; 14 i ++; 15 } 16 System. out. println ( soma ); 17 } 18 // } A implementação do teste de ocorrência de um número num vetor: 8

14 1 public class Utils6 { 2 3 public static void main ( String [] args ) { 4 int vec []; 5 vec = new int [4]; 6 vec [0]=1; 7 vec [1]=5; 8 vec [2]=3; 9 vec [3]=2; 10 int n= 6; 11 boolean r; 12 r= ocorrencia (vec,n); 13 if(r == true ){ 14 System. out. println ("O valor ocorre "); 15 } else { 16 System. out. println ("O valor nao ocorre "); 17 } 18 } private static boolean ocorrencia ( int [] vec, int n) { 22 int i =0; 23 while (i <= vec. length -1) { 24 if(vec [i ]== n){ 25 return true ;} 26 i ++; 27 } 28 return false ;} 29 } 9

15

16 Prática 2 Implementação de dados abstratos Exercícios propostos para a aula SECÇÃO 2.1 Considere o tipo de dados lista ordenada implementado em Java da seguinte forma: 1 class Node { 2 int val ; 3 Node next ; 4 } 5 6 public class Lista { 7 int comp ; 8 Node prim ; } 11

17 Implemente a classe lista com a seguinte interface 1. ins: recebe um inteiro acrescenta à lista o inteiro de forma a que esta se mantenha ordenada (por ordem crescente). 2. vazq: testa se a lista é vazia. 3. pert: recebe um inteiro e verifica se o inteiro pertence à lista. 4. ret: recebe um inteiro e apaga uma ocorrência do inteiro na lista. 5. apaga: recebe uma lista e apaga todos os elementos da lista. 12

18 SECÇÃO 2.2 Exercícios propostos adicionais 1. Implemente a classe da página anterior com um nó bidirecional. 2. Suponha que cerca de 70% inserções correspondem a inserir um elemento maior que todos os elementos que se encontram na lista. Faça alterações à implementação do tipo de dados lista para que a implementação da função ins tenha o custo médio mais baixo possível. Indique qual o número médio de comparações necessárias para inserir um elemento supondo que nos restantes 30% dos casos o elemento a colocar poderá ser colocado em qualquer posição (exceto a última) com igual probabilidade. 3. Usando a classe de nó do Exercício 1, implemente uma lista circular (não ordenada) onde o primeiro e último elemento estão ligados. Considere as seguintes funções: a) O construtor retorna a lista vazia. b) ins: recebe um inteiro e acrescenta o inteiro no fim da lista. c) vazq: testa se a lista é vazia. d) pert: recebe um inteiro e verifica se o inteiro pertence à lista. e) ret: recebe um inteiro e apaga uma ocorrência do inteiro da lista. f) apaga: recebe uma lista e apaga todos os elementos da lista. 13

19

20 Algumas propostas de resolução O código para a implementação de uma lista com o respetivo interface: 1 public interface Lista { 2 void ins ( int i); 3 boolean vazq (); 4 boolean pert ( int i); 5 void ret ( int i); 6 void apaga (); 7 } 1 public class Node { 2 int val ; 3 Node next ; 4 5 Node ( int v){ 6 val =v; 7 next = null ; 8 } 9 } 1 public class ImpLista implements Lista { 2 15

21 3 int comp ; 4 private Node prim ; 5 6 public void ins ( int i) { 7 Node n= new Node (i); 8 // Node aux = prim ; 9 if ( comp ==0) { 10 prim =n; 11 comp =1; 12 } 13 if( prim. val >= i){ 14 n. next = prim ; 15 prim = n; 16 } 17 Node aux = prim ; 18 int j =1; 19 while ( aux. next.val < i && j< comp -1) { 20 aux = aux. next ; 21 j ++; 22 } 23 if(j== comp -1) { 24 j=j -1; 25 aux. next =n; 26 n. next = null ; 27 } else { 28 Node aux2 = aux. next ; 29 aux. next =n; 30 n. next = aux2 ; 31 } 32 comp = comp +1; 33 } public boolean vazq () { 36 return comp ==0; 37 } 38 16

22 39 public boolean pert ( int i) { 40 int j =1; 41 Node aux = prim ; 42 while (j< comp ){ 43 if(aux. val == i) return true ; 44 j ++; 45 } 46 return false ; 47 } public void ret ( int i) { 50 if( pert (i)== true ){ 51 if( comp ==1 && prim. val ==i){ 52 comp =0; 53 prim = null ; 54 } else { if( prim. val ==i){ 55 prim = prim. next ; 56 comp =comp -1; 57 } else { 58 Node aux1 = prim ; 59 Node aux2 = aux1. next ; 60 while ( aux2. val!=i){ 61 aux2 = aux2. next ; 62 aux1 = aux1. next ; aux1. next = aux2. next ; 65 comp =comp -1; 66 } 67 } 68 } 69 } public void apaga () { 72 comp =0; 73 prim. val = -1; 74 prim. next = null ; } 17

23 75 } 76 } O código para a implementação de uma lista bidirecional com o respetivo interface: 1 public interface Listabi { 2 3 void ins ( int i); 4 boolean vazq (); 5 boolean pert ( int i); 6 void ret ( int i); 7 void apaga (); 8 } 1 public class Nobi { 2 int val ; 3 Nobi next ; 4 Nobi previous ; 5 6 Nobi ( int v){ 7 val =v; 8 next = null ; 9 previous = null ; 10 } 11 } 1 public class Implistabi implements Listabi { 2 3 int comp ; 4 private Nobi prim ; 18

24 5 6 public void ins ( int i) { 7 Nobi n= new Nobi (i); 8 // Node aux = prim ; 9 if ( comp ==0) { 10 prim =n; 11 comp =1;} 12 if( prim. val >= i){ 13 n. next = prim ; 14 n. next. previous =n; 15 prim =n; 16 } 17 Nobi aux = prim ; 18 int j =1; 19 while ( aux. next.val < i && j< comp -1) { 20 aux = aux. next ; 21 j ++; 22 } 23 if(j== comp -1) { 24 n. previous = aux ; 25 n. next = null ; 26 } else { 27 n. next = aux. next ; 28 n. previous = aux. previous ; 29 } 30 comp = comp +1; 31 } public boolean vazq () { 34 return comp ==0; 35 } public boolean pert ( int i) { 38 int j =1; 39 Nobi aux = prim ; 40 while (j< comp ){ 19

25 41 if(aux. val == i) return true ; 42 j ++; 43 } 44 return false ; 45 } public void ret ( int i) { 48 if( pert (i)== true ){ 49 if( prim. val ==i){ 50 prim = prim. next ; 51 prim. previous = null ; 52 comp =comp -1; 53 } else { 54 Nobi aux = prim ; 55 while ( aux. val!=i){ 56 aux = aux. next ; 57 } 58 aux. next. previous = aux. previous ; 59 comp =comp -1; 60 } 61 } 62 } public void apaga () { 65 comp =0; 66 prim. val = -1; 67 prim. next = null ; 68 prim. previous = null ; 69 } } O código para a implementação de uma lista circular com o respetivo interface: 20

26 1 public interface Listacircular { 2 void nova (); 3 void ins ( int i); 4 boolean vazq (); 5 boolean pert ( int i); 6 void ret ( int i); 7 void apaga (); 8 } 1 public class Implistacircular implements Listacircular { 2 3 int comp ; 4 protected Node prim ; 5 6 public void nova () { 7 prim = null ; 8 comp =0; 9 } public void ins ( int i) { 12 Node n = new Node (i); 13 if( comp ==0) { 14 prim =n; 15 n. next =n; 16 comp = comp +1; 17 } else { 18 int j =1; 19 Node aux = prim ; 20 while (j< comp ){ 21 aux = aux. next ; 22 j ++; 23 } 24 n. next = prim ; 25 aux. next =n; 21

27 26 } 27 } public boolean vazq () { 30 return comp ==0; 31 } public boolean pert ( int i) { 34 int j =1; 35 Node aux = prim ; 36 while (j< comp ){ 37 if(aux. val == i) return true ; 38 j ++; 39 } 40 return false ; 41 } public void ret ( int i) { 44 if( pert (i)== true ){ 45 if( comp ==1 && prim. val ==i){ 46 comp =0; 47 prim = null ; 48 } else { if( prim. val ==i){ 49 prim = prim. next ; 50 comp =comp -1; 51 } else { 52 Node aux1 = prim ; 53 Node aux2 = aux1. next ; 54 while ( aux2. val!=i){ 55 aux2 = aux2. next ; 56 aux1 = aux1. next ; 57 } 58 aux1. next = aux2. next ; 59 comp =comp -1; 60 } 61 } 22

28 62 } 63 } public void apaga () { 66 comp =0; 67 prim. val = -1; 68 prim. next = null ; 69 } 70 } 23

29

30 Prática 3 Notação assimptótica No exercícios que se seguem o aluno deve ter em atenção que podem ser usadas notações diferentes para a notação assimptótica. Em algumas literaturas é usado o símbolo de pertença enquanto que noutras é usado o sinal de igual com a interpretação óbvia. Exercícios propostos para a aula SECÇÃO Assuma que os termos que se seguem expressão o tempo T(n) gasto por um algoritmo na resolução de um problema para instâncias de tamanho n. Indique o termo dominante e a menor complexidade Oh-grande de cada exemplo. a) n n b) 500n + 100n 1,5 + 50n log 10 n c) 2 n + 2.5n 1.75 d) n 2 + log 2 n + n(log 2 n) 25

31 e) 2n log 3 n + n log 2 n f) 3 log 8 n + log 2 log 2 log 2 n g) 100n n 2 h) 0.01n + 100n 2 i) 2n + n n 1.25 j) 0.01n log 2 n + n(log 2 n) 2 k) 100n log 3 n + n n l) log 4 n + log 2 log 2 n 2. Diga quais das seguintes afirmações são verdadeiras. a) 3n n log n = O(n log n) b) 3n n log n = Ω(n 2 ) c) 3n n log n = Θ(n 2 ) d) n log n + n/2 = O(n) e) 10 n + log n = O(n) f) n + log n = O(log n) g) n + log n = Θ(log n) h) n + log n = Θ(n) i) 2 n + log n = Θ( n) j) n + log n = Ω(1) k) n + log n = Ω(log n) l) n + log n = Ω(n) 3. Diga quais das seguintes afirmações são verdadeiras. Corrija as falsas. a) O( f + g) = O( f ) + O(g); b) O( f g) = O( f ) O(g); c) g = O( f ) e h = O( f ) então g = O(h); d) n 4 = O(n 6 ); 26

32 e) 2 n+1 = O(2 n ); f) 2 2n = O(2 n ). 4. Prove rigorosamente que: a) 1 2 n2 3n = Θ(n 2 ); b) 6n 3 = Θ(n 2 ). 5. Ordene por ordem crescente na ordenação da notação Oh-grande as seguintes funções: log n; 2 n 3 ; n 5/2 ; 2 3 log n ; n; 4 n; log 3 n; n 10 ; 2 log n ; 2 3n ; log n 27

33

34 Algumas propostas de resolução 1. a) termo 0.001n 3 ; ordem O(n 3 ); b) termo 100n 1.5 ; ordem O(n 1.5 ); c) termo 2 n ; ordem O(2 n ); d) termo n 2 ; ordem O(n 2 ); e) termo são ambos; ordem O(n log n); f) termo 3 log 8 n; ordem O(log n); g) termo 0.01n 2 ; ordem O(n 2 ); h) termo 100n 2 ; ordem O(n 2 ); i) termo 0.5n 1.25 ; ordem O(n 1.25 ); j) termo n(log 2 n) 2 ; ordem O(n(log 2 n) 2 ); k) termo n 3 ; ordem O(n 3 ); l) termo log 4 n; ordem O(log n); 2. a) falso; b) verdadeiro; c) verdadeiro; d) falso; e) verdadeiro; f) falso; g) falso; h) falso; 29

35 i) verdadeiro; j) verdadeiro; k) verdadeiro; l) falso; 3. Diga quais das seguintes afirmações são verdadeiras. Corrija as falsas. a) O( f + g) = O( f ) + O(g); Falso - O( f + g) = O(max{ f, g}) b) O( f g) = O( f ) O(g); Verdadeiro c) g = O( f ) e h = O( f ) então g = O(h); Falso - g = O( f ) e f = O(h) então g = O(h) d) n 4 = O(n 6 ); Verdadeiro e) 2 n+1 = O(2 n ); Verdadeiro f) 2 2n = O(2 n ). Falso 4. Prove rigorosamente que: a) 1 2 n2 3n = Θ(n 2 ); Para provar que 1 2 n2 3n O(n 2 ) basta notar que qualquer que seja o n natural 1 2 n2 3n n 2 pelo que basta tomar na definição de classe Oh n 0 = 1 e c = 1; Para provar que 1 2 n2 3n θ(n 2 ) note-se que: 1 2 n2 3n 1 3 n2 n 18 Basta então tomar na definição de Ω, c = 1/3 e n 0 = 18. b) 6n 3 = Θ(n 2 ). Claramente 6n 3 Ω(n 2 ) pois qualquer que seja o n 6n 3 n 2. Tem de se mostrar então que 6n 3 / Ø(n 2 ). Se 6n 3 Ø(n 2 ) então qualquer que fosse o c e existia n 0 tal que para todo o n n 0 6n 3 cn 2 ou seja n c/6 o que é impossível. 5. Ordene por ordem crescente na ordenação da notação Oh-grande as seguintes funções: log n log n log 3 n 4 n n 2 log n n 5/2 2 3 log n n n 2 n3 30

36 Prática 4 Pesquisa binária e árvores de pesquisa Exercícios propostos para a aula SECÇÃO 4.1 Implemente a pesquisa binária em vectores ordenados. Implemente a classe árvore ternária com os seguinte métodos: ArvTer() que constrói uma árvore vazia; ArvTer(int key, ArvTer l, ArvTer c, ArvTer d) que constrói uma árvore ternária com os descendentes óbvios; public boolean isheap() que retorna true se a árvore é um acervo, e falso caso contrário. public boolean pesquisa(int key) que assume que a árvore é um acervo e retorna true se a chave ocorre na árvore e false caso contrário. 31

37 Exercícios propostos 1. Implemente uma árvore com um número arbitrário de descendentes. 32

38 Algumas propostas de resolução 1 public class Trinode { 2 ArvTer ltree, ctree, rtree ; 3 int key ; 4 Trinode ( int i, ArvTer l, ArvTer c, ArvTer r){ 5 key =i; 6 ltree =l; 7 ctree =c; 8 rtree =r; 9 } 10 } 1 public class ArvTer { 2 Trinode root ; 3 4 public ArvTer () { 5 // TODO Auto - generated method stub 6 root = null ; 7 } 8 9 public ArvTer ( int key, ArvTer l, ArvTer c, ArvTer r) { 10 // TODO Auto - generated method stub 11 root = new Trinode (key, l, c, r); 12 } 13 33

39 14 public boolean isheap () { 15 if( root == null ) return true ; 16 if( root. ltree!= null && root. ltree. root!= null &&( root.key <= root. ltree. root. key! root. ltree. isheap ())) return false ; 17 if( root. ctree!= null && root. ctree. root!= null &&( root.key <= root. ctree. root. key! root. ctree. isheap ())) return false ; 18 if( root. rtree!= null && root. rtree. root!= null &&( root.key <= root. rtree. root. key! root. rtree. isheap ())) return false ; 19 return true ; 20 } public boolean pesquisa ( int k) { 23 if( root == null ) return false ; 24 if( root.key >k) return false ; 25 if( root. key ==k) return true ; 26 return ( root. ltree!= null && root. ltree. pesquisa (k)) 27 ( root. ctree!= null && root. ctree. pesquisa (k) ) 28 ( root. rtree!= null && root. rtree. pesquisa (k) ); 29 } 30 } 34

40 Prática 5 Grafos com matrizes de adjacência Exercício propostos para a aula SECÇÃO Implemente o tipo de dados grafo com matrizes de adjacência em Java com os seguintes métodos: classe grafo com o construtor que recebe a dimensão do grafo; adi aresta (recebe dois inteiro e adiciona a aresta entre os nós indexados pelos inteiros); rem aresta (recebe dois inteiro e retira a aresta entre os nós indexados pelos inteiros); adjacenteq (testa de se um nó é adjacente a outro); acessível (testa se um nó é acessível a partir de outro); 35

41 SECÇÃO 5.2 Exercícios propostos Implemente o tipo de dados grafo com listas de adjacência com os métodos acima descritos. 36

42 Proposta de resolução 1 public class GOMA { 2 int [][] MA; 3 4 public GOMA ( int dim ){ 5 MA=new int [ dim ][ dim ]; 6 } 7 8 public void adi_ aresta ( int i, int j) { 9 MA[i][j ]=1; } public void rem_ aaresta ( int i, int j) { 14 MA[i][j ]=0; 15 } public boolean adjacenteq ( int i, int j) { 18 return MA[i][j ]==1; 19 } private static int proxavisitar ( int [] v){ 22 int i=v. length -1; 23 while (i >=0 && v[i ]!=1) { 24 i - -; 25 } 26 return i; 37

43 27 } public boolean acessivel ( int i, int j) { 30 int aux,next,v []= new int [MA. length ]; 31 v[i ]=1; 32 next = proxavisitar (v); 33 while ( next!= -1) { 34 if( next ==j) return true ; 35 v[ next ]=2; 36 aux =0; 37 while (aux <v. length ) { 38 if( adjacenteq (next, aux ) && v[ aux ]==0) v[ aux ]=1; 39 aux ++; 40 } 41 next = proxavisitar (v); 42 } 43 return false ; 44 } public static void main ( String [] args ) { 47 GOMA g= new GOMA (3) ; 48 g. addaresta (1,0) ; 49 g. addaresta (0,1) ; 50 g. addaresta (2,1) ; 51 System. out. println (g. acessivel (0,2) ); 52 } 53 } 38

44 Prática 6 Pesquisa em profundidade em grafos Exercícios propostos para a aula SECÇÃO Implemente o algoritmo Deep First Search baseado numa estrutura de pilha (LIFO); 2. Crie uma função que testa se um dado grafo é conexo ou não. 39

45

46 Proposta de resolução 1 public interface Tabela { 2 public void insere ( int i); 3 public void retira ( int i); 4 public boolean vazia (); 5 public boolean pesquisa ( int i); 6 } 1 public interface GrafoO { 2 public void addaresta ( int i, int j); 3 public void retiraaresta ( int i, int j); 4 public boolean adjacenteq ( int i, int j); 5 public int [] DFS ( int i); 6 public boolean conexo (); 7 } 1 public interface Pilha { 2 public void insere ( int i); 3 public boolean vazia (); 4 public void retira (); 5 public int ultimo (); 6 } 41

47 1 class Node { 2 int val ; 3 Node next ; 4 } 1 public class Pilhadyn implements Pilha { 2 3 protected Node first, last ; 4 5 public Pilhadyn (){ 6 first = null ; 7 last = null ; 8 } 9 10 public void insere ( int i) { /* insere no fim da lista */ 11 Node aux = new Node (); 12 aux. val =i; 13 aux. next = null ; 14 if( last!= null ){ 15 last. next = aux ; 16 last = aux ; 17 } else { 18 last = aux ; 19 first = aux ; 20 } 21 } public boolean vazia () { 24 return first == null ; 25 } public void retira () { /* retira o ultimo da lista */ 28 Node aux = first ; 29 if(aux == null ) return ; 42

48 30 if(aux. next == null ) { 31 first = null ; 32 last = null ; 33 } 34 else { 35 while ( aux. next!= last ) aux = aux. next ; 36 last = aux ; 37 aux. next = null ; 38 } 39 } public int ultimo () { 42 if( last!= null ) return last. val ; 43 return -1; 44 } public int primeiro () { 47 if( first!= null ) return first. val ; 48 return -1; 49 } public FilaP copia (){ 52 FilaP n= new FilaP (); 53 Node aux = first ; 54 while ( aux!= null ){ 55 n. insere ( aux. val ); 56 aux = aux. next ; 57 } 58 return n; 59 } 60 } 1 public class GOLA implements GrafoO { 2 FilaP LA []; 43

49 3 4 public GOLA ( int dim ){ 5 LA=new FilaP [ dim ]; 6 int i =0; 7 while (i<dim ) { 8 LA[i]= new FilaP (); 9 i ++; 10 } 11 } public void addaresta ( int i, int j) { 14 LA[i]. insere (j); 15 } public void retiraaresta ( int i, int j) { 18 LA[i]. retira (j); 19 } public boolean adjacenteq ( int i, int j) { 22 return LA[i]. pesquisa (j); 23 } FilaP adjacentes ( int i) { 26 return LA[ i]. copia (); /* cria uma copia a arvore com raiz i */ 27 } public int [] DFS ( int v) { 31 int numnos =LA. length ; 32 int [] order = new int [ numnos ]; 33 int [] visitados = new int [ numnos ]; 34 // 0 nao visitados, 1 colocados na lista w, 2 ja visitados 35 boolean b; 36 Pilhadyn w = new Pilhadyn (); 44

50 37 w. insere (v); 38 FilaP ladj ; /* lista de nos ( inteiros ) auxiliar */ 39 int i=0, cur_ord =0, nextno ; 40 while (i< numnos ) { visitados [i ]=0; i ++;} /* comeca por se por todos os valores a 0 indicando que nenhum vertice foi visitado */ 41 order [v]= cur_ord ; 42 while (!w. vazia ()) { 43 nextno =w. ultimo (); 44 w. retira (); 45 visitados [ nextno ] =2; 46 ladj = adjacentes ( nextno ); /* copia */ 47 cur_ ord ++; 48 order [ nextno ]= cur_ord ; 49 b= false ; 50 while (! ladj. vazia () &&!b) { 51 if( visitados [ ladj. ultimo () ]==0) { 52 w. insere ( ladj. ultimo ()); 53 visitados [ ladj. ultimo () ]=1; 54 b= true ; 55 } 56 ladj. retira (); 57 } 58 } 59 return order ; 60 } public boolean conexo (){ 63 int [] order = new int [LA. length ]; 64 order = DFS (LA [0]. primeiro ()); 65 int i =0; 66 while (i< LA. length ){ 67 if ( order [i ]==0) return false ; 68 i ++; 69 } 70 return true ; 45

51 71 } 72 } 46

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

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins Prova PMR00 o. semestre 0 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço.. ( pontos) Um heap binário é uma árvore binária completa (todos os níveis exceto o último

Leia mais

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

Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1. Cotação de cada pergunta: 1. 30 / 2. 40 / 3. 30 (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame distribuídas. 1. (Valorização: 30%) Responda às seguintes questões:

Leia mais

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

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins Prova PMR0 o semestre 0 Prof Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço ( pontos) Uma árvore binária de busca é uma árvore binária na qual para qualquer sub-árvore

Leia mais

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas UNIP - Ciência da Computação e Sistemas de Informação Estrutura de Dados AULA Pilhas Estrutura de Dados A Estrutura de Dados Pilha Pilha é uma estrutura de dados usada em programação, que tem uma regra

Leia mais

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo PMR2300 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó (exceto a

Leia mais

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

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

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

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

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

Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1. Cotação de cada pergunta: 1. 32 / 2. 36 / 3. 32 (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame distribuídas. 1. (Valorização: 32%) Responda às seguintes questões:

Leia mais

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

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço. Os códigos fornecidos na seção Códigos-fonte de apoio podem ser referenciados

Leia mais

Grupo 2 - Implementação de uma Classe Simples

Grupo 2 - Implementação de uma Classe Simples Estruturas de Dados 2017/2018 Época Normal (15 de Junho de 2018) Versão A Duração: 2h30m + 30m Número mecanográco: Nome completo do estudante: Grupo 1 - Fundamentos de Java 1.1. Escreva pequenos excertos

Leia mais

T(0) = 0 T(n) = 2*T((n-1)/2) + 1

T(0) = 0 T(n) = 2*T((n-1)/2) + 1 SIN5013 - Exemplo de Prova do Conteúdo Semestral 1. Encontre as equações de recorrência dos seguintes métodos (não é necessário resolver, mas é preciso identificar precisamente suas equações de recorrência

Leia mais

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins Prova de Recuperação PMR21/PMR2 1o. semestre 2 Prof. Thiago Martins Instruções: screva o nome e o número USP na folha de papel almaço. 1. (2 pontos) Uma pilha é uma estrutura de dados na qual o elemento

Leia mais

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

Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1. Cotação de cada pergunta: 1. 32 / 2. 38 / 3. 30 (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame distribuídas. 1. (Valorização: 32%) Responda às seguintes questões:

Leia mais

UNIVERSIDADE DA BEIRA INTERIOR

UNIVERSIDADE DA BEIRA INTERIOR UNIVERSIDADE DA BEIRA INTERIOR Algoritmos e Estruturas de Dados - Bioengenharia 2º Semestre Exame Época Normal Resolução 13/junho/2015 A. [3.5 val] Algoritmos de ordenação e de pesquisa Considere-se as

Leia mais

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

Departamento de Ciência de Computadores Estruturas de Dados (CC114) FCUP 2010/11. 2 o Teste: 20/Junho/2011 1. Cotação de cada pergunta: 1. 30 / 2. 35 / 3. 35 (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame distribuídas. 1. (Valorização: 30%) Responda às seguintes questões:

Leia mais

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

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 Árvores Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 2 Árvore Binária de Busca Definição: uma árvore binária de busca (ABB) é uma árvore binária na qual

Leia mais

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

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013 Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void

Leia mais

Estruturas de dados e algoritmos fundamentais

Estruturas de dados e algoritmos fundamentais Ministério da Ciência, Tecnologia e Ensino Superior U.C. 21046 Estruturas de dados e algoritmos fundamentais 21 de Junho de 2013 INSTRUÇÕES PARA A RESOLUÇÃO DO EXAME, ACONSELHA-SE QUE LEIA ATENTAMENTE

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA ESTRUTURAS DE DADOS E ALGORITMOS 1 LISTA LIGADA Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande LISTA LIGADA (LINKED LIST) É uma estrutura de dados em que

Leia mais

Árvores Binárias de Busca

Árvores Binárias de Busca Árvores Binárias de Busca Algoritmos e Estruturas de Dados I Nesta aula será apresentado o ADT árvore binária de busca, também conhecidas como dicionários binários Uma árvore binária de busca é uma estrutura

Leia mais

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.

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. Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia 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. 1.2 Outros 1. Projete

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA (ABORDAGEM RECURSIVA)

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA (ABORDAGEM RECURSIVA) ESTRUTURAS DE DADOS E ALGORITMOS 1 LISTA LIGADA (ABORDAGEM RECURSIVA) Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande QUESTÕES DE IMPLEMENTAÇÃO Implementacao

Leia mais

Técnicas de projeto de algoritmos: Indução

Técnicas de projeto de algoritmos: Indução Técnicas de projeto de algoritmos: Indução ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 08/2008

Leia mais

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

Prova Substitutiva PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins Prova Substitutiva PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço. 1. (20 pontos) Considere a classe HashSep que implementa uma

Leia mais

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados Ano Lectivo de 2004/2005 2 o Semestre RESOLUÇÃO DA REPESCAGEM DO 2 o TESTE B I. (2.0+1.5+1.5 = 5.0 val.) a) Qual das seguintes declarações pode

Leia mais

Exame de Estruturas de Dados 2010.Junho.26

Exame de Estruturas de Dados 2010.Junho.26 Exame de Estruturas de Dados 2010.Junho.26 Duração: 2:30 horas Valorização: 12 valores. 1. Responda às seguintes questões: a) Faça o estudo da complexidade do seguinte método: 1. void fun2(int n, int v[])

Leia mais

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

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich Árvores Binárias SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista. Figuras editadas por Isadora Maria Mendes http://www.icmc.usp.br/~paulovic

Leia mais

FCUP 2010/11. Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1 o Teste: 27/Abril/2011

FCUP 2010/11. Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1 o Teste: 27/Abril/2011 1 1 Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1 o Teste: 27/Abril/2011 FCUP 2010/11 duração: 2 horas 1. Teste A (indicar o teste que estão a fazer na folha de resposta) 2. Cotação

Leia mais

SIN Exemplo de Prova do Conteúdo Semestral

SIN Exemplo de Prova do Conteúdo Semestral SIN5013 - Exemplo de Prova do Conteúdo Semestral 1. Escreva as equações de recorrência dos seguintes métodos (não é necessário resolver, mas é preciso identificar precisamente suas equações de recorrência

Leia mais

QUESTÕES DE PROVAS ANTIGAS

QUESTÕES DE PROVAS ANTIGAS CT-24 QUESTÕES DE PROVAS ANTIGAS ) Preencha a tabela abaixo com Î ou Ï: ω(log n) Θ(n) O(n log n) Ω(n 2 ) o(n ) 6n + 2n 2 + 2.log n + 4n + n.log n + log n 2) Dada a árvore binária abaixo, escreva os seus

Leia mais

Resposta da pergunta 2: Θ(n 3 ). Resposta da pergunta 8: 1. 7 O(n). Sim. 22. n log n O(1). Não. 3. n + 7 O(n). Sim. 4. n + 7 O(1). Não.

Resposta da pergunta 2: Θ(n 3 ). Resposta da pergunta 8: 1. 7 O(n). Sim. 22. n log n O(1). Não. 3. n + 7 O(n). Sim. 4. n + 7 O(1). Não. SSC0503 - Introdução à Ciência de Computação II Respostas da 1 a Lista Professor: Claudio Fabiano Motta Toledo (claudio@icmc.usp.br) Estagiário PAE: Jesimar da Silva Arantes (jesimar.arantes@usp.br) Resposta

Leia mais

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 053/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

Leia mais

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 PROVA 1 MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 Nome: Número USP: Instruções: (1 ) Esta prova é individual. (2 ) Não destaque as folhas deste caderno. (3 ) A prova consiste de 6

Leia mais

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo Usando o Eclipse - Fundamentos Professor Vicente Paulo de Camargo O Eclipse é um ambiente de desenvolvimento integrado (IDE) É a ferramenta mais utilizada pelas empresas, visto que pode ser configurada

Leia mais

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

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço. Indique na linha seguinte quatro das cinco questões abaixo que devem

Leia mais

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior Árvores Estruturas de Dados Prof. Vilson Heck Junior Árvores INTRODUÇÃO Introdução Árvores são estruturas de dados utilizadas para armazenar e recuperar dados de forma rápida e eficiente; Árvores não são

Leia mais

Prof. Jesus José de Oliveira Neto

Prof. Jesus José de Oliveira Neto Prof. Jesus José de Oliveira Neto É uma das estruturas de dados mais simples A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo. Assim, quando um elemento novo

Leia mais

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados Ano Lectivo de 2004/2005 2 o Semestre RESOLUÇÃO DO 2 o TESTE A I. (2.0+1.5+1.5 = 5.0 val.) a) Qual das seguintes declarações pode ser usada para

Leia mais

Palavras Reservadas da Linguagem Java

Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java: Categorias Tipos de dados primitivos Literais Pseudo-variáveis Desvio e controle de fluxo Pacotes Exceções Modificadores de

Leia mais

Estruturas de Dados II

Estruturas de Dados II Estruturas de Dados II Rodrigo Porfírio da Silva Sacchi rodrigosacchi@ufgd.edu.br 3410-2086 Aula 2: Árvores http://www.do.ufgd.edu.br/rodrigosacchi Árvores Definição: Árvores Uma árvore T é um conjunto

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro Variáveis e Métodos de Classe Em Java, quer as classes quer as instâncias das classes são objectos. Onde está o estado da classe? Com que operações é manipulado? UBI, Departamento de Informática T04-1

Leia mais

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em: RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em: http://www.oxnar.com.br/aulas/java ATIVIDADE ELABORAR O PROGRAMA DE CÁLCULOS DE ÁREAS USANDO

Leia mais

Lista 2 - PMR2300/3200

Lista 2 - PMR2300/3200 Lista 2 - PMR2300/3200 Fabio G. Cozman, Thiago Martins 8 de março de 2015 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u

Leia mais

Problema do Caminho Hamiltoniano

Problema do Caminho Hamiltoniano Universidade de São Paulo Escola de Artes, Ciências e Humanidades Bacharelado em Sistemas de Informação Introdução à Ciência da Computação II Professores Luciano Digiampietri e Fábio Nakano Data de entrega:

Leia mais

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados INSTITUTO SUPERIOR TÉCNICO Introdução aos Algoritmos e Estruturas de Dados Ano Lectivo de 2006/2007 2 o Semestre 2 o Teste A - 2 de Julho de 2007 Duração: 2h - O teste é sem consulta. - Para cada questão

Leia mais

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira. Algoritmos e Estrutura de Dados II Árvore Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estruturas de dados lineares (pilha, fila) são estruturas que guardam coleções de elementos que são acessados

Leia mais

Árvores Binárias de Busca

Árvores Binárias de Busca Árvores Binárias de Busca SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto

Leia mais

Estruturas de Dados Encadeadas

Estruturas de Dados Encadeadas CURSO: Ciência da Computação DATA: / / 2016 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 14 APRESENTAÇÃO Na aula de hoje vamos apresentar e discutir conceitos

Leia mais

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

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013 Filas de prioridade Marcelo K. Albertini de Dezembro de / Filas de prioridade O que é uma fila de prioridade? Estrutura de dados que generaliza a ideia de ordenação. Coleções de elementos: inserir e remover

Leia mais

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são: Apêndice A Classe Vector A classe Vector permite a representação de um vetor de dados de maneira similar à de um array, visto na disciplina Programação Orientada a Objetos I, mas com maior flexibilidade.

Leia mais

Introdução aos Algoritmos e Estruturas de Dados. 2 o Teste - A

Introdução aos Algoritmos e Estruturas de Dados. 2 o Teste - A Ano Lectivo 2017/2018 2 o Semestre Introdução aos Algoritmos e Estruturas de Dados 2 o Teste - A Data: 20 de Junho de 2018 Duração: 1h30m RESOLUÇÃO I. (2,0 + 2,0 + 2,0 + 2,0 = 8,0 val.) I.a) Considere

Leia mais

Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes Árvores Fabrício J. Barth BandTec - Faculdade de Tecnologia Bandeirantes Setembro de 2011 Tópicos Introdução Árvores binárias Implementação em Java Ordens de percurso em árvores binárias Altura de uma

Leia mais

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

Exame de Admissão. Instituto Nacional de Pesquisas Espaciais 18 de setembro de 2018 A: GABARITO Exame de Admissão Programa de Pós-Graduação em Computação Aplicada Instituto Nacional de Pesquisas Espaciais 18 de setembro de 2018 A:2018-03 GABARITO Nome: Instruções: Preencha seu nome de forma legível,

Leia mais

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

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP Árvores e Mapas Luís Lopes DCC-FCUP Estruturas de Dados Estruturas não lineares Os arrays e as listas são exemplos de estruturas de dados lineares, cada elemento tem: um predecessor único (excepto o primeiro

Leia mais

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

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014 Filas de prioridade Marcelo K. Albertini de Novembro de / Filas de prioridade O que é uma fila de prioridade? Estrutura de dados que generaliza a ideia de ordenação. Coleções de elementos: inserir e remover

Leia mais

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

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações: Filas de Prioridade e Heaps 9.1 Filas de Prioridade Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações: inserir um elemento na fila; remover o elemento

Leia mais

AED2 - Aula 22 Busca em largura, cálculo de distâncias

AED2 - Aula 22 Busca em largura, cálculo de distâncias AED2 - Aula 22 Busca em largura, cálculo de distâncias Relembrando a busca genérica, usando um versão alternativa: marque todos os vértices como não encontrados. marque s como encontrado. coloque s no

Leia mais

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Fila e Deque SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências

Leia mais

Grupo 2 - Implementação de uma classe simples

Grupo 2 - Implementação de uma classe simples 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

Leia mais

UNIVERSIDADE DA BEIRA INTERIOR

UNIVERSIDADE DA BEIRA INTERIOR UNIVERSIDADE DA BEIRA INTERIOR Algoritmos e Estruturas de Dados - Bioengenharia 2º Semestre Frequência Resolução 19/maio/2015 A. [3.5 val] Algoritmos de ordenação e de pesquisa Considere-se as seguintes

Leia mais

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos; Fundação CECIERJ - Vice Presidência de Educação Superior a Distância Curso de Tecnologia em Sistemas de Computação Disciplina: Programação Orientada a Objetos AP2 2 semestre de 2016. Nome Assinatura Observações:

Leia mais

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome

Leia mais

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga Algoritmos e Programação II Aula 3 Sobrecarga *Adaptado do material do Prof. Júlio Machado Sobrecarga Em várias linguagens é comum encontrarmos rotinas que fazem basicamente a mesma coisa, porém, com nomes

Leia mais

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Lista Ordenada Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Conteúdo Definição Operações Representações Contígua Encadeada Aplicação Exercícios 2

Leia mais

Estruturas de Dados Filas

Estruturas de Dados Filas Estruturas de Dados Filas Roteiro Introdução Definição de Fila (Queue) Aplicações Operações sobre Fila Implementação de Fila Com vetores Com listas encadeadas Exercícios Introdução Estamos acostumados

Leia mais

Universidade Federal do Ma Curso de Ciência da Computação

Universidade Federal do Ma Curso de Ciência da Computação Universidade Federal do Ma Curso de Ciência da Computação Estrutura de Dados Prof. Anselmo C. de Paiva Depto de Informática Limitações dos vetores Vetores Simples, Rápidos Mas, é necessário especificar

Leia mais

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência Busca Binária Aula 05 Equações com Recorrência Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Idéia: Divisão e Conquista Busca_Binária(A[l...r],k) 1:if r < lthen 2: index = 1

Leia mais

Estruturas de dados e algoritmos fundamentais

Estruturas de dados e algoritmos fundamentais Ministério da Ciência, Tecnologia e Ensino Superior U.C. 21046 Estruturas de dados e algoritmos fundamentais 11 de Setembro de 2015 INSTRUÇÕES PARA A RESOLUÇÃO DO EXAME, ACONSELHA-SE QUE LEIA ATENTAMENTE

Leia mais

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

Ordenação: QuickSort. Prof. Túlio Toffolo  BCC202 Aula 15 Algoritmos e Estruturas de Dados I Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação

Leia mais

INF 1620 P2-01/11/03 Questão 1 Nome:

INF 1620 P2-01/11/03 Questão 1 Nome: INF 1620 P2-01/11/03 Questão 1 Considere a implementação de uma lista encadeada para armazenar as notas dos alunos de uma turma dada pelo tipo abaixo: struct lista { char nome[81]; int mat; float p1, p2,

Leia mais

Classes, Herança e Interfaces

Classes, Herança e Interfaces Escola de Artes, Ciências e Humanidades EACH-USP ACH2002 Introdução à Ciência da Computação II Professor: Delano Medeiros Beder revisada pelo professor: Luciano Digiampietri EACH Segundo Semestre de 2011

Leia mais

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler Aula 7 e 8 Filas e suas Aplicações Prof. Leticia Winkler 1 Definição de Fila (Queue) São estruturas de dados do tipo FIFO (first-in first-out) - o primeiro elemento a ser inserido, será o primeiro a ser

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter

Leia mais

1 Da aula teórica ao Java

1 Da aula teórica ao Java Universidade Federal do ABC Bacharelado em Ciência da Computação Processamento da Informação - Prof. Fabrício Olivetti de França Guia de tradução entre Java e outras linguagens 1 Da aula teórica ao Java

Leia mais

6. Pesquisa e Ordenação

6. Pesquisa e Ordenação 6. Pesquisa e Ordenação Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 6. Pesquisa e Ordenação Estruturas de Dados 1 / 30 Pesquisa de Informação A pesquisa eficiente de informação

Leia mais

Prova Substitutiva PMR3201 1o. semestre 2018 Prof. Thiago Martins

Prova Substitutiva PMR3201 1o. semestre 2018 Prof. Thiago Martins Prova Substitutiva PMR301 1o. semestre 018 Prof. Thiago Martins Instruções Escreva o nome e o número USP na folha de papel almaço. Numere cada página. Indique o total de páginas na primeira página. Os

Leia mais

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 PROVA 1 MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 Nome: Número USP: Instruções: (1 ) Esta prova é individual. (2 ) Não destaque as folhas deste caderno. (3 ) A prova consiste de 6

Leia mais

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição Recursividade Prof. Cesar Augusto Tacla Métodos iterativos Métodos iterativos utilizam estruturas de repetição For While Do while Normalmente, um método invoca outros métodos, não a si mesmo. 2 1 Recursividade

Leia mais

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; } Lista 05 Herança 1. Analisando a classe Java abaixo podemos observar que a mesma possui apenas um atributo, um construtor e dois métodos. Perceba que dentro do método main estão sendo invocados métodos

Leia mais

Aulas de. Algoritmos e Modelação Matemática

Aulas de. Algoritmos e Modelação Matemática Aulas de Algoritmos e Modelação Matemática Paulo Mateus André Souto 2013 ii À guardiã Precaução dirigida aos alunos Os temas apresentados neste trabalho são uma versão muito preliminar da sebenta da cadeira

Leia mais

INF 1010 Estruturas de Dados Avançadas

INF 1010 Estruturas de Dados Avançadas INF 1010 Estruturas de Dados Avançadas Listas de Prioridades e Heaps 12/09/16 2012 DI, PUC-Rio Estruturas de Dados Avançadas 2012.1 1 uma outra aplicação de árvores binárias lista de prioridades: lista

Leia mais

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Filas. Prof. Túlio Toffolo  BCC202 Aula 12 Algoritmos e Estruturas de Dados I Filas Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 12 Algoritmos e Estruturas de Dados I O que é uma fila? 1 4 2 3 Fila 1 2 3 4 TAD Fila Tipo Abstrato de dados com a seguinte característica:

Leia mais

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

1. Cotação de cada pergunta: / / (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame. Departamento de Ciência de Computadores Estruturas de Dados (CC114) 2 o Teste: 25/Junho/2012 FCUP 2011/12 duração: 2.5 horas 1. Cotação de cada pergunta: 1. 30 / 2. 35 / 3. 35 (Total: 100 pontos) 2. Responda

Leia mais

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES Listas de Prioridades! Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade! A prioridade associada a um dado pode

Leia mais

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação. Árvores de Pesquisa A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação. Particularmente adequada quando existe necessidade de considerar todos ou alguma combinação

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA ESTRUTURAS DE DADOS E ALGORITMOS 1 HEAP BINÁRIA Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande HEAP BINÁRIA É uma árvore binária satisfazendo duas propriedades:

Leia mais

UNIVERSIDADE DA BEIRA INTERIOR

UNIVERSIDADE DA BEIRA INTERIOR UNIVERSIDADE DA BEIRA INTERIOR Programação e Algoritmos / Programação II 2º Semestre Exame - 1ª chamada Resolução 20/06/2013 1. [2.0 val] Apontadores (Responder esta questão nesta folha e entregar com

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Métodos de busca - seqüêncial - binária Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Onde Estamos Ementa Revisão: Estrutura de dados;crescimento

Leia mais

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

CAL ( ) MIEIC/FEUP Estruturas de Dados ( ) Conjuntos Disjuntos R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CPAL, 2010/2011 1 Conjuntos Disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura

Leia mais

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Heaps Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Conteúdo Introdução Definição de Heap Heap Binária Implementação com vetor Fila de Prioridades

Leia mais

Teoria dos Grafos Aula 6

Teoria dos Grafos Aula 6 Teoria dos Grafos Aula 6 Aula passada Busca em grafos Busca em largura (BFS Breadth First Search) Propriedades Aula de hoje BFS implementação Complexidade Busca em profundidade (DFS) Conectividade, componentes

Leia mais

double x; x = enigmab1(100);

double x; x = enigmab1(100); 8h Universidade Federal do ABC Avaliação: Prova 02 Disciplina: Processamento da Informação Turmas: A4, A5 (8hs) Professor: Jesús P. Mena-Chalco Data: 05/05/2016 Nome: RA: Instruções para a prova (leia

Leia mais

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina Grafos: Busca SCE-183 Algoritmos e Estruturas de Dados 2 Thiago A. S. Pardo Maria Cristina Percorrendo um grafo Percorrendo um Grafo Percorrer um grafo é um problema fundamental Deve-se ter uma forma sistemática

Leia mais

Estrutura de Dados: Aula 3 - Linguagem C

Estrutura de Dados: Aula 3 - Linguagem C Estrutura de Dados: Aula 3 - Linguagem C Uso de Memória Alocação de memória Estática Ocorre em tempo de compilação no momento em que se define uma variável ou estrutura é necessário que se definam seu

Leia mais

UNIVERSIDADE DA BEIRA INTERIOR

UNIVERSIDADE DA BEIRA INTERIOR UNIVERSIDADE DA BEIRA INTERIOR Algoritmos e Estruturas de Dados - Bioengenharia 2º Semestre Exame Especial Resolução 19/07/2013 A. [4.75 val] Algoritmos de ordenação e de pesquisa (usando memória estática

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract

Leia mais