830 likes | 1.03k Views
Codes & Formate. Digitales Koffer packen. Mit Huffman Codierung. Lernziele. Sie können erklären, warum es normalerweise zwei Schritte braucht um Information möglichst effizient zu speichern, bzw. zu übermitteln
E N D
Digitales Koffer packen Mit Huffman Codierung
Lernziele • Sie können erklären, warum es normalerweise zwei Schritte braucht um Information möglichst effizient zu speichern, bzw. zu übermitteln • Sie können erklären, warum die Verteilung der Zeichen in einer Nachricht einen entscheidenden Einfluss darauf hat, wie effizient diese Nachricht komprimiert werden kann • Sie wissen, was eine Huffman Codierung ist und können sie auf eine kurze Textnachricht anwenden
Aufgabenstellung: • Sie wollen ihrem Freund eine Text-Botschaft übermitteln, können dazu aber nur Zahlen verwenden (entscheiden Sie selbst ob sie Dezimal- oder Binärzahlen benutzen). • Überlegen Sie sich eine Methode, wie die gegebene Botschaft möglichst genauund möglichst kompaktin Zahlen übersetzt werden kann. Dann erstellen Sie zwei Textdokumente: • Ein Dokument soll nur die Zahlenfolge enthalten • Im anderen Dokument formulieren Sie eine Anleitung, mit deren Hilfe ihr Freund die ursprüngliche Botschaft aus der Zahlenfolge rekonstruieren kann
Auswertung • Hat es geklappt? • Was war schwierig? • Welche Informationen wurden übermittelt? (genau?) • Wie viele Zahlen waren nötig? (kompakt?) • Welche anderen Botschaften könnten so verschickt werden? • Welche grundsätzliche Idee steckt hinter dieser Methode?
Information Genau & Kompakt Codieren Komprimieren Koffer packen (Komprimieren von Information) • Koffer (~ Format) so wählen, dass alles eingepackt werden kann, was man im Urlaub vielleicht brauchen könnte • Ziel: Der Koffer soll für alle Urlaube geeignet sein! • Effizient packen, so dass möglichst wenig Luft im Koffer bleibt kann davon abhängen, was genau eingepackt wurde! • Ziel: Der Koffer für diesen Urlaub soll möglichst klein werden!
Effizientes Packen von Buchstaben • Codieren von Buchstaben als binäre Codewörter • ASCII Code • Komprimieren der Bitsequenz • z.B. Huffman Codierung • kürzere Sequenz + neue Codewörter • Speichern oder Übermitteln • Dekomprimieren • Decodieren -> Darstellen
ASCII (American Standard Code for Information Interchange) Kleinbuchstaben:
Arbeitsauftrag Ihr Ziel ist herauszufinden, wie die Huffman Codierung funktioniert und sie selbst anwenden zu können • Benutzen Sie dazu das Applet: WindowsHuffmanShannonFano.jar • Experimentieren Sie mit dem Applet (nur Huffman Code) und versuchen Sie, die Fragen im Arbeitsblatt zu beantworten
Besprechung • Suchen Sie sich einen Partner und tauschen Sie ihre Ergebnisse aus • Notieren Sie alles, was ihnen beiden noch unklar ist • Können Sie die grundsätzliche Idee formulieren?
Lernziele • Sie können erklären, warum es normalerweise zwei Schritte braucht um Information möglichst effizient zu speichern, bzw. zu übermitteln • Sie können erklären, warum die Verteilung der Zeichen in einer Nachricht einen entscheidenden Einfluss darauf hat, wie effizient diese Nachricht komprimiert werden kann • Sie wissen, was eine Huffman Codierung ist und können sie auf eine kurze Textnachricht anwenden
Grundsätzliche Idee bei Huffman • Häufige Zeichen (Buchstaben) werden in kurze Codewörter übersetzt • Das funktioniert nur, wenn der entstehende Code (die Codewörter) präfixfrei ist! • Die Bäumchen-Taktik zeigt, wie man diese Ideen umsetzt.
Lernziele • Sie könne eine kurze Nachricht entschlüsseln, die mit dem Huffman Verfahren komprimiert wurde • Sie können erklären, was ein präfixfreier Code ist • Sie können beschreiben, für welche Nachrichten die Huffman Komprimierung besonders geeignet ist • Sie kennen einige Vor- und Nachteile von Datenkomprimierung
Huffman Decodierung • Die binäre Nachricht: 0100111101001110010100111110 • Die Codewörter: e = 110 d = 111 o = 00 p = 010 s = 011 u = 100 c = 101 Hinweis: Am einfachsten ist es, wenn Sie sich zunächst den zu den Codewörtern gehörenden Baum aufzeichnen
Und was daran war jetzt präfixfrei? o = 00 p = 010 s = 011 u = 100 c = 101 e = 110 d = 111
Pseudocode • ... ist eine sprachliche Mischung aus natürlicher Sprache, mathematischer Notation und einer höheren Programmier-sprache • arrayMax(A, n) • // Input: Ein Array A, der n Integer Werte enthält • // Output: Das maximale Element in A • currentMax = A[0] • for i = 1 to n - 1 • if currentMax < A[i] • currentMax = A[i] • end • end • return currentMax
decodieren(nachricht_bin, codewortliste) // Input: die Bitsequenz nachricht_bin und // eine Liste, die binären Codeworten Zeichen zuordnet // Output: nachricht_txt; die decodierte Nachricht, eine Sequenz von Zeichen nachricht_txt = leer; länge = 1; while (nachricht_bin != leer) zeichen_bin = get_first_n_bits(nachricht_bin, länge); if found_in(zeichen_bin, codewortliste) zeichen_txt = get_letter(zeichen_bin, codewortliste) nachricht_txt = attach_letter(zeichen_txt); nachricht_bin = delete_first_n_bits(länge); länge = 1; else länge ++; end end return nachricht_txt;
Pseudocode für Huffman Codierung codieren(nachricht_ascii) // Input: die Bitsequenz nachricht_ascii, bestend aus einer Sequenz von ASCII Zeichen (jeweils ein Byte) // Output: nachricht_bin; die codierte Nachricht, eine Bitsequenz // codewortliste; eine Liste, die binären Codeworten ASCII Zeichen zuordnet
Komprimierung allgemein Komprimieren, z.B. mit Huffman Codierung Dekomprimieren, z.B. mit Huffman Decodierung Welche Informationen braucht es hier? speichern /verschicken
Huffman Komprimierung • ASCII Nachricht in 8-er Blöcke aufteilen, zählen wie oft jeder Block vorkommt • Blöcke nach Häufigkeit ordnen • Mit Huffman Baum präfixfreie Codewortliste erstellen • ASCII Nachricht nach Huffman übersetzen, siehe Liste • Bitsequenz & Liste in File speichern, evtl. verschicken • Auch transportiert werden muss die Information, dass dieses File Huffman-codiert ist
Fragen zu Huffman & Komprimierung • Was ist die grundlegende Idee hinter Huffman Komprimierung? • Wann ist Huffman am effizientesten? • Wann lohnt sich Huffman sicher nicht? • Warum benutzt z.B. Word kein Huffman Komprimierung? • Was wären andere grundlegende Ideen zu Komprimierung von Daten? (Erklären Sie anhand eines Beispiels) • Was sind allgemeine Vorteile von Datenkomprimierung? • Was sind allgemeine Nachteile der Datenkomprimierung?
Lernziele • Sie verstehen, was Hamlet mit dem zersplitternden Weinglas zu tun hat, und wie beide mit der Huffman Kodierung zusammenhängen • Sie kennen die allgemeine Form der Huffman Kodierung
Was ist eigentlich Information? • Was ist das kleinstmögliche Bisschen an Information? Sein oder nicht Sein, das ist hier die Frage.
Ein BIT ist: • eine Bezeichnung für eine Binärziffer (üblicherweise „0“ und „1“). • eine Maßeinheit für die Datenmenge bei digitaler Speicherung von Daten. Die Datenmenge entspricht in diesem Fall der verwendeten Anzahl von binären Variablen zur Abbildung der Information. • eine Maßeinheit für den Informationsgehalt (siehe Shannon). Dabei ist 1 Bit der Informationsgehalt, der in einer Auswahl aus zwei gleich wahrscheinlichen Möglichkeiten enthalten ist. • Thereare 10 sorts of people: • thosewho unterstand binary and • thosewho do not.
Ordnen Sie diese Bitsequenzen nach Informationsgehalt (aufsteigend) • 0101010101010101... • 1111111111111111... • 0110001101100101... • 0010111001100101... • 0000000011111111... • 0011001100110011...
Ordnen Sie diese Bitsequenzen nach Informationsgehalt (aufsteigend) • 0101010101010101... 2. • 1111111111111111... 1. (= 1 Bit) • 0110001101100101... 4c • 0010111001100101... 4b (ASCII = ce) • 0000000011111111... 4a • 0011001100110011... 3.
Entropie ist • eine physikalische Zustandsgröße in der Thermodynamik • ein Maß für den mittleren Informationsgehalt oder auch Informationsdichte eines Zeichensystems • Warum sollte uns das interessieren? Huffman Komprimierung ist das Paradebeispiel für eine Entropiecodierung
Entropie & Wahrscheinlichkeit • Der Normalzustand (= maximale Entropie) ist die Gleichverteilung • Abweichungen von der Gleichverteilung bedeuten: • es gibt eine gewisse Ordnung, Struktur • man kann es kompakter beschreiben 0100011110101010100101010101 0000000000000011111111111111 was ist wahrscheinlicher? was trägt mehr Information?
Berechnen der Informationsdichte • H = Entropie • Z = endliches Alphabet von Zeichen • z = ein einzelnes Zeichen • p = Auftretenswahrscheinlichkeit (=Häufigkeit z/Gesamthäufigkeit) Für das deutsche Alphabet: Eine perfekte Komprimierung würde diesen Entropiewert erreichen
Wozu brauchen wir das? • ASCII Nachricht in 8-er Blöcke aufteilen, zählen wie oft jeder Block vorkommt • Blöcke nach Häufigkeit ordnen • Mit Huffman Baum präfixfreie Codewortliste erstellen • ASCII Nachricht nach Huffman übersetzen, siehe Liste • Bitsequenz & Liste in File speichern, evtl. verschicken • Auch transportiert werden muss die Information, dass dieses File Huffman-codiert ist 0101010101010101... 1111111111111111... 0110001101100101... 0010111001100101... 0000000011111111... 0011001100110011... Was, wenn wir nicht wissen ob es ASCII Zeichen sind? (z.B. beim zippen)
Wozu brauchen wir das? • Entropie wird pro Zeichen berechnet - aber was ist ein Zeichen? 8er: 01100011 01100101 4er: 0110 0011 0110 0101 0101010101010101... 1111111111111111... 0110001101100101... 0010111001100101... 0000000011111111... 0011001100110011... noch allgemeiner: konditionelle Entropie Normierung für unterschiedliche Block-, bzw. Zeichenlängen
Huffman generalisiert • Binäre Nachricht durch Entropietests/Schätzung darauf analysieren, welche Bits ein Zeichen bilden sollten, so dass sich die niedrigste Entropie ergibt • Binäre Nachricht in Zeichen aufteilen, zählen wie oft jedes Zeichen vorkommt • Blöcke nach Häufigkeit ordnen • Mit Huffman Baum präfixfreie Codewortliste erstellen • Binäre Nachricht nach Huffman übersetzen, s. Liste • Bitsequenz & Liste in File speichern, evtl. verschicken • Auch transportiert werden muss die Information, dass dieses File Huffman-codiert ist
Entropiecodierung bedeutet • mit einer Entropieschätzung herausfinden, welche Abschnitte der originalen Bitsequenz man als Zeichen ansehen sollte • diese Zeichen dann so in präfixfreie Codewörter übersetzen, dass den häufigsten Zeichen die kürzesten Codewörter zugeordnet werden ACHTUNG: trade-off der Listengrösse berücksichtigen!
Entropiecodierung ist • eine allgemeine Methode um zu bestimmen, wie viel Luft im Koffer ist, und den Koffer dann so umzupacken, dass möglicht wenig Luft verbleibt • wie Legomodell verpacken. Zuerst muss man herausfinden, in wie kleine Teile man es zerlegen soll, und dann braucht man eine Methode, um diese Teile effizient ineinander zu stapeln
Huffman Codierung • ist die wohl am weitesten verbreitete Art der Entropiecodierung • wird oft als letzter Schritt auf beliebige Bitsequenzen angewandt • ist nur annähernd optimal. Bsp: völlig zufällige Sequenz mit drei mal mehr Nullen als Einsen • - (1/4*lg(1/4)+3/4*lg(3/4)) = 0.811278 Bit/Zeichen(=Bit) • weniger als ein Bit geht aber nicht, die beiden kürzest möglichen Codewörter haben jeweils ein Bit • Lösung: Arithmetische Codierung
Arithmetische Codierung (Zusatz) • Die gesamte Nachricht in einer einzigen Zahl ... • ... ausserdem braucht es die Zeichen und ihre Frequenz ... • ... und einen schnellen Computer A = 0.6 B = 0.3 C = 0.1 D = 0.1 Zahl = 0.536 Nachricht = ACD
Lernziele - erreicht?? • Sie verstehen, was Hamlet mit dem zersplitternden Weinglas zu tun hat, und wie beide mit der Huffman Kodierung zusammenhängen • Sie kennen die allgemeine Form der Huffman Kodierung Zusatz: • Sie können erklären • a) warum die Block-Entropie einer Bitsequenz am kleinsten ist, wenn man die gesamte Sequenz als einen einzigen Block (= ein Zeichen) ansieht • b) warum es trotzdem keinen Sinn macht, die ganze Sequenz als eine einziges Zeichen zu kodieren
Lernziele • Sie kennen die allgemeine Definition von Codierung • Sie wissen, was ein (Datei-) Format ist – und warum die meisten Formate einen header haben • Sie können eine Binäre Repräsentation für das Speichern eines Spielzustands entwickeln • Sie verstehen, wie die Begriffe Information, Code und Format zusammenhängen
Komprimierung allgemein Komprimieren, z.B. mit Huffman Codierung Dekomprimieren, z.B. mit Huffman Decodierung Welche Informationen braucht es hier? speichern /verschicken
Information Genau & Kompakt Codieren Komprimieren Koffer packen (Komprimieren von Information) • Koffer (~ Format) so wählen, dass alles eingepackt werden kann, was man im Urlaub vielleicht brauchen könnte • Ziel: Der Koffer soll für alle Urlaube geeignet sein! • Effizient packen, so dass möglichst wenig Luft im Koffer bleibt kann davon abhängen, was genau eingepackt wurde! • Ziel: Der Koffer für diesen Urlaub soll möglichst klein werden!
Codieren Komprimierte digitale Information Digitale Information Digitale Information Nicht-digitale Information Nicht-digitale Information Komprimierte digitale Information Beispiel:„Fischers Fritz fischt frische...“ Entdigitalisieren?! Darstellen Digitalisieren Welche Informationen braucht es hier? Wie geht das? Entkomprimieren Komprimieren
Digitale Repräsentation von Schach • Was ist wichtig? • nur die Information, die einen Spielstande eindeutig definiert • Was ist möglich? • alle Spielstände müssen repräsentiert werden können • Wie packe ich es geschickt ein? • es geht nicht um maximale Effizienz, man muss aber trotzdem keinen Speicherplatz verschwenden oder: ein universeller digitale Koffer für Schach Vorschläge? Wie viele Bits brauchen Sie?
Ein Schach Format (.sch), 257 BIT • Das erste Bit gibt an, wer am Zug ist (1=schwarz, 0=weiss) • Die folgenden 256 Bit repräsentieren die Belegung der 64 Felder, mit jeweils 4 Bit pro Feld (nummeriert zeilenweise von links nach rechts, dann spaltenweise von oben nach unten). • Das erste Bit pro Feld steht für die Farbe der Figur: • Die letzten 3 Bit pro Feld stehen für die Figur, die hier steht: • 1 = schwarz • 000 = leer • 001 = Bauer • 010 = Turm • 011 = Springer • 0 = weiss • 100 = Pferd • 101 = Dame • 110 = König • 111 = steht für nichts
Ein Format für Schieber-Jass • Das Spiel: 4 Spieler haben zu Beginn je 9 Karten, spielen sie reihum aus, und nach jeder Runde wandern 4 Karten auf den einen oder anderen Stapel von gespielten Karten. • Aufgabe: erfinden Sie ein Format, mit dem jeder mögliche Zustand des Spiels binär repräsentiert werden kann. • Formulieren Sie von Ihnen erfundene Codierung so, dass ein anderer Schüler eine entsprechende Bitsequenz in den Spielzustand zurückübersetzen könnte • Geben Sie an, wie viele Bits für die Speicherung eines Spielzustands benötigt werden
Und wie passt das jetzt alles zusammen? Format Information Codierung