www.wikidata.de-de.nina.az
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen beispielsweise Einzelnachweisen ausgestattet Angaben ohne ausreichenden Beleg konnten demnachst entfernt werden Bitte hilf Wikipedia indem du die Angaben recherchierst und gute Belege einfugst Die Shannon Fano Kodierung ist eine Entropiekodierung Dabei kodiert man Zeichen entsprechend ihrer Auftrittshaufigkeit so dass sie eine moglichst kleine mittlere Wortlange besitzen Durch die Entropie der mittlere Informationsgehalt je Symbol ist eine untere Schranke gegeben Quellencodierungssatz Inhaltsverzeichnis 1 Grundidee 2 Shannon Fano 2 1 Beispiel 3 Pseudocode 3 1 Erzeugen des Codebuchs 4 Siehe auch 5 Weblinks 6 EinzelnachweiseGrundidee BearbeitenVon der Entropiekodierung her ist bekannt dass Zeichen mit einer unterschiedlichen Anzahl von Bits kodiert werden mussen wenn man eine speichersparende Darstellung erhalten mochte Es ist aber nicht moglich den Zeichen einfach beliebige Bitfolgen zuzuweisen und diese auszugeben Wird zum Beispiel das Zeichen A mit der Bitfolge 10 das Zeichen B mit der Folge 01 und C mit 0 kodiert dann wird die Zeichenkette ABC zu 10010 Diese Folge wird aber auch von der Zeichenkette ACA erzeugt Es ist also nicht mehr eindeutig erkennbar fur welche Zeichenfolge die Bitfolge 10010 steht Um diese Mehrdeutigkeit zu verhindern mussen 1 die den Zeichen zugewiesenen Bitfolgen prafixfrei sein d h keine Bitfolge die fur ein einzelnes Zeichen steht darf am Anfang eines anderen Zeichens stehen Diese Eigenschaft ist im oberen Beispiel nicht erfullt da die Bitfolge 0 die fur C steht am Anfang der B zugewiesenen Folge steht nbsp Prafixfreier CodeDie Grundidee ist einen vollen binaren Baum fur die Darstellung des Codes zu verwenden In dem Baum stehen die Blatter fur die zu kodierenden Zeichen wahrend der Pfad von der Wurzel zum Blatt die Bitfolge bestimmt Das Bild zeigt einen Baum der von der gewunschten Form ist Die inneren Knoten sind durchnummeriert um sie benennen zu konnen Um nun die Bitfolge zu ermitteln die fur eines der Zeichen stehen soll muss festgelegt werden wie die Abzweige kodiert werden sollen Eine Variante ist zu sagen dass linke Teilbaume mit einer 0 und rechte mit einer 1 kodiert werden Daraus folgen fur den Beispielbaum folgende Bitfolgen A B C D E00 01 100 101 11Genauso gut sind aber auch viele andere Kodierungen moglich Hier nur noch ein paar Beispiele A B C D E10 11 000 001 0111 10 010 011 0011 10 001 000 01Will man nun eine Zeichenfolge kodieren so werden die den entsprechenden Zeichen zugewiesenen Bitfolgen hintereinander ausgegeben Die Zeichenfolge ACDC wird mit der ersten Kodierung zu der Bitfolge 00100101100 Um diese Bitfolge zu dekodieren wird sie Bit fur Bit abgearbeitet Der Dekodierer muss sich dabei die aktuelle Position im Baum merken Gestartet wird an der Wurzel also im Knoten 1 Dann wird das erste Bit gelesen eine 0 Das bedeutet bei dieser Kodierung nach links der aktuelle Knoten wird also 2 Es folgt ein weiteres 0 Bit Der aktuelle Knoten ist jetzt A Es wird A ausgegeben und der aktuelle Knoten wieder auf 1 gesetzt Das als nachstes gelesene 1 Bit fuhrt dazu dass der aktuelle Knoten die 3 ist usw Das nun zu losende Problem ist es einen solchen Baum zu erstellen bei dem die durchschnittliche Anzahl der Fragen bis ein Zeichen eindeutig ermittelt ist im Mittel moglichst klein ist also moglichst dicht an der Entropie liegt Shannon Fano Kodierung und Huffman Kodierung sind zwei unterschiedliche Algorithmen zur Konstruktion dieser Baume Im Gegensatz zur Huffman Kodierung ist die Shannon Fano Kodierung nicht immer optimal Shannon Fano BearbeitenDer nach Claude Shannon und Robert Fano benannte Algorithmus arbeitet mit folgender Vorschrift Sortiere die Zeichen nach ihrer Haufigkeit Teile die Zeichen entlang dieser Reihenfolge so in zwei Gruppen dass die Summe der Haufigkeiten in den beiden Gruppen moglichst gleich ist Die beiden Gruppen entsprechen dem linken und rechten Teilbaum des zu erstellenden Shannon Baumes Die dabei entstandene Partitionierung ist nicht unbedingt die beste die mit den gegebenen Haufigkeiten zu erreichen ist Die beste Partitionierung ist auch gar nicht gesucht da diese nicht zwangsweise zu einem besseren Ergebnis fuhrt Worauf es ankommt ist dass die mittlere Abweichung von der Entropie der Zeichen moglichst klein ist Befindet sich mehr als ein Zeichen in einer der entstandenen Gruppen wende den Algorithmus rekursiv auf diese Gruppe an Das wichtige Element an diesem Algorithmus ist der erste Schritt Dieser sorgt dafur dass Zeichen mit ahnlichen Wahrscheinlichkeiten oft im selben Teilbaum enden Das ist wichtig da Knoten im selben Baum Bitfolgen mit ahnlichen Codelangen erhalten der maximale Unterschied kann nur die Anzahl der Knoten in diesem Baum betragen Sind die Wahrscheinlichkeiten nun sehr unterschiedlich kann man keine Bitfolgen mit den notwendigen Langenunterschieden erzeugen Das fuhrt dazu dass seltene Zeichen zu kurze Bitfolgen und haufige Zeichen zu lange Bitfolgen erhalten Beispiel Bearbeiten nbsp Shannon Fano BeispielDas Beispiel zeigt die Konstruktion des Shannon Codes fur ein kleines Alphabet Die funf zu kodierenden Zeichen haben folgende Haufigkeiten Zeichen A B C D EHaufigkeit 15 7 6 6 5Die Werte sind bereits sortiert als nachstes folgt die Partitionierung Am Anfang sind alle Zeichen in einer Partition im Bild a Die Halfte der Wahrscheinlichkeitssumme ist 19 5 15 ist 4 5 unter diesem Halbwert 15 7 hingegen nur 2 5 daruber eine bessere Partitionierung gibt es nicht Das Alphabet wird also so in 2 Teile unterteilt dass der eine Teil die Zeichen A und B und der andere Teil den Rest C D und E enthalt Bild b Beide Partitionen enthalten noch mehr als 1 Zeichen mussen also weiter zerteilt werden Die Partition mit A und B kann nur in 2 Teile mit je einem Zeichen zerlegt werden Die andere Gruppe hat 2 Moglichkeiten 6 6 ist weiter von der Mitte entfernt als 6 alleine Also wird in die zwei Partitionen mit C und D E unterteilt Bild c Schliesslich wird noch D und E zerteilt Der entstandene Entscheidungsbaum ist im Bild Abschnitt d dargestellt Den Zeichen A B und C wurden also 2 Bits D und E 3 Bits zugeordnet Die Auftrittswahrscheinlichkeit von A betragt 15 39 von B 7 39 von C sowie D 6 39 und von E 5 39 Somit ergibt sich fur die mittlere Codewortlange L C 2 15 7 6 3 6 5 39 2 28 Bit Zeichen displaystyle L C frac 2 cdot 15 7 6 3 cdot 6 5 39 approx 2 28 frac text Bit text Zeichen nbsp Da die Zuweisung nicht eindeutig ist hier ein Beispiel fur eine mogliche Kodierung aufgrund dieses Baumes Zeichen A B C D EKodierung 00 01 10 110 111Pseudocode BearbeitenDie folgenden Beispiele in Pseudocode zeigen Funktionen fur die Generierung der Shannon Fano Kodierung Erzeugen des Codebuchs Bearbeiten Diese rekursive Funktion erzeugt das Codebuch fur die Shannon Fano Kodierung indem sie jedem Index des Quellalphabet ein binares Codewort als Zeichenkette zuordnet nodes Array fur das Codebuch sum1 Summe der Wahrscheinlichkeiten von leftIndex bis zum rechten Ende von nodes sum2 Summe der Wahrscheinlichkeiten von rightIndex bis zum linken Ende von nodes difference1 difference2 function createDictionary leftIndex rightIndex nodes sum1 0 sum2 0 difference1 0 difference2 0 if leftIndex 1 rightIndex or leftIndex rightIndex or leftIndex gt rightIndex if leftIndex rightIndex or leftIndex gt rightIndex return nodes rightIndex codeword nodes rightIndex length 0 nodes leftIndex codeword nodes leftIndex length 1 return else for i leftIndex to rightIndex 1 do sum1 sum1 nodes i probability sum2 sum2 nodes rightIndex probability difference1 sum1 sum2 if difference1 lt 0 difference1 difference1 j 2 while j lt gt rightIndex leftIndex 1 k rightIndex j sum1 sum2 0 for i leftIndex to k 1 do sum1 sum1 nodes i probability for i rightIndex downto k 1 do sum2 sum2 nodes i probability difference2 sum1 sum2 if difference2 lt 0 difference2 difference2 1 if difference2 gt difference1 break difference1 difference2 j j 1 k for i leftIndex to k do nodes i codeword nodes i length 1 for i k 1 to rightIndex do nodes i codeword nodes i length 0 shannonFanoCoding leftIndex k nodes Rekusiver Aufruf fur den linken Teilbaum shannonFanoCoding k 1 rightIndex nodes Rekusiver Aufruf fur den rechten Teilbaum Siehe auch BearbeitenArithmetisches KodierenWeblinks BearbeitenLNTwww Huffman und Shannon Fano Codierung Georgia Institute of Technology Shannon Fano Elias Code Arithmetic CodeEinzelnachweise Bearbeiten Tatsachlich mussen sie nur eindeutig sein aber fur jeden eindeutigen Code existiert auch ein prafixfreier Code mit identischer Codewortlange Abgerufen von https de wikipedia org w index php title Shannon Fano Kodierung amp oldid 235385412