ary). The Huffman- code data in Fig. 9.9 have also been plotted in Fig. 9.8. In this previous figure, an arbitrary, yet conservative extrapolation of what the Huffman-code performance should look like for sequences beyond n = 9 is also shown. We expect that there is no optimal sequence length, and know that the coding efficiency at n = 32 is greater than that of our proposed block code (n = 97.34%). It would take the power of a workstation or mainframe computer to determine the exact curve and find the values of n for which the Huffman-code efficiency approaches n = 99%, 99.9%, 99.99%, 99.999%, The Shannon-Fano code efficiency, computed up to n = 90, is plotted in Fig. 9.10, along with the previous data from Fig. 9.8. We observe that the initially smooth behavior of the Shannon code breaks near N = 16, leading to aperiodic oscillations similar to that of the block code. Interestingly, the efficiency of the Shannon-Fano code is seen to increase globally towards the upper limit set by the Huffman code. As expected, the Shannon-Fano code does not exhibit any optimum sequence length, apart from the existence of local maxima. 9.4 Exercises Number of games n Figure 9.10 As in Fig. 9.9, with additional results from Shannon-Fano coding up to n = 90 (bold line), showing a global convergence trend towards Huffman-coding efficiency. In this example, we pushed the investigation relatively far, but this was for the sake of mathematical curiosity. In practice, there is little interest nor anything practical to implement Huffman or Shannon-Fand codings when the source has a number of events significantly greater that 216 = 5 536. Should we take this number as a reference, this means that compression codes may not be applied to binary sources with lengths greater that n = 16, for which the uncompressed representation is 16 bits (two bytes). In contrast, a block code such as used in this roulette example can be reasonably and efficiently applied to sources up to 232 = 4 294 967 296 elements, which requires the incredibly shorter 