Teil 4: Algorithmen-Entwurfstechniken Idee der Greedy-Algorithmen ...
Teil 4: Algorithmen-Entwurfstechniken Idee der Greedy-Algorithmen ...
Teil 4: Algorithmen-Entwurfstechniken Idee der Greedy-Algorithmen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Datenkompression (1)<br />
Problem:<br />
Gegeben ist ein Text t als Folge von ASCII-Zeichen,<br />
<strong>der</strong>en Häufigkeiten im Text bekannt sind.<br />
Beispiel:<br />
Datenkompression (2)<br />
Codebäume:<br />
Wir wollen uns hier auf binäre Codierung <strong>der</strong> Einzelzeichen einschränken,<br />
wobei sich <strong>der</strong> Binärcode in einem Code-Baum darstellen lässt.<br />
Wichtig: Zu codierende Zeichen sind die Blätter des Code-Baums.<br />
Zeichen<br />
a<br />
e<br />
Häufigkeit<br />
10<br />
15<br />
Beispiele:<br />
nl<br />
i<br />
s<br />
12<br />
3<br />
a e i s t sp nl<br />
a e i s<br />
t<br />
sp<br />
t<br />
4<br />
Zeichen<br />
Code<br />
Zeichen<br />
Code<br />
space<br />
newline<br />
13<br />
1<br />
a<br />
e<br />
i<br />
000<br />
001<br />
010<br />
a<br />
e<br />
i<br />
0000<br />
0001<br />
0010<br />
Gesucht ist eine möglichst kurze binäre Codierung des Textes t.<br />
Selbstverständlich sollte <strong>der</strong> codierte Text auch wie<strong>der</strong> decodierbar sein.<br />
s<br />
t<br />
sp<br />
nl<br />
011<br />
100<br />
101<br />
110<br />
s<br />
t<br />
sp<br />
nl<br />
0011<br />
010<br />
011<br />
1<br />
Binärcode mit<br />
konstanter Bitlänge<br />
Binärcode mit<br />
variabler Bitlänge<br />
O. Bittel; Juli 2007 <strong>Algorithmen</strong> und Datenstrukturen - <strong>Algorithmen</strong>-<strong>Entwurfstechniken</strong> 4-9<br />
O. Bittel; Juli 2007 <strong>Algorithmen</strong> und Datenstrukturen - <strong>Algorithmen</strong>-<strong>Entwurfstechniken</strong> 4-10<br />
Datenkompression (3)<br />
Fano-Bedingung:<br />
Ein Code erfüllt die Fano-Bedingung, falls keine Codierung eines Zeichens Präfix<br />
(Anfangstück) einer Codierung eines an<strong>der</strong>en Zeichen ist.<br />
Durch Code-Bäume dargestellte Bäume erfüllen immer die Fano-Bedingung.<br />
Codes, die Fano-Bedingung erfüllen, sind eindeutig decodierbar.<br />
Beispiel:<br />
Decodieren Sie folgende Binärfolge mit dem unten gegebenen Binärcode:<br />
0010110110100010<br />
Datenkompression (4)<br />
Algorithmus von Huffman:<br />
• <strong>Idee</strong>:<br />
Verwende einen Binärcode variabler Länge, wobei häufigere Zeichen kürzere<br />
Codierungen erhalten.<br />
• Verfahren:<br />
(1) Beginne mit einem Wald von Code-Bäumen,<br />
wobei je<strong>der</strong> Baum anfangs aus genau einem Zeichen besteht.<br />
Je<strong>der</strong> Baum besitzt außerdem ein Gewicht w, das gleich <strong>der</strong> Summe <strong>der</strong><br />
Häufigkeiten <strong>der</strong> Zeichen im Baum ist.<br />
nl<br />
Zeichen<br />
a<br />
Code<br />
0000<br />
(2) <strong>Greedy</strong>-Schritt:<br />
Wähle die beiden Bäume t 1<br />
und t 2<br />
mit den kleinsten Gewichten w 1<br />
und w 2<br />
und bilde daraus einen neuen Baum mit dem Gewicht w = w 1<br />
+ w 2<br />
:<br />
a e i s<br />
t<br />
sp<br />
e<br />
i<br />
s<br />
0001<br />
0010<br />
0011<br />
t 1<br />
t 2<br />
t<br />
010<br />
sp<br />
nl<br />
011<br />
1<br />
(3) Wie<strong>der</strong>hole Schritt (2) solange, bis nur noch ein Baum vorhanden ist.<br />
Dieser Baum ist dann <strong>der</strong> gesuchte optimale Binärcode.<br />
O. Bittel; Juli 2007 <strong>Algorithmen</strong> und Datenstrukturen - <strong>Algorithmen</strong>-<strong>Entwurfstechniken</strong> 4-11<br />
O. Bittel; Juli 2007 <strong>Algorithmen</strong> und Datenstrukturen - <strong>Algorithmen</strong>-<strong>Entwurfstechniken</strong> 4-12