Aula 02: Custos de um algoritmo e funções de complexidade

Propaganda
MCTA028 – Programação Estruturada
Aula 02:
Custos de um algoritmo e funções de
complexidade
Prof. Jesús P. Mena-Chalco
[email protected]
3Q-20106
1
Linguagem C: Tipos de dados
2
Linguagem C: Tipos de dados
Tipos de dados primários.
Tipos de dados derivados.
Tipos definidos pelo usuário.
(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php
3
Linguagem C
char tem 8 bits (não é 16 bits como em Java)
não existe tipo booleano (usar int ou char):
0 falso
≠ 0 verdadeiro
Na verdade C99 permite o uso de palavras true/false nos
programas (mas o compilador os trata como os valores 1 e
0 de qualquer forma)
tipos inteiros podem ser signed ou unsigned
não tem tipo string: usa-se vetor de char
4
Linguagem C: Números inteiros
(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php
5
Linguagem C: Números reais
(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php
6
Linguagem C: Caracteres
(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php
7
Linguagem C: void
(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php
8
Tipos de dados (tipos.c)
Size of char is 1 bytes
Size of short is 2 bytes
Size of int is 4 bytes
Size of long is 8 bytes
Size of float is 4 bytes
Size of double is 8 bytes
Size of long double is 16 bytes
$ uname ­a
Linux xxxxxxxxx 4.2.0­c9 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
9
Executando um programa
10
$ gcc hello­c­world.c $ ./a.out
$ gcc hello­c­world.c ­o hello­c­world.exe
$ ./hello­c­world.exe $ echo $?
11
12
Especificadores de formato
%c
%s
char
string
%i ou %d %f ou %lf
inteiro
float (promoção para double)
Exemplo:
printf("%3.2f\n", 1.234); printf("%.2f\n", 1234.678);
→ 1.23
→ 1234.68
13
Especificadores de formato
The color: blue
First number: 12345
Second number: 0025
Third number: 1234
Float number: 3.14
Hexadecimal: ff
Octal: 377
Unsigned value: 150
Just print the percentage sign %
14
Especificadores de formato
P = blue
Q = 1234
R = 3.141590
15
Custo de um algoritmo e funções de
complexidade
Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG)
16
1995
2015
17
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.
Análise de algoritmos?
18
(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.
19
(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.
20
21
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.
22
Fonte: http://hqwallbase.com/images/big/stairways-1514922.jpg
23
Medida de custo pela execução de um
programa em uma plataforma real
24
(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.
25
(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.
26
Medida de custo por meio de um
modelo matemático
27
28
(2) Medida de custo por meio de um modelo
matemático
29
(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.
30
Função de complexidade
31
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.
32
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.
33
Exemplo: Maior elemento
Considere o algoritmo para encontrar o maior elemento de
um vetor de inteiros A[0...n-1], para n>=1
34
Exemplo: Maior elemento
Seja f uma função de complexidade tal que
de comparações entre os elementos de A.
é o número
Logo:
35
Exemplo: Maior elemento
36
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.
37
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.
38
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.
Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG)
39
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.
40
Exemplo: Busca de um registro
41
Exemplo: Busca de um registro
42
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
43
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
44
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:
45
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.
46
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
47
Comparando programas
48
Comparação de programas
Exemplo:
O programa1 leva
O programa2 leva
vezes para ser executado.
vezes para ser executa.
Qual dos dois é o melhor?
49
Comparação de programas
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
50
Comparação de programas
51
Comparação de funções de complexidade
Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG)
52
(*) Fonte: http://algs4.cs.princeton.edu/14analysis/
53
Atividade em aula
54
Atividade em aula
2 3 3.46
x
120
128.456000
55
Atividade em aula
56
Atividade em aula
6.00E+47
5.00E+47
4.00E+47
3.00E+47
2.00E+47
f1
f2
f3
f4
f5
1.00E+47
0
57
Atividade em aula
1.00E+50
1.00E+45
1.00E+40
1.00E+35
1.00E+30
1.00E+25
1.00E+20
1000000000000000
f1
f2
f3
f4
f5
10000000000
100000
1
58
Download