Você está na página 1de 12

Análise da Complexidade de Algoritmos

I. Introdução à complexidade de algoritmos:


• O que é a complexidade de um algoritmo e como ela é analisada em termos de tempo e espaço.
II. Diferentes cenários de análise:
• Os três cenários possíveis ao analisar a complexidade de um algoritmo: melhor caso, caso médio
e pior caso.
III. Complexidades assintóticas comuns:
• As complexidades assintóticas mais comuns, como O(1) (complexidade constante) e O(log(n))
(complexidade logarítmica).
IV. Análise assintótica:
• Como a análise assintótica é usada para analisar o comportamento de um algoritmo tendo em
vista um grande volume de dados de entrada.
V. Exemplos práticos:
• Análise da complexidade de algoritmos comuns, como Bubblesort e StraightSelection.
Análise da Complexidade de Algoritmos

I. Introdução à complexidade de algoritmos:

A complexidade de um algoritmo é uma medida de quão eficiente ele é em relação ao número


de operações (passos) necessárias para sua conclusão. Ela é analisada em termos de tempo e
espaço.
A complexidade temporal se refere ao tempo que as instruções do algoritmo levam para serem
executadas. É calculada por meio da função de complexidade de tempo, que mede o número
de operações necessárias para executar um algoritmo.
A complexidade espacial se refere ao espaço na memória que o algoritmo utiliza enquanto é
executado. É calculada por meio da função de complexidade de espaço, que mede a memória
necessária para a execução de um algoritmo.
Ao analisar a complexidade de um algoritmo, é importante levar em consideração três cenários
possíveis: melhor caso, caso médio e pior caso .
Análise da Complexidade de Algoritmos

II. Diferentes cenários de análise:

Ao analisar a complexidade de um algoritmo, é importante levar em consideração três cenários


possíveis: melhor caso, caso médio e pior caso.
O melhor caso é a função que executa o número mínimo de etapas nos dados de entrada de n
elementos. Isso significa que o algoritmo é executado da maneira mais eficiente possível para
uma determinada entrada.
O pior caso é a função que executa o número máximo de etapas nos dados de entrada de
tamanho n. Isso significa que o algoritmo é executado da maneira menos eficiente possível
para uma determinada entrada.
O caso médio é a função que executa um número médio de etapas nos dados de entrada de n
elementos. Isso significa que o algoritmo é executado com eficiência média para uma
determinada entrada.
Esses três cenários são importantes para entender como um algoritmo se comporta em
diferentes situações e ajudam a avaliar sua eficiência geral.
Análise da Complexidade de Algoritmos

III. Complexidades assintóticas comuns:


As complexidades assintóticas mais comuns são O(1) e O(log(n)).
O(1) é conhecida como complexidade constante. Isso significa que o tempo de execução do
algoritmo independe do tamanho da entrada e é bem rápido.
Exemplo:

Este algoritmo acessa um elemento específico de um array. Como o acesso a um elemento de


um array é uma operação constante (ou seja, leva o mesmo tempo independentemente do
tamanho do array), a complexidade deste algoritmo é O(1).
Análise da Complexidade de Algoritmos

III. Complexidades assintóticas comuns:


O(log(n)) é conhecida como complexidade logarítmica. Isso significa que o tempo de execução
pode ser considerado menor do que uma constante grande e é super rápido.
Essas complexidades são importantes para entender como um algoritmo se comporta em
relação ao tamanho da entrada e ajudam a avaliar sua eficiência geral.
Análise da Complexidade de Algoritmos

III. Complexidades assintóticas comuns:


Exemplo O(log(n)):

Este algoritmo implementa a busca


binária em um array ordenado. A busca
binária tem complexidade O(log(n))
porque a cada iteração do loop
enquanto, o intervalo de busca é
reduzido pela metade. Isso significa que
o número de iterações necessárias para
encontrar o item desejado (ou
determinar que ele não está presente)
é proporcional ao logaritmo do
tamanho do array.
Análise da Complexidade de Algoritmos

IV. Análise assintótica:

A análise assintótica é usada para avaliar o desempenho de um algoritmo em termos de


tamanho de entrada. Ela permite calcular como o tempo (ou espaço) levado por um algoritmo
aumenta com o tamanho da entrada .
Na análise assintótica, a preocupação principal se dá quando temos que processar uma
quantidade alta de dados. É através da análise assintótica que conseguimos analisar o
comportamento de um algoritmo tendo em vista esse grande volume de dados de entrada.
A ideia é determinar como o algoritmo se comporta para valores muito grandes de entrada.
Neste caso, ignoramos as constantes e os valores de menor magnitude por entender que eles
não são significativos diante dos valores de maior magnitude.
Isso permite simplificar a função que descreve o tempo de execução do algoritmo e evidenciar
a parte mais importante, facilitando a análise e comparação de diferentes soluções.
Análise da Complexidade de Algoritmos

IV. Exemplos práticos:


Bubblesort e StraightSelection são dois algoritmos de ordenação comuns.
O Bubblesort é um algoritmo de ordenação simples que compara elementos adjacentes e os
troca de lugar se estiverem na ordem errada. Ele continua fazendo isso até que todos os
elementos estejam na ordem correta. A complexidade de tempo do Bubblesort é O(n^2) no
pior caso e no caso médio, onde n é o número de elementos a serem ordenados
Análise da Complexidade de Algoritmos

IV. Exemplos práticos:


Bubblesort

Este algoritmo implementa o Bubblesort em um array de 10 elementos. Ele compara


elementos adjacentes e os troca de lugar se estiverem na ordem errada. Ele continua fazendo
isso até que todos os elementos estejam na ordem correta.
Análise da Complexidade de Algoritmos

IV. Exemplos práticos:

O StraightSelection (também conhecido como Selection Sort) é outro algoritmo de ordenação


simples que seleciona o menor elemento do array e o troca com o primeiro elemento. Em
seguida, ele seleciona o segundo menor elemento e o troca com o segundo elemento, e assim
por diante. A complexidade de tempo do StraightSelection é O(n^2) no pior caso, no caso
médio e no melhor caso, onde n é o número de elementos a serem ordenados
Análise da Complexidade de Algoritmos

IV. Exemplos práticos:


O StraightSelection:

Este algoritmo implementa o StraightSelection em um array de 10 elementos. Ele seleciona o


menor elemento do array e o troca com o primeiro elemento. Em seguida, ele seleciona o
segundo menor elemento e o troca com o segundo elemento, e assim por diante.

Você também pode gostar