apresentação do powerpoint · 2020. 4. 13. · radixsort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior...
TRANSCRIPT
![Page 1: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/1.jpg)
Radix SortProf. Luciano Antonio Digiampietri
![Page 2: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/2.jpg)
Radix Sort
Este algoritmo realiza a ordenação dígito a dígito, dodígito menos significativo para o mais significativo.
Utiliza, como método auxiliar, um ordenador estável.
Entrada: conjunto não ordenado números inteiros (ou strings).
Saída: arranjo ordenado de elementos.
![Page 3: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/3.jpg)
Algoritmo
String[] radix(String[] A, int numDigitos){
for (int i=numDigitos-1;i>=0;i--){
A = countingSort2(A, i, 256);
}
return A;
}
![Page 4: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/4.jpg)
Algoritmo
String[] countingSort2(String[] A, int digito, int k){
int n = A.length;
String[] B = new String[n];
int[] C = new int[k];
for (int j=0;j<n;j++) C[A[j].charAt(digito)]++;
for (int i=1;i<k;i++) C[i] += C[i-1];
for (int j=n-1;j>=0;j--) {
B[C[A[j].charAt(digito)]-1] = A[j];
C[A[j].charAt(digito)]--;
}
return B;
}
![Page 5: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/5.jpg)
Arranjo não ordenado
329
457
657
839
436
720
355
![Page 6: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/6.jpg)
Ordenação a partir do dígito menos significativo
329
457
657
839
436
720
355
![Page 7: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/7.jpg)
Ordenação a partir do dígito menos significativo
329 720
457 355
657 436
839 457
436 657
720 329
355 839
![Page 8: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/8.jpg)
Ordenação a partir do segundo dígito menos significativo
329 720
457 355
657 436
839 457
436 657
720 329
355 839
![Page 9: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/9.jpg)
Ordenação a partir do segundo dígito menos significativo
329 720 720
457 355 329
657 436 436
839 457 839
436 657 355
720 329 457
355 839 657
![Page 10: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/10.jpg)
Ordenação a partir do dígito mais significativo
329 720 720
457 355 329
657 436 436
839 457 839
436 657 355
720 329 457
355 839 657
![Page 11: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/11.jpg)
Ordenação a partir do dígito mais significativo
329 720 720 329
457 355 329 355
657 436 436 436
839 457 839 457
436 657 355 657
720 329 457 720
355 839 657 839
![Page 12: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/12.jpg)
Arranjo Ordenado
329 720 720 329
457 355 329 355
657 436 436 436
839 457 839 457
436 657 355 657
720 329 457 720
355 839 657 839
![Page 13: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/13.jpg)
Propriedades
• O algoritmo é in-place?
![Page 14: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/14.jpg)
Propriedades
• O algoritmo é in-place?• Depende do algoritmo auxiliar utilizado. Tipicamente é utilizado o Counting
Sort e, neste caso, o Radix Sort não será in-place.
![Page 15: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/15.jpg)
Propriedades
• O algoritmo é in-place?• Depende do algoritmo auxiliar utilizado. Tipicamente é utilizado o Counting
Sort e, neste caso, o Radix Sort não será in-place.
• O algoritmo é estável?
![Page 16: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/16.jpg)
Propriedades
• O algoritmo é in-place?• Depende do algoritmo auxiliar utilizado. Tipicamente é utilizado o Counting
Sort e, neste caso, o Radix Sort não será in-place.
• O algoritmo é estável?• Sim – o uso iterativo de um algoritmo auxiliar estável produzirá uma solução
estável.
![Page 17: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/17.jpg)
Complexidade Assintótica
A complexidade do Radix Sort depende do algoritmo auxiliar utilizado.
RadixSort(n) ϵ ϴ(d*OrdenadorAuxiliar(n))
sendo d a quantidade de dígitos dos números (ou quantidade decaracteres das strings) que serão ordenados.
![Page 18: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/18.jpg)
Complexidade Assintótica
Utilizando-se Couting Sort como ordenador auxiliar, teremos umordenador que não utiliza comparações:
RadixSort(n) ϵ ϴ(d*CountingSort(n))
RadixSort(n) ϵ ϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado peloCounting Sort.
![Page 19: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/19.jpg)
Complexidade Assintótica
Utilizando-se Couting Sort como ordenador auxiliar, teremos umordenador que não utiliza comparações:
RadixSort(n) ϵ ϴ(d*CountingSort(n))
RadixSort(n) ϵ ϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado peloCounting Sort.
Porém, neste contexto, k é o valor máximo de um dígito (ou bit ucaractere), tipicamente 10 valores possíveis (ou 2 ou 256). Assim,dentro do Radix Sort, tipicamente, k ϵ O(n):
![Page 20: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/20.jpg)
Complexidade Assintótica
Utilizando-se Couting Sort como ordenador auxiliar, teremos umordenador que não utiliza comparações:
RadixSort(n) ϵ ϴ(d*CountingSort(n))
RadixSort(n) ϵ ϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado peloCounting Sort.
Porém, neste contexto, k é o valor máximo de um dígito (ou bit oucaractere), tipicamente 10 valores possíveis (ou 2 ou 256). Assim,dentro do Radix Sort, tipicamente, k ϵ O(n):
RadixSort(n) ϵ ϴ(d*ϴ(n)), desta forma, se d ϵ O(1) (se pudermosconsiderar que d é uma constante) este ordenador será linear.
![Page 21: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/21.jpg)
Discussão:
Desejamos ordenar um conjunto de 220 números de 64 bits. Qualalgoritmo apresentaria um melhor desempenho: Merge Sort ou RadixSort?
![Page 22: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/22.jpg)
Discussão:
Desejamos ordenar um conjunto de 220 números de 64 bits. Qualalgoritmo apresentaria um melhor desempenho: Merge Sort ou RadixSort?
Vamos considerar que o Merge Sort fará n*log n operações e que oRadix Sort fará d*n operações.
![Page 23: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/23.jpg)
Discussão:
Desejamos ordenar um conjunto de 220 números de 64 bits. Qualalgoritmo apresentaria um melhor desempenho: Merge Sort ou RadixSort?
Vamos considerar que o Merge Sort fará n*log n operações e que oRadix Sort fará d*n operações.
Merge Sort: 220 * log 220 = 20*220 = 20.971.520 operações
Radix Sort: 64*220 = 67.108.864 operações
![Page 24: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/24.jpg)
Discussão:
Quando essa conta empataria?
![Page 25: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/25.jpg)
Discussão:
Quando essa conta empataria?
Empataria se quisemos ordenar um conjunto de 264 números de 64bits.
![Page 26: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/26.jpg)
Discussão:
Quando essa conta empataria?
Empataria se quisemos ordenar um conjunto de 264 números de 64bits.
Seriam 18.446.744.073.709.600.000 números, isto é: 18,4 exa números(18.446 peta números) de 64 bits.
![Page 27: Apresentação do PowerPoint · 2020. 4. 13. · RadixSort(n) ϵϴ(d*ϴ(n+k)), sendo k o maior valor a ser ordenado pelo Counting Sort. Porém, neste contexto, k é o valor máximo](https://reader033.vdocuments.net/reader033/viewer/2022052005/60184cdc9e46d932a66708ed/html5/thumbnails/27.jpg)
Discussão:
Quando essa conta empataria?
Empataria se quisemos ordenar um conjunto de 264 números de 64bits.
Seriam 18.446.744.073.709.600.000 números, isto é: 18,4 exa números(18.446 peta números) de 64 bits.
Precisaríamos de 14.757 peta bytes de memória principal só paratermos o arranjo original na memória.