SIN Exemplo de Prova do Conteúdo Semestral

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

Algoritmo de Dijkstra (um para todos ; arestas de peso não negativo ; guloso)

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

double x; x = enigmab1(100);

Questão 1 (6 pontos): Para cada função selecione uma opção (Resposta correta +1.5, incorreta -0.5). (a) A função devolve o inteiro 0.

SSC 0721 Teste e Inspeção de Software

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

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

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

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

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

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

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

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

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

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

Algoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018

Análise e Complexidade de Algoritmos

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

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

Recursividade. Recursividade

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

Linguagem de Programação III

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

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

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

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

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Lista 2 - PMR2300/3200

Sintaxe Básica de Java Parte 2

Análise e Complexidade de Algoritmos

Revisão: Tipo Abstrato de Dados Recursividade

Palavras Reservadas da Linguagem Java

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Quantidade de memória necessária

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Prof. Rogério Rocha 1

Processamento da Informação Estruturas de seleção simples e composta

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

Complexidade de Algoritmos

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

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA

Análise de Programação

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Sintaxe da linguagem Java

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

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

INF 1007 Programação II

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

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

Programação Estruturada e Orientada a Objetos

Projeto de sistemas em Java. Algoritmos e Programação I. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario

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

Análise e Complexidade de Algoritmos

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

Problema do Caminho Hamiltoniano

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

Linguagem Algorítmica OO. Linguagem Algorítmica

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade

Algoritmos de Ordenação

1 - O que será impresso quando o seguinte programa escrito na linguagem JAVA for compilado e executado?

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

O problema do 3*n Otimização

Universidade Federal do ABC BCM Processamento da Informação Prática Prova Substitutiva Primeiro Quadrimestre de 2018

Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501)

Universidade Federal do ABC Disciplina: Processamento da Informação Avaliação: Prova 02 Professor: Jesús P. Mena-Chalco Data: 22/04/2015

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Algoritmos II prof. Daniel Oliveira

Caminhos em Grafos. Grafos - Caminho Simples (1) (Cliente para M. de Adj.) static int visited[maxv];

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

d) Defina uma função que copia (replica) um vector de inteiros, tendo o novo vector um tamanho dado como argumento.

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Algoritmos de Ordenação: QuickSort

COMPLEXIDADE DE ALGORITMOS

Paradigmas de Projeto de Algoritmos

Linguagens de Programação Conceitos e Técnicas. Amarrações

Projeto e Análise de Algoritmos

Simulado de Linguagem de Programação Java

05 Análise de Algoritmos (parte 4) SCC201/501 - Introdução à Ciência de Computação II

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Na classe Utils.java no package utils existe o método readdatefromconsole():

I. Correção de Algoritmos Não-Recursivos

INF 1007 Programação II

Encapsulamento de Dados

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Revisão para Prova 2. Mirella M. Moro

Orientação a Objetos e Java

Prova Final de Linguagens de Programação - DCC024B -

insfcanceof new public switch transient while byte continue extends for int null

Tipos, Literais, Operadores

Tipos, Literais, Operadores

CES-11. Algoritmos e Estruturas de Dados. Árvores Operações sobre uma árvore Estruturas para armazenar árvores

