Estruturas de Dados 2 Análise Empírica de Algoritmos IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/13
Análise da Eficiência de Algoritmos: Velocidade de Execução; Quantidade de Memória utilizada; Análise Matemática: Algoritmos não-recursivo; Algoritmos recursivos(recorrências); Análise não-matemática ou Empírica : O que é? Para que serve? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 2/13
Análise da Eficiência de Algoritmos: Velocidade de Execução; Quantidade de Memória utilizada; Análise Matemática: Algoritmos não-recursivo; Algoritmos recursivos(recorrências); Análise não-matemática ou Empírica : O que é? Para que serve? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 3/13
Análise da Eficiência de Algoritmos: Velocidade de Execução; Quantidade de Memória utilizada; Análise Matemática: Algoritmos não-recursivo; Algoritmos recursivos(recorrências); Análise não-matemática ou Empírica : O que é? Para que serve? IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 4/13
Análise Empírica(ou não-matemática) - O que é? Estudo do tempo de execução; Contagem do número de vezes em que cada instrução é executada; (ou) Temporização de cada segmento do código; Alternativa à técnicas matemáticas de análise; Capaz de avaliar o algoritmo no caso médio, ao invés de se ater ao pior caso ; Também conhecida como profiling, ou performance analisys ; IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 5/13
Para que serve? É uma forma dinâmica de avaliar o desempenho do algoritmo; Contar quantas vezes cada ação é executada, ou quanto tempo demora cada parte do algoritmo, visando otimização do mesmo. Localização de gargalos, onde são gastos a maior quantidade (percentual) do tempo na execução do programa; Otimização de Constantes de Tempo!!!! IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 6/13
Análise Empírica Como fazer: 1) Selecionar o Algoritmo a ser analisado (módulo de um sistema, função, etc...) 2) Definir o critério a ser utilizado (tempo de execução ou quantidade de execução de quais operações) 3) Implementar o algoritmo de uma forma propícia para análise (isolar o algoritmo) 4) Gerar um conjunto de testes capaz de avaliar o desempenho do algoritmo (tamanhos variados 1n-2n-4n-8n-16n-32n-... ou 1n-10n-100n-1000n-...) 5) Executar o algoritmo 6) Analisar os resultados obtidos IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 7/13
Análise Empírica Objetivos: Avaliar corretude do algoritmo(achar erros) Comparar a eficiência de diferentes algoritmos Comparar implementações alternativas do mesmo algoritmo (otimização de constantes!) Identificar a complexidade do algoritmo (estimativa) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 8/13
Análise Empírica Uso comum: Utilizar o algoritmo/módulo/função no próprio sistema onde o mesmo está implementado; Incluir contador de execuções de linha de código / função, buscando identificar onde vale a pena aplicar esforços de otimização; Determinar tempo de execução de cada função/módulo através de temporizadores (t fim t início )...mas cuidado com arredondamentos (tempo=0), e tempo de execução versus tempo real (usertime) IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 9/13
Análise Empírica Como avaliar os resultados: Tabular os dados para diversos tamanhos de entradas; Avaliar o gráfico de temporização, procurando identificar a classe de complexidade do algoritmo; Tempo Tempo Tamanho da Entrada Tamanho da Entrada IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 10/13
Análise Empírica Vantagens: Aplicável a qualquer algoritmo/função/módulo; Pode ser feita dentro do próprio sistema onde o algoritmo se encontra; Permite ter uma noção da ordem de complexidade (notação O); Permite otimização de constantes, ou seleção de um algoritmo mais adequado por meio de comparações(sem análise matemática); IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 11/13
Análise Empírica Desvantagem: Depende das características específicas do ambiente de teste (clock do computador, etc...) Não permite comparações genéricas com algoritmos cujos testes foram realizados em outro ambiente IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 12/13
Análise Empírica Resumo: Alternativa ao estudo matemático de algoritmos Utiliza dados e avaliações de tempo para calcular a complexidade aproximada de uma determinada implementação de um algoritmo Profiling ou Análise de Desempenho IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 13/13