Você está na página 1de 2

Análise de Complexidade em Algoritmos

Discente: Paulo Vinicius Ruffini Azevedo


Engenharia da Computação – 2º período (noturno)

Introdução;
A análise de complexidade em algoritmos é como um processo sistemático para resolver um certo
problema através de dois aspectos básicos, a correção e análise, aonde na correção há a exatidão do
método empregado e na análise é avaliado a eficiência do algoritmo em termos dos recursos
utilizados. Neste assunto, temos algumas identificações capaz de medir a qualidade de um software,
são elas o lado do usuário com a interface, robustez, compatibilidade e desempenho, e o lado do
desenvolvedor com a portabilidade, clareza e reuso.

Importância da análise Matemática;


Implementar algoritmos de maneira eficiente é de extrema importância para conseguir construir
aplicações que permite o produto ser mais escalável e proporcionar o usuário uma boa experiência.
Saber o quanto de espaço de memória um algoritmo pode consumir ou quanto tempo levará para
terminar a criação do algoritmo é essencial analisar para que se possa estar otimizando o código.
Muitas das maiores empresas de tecnologia como Google, Amazon e Facebook possuem processos
seletivos que avaliam rigidamente o nível de conhecimento de algoritmo dos candidatos, por isso a
importância desta aplicação é tão requerida.

Contando instruções de um algoritmo;


Para conseguir calcular a complexidade de um algoritmo, é feito uma contagem das diferentes
operações feitas no código. Por exemplo, se houver uma adição, multiplicação e uma divisão em
uma mesma linha de código, ele é classificado em um nível de complexidade, então essa contagem
é feita nas linhas de código para que possa ser possível ter uma noção da complexidade do
algoritmo.

Comportamento assintótico;
O comportamento assintótico pode ser entendido como a curva de crescimento da função gerada
pelo processo de análise de algoritmos. Por exemplo o algoritmo de ordenação Bubble Sort possui
uma certa complexidade. É um método de descrever o comportamento de limites. Exemplos
incluem o desempenho de algoritmos quando aplicados a um volume muito grande de dados de
entrada, ou o comportamento de sistemas físicos quando eles são muito grandes.

Tipos de análise assintótica (ômega, O, Theta);


O: Usamos a notação BIG-O para limitar de forma assintótica o crescimento do tempo de execução
com fatores constantes acima e abaixo. Algumas vezes, vamos querer limitar somente acima.
Usamos a notação BIG-O para limites assintóticos superiores, uma vez que ela limita o crescimento
do tempo de execução superior para valores suficientemente grandes de entrada.

Ômega: Assim como na Notação O, estamos interessados em inferir o crescimento do tempo/espaço


de execução de um determinado algoritmo. No entanto, ao invés de olharmos para uma função que
é o limite superior do algoritmo estudado, estamos olhando o limite inferior. A notação ômega
trabalha com os limites de uma função em relação à outra. Neste caso, o limite inferior. Podemos
interpretar então como: a função f(n) cresce no mínimo na ordem de g(n) para qualquer valor da
entrada n que seja maior ou igual a n0.

Theta: descreve o comportamento assintótico de funções definindo ao mesmo tempo um limite


superior e um limite inferior para a execução de um determinado algoritmo. A notação theta é uma
espécie de junção das notações O e ômega. Ao invés de utilizarmos uma constante c1, agora
utilizaremos duas constantes: c1 e c2. Essas constantes mostram como apenas deslocando a curva
no gráfico conseguimos ver que uma função é ao mesmo tempo os limites superiores e inferiores da
função estuda.

Classes de problemas;
Dentre as classes de complexidade de problemas comumente usadas, temos a O(1) de ordem
constante onde as instruções são executadas um número fixo de vezes, não dependendo do tamanho
dos dados de entrada. O(log(n)) de ordem logarítmica de algoritmos que resolvem um problema
transformando-o em problemas menores. O(n) de ordem linear em que uma certa quantidade de
operações é realizada sobre cada elemento de entrada. O(n^2) de ordem quadrática em que ocorre
quando os dados são processados aos pares. Há diversas outras classificações de problemas que
podem ocorrer nos algoritmos.

Conclusão;
Perceptível a importância de estudar sobre a análise da complexidade de um algoritmo, uma análise
profunda em um algoritmo com problemas pode resolver um pequeno defeito que estava causando
um problema gigantesco em um código, além disso também há o fato de que muitas empresas
grandes pedem este conhecimento como pré-requisito para uma candidatura, ou até mesmo para
empresas que não tem esse pré-requisito, lhe daria uma grande vantagem em cima de outros
participantes ter um conhecimento amplo disso.

Você também pode gostar