Introdução. Programa do PA. Plano de Aula. Por que Estudar Algoritmos? O que é um Algoritmo? Por que Estudar Algoritmos?



Documentos relacionados
Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1

Dadas a base e a altura de um triangulo, determinar sua área.

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

Disciplina de Projetos e Análise de Algoritmos. Aula 1 - Apresentação aos Algoritmos Computacionais

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

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro. Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br

Projeto e Análise de Algoritmos Projeto de Algoritmos Heurísticas e Algoritmos Aproximados

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

CI165 Introdução. André Vignatti. 31 de julho de 2014

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Aula 10 Introdução à Algoritmos. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Algoritmos e Programação de Computadores I. Prof. Eduardo

1.1. Organização de um Sistema Computacional

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

CAP. I ERROS EM CÁLCULO NUMÉRICO

Lição 1 Introdução à programação de computadores

IA: Busca Competitiva. Ricardo Britto DIE-UFPI

Análise e Complexidade de Algoritmos

Resolução de problemas e desenvolvimento de algoritmos

¹CPTL/UFMS, Três Lagoas, MS,Brasil, ²CPTL/UFMS, Três Lagoas, MS, Brasil.

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

)HUUDPHQWDV &RPSXWDFLRQDLV SDUD 6LPXODomR

Universidade Federal de Alfenas

Material Teórico - Módulo de Divisibilidade. MDC e MMC - Parte 1. Sexto Ano. Prof. Angelo Papa Neto

Projeto e Análise de Algoritmos Projeto de Algoritmos Introdução. Prof. Humberto Brandão humberto@dcc.ufmg.br

1. NÍVEL CONVENCIONAL DE MÁQUINA

a 1 x a n x n = b,

Análise de complexidade

A4 Projeto Integrador e Lista de Jogos

CAPÍTULO 6 - ESTRUTURA DE SELEÇÃO

Notas de aula número 1: Otimização *

e à Linguagem de Programação Python

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

Processamento da Informação Teoria. Algoritmos e Tipos de dados

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

ICC Introdução para JavaScript

Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação CECOMP

Faculdade de Engenharia Optimização. Prof. Doutor Engº Jorge Nhambiu

Complexidade de Algoritmos. Edson Prestes

Autómatos Finitos Determinísticos

Arquitetura de Rede de Computadores

Algoritmos e Pseudocódigo

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Processos de Desenvolvimento de Software

Cálculo Numérico. ECA / 4 créditos / 60 h Introdução, Erros e Matlab. Ricardo Antonello.

Árvores Binárias Balanceadas

Algoritmo e Programação

CURSO BÁSICO DE PROGRAMAÇÃO AULA 7

Aplicações de Combinatória e Geometria na Teoria dos Números

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

O método de Monte Carlo: algumas aplicações na Escola Básica

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Organização e Arquitetura de Computadores I. de Computadores

Computadores de Programação (MAB353)

Algoritmos e Programação I

Lista 2 - Modelos determinísticos

Somatórias e produtórias

INE Fundamentos de Matemática Discreta para a Computação

ALGORITMOS. Supervisão: Prof. Dr.º Denivaldo Lopes

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

5COP096 TeoriadaComputação

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

BCC202 - Estrutura de Dados I

Organização e Arquitetura de Computadores I. de Computadores

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v /15

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

Solução de problemas por meio de busca (com Python) Luis Martí DEE/PUC-Rio

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Algoritmos e Programação de Computadores

Curso: Desenvolvendo Jogos 2d Com C# E Microsoft XNA. Mostrar como funciona a programação orientada a objetos

Uma Heurística para o Problema de Redução de Padrões de Corte

OPERAÇÃO DE SISTEMAS DE POTÊNCIA. TEE Aula 13 Prof. Vitor Hugo Ferreira

Algoritmos e Linguagem de Programação de Computadores I

Problemas insolúveis. Um exemplo simples e concreto

Organização e Arquitetura de Computadores I

Sobre o Professor Dr. Sylvio Barbon Junior

Computação Paralela. Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho.

Algoritmos. Cláudio Barbosa

Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle

Contagem. Prof. Dr. Leandro Balby Marinho. Matemática Discreta. Fundamentos Inclusão/Exclusão Princípio da Casa dos Pombos Permutações Combinações

BARRAMENTO DO SISTEMA

Metodologia e Gerenciamento do Projeto na Fábrica de Software v.2

Análises Geração RI (representação intermediária) Código Intermediário

