Your SlideShare is downloading. ×
0
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Analise Algoritmos
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Analise Algoritmos

1,178

Published on

Published in: Education
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,178
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
56
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Análise deAlgoritmos Profa. Maria Inés Castiñeira, Dra. Unisul – Campus Grande Florianópolis Ciência da Computação
  • 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. 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. 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. 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. 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. Variáveis na análise deAlgoritmos     TEMPO    
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.

×