0% acharam este documento útil (0 voto)
46 visualizações21 páginas

Big O

A notação BIG O é uma ferramenta utilizada para medir a eficiência de algoritmos, focando no pior cenário possível. Existem diferentes tipos de complexidade, como O(1), O(log n), O(n), O(n log n), O(n²) e O(2^n), cada uma representando como o tempo de execução aumenta com o tamanho da entrada. Exemplos práticos incluem busca binária para O(log n) e Bubble Sort para O(n²).

Enviado por

jorgedoriajr
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
46 visualizações21 páginas

Big O

A notação BIG O é uma ferramenta utilizada para medir a eficiência de algoritmos, focando no pior cenário possível. Existem diferentes tipos de complexidade, como O(1), O(log n), O(n), O(n log n), O(n²) e O(2^n), cada uma representando como o tempo de execução aumenta com o tamanho da entrada. Exemplos práticos incluem busca binária para O(log n) e Bubble Sort para O(n²).

Enviado por

jorgedoriajr
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

#programacao

Notação
BIG O
O(bicho de sete cabeças)

@dev.conde
Notação BIG O #programacao

O que é BIG O?

É uma notação baseada no conceito


matemático chamado Análise
Assintótica (que basicamente analisa
números gigantes).

A notação BIG O é usada para medir a


eficiência do algoritmo.

Note que usamos o termo eficiência,


pois mais do que analisar o tempo de
execução de um algoritmo, é
necessário entender o quanto o tempo
irá aumentar conforme a entrada
aumenta.

@dev.conde
Notação BIG O #programacao

Complexidades

@dev.conde
Notação BIG O #programacao

Tipos de complexidade

O(1) - constante
O(log n) - logarítmica
O(n) - linear
O(n log n) - log linear
O(n²) - quadrático
O(2^n) - exponencial

@dev.conde
Notação BIG O #programacao

Pior cenário

Importante salientar que a notação


BIG O é sempre para considerar o pior
cenário possível. Em uma lista de 1
milhão de elementos, precisamos
considerar o pior cenário dela.

@dev.conde
Notação BIG O #programacao

Constante O(1)

É quando não há um looping no


algoritmo. Ou seja, não depende do
tamanho da entrada.

@dev.conde
Notação BIG O #programacao

Constante O(1)

Nesse código estamos acessando


diretamente o primeiro elemento do
array. Quando acessamos pelo índice é
um operação constante. Não importa a
quantidade de elementos no array.

@dev.conde
Notação BIG O #programacao

Logarítmica O(log n)

Primeiro precisamos entender o que é


um logaritmo:
Matematicamente, um logaritmo
responde a pergunta: "A qual potência
devo elevar uma base b para obter
um número n?"

Dividir para conquistar.

@dev.conde
Notação BIG O #programacao

Logarítmica O(log n)

Um exemplo para a notação O(log n) é


a busca binária:
O tamanho da lista é reduzido pela
metade a cada iteração.
Para uma lista de 16 elementos, são
necessários 4 passos no pior caso
log2(16) = 4

@dev.conde
Notação BIG O #programacao

Logarítmica O(log n)

@dev.conde
Notação BIG O #programacao

Linear O(n)

A complexidade linear ocorre quando


o tempo de execução de um algoritmo
cresce proporcionalmente ao tamanho
da entrada.

Então quando temos uma lista com n


de entrada para obter o número
desejado, deverá percorrer ela por
inteiro, ou seja n vezes.

@dev.conde
Notação BIG O #programacao

Linear O(n)

Nesse exemplo, o método calcular


percorre todos os elementos do array
para realizar a soma deles.

@dev.conde
Notação BIG O #programacao

Log Linear O(n log n)

O log linear indica que o algoritmo


cresce de forma logaritmica (log n) em
relação ao tamanho da entrada (n).

Normalmente esse algoritmo é


chamado de forma recursiva, onde a
cada nível da recursão os elementos
são visitados uma vez.

@dev.conde
Notação BIG O #programacao

Log Linear O(n log n)

Algoritmos de ordenação eficiente que


utilizam a complexidade Log Linear
são Merge Sort e Quick Sort.

Veja um exemplo de Merge Sort.

@dev.conde
Notação BIG O #programacao

Log Linear O(n log n)

@dev.conde
Notação BIG O #programacao

Quadrática O(n²)

Ocorre quando o tempo de execução


cresce proporcionalmente ao
quadrado do tamanho da entrada n.

Em uma função quadrática, é comum


possuir loops aninhados.

Um exemplo clássico é o Bubble Sort

@dev.conde
Notação BIG O #programacao

Quadrática O(n²)

O código Bubble Sort percorre o array


n vezes e para cada iteração i, ele faz
comparações e trocas.

@dev.conde
Notação BIG O #programacao

Exponencial O(2^n)

A complexidade exponencial O(2^n)


ocorre quando o tempo de execução
de um algoritmo dobra a cada
aumento unitário no tamanho da
entrada n.

Esses algoritmos geralmente exploram


todas as combinações possíveis de
escolhas e são altamente ineficientes
para grandes valores de n.

@dev.conde
Notação BIG O #programacao

Exponencial O(2^n)
Exemplo interessante é o da mochila do
ladrão

Imagina que o ladrão vai assaltar uma casa e


ele tem uma mochila para levar os itens, mas
essa mochila tem um peso máximo que ela
suporta.

Na casa há diversos itens que o ladrão pode


levar, cada um com o seu peso e valor. Um
item por exemplo, pesa 1kg e vale 2 mil reais, já
outro pesa o mesmo 1kg e vale 600 reais.

A ideia é realizar todas as combinações


possível para que ele consiga levar os itens
sem ultrapassar o limite da bolsa e com o
maior lucro possível.

@dev.conde
Notação BIG O #programacao

Exponencial O(2^n)

A abordagem recursiva para calcular o n-ésimo


número da sequência de Fibonacci é um
exemplo clássico de complexidade O(2^n).

@dev.conde
#programacao

Ficou mais fácil de


entender a notação
BIG O?
Conte nos comentários

@dev.conde

Você também pode gostar