complexidade de algoritmos - instituto de informática ...prestes/courses/complexity/aula12.pdf ·...
TRANSCRIPT
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 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 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 é