Folien - Grundbegriffe der Informatik

Werbung
„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
Herunterladen