k210-Kodierung_von_Zeichen

Page 1

page-01.png

Kapitel 2 – Kodierung

  1. Kodierung von Zeichen
  2. Kodierung von Zahlen
  3. Anwendung: ReTI

Albert-Ludwigs-Universität Freiburg
Prof. Dr. Armin Biere
Institut für Informatik

Page 2

page-02.png

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 als grundlegende Informationseinheit

Page 3

page-03.png

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

page-04.png

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

page-05.png

Alphabete und Wörter

Definition: Eine nichtleere Menge heißt (endliches) Alphabet der Größe .
heißen Zeichen des Alphabets.

ist die Menge aller endlichen Wörter über dem Alphabet .
heißt Länge des Wortes .
Das Wort der Länge 0 wird mit bezeichnet.

Beispiel: Sei . Dann ist bcada ein Wort der Länge 5 über .

Page 6

page-06.png

Code

Sei ein endliches Alphabet der Größe .
Eine Abbildung oder heißt Code, falls injektiv ist.
Die Menge heißt Menge der Codewörter.
Ein Code heißt Code fester Länge.
Für einen Code fester Länge gilt: .
Ist mit , so können die zusätzlichen Bits zum Test auf Übertragungsfehler verwendet werden.

Page 7

page-07.png

Codes fester Länge

Die Kodierung eines jeden Zeichens besteht aus Bits.

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

page-08.png

Beispiel: ASCII-Tabelle

Page 9

page-09.png

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

page-10.png

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

page-11.png

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

page-12.png

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

page-13.png

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

page-14.png

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

page-15.png

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

page-16.png

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

page-17.png

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

page-18.png

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

page-19.png

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

page-20.png

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

page-21.png

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

page-22.png

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
  1. Lesen des Bitstromes bis Symbol erkannt wurde.
  2. Erkanntes Symbol ausgeben und weiter mit 1.

Page 23

page-23.png

Präfixcodes

Definition: Sei ein Alphabet der Größe .
heißt Präfix von , falls und .
Ein Code heißt Präfixcode, falls es kein Paar mit gibt, so dass Präfix von .

Der Huffman-Code ist ein Präfixcode.
Bei Präfixcodes können Wörter über eindeutig dekodiert werden (sie entsprechen Binärbäumen mit Codewörtern an den Blättern).
Huffman-Code ist ein bzgl. mittlerer Codelänge optimaler Präfixcode (unter Voraussetzung einer bekannten Häufigkeitsverteilung) – ohne Beweis.

Page 24

page-24.png

Beispiel Präfixcodes

Frage: Welche dieser Codes sind Präfixcodes?

a. , ,
b. , ,
c. , , mit
d. Keiner der Obigen.

Page 25

page-25.png

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.