ree updates can, however, be forwarded periodically, representing a negligible loss of coding performance, due to the large information-payload size transmitted in between. 12 As an example of an application, FGK is used for dynamic data compression and file archival in a UNIX-environment utility known as compact. 12 It is an interesting class project to perform the comparison between static and adaptive Huffman codings, based on the same English-text message but considering extracts of different sizes. The goal is to find the break-even point (message size) where the performance of adaptive coding, taking into account the overhead of transmitting the 26-letter alphabet codeword, becomes superior to that of static coding. Integer, arithmetic, and adaptive coding An improvement on FGK is provided by the Vitter algorithm, or "algorithm V." The difference with FGK is that the coding tree recomputations are subject to certain constraints. The nodes are still numbered according to the sibling rule, but in the numbering all leaves of weight w are put under the internal node of the same weight. The ensemble of nodes of the same weight is said to form a block, always with an internal node as the leader with the highest number. The coding-tree update can be seen as moving certain nodes from one block to another with greater weight. The rule is that moving nodes automatically take the place of the leading node of the target block. A second constraint concerns the codeword assignment. The algorithm seeks to minimize both functions defined by S = 1(xi) (called external path length) and m = max[1(xi)] (called tree height), where 1(xi) is the codeword length assigned to symbol Xi. Note that the decoder is equipped with the same program, and is, therefore, able to reconfigure the coding tree and codeword assignment in a way strictly identical to that of the encoder. The above constraints guarantee a coding tree with minimal height and the minimal number of codeword bits. This Vitter tree is then best suited to the next update, 