k210-Kodierung_von_Zeichen
Page 1
Kapitel 2 – Kodierung
- Kodierung von Zeichen
- Kodierung von Zahlen
- Anwendung: ReTI
Albert-Ludwigs-Universität Freiburg
Prof. Dr. Armin Biere
Institut für Informatik
Page 2
Motivation
Ein Rechner speichert, verarbeitet und produziert Informationen.
Alle Ergebnisse müssen als Funktion der Anfangswerte exakt reproduzierbar sein.
→ Informationsspeicherung und Verarbeitung müssen exakt sein.
Probleme: Noise, Crosstalk, Abschwächung
→ Es gibt keine exakte Datenübertragung oder Datenspeicherung.
→ Ziel: Quantisierung der Informationsspeicherung mit Signal groß gegenüber maximaler Störung
Binär-Codierung (nur zwei Zustände) ist die einfachste (und sicherste) Signal-Quantisierung.
BIT
Page 3
Motivation
Ein Rechner kann üblicherweise
- Zeichen verarbeiten (Textverarbeitung)
- mit Zahlen rechnen
- Bilder, Audio- und Videoinformationen verarbeiten und darstellen ...
Ein Algorithmus kann zwar prinzipiell mit abstrakten Objekten verschiedener Art operieren, aber diese müssen im Rechner letztendlich als Folgen von Bits repräsentiert werden.
→ Kodierung!
Page 4
Kapitel 2.1 – Kodierung von Zeichen
Wie werden im Rechner Zeichen dargestellt?
- Codes fester Länge
- „Längenoptimale Kodierungen" von Zeichen: Häufigkeitscodes (Bsp.: Huffman-Code)
Page 5
Alphabete und Wörter
Definition: Eine nichtleere Menge
ist die Menge aller endlichen Wörter über dem Alphabet
Das Wort der Länge 0 wird mit
Beispiel: Sei bcada ein Wort der Länge 5 über
Page 6
Code
Sei
Eine Abbildung
Die Menge
Ein Code
Für einen Code
Ist
Page 7
Codes fester Länge
Die Kodierung eines jeden Zeichens besteht aus
| Code | Bits |
|---|---|
| ASCII (American Standard Code for Information Interchange) | 7 Bits (es gibt Erweiterungen mit 8 Bits) |
| EBCDIC (Extended Binary Coded Decimal Interchange Code) | 8 Bits |
| Unicode UTF-16 | 16 Bits (2 Bytes) |
Diese Kodierungen sind recht einfach zu behandeln. Unter Umständen wird für sie aber mehr Speicherplatz gebraucht als unbedingt nötig.
Page 8
Beispiel: ASCII-Tabelle
Page 9
Häufigkeitsabhängige Codes
Ziel: Reduktion der Länge einer Nachricht durch Wahl verschieden langer Codewörter für die verschiedenen Zeichen eines Alphabets (also kein Code fester Länge!)
Idee:
- Häufiges Zeichen → kurzer Code
- Seltenes Zeichen → langer Code
Unicode UTF-8 (1–4 Bytes) ist nun der Standard.
Voraussetzungen:
- Häufigkeitsverteilung bekannt → statische Kompression
- wenn unbekannt → dynamische Kompression
Page 10
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9
Page 11
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10
Page 12
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13
Page 13
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17
Page 14
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17, 23
Page 15
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17, 23, 32
Page 16
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17, 23, 32, 43
Page 17
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17, 23, 32, 43, 57
Page 18
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17, 23, 32, 43, 57, 100
Page 19
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17, 23, 32, 43, 57, 100
Page 20
Huffman-Code
Der Huffman-Code ist der bekannteste häufigkeitsabhängige Code (statische Kompression).
Kommt als Teilschritt z.B. in MP3 oder JPEG vor.
Beispiel:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Baue binären Baum, indem die beiden kleinsten Häufigkeiten jeweils zu einem neuen Knoten addiert werden.
Erzeugte Knotenwerte: 9, 10, 13, 17, 23, 32, 43, 57, 100
Markiere nun die linken Kanten mit 0 und die rechten Kanten mit 1, fertig ist der Huffman-Code!
Page 21
Erzeugte Huffman-Kodierung
Erzeugte Kodierung:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Kodierung | 00 | 10 | 110 | 1110 | 0100 | 0101 | 0110 | 0111 | 11110 | 11111 |
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Häufigkeit [%] | 20 | 25 | 15 | 8 | 7 | 6 | 5 | 5 | 5 | 4 |
Knotenwerte im Baum: 9, 10, 13, 17, 23, 32, 43, 57, 100
Page 22
Huffman-Code: Dekodierung
Erzeugte Kodierung:
| Zeichen | a | b | c | d | e | f | g | h | i | j |
|---|---|---|---|---|---|---|---|---|---|---|
| Kodierung | 00 | 10 | 110 | 1110 | 0100 | 0101 | 0110 | 0111 | 11110 | 11111 |
- Lesen des Bitstromes bis Symbol erkannt wurde.
- Erkanntes Symbol ausgeben und weiter mit 1.
Page 23
Präfixcodes
Definition: Sei
Ein Code
Der Huffman-Code ist ein Präfixcode.
Bei Präfixcodes können Wörter über
Huffman-Code ist ein bzgl. mittlerer Codelänge optimaler Präfixcode (unter Voraussetzung einer bekannten Häufigkeitsverteilung) – ohne Beweis.
Page 24
Beispiel Präfixcodes
Frage: Welche dieser Codes sind Präfixcodes?
a.
b.
c.
d. Keiner der Obigen.
Page 25
Weitere Verfahren
Es gibt zahlreiche Ansätze zur Datenkompression. (Beispiel: Lempel-Ziv-Welch.)
In Programmtexten gibt es häufig viele Leerzeichen, gleiche Schlüsselwörter und so weiter.
→ Kodiere Folgen von Leerzeichen bzw. Schlüsselwörter durch kurze Codes.
Das wird z.B. bei GIF und TIFF genutzt.
Das soll auch funktionieren, wenn man noch nicht weiß, welche Zeichenketten häufig vorkommen.
























