1. A method of constructing a codebook for a sequence of symbols, the method comprising: dividing the probability distribution p(i) of the symbols contained in the sequence of symbols into L&plus;1 mutually exclusive modeling intervals I k, where L>0 and 0&lE;k &lE;L; associating an infinite code C k (i) with each modeling interval I k, each code C k (i) capable of representing each possible symbol in the sequence; selecting first codewords from C 0 (i) for use in representing symbols present in the first modeling interval I 0 ; for modeling intervals I k where k>0, selecting codewords from infinite code C k (i) for use in representing symbols present in that modeling interval, wherein those codewords are selected by calculating an offset O k into infinite code C k (i) such that the cumulative probability of the codewords selected for all modeling intervals is one; and grafting the codewords selected for all modeling intervals together into a single grafted codebook.