Complexidade de Algoritmos

Propaganda
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Técnicas de Programação III
Análise de Algoritmos
(Continuação)
Aula ministrada em: 28/08/2007
Prof. Mauro L. C. Silva
Técnicas de Programação III - Prof. Mauro Silva
1/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Objetivos da Aula
Entender a Análise e a Complexidade de
Algoritmos
Técnicas de Programação III - Prof. Mauro Silva
2/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
A Complexidade de Tempo:
Podemos expressar de forma abstrata a eficiência
de um algoritmo, descrevendo o seu tempo de
execução como uma função do tamanho do problema
(quantidade de dados).
Isto é chamado de Complexidade de Tempo.
Técnicas de Programação III - Prof. Mauro Silva
3/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
Exemplo:
Ordenação de um Vetor
Primeiro caso: Bubblesort (Bolha);
Segundo caso: StraightSelection (Seleção Direta).
Técnicas de Programação III - Prof. Mauro Silva
4/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
Bubblesort (Bolha):
Bubblesort é o mais primitivo dos métodos de
ordenação de um vetor;
A idéia é percorrer um vetor de n posições n vezes,
a cada vez comparando dois elementos e trocando-os
caso o primeiro seja maior que o segundo.
Técnicas de Programação III - Prof. Mauro Silva
5/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
Bubblesort (Bolha):
ordenaBolha
/* Bubblesort */
inteiro i,j,x,a[n];
início
para i de 1 até n faça
para j de 2 até n faça
se (a[j]>a[j+1]) então
x <- a[j];
a[j] <- a[j+1];
a[j+1] <- x;
fim se
fim para
fim para
fim
Técnicas de Programação III - Prof. Mauro Silva
6/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
Bubblesort (Bolha):
A comparação (a[j-1]>a[j]) vai ser executada:
n*(n-1) vezes – (n2 – n).
Uma troca de elementos não significa que um dos
elementos trocados tenha encontrado o seu lugar
definitivo.
Técnicas de Programação III - Prof. Mauro Silva
7/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
StraightSelection (Seleção Direta):
O método da seleção direta é uma forma intuitiva
de ordenarmos um vetor:
Escolhemos o menor elemento do vetor e o
trocamos de posição com o primeiro elemento;
Depois começamos do segundo e escolhemos
novamente o menor dentre os restantes e o
trocamos de posição com o segundo e assim por
diante.
Técnicas de Programação III - Prof. Mauro Silva
8/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
StraightSelection (Seleção Direta):
seleçãoDireta
inteiro i,j,menor,aux,a[n];
início
para i de 1 até n-1 faça
menor <- i;
para j de i +1 até n faça
se (a[j] < a[menor]) então
menor <- j;
fim se
fim para
aux <- a[i];
a[i] <- a[menor];
a[menor] <- aux;
fim para
fim
Técnicas de Programação III - Prof. Mauro Silva
9/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
StraightSelection (Seleção Direta):
Neste algoritmo o número de vezes que a
comparação (a[j] < x) é executada é expresso por (n1)+(n-2)+...+2+1 = (n/2)*(n-1).
O número de trocas a[k] <- a[i]; a[i] <- x é realizado
no pior caso, onde o vetor está ordenado em ordem
inversa, somente n-1 vezes, num total de 2*(n-1).
Técnicas de Programação III - Prof. Mauro Silva
10/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
Interpretação
Como já foi dito, a única forma de se poder comparar
dois algoritmos é descrevendo o seu comportamento
temporal em função do tamanho do conjunto de dados
de entrada, Talgoritmo = f(n), onde n é o tamanho dos
dados.
Tbubblesort = n*(n-1)
Tstraightselection = 2*(n-1).
Técnicas de Programação III - Prof. Mauro Silva
11/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
Interpretação
O que nos interessa é o comportamento assintótico de
f(n), ou seja, como f(n) varia com a variação de n.
O interessante é saber como o algoritmo se comporta
com uma quantidade de dados realística para o meu
problema e o que acontece quando eu vario esses
dados.
Técnicas de Programação III - Prof. Mauro Silva
12/13
UNICEUMA – Centro Universitário do Maranhão
Técnicas de Programação III / Sistemas de Informação / 4° Período
Período
Complexidade de Algoritmos
Interpretação - Exemplo
Se eu tenho dois algoritmos a e b para a solução de um
problema.
Se a complexidade de um é expressa por fa(n) = n2 e a do
outro por fb(n) = 100*n.
Isto significa que o algoritmo a cresce quadraticamente
(uma parábola) e que o algoritmo b cresce linearmente
Se eu uso esses algoritmos para um conjunto de 30 dados,
o segundo com Tb=3000 é pior do que o primeiro com
Ta=900.
Se eu os uso para um conjunto de 30.000 dados, porém,
terei Ta=900.000.000 e Tb=3.000.000.
Isto porque o comportamento assintótico dos dois é bem
diferente.
Técnicas de Programação III - Prof. Mauro Silva
13/13
Download