Shannon-Fano, der codiert

Im Feld der Datenkompression ist Shannon-Fano, der, genannt nach Claude Shannon und Robert Fano codiert, eine Technik, für einen Präfix-Code zu bauen, der auf einer Reihe von Symbolen und ihren Wahrscheinlichkeiten gestützt ist (geschätzt oder gemessen). Es ist im Sinn suboptimal, dass es die niedrigstmögliche erwartete Codewortlänge wie Huffman nicht erreicht, der codiert; jedoch verschieden von Huffman, der codiert, versichert es wirklich, dass alle Codewortlängen innerhalb von einem Bit ihres theoretischen Ideales sind. Die Technik wurde in Shannon "Eine Mathematische Theorie der Kommunikation", sein 1948-Artikel vorgeschlagen, der das Feld der Informationstheorie einführt. Die Methode wurde Fano zugeschrieben, der sie später als ein technischer Bericht veröffentlicht hat.

Shannon-Fano, der codiert, sollte mit Shannon nicht verwirrt sein, der codiert, die Codiermethode hat gepflegt, den geräuschlosen Codierlehrsatz von Shannon, oder mit Shannon-Fano-Elias zu beweisen, der (auch bekannt als Elias codiert, der codiert), der Vorgänger zum arithmetischen Codieren.

In Shannon-Fano, der codiert, werden die Symbole in der Ordnung vom wahrscheinlichsten bis am wenigsten wahrscheinlichen eingeordnet, und haben sich dann in zwei Sätze geteilt, deren Gesamtwahrscheinlichkeiten so nah sind wie möglich daran, gleich zu sein. Alle Symbole haben dann die ersten Ziffern ihrer zugeteilten Codes; Symbole im ersten Satz erhalten "0", und Symbole im zweiten Satz erhalten "1". So lange irgendwelche Sätze mit mehr als einem Mitglied bleiben, wird derselbe Prozess auf jenen Sätzen wiederholt, um aufeinander folgende Ziffern ihrer Codes zu bestimmen. Als ein Satz auf ein Symbol natürlich reduziert worden ist, bedeutet das, dass der Code des Symbols abgeschlossen ist und das Präfix des Codes keines anderen Symbols bilden wird.

Die Algorithmus-Arbeiten, und erzeugt es ziemlich effiziente variable Länge encodings; wenn die zwei kleineren durch ein Verteilen erzeugten Sätze tatsächlich der gleichen Wahrscheinlichkeit sind, hat das ein Bit der Information gepflegt, sie zu unterscheiden, wird am effizientesten verwendet. Leider erzeugt Shannon-Fano optimale Präfix-Codes nicht immer; der Satz von Wahrscheinlichkeiten {0.35, 0.17, 0.17, 0.16, 0.15} ist ein Beispiel von demjenigen, das nichtoptimale Codes von Shannon-Fano zugeteilt wird, der codiert.

Deshalb wird Shannon-Fano fast nie verwendet; Huffman, der codiert, ist fast als rechenbetont einfach und erzeugt Präfix-Codes, die immer die niedrigste erwartete Codewortlänge unter den Einschränkungen erreichen, dass jedes Symbol durch einen einer integrierten Zahl von Bit gebildeten Code vertreten wird. Das ist eine Einschränkung, die häufig nicht benötigt ist, da die Codes der Länge nach in langen Folgen gepackt sein werden. Wenn wir Gruppen von Codes auf einmal denken, ist Symbol-für-Symbol-Huffman, der codiert, nur optimal, wenn die Wahrscheinlichkeiten der Symbole unabhängig sind und etwas Macht von einem halben sind, d. h.. In den meisten Situationen kann das arithmetische Codieren größere gesamte Kompression erzeugen entweder als Huffman oder als Shannon-Fano, da es in Bruchzahlen von Bit verschlüsseln kann, die näher dem wirklichen Informationsinhalt des Symbols näher kommen. Jedoch hat das arithmetische Codieren Huffman die Weise nicht ersetzt, wie Huffman Shannon-Fano ersetzt, sowohl weil das arithmetische Codieren mehr rechenbetont teuer ist, als auch weil es durch vielfache Patente bedeckt wird.

Shannon-Fano, der codiert, wird in der Kompressionsmethode verwendet, die ein Teil des Dateiformats ist.

