1*4e00368fSchristos1. Compression algorithm (deflate) 2*4e00368fSchristos 3*4e00368fSchristosThe deflation algorithm used by gzip (also zip and zlib) is a variation of 4*4e00368fSchristosLZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in 5*4e00368fSchristosthe input data. The second occurrence of a string is replaced by a 6*4e00368fSchristospointer to the previous string, in the form of a pair (distance, 7*4e00368fSchristoslength). Distances are limited to 32K bytes, and lengths are limited 8*4e00368fSchristosto 258 bytes. When a string does not occur anywhere in the previous 9*4e00368fSchristos32K bytes, it is emitted as a sequence of literal bytes. (In this 10*4e00368fSchristosdescription, `string' must be taken as an arbitrary sequence of bytes, 11*4e00368fSchristosand is not restricted to printable characters.) 12*4e00368fSchristos 13*4e00368fSchristosLiterals or match lengths are compressed with one Huffman tree, and 14*4e00368fSchristosmatch distances are compressed with another tree. The trees are stored 15*4e00368fSchristosin a compact form at the start of each block. The blocks can have any 16*4e00368fSchristossize (except that the compressed data for one block must fit in 17*4e00368fSchristosavailable memory). A block is terminated when deflate() determines that 18*4e00368fSchristosit would be useful to start another block with fresh trees. (This is 19*4e00368fSchristossomewhat similar to the behavior of LZW-based _compress_.) 20*4e00368fSchristos 21*4e00368fSchristosDuplicated strings are found using a hash table. All input strings of 22*4e00368fSchristoslength 3 are inserted in the hash table. A hash index is computed for 23*4e00368fSchristosthe next 3 bytes. If the hash chain for this index is not empty, all 24*4e00368fSchristosstrings in the chain are compared with the current input string, and 25*4e00368fSchristosthe longest match is selected. 26*4e00368fSchristos 27*4e00368fSchristosThe hash chains are searched starting with the most recent strings, to 28*4e00368fSchristosfavor small distances and thus take advantage of the Huffman encoding. 29*4e00368fSchristosThe hash chains are singly linked. There are no deletions from the 30*4e00368fSchristoshash chains, the algorithm simply discards matches that are too old. 31*4e00368fSchristos 32*4e00368fSchristosTo avoid a worst-case situation, very long hash chains are arbitrarily 33*4e00368fSchristostruncated at a certain length, determined by a runtime option (level 34*4e00368fSchristosparameter of deflateInit). So deflate() does not always find the longest 35*4e00368fSchristospossible match but generally finds a match which is long enough. 36*4e00368fSchristos 37*4e00368fSchristosdeflate() also defers the selection of matches with a lazy evaluation 38*4e00368fSchristosmechanism. After a match of length N has been found, deflate() searches for 39*4e00368fSchristosa longer match at the next input byte. If a longer match is found, the 40*4e00368fSchristosprevious match is truncated to a length of one (thus producing a single 41*4e00368fSchristosliteral byte) and the process of lazy evaluation begins again. Otherwise, 42*4e00368fSchristosthe original match is kept, and the next match search is attempted only N 43*4e00368fSchristossteps later. 44*4e00368fSchristos 45*4e00368fSchristosThe lazy match evaluation is also subject to a runtime parameter. If 46*4e00368fSchristosthe current match is long enough, deflate() reduces the search for a longer 47*4e00368fSchristosmatch, thus speeding up the whole process. If compression ratio is more 48*4e00368fSchristosimportant than speed, deflate() attempts a complete second search even if 49*4e00368fSchristosthe first match is already long enough. 50*4e00368fSchristos 51*4e00368fSchristosThe lazy match evaluation is not performed for the fastest compression 52*4e00368fSchristosmodes (level parameter 1 to 3). For these fast modes, new strings 53*4e00368fSchristosare inserted in the hash table only when no match was found, or 54*4e00368fSchristoswhen the match is not too long. This degrades the compression ratio 55*4e00368fSchristosbut saves time since there are both fewer insertions and fewer searches. 56*4e00368fSchristos 57*4e00368fSchristos 58*4e00368fSchristos2. Decompression algorithm (inflate) 59*4e00368fSchristos 60*4e00368fSchristos2.1 Introduction 61*4e00368fSchristos 62*4e00368fSchristosThe key question is how to represent a Huffman code (or any prefix code) so 63*4e00368fSchristosthat you can decode fast. The most important characteristic is that shorter 64*4e00368fSchristoscodes are much more common than longer codes, so pay attention to decoding the 65*4e00368fSchristosshort codes fast, and let the long codes take longer to decode. 66*4e00368fSchristos 67*4e00368fSchristosinflate() sets up a first level table that covers some number of bits of 68*4e00368fSchristosinput less than the length of longest code. It gets that many bits from the 69*4e00368fSchristosstream, and looks it up in the table. The table will tell if the next 70*4e00368fSchristoscode is that many bits or less and how many, and if it is, it will tell 71*4e00368fSchristosthe value, else it will point to the next level table for which inflate() 72*4e00368fSchristosgrabs more bits and tries to decode a longer code. 73*4e00368fSchristos 74*4e00368fSchristosHow many bits to make the first lookup is a tradeoff between the time it 75*4e00368fSchristostakes to decode and the time it takes to build the table. If building the 76*4e00368fSchristostable took no time (and if you had infinite memory), then there would only 77*4e00368fSchristosbe a first level table to cover all the way to the longest code. However, 78*4e00368fSchristosbuilding the table ends up taking a lot longer for more bits since short 79*4e00368fSchristoscodes are replicated many times in such a table. What inflate() does is 80*4e00368fSchristossimply to make the number of bits in the first table a variable, and then 81*4e00368fSchristosto set that variable for the maximum speed. 82*4e00368fSchristos 83*4e00368fSchristosFor inflate, which has 286 possible codes for the literal/length tree, the size 84*4e00368fSchristosof the first table is nine bits. Also the distance trees have 30 possible 85*4e00368fSchristosvalues, and the size of the first table is six bits. Note that for each of 86*4e00368fSchristosthose cases, the table ended up one bit longer than the ``average'' code 87*4e00368fSchristoslength, i.e. the code length of an approximately flat code which would be a 88*4e00368fSchristoslittle more than eight bits for 286 symbols and a little less than five bits 89*4e00368fSchristosfor 30 symbols. 90*4e00368fSchristos 91*4e00368fSchristos 92*4e00368fSchristos2.2 More details on the inflate table lookup 93*4e00368fSchristos 94*4e00368fSchristosOk, you want to know what this cleverly obfuscated inflate tree actually 95*4e00368fSchristoslooks like. You are correct that it's not a Huffman tree. It is simply a 96*4e00368fSchristoslookup table for the first, let's say, nine bits of a Huffman symbol. The 97*4e00368fSchristossymbol could be as short as one bit or as long as 15 bits. If a particular 98*4e00368fSchristossymbol is shorter than nine bits, then that symbol's translation is duplicated 99*4e00368fSchristosin all those entries that start with that symbol's bits. For example, if the 100*4e00368fSchristossymbol is four bits, then it's duplicated 32 times in a nine-bit table. If a 101*4e00368fSchristossymbol is nine bits long, it appears in the table once. 102*4e00368fSchristos 103*4e00368fSchristosIf the symbol is longer than nine bits, then that entry in the table points 104*4e00368fSchristosto another similar table for the remaining bits. Again, there are duplicated 105*4e00368fSchristosentries as needed. The idea is that most of the time the symbol will be short 106*4e00368fSchristosand there will only be one table look up. (That's whole idea behind data 107*4e00368fSchristoscompression in the first place.) For the less frequent long symbols, there 108*4e00368fSchristoswill be two lookups. If you had a compression method with really long 109*4e00368fSchristossymbols, you could have as many levels of lookups as is efficient. For 110*4e00368fSchristosinflate, two is enough. 111*4e00368fSchristos 112*4e00368fSchristosSo a table entry either points to another table (in which case nine bits in 113*4e00368fSchristosthe above example are gobbled), or it contains the translation for the symbol 114*4e00368fSchristosand the number of bits to gobble. Then you start again with the next 115*4e00368fSchristosungobbled bit. 116*4e00368fSchristos 117*4e00368fSchristosYou may wonder: why not just have one lookup table for how ever many bits the 118*4e00368fSchristoslongest symbol is? The reason is that if you do that, you end up spending 119*4e00368fSchristosmore time filling in duplicate symbol entries than you do actually decoding. 120*4e00368fSchristosAt least for deflate's output that generates new trees every several 10's of 121*4e00368fSchristoskbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code 122*4e00368fSchristoswould take too long if you're only decoding several thousand symbols. At the 123*4e00368fSchristosother extreme, you could make a new table for every bit in the code. In fact, 124*4e00368fSchristosthat's essentially a Huffman tree. But then you spend too much time 125*4e00368fSchristostraversing the tree while decoding, even for short symbols. 126*4e00368fSchristos 127*4e00368fSchristosSo the number of bits for the first lookup table is a trade of the time to 128*4e00368fSchristosfill out the table vs. the time spent looking at the second level and above of 129*4e00368fSchristosthe table. 130*4e00368fSchristos 131*4e00368fSchristosHere is an example, scaled down: 132*4e00368fSchristos 133*4e00368fSchristosThe code being decoded, with 10 symbols, from 1 to 6 bits long: 134*4e00368fSchristos 135*4e00368fSchristosA: 0 136*4e00368fSchristosB: 10 137*4e00368fSchristosC: 1100 138*4e00368fSchristosD: 11010 139*4e00368fSchristosE: 11011 140*4e00368fSchristosF: 11100 141*4e00368fSchristosG: 11101 142*4e00368fSchristosH: 11110 143*4e00368fSchristosI: 111110 144*4e00368fSchristosJ: 111111 145*4e00368fSchristos 146*4e00368fSchristosLet's make the first table three bits long (eight entries): 147*4e00368fSchristos 148*4e00368fSchristos000: A,1 149*4e00368fSchristos001: A,1 150*4e00368fSchristos010: A,1 151*4e00368fSchristos011: A,1 152*4e00368fSchristos100: B,2 153*4e00368fSchristos101: B,2 154*4e00368fSchristos110: -> table X (gobble 3 bits) 155*4e00368fSchristos111: -> table Y (gobble 3 bits) 156*4e00368fSchristos 157*4e00368fSchristosEach entry is what the bits decode as and how many bits that is, i.e. how 158*4e00368fSchristosmany bits to gobble. Or the entry points to another table, with the number of 159*4e00368fSchristosbits to gobble implicit in the size of the table. 160*4e00368fSchristos 161*4e00368fSchristosTable X is two bits long since the longest code starting with 110 is five bits 162*4e00368fSchristoslong: 163*4e00368fSchristos 164*4e00368fSchristos00: C,1 165*4e00368fSchristos01: C,1 166*4e00368fSchristos10: D,2 167*4e00368fSchristos11: E,2 168*4e00368fSchristos 169*4e00368fSchristosTable Y is three bits long since the longest code starting with 111 is six 170*4e00368fSchristosbits long: 171*4e00368fSchristos 172*4e00368fSchristos000: F,2 173*4e00368fSchristos001: F,2 174*4e00368fSchristos010: G,2 175*4e00368fSchristos011: G,2 176*4e00368fSchristos100: H,2 177*4e00368fSchristos101: H,2 178*4e00368fSchristos110: I,3 179*4e00368fSchristos111: J,3 180*4e00368fSchristos 181*4e00368fSchristosSo what we have here are three tables with a total of 20 entries that had to 182*4e00368fSchristosbe constructed. That's compared to 64 entries for a single table. Or 183*4e00368fSchristoscompared to 16 entries for a Huffman tree (six two entry tables and one four 184*4e00368fSchristosentry table). Assuming that the code ideally represents the probability of 185*4e00368fSchristosthe symbols, it takes on the average 1.25 lookups per symbol. That's compared 186*4e00368fSchristosto one lookup for the single table, or 1.66 lookups per symbol for the 187*4e00368fSchristosHuffman tree. 188*4e00368fSchristos 189*4e00368fSchristosThere, I think that gives you a picture of what's going on. For inflate, the 190*4e00368fSchristosmeaning of a particular symbol is often more than just a letter. It can be a 191*4e00368fSchristosbyte (a "literal"), or it can be either a length or a distance which 192*4e00368fSchristosindicates a base value and a number of bits to fetch after the code that is 193*4e00368fSchristosadded to the base value. Or it might be the special end-of-block code. The 194*4e00368fSchristosdata structures created in inftrees.c try to encode all that information 195*4e00368fSchristoscompactly in the tables. 196*4e00368fSchristos 197*4e00368fSchristos 198*4e00368fSchristosJean-loup Gailly Mark Adler 199*4e00368fSchristosjloup@gzip.org madler@alumni.caltech.edu 200*4e00368fSchristos 201*4e00368fSchristos 202*4e00368fSchristosReferences: 203*4e00368fSchristos 204*4e00368fSchristos[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data 205*4e00368fSchristosCompression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, 206*4e00368fSchristospp. 337-343. 207*4e00368fSchristos 208*4e00368fSchristos``DEFLATE Compressed Data Format Specification'' available in 209*4e00368fSchristoshttp://tools.ietf.org/html/rfc1951 210