Escolar Documentos
Profissional Documentos
Cultura Documentos
Silo - Tips - Analise de Algoritmos Melhor Caso Pior Caso Caso Medio PDF
Silo - Tips - Analise de Algoritmos Melhor Caso Pior Caso Caso Medio PDF
Fernando Lobo
1 / 25
Sumário
2 / 25
O problema de ordenação
I Exemplo:
I Input: h8, 2, 4, 9, 3, 6i
I Output: h2, 3, 4, 6, 8, 9i
3 / 25
Insertion Sort
4 / 25
Pseudocódigo
(convenção: arrays começam na posição 1)
Insertion-Sort(A)
1 for j = 2 to length[A]
2 key = A[j]
3 // Insere A[j] na sequência ordenada A[1 . . j − 1]
4 i = j −1
5 while i > 0 and A[i] > key
6 A[i + 1] = A[i]
7 i = i −1
8 A[i + 1] = key
5 / 25
Exemplo
8 2 4 9 3 6 // input
2 8 4 9 3 6 // fim da 1a iteraç~
ao
2 4 8 9 3 6 // fim da 2a iteraç~
ao
2 4 8 9 3 6 // fim da 3a iteraç~
ao
2 3 4 8 9 6 // fim da 4a iteraç~
ao
2 3 4 6 8 9 // fim da 5a iteraç~
ao
6 / 25
Correcção do algoritmo
7 / 25
8 / 25
Invariantes
9 / 25
10 / 25
Como analisar o tempo de execução do algoritmo?
11 / 25
Tempo de execução
12 / 25
Análise de Insertion-Sort
I (NOTA: os ciclos for e while são testados mais uma vez que
o corpo do ciclo.)
13 / 25
Insertion-Sort(A)
1 for j = 2 to length[A]
2 key = A[j]
3 // Insere A[j] na sequência ordenada A[1 . . j − 1]
4 i = j −1
5 while i > 0 and A[i] > key
6 A[i + 1] = A[i]
7 i = i −1
8 A[i + 1] = key
14 / 25
Número de vezes que cada linha é executada
I linha 1: n
I linha 2: n − 1
I linha 3: n − 1
I linha 4: n − 1
I linha 5: t2 + t3 + . . . + tn
I linha 6: (t2 − 1) + (t3 − 1) + . . . + (tn − 1)
I linha 7: (t2 − 1) + (t3 − 1) + . . . + (tn − 1)
I linha 8: n − 1
15 / 25
T (n) = c1 n + c2 (n − 1) + c3 (n − 1) + c4 (n − 1)
Xn n
X X n
+ c5 tj + c6 (tj − 1) + c7 (tj − 1) + c8 (n − 1)
j=2 j=2 j=2
16 / 25
Melhor caso
T (n) = c1 n + c2 (n − 1) + c4 (n − 1) + c5 (n − 1) + c8 (n − 1)
= (c1 + c2 + c4 + c5 + c8 )n − (c2 + c4 + c5 + c8 )
17 / 25
Pior caso
I O array está ordenado por ordem inversa.
(2 + n)(n − 1)
T (n) = c1 n + c2 (n − 1) + c4 (n − 1) + c5
2
n(n − 1) n(n − 1)
+ c6 + c7 + c8 (n − 1)
c 2 2
5 c6 c7 2
= + + n
2 2 2
c5 c6 c7
+ c1 + c2 + c4 + − − + c8 n
2 2 2
− c2 + c4 + c5 + c8
19 / 25
Caso médio
20 / 25
Caso médio (cont.)
21 / 25
22 / 25
Casos: Melhor, pior e médio
I Porquê?
I Dá-nos um limite superior do tempo de execução, qualquer
que seja o input.
I O caso médio costuma ser quase tão mau como o pior caso e é
normalmente mais difı́cil de analisar.
I Nalguns algoritmos, o pior caso ocorre com muita frequência
(ex: pesquisa de um elemento que não está presente na
colecção.)
23 / 25
Ordem de crescimento
I Simplificamos para nos concentrar no essencial.
I eliminamos termos de ordem inferior.
I ignoramos o coeficiente do termo de ordem superior.
24 / 25
Ordem de crescimento (cont.)
25 / 25