Escolar Documentos
Profissional Documentos
Cultura Documentos
○ Funcionar corretamente
○ A robustez do programa
■ Ainda, diferente hardware (processador, memória, disco, etc.), diferente SO, etc.
○ Além disso, uma análise detalhada, considerando todos estes fatores, seria difícil,
demorada e pouco significativa
○ Exemplo: i = i + 1
○ Como não faz sentido analisar um algoritmo para apenas um determinado conjunto
de entradas e é impossível fazer esta análise para todas as entradas possíveis,
consideraremos apenas dois cenários: o pior caso e o melhor caso
Análise de algoritmos
Pior Caso
2
3*(n+1) //sendo n o tamanho do vetor, já calculado
3*(n) //considerando o acesso a vetor[i] como uma única operação
0
4*(n)
1
Total = 10n + 6
Análise de algoritmos
Melhor Caso
2
3*(1)
3*(1) //considerando o acesso a vetor[i] como uma única operação
1
0
0
Total = 9
Análise de algoritmos
● Vamos partir do seguinte algoritmo
<1> para i ← 1 até n, faça
<2> para j ← 1 até i, faça
<3> imprima i × j × n
<4> fim-para
<5> fim-para
Para medir o custo do algoritmo, nossa análise consistirá em ver quantas vezes cada passo
é executado.
● Linha <1> Será executada n + 1 vezes.
● Linha <2> Será executada 𝑛 ∗ σ𝑛𝑖=1 𝑖 + 𝑛
● Linha <3> Será executada 𝑛 ∗ σ𝑛𝑖=1 𝑖
● Linha <4> Sem custo
● Linha <5> Sem Custo
Análise de algoritmos
○ Então agora, vamos escrever o tempo de execução do algoritmo, que é a soma
dos tempos de execução para cada instrução executada.
○ 𝑇 𝑛 = 𝑛 + 1 + (𝑛 ∗ σ𝑛𝑖=1 𝑖 + 𝑛) + (σ𝑛𝑖=1 𝑖)
Classificação de Algoritmos
● Iterativo: estruturas de repetições (laços, pilhas, etc.)
● Recursivo: invoca a si mesmo até que certa condição seja satisfeita
■ 3 variáveis (soma, i, n)
Complexidade no desempenho de algoritmos
Complexidade de um algoritmo é o esforço (quantidade de Trabalho) de um
algoritmo. As principais medidas de complexidade são tempo e espaço,
relacionadas à velocidade e quantidade de memória, respectivamente. A
complexidade depende da particular entrada: Os principais critérios são o pior
caso e caso médio.
○ Um período constante de tempo é exigido para executar cada linha de nosso pseudocódigo.
Uma única linha pode demorar um período diferente de outra linha. Vamos a considerar que
cada execução da i-ésima linha leva um tempo 𝑐𝑖 , onde 𝑐𝑖 é uma constante.
○ Simples e Complexas
● Ccrescimento em função da entrada
Análise de algoritmos
Instruções simples: São aquelas podem ser executadas em linguagem de
maquina e diremos que medem 1 unidade de tempo. Exemplo de instruções
simples:
● Atribuições de valores de forma geral < a=0; >;
● Incremento de valores < i++; > ;
● Ooperações aritméticas mais complexas < math.sqrt(8); >;
● Acesso ao valor de um elemento em um vetor < x=A[1]; >;
● Eexpressões logica de forma geral;
● Ooperações de leitura e escrita;
𝑇 𝑛 = 𝑐1 𝑛 + 𝑐2 𝑛 − 1 + 𝑐4 𝑛 − 1 + 𝑐5 𝑛 − 1 + 𝑐8 (𝑛 − 1)
𝑇 𝑛 = (𝑐1 +𝑐2 + 𝑐4 + 𝑐5 + 𝑐8 )𝑛 − (𝑐2 + 𝑐4 + 𝑐5 + 𝑐8 )
𝑐5 𝑐6 𝑐7 2 𝑐5 𝑐6 𝑐7
𝑇 𝑛 = + + 𝑛 + 𝑐1 + 𝑐2 + 𝑐4 + − − + 𝑐8 𝑛 − 𝑐2 + 𝑐4 + 𝑐5 + 𝑐8
2 2 2 2 2 2
Esse tempo de execução no pior caso pode ser expresso como 𝑎𝑛2 + 𝑏𝑛 + 𝑐 para
constantes 𝑎, 𝑏 𝑒 𝑐 que, mais uma vez depende dos custos de instrução 𝑐𝑖 ; por
tanto, ele é uma função quadrática de n
Análise do pior caso e caso médio
Em nossa análise da ordenação por inserção, observamos tanto o melhor caso,
no qual o arranjo de entrada já estava ordenado, quanto o pior caso, no qual o
arranjo de entrada estava ordenado em ordem inversa.
𝑂: 𝑓2 = 𝑂(𝑓1 ) porque 50
40
30
𝑓2 (𝑛) 2𝑛 + 20 20
= ≤ 22 10
𝑓1 (𝑛) 𝑛2 0
1 2 3 4 5 6 7 8 9 10
Series1 Series2
Notação O
● Nomes de expressões comuns de O
○ O(1) = constante
○ O(n): linear
○ O(n2): quadrática
○ O(n3): cúbica
○ O(2n): exponencial
○ O(n!): fatorial
Notação Ω
A notação Ω fornece um limite assintótico inferior para uma determinada função
𝑔 𝑛 , denotamos por Ω 𝑔 𝑛 .
○ ...
○ g(n) = 2n e f(n) = n