Projeto e Análise de Algoritmos

Documentos relacionados
Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Estruturas de Dados 2

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 3

Abordagens para Resolução de Problemas

NOTAS DE AULA 1 METAHEURÍSTICA 13/10/2016

Paradigmas de Projetos de Algoritmos

Projeto e Análise de Algoritmos

Teoria da Computação. Complexidade computacional classes de problemas

Divisão-e-Conquista ( ) 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

Projeto e Análise de Algoritmos

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

Aula 12: Programação Inteira

3. Resolução de problemas por meio de busca

Teoria dos Grafos Aula 14

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

Aula 13: Branch-and-bound

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Complexidade de Algoritmos

Técnicas de Concepção de Algoritmos: Branch and Bound

Algoritmos de Ordenação

Métodos Exatos para PI - Parte 1: Branch-and-Bound

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

INF 1010 Estruturas de Dados Avançadas

Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Desenvolvimento de Aplicações Paralelas

Algoritmos 3/17/ Algoritmos como área de estudo e investigação

Projeto e Análise de Algoritmos

Análise de Complexidade de Algoritmos. mario alexandre gazziro

O Problema da Ordenação Métodos de Ordenação Parte 1

Introdução à Programação

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

Projeto e Análise de Algoritmos

Tecnicas Essencias Greedy e Dynamic

Recursividade Exaustiva e Backtracking

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Tópicos Avançados em Algoritmos

Pesquisa Operacional / Programação Matemática

TEORIA: 60 LABORATÓRIO: 0

Otimização Combinatória - Parte 3

Quantidade de memória necessária

COMPARAÇÃO ENTRE FROTA HOMOGÊNEA E HETEROGÊNEA EM PROBLEMAS DE ROTEAMENTO DE VEÍCULOS CAPACITADOS

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

Algoritmos Combinatórios: Introdução

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

BCC Projeto e Análise de Algoritmos Aula 0: Apresentação

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

Programação Linear/Inteira

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

Projeto e Análise de Algoritmos. Prof. Ruy Luiz Milidiú

Otimização Combinatória - Parte 4

Análise e Complexidade de Algoritmos

04 Grafos: caminhos e coloração SCC0503 Algoritmos e Estruturas de Dados II

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves

Algoritmos de Ordenação

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante

Tópicos em Algoritmos. André Guedes

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

Projeto e Análise de Algoritmos

n Professor n Duas Avaliações prático-teóricas: n Componente Teórico: 20 pontos n Componente Prático: 15 pontos

Complexidade de Algoritmos

Pesquisa Operacional / Programação Matemática

Complexidade de Tempo e Espaço

CAL ( ) - MIEIC/FEUP Programação Dinâmica ( )

Algoritmos e Estrutura de Dados. Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira

Análise e Complexidade de Algoritmos

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

Introdução à Programação

Grafos IFRN. Prof. Robinson Alves

Grafos: caminhos mínimos

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

Algoritmos em Grafos

Programa Analítico de Disciplina INF333 Programação Competitiva

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

Problemas de otimização

BCC Projeto e Análise de Algoritmos Aula 0: Apresentação

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

Caixeiro Viajante. Estruturas de Dados II. Prof. a Mariella Berger. 1. Objetivo

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

Técnicas de Projeto de Algoritmos

Os Problemas de Optimização Combinatória e a Teoria da Complexidade

Divisão e conquista. Eficiência de divisão e conquista

ABORDAGENS PARA RESOLVER O PROBLEMA DA MOCHILA 0/1

Algoritmos Avançados Análise de Complexidade

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

CIC 111 Análise e Projeto de Algoritmos II

Busca Heurística - Informada

Estrutura de Dados e Algoritmos

CAP 254 CAP 254. Otimização Combinatória. Professor: Dr. L.A.N. Lorena. Assunto: Metaheurísticas Antonio Augusto Chaves

Algoritmos de pesquisa

Técnicas para Programação Inteira e Aplicações em Problemas de Roteamento de Veículos 41

TEORIA DE COMPLEXIDADE

Desafios de Programação TCC Turma A-1

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

Transcrição:

Projeto e Análise de Algoritmos Aula 02 Técnicas de Projeto de Algoritmos (Força Bruta) Edirlei Soares de Lima <edirlei@iprj.uerj.br>

Tipos Importantes de Problemas Problemas de Ordenação: Reorganizar os itens de uma dada lista em ordem crescente. Problemas de Busca: Encontrar um dado valor chamado de chave de busca em um dado conjunto. Processamento de Strings: Buscar uma dada palavra em um texto, avaliar a similaridade entre cadeias de caracteres, etc. Problemas de Grafos: Travessia de grafos (como visitar todos os pontos de uma rede), caminho mais curto (qual a melhor rota entre duas cidades), ordenação topológica.

Tipos Importantes de Problemas Problemas Combinatoriais: Problemas onde é necessário encontrar um objeto combinatorial (permutações, combinações ou subconjuntos) que satisfaça certas restrições e tenha certas propriedades (maximizar um valor, minimizar um custo). Problemas Geométricos: Envolvem objetos geométricos com pontos, linhas e polígonos. Problemas Numéricos: Envolvem objetos matemáticos de natureza contínua: resolução de equações e sistemas de equações, integrais definidas, etc.

Estratégias de Projeto de Algoritmos Força Bruta (Brute Force) Dividir e Conquistar (Divide and Conquer) Diminuir e Conquistar (Decrease and Conquer) Transformar e Conquistar (Transform and Conquer) Compromisso Tempo Espaço (Space and Time Tradeoffs) Estratégia Gulosa (Greedy) Programação Dinâmica (Dynamic Programming) Voltando Atrás (Backtracking) Ramificar e Limitar (Branch and Bound) Algoritmos Aproximados

Força Bruta A técnica de força bruta (também conhecida como a busca exaustiva) é um método para resolver um problema através de uma travessia completa (ou parcial) no espaço de busca do problema para se obter uma solução. Durante a busca, é possível podar (optar por não explorar) partes do espaço de busca, se for possível determinar que estas partes não têm qualquer possibilidade de conter a solução necessária.

Força Bruta Geralmente, a força bruta é uma das estratégias mais fáceis de aplicar. Apesar de ser raramente uma fonte de algoritmos eficientes ou brilhantes, é uma importante estratégia de projeto de algoritmos. É aplicável a uma ampla variedade de problemas.

Exemplo 1: Busca Sequencial Comparar elementos sucessivos de uma dada lista com um dada chave de busca até: Encontrar um elemento similar (busca bem sucedida) ou; A lista ser exaurida sem encontrar um elemento similar (busca mal sucedida). int busca(int n, int *vet, int elem) { } int i; for (i=0; i<n; i++){ } if (elem == vet[i]) return i; return -1;

Algoritmo Geral de Força Bruta 1. Listar todas as soluções potenciais para o problema de uma maneira sistemática. Todas as soluções estão eventualmente listadas; Nenhuma solução é repetida; 2. Avaliar as soluções, uma a uma, talvez, desqualificando as não práticas e mantendo a melhor encontrada até o momento. 3. Quando a busca terminar, retornar a solução encontrada.

Exemplo 2: Caixeiro Viajante Problema: dadas n cidades com distâncias conhecidas entre cada par, encontrar o trajeto mais curto que passe por todas as cidades exatamente uma vez antes de retornar a cidade de origem (Traveling Salesman Problem (TSP)). Trajeto: a b c d a a b d c a a c b d a a c d b a a d b c a a d c b a Custo: 2+3+7+5 = 17 2+4+7+8 = 21 8+3+4+5 = 20 8+7+4+2 = 21 5+4+3+8 = 20 5+7+3+2 = 17 8 A C 5 3 2 7 B D 4 Hipóteses: (n-1)! Complexidade: O(n!)

Exemplo 3: Problema da Mochila Dados n itens: Pesos: w 1, w 2,..., w n Valores: v 1, v 2,, v n Uma mochila de capacidade W Problema: encontrar o subconjunto mais valioso de itens que caibam dentro da mochila (Knapsack Problem).

Exemplo 3: Problema da Mochila Exemplo:

Exemplo 3: Problema da Mochila Algoritmo de Força Bruta: 1. Identificar todos os subconjuntos do conjunto de n itens dados; 2. calcular o peso total de cada subconjunto para identificar subconjunto praticáveis; 3. encontrar um subconjunto com o valor mais elevado entre eles.

Exemplo 3: Problema da Mochila Como o número de subconjuntos de um conjunto de n elementos é 2 n, a busca exaustiva leva a um algoritmo O(2 n ). Assim, tanto para o problema do caixeiro viajante quanto da mochila, a busca exaustiva leva a algoritmos que são extremamente ineficientes. Estes problemas são chamados de problemas NPhard.

Exemplo 4: Par de Pontos mais Próximos Problema: Dados n pontos no plano, determinar dois deles que estão à distância mínima. Distancia(X 1, Y 1, X 2, Y 2 ) = (X 1 X 2 ) 2 + (Y 1 Y 2 )

Exemplo 4: Par de Pontos mais Próximos Problema: Dados n pontos no plano, determinar dois deles que estão à distância mínima. Entrada: coleção de n pontos (X[1.. n] e Y[1.. n]). Saída: menor distância entre dois pontos da coleção. 1. PAR-MAIS-PROXIMO(X, Y, n) 2. d + 3. para i 1 até n faça 4. para j 1 até n faça 5. se Distancia(X[i], Y[i], X[j], Y [j]) < d então 6. d Distancia(X[i], Y[i], X[j], Y [j]) 7. retorna d O(n 2 )

Força Bruta Outros algoritmos baseados em força bruta que veremos ao longo do curso: Multiplicação de Inteiros Grandes; Busca de Padrões em String; Maior Subsequência Comum; Bubble Sort; Selection Sort; Busca em Profundidade; Busca em Largura;

Comentários sobre a Força Bruta Força bruta é uma estratégia direta para resolver um problema, geralmente baseada diretamente no enunciado do problema e definições dos conceitos envolvidos. Algoritmos de busca exaustiva são executados em uma quantidade de tempo realística somente para instâncias muito pequenas. Em muitos casos existem alternativas muito melhores! Em alguns casos, busca exaustiva (ou variação) é a única solução conhecida.

Comentários sobre a Força Bruta Vantagens: Ampla aplicabilidade; Simplicidade; Fornece algoritmos razoáveis para alguns problemas. Desvantagens: Raramente fornece algoritmos eficientes; Alguns algoritmos força bruta são inaceitavelmente vagarosos; Não tão construtivo/criativo quanto outras técnicas de projeto de algoritmos.

Exercícios Lista de Exercícios 02 Força Bruta/Busca Exaustiva http://www.inf.puc-rio.br/~elima/paa/

Leitura Complementar Levitin. Introduction to the Design and Analysis of Algorithms, 3rd Edition, 2011. Capítulo 3: Brute Force and Exhaustive Search