Alguem me explique se possivel como poderia fazer esse algoritmo funcionar.
Olhei no google, wikipedia e outros sites e o que encontrei foi um pseudo-codigo(ate aqui beleza).
Site01: http://pt.wikipedia.org/wiki/LZW
Site02: http://www.cs.sfu.ca/CC/365/li/squeeze/LZW.html
Peguei este pseudo-codigo e implementei. Esta funcionando em parte pois existe um pequeno erro que nao consigo tratar.
É o seguinte.
O lzw funciona da seguinte maneira:
(minha interpretação)
Existe um dicionario de tamanho x onde nele sa existem os caracteres A…Z.mais o espaço(ascii-32)
[code]dicionario d = new dicionario[10000];
//…
//…
posicao[ 0 ] possui: A;
posicao[ 1 ] possui: B;
posicao[ 2 ] possui: C;
posicao[ 3 ] possui: D;
//…
//…
posicao[ 25 ] possui: Y;
posicao[ 26 ] possui: W;
posicao[ 27 ] possui: espaço;
[/code]
Leio de um arquivo o texto a ser comprimido.
String texto;
//ex: texto = "A CASA E AMARELA A CASA E BONITA A CASA TEM UM CARRO AZULADO";
Crio duas Strings que serao a minha concatenação para inserir no dicionario e uma outra para receber os caracteres
String concat = "";
String caracter = "";
Apos ter lido o texto o que faço?
1. No início o dicionário contém todas as raízes possíveis e I é vazio;
2. c <= próximo caractere da sequência de entrada;
3. A string I+c existe no dicionário?
a. se sim,
i. I <= I+c;
b. se não,
i. coloque a palavra código correspondente a I na sequência codificada;
ii. adicione a string I+c ao dicionário;
iii. I <= c;
4. Existem mais caracteres na sequência de entrada ?
a. se sim,
i. volte ao passo 2;
b. se não,
ii. coloque a palavra código correspondente a I na sequência codificada;
iii. FIM.
Neste ponto se eu pedir para mostrar o que foi guardado no vetor ou melhor no dicionario ele deve sair assim:
[code]/_ = ESPACO(REPRESENTAÇÃO)
posicao[ 28 ] possui: A_ sucesso pos: 1 - erro pos: 27
posicao[ 29 ] possui: CA sucesso pos: 2 - erro pos: 1
posicao[ 30 ] possui: SA sucesso pos: 19 - erro pos: 1
posicao[ 31 ] possui: _E sucesso pos: 27 - erro pos: 5
posicao[ 32 ] possui: _A sucesso pos: 27 - erro pos: 1
posicao[ 33 ] possui: MA sucesso pos: 13 - erro pos: 1
posicao[ 34 ] possui: RE sucesso pos: 18 - erro pos: 5
posicao[ 35 ] possui: LA sucesso pos: 12 - erro pos: 1
posicao[ 36 ] possui: A sucesso pos: 32 - erro pos: 27
posicao[ 37 ] possui: CAS sucesso pos: 29 - erro pos: 19
posicao[ 38 ] possui: A_E sucesso pos: 28 - erro pos: 5
posicao[ 39 ] possui: _B sucesso pos: 27 - erro pos: 2
posicao[ 40 ] possui: ON sucesso pos: 15 - erro pos: 13
posicao[ 41 ] possui: IT sucesso pos: 9 - erro pos: 20
posicao[ 42 ] possui: A_A sucesso pos: 28 - erro pos: 1
posicao[ 43 ] possui: _C sucesso pos: 27 - erro pos: 3
posicao[ 44 ] possui: AS sucesso pos: 1 - erro pos: 19
posicao[ 45 ] possui: A_T sucesso pos: 28 - erro pos: 20
posicao[ 46 ] possui: EM sucesso pos: 5 - erro pos: 13
posicao[ 47 ] possui: U sucesso pos: 27 - erro pos: 21
posicao[ 48 ] possui: M sucesso pos: 13 - erro pos: 27
posicao[ 49 ] possui: CAR sucesso pos: 29 - erro pos: 18
posicao[ 50 ] possui: RO sucesso pos: 18 - erro pos: 15
posicao[ 51 ] possui: _AZ sucesso pos: 32 - erro pos: 25
posicao[ 52 ] possui: UL sucesso pos: 21 - erro pos: 12
posicao[ 53 ] possui: AD sucesso pos: 1 - erro pos: 4
posicao[ 54 ] possui: (-------)AQUI ESTA O PROBLEMA O CARACTER ‘O’ NAO É GRAVADO POIS JA EXISTE E O TEXTO TBM ACABOU
[/code]
Como eu consigo resolver este problema, pois as vezes nao sobra um caracter e sim varios