[RESOLVIDO] Algoritmo de Compressao LZW

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

Olá

Não posso responder corretamente agora pois isto me exigiria consultar coisas muito antigas ou procurar meus livros do Mark Nelson e agora preciso me preparar para ir no Falando em Agile mas sem examinar muito o que você fez vou dizer algo que me lembro de cabeça:

O método LZW, na verdade é um método LZ criado por Abraham Lempel e Jacob Ziv com uma ajeitada final criada pelo Terry Welch. Lembro que a gente construia o dicionário segundo LZ e depois dava uma modificada nos bits que foi a contribuição do Welch que na época trabalhava na Unisys e esta não deixava que se usasse o artifício pois julgava como patente sua. Esta era a encrenca com as figuras com formato GIF.

Do google para os curiosos:

LZ

W

[color=red]Achei também no google o artigo do Mark Nelson na DDJ que explica o LZW e que eu usei na época: [/color]

Boa sorte mas se quiser usar o LZW sem escovar bits, a API do Java já tem classes prontas e aqui no GUJ temos o ótimo artigo do Daniel Destro em http://www.guj.com.br/java.tutorial.artigo.181.1.guj

[]s
Luca

VLW.

No livro do ZIVIANNI encontrei o que queria.

[quote=gpd38]VLW.

No livro do ZIVIANNI encontrei o que queria.[/quote]
Encontrou 5 anos depois? Ou voltou aqui só pra dar uma resposta ao tópico?