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 Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

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

Multiplicação de inteiros

BCC202 - Estrutura de Dados I

Análise e Complexidade de Algoritmos

Algoritimos e Estruturas de Dados III CIC210

Projeto e Análise de Algoritmos

Paradigmas de Projetos de Algoritmos

Projeto e Análise de Algoritmos

Recursividade, Tentativa e Erro

Projeto e Análise de Algoritmos

ANÁLISE DE ALGORITMOS

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

Introdução à Computação

Aritmética Binária e Complemento a Base. Introdução ao Computador 2010/1 Renan Manola

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

Introdução a Computação

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

Circuitos Lógicos. Capítulo 9 Aritmérica Digital: Operações e Circuitos

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

Lista de Exercícios sobre Recursividade

Estruturas de Dados 2

Aula prática 5. Funções Recursivas

Complexidade de Tempo e Espaço

Técnicas de Projeto de Algoritmos

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

PCC104 - Projeto e Análise de Algoritmos

Solução de Recorrências

Aula 13: Branch-and-bound

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

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Projeto e Análise de Algoritmos

REVISÃO DE MATEMÁTICA BÁSICA

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Complexidade de Algoritmos

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

Circuitos Digitais. Conteúdo. Soma de Números Binários. Soma de Números Binários. Exemplos. Exemplos. Aritmética Binária

Prof. a : Patrícia Caldana

Revendo as operações

Algoritmos e Programação. AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO

Aula 7: Portas Lógicas: AND, OR, NOT, XOR, NAND e NOR

Sistemas de Numeração. Exemplos de Sistemas de Numeração (1) Exemplos de Sistemas de Numeração (2) Sistemas de Numeração

Teoria dos Grafos Aula 14

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

Aula de hoje. Códigos numéricos. Códigos binários. Armazenamento de dados. Armazenamento de dados. Armazenamento de dados

Projeto e Análise de Algoritmos

Introdução à Computação

Circuitos Lógicos Aula 22

Tópicos Avançados em Algoritmos

INTERCALAÇÃO E ORDENAÇÃO DE ARQUIVOS POR ALGORITMOS DE FUSÃO

CURSO de NIVELAMENTO INTRODUÇÃO À PROGRAMAÇÃO

Projeto e Análise de Algoritmos

Exemplos: -5+7=2; 12-5=7; -4-3=-7; -9+5=-4; -8+9=1; -4-2=-6; -6+10=4

Fundamentos de Programação 1

Recursividade Exaustiva e Backtracking

OPERAÇÕES COM NÚMEROS INTEIROS

ADIÇÃO E SUBTRAÇÃO DE FRAÇÕES 1A

Aula 05: - Recursão (parte 1)

UNIVERSIDADE ESTADUAL DO CEARÁ UECE UNIVERSIDADE ABERTA DO BRASIL UAB LICENCIATURA EM COMPUTAÇÃO PCC- Ambiente Virtuais de Aprendizagem

FFT Fast Fourier Transform

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

SISTEMAS DE NUMERAÇÃO

Sistemas de Computação

Matemática. Operações Básicas. Professor Dudan.

Algoritmos de Ordenação

Aula Teórica: Potenciação e Potência de dez

Transcrição:

Projeto e Análise de Algoritmos Aula 03 Técnicas de Projeto de Algoritmos (Divisão e Conquista) Edirlei Soares de Lima <edirlei@iprj.uerj.br>

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

Divisão e Conquista Ideia geral: 1. Dividir a instância do problema em duas ou mais instâncias menores; 2. Resolver as instâncias menores (geralmente recursivamente); 3. Obter a solução para as instâncias originais (maiores) através da combinação destas soluções.

Divisão e Conquista O paradigma de dividir e conquistar envolve 3 passos: Dividir Conquistar Combinar

Divisão e Conquista Exemplo: calcular a soma de n números a 0 + + a n 1 Se n > 1, podemos dividir o problema em duas instâncias do mesmo problema: Soma dos primeiros n/2 números; Soma dos n/2 números restantes; Uma vez estas duas somas computadas, adicionamos seus valores para obter o resultado final: a 0 + + a n 1 = (a 0 + + a n/2 1 ) + (a 0 + + a n/2 1 )

Divisão e Conquista Esta é uma maneira eficiente de calcular a soma de n números? É mais eficiente do que uma adição força bruta? Nem todos os algoritmos baseados na técnica de dividir e conquistar são mais eficientes do que uma solução força bruta.

