Präfixcode - Prefix code

Ein Präfixcode ist eine Art von Codesystem , das sich durch den Besitz der "Präfixeigenschaft" auszeichnet. Dies erfordert, dass das System kein ganzes Codewort enthält , das ein Präfix (Anfangssegment) eines anderen Codeworts im System ist. Dies gilt trivial für Code mit fester Länge, daher nur ein Gesichtspunkt für Code mit variabler Länge .

Beispielsweise hat ein Code mit den Codewörtern {9, 55} die Präfixeigenschaft. Ein Code, der aus {9, 5, 59, 55} besteht, tut dies nicht, da "5" ein Präfix von "59" und auch von "55" ist. Ein Präfixcode ist ein eindeutig decodierbarer Code : Bei einer vollständigen und genauen Sequenz kann ein Empfänger jedes Wort identifizieren, ohne dass eine spezielle Markierung zwischen den Wörtern erforderlich ist. Es gibt jedoch eindeutig decodierbare Codes, die keine Präfixcodes sind. Beispielsweise ist die Umkehrung eines Präfixcodes immer noch eindeutig decodierbar (es handelt sich um einen Suffixcode), es handelt sich jedoch nicht unbedingt um einen Präfixcode.

Präfixcodes werden auch als präfixfreie Codes , Präfixbedingungscodes und Sofortcodes bezeichnet . Obwohl die Huffman-Codierung nur einer von vielen Algorithmen zum Ableiten von Präfixcodes ist, werden Präfixcodes auch häufig als "Huffman-Codes" bezeichnet, selbst wenn der Code nicht von einem Huffman-Algorithmus erzeugt wurde. Der Begriff kommafreier Code wird manchmal auch als Synonym für präfixfreie Codes verwendet, aber in den meisten mathematischen Büchern und Artikeln (z. B.) wird ein kommafreier Code verwendet, um einen selbstsynchronisierenden Code , eine Unterklasse von Präfixcodes, zu bezeichnen.

Verwendung von Präfix - Codes kann eine Nachricht als eine Folge von verketteten Codeworten übertragen werden, ohne out-of-band - Marker oder (alternativ) spezieller Marker zwischen Worten umrahmen , die Worte in der Nachricht. Der Empfänger kann die Nachricht eindeutig dekodieren, indem er wiederholt Sequenzen findet und entfernt, die gültige Codewörter bilden. Dies ist im Allgemeinen nicht mit Codes möglich, denen die Präfix-Eigenschaft fehlt, z. B. {0, 1, 10, 11}: Ein Empfänger, der am Anfang eines Codeworts eine "1" liest, würde nicht wissen, ob dies das vollständige Codewort ist. " 1 "oder lediglich das Präfix des Codeworts" 10 "oder" 11 "; Die Zeichenfolge "10" könnte also entweder als einzelnes Codewort oder als Verkettung der Wörter "1" und dann "0" interpretiert werden.

Die Huffman-Codes variabler Länge , Länderanrufcodes , die Länder- und Herausgeberteile von ISBNs , die im UMTS W-CDMA 3G- Funkstandard verwendeten Sekundärsynchronisationscodes und die Befehlssätze (Maschinensprache) der meisten Computermikroarchitekturen sind Präfixcodes.

Präfixcodes sind keine fehlerkorrigierenden Codes . In der Praxis kann eine Nachricht zuerst mit einem Präfixcode komprimiert und dann vor der Übertragung erneut mit Kanalcodierung (einschließlich Fehlerkorrektur) codiert werden .

Für jeden eindeutig decodierbaren Code gibt es einen Präfixcode mit denselben Codewortlängen. Krafts Ungleichung charakterisiert die Sätze von Codewortlängen, die in einem eindeutig decodierbaren Code möglich sind.

Techniken

Wenn jedes Wort im Code dieselbe Länge hat, wird der Code als Code mit fester Länge oder als Blockcode bezeichnet (obwohl der Begriff Blockcode auch für Fehlerkorrekturcodes mit fester Größe bei der Kanalcodierung verwendet wird ). Beispielsweise sind ISO 8859-15- Buchstaben immer 8 Bit lang. UTF-32 / UCS-4- Buchstaben sind immer 32 Bit lang. ATM-Zellen sind immer 424 Bit (53 Byte) lang. Ein Code fester Länge mit k Bits fester Länge kann bis zu Quellensymbolen codieren .

