resses; (c) LZ code sequence (five-bit codewords) representing 25% compressed version of source message (a). If the LZ code must be reconfigured, the encoder can send either of the two codewords 00 or 000 01, recalling that these two have only appeared once at the very beginning of the coded sequence. In our example (Table 10.5), note that only 00001 can be used for this purpose. 13 Receiving an unexpected codeword is an anomaly, which instructs the LZ decoder that a new dictionary has been used in the sequence bits to follow. The decoder then reads the next codeword to check out the (possibly new) codeword size, and the process of reconstructing the dictionary from scratch starts again. Because the dictionary construction is sequential and as rapid as the codeword acquisition, the flow of message or code data remains uninterrupted, even in the process of dictionary reconstruction. This feature makes LZ coding a truly dynamic, adaptive, and "free-parse" algorithm. A puzzling question remains: how is a code with fixed-length codewords ever able to achieve any data compression? Before going through the details of a formal 13 Indeed, 00000 may appear several times in the sequence, since we don't have a codeword for the contents 00, and 00 is the prefix of no codeword in the dictionary. In the event that any of the 16 source-message phrases is followed by 00x, the code necessarily uses 00000 to represent the first and single 0. The next codeword depends on the third bitx. Ifx = 0, the code uses again (00000) to represent the second and single 0. If x = 1, the second and third bits, 01 form the prefix of several content possibilities in the dictionary, including the stand-alone 01 (Table 10.5). Integer, arithmetic, and adaptive coding Table 10.6 Lempel-Ziv(LZ) codeword dictionary generated from distinct parsing of the 200-bit message example shown in Fig. 10.5. The codeword frequency is also shown. Pointer Phrase (Prefix pointer, bit) Codeword Frequency (0, 0) 00000 (0, 1) 00001 (1, 1) 00011 (2, 0) 00100 (2, 1) 00101 