Sistemas Operacionais e Introdução à Programação. Vetores e matrizes

Pesquisa Sequencial e Binária. Introdução à Programação SI2

O modelo do computador

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

Introdução a Algoritmos Parte 04

Pesquisa Sequencial e Binária

Faculdade Alagoana de Administração FAA Ciência da Computação. (Resolução de Problemas em) Espaço de Estados

Lista de Exercícios. Vetores

CAPÍTULO 6 CIRCUITOS SEQUENCIAIS IV: PROJETO DE REDES SEQUENCIAIS

Circuitos Elétricos Senoides e Fasores

Introdução aos Computadores

CÁLCULO DE ZEROS DE FUNÇÕES REAIS

Sistemas Inteligentes Lista de Exercícios sobre Busca

Transcrição:

Introdução Noções, e Problemas Importantes Aula 1 Alessandro L. Koerich Pontifícia Universidade Católica do Paraná (PUCPR) Ciência da Computação 7 o Período Engenharia de Computação 5 o Período 1. Resolução de Problemas e Tipos de Problemas 6. Força Bruta Introdução 7. Dividir & Conquistar 8. Decrementar & Conquistar 9. Transformar & Conquistar 10. Compromisso Tempo-Espaço 11. Programação Dinâmica 12. Estratégia Gulosa 13. Backtracking & Branch and Bound 14. Algoritmos Aproximados Técnicas de Projeto de Algoritmos Programa do PA 2. 3. Notação Assintótica e Classe de Eficiência 4. Análise Matemática de Algoritmos 5. Análise Empírica de Algoritmos da Análise da Eficiência de Algoritmos 15. Teorema do Limite Inferior 16. Árvores de Decisão 17. Problemas P, NP e NPC Limitações PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 2 Plano de Aula Por que Estudar Algoritmos? Noções de Algoritmos da Resolução de Problemas usando Algoritmos Tipos Importantes de Problemas Razões Práticas Devemos conhecer um conjunto de algoritmos de diferentes áreas Devemos ser capazes de projetar novos algoritmos e analisar suas eficiências. Razões Teóricas O estudo de algoritmos é reconhecidamente a pedra fundamental da ciência da computação. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 3 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 4 O que é um Algoritmo? Por que Estudar Algoritmos? Algoritmo é muito mais do que um ramo da ciência da computação. É o núcleo da ciência da computação, e com toda a imparcialidade, pode ser considerado relevante para a maioria das ciências, negócios e tecnologia David Harel. Mais Razões Programas de computadores não existiriam sem algoritmos Desenvolver habilidades analíticas Algoritmos podem ser vistos como soluções especiais para problemas Os algoritmos não são soluções em si para problemas, mas procedimentos precisamente definidos para obter as soluções. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 5 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 6

Por que Estudar Algoritmos? Por que Estudar Algoritmos? Mais Razões Programas de computadores não existiriam sem algoritmos Desenvolver habilidades analíticas Algoritmos podem ser vistos como soluções especiais para problemas Os algoritmos não são soluções em si para problemas, mas procedimentos precisamente definidos para obter as soluções. Em resumo: Técnicas específicas de projeto de algoritmos podem ser interpretadas como estratégias para a resolução de problemas que podem ser úteis, estando ou não um computador envolvido. Porém, nem todos os problemas podem ser resolvidos por algoritmos. Ex. Como se tornar rico e famoso? PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 7 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 8 O que é um Algoritmo? O que é um Algoritmo? A palavra algoritmo vem do nome de um autor Persa Abu Ja far Mohammed ibn Musa al Khowarizmi que escreveu um livro de matemática. www.lib.virginia.edu/science/parshall/khwariz.html Def 1: Em ciência da computação método que pode ser usado por um computador para a solução de um problema Def 3: Um algoritmo é uma seqüência de instruções não ambíguas para resolver um problema, i.e., para obter uma saída desejada para qualquer entrada legítima em um intervalo de tempo finito. Def 2: Uma seqüência finita de instruções ou operações básicas que se seguidas, realiza uma tarefa em particular. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 9 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 10 O que é um Algoritmo? Importância dos Algoritmos em CC Todos os algoritmos devem satisfazer aos seguintes critérios: Entrada: Zero ou mais quantidades são fornecidas externamente Saída: Ao menos uma quantidade é produzida Certeza: Cada instrução é clara e não ambígua Finito: Se seguirmos as instruções de um algoritmo, então, para todos os casos, o algoritmo termina após um número finito de passos. Efetividade: Cada instrução deve ser simples o suficiente de modo a permitir que uma pessoa utilizando somente lápis e papel realize o. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 11 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 12

