VinBR

AEDs III 20/06/2011

Mar 6th, 2012
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. CONCEITO:
  2. Intercalação Balanceada
  3. É um metodo de ordenação que considera um disco em forma de fitas, e uma memória com espaço de armazenamento N.
  4.  
  5. A ideia é a seguinte, voce carrega N letras do vetor e ordene-as da forma que preferir.
  6. Então guarde-as em uma fita 1%N, repita o processo com N letras seguintes e armazene na fita 2%N, e assim por diante armazenando na fita i%N as N ultimas letras lidas
  7. já ordenadas.
  8.  
  9. dessa forma considerando memória de tamanho 3 e a palavra intercalacaobalanceada
  10. teremos as seguintes fitas:
  11.  
  12. 1: int aco ade
  13. 2: cer abl a
  14. 3: aal acn
  15.  
  16. Repare agora que a cada 3 letras escritas nas fitas já estão parcialmente ordenadas.
  17. Se eu escolher sempre entre as menores letras das fitas a menor delas e ir escrevendo em outra quarta fita, terei um vetor com 9 letras ordenadas.
  18. repito isso para o segundo bloco de N letras nas 3 fitas, ou seja, intercalo de maneira ordeanda as substrings: aco, abl e acn,
  19. e por fim faço o mesmo com o ultimo bloco.
  20.  
  21. terei então nas fitas 4, 5 e 6 o seguinte:
  22. 1: aaceilnrt
  23. 2: aaabcclno
  24. 3: aade
  25.  
  26. // Note que tenho 1 único bloco de caracteres por fita, cada bloco contendo até 9 caracteres.
  27. // Se houvessem mais letras poderia ter mais blocos de 9 caracteres.
  28.  
  29. Por fim posso agora repetir o processo de intercalação porem dessa vez cada uma das fitas 4 5 e 6 possuem um único bloco.
  30. Vou gravar essa intercalação ordenada na fita 1 cujos dados eu já li. e terei portanto:
  31. // Note que estou escrevendo na fita 1 mas na verdade é na fita 1%N, porque se houvessem mais blocos de tamanho 9 eu faria 2%N, 3%N, etc..
  32.  
  33. 1: aaaaaaabcccdeetllnnort
  34.  
  35. E assim consegui meu vetor ordenado utilizando poucas leituras e escritas nas fitas.
  36.  
  37. Uma otimização desse sistema é utilizar um heap para ordenar os elementos na memória, e vai retirando o menor deles a cada vez.
  38. Se voce recebe uma letra que é menor do que as letras que voce já escreveu na fita, então voce diz que ela pertence ao próximo bloco.
  39. Repare que isso não garante que todos os blocos terão o mesmo tamanho, mas isso otimiza o processo.
  40.  
  41. O resto do processo é analogo, porem em nenhum momento vai haver garantia de blocos com o mesmo tamanho.
  42.  
  43. Nota Importante: Repare que quando voce carregar uma letra que pertença ao próximo bloco de acordo com o critério que expliquei acima, ainda existem letras
  44. que pertencem ao bloco anterior, termine de escreve-las no bloco anterior antes de pular para o próximo bloco.
  45. Outra coisa é que depois de carregar uma letra para o próximo bloco voce ainda pode carregar letras para o bloco atual.
  46. e só pula para a próxima fita uma vez que não houverem mais letras pertencentes ao bloco atual.
  47.  
  48. // isso ficou confuso vou re-escrever
  49.  
  50. // Essa aula eu não peguei totalmente, pode ser útil re-estudar isso separadamente.
  51. // acho que ao menos o importante deu pra entender. a ideia é ordenar por partes, e realiza intercalaçoes para aproveitar o que já foi ordenado.
Advertisement
Add Comment
Please, Sign In to add comment