BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade Prof. Jesús P. Mena-Chalco 1Q-2016 1 1995 2015 2 Custo de um algoritmo e funções de complexidade Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG) 3 Medida do tempo de execução de um programa Algoritmos são encontrados em todas as áreas de Computação. O projeto de algoritmos é influenciado pelo estudo de seus comportamentos. Os algoritmos podem ser estudados considerandos, entre outros, dois aspectos: Tempo de execução. Espaço ocupado (quantidade de memória). 4 (1) Análise de um algoritmo particular Qual é o custo de usar um dado algoritmo para resolver um problema específico? Características que devem ser investigadas: Tempo de execução. Quantidade de memória. 5 (2) Análise de uma classe de algoritmos Qual é o algoritmo de menos custo possível para resolver um problema particular? Toda uma familia de algoritmos é investigada. Procura-se identificar um que seja o melhor possível. Colocam-se limites para a complexidade computacional dos algoritmos pertencentes à classe. 6 7 Custo de um algoritmo Se conseguirmos determinar o menor custo possível para resolver problemas de uma dada classe, então teremos a medida da dificuldade inerente para resolver o problema. Quando um algoritmo é igual ao menor custo possível, o algoritmo é ótimo para a medida de custo considerada. Podem existir vários algoritmos para resolver um mesmo problema. → Se a mesma medida de custo é aplicada a diferentes algoritmos então é possível compará-los e escolher o mais adequado. 8 Fonte: http://hqwallbase.com/images/big/stairways-1514922.jpg 9 Medida de custo pela execução de um programa em uma plataforma real 10 (1) Medida de custo pela execução de um programa em uma plataforma real Tais medidas são bastante inadequadas e os resultados jamais devem ser generalizados: Os resultados são dependentes do compilador que pode favorecer algumas construções em detrimento de outras; Os resultados dependem de hardware; Quanto grandes quantidades de memória são utilizadas, as medidas de tempo podem depender deste aspecto. 11 (1) Medida de custo pela execução de um programa em uma plataforma real Tais medidas são bastante inadequadas e os resultados jamais devem ser generalizados: Os resultados são dependentes do compilador que pode favorecer algumas construções em detrimento de outras; Os resultados dependem de hardware; Quanto grandes quantidades de memória são utilizadas, as medidas de tempo podem depender deste aspecto. Apesar disso, há argumentos a favor de se obterem medidas reais de tempo: Exemplo: Quando há vários algoritmos distintos para resolver o problema; Assim, são considerados tanto os custos reais das operações como os custos não aparentes, tais como alocação de memória, indexação, carga, dentre outros. 12 Medida de custo por meio de um modelo matemático 13 14 (2) Medida de custo por meio de um modelo matemático 15 (2) Medida de custo por meio de um modelo matemático Usa um modelo matemático baseado em um computador idealizado. Deve ser especificado o conjunto de operações e seus custos de execuções. É mais usual ignorar o custo de algumas das operações e considerar apenas as mais significantes. Em algoritmos de ordenação: Consideramos o conjunto de comparações entre os elementos do conjunto a ser ordenado e ignoramos as operações aritméticas, de atribuição e manipulação de índices, caso existam. 16 Função de complexidade 17 Função de complexidade Para medir o custo de execução de um algoritmo, é comum definir uma função de custo ou função de complexidade f. Função de complexidade de tempo: mede o tempo necessário para executar um algoritmo para um problema de tamanho n. Função de complexidade de espaço: mede a memória necessária para executar um algoritmo para um problema de tamanho n. 18 Função de complexidade Para medir o custo de execução de um algoritmo, é comum definir uma função de custo ou função de complexidade f. Função de complexidade de tempo: mede o tempo necessário para executar um algoritmo para um problema de tamanho n. Função de complexidade de espaço: mede a memória necessária para executar um algoritmo para um problema de tamanho n. Utilizaremos f para denotar uma função de complexidade de tempo daqui para frente. Na realidade, f não representa tempo diretamente, mas o número de vezes que determinada operação (considerada relevante) é realizada. 19 Exemplo: Maior elemento Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros A[0...n-1], para n>=1 20 Exemplo: Maior elemento 21 Exemplo: Maior elemento Seja f uma função de complexidade tal que de comparações entre os elementos de A. é o número Logo: 22 Exemplo: Maior elemento 23 Tamanho da entrada de dados A medida do custo de execução de um algoritmo depende principalmente do tamanho de entrada dos dados. É comum considerar o tempo de execução de um programa como uma função do tamanho de entrada. 24 Tamanho da entrada de dados A medida do custo de execução de um algoritmo depende principalmente do tamanho de entrada dos dados. É comum considerar o tempo de execução de um programa como uma função do tamanho de entrada. → No caso da função para determinar o máximo, o custo é unifome (n-1) sobre todos os problemas de tamanho n. → Já para um algoritmos de ordenação isso não ocorre: se os dados de entrada estiverem quase ordenados, então o algoritmo pode ter que trabalhar menos. 25 Melhor caso, pior caso e caso médio Melhor caso: Menor tempo de execução sobre todas as entradas de tamanho n. Pior caso: Maior tempo de execução sobre todas as entradas de tamanho n. Caso médio (caso esperado): Média dos tempos de execução de todas as entradas de tamanho n. Aqui supoe-se uma distribuição de probabilidades sobre o conjunto de entradas de tamanho n. 26 Exemplo: Busca de um registro Considere o problema de acessar os registros de um arquivo (cada registro tem chave única). O problema: Dada uma chave qualquer, localize o registro que contenha esta chave → Considere o algoritmo de busca sequencial. 27 Exemplo: Busca de um registro 28 Exemplo: Busca de um registro 29 Exemplo: Busca de um registro Seja f uma função de complexidade tal que f(n) é o número de registros consultados. Melhor caso: Quando o elemento procurado é o primeiro consultado 30 Exemplo: Busca de um registro Seja f uma função de complexidade tal que f(n) é o número de registros consultados. Melhor caso: Pior caso: Quando o elemento procurado é o primeiro consultado Quando o elemento procurado é o último consultado 31 Exemplo: Busca de um registro Seja f uma função de complexidade tal que f(n) é o número de registros consultados. Melhor caso: Quando o elemento procurado é o primeiro consultado Pior caso: Quando o elemento procurado é o último consultado Caso médio: 32 Exemplo: Busca de um registro (caso médio) Consideremos que toda pesquisa recupera um elemento. Para recuperar o i-ésimo elemento são necessárias i comparações. 33 Exemplo: Busca de um registro (caso médio) Consideremos que toda pesquisa recupera um elemento. Para recuperar o i-ésimo elemento são necessárias i comparações. Seja a probabilidade de que o i-ésimo elemento seja procurado: 34 Exemplo: Busca de um registro (caso médio) Consideremos que toda pesquisa recupera um elemento. Para recuperar o i-ésimo elemento são necessárias i comparações. Seja a probabilidade de que o i-ésimo elemento seja procurado: Se cada elemento tiver a mesma probabilidade de ser escolhido que todos os outros, então Uma pesquisa examina aproximadamente metade dos elementos 35 Maior e Menor elementos Consideremos diferentes versões para o maior e o menor elemento de um vetor de n inteiros, para n>=1. A:= 0 1 2 3 4 5 6 36 Maior e Menor elementos (versão 1) Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso: - Pior caso: - Caso médio: 37 Maior e Menor elementos (versão 1) Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso: - Pior caso: - Caso médio: 38 Maior e Menor elementos (versão 2) Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso: - Pior caso: - Caso médio: 39 Maior e Menor elementos (versão 2) Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso: Quando os elementos estão em ordem crescente. - Pior caso: - Caso médio: 40 Maior e Menor elementos (versão 2) Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso: Quando os elementos estão em ordem crescente. - Pior caso: Quando os elementos estão em ordem decrescente. - Caso médio: 41 Maior e Menor elementos (versão 2) Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso: Quando os elementos estão em ordem crescente. - Pior caso: Quando os elementos estão em ordem decrescente. - Caso médio: Quando metade das vezes max>=A[i] 42 Maior e Menor elementos (versão 3) A:= 0 1 2 3 4 5 6 43 Maior e Menor elementos (versão 3) A:= 0 1 2 3 4 5 6 7 3 Min = 3 Max = 7 0 1 2 3 4 5 6 44 Maior e Menor elementos (versão 3) A:= 0 1 2 3 4 5 6 7 Min = 3 Max = 7 3 0 1 2 3 4 5 6 > 60 5 0 1 2 3 4 5 6 Min = 3 Max = 60 45 Maior e Menor elementos (versão 3) A:= 0 1 2 3 4 5 6 7 Min = 3 Max = 7 3 0 1 2 3 4 5 6 > 60 5 0 1 2 3 4 5 6 Min = 3 Max = 60 < ­1 90 Min = -1 Max = 90 0 1 2 3 4 5 6 46 Maior e Menor elementos (versão 3) A:= 0 1 2 3 4 5 6 7 Min = 3 Max = 7 3 0 1 2 3 4 5 6 > 60 5 0 1 2 3 4 5 6 Min = 3 Max = 60 < Min = -1 Max = 90 ­1 90 0 1 2 3 4 5 6 ­2 ­2 0 1 2 3 4 5 6 Min = -2 Max = 90 47 Maior e Menor elementos (versão 3) A:= 0 1 2 3 4 5 6 1 7 Min = 3 Max = 7 3 0 1 2 3 4 5 6 > 3 60 5 0 1 2 3 4 5 6 Min = 3 Max = 60 < 3 Min = -1 Max = 90 ­1 90 0 1 2 3 4 5 6 3 Comparações =10 ­2 ­2 0 1 2 3 4 5 6 Min = -2 Max = 90 48 Versão 3 Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso - Pior caso - Caso médio 49 Versão 3 1 comparação Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso - Pior caso - Caso médio (n-2)/2comparações (n-2)/2 + (n-2/2) comparações 50 Versão 3 1 comparação Identifique a função de complexidade f(n) para o vetor A de n elementos: - Melhor caso - Pior caso - Caso médio (n-2)/2comparações (n-2)/2 + (n-2/2) comparações 51 Maior e Menor elementos Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro 52 Maior e Menor elementos 2500 2000 f(n) 1500 maxmin1 maxmin2 maxmin3 1000 500 0 n Melhor caso 53 Funções de complexidade Não existe algoritmo que identifique o maior e o menor elemento de um vetor de n elementos com uma função menor a: 54 Comportamento assintótico de funções 55 Comportamento assintótico de funções A análise de algoritmos é realizada para valores grandes de n. Estudaremos o comportamento assintótico das funções de custo. O comportamento assintótico de f(n) representa o limite do comportamento de custo, quando n cresce. 56 Dominação assintótica Definição: Uma função f(n) domina assintoticamente uma outra função g(n) se existem duas constantes positivas c e tais que, para , temos: 57 Dominação assintótica Exemplo: Sejam Ambas as funções dominam assintoticamente uma da outra, ja que: para n>=1 para n>=0 58 Notação assintótica de funções Existem 3 notações assintóticas de funções: Notação Notação Notação 59 Notação g(n) é um limite assintótico firme de f(n) 60 Notação f(n) é da ordem no máximo g(n) O é usada para expressar o tempo de execução de um algoritmo no pior caso, está se definindo também o limite (superior) do tempo de execução desse algoritmo para todas as entradas. 61 Notação Operações entre conjuntos de funções 62 Notação Omega: Define um limite inferior para a função, por um fator constante. g(n) é um limite assintoticamente inferior 63 Teorema 64 Comparação de programas Podemos avaliar programas comparando as funções de complexidade, negligenciando as constantes de proporcionalidade. Um programa com tempo de execução que outro com tempo é melhor do 65 Comparação de programas Programa 1 Programa 2 Exemplo: O programa1 leva O programa2 leva vezes para ser executado. vezes para ser executa. Qual dos dois é o melhor? 66 Comparação de programas Programa 1 Programa 2 Exemplo: O programa1 leva O programa2 leva vezes para ser executado. vezes para ser executa. Qual dos dois é o melhor? Depende do tamanho do problema. Para n<50, o programa 2 é melhor Para n>50, o programa 1 é melhor 67 Comparação de programas 68 Comparação de funções de complexidade 69 Hierarquias de funções A seguinte herarquia de funções pode ser definida do ponto de vista assintótico: onde e são constantes arbitrárias com 70