Ein Code mit fester Länge ist notwendigerweise ein Präfixcode. Es ist möglich, jeden Code in einen Code mit fester Länge umzuwandeln, indem feste Symbole an die kürzeren Präfixe aufgefüllt werden, um die Länge der längsten Präfixe zu erreichen. Alternativ können solche Füllcodes verwendet werden, um Redundanz einzuführen, die Autokorrektur und / oder Synchronisation ermöglicht. Codierungen mit fester Länge sind jedoch in Situationen ineffizient, in denen einige Wörter viel wahrscheinlicher übertragen werden als andere.

Die abgeschnittene Binärcodierung ist eine einfache Verallgemeinerung von Codes fester Länge, um Fälle zu behandeln, in denen die Anzahl der Symbole n keine Zweierpotenz ist. Source - Symbole werden Codewörter mit der Länge zugewiesen k und k + 1, wobei k so gewählt ist, daß 2 k <n ≤ 2 k + 1 .

Die Huffman-Codierung ist eine ausgefeiltere Technik zum Erstellen von Präfixcodes variabler Länge. Der Huffman-Codierungsalgorithmus verwendet als Eingabe die Frequenzen, die die Codewörter haben sollten, und erstellt einen Präfixcode, der den gewichteten Durchschnitt der Codewortlängen minimiert. (Dies hängt eng mit der Minimierung der Entropie zusammen.) Dies ist eine Form der verlustfreien Datenkomprimierung basierend auf der Entropiecodierung .

Einige Codes markieren das Ende eines Codeworts mit einem speziellen "Komma" -Symbol, das sich von normalen Daten unterscheidet. Dies ist etwas analog zu den Leerzeichen zwischen Wörtern in einem Satz; Sie markieren, wo ein Wort endet und ein anderes beginnt. Wenn jedes Codewort mit einem Komma endet und das Komma an keiner anderen Stelle in einem Codewort erscheint, ist der Code automatisch ohne Präfix. Moderne Kommunikationssysteme senden jedoch alles als Folgen von "1" und "0" - das Hinzufügen eines dritten Symbols wäre teuer, und die Verwendung nur am Ende von Wörtern wäre ineffizient. Morsecode ist ein alltägliches Beispiel für einen Code variabler Länge mit einem Komma. Die langen Pausen zwischen den Buchstaben und die noch längeren Pausen zwischen den Wörtern helfen den Menschen zu erkennen, wo ein Buchstabe (oder ein Wort) endet und der nächste beginnt. In ähnlicher Weise verwendet die Fibonacci-Codierung eine "11", um das Ende jedes Codeworts zu markieren.

Selbstsynchronisierende Codes sind Präfixcodes, die eine Rahmensynchronisation ermöglichen .

Verwandte konzepte

Ein Suffix-Code ist eine Reihe von Wörtern, von denen keines ein Suffix eines anderen ist. äquivalent eine Reihe von Wörtern, die die Umkehrung eines Präfixcodes sind. Wie bei einem Präfixcode ist die Darstellung einer Zeichenfolge als Verkettung solcher Wörter eindeutig. Ein Bifix-Code ist eine Reihe von Wörtern, die sowohl ein Präfix- als auch ein Suffix-Code sind. Ein optimaler Präfixcode ist ein Präfixcode mit minimaler durchschnittlicher Länge. Das heißt, es wird ein Alphabet mit n Symbolen mit Wahrscheinlichkeiten für einen Präfixcode C angenommen . Wenn C ' ein anderer Präfixcode ist und die Länge der Codewörter von C' ist , dann .

Heute verwendete Präfixcodes

Beispiele für Präfixcodes sind:

Techniken

Zu den häufig verwendeten Techniken zum Erstellen von Präfixcodes gehören Huffman-Codes und die früheren Shannon-Fano-Codes sowie universelle Codes wie:

Anmerkungen

Verweise

Externe Links