Metodologia Passo 1: Análise do Problema Passo 1: Análise do Problema Compreensão correta do problema Passo 2: Projeto do Programa Entendimento das entradas e saídas Passo 3: Implementação Passo 4: Verificação PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 13 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 14 Passo 2: Projeto do Programa Passo 3: Implementação Desenvolver um ALGORITMO Definir uma estrutura de dados Codificação do ALGORITMO em uma linguagem de programação Otimizar o binômio tempo espaço PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 15 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 16 Passo 4: Verificação Noções de Algoritmos Demonstrar que o algoritmo realmente resolve o problema proposto, qualquer que seja sua instância problema algoritmo entrada computador saída Solução algorítmica PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 17 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 18

Três métodos para resolver um mesmo problema: computar o máximo divisor comum de dois números inteiros O Maior Divisor Comum (GCD) de dois números inteiros não negativos m e n, indicado como gcd(m,n) é definido com o maior inteiro que divide tanto m quanto n exatamente (resto = 0) Algoritmo Euclideano Aplicar repetidamente a igualdade: gcd (m,n) = gcd (n, m mod n) até que m mod n seja igual a 0. Como o maior divisor de (m,0) = m, o último valor de m é também o gcd de m e n iniciais. Obs: m mod n é o resto da divisão de m por n. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 19 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 20 : gcd(60,24) Uma descrição mais estruturada do algoritmo: gcd(60,24) = gcd(24,12) = gcd(12,0) = 12 Passo 1: Se n=0, retorna o valor de m como resposta e para. Caso contrário executar o Passo 2. Passo 2: Dividir m por n e atribuir o valor do resto para r. Passo 3: Atribuir o valor de n para m e o valor de r para n. Ir para o Passo 1. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 21 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 22 Pseudocódigo do algoritmo Como sabemos que o algoritmo Euclidiano para? O segundo número do par diminui em cada iteração e ele não pode ser negativo. Portanto o valor do segundo número eventualmente será 0 e o algoritmo para. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 23 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 24

A exemplo de vários outro problemas, existem diversos algoritmos que resolvem o problema do maior divisor comum. Outro método... Algoritmo de verificação do inteiro consecutivo Passo 1: Atribua o valor de min{m, n} para t. Passo 2: Dividir m por t. Se o resto da divisão for 0, vá para o Passo 3. Caso contrário, vá para o Passo 4. Passo 3: Dividir n por t. Se o resto da divisão for 0, retorne o valor de t como resposta e pare. Caso contrário, vá para o Passo 4. Passo 4: Decrementar em 1 o valor de t. Ir para o Passo 2. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 25 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 26 Este algoritmo funciona corretamente? Algoritmo dos tempos de escola... Sim? E quando uma das entradas for zero? Por isso é importante especificar a faixa das entradas de um algoritmo explicitamente e cuidadosamente. Passo 1: Encontre os fatores primos de m Passo 2: Encontre os fatores primos de n Passo 3: Identificar todos os fatores comuns nas duas expansões encontradas nos Passos 1 e 2. Passo 4: Computar o produto de todos os fatores comuns e retorná lo como o maior divisor comum PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 27 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 28 : Problema Computacional O último algoritmo é muito mais complexo e lento que o algoritmo Euclidiano. Além disso, ele não é um algoritmo legítimo, pois: Os passos de fatorização prima não estão definidos sem ambigüidades; É necessário uma lista de números primos. O Passo 3 também não está definido claramente. : Ordenar uma seqüência de números Entrada: Uma seqüência de n números inteiros <a 1, a 2,, a n > Saída: Reordenação da seqüência de entrada <a 1, a 2,, a n > tal que a 1 a 2 (31,41,59,26,41,58) (26,31,41,41,58,59) Algoritmos: Selection sort Insertion sort Merge sort e muitos outros PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 29 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 30

