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