Der Shannon-Fano-Code ist eine der Methoden zur Datenkomprimierung, die 1949 von Claude Shannon und Robert Fano entwickelt wurde. Diese Methode basiert auf dem Huffman-Baum, weist jedoch einige Unterschiede im Komprimierungsalgorithmus auf.
Die Grundidee des Shannon-Fano-Codes besteht darin, die Menge der übertragenen Daten in zwei ungefähr gleiche Gruppen aufzuteilen, basierend auf ihren Wahrscheinlichkeiten des Auftretens. Als nächstes wird eine rekursive Teilungsroutine angewendet, bis ein Element in jeder Gruppe erreicht ist.
Nachdem alle Elemente der Menge vollständig in Untergruppen aufgeteilt wurden, wird jeder Gruppe ein eindeutiges Codezeichen zugewiesen, das das entsprechende Element ersetzt. Ein Codesymbol für eine Gruppe wird gebildet, indem das Bit 0 an das Codesymbol der linken Gruppe und das Bit 1 an das Codesymbol der rechten Gruppe angehängt wird.
Der Shannon-Fano-Code hat Vorteile gegenüber anderen Datenkomprimierungsmethoden wie dem Huffman-Code. Es ermöglicht eine höhere Entropie und Komprimierungseffizienz, insbesondere für Daten mit ungleichen Auftretenwahrscheinlichkeiten.
Grundbegriff
Präfixcode - Dies ist eine Codierung, bei der kein codiertes Wort das Präfix eines anderen codierten Wortes ist. Diese Codierung vermeidet Mehrdeutigkeiten bei der Decodierung und vereinfacht die Datenverarbeitung.
Häufigkeit des Symbols - Dies ist die Anzahl der Male, die ein bestimmtes Zeichen in der ursprünglichen Nachricht gefunden wird. Zeichenfrequenzen werden verwendet, um Codewörter in der Shannon-Fano-Codierung zu definieren.
Zeichensequenz - Dies ist eine Folge von Zeichen, die die ursprüngliche Nachricht darstellt. Die ursprüngliche Nachricht wird in Zeichensequenzen unterteilt, für die jeweils ein Shannon-Fano-Code erstellt wird.
Codewort - Dies ist eine Folge von Bits, die jeder Zeichensequenz entsprechen. Codewörter werden auf der Grundlage von Zeichenfrequenzen erstellt und im Prozess der Shannon-Fano-Codierung definiert.
Rekursive Trennung - Dies ist ein Prozess, bei dem Symbole in zwei Gruppen aufgeteilt werden, um eine Annäherung an eine perfekte gleichmäßige Frequenzverteilung zu erreichen. Dies ist ein grundlegender Schritt im Shannon-Fano-Kodierungsalgorithmus.
Arbeitsprinzip
Der Shannon-Fano-Code basiert auf dem Prinzip der Aufteilung des Alphabets von Zeichen in zwei leistungsunabhängige Gruppen. Zunächst wird das gesamte Alphabet in absteigender Wahrscheinlichkeit nach Zeichen sortiert. Die Symbole werden dann in zwei Gruppen unterteilt, so dass die Summe der Wahrscheinlichkeiten der Symbole in der ersten Gruppe ungefähr der Summe der Wahrscheinlichkeiten der Symbole in der zweiten Gruppe entspricht. In diesem Schritt erreicht der Raum möglicher Trennungen die minimale Entropie.
Anschließend wird der Teilungsprozess für jede Symbolgruppe rekursiv wiederholt. Die Symbolgruppe ist in zwei Untergruppen unterteilt, so dass die Summe der Wahrscheinlichkeiten der Symbole in jeder Untergruppe ungefähr gleich ist.
Nach der Aufteilung des Alphabets in Gruppen werden die Zeichen codiert. Zeichen aus der ersten Gruppe erhalten die Bezeichnung Code 0 und Zeichen aus der zweiten Gruppe die Bezeichnung Code 1. Dieser Prozess tritt auch für jede Untergruppe von Zeichen rekursiv auf, bis Codes für alle Zeichen abgerufen werden.
Mit dem Shannon-Fano-Code können Sie Informationen komprimieren, indem Sie einen kürzeren Code für die am häufigsten vorkommenden Zeichen und einen längeren Code für weniger wahrscheinliche Zeichen verwenden. Die Shannon-Fano-Codierung wird häufig im Bereich der Datenkomprimierung eingesetzt, um die Menge der übertragenen Informationen zu reduzieren.
Schritte des Algorithmus
Die Grundidee des Algorithmus besteht darin, dass wahrscheinlichere Zeichen kürzere Codes erhalten und weniger wahrscheinliche Zeichen längere Codes erhalten. Der Algorithmus besteht aus den folgenden Schritten:
- Berechnen Sie die Wahrscheinlichkeit jedes Zeichens in der ursprünglichen Nachricht.
- Sortieren Sie die Symbole absteigend nach Wahrscheinlichkeit.
- Teilen Sie die sortierte Liste der Zeichen rekursiv in zwei Gruppen auf, bis jede Gruppe nur ein Zeichen enthält.
- Weisen Sie allen Zeichen in der ersten Gruppe einen Bitwert von 0 zu, und weisen Sie allen Zeichen in der zweiten Gruppe einen Bitwert von 1 zu.
- Wiederholen Sie die Schritte 3-4 für jede Zeichengruppe, bis Sie die endgültige Codierung für jedes Zeichen erhalten haben.
Der resultierende Shannon-Fano-Code kann zum Komprimieren von Daten verwendet werden, sodass die ursprüngliche Nachricht kompakter dargestellt werden kann, ohne Informationen zu verlieren.
Vor- und Nachteile
- Vorteile:
- 2. Potenziell effektive Komprimierung - Der Shannon-Fano-Algorithmus ermöglicht unter bestimmten Bedingungen eine hohe Datenkomprimierung.
- 3. Unterstützung für verschiedene Datentypen - Der Shannon-Fano-Algorithmus kann auf verschiedene Datentypen angewendet werden, einschließlich Text- und numerischer Daten.
- 4. Anwendung in Kommunikationssystemen - Der Shannon-Fano-Code wird häufig in Telekommunikationssystemen verwendet, um Daten zu komprimieren, die über ein Netzwerk übertragen werden.
- Nachteile:
- 1. Unvollständige Komprimierung - Der Shannon-Fano-Code erreicht nicht immer die maximale Komprimierung der Daten, da er die Wiederholungsrate der Zeichen nicht berücksichtigt.
- 2. Abhängigkeit von statistischen Daten - Um den Shannon-Fano-Code effektiv anwenden zu können, ist es erforderlich, die statistischen Daten über die Häufigkeit des Auftretens von Zeichen im Quelldatensatz zu kennen.
Beispiel-Implementierung
Betrachten Sie ein Beispiel für die Arbeit des Shannon-Fano-Codes in der folgenden Zeichensequenz:
Ursprüngliche Sequenz: ABRACADABRA
Schritt 1: Zählen der Häufigkeit von Zeichen
In diesem Beispiel wird das Zeichen 'A' 5-mal, das Zeichen 'B' 2-mal, das Zeichen 'R' 2-mal, das Zeichen 'C' 1-mal und das Zeichen 'D' 1-mal getroffen.
Schritt 2: Sortieren der Zeichen in absteigender Häufigkeit
Die Symbole werden wie folgt sortiert: 'A' (5), 'B' (2), 'R' (2), 'C' (1), 'D' (1).
Schritt 3: Zeichen in zwei Gruppen aufteilen
Bei jedem Schritt wählen wir das Symbol mit der maximalen Frequenz aus und fügen es der ersten Gruppe hinzu. Wählen Sie dann das Symbol mit der nächsten maximalen Frequenz aus und fügen Sie es der zweiten Gruppe hinzu. Wir setzen diesen Vorgang fort, bis alle Zeichen in Gruppen eingeteilt sind.
Erste Gruppe: 'A' (5), 'B' (2)
Zweite Gruppe: 'R' (2), 'C' (1), 'D' (1)
Schritt 4: Zuweisen von Codes
Für die erste Gruppe weisen wir Codes zu, die mit 0 beginnen, und für die zweite Gruppe Codes, die mit 1 beginnen.
Symbole der ersten Gruppe: 'A' Code ist 0, 'B' Code ist 1
Zeichen der zweiten Gruppe: 'R' Code - 00, 'C' Code - 01, 'D' Code - 10
Schritt 5: Ersetzen von Zeichen durch Codes
Ersetzen Sie die ursprüngliche Zeichensequenz durch die entsprechenden Codes.
Verschlüsselte Sequenz: 0100010010000010100100
Die resultierende verschlüsselte Sequenz von Zeichen durch den Shannon-Fano-Code.