algoritmo shell sort

Download Algoritmo Shell Sort

Post on 01-Dec-2014

457 views

Category:

Software

0 download

Embed Size (px)

DESCRIPTION

Análise de Algoritmos - Algoritmo Shell Sort

TRANSCRIPT

  • 1. Algoritmo Shell Sort Gabriel Ramalho Tlio Lemes Vinicius Rodrigues
  • 2. Dado certo nmero de elementos, informaes ou dados, e a necessidade de termos que orden-los em uma ordem predefinida, se faz necessria a utilizao de algoritmos de ordenao. Dentre as vrias razes para se ordenar uma sequncia, uma delas a possibilidade de acessar seus dados de uma maneira mais eficiente. Motivao
  • 3. Questo: Dado um vetor de elementos no ordenados deve- se orden-los de acordo com uma funo de comparao predefinida. Entrada: Vetor de elementos no ordenados: L[n] = {e1, e2, e3, , en}. Sada: Vetor ordenado. Descrio:
  • 4. Viso Geral Dividir o vetor em vetores menores, ordenando-os e fazendo isso novamente para ter um nico vetor praticamente ordenado e ento trabalhar em cima dele, que seria mais prtico e rpido O Shell Sort se baseia em uma varivel chamada de incremento de sequncia, ou incremento de shell, que dado por h e ao decorrer da execuo do algoritmo, decrementada at 1 Utilizando o incremento de shell, o algoritmo compara elementos distantes em um vetor, em vez de comparar os adjacentes
  • 5. Viso Geral No algoritmo, a ordenao realizada em vrios passos, usando uma sequncia de valores do incremento de shell onde comeando por hN selecionamos apenas os valores que esto hN elementos distantes um do outro, ento ordenamos esses elementos com algum algoritmo de ordenao simples como bolha, seleo ou insero. Deste modo, apenas os elementos selecionados sero ordenados, os outros so todos ignorados.
  • 6. Algoritmo Donald Shell Funo ShellSort(A, n) aux, i, j, h = n/2; Enquanto h > 0 i = h; Enquanto i < n aux = A[i] j = i; Enquanto j >= h && aux < A[j - h] A[j] = A[j - h]; j = j - h; A[j] = aux; i = i +1; h = h/2;
  • 7. Exemplo (Donald Shell): n = 8 h = 4
  • 8. Exemplo (Donald Shell): n = 8 h = 2
  • 9. Exemplo (Donald Shell): n = 8 h = 1
  • 10. Exemplo (Donald Shell): Resultado Final:
  • 11. Como escolher valores para h? Existem vrios modos de escolher valores para h baseados em estudos de eficincia O mtodo de seleo de valores para h proposto por Donald Shell foi h = n/2 onde n o nmero de elementos do vetor, mas j foi provado que sua eficincia baixa O mtodo de seleo de Donald Knuth, explicado como: h = 3 * h + 1 E a sequncia gerada: 1, 4, 13, 40, 121, 364, 1093, 3280
  • 12. Algoritmo Knuth Funo ShellSort(A, n) i, j , h = 1; aux; Enquanto h < n h = h * 3 + 1; Enquanto h > 1 h = (h 1) / 3; i = h; Enquanto i < n aux = A[i]; j = i h; Enquanto(j >= 0 && aux < A[j]) A[j + h] = A[j]; j = j h; A[j + h] = aux; i = i + 1;
  • 13. Prova de Corretude Sendo L uma lista de n elementos, com n >= 0: L[n] = { e0, e1, , en } Queremos demonstrar que qualquer que seja o valor dos elementos da lista L, atravs do algoritmo de insero, a lista L ser ordenada de acordo com uma funo de comparao predefinida. Para qualquer que seja o valor de h: - sugerido por Shell: n/2, n/4, , 1 - sugerido por Knuth: , 40, 13, 4, 1 o ltimo valor de h ser sempre 1, logo, para provar a corretude do algoritmo precisamos apenas que para em h = 1 o algoritmo esteja correto.
  • 14. Prova de Corretude Considerando o algoritmo de insero abaixo: para j = 1 at n key = L[j] i = j - 1 enquanto i >= 0 e compara(L[i], key) L[i + 1] = L[i] i = i + 1 L[i+1] = key Considere que L[0] um valor j ordenado. Sendo assim, a cada iterao L[j] colocado na posio correta e nenhum elemento de L[0..j] se move alm de j. Logo, quando j = n + 1 ento L[n] estar ordenado, como queramos demonstrar.
  • 15. Complexidade Pior Caso Mtodo de seleo de Donald Shell: O(n) Mtodo de seleo de Donald Knuth: O(n^3/2)
  • 16. Concluso: Vantagens: Shell Sort uma tima opo para arquivos de tamanho moderado. Sua implementao simples e requer uma quantidade de cdigo pequena. Desvantagens: O tempo de execuo do algoritmo sensvel ordem inicial do arquivo. O mtodo no estvel.
  • 17. Bibliografia: http://cadernogeek.wordpress.com/tag/shell-sort/ http://www.decom.ufop.br/toffolo/site_media/uploads/2011- 2/bcc202/slides/19._shellsort.pdf http://www.lia.ufc.br/~valdisio/ed/PO2.pdf http://www.dsc.ufcg.edu. br/~lbmarinho/slides/atal_2012_1/corretude_2012_1.pdf