Newsgroups: comp.compression
Path: utzoo!utgpu!watserv1!watmath!looking!brad
From: brad@looking.on.ca (Brad Templeton)
Subject: Re: Is there better lossless compression than LZW?
Organization: Looking Glass Software Ltd.
Date: Sun, 02 Jun 91 21:31:16 GMT
Message-ID: <1991Jun02.213116.3069@looking.on.ca>
References: <1991May29.155853.13716@looking.on.ca> <1991Jun2.085929.12871@unislc.uucp>

I investigated such ideas and I think there are a few problems.

First of all, to avoid confusion of terms, LZ compressions refers to two
algorithms.   One is a general algorithm where you have backpointers into
the previous text.  The whole of the previous text (or the last N bytes)
is your dictionary, so there is not a question of "adapting faster" in
such an algorithm.   THe laster LZ algorithm, and its descendants, such
as LZW (a variant designed for speed) M-W and All-Prefix coding do have
"how fast they adapt" as an important factor.

Your algorithm is similar to LZ1, but instead of backpointers you use
tags.   Tag a string when it goes out, and then refer to it when you need to.
Problem is that tag+referral can be larger than just a backpointer referral.
How long are the end-token and start-token codes?   Just as important, since
they exist in the same token-space as regular entries in the alphabet, how
much longer do they make all the other codes.
(ie. if you use 1 bit for a tag code, you add 1 bit to all the regular
tokens in the alphabet)

It's tricky.  I'm not saying it's impossible, but I would like to see more
evidence that it can be done.

Remember as well that you have to deal with the fact that a new entry can
often consists of the tail of one reference and the head of another reference.

ie. if you have two dictionary entries "the boy " and "who fell" how do you
tag the string "boy who" if it first appears in the transmission of the
two entries together?   How do you do this without using space?
-- 
Brad Templeton, ClariNet Communications Corp. -- Waterloo, Ontario 519/884-7473
