Escolar Documentos
Profissional Documentos
Cultura Documentos
Leitura
Introdução a teoria da complexidade:
Big O
2
Índice
Objetivos
Introdução
Análise algorítmica
Complexidade assimptótica
▪ Big O
▪ Ordens de complexidade
Conclusão ou Resumo
Referências Bibliográficas
3
Objetivos
4
Introdução
Os algoritmos são os alicerces sobre os quais a computação moderna se apoia, são conjuntos de instruções detalhados passo a passo,
precisos e lógicos, que representam a solução de um determinado problema.
No paradigma da programação orientada a objetos — Java, por exemplo — os programas de computador são constituídos por
elementos (classes) que por sua vez são formados por um conjunto de algoritmos.
Deste modo, a eficiência dos algoritmos é um aspeto fundamental no desenvolvimento de software e de sistemas informáticos, e a
análise de complexidade dos algoritmos é essencial para compreender o seu desempenho em termos de tempo de execução e
consumo de recursos, como memória.
Avaliar a eficiência de um algoritmo envolve a compreensão da análise de complexidade, o custo esperado de tempo e/ou de espaço
necessários para que um algoritmo resolva um determinado problema em função do tamanho da entrada.
Nesta unidade curricular iremos incidir principalmente no estudo da eficiência temporal dos algoritmos.
5
Análise
Algorítmica
6
Análise Algorítmica
Processadores mais poderosos executam algoritmos mais rapidamente,
na análise algorítmica é ignorada a qualidade ou o tipo de processador.
Um determinado problema pode ter vários algoritmos que o solucionam, a análise algorítmica possibilita que o programador determine
qual é o algoritmo mais eficiente que deve ser utilizado.
Nesta unidade curricular iremos incidir principalmente no estudo da eficiência temporal dos algoritmos.
7
Análise Algorítmica
// Operações aritméticas
int soma = a + b; // Adição
Estas operações básicas ou primitivas são: int subtracao = a - b; // Subtração
int multiplicacao = a * b; // Multiplicação
• Atribuição de variáveis; int divisao = a / b; // Divisão
8
Análise Algorítmica
9
Análise Algorítmica
No exemplo ao lado, podemos verificar a pesquisa sequencial do número 10 num vetor com cinco valores, no melhor e pior caso, assim
como num possível caso médio.
• No melhor caso o algoritmo de pesquisa sequencial realiza apenas uma comparação de valores, verifica se o valor da primeira
posição do vetor é igual a 10.
• No pior caso, estando o número 10 na última posição do vetor, o algoritmo de pesquisa sequencial realiza cinco comparações de
valores.
• Neste caso médio. o algoritmo de pesquisa sequencial realiza três comparações de valores, encontrando o valor 10 no terceiro índice
do vetor.
10 2 4
8 4 8
6 6 10
8 8 6
2 10 2
Figura 4. Exemplo de pior, melhor e caso médio de pesquisa sequencial do número 10 num vetor com 5 valores.
10
Complexidade
Assimptótica
11
Complexidade Assimptótica
12
Complexidade Assimptótica
+
∃𝑐𝑐 ∈ 𝑅𝑅, ∃𝑛𝑛0 ∈ 𝑍𝑍 ∶ 𝑐𝑐 > 0, 𝑛𝑛0 > 0, ∀ 𝑛𝑛 ≥ 𝑛𝑛0,
𝑓𝑓 𝑛𝑛 ≤ 𝑐𝑐 ∗ 𝑔𝑔 𝑛𝑛 ↔ 𝒇𝒇 𝒏𝒏 = 𝑶𝑶 𝒈𝒈 𝒏𝒏
Existindo um número real c e um número inteiro positivo n0, sendo c e n0 maior que zero, para todo o número inteiro n maior ou igual a
n0, função f(n) será menor ou igual à constante multiplicativa c vezes função g(n) o que equivale a 𝒇𝒇 𝒏𝒏 = 𝑶𝑶 𝒈𝒈 𝒏𝒏
Ou seja, a notação 𝒇𝒇(𝒏𝒏)=𝑶𝑶(𝒈𝒈(𝒏𝒏)) é uma forma de dizer que, para valores suficientemente grandes de 𝒏𝒏, a função 𝒇𝒇(𝒏𝒏) cresce no
máximo tão rápido quanto a função 𝒈𝒈(𝒏𝒏), multiplicada por uma constante c.
13
Complexidade Assimptótica
Legenda:
Função Ordem Complexidade Diferentes valores de n
• 1
1 O(1) Constante • log2n
• n
log2n O(log2n) Logarítmica 3.32 6.64 9.97 13.29 16.61
• nlog2n
Tabela 1. Funções de referência e respetivas ordens de complexidade assimptótica. Figura 6. Representação gráfica das funções de referência.
14
Complexidade Assimptótica
Legenda:
• 1
• log2n
• n
• nlog2n
• n2
• n3
• 2n
• n!
15
Conclusão ou Resumo
Neste recurso abordamos o conceito de algortimo, definimos em que consiste análise algoritmica e respetivas tipologias, o
que são operações primitivas e como calcular o custo temporal numa análise algoritmica.
Adicionalmente, exploramos em que consiste a complexidade assimptótica, como aplicar a análise de Big O em algoritmos
e as ordens de complexidade algortimica de diversas funções.
16
Referências Bibliográficas
17