otion at rates of 20 to 40 words per minute, which is nearly as fast as the normal writing rate and even faster in the last case. Practical device applications concern palmtop computers, wearable computers, one-handed computers, and hands-free computers for various working environments and for the disabled. Adaptive Huffman coding Adaptive Huffman coding is also known as FGK, after Faller, Gallager and Knuth, and as algorithm V, after improvements of FGK from Vitter. 10 The FGK principle represents a dynamic implementation of Huffman coding trees, which is based on a running estimate of the symbol probability distribution. The code is optimal but only within the context of a given source message. Both encoder and decoder adapt themselves to the changing probability distribution, which makes the method suitable to encode or decode time-evolving or nonstationary sources. The key advantage of adaptive VS. static Huffman coding is that the data encoding and decoding is, indeed, performed "on the fly," through a single-pass conversion pro- cess. In contrast, the static scheme requires two passes: the first one for the coding-tree determination, the second for the coding. However, if the source's characteristics are time-invariant, this operation only needs to be performed once, and the other incom- ing message sequences are coded and decoded through a single pass. If the source's 9 See details with animated screenshot demonstrations in www.inference.phy.cam.ac.uk/dasher; the software is freely available. See: D.A. Lelewer and D.S Hirschberg, Data compression. Computing Surveys, 19 (1987), 261-97, www.ics.uci.edu/~dan/pubs/DataCompression.html. 10.3 Adaptive Huffman coding Figure 10.2 Example of source coding tree (a) without sibling property, and (b) with sibling property (Huffman tree). The number shown inside each node's circle is the corresponding probability, and in case (b) the nodes are labeled 0 to 11. characteristics evolve rapidly, however, then the coding tree must be re-evaluated for each message sequence, 