1.1 Präfixfreie Codes: Huffman Codes
Wir wollen das Steuerungsprotokoll für eine kleine Mini-Drohne entwerfen. Sie soll acht Befehle verstehen:
forward, backward, turn left, turn right, up, down
Wir wollen nun die Menge codieren
, also
eine Funktion
forward | 000 |
backward | 001 |
turn left | 010 |
turn right | 011 |
up | 100 |
down | 101 |
Wir können also jedes
forward | 0 |
backward | 1 |
turn left | 00 |
turn right | 01 |
up | 10 |
down | 11 |
Das Problem ist nun, dass wir Bitfolge wie 0010 nicht eindeutig decodieren können.
Es könnte [turn left, up] sein, aber auch [turn left, backward, forward].
Welche Eigenschaft braucht
Definition 1.1.1
Sei
Eine Funktion
Der Code im ersten Beispiel ist präfixfrei; der im zweiten nicht. Hier ist ein weiterer Code:
forward | 000 |
backward | 001 |
turn left | 01 |
turn right | 10 |
up | 110 |
down | 111 |
Um Codes und präfixfreie Codes über
Ganz einfach: die Wurzel ist
Und zum Spaß noch ein vierter Code:
Übungsaufgabe 1.1.1
Sei
Welche Schranke bekommen Sie, wenn Sie nicht verlangen, dass
Erwartete Codelänge
Welcher der obigen Codes ist nun der Beste? Es ist ziemlich klar, dass Code 3 in jeder Hinsicht
besser ist als Code 1:
es gilt
Definition 1.1.2 Sei
Wenn wir
Beispiel. Nehmen wir eine Wahrscheinlichkeitsverteilung
forward | 000 | 0 | |
backward | 001 | 101 | |
turn left | 01 | 110 | |
turn right | 10 | 111 | |
up | 110 | 1000 | |
down | 111 | 1001 |
Die erwartete Codelänge von
Für
Für Verteilung
Übungsaufgabe 1.1.2
Finden Sie eine Verteilung
Optimale Codes: Huffman-Coding
Wenn wir nun eine Verteilung
- Initialisierung. Erschaffe für jedes
einen Baum , der nur aus einem Wurzelknoten besteht, welcher selbst ist. Das Gewicht von sei . Sei die Menge dieser Bäume. - while
:-
Wähle zwei Bäume
mit den kleinsten Gewichten . - Erschaffe einen Binärbaum
mit einem neuen Wurzelknoten und linkem Teilbaum und rechtem Teilbaum . - Setze
. - Beschrifte die Kante von
zu mit und die nach mit .
-
Wähle zwei Bäume
- Nun hat
die Größe , also . - Die Blätter von
sind genau die Elemente . - Setze
die Folge von Beschriftungen entlang des Pfades von der Wurzel zum Blatt - return
Hier ein Beispiellauf mit
unserer Menge
Theorem 1.1.3
Der Code
Beweis.
Wir verwenden Induktion über
Wenn
Die Mengen
Behauptung:
Beweis:
Wir betrachten die erwartete Tiefe von
Nach Induktion ist
Nun gilt
Die
Somit sehen wir: der Hufmman-Algorithmus findet den optimalen präfixfreien Code für eine gegebene Wahrscheinlichkeitsverteilung. In den nächsten Kapiteln werden wir sehen, wie sich das zur Entropie verhält, einem fundamentalen Komplexitätsmaß von Wahrscheinlichkeitsverteilungen.