complexidade de algoritmos - instituto de informática ...prestes/courses/complexity/aula12.pdf ·...

17
Complexidade de Algoritmos Edson Prestes

Upload: haliem

Post on 15-Dec-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Complexidade de Algoritmos

Edson Prestes

Complexidade de AlgoritmosACP – Shell Sort

void Ordena(int numbers[], int array_size)1. {int h = 1; int temp,j;2. while (h <= array_size) h = 3*h+1;3. while (h > 0)4. { h = h / 3;5. for (int i = (h-1); i < array_size; ++i)6. { j = i;7. while ((j > h-1) && (numbers [j] < numbers [j-h]))8. { temp= numbers[j-h];9. numbers[j-h]= numbers[j]; 10. numbers[j]=temp;11. j = j - h ;12. }13. }14. }15. }

Complexidade de AlgoritmosACP – Shell Sort

void Ordena(int numbers[], int array_size)1.{int h = 1; int temp,j;2.while (h <= array_size) h = 3*h+1;3. while (h > 0)4. { h = h / 3;5. for (int i = (h-1); i < array_size; ++i)6. { j = i;7. while ((j > h-1) && (numbers [j] < numbers [j-h]))8. { temp= numbers[j-h];9. numbers[j-h]= numbers[j]; 10. numbers[j]=temp;11. j = j - h ;12. }13. }14. }15.}

Qtd. Elem. por parte

Número de Partes

Complexidade de AlgoritmosACP – Shell Sort

void Ordena(int numbers[], int array_size)1. {int h = 1; int temp,j;2. while (h <= array_size) h = 3*h+1;3. while (h > 0)4. { h = h / 3;5. for (int i = (h-1); i < array_size; ++i)6. { j = i;7. while ((j > h-1) && (numbers [j] < numbers [j-h]))8. { temp= numbers[j-h];9. numbers[j-h]= numbers[j]; 10. numbers[j]=temp;11. j = j - h ;12. }13. }14. }15. }

Complexidade de AlgoritmosACP – Shell Sort

Cp [Ordena](n) é

Complexidade de Algoritmos

A complexidade média de um algoritmo é a média ponderada do desempenho de cada entrada pela probabilidade dela ocorrer.

Considere um algoritmo a; o conjunto de suas entradas com tamanho n, Dn; e prob(d) a probabilidade de ocorrer a entrada d de D.

Assim, a complexidade média do algoritmo a é igual a :

Complexidade Média

Complexidade de Algoritmos

É baseado no princípio de divisão e conquista.

Ele ordena um vetor, particionando-o e classificando suas partes.

Ele assume que classificar 2 vetores com n/2 elementos é mais rápido que classificar um único vetor com n elementos.

O particionamento é feito usando um elemento pivô.

Consideraremos o pivô como sendo o maior entre os dois primeiros elementos diferentes no vetor, sendo zero se todos os elementos forem iguais entre si.

Complexidade Média - Quicksort

Complexidade de Algoritmos

Dado um subarranjo A[p…r] o processo pode ser dividido em 3 partes:

Complexidade Média - Quicksort

Dividir: o arranjo A[p…r] é particionado em dois subarranjos A’[p…q-1] e A’’[q…r].

Conquistar: os dois subarranjos A’ e A’’ são ordenados por chamadas recursivas a quicksort.

Combinar: como os subarranjos foram já ordenados localmente não existe trabalho para combiná-los.

Complexidade de AlgoritmosComplexidade Média - Quicksort

Complexidade de AlgoritmosComplexidade Média - Quicksort

-

Complexidade de Algoritmos

Considerando prob(i) como a probabilidade de o pivô ser o ( i+1)º elemento, temos como complexidade média

Complexidade Média - Quicksort

O algoritmo Particionamento tem complexidade linear O(n)

Substituindo cM [Quicksort](n) por T(n), temos:

Complexidade de Algoritmos

A probabilidade prob(i) do pivô ser o ( i+1 )° elemento é calculada da seguinte maneira.

A probabilidade de qualquer elemento (1º, 2º, 3º, …, nº) estar na primeira posição é 1/n,

A probabilidade de o segundo elemento ser menor que ele é i/(n-1).

Logo, a probabilidade de o pivô aparecer na primeira posição e ser o (i+1)º elemento é

Complexidade Média - Quicksort

Complexidade de Algoritmos

De forma análoga, a probabilidade de o pivô estar na segunda posição e ser o (i +1)º elemento será

Complexidade Média - Quicksort

Portanto, a probabilidade de o pivô ser o ( i + 1 )º elemento é

Complexidade de AlgoritmosComplexidade Média - Quicksort

Substituindo prob em T(n)

Complexidade de AlgoritmosComplexidade Média - Quicksort

Vamos simplificar

Observe que

Complexidade de AlgoritmosComplexidade Média - Quicksort

Logo, temos

T (n) = n +2

n! 1

n!1!

i=1

T (i)

Complexidade de AlgoritmosComplexidade Média - Quicksort

Mostre que

onde