1*c3423655Schristos1. Compression algorithm (deflate) 2*c3423655Schristos 3*c3423655SchristosThe deflation algorithm used by gzip (also zip and zlib) is a variation of 4*c3423655SchristosLZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in 5*c3423655Schristosthe input data. The second occurrence of a string is replaced by a 6*c3423655Schristospointer to the previous string, in the form of a pair (distance, 7*c3423655Schristoslength). Distances are limited to 32K bytes, and lengths are limited 8*c3423655Schristosto 258 bytes. When a string does not occur anywhere in the previous 9*c3423655Schristos32K bytes, it is emitted as a sequence of literal bytes. (In this 10*c3423655Schristosdescription, `string' must be taken as an arbitrary sequence of bytes, 11*c3423655Schristosand is not restricted to printable characters.) 12*c3423655Schristos 13*c3423655SchristosLiterals or match lengths are compressed with one Huffman tree, and 14*c3423655Schristosmatch distances are compressed with another tree. The trees are stored 15*c3423655Schristosin a compact form at the start of each block. The blocks can have any 16*c3423655Schristossize (except that the compressed data for one block must fit in 17*c3423655Schristosavailable memory). A block is terminated when deflate() determines that 18*c3423655Schristosit would be useful to start another block with fresh trees. (This is 19*c3423655Schristossomewhat similar to the behavior of LZW-based _compress_.) 20*c3423655Schristos 21*c3423655SchristosDuplicated strings are found using a hash table. All input strings of 22*c3423655Schristoslength 3 are inserted in the hash table. A hash index is computed for 23*c3423655Schristosthe next 3 bytes. If the hash chain for this index is not empty, all 24*c3423655Schristosstrings in the chain are compared with the current input string, and 25*c3423655Schristosthe longest match is selected. 26*c3423655Schristos 27*c3423655SchristosThe hash chains are searched starting with the most recent strings, to 28*c3423655Schristosfavor small distances and thus take advantage of the Huffman encoding. 29*c3423655SchristosThe hash chains are singly linked. There are no deletions from the 30*c3423655Schristoshash chains, the algorithm simply discards matches that are too old. 31*c3423655Schristos 32*c3423655SchristosTo avoid a worst-case situation, very long hash chains are arbitrarily 33*c3423655Schristostruncated at a certain length, determined by a runtime option (level 34*c3423655Schristosparameter of deflateInit). So deflate() does not always find the longest 35*c3423655Schristospossible match but generally finds a match which is long enough. 36*c3423655Schristos 37*c3423655Schristosdeflate() also defers the selection of matches with a lazy evaluation 38*c3423655Schristosmechanism. After a match of length N has been found, deflate() searches for 39*c3423655Schristosa longer match at the next input byte. If a longer match is found, the 40*c3423655Schristosprevious match is truncated to a length of one (thus producing a single 41*c3423655Schristosliteral byte) and the process of lazy evaluation begins again. Otherwise, 42*c3423655Schristosthe original match is kept, and the next match search is attempted only N 43*c3423655Schristossteps later. 44*c3423655Schristos 45*c3423655SchristosThe lazy match evaluation is also subject to a runtime parameter. If 46*c3423655Schristosthe current match is long enough, deflate() reduces the search for a longer 47*c3423655Schristosmatch, thus speeding up the whole process. If compression ratio is more 48*c3423655Schristosimportant than speed, deflate() attempts a complete second search even if 49*c3423655Schristosthe first match is already long enough. 50*c3423655Schristos 51*c3423655SchristosThe lazy match evaluation is not performed for the fastest compression 52*c3423655Schristosmodes (level parameter 1 to 3). For these fast modes, new strings 53*c3423655Schristosare inserted in the hash table only when no match was found, or 54*c3423655Schristoswhen the match is not too long. This degrades the compression ratio 55*c3423655Schristosbut saves time since there are both fewer insertions and fewer searches. 56*c3423655Schristos 57*c3423655Schristos 58*c3423655Schristos2. Decompression algorithm (inflate) 59*c3423655Schristos 60*c3423655Schristos2.1 Introduction 61*c3423655Schristos 62*c3423655SchristosThe key question is how to represent a Huffman code (or any prefix code) so 63*c3423655Schristosthat you can decode fast. The most important characteristic is that shorter 64*c3423655Schristoscodes are much more common than longer codes, so pay attention to decoding the 65*c3423655Schristosshort codes fast, and let the long codes take longer to decode. 66*c3423655Schristos 67*c3423655Schristosinflate() sets up a first level table that covers some number of bits of 68*c3423655Schristosinput less than the length of longest code. It gets that many bits from the 69*c3423655Schristosstream, and looks it up in the table. The table will tell if the next 70*c3423655Schristoscode is that many bits or less and how many, and if it is, it will tell 71*c3423655Schristosthe value, else it will point to the next level table for which inflate() 72*c3423655Schristosgrabs more bits and tries to decode a longer code. 73*c3423655Schristos 74*c3423655SchristosHow many bits to make the first lookup is a tradeoff between the time it 75*c3423655Schristostakes to decode and the time it takes to build the table. If building the 76*c3423655Schristostable took no time (and if you had infinite memory), then there would only 77*c3423655Schristosbe a first level table to cover all the way to the longest code. However, 78*c3423655Schristosbuilding the table ends up taking a lot longer for more bits since short 79*c3423655Schristoscodes are replicated many times in such a table. What inflate() does is 80*c3423655Schristossimply to make the number of bits in the first table a variable, and then 81*c3423655Schristosto set that variable for the maximum speed. 82*c3423655Schristos 83*c3423655SchristosFor inflate, which has 286 possible codes for the literal/length tree, the size 84*c3423655Schristosof the first table is nine bits. Also the distance trees have 30 possible 85*c3423655Schristosvalues, and the size of the first table is six bits. Note that for each of 86*c3423655Schristosthose cases, the table ended up one bit longer than the ``average'' code 87*c3423655Schristoslength, i.e. the code length of an approximately flat code which would be a 88*c3423655Schristoslittle more than eight bits for 286 symbols and a little less than five bits 89*c3423655Schristosfor 30 symbols. 90*c3423655Schristos 91*c3423655Schristos 92*c3423655Schristos2.2 More details on the inflate table lookup 93*c3423655Schristos 94*c3423655SchristosOk, you want to know what this cleverly obfuscated inflate tree actually 95*c3423655Schristoslooks like. You are correct that it's not a Huffman tree. It is simply a 96*c3423655Schristoslookup table for the first, let's say, nine bits of a Huffman symbol. The 97*c3423655Schristossymbol could be as short as one bit or as long as 15 bits. If a particular 98*c3423655Schristossymbol is shorter than nine bits, then that symbol's translation is duplicated 99*c3423655Schristosin all those entries that start with that symbol's bits. For example, if the 100*c3423655Schristossymbol is four bits, then it's duplicated 32 times in a nine-bit table. If a 101*c3423655Schristossymbol is nine bits long, it appears in the table once. 102*c3423655Schristos 103*c3423655SchristosIf the symbol is longer than nine bits, then that entry in the table points 104*c3423655Schristosto another similar table for the remaining bits. Again, there are duplicated 105*c3423655Schristosentries as needed. The idea is that most of the time the symbol will be short 106*c3423655Schristosand there will only be one table look up. (That's whole idea behind data 107*c3423655Schristoscompression in the first place.) For the less frequent long symbols, there 108*c3423655Schristoswill be two lookups. If you had a compression method with really long 109*c3423655Schristossymbols, you could have as many levels of lookups as is efficient. For 110*c3423655Schristosinflate, two is enough. 111*c3423655Schristos 112*c3423655SchristosSo a table entry either points to another table (in which case nine bits in 113*c3423655Schristosthe above example are gobbled), or it contains the translation for the symbol 114*c3423655Schristosand the number of bits to gobble. Then you start again with the next 115*c3423655Schristosungobbled bit. 116*c3423655Schristos 117*c3423655SchristosYou may wonder: why not just have one lookup table for how ever many bits the 118*c3423655Schristoslongest symbol is? The reason is that if you do that, you end up spending 119*c3423655Schristosmore time filling in duplicate symbol entries than you do actually decoding. 120*c3423655SchristosAt least for deflate's output that generates new trees every several 10's of 121*c3423655Schristoskbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code 122*c3423655Schristoswould take too long if you're only decoding several thousand symbols. At the 123*c3423655Schristosother extreme, you could make a new table for every bit in the code. In fact, 124*c3423655Schristosthat's essentially a Huffman tree. But then you spend too much time 125*c3423655Schristostraversing the tree while decoding, even for short symbols. 126*c3423655Schristos 127*c3423655SchristosSo the number of bits for the first lookup table is a trade of the time to 128*c3423655Schristosfill out the table vs. the time spent looking at the second level and above of 129*c3423655Schristosthe table. 130*c3423655Schristos 131*c3423655SchristosHere is an example, scaled down: 132*c3423655Schristos 133*c3423655SchristosThe code being decoded, with 10 symbols, from 1 to 6 bits long: 134*c3423655Schristos 135*c3423655SchristosA: 0 136*c3423655SchristosB: 10 137*c3423655SchristosC: 1100 138*c3423655SchristosD: 11010 139*c3423655SchristosE: 11011 140*c3423655SchristosF: 11100 141*c3423655SchristosG: 11101 142*c3423655SchristosH: 11110 143*c3423655SchristosI: 111110 144*c3423655SchristosJ: 111111 145*c3423655Schristos 146*c3423655SchristosLet's make the first table three bits long (eight entries): 147*c3423655Schristos 148*c3423655Schristos000: A,1 149*c3423655Schristos001: A,1 150*c3423655Schristos010: A,1 151*c3423655Schristos011: A,1 152*c3423655Schristos100: B,2 153*c3423655Schristos101: B,2 154*c3423655Schristos110: -> table X (gobble 3 bits) 155*c3423655Schristos111: -> table Y (gobble 3 bits) 156*c3423655Schristos 157*c3423655SchristosEach entry is what the bits decode as and how many bits that is, i.e. how 158*c3423655Schristosmany bits to gobble. Or the entry points to another table, with the number of 159*c3423655Schristosbits to gobble implicit in the size of the table. 160*c3423655Schristos 161*c3423655SchristosTable X is two bits long since the longest code starting with 110 is five bits 162*c3423655Schristoslong: 163*c3423655Schristos 164*c3423655Schristos00: C,1 165*c3423655Schristos01: C,1 166*c3423655Schristos10: D,2 167*c3423655Schristos11: E,2 168*c3423655Schristos 169*c3423655SchristosTable Y is three bits long since the longest code starting with 111 is six 170*c3423655Schristosbits long: 171*c3423655Schristos 172*c3423655Schristos000: F,2 173*c3423655Schristos001: F,2 174*c3423655Schristos010: G,2 175*c3423655Schristos011: G,2 176*c3423655Schristos100: H,2 177*c3423655Schristos101: H,2 178*c3423655Schristos110: I,3 179*c3423655Schristos111: J,3 180*c3423655Schristos 181*c3423655SchristosSo what we have here are three tables with a total of 20 entries that had to 182*c3423655Schristosbe constructed. That's compared to 64 entries for a single table. Or 183*c3423655Schristoscompared to 16 entries for a Huffman tree (six two entry tables and one four 184*c3423655Schristosentry table). Assuming that the code ideally represents the probability of 185*c3423655Schristosthe symbols, it takes on the average 1.25 lookups per symbol. That's compared 186*c3423655Schristosto one lookup for the single table, or 1.66 lookups per symbol for the 187*c3423655SchristosHuffman tree. 188*c3423655Schristos 189*c3423655SchristosThere, I think that gives you a picture of what's going on. For inflate, the 190*c3423655Schristosmeaning of a particular symbol is often more than just a letter. It can be a 191*c3423655Schristosbyte (a "literal"), or it can be either a length or a distance which 192*c3423655Schristosindicates a base value and a number of bits to fetch after the code that is 193*c3423655Schristosadded to the base value. Or it might be the special end-of-block code. The 194*c3423655Schristosdata structures created in inftrees.c try to encode all that information 195*c3423655Schristoscompactly in the tables. 196*c3423655Schristos 197*c3423655Schristos 198*c3423655SchristosJean-loup Gailly Mark Adler 199*c3423655Schristosjloup@gzip.org madler@alumni.caltech.edu 200*c3423655Schristos 201*c3423655Schristos 202*c3423655SchristosReferences: 203*c3423655Schristos 204*c3423655Schristos[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data 205*c3423655SchristosCompression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, 206*c3423655Schristospp. 337-343. 207*c3423655Schristos 208*c3423655Schristos``DEFLATE Compressed Data Format Specification'' available in 209*c3423655Schristoshttp://tools.ietf.org/html/rfc1951 210