Algoritmos e complexidade Notas de aula - Arquivo Escolar
Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar
2. Análise de complexidade • Uma definição alternativa é C ≤ p [A](n) = max{desemp[A](d) | d ∈ D, tam(d) ≤ n} • C ≤ p é monotônica e temos C = p [A](n) ≤ C ≤ p [A](n) • Caso C = p seja monotônica as definições são equivalentes C = p [A](n) = C ≤ p [A](n) C = p [A](n) ≤ C ≤ p [A](n) é uma consequência da observação que {desemp[A](d) | d ∈ D, tam(d) = n} ⊆ {desemp[A](d) | d ∈ D, tam(d) ≤ n} Analogamente, se A ⊆ B tem-se que max A ≤ max B. Exemplo 2.1 Vamos aplicar essas noções num exemplo de um algoritmo simples. Queremos é decidir se uma sequência de números naturais contém o número 1. Algoritmo 2.1 (Busca1) Entrada Uma sequência a1, . . . , an de números em N. Saída True, caso existe um i tal que ai = 1, false, caso contrário. 1 for i :=1 to n do 2 i f (ai = 1) then 3 return true 4 end i f 5 end for 6 return f a l s e Para analisar o algoritmo, podemos escolher, por exemplo, as operações básicas O = {for, if, return} e atribuir um custo constante de 1 para cada um delas. (Observe que como “operação básica” são consideradas as operações de atribuição, incremento e teste da expressão booleana i ≤ n.) Logo as execuções possíveis são E = O ∗ e temos a função de custos 34
custo : E → R + : e ↦→ |e|. 2.2. Complexidade pessimista Por exemplo custo((for, for, if, return)) = 4. As entradas desse algoritmo são sequências de números naturais, logo, D = N ∗ e como tamanho da entrada escolhemos tam : D → N : (a1, . . . , an) ↦→ n. A função de execução atribui a sequência de operações executadas a qualquer entrada. Temos exec[Busca1](d) : D → E : (for, if) (a1, . . . , an) ↦→ ireturn caso existe i = min{j | aj = 1} (for, if) nreturn caso contrário Com essas definições temos também a função de desempenho desemp[Busca1](n) = custo ◦ exec[Busca1] : (a1, . . . , an) ↦→ 2i + 1 2n + 1 caso existe i = min{j | aj = 1} caso contrário Agora podemos aplicar a definição da complexidade pessimista para obter C ≤ p [Busca1](n) = max{desemp[Busca1](d) | tam(d) = n} = 2n + 1 = O(n). Observe que C = p é monotônica, e portanto C = p = C ≤ p . Um caso que em geral é menos interessante podemos tratar nesse exemplo também: Qual é a complexidade otimista (complexidade no caso melhor)? Isso acontece quando 1 é o primeiro elemento da sequência, logo, Co[Busca1](n) = 2 = O(1). ♦ 2.2. Complexidade pessimista 2.2.1. Metodologia de análise de complexidade Uma linguagem simples • Queremos estudar como determinar a complexidade de algoritmos metodicamente. • Para este fim, vamos usar uma linguagem simples que tem as operações básicas de 35
- Page 1: Algoritmos e complexidade Notas de
- Page 4 and 5: Conteúdo 5. Programação dinâmic
- Page 6 and 7: Conteúdo 15.Complexidade de circui
- Page 9: Parte I. Análise de algoritmos 7
- Page 12 and 13: 1. Introdução e conceitos básico
- Page 14 and 15: 1. Introdução e conceitos básico
- Page 16 and 17: 1. Introdução e conceitos básico
- Page 18 and 19: 1. Introdução e conceitos básico
- Page 20 and 21: 1. Introdução e conceitos básico
- Page 22 and 23: 1. Introdução e conceitos básico
- Page 24 and 25: 1. Introdução e conceitos básico
- Page 26 and 27: 1. Introdução e conceitos básico
- Page 28 and 29: 1. Introdução e conceitos básico
- Page 30 and 31: 1. Introdução e conceitos básico
- Page 32 and 33: 1. Introdução e conceitos básico
- Page 34 and 35: 2. Análise de complexidade • Par
- Page 38 and 39: 2. Análise de complexidade 1. Atri
- Page 40 and 41: 2. Análise de complexidade Exemplo
- Page 42 and 43: 2. Análise de complexidade Compone
- Page 44 and 45: 2. Análise de complexidade • Qua
- Page 46 and 47: 2. Análise de complexidade Algorit
- Page 48 and 49: 2. Análise de complexidade Algorit
- Page 50 and 51: 2. Análise de complexidade Tratabi
- Page 52 and 53: 2. Análise de complexidade A compl
- Page 54 and 55: 2. Análise de complexidade • Fre
- Page 56 and 57: 2. Análise de complexidade Exemplo
- Page 58 and 59: 2. Análise de complexidade 1 i f l
- Page 60 and 61: 2. Análise de complexidade Novamen
- Page 62 and 63: 2. Análise de complexidade Logo te
- Page 64 and 65: 2. Análise de complexidade 7 for c
- Page 66 and 67: 2. Análise de complexidade Com iss
- Page 68 and 69: 2. Análise de complexidade funçã
- Page 70 and 71: 2. Análise de complexidade Algorit
- Page 72 and 73: 2. Análise de complexidade resolve
- Page 75: 3. Introdução Resolver problemas
- Page 78 and 79: 4. Algoritmos gulosos A abordagem g
- Page 80 and 81: 4. Algoritmos gulosos Do outro lado
- Page 82 and 83: 4. Algoritmos gulosos Aplicações
- Page 84 and 85: 4. Algoritmos gulosos 1 V ′ := {v
2. Análise <strong>de</strong> <strong>complexida<strong>de</strong></strong><br />
• Uma <strong>de</strong>finição alternativa é<br />
C ≤ p [A](n) = max{<strong>de</strong>semp[A](d) | d ∈ D, tam(d) ≤ n}<br />
• C ≤ p é monotônica e temos<br />
C = p [A](n) ≤ C ≤ p [A](n)<br />
• Caso C = p seja monotônica as <strong>de</strong>finições são equivalentes<br />
C = p [A](n) = C ≤ p [A](n)<br />
C = p [A](n) ≤ C ≤ p [A](n) é uma consequência da observação que<br />
{<strong>de</strong>semp[A](d) | d ∈ D, tam(d) = n} ⊆ {<strong>de</strong>semp[A](d) | d ∈ D, tam(d) ≤ n}<br />
Analogamente, se A ⊆ B tem-se que max A ≤ max B.<br />
Exemplo 2.1<br />
Vamos aplicar essas noções num exemplo <strong>de</strong> um algoritmo simples. Queremos<br />
é <strong>de</strong>cidir se uma sequência <strong>de</strong> números naturais contém o número 1.<br />
Algoritmo 2.1 (Busca1)<br />
Entrada Uma sequência a1, . . . , an <strong>de</strong> números em N.<br />
Saída True, caso existe um i tal que ai = 1, false, caso contrário.<br />
1 for i :=1 to n do<br />
2 i f (ai = 1) then<br />
3 return true<br />
4 end i f<br />
5 end for<br />
6 return f a l s e<br />
Para analisar o algoritmo, po<strong>de</strong>mos escolher, por exemplo, as operações básicas<br />
O = {for, if, return} e atribuir um custo constante <strong>de</strong> 1 para cada um <strong>de</strong>las.<br />
(Observe que como “operação básica” são consi<strong>de</strong>radas as operações <strong>de</strong> atribuição,<br />
incremento e teste da expressão booleana i ≤ n.) Logo as execuções<br />
possíveis são E = O ∗ e temos a função <strong>de</strong> custos<br />
34