Transcrição:

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 [desejamos identificar exatamente quantas vezes os comandos hachurados serão executados, no pior caso, em relação a n]). Não é necessário resolver as equações, apenas identificá-las: void ordena(int[] A, int n) { if (n==1) return; int maior = n-1; for (int i=0;i<n-1;i++){ if (A[i]>A[maior]) maior=i; int temp = A[maior]; A[maior] = A[n-1]; A[n-1] = temp; ordena(a,n-1); Equação de Recorrência: T(n) = 0; para n=1 T(n) = T(n-1) + n-1 void hanoi(char ori, char dst, char aux, int n) { if(n <= 1) { System.out.print("Move de " + ori + " para " + dst); else { hanoi(ori, aux, dst, n-1); hanoi(ori, dst, aux, n-1); hanoi(aux, dst, ori, 1); Equação de Recorrência: T(n) = 1; para n 1 T(n) = 2*T(n-1) + T(1) T(n) = 1; para n 1 T(n) = 2*T(n-1) + 1 2. Resolva a equação de recorrência a seguir e identifique sua complexidade assintótica θ (não é preciso provar/demonstrar a complexidade assintótica): T(n) = 1 para n=1 T(n) = T(n-1) + 1 para n>1 1º T(n) = T(n-1) + 1 2º T(n) = (T(n-2) + 1) + 1 = T(n-2) + 2 3º T(n) = (T(n-3) + 1) + 2 = T(n-3) + 3 iº T(n) = T(n-i) + i para i = n-1 iº T(n) = T(n - (n-1)) + n-1 T(n) = T(1) + n - 1 T(n) = n T(n) = n => T(n) T(n-1) = T(n-2) + 1 T(n-2) = T(n-3) + 1 T(n-i) = T(1) n-i = 1 i = n-1 Demonstrando que T(n) = n : Caso base: T(1) = 1 => correto Por hipótese de indução T(n-1) = n-1 T(n) = T(n-1) + 1 T(n) = n-1 + 1 = T(n) = n como queríamos demostrar

3. Escreva um programa (utilizando um ou mais métodos/funções em código ou pseudo-código) que dado um grafo não direcionado e com n nós retorne o tamanho do maior componente conexo desse grafo. Este grafo pode ser representado por: (a) uma matriz de adjacências booleana com n x n células correspondendo aos n nós do grafo; ou representado por: (b) um arranjo de nós sendo que cada nó possui um arranjo de vizinhos; neste caso, considere que Nó é uma classe ou estrutura que possui os seguintes campos [ou atributos]: numvizinhos (campo do tipo inteiro com o número de vizinhos do respectivos nó), vizinhos (arranjo de ponteiros para Nós com numvizinhos elementos), visitado (campo booleano). Escolha a representação que te convém, se desejar, considere que todas as variáveis são globais/static. Assuma que as variáveis já estão devidamente inicializadas/preenchidas. Representação 1 int numnos = n; boolean[][] adjacencias = new boolean[n][n]; boolean[] visitados = new boolean[n]; Representação 2 int numnos = n; No[] nos = new No[numNos] // Calcula o número de nós do maior componente conexo de maneira recursiva utilizando a matriz de adjacencias private static int calculartamanhomaiorcomponente4() { for (int i=0;i<numnos;i++) visitados[i] = false; for (int atual=0;atual<numnos;atual++){ if (!visitados[atual]){ visitados[atual] = true; int temp = 1 + visitarvizinhos(atual); private static int visitarvizinhos(int atual) { int vizinhos = 0; for (int v=0;v<numnos;v++){ if (!visitados[v] && adjacencias[atual][v]){ visitados[v] = true; vizinhos += 1 + visitarvizinhos(v); return vizinhos;

// Calcula o número de nós do maior componente conexo de maneira iterativa utilizando a matriz de adjacencias private static int calculartamanhomaiorcomponente3() { LinkedList<Integer> lista = new LinkedList<Integer>(); int atual = 0; atual = i; if (!visitados[atual]){ int temp = 0; visitados[atual] = true; lista.add(atual); while (!lista.isempty()){ temp++; atual = lista.remove(); for (int v=0;v<numnos;v++){ if (!visitados[v] && adjacencias[atual][v]){ visitados[v] = true; lista.add(v);

// Calcula o número de nós do maior componente conexo de maneira iterativa utilizando o arranjo de vizinhos private static int calculartamanhomaiorcomponente2() { for (int i=0;i<numnos;i++) nos[i].visitado = false; LinkedList<No> lista = new LinkedList<No>(); No atual; atual = nos[i]; if (!atual.visitado){ int temp = 0; atual.visitado = true; lista.add(atual); while (!lista.isempty()){ atual = lista.remove(); temp++; for (int v=0;v<atual.numvizinhos;v++){ if (!atual.vizinhos[v].visitado){ atual.vizinhos[v].visitado = true; lista.add(atual.vizinhos[v]);

// Calcula o número de nós do maior componente conexo de maneira recursiva utilizando o arranjo de vizinhos private static int calculartamanhomaiorcomponente1() { for (int i=0;i<numnos;i++) nos[i].visitado = false; if (!nos[i].visitado){ nos[i].visitado = true; int temp = 1 + visitarvizinhos(nos[i]); private static int visitarvizinhos(no atual) { int vizinhos = 0; for (int v=0;v<atual.numvizinhos;v++){ if (!atual.vizinhos[v].visitado){ atual.vizinhos[v].visitado = true; vizinhos += 1 + visitarvizinhos(atual.vizinhos[v]); return vizinhos;