Algorithmus von Shannon-Fano

Ein Baum von Shannon-Fano wird gemäß einer Spezifizierung gebaut, die entworfen ist, um einen wirksamen Codetisch zu definieren. Der wirkliche Algorithmus ist einfach:

  1. Für eine gegebene Liste von Symbolen, entwickeln Sie eine entsprechende Liste von Wahrscheinlichkeiten oder Frequenzzählungen, so dass die Verhältnisfrequenz jedes Symbols des Ereignisses bekannt ist.
  2. Sortieren Sie die Listen von Symbolen gemäß der Frequenz, mit den am häufigsten vorkommenden Symbolen am verlassenen und dem am wenigsten allgemeinen am Recht.
  3. Teilen Sie die Liste in zwei Teile mit den Gesamtfrequenzzählungen des linken Teils, der als der Summe des Rechts als möglich nah ist.
  4. Der linke Teil der Liste wird die binäre Ziffer 0 zugeteilt, und der richtige Teil wird die Ziffer 1 zugeteilt. Das bedeutet, dass die Codes für die Symbole im ersten Teil alle mit 0 anfangen werden, und die Codes im zweiten Teil alle mit 1 anfangen werden.
  5. Wenden Sie rekursiv die Schritte 3 und 4 auf jede der zwei Hälften an, Gruppen unterteilend und Bit zu den Codes hinzufügend, bis jedes Symbol ein entsprechendes Codeblatt auf dem Baum geworden ist.

Algorithmus von Huffman

Der Algorithmus von Shannon-Fano erzeugt keinen optimalen Code immer. 1952 hat David A. Huffman einen verschiedenen Algorithmus gegeben, der immer einen optimalen Baum für irgendwelche gegebenen Wahrscheinlichkeiten erzeugt. Während der Baum von Shannon-Fano von der Wurzel bis die Blätter, die Algorithmus-Arbeiten von Huffman von Blättern bis die Wurzel in der entgegengesetzten Richtung geschaffen wird.

  1. Schaffen Sie einen Blatt-Knoten für jedes Symbol und fügen Sie es zur Frequenz des Ereignisses hinzu.
  2. Während es mehr als einen Knoten in der Warteschlange gibt:
  3. Entfernen Sie die zwei Knoten der niedrigsten Wahrscheinlichkeit oder Frequenz von der Warteschlange
  4. Prepend 0 und 1 beziehungsweise zu jedem Code, der bereits diesen Knoten zugeteilt ist
  5. Schaffen Sie einen neuen inneren Knoten mit diesen zwei Knoten als Kinder und mit der der Summe der Wahrscheinlichkeiten der zwei Knoten gleichen Wahrscheinlichkeit.
  6. Fügen Sie den neuen Knoten zur Warteschlange hinzu.
  7. Der restliche Knoten ist der Wurzelknoten, und der Baum ist abgeschlossen.

Beispiel

Das Verwenden derselben Frequenzen bezüglich des Beispiels von Shannon-Fano oben, nämlich:

:

In diesem Fall hat D & E die niedrigsten Frequenzen und wird so 0 und 1 beziehungsweise zugeteilt und zusammen mit einer vereinigten Wahrscheinlichkeit 0.28205128 gruppiert. Das niedrigste Paar ist jetzt B und C, so werden sie 0 und 1 zugeteilt und zusammen mit einer vereinigten Wahrscheinlichkeit 0.33333333 gruppiert. Das reist v. Chr. und DE jetzt mit den niedrigsten Wahrscheinlichkeiten ab, so 0 und 1 sind prepended zu ihren Codes und sie verbunden werden. Das reist dann gerade A und BCDE ab, die 0 und 1 prepended beziehungsweise haben und dann verbunden werden. Das verlässt uns mit einem einzelnen Knoten, und unser Algorithmus ist abgeschlossen.

Die Codelängen für die verschiedenen Charaktere dieses Mal sind 1 Bit für A und 3 Bit für alle anderen Charaktere.

:

Läuft auf 1 Bit für A und pro 3 Bit für B, C, D und E eine durchschnittliche Bit-Zahl von hinaus

:

Referenzen

Links


Pepin von Landen / Das arithmetische Codieren
Impressum & Datenschutz