length of 5.77 bit/word on average to encode, as opposed to 32 bit/word! How this last solution can be effectively implemented is a question of memory space (i.e., 232 addresses for table look-up) and considerations of computer speed, both having economical impacts in practical applications. Block coding remains advantageous because of the possibility of splitting events into many categories and types, which separates the tasks of code assignment between a header and a trailer. Each of these code sub-blocks has fewer bits to handle, and this is what makes the approach more practical when dealing with sources with relatively large numbers of events. Exercises 9.1 (M): Assign a Huffman code to the two-dice roll distribution described in Chapter 1 (as listed in Table 9.6 overleaf), with the results of the roll {2, 3, 4, , 12} being symbolized by the characters {A, B, C, , K} and calculate the coding efficiency. Optimal coding and compression Table 9.6 Data for Exercise 9.1. Symbol x Probability p(x) A = 2 0.028 B = 3 0.056 C = 4 0.083 D = 5 0.111 E = 6 0.139 F = 7 0.167 G = 8 0.139 H = 9 0.111 I = 10 0.083 J = 11 0.056 K = 12 0.028 1.000 9.2 (T): Prove that Huffman coding for uniformly distributed sources of N=2n sym- bols (n an integer) yield a mean codeword length of 1(x) = N. (T): Show that for dyadic sources, the Huffman code is 100% efficient. Clue: Prove this first using two-element and three-element sources, then conclude in the general case. 9.4 (M): Find a block code to describe the outcome of five successive coin tosses, and determine the corresponding coding efficiency. Integer, arithmetic, and adaptive coding This second chapter concludes our exploration tour of coding and data compression. We shall first consider integer coding, which represents another family branch of opti- mal codes (next to Shannon-Fano and Huffman coding). Integer coding applies to the case where the source symbols are fully known, but the probability distribution is only partially known (thus, the previous optimal codes cannot be 