Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Variable-length encoding

From Wikipedia, the free encyclopedia
(Redirected fromVariable-width encoding)
Encoding which maps information to a variable number of bits
icon
This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed.
Find sources: "Variable-length encoding" – news ·newspapers ·books ·scholar ·JSTOR
(December 2009) (Learn how and when to remove this message)

Incoding theory,variable-length encoding is a type ofcharacter encoding scheme in which codes of differing lengths are used to encode acharacter set (a repertoire of symbols) for representation in acomputer.[1] The equivalent concept incomputer science isbit string.

Variable-length codes can allow sources to becompressed and decompressed withzero error (lossless data compression) and still be read back symbol by symbol. Anindependent and identically-distributed source may be compressed almost arbitrarily close to itsentropy. This is in contrast to fixed-length coding methods, for which data compression is only possible for large blocks of data, and any compression beyond the logarithm of the total number of possibilities comes with a finite (though perhaps arbitrarily small) probability of failure.

For these reasons, they were sometimes used to pack English text into fewer bytes inadventure games for earlymicrocomputers. However,disks, increases in computer memory, and general purposecompression algorithms have rendered such methods obsolete.

Multibyte encodings are usually the result of a need to increase the number of characters which can be encoded without breakingbackward compatibility with an existing constraint. For example, with one byte (8 bits) per character, one can encode 256 possible characters; in order to encode more than 256 characters, the obvious choice would be to use two or more bytes per encoding unit, two bytes (16 bits) would allow 65,536 possible characters, but such a change would break compatibility with existing systems and therefore might not be feasible at all.[a]

Unlikely source symbols can be assigned longer codewords while likely source symbols can be assigned shorter codewords, thus giving a lowexpected codeword length. Some examples of well-known variable-length coding strategies areHuffman coding,Lempel–Ziv coding,arithmetic coding, andcontext-adaptive variable-length coding.

General structure

[edit]

A multibyte encoding system minimises disruption to existing software by keeping some characters as single-unit codes, while others require multiple units. This creates three unit types: singletons (which consist of a single unit), lead units (which come first in a multiunit sequence), and trail units (which come afterwards in a multiunit sequence). Input and display systems must handle these structures, though most other software does not.

For example, the four character string "I♥NY" is encoded inUTF-8 like this (shown ashexadecimal byte values):49E299A5 4E 59. Of the six units in that sequence,49,4E, and59 are singletons (forI,N, andY),E2 is a lead unit and99 andA5 are trail units. The heart symbol is represented by the combination of the lead unit and the two trail units.

UTF-8 clearly distinguishes singletons, leads, and trails with non-overlapping value ranges. By contrast, older encodings often reuse values, making it harder to parse text correctly. This can cause false positives in searches or make a corrupted byte disrupt long sequences. In well-designed encodings like UTF-8, searching works reliably, and corruption affects only the character containing the bad unit.

Codes and their extensions

[edit]

The extension of a code is the mapping of finite length source sequences to finite length bit strings, that is obtained by concatenating for each symbol of the source sequence the corresponding codeword produced by the original code. Using terms fromformal language theory, the precise mathematical definition is as follows: LetS{\displaystyle S} andT{\displaystyle T} be two finite sets, called the source and targetalphabets, respectively. AcodeC:ST{\displaystyle C:S\to T^{*}} is a total function[2] mapping each symbol fromS{\displaystyle S} to asequence of symbols overT{\displaystyle T}, and the extension ofC{\displaystyle C} to ahomomorphism ofS{\displaystyle S^{*}} intoT{\displaystyle T^{*}}, which naturally maps each sequence of source symbols to a sequence of target symbols, is referred to as itsextension.

Variable-length codes can be strictly nested in order of decreasing generality as non-singular codes, uniquely decodable codes, and prefix codes. Prefix codes are always uniquely decodable, and these in turn are always non-singular:

Non-singular codes

[edit]

A code isnon-singular if each source symbol is mapped to a different non-empty bit string; that is, the mapping from source symbols to bit strings isinjective.

For example, the mappingM1={a0,b0,c1}{\displaystyle M_{1}=\{\,{\texttt {a}}\mapsto {\texttt {0}},{\texttt {b}}\mapsto {\texttt {0}},{\texttt {c}}\mapsto {\texttt {1}}\,\}} isnot non-singular because botha andb map to the same bit string0; any extension of this mapping will generate a lossy (non-lossless) coding. Such singular coding may still be useful when some loss of information is acceptable (for example, when such code is used in audio or video compression, where a lossy coding becomes equivalent to sourcequantization).

