Weighting Techniques in Data Compression: Theory and Algorithms
Total Page:16
File Type:pdf, Size:1020Kb
Weighting Techniques in Data Compression: Theory and Algorithms PROEFONTWERP ter verkrijging van de graad van doctor aan de Technische Universiteit Eindhoven, op gezag van de Rector Magnificus, prof.dr. R.A. van Santen, voor een commissie aangewezen door het College voor Promoties in het openbaar te verdedigen op vrijdag 13 december 2002 om 16.00 uur door Paulus Adrianus Jozef Volf geboren te Eindhoven De documentatie van het proefontwerp is goedgekeurd door de promotoren: prof.ir. M.P.J. Stevens en prof.dr.ir. J.P.M. Schalkwijk Copromotor: dr.ir. F.M.J. Willems CIP-DATA LIBRARY TECHNISCHE UNIVERSITEIT EINDHOVEN Volf, Paulus A.J. Weigthing techniques in data compression : theory and algorithms / by Paulus A.J. Volf. – Eindhoven : Technische Universiteit Eindhoven, 2002. Proefontwerp. – ISBN 90-386-1980-4 NUR 965 Trefw.: datacompressie / informatietheorie / coderingstheorie. Subject headings: data compression / source coding / trees mathematics / information theory. SUMMARY HIS thesis is concerned with text compression. Text compression is a technique used on Tcomputer systems to compress data, such that the data occupies less storage space, or can be transmitted in shorter time. The compressor has to compact the data in such a way that a decompressor can restore the compacted data to its original form, without any distortion. The algorithms discussed in this thesis process the data sequence symbol by symbol. The underlying idea of these algorithms is that the few symbols preceding the new symbol in the data sequence, called the context of that symbol, predict its probability distribution. Therefore, while processing the data sequence these algorithms collect statistics on how often a symbol follows a certain context, for different context lengths. These statistics are stored in a special data structure, the context tree. From the statistical information in the context tree the compression algorithms estimate the probability distribution of the new symbol in the data sequence for different context lengths. Since the estimates of the probability distribution for the different context lengths will differ, these estimates have to be combined into a single estimate. The main difference between the compression algorithms is in how they combine these different estimates. The project has been set-up around the context-tree weighting (CTW) algorithm, a recently developed data compression algorithm that efficiently weights over different context lengths. The goal is to position this algorithm as a viable solution in the data compression world, next to well-known algorithms like Lempel-Ziv and the PPM-family. Therefore, the final design should be a data compression program based on CTW, that proves its applicability on a regular PC. This leads to a set of requirements for its performance, its speed and its memory usage. The design process has led to two design proposals. The first proposed design consists of three components: an implementation of an arithmetic coder, a CTW implementation, and a forward decomposition. The arithmetic coder translates the estimated probability distributions for the data symbols into a code word. This design uses a straightforward implementation of the Witten-Neal-Cleary arithmetic coder. The CTW implementation is the modelling algorithm that estimates the probability distribution of the new symbol, based on its context, and on the data seen so far. This implementation is a refinement of a previous implementation. For the new implementation, both the computational work, and the data structures and search algorithms have been examined and redesigned. Furthermore, different pruning algorithms for the context trees have been investigated and evaluated. Finally, the parameters have been fine-tuned. The forward decomposition is a completely new component. It analyses the data in a first pass, and it converts the data symbols to bits by means of a decomposition, based on the Huffman code. The decomposition reduces the length of frequent symbols, while it tries to preserve the structure of iii iv SUMMARY the original alphabet. This reduces the average number of updates of the context trees. The first complete design has been evaluated in terms of the requirements. It meets these requirements, but the performance requirement is only met in a “weak” way, i.e. only the average performance of the design, measured over a standard set of test files, is better than the performance of its competitors. The goal of the second proposed design is to improve the performance such that it is compet- itive on every individual file of the standard set of test files. A new idea is proposed to achieve this: let two different modelling algorithms process the data sequence in parallel, while for each symbol a third algorithm will try to switch to the modelling algorithm that performs locally best. This idea is implemented in the second proposed design by adding two components, the snake algorithm and the companion algorithm, to the first design. The companion algorithm is the second modelling algorithm, that runs in parallel to CTW. It is based on PPMA, and it has been specifically designed to be complementary to CTW. This algorithm has been simplified, without losing its desired modelling behaviour, and it has been modified, such that it can use the same data structures as CTW. The snake algorithm is a weighting technique that for every symbol com- bines the two estimated probability distributions that it receives from CTW and the companion algorithm. The snake algorithm is a derivative of the more complex switching algorithm. Both algorithms have been developed for this project. They are analysed and implemented here for the first time. The complete second proposed design has been evaluated. It meets the strict definition of the performance requirement, it is one of the best data compression programs to date, at the cost of a lower speed and a higher memory usage. By offering the user a choice between both design solutions, the project has been completed successfully. The most important contribution of this work is the idea of switching between two modelling algorithms. One way to improve a data compression algorithm is by trying to find efficient mod- elling techniques for different (often larger) classes of sources. This work presents an alternative. Switching proves to be an efficient method to design a system that benefits from the strengths of both modelling algorithms, without going through the effort to capture them into a single, more complex, modelling algorithm. SAMENVATTING ET onderwerp van dit proefschrift is tekstcompresssie. Tekstcompressie is een techniek die Hop computersystemen wordt toegepast om data te comprimeren, zodat de data minder plaats in beslag nemen, of zodat deze in kortere tijd verzonden kunnen worden. De compressor moet de data wel zodanig samenpakken dat een decompressor nog in staat is de samengepakte data weer in hun oorspronkelijke vorm te herstellen, zonder dat daarbij enige mate van vervorming optreedt. De compressie-algoritmes die in dit proefschrift besproken worden verwerken de datarij sym- bool voor symbool. De achterliggende gedachte bij deze algoritmes is dat het groepje symbolen dat aan het nieuwe symbool in de datarij voorafgaat, dit noemen we de context van het nieuwe symbool, zijn kansverdeling bepaalt. Daarom bouwen deze algoritmes tijdens het verwerken van de datarij statistieken op over hoe vaak een symbool op een bepaalde context volgt, en dit voor verschillende lengtes van de context. Deze statistieken worden opgeslagen in een speciale datastructuur, de context-boom. Aan de hand van de statistische informatie in de context-boom schatten de compressie-algoritmes de kansverdeling van het nieuwe symbool in de datarij, voor verschillende lengtes van de context. Aangezien de verschillende context-lengtes zullen resul- teren in verschillende schattingen voor deze kansverdeling, moeten deze schattingen nog gecom- bineerd worden. De wijze waarop het compressie-algoritme de verschillende schattingen samen- voegt, verschilt per algoritme, en is een van de belangrijkste kenmerken van zo’n algoritme. Het project is opgezet rond het context-boom weeg (CTW) algoritme, een recent ontwikkeld datacompressie algoritme dat op een effici¨ente manier over de verschillende context-lengtes weegt. Het doel is om aan te tonen dat dit algoritme net zo bruikbaar is in praktische toepas- singen als bewezen algoritmes zoals Lempel-Ziv en de PPM-familie. Daarom moet het uitein- delijke ontwerp een datacompressieprogramma worden dat gebaseerd is op het CTW algoritme, en dat op een gewone PC uitgevoerd kan worden. Om dit te realiseren zijn er eisen aan het ontwerp gesteld op het gebied van de compressieratio, snelheid en geheugengebruik. Het ontwerpproces heeft uiteindelijk tot twee ontwerpvoorstellen geleid. Het eerste voor- gestelde ontwerp bestaat uit drie componenten: een implementatie van een aritmetische coder, een CTW implementatie, en een voorwaartse decompositie. De aritmetische encoder vertaalt de geschatte kansverdeling van de datasymbolen in een codewoord. Het ontwerp gebruikt een eenvoudige implementatie van de Witten-Neal-Cleary aritmetische coder. Het CTW algoritme is het eigenlijke modelleringsalgoritme dat de kansverdeling van het nieuwe datasymbool schat, gebaseerd op zijn context en de datarij tot nu toe. De hier gebruikte implementatie is een verbe- tering van eerdere implementaties. Voor de nieuwe implementatie zijn zowel het rekenwerk, als v vi SAMENVATTING de datastructuren en de daarbij behorende zoekalgoritmes