LZW decompression algorithm

后端 未结 2 645
我寻月下人不归
我寻月下人不归 2021-02-10 21:15

I\'m writing a program for an assignment which has to implement LZW compression/decompression. I\'m using the following algorithms for this:

-compression



        
2条回答
  •  南笙
    南笙 (楼主)
    2021-02-10 22:22

    Your compression part is right and complete but the decompression part is not complete. You only include the case when the code is in the dictionary. Since the decompression process is always one step behind the compression process, there is the possibility when the decoder find a code which is not in the dictionary. But since it's only one step behind, it can figure out what the encoding process will add next and correctly output the decoded string, then add it to the dictionary. To continue your decompression process like this:

    -decompression

    read a character k;
       output k;
       w = k;
       while ( read a character k )    
      /* k could be a character or a code. */
            {
             if k exists in the dictionary
             entry = dictionary entry for k;
             output entry;
             add w + entry[0] to dictionary;
             w = entry;
             else
             output entry = w + firstCharacterOf(w);
             add entry to dictionary;
             w = entry;
            }
    

    Then when you come to decompress the file and see 257, you find it's not there in the dictionary. But you know the previous entry is 'o' and it's first character is 'o' too, put them together, you get "oo". Now output oo and add it to dictionary. Next you get code 112 and sure you know it's p. DONE!

    w       k          entry        output       Dictionary
            98 (b)                  b   
    b       111 (o)    o            o             bo (256)
    o       257 (oo)                oo            oo(257)
    oo      112(p)                  p
    

    See: this explanation by Steve Blackstock for more information. A better page with flow chart for the actual decoder and encoder implementation on which the "icafe" Java image library GIF encoder and decoder are based.

提交回复
热议问题