„Ich hoffe, es werden Ew. Hochfürstliche Durchlaucht in Gnaden vermerken, daß ich sowohl dem Gebrauche, als meinem Gemüths=Triebe zu Folge, bei dem eingetretenen neuen Jahre, auf dieses und viele folgende, Denenselben in beständiger Gesundheit alle selbst verlangende hohe Fürstliche Ersprießlichkeit zu gemeinem und Dero Lande besondern Besten, aus treuem Herzen anwünsche.“ Brief vom 2. Januar 1697 an den Herzog von Braunschweig-Wolfenbüttel GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 1 / 74 „Ich hoffe, es werden Ew. Hochfürstliche Durchlaucht in Gnaden vermerken, daß ich sowohl dem Gebrauche, als meinem Gemüths=Triebe zu Folge, bei dem eingetretenen neuen Jahre, auf dieses und viele folgende, Denenselben in beständiger Gesundheit alle selbst verlangende hohe Fürstliche Ersprießlichkeit zu gemeinem und Dero Lande besondern Besten, aus treuem Herzen anwünsche.“ Brief vom 2. Januar 1697 an den Herzog von Braunschweig-Wolfenbüttel von Gottfried Wilhelm Leibniz (1646–1716) Philosoph, Mathematiker, Physiker, Bibliothekar, . . . GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 1 / 74 Grundbegriffe der Informatik Einheit 8: Codierungen Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 2 / 74 Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 3 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Dezimaldarstellung von Zahlen Andere Zahldarstellungen Von Zahlen zu ihren Darstellungen Von einem Alphabet zum anderen Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 4 / 74 Dezimaldarstellung von Zahlen Ziffern des Alphabetes Z 10 = {0, . . . , 9}. Bedeutung einzelner Ziffer x als Zahl num10 (x ): x num10 (x ) GBI — Grundbegriffe der Informatik 0 1 2 null eins zwei ··· ··· 8 9 acht neun KIT, Institut für Theoretische Informatik 5 / 74 Dezimaldarstellung von Zahlen Ziffern des Alphabetes Z 10 = {0, . . . , 9}. Bedeutung einzelner Ziffer x als Zahl num10 (x ): x num10 (x ) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ∗ Bedeutung einer Ziffernfolge x k−1 · · · x 0 ∈ Z 10 ∗ Num10 : Z 10 → N0 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 5 / 74 Dezimaldarstellung von Zahlen Ziffern des Alphabetes Z 10 = {0, . . . , 9}. Bedeutung einzelner Ziffer x als Zahl num10 (x ): x num10 (x ) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ∗ Bedeutung einer Ziffernfolge x k−1 · · · x 0 ∈ Z 10 ∗ Num10 : Z 10 → N0 Num10 (x k−1 · · · x 1x 0 ) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 5 / 74 Dezimaldarstellung von Zahlen Ziffern des Alphabetes Z 10 = {0, . . . , 9}. Bedeutung einzelner Ziffer x als Zahl num10 (x ): x num10 (x ) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ∗ Bedeutung einer Ziffernfolge x k−1 · · · x 0 ∈ Z 10 ∗ Num10 : Z 10 → N0 Num10 (x k−1 · · · x 1x 0 ) = 10k −1 · num10 (x k−1 ) + · · · + 101 · num10 (x 1 ) + 100 · num10 (x 0 ) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 5 / 74 Dezimaldarstellung von Zahlen Ziffern des Alphabetes Z 10 = {0, . . . , 9}. Bedeutung einzelner Ziffer x als Zahl num10 (x ): x num10 (x ) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ∗ Bedeutung einer Ziffernfolge x k−1 · · · x 0 ∈ Z 10 ∗ Num10 : Z 10 → N0 Num10 (x k−1 · · · x 1x 0 ) = 10k−1 · num10 (x k−1 ) + · · · + 101 · num10 (x 1 ) + 100 · num10 (x 0 ) = 10 10k −2 · num10 (x k −1 ) + · · · + 100 · num10 (x 1 ) + num10 (x 0 ) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 5 / 74 Dezimaldarstellung von Zahlen Ziffern des Alphabetes Z 10 = {0, . . . , 9}. Bedeutung einzelner Ziffer x als Zahl num10 (x ): x num10 (x ) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ∗ Bedeutung einer Ziffernfolge x k−1 · · · x 0 ∈ Z 10 ∗ Num10 : Z 10 → N0 Num10 (x k−1 · · · x 1x 0 ) = 10k−1 · num10 (x k−1 ) + · · · + 101 · num10 (x 1 ) + 100 · num10 (x 0 ) = 10 10k −2 · num10 (x k −1 ) + · · · + 100 · num10 (x 1 ) + num10 (x 0 ) = 10 · Num10 (x k −1 · · · x 1 ) + num10 (x 0 ) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 5 / 74 Dezimaldarstellung von Zahlen Ziffern des Alphabetes Z 10 = {0, . . . , 9}. Bedeutung einzelner Ziffer x als Zahl num10 (x ): x num10 (x ) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ∗ Bedeutung einer Ziffernfolge x k−1 · · · x 0 ∈ Z 10 ∗ Num10 : Z 10 → N0 Num10 (ε ) = 0 für jedes w ∈ ∗, Z 10 für jedes x ∈ Z 10 : Num10 (wx ) = 10 · Num10 (w ) + num10 (x ) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 5 / 74 Induktive Definitionen — „über die Wortlänge“ Abbildungen z. B. der Form f : A∗ → M definiere induktiv für jede Wortlänge n ∈ N0 f (v) für jedes v ∈ An „Definitionsanfang“: Wortlänge n = 0 definiere f (ε) „Definitionsschritt“: für jede Wortlänge n von n nach n + 1 für jedes v ∈ An+1 definiere f (v) und benutze dabei schon f (w ) für w ∈ An jedes v ∈ An+1 ist von der Form wx (bzw. xw) für w ∈ An und x ∈ A GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 6 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Dezimaldarstellung von Zahlen Andere Zahldarstellungen Von Zahlen zu ihren Darstellungen Von einem Alphabet zum anderen Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 7 / 74 Gottfried Wilhelm Leibniz: zwei Ziffern reichen aus! geboren 1. Juli 1646 in Leipzig gestorben am 14. November 1716 in Hannover baute erste Maschine, die zwei Zahlen multiplizieren konnte Beobachtung mit nur zwei Ziffern 0 und 1 kann man alle nichtnegativen Zahlen darstellen und vernünftig rechnen Bildquelle http://commons.wikimedia.org/wiki/Image:Leibniz_binary_system_1703.png GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 8 / 74 Binärdarstellung von Zahlen — Stellenwertsystem zur Basis 2 Ziffernmenge Z 2 = {0, 1} definiere: num2 (0) = 0 und num2 (1) = 1 und Num2 (ε) = 0 für jedes w ∈ Z 2∗ , für jedes x ∈ Z 2 : Num2 (wx ) = 2 · Num2 (w ) + num2 (x ) Num2 (1101) = 2 · Num2 (110) + 1 = 2 · (2 · Num2 (11) + 0) + 1 = 2 · (2 · (2 · Num2 (1) + 1) + 0) + 1 = 2 · (2 · (2 · (2 · Num2 (ε) + 1) + 1) + 0) + 1 = 2 · (2 · (2 · (2 · 0 + 1) + 1) + 0) + 1 = 23 · 1 + 22 · 1 + 21 · 0 + 20 · 1 = 13 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 9 / 74 Binärdarstellung von Zahlen — Stellenwertsystem zur Basis 2 Ziffernmenge Z 2 = {0, 1} definiere: num2 (0) = 0 und num2 (1) = 1 und Num2 (ε) = 0 für jedes w ∈ Z 2∗ , für jedes x ∈ Z 2 : Num2 (wx ) = 2 · Num2 (w ) + num2 (x ) Num2 (1101) = 2 · Num2 (110) + 1 = 2 · (2 · Num2 (11) + 0) + 1 = 2 · (2 · (2 · Num2 (1) + 1) + 0) + 1 = 2 · (2 · (2 · (2 · Num2 (ε) + 1) + 1) + 0) + 1 = 2 · (2 · (2 · (2 · 0 + 1) + 1) + 0) + 1 = 23 · 1 + 22 · 1 + 21 · 0 + 20 · 1 = 13 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 9 / 74 Binärdarstellung von Zahlen — Stellenwertsystem zur Basis 2 Ziffernmenge Z 2 = {0, 1} definiere: num2 (0) = 0 und num2 (1) = 1 und Num2 (ε) = 0 für jedes w ∈ Z 2∗ , für jedes x ∈ Z 2 : Num2 (wx ) = 2 · Num2 (w ) + num2 (x ) Num2 (1101) = 2 · Num2 (110) + 1 = 2 · (2 · Num2 (11) + 0) + 1 = 2 · (2 · (2 · Num2 (1) + 1) + 0) + 1 = 2 · (2 · (2 · (2 · Num2 (ε) + 1) + 1) + 0) + 1 = 2 · (2 · (2 · (2 · 0 + 1) + 1) + 0) + 1 = 23 · 1 + 22 · 1 + 21 · 0 + 20 · 1 = 13 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 9 / 74 Hexadezimaldarstellung oder Sedezimaldarstellung Ziffern Z 16 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. x num16 (x ) 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 x num16 (x ) 8 9 A B C D E F 8 9 10 11 12 13 14 15 Zuordnung von Wörtern zu Zahlen gegeben durch Num16 (ε ) = 0 ∗ , für jedes x ∈ Z : für jedes w ∈ Z 16 16 Num16 (wx ) = 16 · Num16 (w ) + num16 (x ) Num16 (20A) = 2 · 162 + 0 · 161 + 10 · 160 = 522 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 10 / 74 Hexadezimaldarstellung oder Sedezimaldarstellung Ziffern Z 16 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. x num16 (x ) 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 x num16 (x ) 8 9 A B C D E F 8 9 10 11 12 13 14 15 Zuordnung von Wörtern zu Zahlen gegeben durch Num16 (ε ) = 0 ∗ , für jedes x ∈ Z : für jedes w ∈ Z 16 16 Num16 (wx ) = 16 · Num16 (w ) + num16 (x ) Num16 (20A) = 2 · 162 + 0 · 161 + 10 · 160 = 522 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 10 / 74 Hexadezimaldarstellung oder Sedezimaldarstellung Ziffern Z 16 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. x num16 (x ) 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 x num16 (x ) 8 9 A B C D E F 8 9 10 11 12 13 14 15 Zuordnung von Wörtern zu Zahlen gegeben durch Num16 (ε ) = 0 ∗ , für jedes x ∈ Z : für jedes w ∈ Z 16 16 Num16 (wx ) = 16 · Num16 (w ) + num16 (x ) Num16 (20A) = 2 · 162 + 0 · 161 + 10 · 160 = 522 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 10 / 74 Ein kleines Problem die Alphabete Z 2 , Z 3 , usw. sind nicht disjunkt Darstellungen mehrdeutig Num2 (111) die Zahl sieben Num8 (111) die Zahl dreiundsiebzig Num10 (111) die Zahl einhundertelf Num16 (111) die Zahl zweihundertdreiundsiebzig in manchen Programmiersprachen Präfix 0b für Darstellungen zur Basis 2 Präfix 0o für Darstellungen zur Basis 8 Präfix 0x für Darstellungen zur Basis 16 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 11 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Dezimaldarstellung von Zahlen Andere Zahldarstellungen Von Zahlen zu ihren Darstellungen Von einem Alphabet zum anderen Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 12 / 74 Noch offene Frage: Ist jede Zahl darstellbar? eben: zu jedem Wort dargestellte Zahl definierbar (und „berechenbar“) nun: zu jeder Zahl eine Darstellung definierbar (und „berechenbar“) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 13 / 74 k-äre Darstellung von Zahlen Es sei k ∈ N0 mit k ≥ 2. Alphabet Z k mit k Ziffern Bedeutung: die Zahlen in Zk für i ∈ Zk sei reprk (i) das entsprechende Zeichen reprk ist also gerade die Umkehrfunktion zu numk gesehen Numk : Z k∗ → N0 gesucht Reprk : N0 → Z k∗ Repräsentation von n ∈ N0 als w ∈ Z k∗ mit Numk (w ) = n für die naheliegende Definition von Numk Redeweisen binäre Darstellung falls k = 2 ternäre Darstellung falls k = 3 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 14 / 74 Operationen div und mod es sei x ∈ N0 und y ∈ N+ x mod y Rest der ganzzahligen Division von x durch y 0 ≤ x mod y < y x div y Ergebnis der ganzzahligen Division von x durch y für jedes x ∈ N0 und jedes y ∈ N+ gilt x = y · (x div y) + (x mod y) Beispiele 6 div 2 = 3 7 div 2 = 3 8 div 2 = 4 GBI — Grundbegriffe der Informatik und 6 mod 2 = 0 und 7 mod 2 = 1 und 8 mod 2 = 0 KIT, Institut für Theoretische Informatik 15 / 74 k-äre Darstellung von Zahlen (2) Es sei k ∈ N0 und k ≥ 2. Reprk : N0 → Z k reprk (n) n 7→ Repr (n div k ) · repr (n mod k ) k k falls n < k falls n ≥ k kann man auch so schreiben Reprk (n div k ) · reprk (n mod k ) n 7→ Repr (n div k ) · repr (n mod k ) k k falls n < k falls n ≥ k Ist das eine Definition? GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 16 / 74 Die Definition von Reprk ist sinnvoll. (1) Reprk : N0 → Z k reprk (n) n 7→ Repr (n div k ) · repr (n mod k ) k k falls n < k falls n ≥ k Behauptung: Für jedes n ∈ N0 ist Reprk (n) definiert. GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 17 / 74 Die Definition von Reprk ist sinnvoll. (1) Reprk : N0 → Z k reprk (n) n 7→ Repr (n div k ) · repr (n mod k ) k k falls n < k falls n ≥ k Behauptung: Für jedes n ∈ N0 ist Reprk (n) definiert. Behauptung: Für jedes m ∈ N+ gilt: Für jedes n ∈ N0 mit n < k m ist Reprk (n) definiert. Beweis durch vollständige Induktion GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 17 / 74 Die Definition von Reprk ist sinnvoll. (2) reprk (n) Reprk (n) = Repr (n div k ) · repr (n mod k ) k k falls n < k falls n ≥ k Behauptung: Für jedes m ∈ N+ gilt: Für jedes n ∈ N0 mit n < k m ist Reprk (n) definiert. Ind.anfang: m = 1, also n < k: X Ind.Schritt: sei m ∈ N+ und gelte: Ind.vor. für jedes n ∈ N0 mit n < k m ist Reprk (n) definiert. zeige: für jedes n ∈ N0 mit n < k m+1 ist Reprk (n) definiert. falls sogar n < k m : X wegen I.V. falls k m ≤ n < k m+1 : dann n div k < k m (k ≥ 2 !), also nach I.V. Reprk (n div k ) definiert, also auch Reprk (n) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 18 / 74 Numk ist linksinvers zu Reprk (1) Lemma. Für jedes n ∈ N0 ist Numk (Reprk (n)) = n „umgekehrt“ im allgemeinen Reprk (Numk (w )) , w weil „überflüssige“ führende Nullen wegfallen. Beweis: ähnliche vollständige Induktion wie eben GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 19 / 74 Numk ist linksinvers zu Reprk (2) Lemma. Für jedes n ∈ N0 ist Numk (Reprk (n)) = n. Ind.anfang: für jedes n ∈ N0 mit n < k: X Ind.schritt: Es sei m ∈ N+ . Unter der Ind.vor.: für jedes n ∈ N0 mit n < k m ist Numk (Reprk (n)) = n zeige: für jedes n ∈ N0 mit n < k m+1 ist Numk (Reprk (n)) = n. falls sogar n < k m : X wegen I.V. falls k m ≤ n < k m+1 : dann n div k < k m , also nach I.V. Numk (Reprk (n div k )) = n div k, also auch Numk (Reprk (n)) = Numk (Reprk (k (n div k ) + (n mod k ))) = Numk (Reprk (n div k ) · reprk (n mod k )) = k · Numk (Reprk (n div k )) + numk (reprk (n mod k )) nach I.V. GBI — Grundbegriffe der Informatik = k (n div k ) + (n mod k ) = n KIT, Institut für Theoretische Informatik 20 / 74 Numk ist linksinvers zu Reprk (2) Lemma. Für jedes n ∈ N0 ist Numk (Reprk (n)) = n. Ind.anfang: für jedes n ∈ N0 mit n < k: X Ind.schritt: Es sei m ∈ N+ . Unter der Ind.vor.: für jedes n ∈ N0 mit n < k m ist Numk (Reprk (n)) = n zeige: für jedes n ∈ N0 mit n < k m+1 ist Numk (Reprk (n)) = n. falls sogar n < k m : X wegen I.V. falls k m ≤ n < k m+1 : dann n div k < k m , also nach I.V. Numk (Reprk (n div k )) = n div k, also auch Numk (Reprk (n)) = Numk (Reprk (k (n div k ) + (n mod k ))) = Numk (Reprk (n div k ) · reprk (n mod k )) = k · Numk (Reprk (n div k )) + numk (reprk (n mod k )) nach I.V. GBI — Grundbegriffe der Informatik = k (n div k ) + (n mod k ) = n KIT, Institut für Theoretische Informatik 20 / 74 Numk ist linksinvers zu Reprk (2) Lemma. Für jedes n ∈ N0 ist Numk (Reprk (n)) = n. Ind.anfang: für jedes n ∈ N0 mit n < k: X Ind.schritt: Es sei m ∈ N+ . Unter der Ind.vor.: für jedes n ∈ N0 mit n < k m ist Numk (Reprk (n)) = n zeige: für jedes n ∈ N0 mit n < k m+1 ist Numk (Reprk (n)) = n. falls sogar n < k m : X wegen I.V. falls k m ≤ n < k m+1 : dann n div k < k m , also nach I.V. Numk (Reprk (n div k )) = n div k, also auch Numk (Reprk (n)) = Numk (Reprk (k (n div k ) + (n mod k ))) = Numk (Reprk (n div k ) · reprk (n mod k )) = k · Numk (Reprk (n div k )) + numk (reprk (n mod k )) nach I.V. GBI — Grundbegriffe der Informatik = k (n div k ) + (n mod k ) = n KIT, Institut für Theoretische Informatik 20 / 74 Numk ist linksinvers zu Reprk (2) Lemma. Für jedes n ∈ N0 ist Numk (Reprk (n)) = n. Ind.anfang: für jedes n ∈ N0 mit n < k: X Ind.schritt: Es sei m ∈ N+ . Unter der Ind.vor.: für jedes n ∈ N0 mit n < k m ist Numk (Reprk (n)) = n zeige: für jedes n ∈ N0 mit n < k m+1 ist Numk (Reprk (n)) = n. falls sogar n < k m : X wegen I.V. falls k m ≤ n < k m+1 : dann n div k < k m , also nach I.V. Numk (Reprk (n div k )) = n div k, also auch Numk (Reprk (n)) = Numk (Reprk (k (n div k ) + (n mod k ))) = Numk (Reprk (n div k ) · reprk (n mod k )) = k · Numk (Reprk (n div k )) + numk (reprk (n mod k )) nach I.V. GBI — Grundbegriffe der Informatik = k (n div k ) + (n mod k ) = n KIT, Institut für Theoretische Informatik 20 / 74 Numk ist linksinvers zu Reprk (2) Lemma. Für jedes n ∈ N0 ist Numk (Reprk (n)) = n. Ind.anfang: für jedes n ∈ N0 mit n < k: X Ind.schritt: Es sei m ∈ N+ . Unter der Ind.vor.: für jedes n ∈ N0 mit n < k m ist Numk (Reprk (n)) = n zeige: für jedes n ∈ N0 mit n < k m+1 ist Numk (Reprk (n)) = n. falls sogar n < k m : X wegen I.V. falls k m ≤ n < k m+1 : dann n div k < k m , also nach I.V. Numk (Reprk (n div k )) = n div k, also auch Numk (Reprk (n)) = Numk (Reprk (k (n div k ) + (n mod k ))) = Numk (Reprk (n div k ) · reprk (n mod k )) = k · Numk (Reprk (n div k )) + numk (reprk (n mod k )) nach I.V. GBI — Grundbegriffe der Informatik = k (n div k ) + (n mod k ) = n KIT, Institut für Theoretische Informatik 20 / 74 Numk ist linksinvers zu Reprk (2) Lemma. Für jedes n ∈ N0 ist Numk (Reprk (n)) = n. Ind.anfang: für jedes n ∈ N0 mit n < k: X Ind.schritt: Es sei m ∈ N+ . Unter der Ind.vor.: für jedes n ∈ N0 mit n < k m ist Numk (Reprk (n)) = n zeige: für jedes n ∈ N0 mit n < k m+1 ist Numk (Reprk (n)) = n. falls sogar n < k m : X wegen I.V. falls k m ≤ n < k m+1 : dann n div k < k m , also nach I.V. Numk (Reprk (n div k )) = n div k, also auch Numk (Reprk (n)) = Numk (Reprk (k (n div k ) + (n mod k ))) = Numk (Reprk (n div k ) · reprk (n mod k )) = k · Numk (Reprk (n div k )) + numk (reprk (n mod k )) nach I.V. GBI — Grundbegriffe der Informatik = k (n div k ) + (n mod k ) = n KIT, Institut für Theoretische Informatik 20 / 74 Unübliche Methode für negative Zahlen — mit der Ziffer „meins“ Ziffernmenge Z = { , 0, 1} 1 1 definiere num : Z → Z 7→ −1 0 7→ 0 1 7→ 1 definiere Num : Z ∗ → Z „wie üblich“: Num(ε ) = 0 ∀w ∈ Z ∀x ∈ Z : Num(wx ) = 3 · Num(w ) + num(x ) ∗ dann z. B. 1 1 Num( 01) = −32 + 0 + 30 = −8 Num(1 01) = +33 − 32 + 0 + 30 = 19 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 21 / 74 Unübliche Methode für negative Zahlen — Negation und Addition/Subtraktion sind ganz einfach definere inv : Z ∗ → Z ∗ 1 1 inv(1) = , inv( ) = 1 und inv(0) = 0. inv(ε ) = ε und für jedes w ∈ Z ∗ : für jedes x ∈ Z : inv(wx ) = inv(w )inv(x ) also z. B. inv(1 01) = 10 1 1 1 dann gilt für alle w ∈ Z ∗ : Num(inv(w )) = −Num(w ). GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 22 / 74 Rechnen in Zk (1) Es sei k ∈ N0 mit k ≥ 2. binäre Operationen auf Zk ; für jedes x, y ∈ Zk sei x +k y = (x + y) mod k x −k y = (x − y) mod k üblicherweise schreibt man + statt +k (und − statt −k ) Lemma. Für jedes x, y ∈ N0 ist (x ± y) mod k = (x mod k ) ±k (y mod k ) . Beweis: sei x = kq x + r x und y = kqy + ry mit r x , ry ∈ Zk : (x ± y) mod k = (kq x ± kqy + r x ± ry ) mod k = (r x ± ry ) mod k = r x ±k ry GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 23 / 74 Rechnen in Zk (2) — graphisch: Zahlen als Pfeile kreisförmige Darstellung von Z16 15 0 1 14 2 13 3 12 4 11 5 10 6 9 8 7 Addition x +k y Pfeile für x und y „hintereinander setzen“ (Anfang an Spitze) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 24 / 74 Rechnen in Zk (2) — graphisch: Zahlen als Pfeile kreisförmige Darstellung von Z16 15 0 1 14 2 13 3 12 6 +16 3 = 9 4 11 5 10 6 9 8 7 Addition x +k y Pfeile für x und y „hintereinander setzen“ (Anfang an Spitze) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 24 / 74 Rechnen in Zk (2) — graphisch: Zahlen als Pfeile kreisförmige Darstellung von Z16 15 0 1 14 2 13 3 12 4 11 5 10 14 +16 3 = 1 6 9 8 7 Addition x +k y Pfeile für x und y „hintereinander setzen“ (Anfang an Spitze) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 24 / 74 Rechnen in Zk (2) — graphisch: Zahlen als Pfeile kreisförmige Darstellung von Z16 15 0 1 14 2 13 3 12 4 11 5 10 4 −16 7 = 13 6 9 8 7 Addition x +k y Pfeile für x und y „hintereinander setzen“ (Anfang an Spitze) Subtraktion x −k y: Pfeile für x und y „nebeneinander setzen“ (Spitze an Spitze) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 24 / 74 Zahldarstellungen mit beschränkter fester Länge in Rechnern üblich Mima benutzt 24 Bits (siehe Kapitel 10) Länge ` ∈ N+ , ` ≥ 2 (zu) einfache Idee: bin` : Z2` → {0, 1} ` bin` (n) = 0`− |Repr2 (n) | Repr2 (n) |bin` (n)| = ` und Num2 (bin` (n)) = n GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 25 / 74 Negative Zahlen — Pfeile in die entgegengesetzte Richtung kreisförmige Darstellung von Z16 15 0 1 14 2 13 3 12 4 11 5 10 6 9 GBI — Grundbegriffe der Informatik 8 7 KIT, Institut für Theoretische Informatik 26 / 74 Negative Zahlen — Pfeile in die entgegengesetzte Richtung kreisförmige Darstellung von K4 (Definition gleich) -1 0 1 -2 2 -3 3 -4 4 -5 5 -6 6 -7 GBI — Grundbegriffe der Informatik -8 7 KIT, Institut für Theoretische Informatik 26 / 74 Negative Zahlen — Pfeile in die entgegengesetzte Richtung kreisförmige Darstellung von K4 (Definition gleich) -1 0 1 -2 2 -3 3 -4 6 „+“ 3 = −7 4 -5 5 -6 6 -7 -8 7 Addition x „+“ y (und auch Subtraktion) analog zum Fall Zk GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 26 / 74 Negative Zahlen — Pfeile in die entgegengesetzte Richtung kreisförmige Darstellung von K4 (Definition gleich) -1 0 1 -2 2 -3 3 -4 4 -5 5 -6 −2 „+“ 3 = 1 6 -7 -8 7 Addition x „+“ y (und auch Subtraktion) analog zum Fall Zk GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 26 / 74 Negative Zahlen — Pfeile in die entgegengesetzte Richtung kreisförmige Darstellung von K4 (Definition gleich) -1 0 1 -2 2 -3 3 -4 4 -5 5 -6 3 „+“ −2 = 1 6 -7 -8 7 Addition x „+“ y (und auch Subtraktion) analog zum Fall Zk GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 26 / 74 Darstellung auch negativer Zahlen Z16 in Binärdarstellung 1111 1110 15 0000 0 0001 0010 1 14 2 1101 0011 13 3 1100 12 4 0100 11 5 1011 0101 10 1010 6 9 1001 GBI — Grundbegriffe der Informatik 8 1000 7 0110 0111 KIT, Institut für Theoretische Informatik 27 / 74 Darstellung auch negativer Zahlen K4 in Zweierkomplementdarstellung 1111 1110 -1 0000 0 0001 0010 1 -2 2 1101 0011 -3 3 1100 -4 4 0100 -5 5 1011 0101 -6 1010 6 -7 1001 GBI — Grundbegriffe der Informatik -8 1000 7 0110 0111 KIT, Institut für Theoretische Informatik 27 / 74 Zweierkomplement-Darstellung — für negative und nichtnegative Zahlen für die Zahlen in K` = {x ∈ Z | −2`−1 ≤ x ≤ 2`−1 − 1} K2 = {−2, −1, 0, 1} K8 = {−128, −127, . . . , −1, 0, 1, . . . , 127} Zkpl` : K` → {0, 1} ` 0bin`−1 (x ) Zkpl` (x ) = 1bin`−1 (2`−1 + x ) falls x ≥ 0 falls x < 0 äquivalent bin` (x ) Zkpl` (x ) = bin` (2` + x ) GBI — Grundbegriffe der Informatik falls x ≥ 0 falls x < 0 KIT, Institut für Theoretische Informatik 28 / 74 Das ist wichtig Das sollten Sie mitnehmen: Umwandlungen zwischen Zahlen und Wörtern schon Leibniz kannte die Binärdarstellung Zweierkomplement-Darstellung Das sollten Sie üben: selber Zahlen verschieden repräsentieren Definitionen auch in Randfällen ausprobieren GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 29 / 74 Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 30 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Übersetzung von Zahldarstellungen Homomorphismen Beispiel Unicode: UTF-8 Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 31 / 74 Von Hexadezimal- zu Binärdarstellung ∗ → Z ∗ mit betrachte Trans2,16 : Z 16 2 Trans2,16 (w ) = Repr2 (Num16 (w )) Beispiel Trans2,16 (A3) = Repr2 (Num16 (A3)) = Repr2 (163) = 10100011 wesentlicher Punkt: A3 und 10100011 haben die gleiche Bedeutung nämlich die Zahl einhundertdreiundsechzig So etwas wollen wir eine Übersetzung nennen. GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 32 / 74 Übersetzungen — bedeutungserhaltende Abbildungen von Wörtern auf Wörter Wörter aus Sprache L A ⊆ A∗ haben meist Bedeutung. Menge Sem von Bedeutungen Zahlen Ausführungen von Java-Programmen ... GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 33 / 74 Übersetzungen — bedeutungserhaltende Abbildungen von Wörtern auf Wörter Wörter aus Sprache L A ⊆ A∗ haben meist Bedeutung. Menge Sem von Bedeutungen Zahlen Ausführungen von Java-Programmen ... Gegeben: Alphabete A und B L A ⊆ A∗ und L B ⊆ B ∗ Abbildungen semA : L A → Sem und semB : L B → Sem f : L A → L B heiße eine Übersetzung wenn für jedes w ∈ L A : semA (w ) = semB ( f (w )) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 33 / 74 Trans2,16 — eine Übersetzung Trans2,16 = Repr2 ◦ Num16 . ∗. einfacher Fall: L A = A∗ = Z 2∗ und L B = B ∗ = Z 16 Bedeutungsfunktionen: semA = Num16 und semB = Num2 Nachrechnen, dass Trans2,16 eine Übersetzung ist: semB ( f (w )) = Num2 (Trans2,16 (w )) = Num2 (Repr2 (Num16 (w ))) = Num16 (w ) = semA (w ) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 34 / 74 Wozu Übersetzungen GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 35 / 74 Wozu Übersetzungen Legalität: nur bestimmter Zeichensatz erlaubt Lesbarkeit: vergleiche A3 mit 10100011 Verschlüsselung: nicht verbesserte Lesbarkeit, sondern gar keine Lesbarkeit . . . für Außenstehende siehe Vorlesungen über Kryptographie Kompression: Übersetzungen können kürzer sein und zwar ohne größeres Alphabet in diesem Kapitel: Huffman-Codes Fehlererkennung und Fehlerkorrektur: durch Übersetzung Text länger so, dass u. U. Fehlererkennung oder gar Fehlerkorrektur möglich siehe Vorlesungen über Codierungstheorie GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 35 / 74 Codierungen — injektive Übersetzungen semA (w ) = semB ( f (w )) manchmal kein Problem Verschlüsselung, manche Kompressionsverfahren wenn f injektiv von f (x ) eindeutig zurück zu x dann semB definierbar durch semB ( f (x )) = semA (x ) Codierung: Übersetzung mit injektivem f Codewörter: die f (w ) Code: { f (w ) | w ∈ L A } GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 36 / 74 Wie spezizifiziert man eine Übersetzung? wenn L A unendlich kann man nicht alle Möglichkeiten aufzählen . . . Auswege: Homomorphismen Block-Codierungen GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 37 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Übersetzung von Zahldarstellungen Homomorphismen Beispiel Unicode: UTF-8 Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 38 / 74 Homomorphismen — mit Konkatenation verträgliche Abbildungen gegeben Abbildung h : A∗ → B ∗ für Alphabete A und B h Homomorphismus, falls für jedes w 1 , w 2 ∈ A∗ gilt: h(w 1w 2 ) = h(w 1 )h(w 2 ) . Beispiel: es sei h(a) = 10 und h(b) = 001 dann h(bab) = h(ba) · h(b) = h(b) · h(a) · h(b) = 001 · 10 · 001 Homomorphismus ε-frei, wenn für jedes x ∈ A : h(x ) , ε. GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 39 / 74 Homomorphismen lassen das leere Wort unverändert Homomorphismus h : A∗ → B ∗ , also für jedes w 1 , w 2 ∈ A∗ : h(w 1w 2 ) = h(w 1 )h(w 2 ) . kurze Überlegung h(ε ) = h(εε ) = h(ε )h(ε ) also |h(ε)| = |h(ε)| + |h(ε )| also |h(ε)| = 0 also h(ε ) = ε GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 40 / 74 Homomorphismen — die Bilder einzelner Symbole legen alles fest Lemma. Es seien A und B Alphabete und h : A∗ → B ∗ und д : A∗ → B ∗ Homomorphismen. Wenn für jedes x ∈ A gilt, dass h(x ) = д(x ) ist, dann gilt für jedes w ∈ A ∗ , dass h(w ) = д(w ) ist. Beweis durch vollständige Induktion über die Wortlänge Induktionsanfang: w = ε h(ε ) = ε = д(ε) Induktionsschritt: Es seien w ∈ A∗ und x ∈ A und es gelte die Induktionsvoraussetzung h(w ) = д(w ). GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 41 / 74 Homomorphismen — die Bilder einzelner Symbole legen alles fest (2) Induktionsschritt: Es seien w ∈ A∗ und x ∈ A und es gelte die Induktionsvoraussetzung h(w ) = д(w ). dann gilt auch h(wx ) = h(w )h(x ) GBI — Grundbegriffe der Informatik da h Homomorphismus = д(w )h(x ) Induktionsvoraussetzung = д(w )д(x ) Voraussetzung des Lemmas = д(wx ) da д Homomorphismus KIT, Institut für Theoretische Informatik 42 / 74 Homomorphismen — so legen die Bilder einzelner Symbole alles fest Es seien A und B Alphabete und f : A → B ∗ . definiere f ∗∗ : A∗ → B ∗ vermöge f ∗∗ (ε) = ε für jedes w ∈ A∗ , für jedes x ∈ A : f ∗∗ (wx ) = f ∗∗ (w ) f (x ) Lemma. f ∗∗ ist ein Homomorphismus. Beweis durch vollständige Induktion . . . f ∗∗ heißt der durch f induzierte Homomorphismus GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 43 / 74 Präfixfreie Codes gegeben Homomorphismus h : A∗ → B ∗ Frage: Ist h Codierung, also injektiv? im allgemeinen nicht ganz einfach zu sehen einfacher Spezialfall: h ist präfixfrei Das bedeutet: für keine zwei verschiedene Symbole x 1 , x 2 ∈ A gilt: h(x 1 ) ist ein Präfix von h(x 2 ). gleich: präfixfreie Codes sind injektiv GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 44 / 74 Präfixfreie Codes: Decodierung Problem: nicht alle w ∈ B ∗ sind Codewort d. h. h ist im allgemeinen nicht surjektiv damit Decodierung u trotzdem total ⊥ }) ∗ . definiere u : B ∗ → (A ∪ {⊥ ∗ wenn w ∈ B nicht Codewort, dann soll in u (w ) das Symbol ⊥ vorkommen lies: „undefiniert“ Beispiel Homomorphismus h : {a, b, c}∗ → {0, 1}∗ mit h(a) = 1, h(b) = 01, h(c) = 001 (präfixfrei) u : {0, 1}∗ → {a, b, c, ⊥ }∗ es soll gelten: u (001) = c u (0101) = bb u (0) = ⊥ o. ä. GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 45 / 74 Präfixfreie Codes: Decodierung (2) wir schreiben mal hin (und diskutieren das anschließend): ε, au (w 0 ), u (w ) = bu (w 0 ), cu (w 0 ), ⊥ , falls w falls w falls w falls w sonst =ε = 1w 0 = 01w 0 = 001w 0 sei w = 100101 = h(acb); wir rechnen: u (100101) = au (00101) = acu (01) = acbu (ε) = acb GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 46 / 74 Präfixfreie Codes: Decodierung (3) ε au (w 0 ) u (w ) = bu (w 0 ) cu (w 0 ) ⊥ falls w falls w falls w falls w sonst =ε = 1w 0 = 01w 0 = 001w 0 u (100101) = au (00101) = acu (01) = acbu (ε ) = acb Warum hat das geklappt? GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 47 / 74 Präfixfreie Codes: Decodierung (3) ε au (w 0 ) u (w ) = bu (w 0 ) cu (w 0 ) ⊥ falls w falls w falls w falls w sonst =ε = 1w 0 = 01w 0 = 001w 0 u (100101) = au (00101) = acu (01) = acbu (ε ) = acb Warum hat das geklappt? In jedem Schritt war klar, welche Zeile der Definition von u anzuwenden war . . . GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 47 / 74 Präfixfreie Codes: Decodierung (4) Man spricht hier von Wohldefiniertheit Problem, wenn Funktionswert potenziell „auf mehreren Wegen“ festgelegt dann klar machen: entweder nur ein Weg „gangbar“ oder auf allen Wegen gleicher Funktionswert präfixfreien Code kann man so decodieren: ε u (w ) = x u (w 0 ) ⊥ falls w = ε falls w = h(x )w 0 für ein x ∈ A sonst „so einfach“ geht das nur für präfixfreie Codes GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 48 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Übersetzung von Zahldarstellungen Homomorphismen Beispiel Unicode: UTF-8 Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 49 / 74 UTF-8 Codierung von Unicode — ein Homomorphismus Codierung einzelner Zeichen: kommt gleich Wörter werden zeichenweise codiert. UTF-8 ist präfixfrei GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 50 / 74 UTF-8 — Auszug aus RFC 3629 Char. number range (hexadecimal) UTF-8 octet sequence 0xxxxxxx 110xxxxx 10xxxxxx 0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0000 0000 - 0000 007F 0000 0080 - 0000 07FF Determine the number of octets required . . . Prepare the high-order bits of the octets . . . Fill in the bits marked x . . . Start by putting the lowest-order bit of the character number in the lowest-order position of the last octet of the sequence, then . . . When last octet filled in, move on to the next to last octet, . . . präfixfrei GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 51 / 74 Beispiel: UTF-8 Codierung des Integralzeichens R Unicode Codepoint 0x222B benutze also die Zeile Char. number range UTF-8 octet seq. 0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 0x222B in Bits 0010 0010 0010 1011 also 0010 0010 0010 1011 = 0010 001000 101011 also UTF-8 Codierung 11100010 10001000 10101011 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 52 / 74 Das ist wichtig Das sollten Sie mitnehmen: Übersetzungen sind in verschiedenen Situationen nützlich Homomorphismen Codes UTF-8 Das sollten Sie üben: Homomorphismen anwenden Decodieren Zeichen in UTF-8 codieren GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 53 / 74 Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Huffman-Codierung GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 54 / 74 Huffman-Codierung — ein Überblick gegeben: Alphabet A und Wort w ∈ A∗ Eigenschaften der zu w gehörigen Huffman-Codierung eine Abbildung h : A∗ → Z 2∗ , ε-freier Homomorphismus h typischerweise auf w angewendet Bestandteil z. B. von Kompressionsverfahren gzip, bzip2 bei Huffman-Codierungen werden häufigere Symbole durch kürzere Wörter codiert und seltenere Symbole durch längere GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 55 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Huffman-Codierung Algorithmus zur Berechnung von Huffman-Codes Weiteres zu Huffman-Codes GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 56 / 74 Voraussetzungen Gegeben w ∈ A∗ und die Anzahlen N x (w ) der Vorkommen aller x ∈ A in w o. B. d. A. alle N x (w ) > 0 Bestimmung eines Huffman-Codes in zwei Phasen 1. Konstruktion eines „Baumes“ Blätter entsprechen den x ∈ A und Kanten mit 0 und 1 beschriftet 2. Ablesen der Codes aus dem Baum (Pfadbeschriftungen) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 57 / 74 Algorithmus für Huffman-Codes Beispiel: w = afebfecaffdeddccefbeff Baum am Ende: 22 0 1 1 0 9 0 13 5,e 4 1 7,f 6 0 1 0 1 2,a 2,b 3,c 3,d Homomorphismus (präfixfrei!) x h(x) GBI — Grundbegriffe der Informatik a 000 b 001 c 100 d 101 e 01 f 11 KIT, Institut für Theoretische Informatik 58 / 74 Konstruktion des Huffman-Baumes (1) zu jedem Zeitpunkt Menge Mi „zu betrachtender Symbolmengen mit ihren Häufigkeiten“ ebenso große Menge schon konstruierter Teilbäume Initialisierung: M 0 ist die Menge aller {(N x (w ), {x })} für x ∈ A, Als Anfang für die Konstruktion des Baumes zeichnet man für jedes Symbol einen Knoten mit Markierung (N x (w ), {x }). Beispiel M 0 = { (2, {a}), (2, {b}), (3, {c}), (3, {d}), (5, {e}), (7, {f}) } GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 59 / 74 Konstruktion des Huffman-Baumes (2) Anfang im Beispiel: 5,e 2,a GBI — Grundbegriffe der Informatik 2,b 7,f 3,c 3,d KIT, Institut für Theoretische Informatik 60 / 74 Konstruktion des Huffman-Baumes (3) Iterationsschritt des Algorithmus: Solange Mi noch mindestens zwei Elemente enthält, bestimme Mi+1 wie folgt: wähle Paare (k 1 , X 1 ) und (k 2 , X 2 ) mit kleinsten Häufigkeiten ersetze diese Paare durch (k 1 + k 2 , X 1 ∪ X 2 ) Mi+1 = Mi r { (k 1 , X 1 ), (k 2 , X 2 ) } ∪ { (k 1 + k 2 , X 1 ∪ X 2 ) } im Graphen neuer Knoten markiert mit Häufigkeit k 1 + k 2 und Kanten zu den Knoten für (k 1 , X 1 ) und (k 2 , X 2 ) GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 61 / 74 Konstruktion des Huffman-Baumes (4) Beispiel M 0 = { (2, {a}), (2, {b}), (3, {c}), (3, {d}), (5, {e}), (7, {f}) } 5,e 2,a GBI — Grundbegriffe der Informatik 2,b 7,f 3,c 3,d KIT, Institut für Theoretische Informatik 62 / 74 Konstruktion des Huffman-Baumes (4) Beispiel M 1 = { (4, {a, b}), (3, {c}), (3, {d}), (5, {e}), (7, {f}) } 4 2,a GBI — Grundbegriffe der Informatik 5,e 2,b 7,f 3,c 3,d KIT, Institut für Theoretische Informatik 63 / 74 Konstruktion des Huffman-Baumes (5) Beispiel M 2 = { (4, {a, b}), (6, {c, d}), (5, {e}), (7, {f}) } 4 2,a GBI — Grundbegriffe der Informatik 5,e 2,b 6 3,c 7,f 3,d KIT, Institut für Theoretische Informatik 64 / 74 Konstruktion des Huffman-Baumes (6) Beispiel M 3 = { (9, {a, b, e}), (6, {c, d}), (7, {f}) } 9 4 2,a GBI — Grundbegriffe der Informatik 5,e 2,b 6 3,c 7,f 3,d KIT, Institut für Theoretische Informatik 65 / 74 Konstruktion des Huffman-Baumes (7) Beispiel M 4 = { (9, {a, b, e}), (13, {c, d, f}) } 9 4 2,a GBI — Grundbegriffe der Informatik 13 5,e 2,b 6 3,c 7,f 3,d KIT, Institut für Theoretische Informatik 66 / 74 Konstruktion des Huffman-Baumes (8) Beispiel M 5 = { (22, {a, b, c, d, e, f}) } 22 9 4 2,a GBI — Grundbegriffe der Informatik 13 5,e 2,b 6 3,c 7,f 3,d KIT, Institut für Theoretische Informatik 67 / 74 Beschriftung der Kanten 22 0 1 1 0 9 0 13 5,e 4 nach links führende Kanten mit 0 beschriftet 1 7,f 6 0 1 0 1 2,a 2,b 3,c 3,d GBI — Grundbegriffe der Informatik nach rechts führende Kanten mit 1 beschriftet KIT, Institut für Theoretische Informatik 68 / 74 Beschriftung der Kanten 22 0 1 1 0 9 13 0 5,e 4 nach links führende Kanten mit 0 beschriftet 1 7,f 6 0 1 0 1 2,a 2,b 3,c 3,d GBI — Grundbegriffe der Informatik nach rechts führende Kanten mit 1 beschriftet KIT, Institut für Theoretische Informatik 68 / 74 Ablesen der Codierungen 22 gehe auf kürzestem Weg 0 1 0 1 0 1 4 5,e 6 7,f 9 von der Wurzel des Baumes zu dem Blatt für x 13 konkateniere der Reihe nach 0 1 0 1 2,a 2,b 3,c 3,d alle Symbole an den Kanten auf diesem Weg h(d) = 101 GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 69 / 74 Algorithmus für Huffman-Codes Beispiel: w = afebfecaffdeddccefbeff Baum am Ende: 22 0 1 1 0 9 0 13 5,e 4 1 7,f 6 0 1 0 1 2,a 2,b 3,c 3,d Homomorphismus (präfixfrei!) x h(x) GBI — Grundbegriffe der Informatik a 000 b 001 c 100 d 101 e 01 f 11 KIT, Institut für Theoretische Informatik 70 / 74 Wo sind wir? Von Wörtern zu Zahlen und zurück Von einem Alphabet zum anderen Huffman-Codierung Algorithmus zur Berechnung von Huffman-Codes Weiteres zu Huffman-Codes GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 71 / 74 Eigenschaften von Huffman-Codes Huffman-Code nicht eindeutig im allgemeinen mehrere Möglichkeiten, welche zwei Knoten vereinigt werden im Baum links und rechts vertauschbar aber alle sind „gleich gut“: Unter allen präfixfreien Codes führen Huffman-Codes zu kürzesten Codierungen des Wortes, für das die Huffman-Codierung konstruiert wurde. GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 72 / 74 Block-Codierungen Verallgemeinerung des obigen Verfahrens: Betrachte nicht Häufigkeiten einzelner Symbole, sondern für Teilwörter einer festen Länge b > 1. einziger Unterschied: an den Blättern des Huffman-Baumes stehen Wörter der Länge b. So etwas nennt man eine Block-Codierung. Statt h(x ) für x ∈ A festzulegen, legt man h(w ) für alle Blöcke w ∈ Ab fest, und erweitert dies zu einer Funktion h : (Ab ) ∗ → B ∗ . GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 73 / 74 Das ist wichtig Das sollten Sie mitnehmen: Huffman-Codierung liefert kürzest mögliche präfixfreie Codes „Algorithmus“ zur Bestimmung des Huffman-Baumes Das sollten Sie üben: Huffman-Codes berechnen GBI — Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik 74 / 74