Programação de Computadores II TCC

Documentos relacionados
INF01056 Aula 07/08 Backtracking. Baseado no livro Programming Challenges

Algoritmos Tentativa e Erro (Backtracking) Prof.: Jonas Potros

Tentativa e Erro (Backtracking)

Recursividade Exaustiva e Backtracking

Programação de Computadores II

Análise e Complexidade de Algoritmos

Programação de Computadores II TCC /Turma A 1

double x; x = enigmab1(100);

Recursividade. Prof. Jesus José de Oliveira Neto

Exercícios sobre repetição. 1. Escreva um método que lê via teclado 8 números e retorna a quantidade de negativos.

Programação de Computadores I. Aula - Vetores. Professor Ilaim Costa Junior.

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

Problema das n rainhas AULA 19. Soluções. Problema das 8 rainhas. Problema das 8 rainhas

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

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

System.out.print("e"); O programa acima irá imprimir: "b". O programa acima irá imprimir: "bd". O programa acima irá imprimir: "e".

Algoritmos de Enumeração

Problema das n rainhas

Algoritmos Gulosos. Norton T. Roman

Análise de Algoritmos

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

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.

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Algoritmos e Estruturas de Dados I Linguagem C

Questão 1 Analise o trecho do código abaixo, escrito na linguagem C#:

Problema das n rainhas AULA 24. Soluções. Problema das 8 rainhas. Problema das 8 rainhas

> Princípios de Contagem e Enumeração Computacional 1/13

3. Linguagem de Programação C

LISTAS. Profa. Me. Andréa Zotovici. São Paulo 2014

Aula 3: Algoritmos: Formalização e Construção

Backtracking( ) CAL ( ) MIEIC/FEUP. ./rr(1) Técnicas de Concepção de Algoritmos

Backtracking. Túlio Toffolo Marco Antônio Carvalho BCC402 Aula 10 Algoritmos e Programação Avançada

Orientação a Objetos e Java

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Desafios de Programação

SCC0601 Projeto de Algoritmos. Recursão

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

Programação científica C++

Algoritmos e Programação de Computadores

Algoritmos e Estruturas de Dados I

Projeto de algoritmos: Algoritmos Gulosos

TCC 00308: Programação de Computadores I Introdução

Processamento da informação. Prof. Fabrício Olivetti de França

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

Programação: Vetores

Recursividade. Objetivos do módulo. O que é recursividade

Recursividade, Tentativa e Erro

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

Algoritmos II prof. Daniel Oliveira

BCC202 - Estrutura de Dados I

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

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

INSTRUÇÕES DE REPETIÇÃO

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Projeto e Análise de Algoritmos

Problema do Caminho Hamiltoniano

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

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

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

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

Sintaxe Básica de Java Parte 2

Paradigmas de Projetos de Algoritmos

Lógica de Programação I

Complexidade de Algoritmos

Prof. Rogério Rocha 1

Pesquisa e Ordenação

Introdução à Programação

Fundamentos de programação

Revisão: Tipo Abstrato de Dados Recursividade

Linguagem de Programação Java Terceira aula. Prof. Rogério Albuquerque de Almeida

CI811 Tópicos em Algoritmos

Introdução à Programação Estruturada Parte 2. Material da Prof. Ana Eliza

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

Introdução à Programação / Programação I

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

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

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

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

Processamento da Informação Teoria. Listas e Matrizes

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:

SCC Capítulo 2 Recursão

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

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

SCC0124 Introdução à Programação para Engenharias

Aula 15 Variáveis Indexadas (vetores)

Algoritmos Combinatórios: Introdução

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2011/2012

UNIVERSIDADE DA BEIRA INTERIOR

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Logica de Programacao. Jorge Augusto F. de Souza Edward Boszczowski

Algoritmos de Ordenação: MergeSort

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

Seleção Múltipla Laços (while, do-while, for) AULA 05

Algoritmos e Estruturas de Dados I

Transcrição:

Programação de Computadores II TCC-00.174 Profs.: Leandro A. F. Fernandes (Turma A1) & Marcos Lage (Turma B1) (Turma A1) www.ic.uff.br/~laffernandes (Turma B1) www.ic.uff.br/~mlage Conteúdo: Material elaborado pelos profs. Anselmo Montenegro e Marcos Lage com contribuições do prof. Leandro A. F. Fernandes Introdução Busca sistemática de todas as soluções possíveis Garante que a solução será encontrada, por enumerar todas as possibilidades Garante eficiencia, nunca testando uma solução mais de uma vez 30/01/2013 Programação de Computadores II 2 1

