30.11.2012 Aufrufe

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

1-58 Aufgaben und <strong>Lösungen</strong><br />

Lies Code x<br />

solange x>0 (bzw. noch nicht alle Zeichen decodiert sind)<br />

Suche Zeichen c, in dessen Intervall x liegt und gib c aus<br />

len = og(c) - ug(c) Intervall-Länge<br />

x = (x - ug(c))/len neuer Code<br />

Die Berechnung ist per Hand auch <strong>mit</strong> Taschenrechner sehr mühsam. Es empfiehlt sich,<br />

dafür ein Programm zu schreiben.<br />

b) LZW-Kompression:<br />

Beim LZW-Algorithmus wird zunächst eine Code-Tabelle <strong>mit</strong> allen Einzelzeichen des Quell-<br />

Alphabets, wobei die Wortlänge des Ziel-Alphabets um einige Bit größer gewählt wird, als die<br />

des Quell-Alphabets. Im Laufe der Kompression wird dann die Code-Tabelle um Codes für<br />

Zeichengruppen erweitert, so dass die Kompression immer effizienter wird.<br />

Die Codierung einer Zeichenkette Z läuft nun nach folgendem Schema ab: zunächst wird das<br />

nächste Eingabezeichen c des Eingabestrings Z eingelesen und an den als Präfix bezeichneten<br />

Anfangs-<strong>Teil</strong>string P des Strings Z angehängt, es wird also der String Pc gebildet. Zu<br />

Beginn wird der Präfix P <strong>mit</strong> dem leeren String vorbesetzt. Ist Pc in der Code-Tabelle bereits<br />

vorhanden, so wird P=Pc gesetzt und das nächste Zeichen eingelesen. Andernfalls wird P<br />

ausgegeben, Pc in die Code-Tabelle eingetragen und der neue Präfix P=c gesetzt. Kommt<br />

der soeben eingetragene <strong>Teil</strong>string Pc später im Text nochmals vor, so kann er durch ein<br />

einziges Code-Wort ersetzt werden. Darauf beruht letztlich die komprimierende Wirkung des<br />

LZW-Verfahrens.<br />

Der Kompressions-Algorithmus lautet da<strong>mit</strong> in Pseudo-Code-Formulierung:<br />

Initialisiere die Code-Tabelle <strong>mit</strong> den Einzelzeichen<br />

Weise dem Präfix P den Leerstring zu<br />

Wiederhole, solange Eingabezeichen vorhanden sind:<br />

Lies nächstes Eingabezeichen c aus dem Eingabestring Z<br />

Wenn Pc in der Code-Tabelle gefunden wird:<br />

steze P=Pc<br />

Sonst:<br />

Wenn Code-Tabelle noch nicht voll: Trage Pc in die nächste freie Position ein<br />

Gib den Code für P aus<br />

setze P=c<br />

Ende der Schleife<br />

Gib den Code für das letzte Präfix P aus<br />

Zeichen c Binär-Code Hex-Code<br />

____________________________________________<br />

A 0000 0<br />

H 0001 1<br />

K 0010 2<br />

M 0011 3<br />

N 0100 4<br />

P 0101 5<br />

U 0110 6<br />

- 0111 7<br />

- 1000 8<br />

- 1001 9<br />

- 1010 a<br />

- 1011 b<br />

- 1100 c<br />

- 1101 d<br />

- 1110 e<br />

- 1111 f<br />

Für die nebenstehende Code-Tabelle werden<br />

in diesem Beispiel Einträge <strong>mit</strong> vier Bit gewählt.<br />

Da das Quellalphabet nur sieben Zeichen umfasst,<br />

bleiben nach der Vorbesetzung noch<br />

neun Plätze für spätere Einträge frei.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!