However, the mappingM2={a1,b011,c01110,d1110,e10011,f0}{\displaystyle M_{2}=\{\,{\texttt {a}}\mapsto {\texttt {1}},{\texttt {b}}\mapsto {\texttt {011}},{\texttt {c}}\mapsto {\texttt {01110}},{\texttt {d}}\mapsto {\texttt {1110}},{\texttt {e}}\mapsto {\texttt {10011}},{\texttt {f}}\mapsto {\texttt {0}}\}}is non-singular; its extension will generate a lossless coding, which will be useful for general data transmission (but this feature is not always required). It is not necessary for the non-singular code to be more compact than the source (and in many applications, a larger code is useful, for example as a way to detect or recover from encoding or transmission errors, or in security applications to protect a source from undetectable tampering).

Uniquely decodable codes

[edit]

A code isuniquely decodable if its extension is§ non-singular. Whether a given code is uniquely decodable can be decided with theSardinas–Patterson algorithm.

The mappingM3={a0,b01,c011}{\displaystyle M_{3}=\{\,{\texttt {a}}\mapsto {\texttt {0}},{\texttt {b}}\mapsto {\texttt {01}},{\texttt {c}}\mapsto {\texttt {011}}\,\}} is uniquely decodable (this can be demonstrated by looking at thefollow-set after each target bit string in the map, because each bitstring is terminated as soon as we see a \t0}} bit which cannot follow any existing code to create a longer valid code in the map, but unambiguously starts a new code).

Consider again the codeM2{\displaystyle M_{2}} from the previous section.[2] This code isnot uniquely decodable, since the string011101110011 can be interpreted as the sequence of codewords01110 – 1110 – 011, but also as the sequence of codewords011 – 1 – 011 – 10011. Two possible decodings of this encoded string are thus given bycdb andbabe. However, such a code is useful when the set of all possible source symbols is completely known and finite, or when there are restrictions (such as a formal syntax) that determine if source elements of this extension are acceptable. Such restrictions permit the decoding of the original message by checking which of the possible source symbols mapped to the same symbol are valid under those restrictions.

Prefix codes

[edit]
Main article:Prefix code

A code is aprefix code if no target bit string in the mapping is a prefix of the target bit string of a different source symbol in the same mapping. This means that symbols can be decoded instantaneously after their entire codeword is received. Other commonly used names for this concept areprefix-free code,instantaneous code, orcontext-free code. A special case of prefix codes areblock codes,LEB128, andvariable-length quantity (VLQ) codes.

For example, the mappingM3{\displaystyle M_{3}} above isnot a prefix code because we do not know after reading the bit string0 whether it encodes ana source symbol, or if it is the prefix of the encodings of theb orc symbols. An example of a prefix code is shown below.

SymbolCodeword
a0
b10
c110
d111
Example of encoding and decoding:
aabacdab00100110111010|0|0|10|0|110|111|0|10|aabacdab

For this example, if the probabilities of(a,b,c,d){\displaystyle ({\texttt {a}},{\texttt {b}},{\texttt {c}},{\texttt {d}})} were(12,14,18,18){\displaystyle \textstyle \left({\frac {1}{2}},{\frac {1}{4}},{\frac {1}{8}},{\frac {1}{8}}\right)}, the expected number of bits used to represent a source symbol using the code above would be:

1×12+2×14+3×18+3×18=74{\displaystyle 1\times {\frac {1}{2}}+2\times {\frac {1}{4}}+3\times {\frac {1}{8}}+3\times {\frac {1}{8}}={\frac {7}{4}}}.

As the entropy of this source is 1.75 bits per symbol, this code compresses the source as much as possible so that the source can be recovered withzero error.

See also

[edit]

Notes

[edit]
  1. ^As a real-life example of this,UTF-16, which represents the most common characters in exactly the manner just described (and uses pairs of 16-bit code units for less-common characters) never gained traction as an encoding for text intended for interchange due to its incompatibility with the ubiquitous 7-/8-bitASCII encoding, with its intended role instead being taken byUTF-8, whichdoes preserve ASCII compatibility.

References

[edit]
  1. ^Crispin, M. (2005-04-01).UTF-9 and UTF-18 Efficient Transformation Formats of Unicode.doi:10.17487/rfc4042.
  2. ^abThis code is based on an example found in Berstel et al. (2009), Example 2.3.1, p. 63.

Further reading

[edit]
Lossless
type
Entropy
Dictionary
Other
Hybrid
Lossy
type
Transform
Predictive
Audio
Concepts
Codec
parts
Image
Concepts
Methods
Video
Concepts
Codec
parts
Theory
Community
People
Retrieved from "https://en.wikipedia.org/w/index.php?title=Variable-length_encoding&oldid=1324562923"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp