Analise Algoritmos

1.613 Aufrufe

Veröffentlicht am

Veröffentlicht in: Bildung

Analise Algoritmos

  1. 1. Análise deAlgoritmos Profa. Maria Inés Castiñeira, Dra. Unisul – Campus Grande Florianópolis Ciência da Computação
  2. 2. O que é um algoritmo? Algoritmo: Sequência finita e ordenada de instruções necessárias para a resolução de um problema bem formulado, possível de ser implementado em computador, que sempre termina num determinado período de tempo, produzindo o resultado ou indicando a impossibilidade de obtenção do mesmo. Estruturas de Dados: forma ou processo de guardar informação
  3. 3. Algoritmos e Estruturas deDados Algoritmos são métodos para resolver problemas  problemas têm dados  dados são tratados (neste contexto) computacionalmente O Processo de organização dos dados pode determinar a eficiência do algoritmo  algoritmos simples podem requerer estruturas de dados complexas  algoritmos complexos podem requerer estruturas de dados simples Para maximizar a eficiência de um algoritmo as estruturas de dados utilizadas têm de ser projetadas em simultâneo com o desenvolvimento do algoritmo
  4. 4. Algoritmos: área de estudo epesquisa Suficientemente antiga que os conceitos básicos e a informação essencial são bem conhecidos Suficientemente nova de forma a permitir novas descobertas e novos resultados Imensas áreas de aplicação:  Ciência (Ex: Genoma humano)  Engenharia (problemas de otimização)  Comerciais (e-commerce, logística)  Saúde (Política:distribuição de recursos escasos; Análise e tratamento de imagens para diagnóstico, ...)  Internet: definição de roteamento (grafos), algoritmos de busca e indexação.
  5. 5. Porquê estudarcomplexidade? Serve para escolher entre vários algoritmos o mais eficiente Desenvolver algoritmos novos e mais eficazes para problemas que já tem solução Melhorar os algoritmos existentes Permite saber se para um determinado problema é viável obter o resultado com um dado algoritmo Permite saber se para um dado problema é viável obter o resultado para um certo número de valores de entrada e um algoritmo determinado
  6. 6. Como analisar Algoritmos? Para avaliar e comparar algoritmos diversas características podem ser utilizadas:  Tempo de execução  Memória usada (espaço)  Linhas de código  Robustez (comportamento com dados não esperados)  Correta obtenção do resultado  Qualidade do código
  7. 7. Variáveis na análise deAlgoritmos     TEMPO    
  8. 8. Análise temporal È a forma mais utilizada Pode ser realizada de dois formas:  Tempo real: necessário para execução do algoritmo. Como medir?  Número de instruções necessárias à execução
  9. 9. Análise de Algoritmos Análise precisa do tempo (medindo durante a execução) é uma tarefa complicada:  algoritmo é implementado numa dada linguagem  linguagem é compilada e programa é executado num dado computador  difícil prever tempos de execução de cada instrução e antever otimizações  muitos algoritmos são "sensíveis" aos dados de entrada  muitos algoritmos não são bem compreendidos Medidas de análise devem ser independentes da tecnologia (hardware/software) Para prever o tempo de execução de um programa apenas é necessário um pequeno conjunto de ferramentas matemáticas
  10. 10. Complexidade de Algoritmos A análise de algoritmos (complexidade do algoritmo) serve para medir a quantidade de trabalho realizada pelo algoritmo. Essa quantidade é expressa em função de operações fundamentais, as quais variam de acordo com o algoritmo, e em funçao do volume de dados Exemplo: Exiba mensagem inicial; Abra arquivo X; Crie arquivo Xbis; Enquanto (not FinalArquivo X ) faça: { Leia w em X; Escreva w em Xbis; } Feche X; Feche Xbis. Operações fundamentais? Leia w e/ou Escreva w
  11. 11. Operações primitivas oufundamentais Atribuição de valor a uma variável; Chamada de métodos Operações aritméticas; Comparação de dois números; Acesso a um elemento de um array Retorno de um método .....
  12. 12. Análise de Algoritmos Que dados usar?  dados reais: verdadeira medida do custo de execução  dados aleatórios: assegura-nos que as experiências testam o algoritmo e não apenas os dados específicos – Caso médio  dados perversos: mostram que o algoritmo funciona com qualquer tipo de dados. – Pior caso!  dados benéficos: – Melhor caso
  13. 13. Dados de entrada: Pior caso Por que é importante estudar o pior caso na análise de algoritmos?  ele é um limite superior, nunca vai ser pior do que isso!  Ele ocorre com bastante frequência em alguns algoritmos (pesquisa de um item em uma lista sendo que o item não se encontra na lista)  Muitas vezes o caso médio é tão ruim quanto o pior caso.
  14. 14. Medida do Tempo deExecução de um Programa• O projeto de algoritmos é fortemente influenciado pelo estudo de seus comportamentos.• Depois que um problema é analisado e decisões de projeto são finalizadas, é necessário estudar as várias opções de algoritmos a serem utilizados, considerando os aspectos de tempo de execução e espaço ocupado.• Muitos desses algoritmos são encontrados em áreas como pesquisa operacional, otimização, teoria dos grafos, estatística, probabilidades, entre outras.
  15. 15. Análise: Crescimento deFunções O tempo de execução geralmente dependente de um único parâmetro N  ordem de um polinômio  tamanho de um arquivo a ser processado, ordenado, etc, ou,  medida abstrata do tamanho do problema a considerar (usualmente relacionado com o número de dados a processar) Quando há mais de um parâmetro  procura-se exprimir todos os parâmetros em função de um só  faz-se uma análise em separado para cada parâmetro
  16. 16. Análise: Crescimento deFunções Os Algoritmos têm tempo de execução proporcional a1 - muitas instruções são executadas uma só vez ou poucas vezes (se isto for verdade para todo o programa diz-se que o seu tempo de execução é constante)logN - tempo de execução é logarítmico (cresce ligeiramente à medida que N cresce) (quando N duplica log N aumenta mas muito pouco; apenas duplica quando N aumenta para N^2)N - tempo de execução é linear. Típico quando algum processamento é feito para cada dado de entrada. Situação ótima quando é necessário processar N dados de entrada, ou produzir N dados na saída.
  17. 17. Análise: Crescimento deFunçõesN log N - típico quando se reduz um problema em sub-problemas, se resolve estes separadamente e se combinam as soluções (se N é 1 milhão N log N é perto de 20 milhões)N2 - tempo de execução quadrático (típico quando é preciso processar todos os pares de dados de entrada) (prático apenas em pequenos problemas, ex: produto matriz - vetor)N3 - tempo de execução cúbico (para N = 100, N^3 = 1 milhão, ex: produto de matrizes)2N - tempo de execução exponencial (provavelmente de pouca aplicação prática; típico em soluções de força bruta) (para N = 20, 2^N = 1 milhão; N duplica, tempo passa a ser o quadrado)
  18. 18. Tamanho de problemas quepodem ser resolvidosSeja n a quantidade de dados que um algoritmo podeprocessar. Esse algoritmo demora f(n) microssegundos (µs)para resolver o problema.A tabela apresenta o maior tamanho n de um problema quepode ser resolvido no tempo t=1 segundo e tempo =1 minuto. f(n) 1 segundo 1 minuto Math ERROR: ln(n) < 3 * 10^100 Muito grande! n 1000000 60000000 n2 1000 7700 2n 20 26 n! 10 11
  19. 19. Notação "O grande"  Notação matemática que nos permite suprimir detalhes na análise de algoritmos  g(n)=O(f(n))g(n) é da ORDEM def(n)c0.f(n) é um limitesuperior para g(n) apartir de um valor n0
  20. 20. Notação "O grande" Definição: uma função g(N) diz-se ser O(f(N)) se existem constantes c0 e N0 tais que g(N) < c0 f(N) para qualquer N > N0 A notação é usada com três objetivos: 1. limitar o erro que é feito ao ignorar os termos menores nas fórmulas matemáticas 2. limitar o erro que é feito na análise ao desprezar parte de um programa que contribui de forma mínima para o custo/complexidade total 3. permitir-nos classificar algoritmos de acordo com limites superiores no seu tempo de execução.
  21. 21. Forma para determinação decomplexidade Suponha o seguinte código for (i = 0; i < N; i++) { instruções; } contabilização do número de instruções é simples: N iterações e em cada uma são executadas um numero constante de instruções: O(N) Suponha o código seguinte: for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { instruções; } } contabilização do número de instruções é ainda simples: loop interno é O(N) e é executado N vezes: O(N2)
  22. 22. Como melhorar odesempenho? Se existe um algoritmo A de ordem O(n)=n e outro B de ordem O(n)=n! então é preferível utilizar A. Se não temos ou conhecemos o algoritmo apropriado? Usar técnicas de projeto de algoritmos
  23. 23. Técnicas de Projeto deAlgoritmos Dividir para conquistar (Divide-and- Conquer) Programação dinámica (otimização) Procura ganânciosa-gulosa (Greedy - otimização) Branch-and-bound ( Pruning) Aprendizagem (Machine Learning) Aleatórios (Randomized) Procura exaustiva ou força bruta (Brute Force ou Backtraking)
  24. 24. Técnicas de Projeto Dividir para conquistar (Divide-and- Conquer)  Resolver um problema grande pode ser muito difícil, mas resolver dois problemas menores pode se tornar significativamente mais simples  Divide o problema em problemas menores e resolve cada um de uma forma independente  Combina as soluções de todos os subproblemas para obter a solução do problema original  A etapa de recombinação das soluções é normalmente crítica e dispendiosa em termos de tempo
  25. 25. Técnicas de projeto de Alg. Programação dinâmica (otimização)  Uma série de escolhas deve ser feita para atingir a solução ótima  A medida que as escolhas são realizadas surgem subproblemas da mesma forma, que podem aparecer repetidamente.  A idéia é guardar a solução para cada um desses subproblemas.  Tempo exponencial pode ser transformado em polinomial
  26. 26. Técnicas de projeto de Alg. Procura ganânciosa (Greedy, otimização)  Muitos algoritmos têm procedimentos iterativos e escolhem em cada iteração um número de possíveis alternativas  Escolhe as alternativas mais atrativas, algumas podem levar à solução, outras não.  Pode não levar à solução correta
  27. 27. Técnicas de projeto de Alg. Procura exaustiva ou força bruta (Brute Force)  O algoritmo examina todas as alternativas possíveis para encontrar uma solução particular.  Pode não encontrar uma solução em tempo útil, mas garante que a encontra Branch-and-bound ( Pruning)  Ignora um conjunto de alternativas desnecessárias  Menor tempo de execução e garante que encontra a solução
  28. 28. Técnicas de Projeto Aprendizagem (Machine Learning) Baseiam a sua estratégia na análise computacional de dados previamente colecionados Aleatórios (Randomized) Em cada passo pode ser atirada uma moeda ao ar para decidir o passo seguinte Existem problemas práticos onde estes algoritmos são competitivos relativamente aos algoritmos determinísticos
  29. 29. Referências CORMEN, T.H et al. Algoritmos: Teoria e prática. 2a Ed. Campus, RJ, 2002. FREITAS, Ana Teresa. Análise de Algoritmos. Material didático (.pdf), INESC-ID/IST, 2005.

×