7-Complexidade de Algoritmos
7-Complexidade de Algoritmos
7-Complexidade de Algoritmos
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
COMPLEXIDADE DE ALGORITMOS
BIBLIOGRAFIA
Algoritmo – Definição
www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
Neste sentido, a análise visa identificar qual é o melhor algoritmo para resolver um deter-
minado problema.
Exemplos de problemas: fabricar um bolo, ordenar uma lista, achar um elemento de uma
árvore etc.
A análise, portanto, pode ter vários processos para identificação dos problemas, com
possibilidade de haver um processo que seja mais rápido e outro que seja mais lento.
• É uma forma de avaliar um algoritmo que pode ser mais informativo e menos caro de
se executar.
– Trata-se do consumo de recursos de fácil execução, contrário à cronometragem.
• Baseia-se na análise “estática” do código, ou seja, pela análise dos passos do algoritmo.
Neste caso, observa-se o código sem executá-lo, para identificar o que está acontecendo
e verificar se é um algoritmo mais rápido ou mais demorado.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
Desta forma, dado uma certa combinação de algoritmos com várias opções, far-se-á uma
classificação teórica dos algoritmos em relação à performance, sem executá-lo no trecho do
código visando identificar o mais eficiente para resolver o problema.
• Em geral, algoritmos possuem algum tipo de variação nos parâmetros de entrada que
podem afetar o seu tempo de execução, por exemplo, o tempo de cálculo da média
aritmética de uma sequência de números está diretamente ligado ao comprimento da
sequência – N.
Desta forma, identifica-se qual é o fator que está influenciando mais aquele algoritmo e
passa-se a fornecer uma expressão que vai classificá-lo.
Complexidade Constante
www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
A primeira informação que esta função verá é o tamanho do vetor que, se for maior, irá
retornar um erro de posição inválida e, depois, “se não” irá retornar o elemento que está
na posição.
Nesse caso, O(1) será sempre constante. Se houver um vetor com dois elementos, será
verificado o primeiro passo referente ao tamanho e passará 1 e ao fazer a validação, será
verificado o segundo passo e retornará para a mesma posição. Logo, houve 2 passos para
executar algoritmos. Na hipótese de haver 1.000.000 de posições de vetor, esse algoritmo irá
proceder do mesmo modo, ou seja, nesse caso será um algoritmo constante.
Portanto, independentemente da entrada, o custo de processamento é constante e a
quantidade de passos que serão executados para tomar o resultado será a mesma, não
importando a entrada.
Complexidade Variável
www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
Nesse caso, quanto maior for o vetor que se está pesquisado, maiores serão as quan-
tidades de passos executados por algoritmo. Portanto, o algoritmo será influenciado pela
quantidade de passos.
Desta forma, é possível afirmar que a representação do número de passos desse algo-
ritmo se dará pela seguinte função:
an + b -> n
Onde o primeiro “n” é, justamente, o tamanho do vetor de entrada.
O “a” representaria o bloco dos passos, conforme o algoritmo já demonstrado.
Já “b” é o primeiro passo e o segundo passo.
Neste sentido, quanto maior for o número “n”, que é o tamanho do vetor, maior será o
número de passos que serão executados.
O algoritmo tem a cota n: O(n).
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
É muito comum notícias de tentativas de invasão de sistemas. Nesses casos, são utiliza-
dos ataques de força bruta.
A força bruta tenta fazer todas as combinações acima, a exemplo de tentar formar todas
as palavras possíveis de uma senha para descobri-la e invadir.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
A força bruta é um algoritmo de custo muito alto, que precisa ser executado muitas e
muitas vezes.
Em termos gráficos, tem-se os seguintes exemplos:
www.grancursosonline.com.br 8
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
www.grancursosonline.com.br 9
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
Neste caso, é diretamente proporcional, de modo que, à medida que se vai aumentando,
vai seguindo em conjunto.
www.grancursosonline.com.br 10
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
www.grancursosonline.com.br 11
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
Parece até que está abaixo do anterior, mas houve a mudança da escala. Há uma curva
acentuada subindo, com a complexidade quadrática.
www.grancursosonline.com.br 12
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
www.grancursosonline.com.br 13
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
DIRETO DO CONCURSO
1. (CESPE/INMETRO/PESQUISADOR TECNOLOGISTA EM METROLOGIA E QUALI-
DADE/2010) No que concerne a complexidade e eficiência de algoritmos, é correto
afirmar que:
a. o desenvolvimento de um algoritmo adequado depende do desempenho do hardware;
portanto, o projeto de hardware é mais importante que a proposta de algoritmo.
b. com o avanço da tecnologia, o desenvolvimento de algoritmos passou a ser irrele-
vante para o desempenho de aplicações.
c. o uso de algoritmo leva necessariamente a ganhos extraordinários de desempenho.
d. um algoritmo está correto se, e somente se, o desempenho do computador for otimi-
zado com seu uso.
e. avanços em compiladores e em ferramentas de busca usadas na Internet podem ser
produzidos por melhorias em algoritmos.
ANOTAÇÕES
www.grancursosonline.com.br 14
DESENVOLVIMENTO DE SISTEMAS
Complexidade de Algoritmos
Viu algum erro neste material? Contate-nos em: [email protected]
COMENTÁRIO
a. Se houver algoritmo exponencial, não importa nada, pois será sempre caro esse
algoritmo.
d. O algoritmo pode estar correto, mas pode ser muito demorado.
e. É possível haver uma metodologia de busca que pode ser bem demorada, mas é possí-
vel ser feito um algoritmo mais rápido.
COMENTÁRIO
É possível responder a esta questão a partir do conhecimento do algoritmo de maior
complexidade.
GABARITO
1. e
2. d
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula pre-
parada e ministrada pelo professor Tiago Lage Payne de Pádua.
ANOTAÇÕES
www.grancursosonline.com.br 15