Aula 05 Custos de um algoritmo e funções de complexidade

Propaganda
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
Download