VinBR

AEDs III 22/06/2011

Mar 6th, 2012
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. Intercalação polifásica.
  2. Normalmente teriamos de usar o dobro de número de fitas que o número de caracteres que possuimos na nossa memória. ou seja f=2m
  3. há a possibilidade de economizarmos fitas e colocarmos f=m+1 o que é prático.
  4.  
  5. O macete é o seguinte:
  6. voce coloca os blocos distribuidos de maneira desigual:
  7.  
  8. f1: bloco1 bloco2 bloco3
  9. f2: bloco4 bloco5 bloco6
  10. f3: bloco7
  11. f4:
  12.  
  13. No caso escrevemos a saida dos primeiros blocos em f4 e temos então:
  14.  
  15. f1: bloco2 bloco3
  16. f2: bloco5 bloco6
  17. f3:
  18. f4: bloco1bloco4bloco7
  19.  
  20. Na vez seguinte nós intercalamos os primeiros blocos das fitas 1 2 4 e escrevemos na fita 3.
  21.  
  22. f1: bloco3
  23. f2: bloco6
  24. f3: bloco2bloco5bloco1bloco4bloco7
  25. f4:
  26.  
  27. Por fim podemos intercalar os 3 ultimos blocos em uma das fitas livres.
  28.  
  29. Perceba que essa desigualdade de tamanho de bloco traz uma desvantagem porque voce perde parte do paralelismo de leitura, mas nem sempre.
  30.  
  31. Sendo portando o número de fitas limitado a 2m, voce deve sempre usar a Intercalação balanceada se voce possuir 2m fitas disponiveis, pois é mais eficiente.
  32. Mas caso voce não tenha 2m fitas sobrando considere o uso da intercalação polifásica.
  33.  
  34. CONCEITO:
  35. Quicksort Externo é um quicksort que minimiza o número de acessos a memória.
  36.  
  37. É um algoritomo insort e portanto não precisa de mais de uma memória primária. m=O(log n), m>3)
  38.  
  39. Porém sua memória deve ser de acesso randomico.
  40.  
  41. Como funciona?
  42.  
  43. Considere o vetor na memoria V={5 3 10 6 1 7 4} e uma memória com espaço suficiente M inicialmente igual à {vazio}
  44. Leia-se alternadamente o elemento mais a direita do vetor e mais a esquerda e vai preenchendo sua memória e os ordenando ao mesmo tempo.
  45. sendo m=3 leia 3 números e deixe:
  46. M = {4 5 7};
  47. // Pense nesse vetor como o nosso pivo. Tudo que for menor que isso vai para a esquerda dele tudo que for maior vai para a direita.
  48. Após ler m números, voce lê o próximo se ele for menor do que o menor número do vetor em memória voce o escreve na primeira posição de V
  49. Temos então ao ler 3:
  50. V={3 3 10 6 1 7 4}
  51. M={4 5 7}
  52. lendo 1 temos:
  53. V={3 1 10 6 1 7 4}
  54. M={4 5 7}
  55. lendo 10 temos:
  56. V={3 1 10 6 1 7 10}
  57. M={4 5 7}
  58. lendo 6 temos um novo caso em que o número esta entre o máximo e mínimo.
  59. Nesse caso escreva em V o máximo ou o mínimo e guarde esse novo valor em M, e reordene M
  60. então temos:
  61. V={3 1 10 6 1 7 10} // Escrevi 7 sobre o 7 por isso não aparenta ter mudado nada.
  62. M={4 5 6}
  63.  
  64. Após isso não há mais números à se ler, escreva M no espaço de V que ainda não foi escrito.
  65. Então temos:
  66.  
  67. V={3 1 4 5 6 7 10}
  68. M={4 5 6}
  69.  
  70. E este foi um passo recursivo do quicksort.
  71. Agora voce tem 3 partições: {3 1}{4 5 6}{7 10}
  72.  
  73. Repita o processo recursivamente para a partição mais a esquerda e para a mais a direita.
  74. Quando houver apenas um número por partição ou não houver nova partição o Vetor estará ordenado.
Advertisement
Add Comment
Please, Sign In to add comment