Introdução Utiliza força bruta, ao fazer busca exaustiva Prunning: otimização que consistem em descartar resultados parciais que não conduzem ao resultado desejado 30/01/2013 Programação de Computadores II 3 Ideia Central Método baseado em tentativa e erro Váriasseqüênciasde decisõessãotestadas, até quea solução seja encontrada Usada quando se quer achar soluções para problemas paraosque não se conhece uma regra fixade computação 30/01/2013 Programação de Computadores II 4 2

Abordagem Passo1: Decomporo processoemum númerofinitode subtarefas parciais(expressas de forma recursiva) Passo 2: Explora-las exaustivamente sem repetir computação Sempre que possível: Descartar caminhos não promissores 30/01/2013 Programação de Computadores II 5 Rotina genérica Solução é modelada como um vetor (A 1, A 2,..., A N ) Cada elemento A i representa uma parte da solução Ex.: Uma jogada de uma sequência, um subconjunto de elementos, etc. A cada passo tem-se um solução parcial com K elementos (A 1, A 2,..., A K ) No passo atual, testa-se se a solução desejada foi encontrada, retorna sucesso em caso positivo Se não, tenta-se extender a solução adicionando mais um elemento no vetor (A 1, A 2,..., A K, A K+1 ) e continua-se o processo exploratório Se não há possibilidade de extensão, retorna falha 30/01/2013 Programação de Computadores II 6 3

Rotina genérica boolean finished = false; /* Todas soluções encontradas? */ void backtrack(int[] a, int k, SomeData input) { if (issolution(a, k, input)) processsolution(a, k, input); else { k = k + 1; int[] c = constructcandidates(a, k, input); for (int i = 0; i < c.length; i++) { a[k] = c[i]; backtrack(a, k, input); if (finished) return; 30/01/2013 Programação de Computadores II 7 Rotina genérica (continuação) issolution(a, k, input) Testa se os primeiros k elementos do arraya formam uma solução desejada (input permite passar dados específicos para a rotina) processsolution(a, k, input) Esta rotina imprime, conta, ou realiza o processamento desejado uma vez que a solução foi encontrada constructcandidates(a, k, input) Cria o arrayc com o conjunto completo de todos os possíveis candidatos para a posição k do arraya, dado o conteúdo das k-1 primeiras posições 30/01/2013 Programação de Computadores II 8 4

Construir todos os subconjuntos a partir de N elementos boolean issolution(final boolean[] a, int k) { return ((k + 1) == a.length); void processsolution(final boolean[] a, int k) { System.out.print("{"); for (int i = 0; i <= k; i++) if (a[i]) System.out.print(" " + i); System.out.println(" "); boolean[] constructcandidates(final boolean[] a, int k) { boolean[] c = new boolean[2]; c[0] = false; c[1] = true; return c; 30/01/2013 Programação de Computadores II 9 boolean issolution(final int[] a, int k) { return ((k + 1) == a.length); Construir todas as permutações de N elementos void processsolution(final int[] a, int k) { System.out.print("{"); for (int i = 0; i <= k; i++) System.out.print(" " + a[i]); System.out.println(" "); int[] constructcandidates(final int[] a, int k) { boolean[] inperm = new boolean[a.length]; for (int i = 0; i < k; i++) inperm[a[i]] = true; int n = 0; for (int i = 0; i < inperm.length; i++) if (!inperm[i]) n++; int[] c = new int[n]; for (int i = 0, j = 0; i < inperm.length; i++) if (!inperm[i]) c[j++] = i; return c; 30/01/2013 Programação de Computadores II 10 5

Sudoku 30/01/2013 Programação de Computadores II 11 8 rainhas 30/01/2013 Programação de Computadores II 12 6

Passeio do Cavalo 30/01/2013 Programação de Computadores II 13 Labirinto 30/01/2013 Programação de Computadores II 14 7

Problema da Partição Seja S o conjunto de números inteiros sem repetição. Deseja-se saber se S contém um subconjunto S tal que soma dos seus elementos seja exatamente igual a metade da soma dos elementos de S. Ou seja, trata-se de saber se o problema da partição para S tem uma solução e, em caso afirmativo, apresentar um subconjunto S que responde ao problema. Você deve resolver este problema usando um algoritmo de backtracking onde: i. as soluções são representadas por tuplas de tamanho variável ii. o valor do k-ésimo elemento da tupla é sempre menor do que o valor dos (k 1) elementos que o antecedem na tupla 30/01/2013 Programação de Computadores II 15 Eight 8 3 2 1 5 7 6 4 30/01/2013 Programação de Computadores II 16 8