Quellalphabet:
Code-Alphabet:
Ich dachte, dass ein Code, um eindeutig dekodierbar zu sein, Präfix-frei sein muss. In diesem Code ist das Codewort jedoch beispielsweise das Präfix von Codewort , sodass es nicht präfixfrei ist. Mein Lehrbuch sagt mir jedoch, dass seine Rückseite frei von Präfixen ist (ich verstehe das nicht) und daher eindeutig dekodierbar ist. Kann jemand erklären, was dies bedeutet oder warum es eindeutig dekodierbar ist? Ich weiß, dass es die Ungleichung von Kraft befriedigt, aber das ist nur eine notwendige Bedingung, keine ausreichende Bedingung.
encoding-scheme
2000mroliver
quelle
quelle
c
kann ein Präfix vonb
und seinf
, aber die verbleibenden Suffixe sind im Code nicht vorhanden. Wenn Sie den Code umkehren, werden Suffixe zu Präfixen und anschließend zu Präfixen.Antworten:
Ihr Code hat die Eigenschaft, dass Sie einen Präfixcode erhalten, wenn Sie alle Codewörter umkehren. Dies impliziert, dass Ihr Code eindeutig dekodierbar ist.
Betrachten Sie in der Tat jeden Code dessen Umkehrung eindeutig decodierbar ist. Ich behaupte, dass auch eindeutig dekodierbar ist. Dies liegt daran, dass In Worten, Zersetzungen von in Codewörter von sind in einer Eins-zu-Eins - Entsprechung mit Zerlegungen von in Codewörter von . Da letztere einzigartig sind, sind auch die ersteren einzigartig.C= x1, … , Xn CR: = xR1, … , XRn C w = xich1… Xichm wenn und nur wenn wR= xRichm… XRich1. w C wR CR
Da Präfixcodes eindeutig decodierbar sind, folgt, dass die Umkehrung eines Präfixcodes ebenfalls eindeutig decodierbar ist. Dies ist in Ihrem Beispiel der Fall.
Die McMillan-Ungleichung besagt, dass, wenn eindeutig dekodierbar ist, Mit anderen Worten, ein eindeutig dekodierbarer Code erfüllt Krafts Ungleichung. Wenn Sie also nur die erwartete Codewortlänge minimieren möchten, gibt es keinen Grund, über Präfixcodes hinauszuschauen.C ∑i = 1n2- | xich|≤ 1.
Sam Roweis gibt in seinen Folien ein schönes Beispiel für einen eindeutig dekodierbaren Code, der weder ein Präfixcode noch die Umkehrung eines Präfixcodes ist: Um zu zeigen, dass dieser Code eindeutig decodierbar ist, genügt es zu zeigen, wie das erste Codewort eines Wortes decodiert wird. Beginnt das Wort mit einer , ist das erste Codewort . Wenn es die Form , muss es entweder oder . Andernfalls muss ein Präfix der Form . Wir unterscheiden nun mehrere Fälle:0 , 01 , 110. 1 110 01∗ 0 01 01∗0
quelle
1001010101010101…
kann entwederfcccccc…
oder seincaaa…
, und wir müssen möglicherweise bis zum Ende der Eingabe warten, um zu entscheiden.Wenn ich Ihnen eine Nachricht gebe, die Sie entschlüsseln sollen, können Sie Folgendes tun: Kehren Sie die Nachricht um, indem Sie mit dem letzten anstelle des ersten Bits beginnen. Kehren Sie die Codewörter um. Dekodiere die Nachricht. Kehre die dekodierte Zeichenfolge um.
Dies ist möglich, da Sie nach dem Umkehren der sechs Codewörter einen vorwahlfreien Code erhalten: 1010, 1001, 01, 000, 11, 001 ist vorwahlfrei.
quelle
Wenn Präfix-frei bedeutet, was ich denke, beginnt die Umkehrung von 'a' mit 1, 10 oder 101, von denen keiner ein anderer ganzer gültiger Code ist.
Wenn eine Nachricht mit 0101 endet, kann es sich daher nur um ein 'a' handeln, und Sie können ähnliche Logik auf die vorhergehenden Bits anwenden.
Was aber, wenn es kein Ende gibt, von dem man ausgehen kann? Wenn das erste Bit 1 ist, wissen Sie, dass es nicht 'a' oder 'd' ist. Das zweite Bit eliminiert 'e' oder {'b', 'c', 'f'}. Das dritte Bit könnte es auf eine Auswahl bringen, aber wenn nicht, ist es durch das vierte Bit eindeutig.
Sobald Sie zu einer eindeutigen Sequenz gelangen, starten Sie den Algorithmus beim nächsten Bit neu.
quelle