Divisão e Conquista Em geral, o tempo gasto na execução das três etapas do algoritmo dividir e conquistar, é menor do que a resolução por outros métodos. A estratégia dividir e conquistar produz alguns dos algoritmos mais importantes e eficientes da área da computação. Importante: a estratégia dividir e conquistar pode ser facilmente adaptada a computação paralela.

Exemplo: Multiplicação de Inteiros Grandes Problema: realizar a multiplicação de inteiros grandes (da ordem de 100 dígitos decimais). Ex: 358712253797428009 153461234908764388 =? Multiplicação Tradicional: 9999 7777 69993 69993 69993 69993 77762223 u v u v Algoritmo de Força Bruta: - multiplicação dígito a dígito; - soma dígito a dígito; Complexidade: O(n 2 + n) = O(n 2 )

Exemplo: Multiplicação de Inteiros Grandes Problema: realizar a multiplicação de inteiros grandes (da ordem de 100 dígitos decimais). Outra forma de multiplicar números grandes? Passo 1 - Multiplicação dos Grandes A = x 1 y 1 A = 12 56 = 672 Passo 2 - Multiplicação dos Pequenos B = x 2 y 2 B = 34 78 = 2652 Passo 3 - Soma os dois grupos de x C = x 1 + x 2 C = 12 + 34 = 46 Passo 4 - Soma os dois grupos de y D = y 1 + y 2 D = 56 + 78 = 134 Passo 5 - Multiplique as somas dos grupos E = C D E = 46 134 = 6164 x y x 1 x 2 12 34 56 78 y 1 y 2

Exemplo: Multiplicação de Inteiros Grandes Problema: realizar a multiplicação de inteiros grandes (da ordem de 100 dígitos decimais). Outra forma de multiplicar números grandes? Passo 6 - Subtraia o produto da soma dos dois grupos (E), o produto dos grandes (A) e o produto dos pequenos (B) F = E - A - B F = 6164-672 - 2652 = 2840 Passo 7 - Shift do produto dos grandes G = A 10 2m G = 672 10 2x2 = 6720000 Passo 8 - Shift do resultado das subtrações H = F 10 m H = 2840 10 2 = 284000 Passo 9 - Soma Final I = G + B + H I = 6720000 + 2652 + 284000 x y x 1 x 2 12 34 56 78 y 1 y 2

Exemplo: Multiplicação de Inteiros Grandes Algoritmo de Karatsuba 1. KARATSUBA(u, v, n) 2. se n < 3 então 3. retorne u v 4. senão 5. m n/2 6. a u/10 m 7. b u mod 10 m 8. c v/10 m 9. d v mod 10 m 10. ac KARATSUBA(a, c, m) 11. bd KARATSUBA(b, d, m) O(n log 23 ) = O(n 1.585 ) 12. y KARATSUBA(a + b, c + d, m + 1) 13. x ac 10 2m + (y - ac - bd) 10 m + bd 14. retorne x

Exemplo: Multiplicação de Inteiros Grandes Multiplicação Tradicional: O(n 2 ) Algoritmo de Karatsuba: O(n log23 ) Wolfram Alpha: plot n^2 from n=0 to 15, n ^ log base 2 of 3 from n=0 to 15

Divisão e Conquista Outros algoritmos importantes baseados em divisão e conquista que veremos ao longo do curso: Merge Sort Quick Sort

Quando Utilizar Divisão e Conquista? Existem três condições que indicam que a estratégia de divisão e conquista pode ser utilizada com sucesso: Deve ser possível decompor uma instância em subinstâncias. A combinação dos resultados dever ser eficiente (trivial se possível). As sub-instâncias devem ser mais ou menos do mesmo tamanho.

Comentários sobre a Divisão e Conquista Muitos algoritmos eficientes são baseados nesta técnica. Contudo, ela pode ser inaplicável e inferior a soluções algorítmicas mais simples. Outras estratégias semelhantes: Diminuir e Conquistar (Decrease and Conquer) Transformar e Conquistar (Transform and Conquer)

Comentários sobre a Divisão e Conquista Vantagens: Pode gerar algoritmos eficientes com forte tendência a complexidade logarítmica; Facilmente paralelizável; Desvantagens: Geralmente são algoritmos recursivos (problema de estouro de pilha); Repetição de sub-problemas;

Exercícios Lista de Exercícios 03 Divisão e Conquista http://www.inf.puc-rio.br/~elima/paa/

Leitura Complementar Levitin. Introduction to the Design and Analysis of Algorithms, 3rd Edition, 2011. Capítulo 5: Divide-and-Conquer