Problemas Resolvidos por Algoritmos Genoma Humano Problemas Resolvidos por Algoritmos Roteamento de tráfego Internet PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 31 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 32 Problemas Resolvidos por Algoritmos Problemas Resolvidos por Algoritmos Mapa Rodoviário: encontrar a rota mais curta Comércio Eletrônico: criptografia Porto Velho Manaus Cuiabá Campo Grande Foz do Iguaçu Macapá Belém São Luiz Fortaleza Natal João Pessoa Recife Maceió Aracaju Brasilía Salvador Goiânia Belo Horizonte Vitória Rio de Janeiro São Paulo Curitiba Florianópolis Porto Alegre Porto Velho Manaus Cuiabá Campo Grande Foz do Iguaçu Macapá Belém São Luiz Fortaleza Natal João Pessoa Recife Maceió Aracaju Brasilía Salvador Goiânia Belo Horizonte Vitória Rio de Janeiro São Paulo Curitiba Florianópolis Porto Alegre PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 33 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 34 Problemas Bem Conhecidos Algoritmo como uma Tecnologia Ordenação (Sorting) Busca (Searching) Processamento de cadeias (String Processing) Caminho mais curto (Shortest paths in a graph) Árvore de amplitude mínima (Minimum spanning tree) Caixeiro viajante (Traveling salesman problem) Mochila (Knapsack problem) Jogos (Chess) Torres de Hanoi (Towers of Hanoi) Otimização (Optimization problems) Suponha que os computadores fossem infinitamente rápidos e que a memória do computador fosse livre. Teria porque estudar algoritmos? É obtida uma solução? A resposta é correta? Porém Considerar tempo e espaço PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 35 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 36

Eficiência de Algoritmos Eficiência de Algoritmos Algoritmos criados para resolver um mesmo problema diferem de forma drástica quanto a sua eficiência. Diferença mais significativa que hardware e software. : Dois algoritmos de ordenação: Ordenação por inserção (t=c 1 n 2 ) Ordenação por intercalação (t=c 2 nlogn) Normalmente c 1 < c 2 Normalmente c 1 e c 2 são menos significativos que n PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 37 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 38 Eficiência de Algoritmos Eficiência de Algoritmos : Comparar um computador rápido (A) que executa a ordenação por inserção com um computador mais lento (B) que executa a ordenação por intercalação. Cada um deles deve ordenar um arranjo de um milhão de números Conclusão: Usando um algoritmo cujo tempo de execução cresce mais lentamente, até mesmo com um computador mais fraco, B funciona 20x mais rápido que A. E para 10 milhões de números? PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 39 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 40 Eficiência de Algoritmos Na verdade, o desempenho total de um sistema depende: Podemos considerar algoritmos como soluções procedurais para os problemas Algoritmos Eficientes + Hardware Rápido Estas soluções não são respostas, mas instruções específicas para obter respostas. A seguir apresentamos uma seqüência de passos normalmente seguida para projetar e analisar um algoritmo PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 41 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 42

Entender o Problema A primeira coisa antes de projetar um algoritmo é entender completamente o problema dado. Ler o problema Formular questões Fazer alguns exemplos a mão Pensar a respeito de casos especiais Formular questões novamente se necessário Entender o Problema (cont.) É importante especificar exatamente uma faixa de instâncias que o algoritmo deve tratar. Lembre se: Um algoritmo correto não é aquele que funciona na maioria do casos, mas aquele que funciona corretamente para todas as entradas legítimas!!! PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 43 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 44 Observação Importante Verificar a Capacidade do Computador A maioria dos algoritmos foi concebida para ser programado em RAM, isto é, uma instrução é executada após a outra. A vasta maioria dos algoritmos em uso atualmente foram desenvolvidas para ser programados em uma máquina de von Neumann Porém, esta suposição (RAM) não se mantém para o novos computadores... Ainda assim, o estudo de técnicas de projeto e análise de algoritmos sob o modelo RAM continuarão por um longo tempo. Modelo Random Access Machine (RAM ): instruções são executadas uma após as outras, uma operação de cada vez. Assim, trataremos somente com algoritmos seqüenciais. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 45 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 46 Observação Importante Suposição: Modelo de computação genérico (RAM RandomAcessMachine) Devemos nos preocupar com a velocidade e quantidade de memória do computador? Não... Processador (RAM) Programas de Computador Neste modelo as instruções são executadas uma após outra, sem operações concorrentes Sim. No caso de problemas muitos complexos por natureza que devam processar grandes quantidades de dados ou aplicações onde o tempo é crítico. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 47 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 48

Solução Exata x Aproximada Existem problemas importantes que não podem ser resolvidos com exatidão (raiz quadrada, equações não lineares, etc.) Escolher a Estrutura de Dados Apropriada Já foi visto em PA preliminares Além disso os algoritmos disponíveis para resolver com exatidão alguns problemas podem ser inaceitavelmente lentos. Ex. caixeiro viajante. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 49 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 50 Técnicas de Projeto de Algoritmos Tendo agora todos os componentes, como projetar um algoritmo para resolver o problema? Esta é a questão que o PA pretende responder, apresentado diferentes técnicas de projeto. Métodos para Especificar um Algoritmo Pseudocódigo: mistura de linguagem natural e construtores de linguagens de programação (if, for, while, etc.) Fluxograma... PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 51 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 52 Provar a Exatidão do Algoritmo Provar que o algoritmo produz um resultado esperado para toda entrada legítima em um intervalo de tempo finito Para alguns algoritmos é bem fácil enquanto que para outros pode ser muito complexo. Mostrar o funcionamento do algoritmo para algumas entradas pode ser interessante, porém, não prova a exatidão do algoritmo. Para algoritmos aproximados: erro produzido não excede um limite pré definido. Indução matemática PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 53 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 54

Analisar um Algoritmo Codificar um Algoritmo Geralmente desejamos que o nosso algoritmo possua diversas qualidades. Depois da correção, a mais importante é a eficiência. Na verdade existem dois tipos de eficiência: eficiência temporal e eficiência espacial Muitos algoritmos são destinados a implementação como programas de computador. Obviamente, a implementação correta de um algoritmo é necessária, mas não suficiente. Outras características desejáveis são: simplicidade e generalidade PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 55 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 56 Tipos Importantes de Problemas Face ao número ilimitado de problemas que encontramos em computação, alguns tipos de problemas merecem atenção especial, pois, aparecem com muita freqüência: Ordenação Busca Processamento de cadeias de caracteres Problemas de grafos Problemas combinatoriais Problemas geométricos Problemas numéricos PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 57 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 58 Tipos Importantes de Problemas 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. 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. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 59 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 60

Estratégias de Projeto de Algoritmos Estratégias de Projeto de Algoritmos Força Bruta (Brute Force) Dividir e Conquistar (Divide and Conquer) Metodos de Resolução Diminuir e Conquistar (Decrease and Conquer) Metodos Exatos Metodos Aproximados 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) Programação Dinamica Branch-and-Bound Branch-and-Cut Branch-and-Price Outros Heuristicas Gulosa (Greedy) Melhoria Construção Particionamento Decomposição Meta-Heuristicas Algoritmos Geneticos Simulated Annealing Busca Tabu GRASP Especiais Times Assincronos Logica Fuzzy Redes Neurais Ramificar e Limitar (Branch and Bound) Form. Matematica Algoritmos Aproximados Relaxação PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 61 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 62 Atividade Atividade Prática Encontre gcd( 31415, 14142 ) usando o algoritmo Euclidiano Estime quantas vez mais rápido será encontrar gcd( 31415, 14142 ) pelo algoritmo Euclidiano comparado com a verificação de inteiros consecutivos min{ m, n } Para cada função f(n) e cada tempo t na tabela a seguir, determine o maior n de um problema que pode ser resolvido no tempo t, supondo se que o algoritmo para resolver o problema demore f(n) microssegundos. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 63 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 64 Comparação Tempos de Execução Dúvidas? 1 seg 1 min 1 hora 1 dia 1 mês 1 ano log n n n n log n n 2 n 3 2 n n! PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 65 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 66

Resumo Resumo Com a capacidade cada vez maior dos computadores resolver problemas mais complexos Em problemas maiores eficiência dos algoritmos é importante Uma base sólida de algoritmos é uma característica que separa os programadores verdadeiramente qualificados dos novatos. Conceitos básicos de análise de algoritmos Análise do algoritmo ordenação por inserção Tempo de execução Simplificações para a Resolução de Problemas usando Algoritmos PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 67 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 68 Resumo Resumo Pontos Importantes Pontos Importantes (cont.) Requisito da não ambigüidade para cada passo de um algoritmo Podem existir diferentes algoritmos para resolver um mesmo problema A faixa de entradas para a qual o algoritmo funciona devem ser especificas cuidadosamente Um mesmo algoritmo pode ser representado de diferentes maneiras Algoritmos para um mesmo problema podem ser baseados em diferentes idéias e podem resolver o problema em velocidades bem diferentes. PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 69 PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 70 Próxima Aula Notação Assintótica PUCPR Ciência/Engenharia de Computação Projeto e Análise de Algoritmos 2004 71