Prefix code
A prefix code is a type of
For example, a code with code words {9, 55} has the prefix property; a code consisting of {9, 5, 59, 55} does not, because "5" is a prefix of "59" and also of "55". A prefix code is a
Prefix codes are also known as prefix-free codes, prefix condition codes and instantaneous codes. Although Huffman coding is just one of many algorithms for deriving prefix codes, prefix codes are also widely referred to as "Huffman codes", even when the code was not produced by a Huffman algorithm. The term comma-free code is sometimes also applied as a synonym for prefix-free codes[1][2] but in most mathematical books and articles (e.g.[3][4]) a comma-free code is used to mean a self-synchronizing code, a subclass of prefix codes.
Using prefix codes, a message can be transmitted as a sequence of concatenated code words, without any
The variable-length
Prefix codes are not
For any
Techniques
If every word in the code has the same length, the code is called a fixed-length code, or a block code (though the term
A fixed-length code is necessarily a prefix code. It is possible to turn any code into a fixed-length code by padding fixed symbols to the shorter prefixes in order to meet the length of the longest prefixes. Alternately, such padding codes may be employed to introduce redundancy that allows autocorrection and/or synchronisation. However, fixed length encodings are inefficient in situations where some words are much more likely to be transmitted than others.
Truncated binary encoding is a straightforward generalization of fixed-length codes to deal with cases where the number of symbols n is not a power of two. Source symbols are assigned codewords of length k and k+1, where k is chosen so that 2k < n ≤ 2k+1.
Some codes mark the end of a code word with a special "comma" symbol (also called a Sentinel value), different from normal data.[7] This is somewhat analogous to the spaces between words in a sentence; they mark where one word ends and another begins. If every code word ends in a comma, and the comma does not appear elsewhere in a code word, the code is automatically prefix-free. However, reserving an entire symbol only for use as a comma can be inefficient, especially for languages with a small number of symbols. Morse code is an everyday example of a variable-length code with a comma. The long pauses between letters, and the even longer pauses between words, help people recognize where one letter (or word) ends, and the next begins. Similarly, Fibonacci coding uses a "11" to mark the end of every code word.
Self-synchronizing codes are prefix codes that allow frame synchronization.
Related concepts
A suffix code is a set of words none of which is a suffix of any other; equivalently, a set of words which are the reverse of a prefix code. As with a prefix code, the representation of a string as a concatenation of such words is unique. A bifix code is a set of words which is both a prefix and a suffix code.[8] An optimal prefix code is a prefix code with minimal average length. That is, assume an alphabet of n symbols with probabilities for a prefix code C. If C' is another prefix code and are the lengths of the codewords of C', then .[9]
Prefix codes in use today
Examples of prefix codes include:
- variable-length Huffman codes
- country calling codes
- Chen–Ho encoding
- the country and publisher parts of ISBNs
- the Secondary Synchronization Codes used in the W-CDMA3G Wireless Standard
- VCR Plus+ codes
- Unicode Transformation Format, in particular the UTF-8 system for encoding Unicode characters, which is both a prefix-free code and a self-synchronizing code[10]
- variable-length quantity
Techniques
Commonly used techniques for constructing prefix codes include Huffman codes and the earlier Shannon–Fano codes, and universal codes such as:
- Elias delta coding
- Elias gamma coding
- Elias omega coding
- Fibonacci coding
- Levenshtein coding
- Unary coding
- Golomb Rice code
- Straddling checkerboard (simple cryptography technique which produces prefix codes)
- binary coding[11]
Notes
- ^ US Federal Standard 1037C
- ^ ATIS Telecom Glossary 2007, archived from the original on July 8, 2010, retrieved December 4, 2010
- ^ Berstel, Jean; Perrin, Dominique (1985), Theory of Codes, Academic Press
- S2CID 124092269
- ^ Le Boudec, Jean-Yves, Patrick Thiran, and Rüdiger Urbanke. Introduction aux sciences de l'information: entropie, compression, chiffrement et correction d'erreurs. PPUR Presses polytechniques, 2015.
- ^ Berstel et al (2010) p.75
- ^ A. Jones, J. "Development of Trigger and Control Systems for CMS" (PDF). High Energy Physics, Blackett Laboratory, Imperial College, London. p. 70. Archived from the original (PDF) on Jun 13, 2011.
- ^ Berstel et al (2010) p.58
- ^ McGill COMP 423 Lecture notes
- ^ Pike, Rob (2003-04-03). "UTF-8 history".
References
- Berstel, Jean; Perrin, Dominique; Reutenauer, Christophe (2010). Codes and automata. Encyclopedia of Mathematics and its Applications. Vol. 129. Cambridge: Zbl 1187.94001.
- Zbl 0298.94011.
- D.A. Huffman, "A method for the construction of minimum-redundancy codes", Proceedings of the I.R.E., Sept. 1952, pp. 1098–1102 (Huffman's original article)
- Profile: David A. Huffman, Scientific American, Sept. 1991, pp. 54–58 (Background story)
- ISBN 0-262-03293-7. Section 16.3, pp. 385–392.
- This article incorporates public domain material from Federal Standard 1037C. General Services Administration. Archived from the original on 2022-01-22.
External links
- Codes, trees and the prefix property by Kona Macphee