[EP11] Leitura de dados e MoveToFront

[EP11] Leitura de dados e MoveToFront

por José Coelho de Pina -
Número de respostas: 0

Salve, Aqui vão uns comentários que podem ajudar com o EP11.


Leitura de dados

  1. o main() da classe MoveToFront é idêntica ao main() da classe Huffman. Veja o programa Huffman.java na página do algs4 ou do PF

  2. a leitura do o string da entrada padrão do encode() da classe MoveToFront pode ser feita de manaira indêntica ao método compress() da classe Huffman. Para testar, leia o string e guarde e armazena a referência para o string em uma variável s e depois faça

       BinaryStdOut.write(s);

    ou

       for (int i = 0; i < s.length(); i++)
           BinaryStdOut.write(s.charAt(i));

    Faça apenas isso para verificar que se você está conseguindo ler da entrada padrão.

  3. A saída do encode() é um fluxo de bytes para a saída padrão. Assim, você pode usar

      BinaryStdOut.write(valor, 8);
  4. Para entender o que faz o método encode() de MoveToFront considere o arquivo aaaabaaa.txt criado da seguinte maneira.

       %  echo -n aaaabaaa > aaaabaaa.txt
       %  more aaaabaaa.txt 
       aaaabaaa
       % file aaaabaaa.txt 
       aaaabaaa.txt: ASCII text, with no line terminators
  5. Veja a saída de MoveToFront para esse arquivo.

       % java MoveToFront - < aaaabaaa.txt | java HexDump 8
       61 00 00 00 62 01 00 00
       64 bits
  • 0x61, 61 em hexa, 97 em decimal, é o código para 'a'
  • 0x62, 62 em hexa, 98 em decimal, é o código para 'b' Um caractere é um valor entre 0 e 255. Não há distinção entre o símbolo gráfico e o valor que o representa

       Welcome to DrJava.  Working directory is /home/coelho/Dropbox/mac0323/assignments/8puzze
       > 'a' == 97
       true
       > 'a' == 0x61
       true
       > 0x61
       97
       > 'b' == 98
       true
       > 'b' == 0x62
       true
       > 0x62
       98
       >
  1. No nosso caso, o tamanho do alfabeto é 256 (de 0 a 255) que corresponde a ASCII estendido. Inicialmente, MoveToFront tem um vetor digamos, codigo do tamanha do alfabeto tal que

       codigo[i] == i

    Assim, inicialmente codigo[0x61] == 'a' (0x61 == 97). Processamento do arquivo aaaabaaa.txt por encode()

Processamento do arquivo aaaabaaa.txt

Quando o primeiro caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 95 == 0x61`. Depois,'a'`` é movido para o ínício do vetor de código e o vetor passa a ser

   codigo[0] == 97 == 'a'
   codigo[1] == 0
   codigo[2] == 1
   [...]
   codigo[97] == 96 !!!
   codigo[98] == 98 == 'b' !!!
   codigo[99] == 99 == 'c'
   [...]
   codigo[255] = 255

Quando o segundo caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual

Quando o terceiro caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual

Quando o quarto caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual

Quando o caractere 'b' é lido o programa escreve para a saída padrão o índice da posição em que 'b' está, ou seja, 98 == 0x62 Depois, 'b' é movido para o ínício do vetor de codigo e o vetor passa a ser

   codigo[0] == 98 == 'b'
   codigo[1] == 97 == 'a'
   codigo[2] == 0
   codigo[3] == 1
   [...]
   codigo[97] == 95 
   codigo[98] == 96 !!!
   codigo[99] == 99 == 'c'!!!
   [...]
   codigo[255] == 255

Quando o próximo caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 1 == 0x01 Depois, 'a' é movido para o ínício do vetor de codigo e o vetor passa a ser

   codigo[0] == 97 == 'a'
   codigo[1] == 98 == 'b'
   codigo[2] == 0
   codigo[3] == 1
   [...]
   codigo[97] = 95 
   codigo[98] = 96 !!!
   codigo[99] = 99 == 'c'!!!
   [...]

Quando o proximo caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual

Quando o último caractere 'a' é lido o programa escreve para a saída padrão o índice da posição em que 'a' está, ou seja, 0 == 0x00 Depois, 'a' é movido para o ínício do vetor de código. No caso o vetor fica igual

Terminou o processamento de "aaaabaaa"

Veja a API para BinaryStdOut e BinaryStdIn em caso de dúvida.