| |
Beispiel
- In dieser Ausarbeitung wird angenommen, dass pro Zeichen 1 Byte
Speicherplatz benötigt wird.
- maximale Suchpufferlänge: 20 Bytes
- maximale Vorschaupufferlänge: 10 Bytes
- der zu kodierende Satz lautet: EINE_MAUS_BAUT_EIN_HAUS.
|
Nr.
|
Suchpuffer
|
Vorschaupuffer
|
Kodierung
|
| 1 |
|
EINE_MAUS_ |
( 0, 0, "E" ) |
| 2 |
E
|
INE_MAUS_B |
( 0, 0, "I" ) |
| 3 |
EI
|
NE_MAUS_BA |
(0, 0, "N" ) |
| 4 |
EIN
|
E_MAUS_BAU |
(3, 1, "_" ) |
| 5 |
EINE_
|
MAUS_BAUT_ |
(0, 0, "M" ) |
| 6 |
EINE_M
|
AUS_BAUT_E |
(0, 0, "A" ) |
| 7 |
EINE_MA
|
US_BAUT_EI |
(0, 0, "U" ) |
| 8 |
EINE_MAU
|
S_BAUT_EIN |
(0, 0, "S" ) |
| 9 |
EINE_MAUS
|
_BAUT_EIN_ |
(5, 1, "B" ) |
| 10 |
EINE_MAUS_B
|
AUT_EIN_HA |
(5, 2, "T" ) |
| 11 |
EINE_MAUS_BAUT
|
_EIN_HAUS. |
(5, 1, "E" ) |
| 12 |
EINE_MAUS_BAUT_E
|
IN_HAUS. |
(15, 2, "_" ) |
| 13 |
EINE_MAUS_BAUT_EIN_
|
HAUS. |
(0, 0, "H" ) |
| 14 |
EINE_MAUS_BAUT_EIN_H
|
AUS. |
(14, 3, "." ) |
| 15 |
_MAUS_BAUT_EIN_HAUS.
|
|
|
Algorithmus und Erklärung des Beispiels
- Am Anfang ist der Suchpuffer leer, der Vorschaupuffer hat eine
konstante Größe.
- Wir nehmen das erste Zeichen aus dem Vorschaupuffer, und
durchsuchen den Suchpuffer danach von rechts nach links.
- Siehe Bsp. Zeile 1-3, 5-8 oder 13: Wird es im Suchpuffer nicht
gefunden, kodieren wir das Zeichen mit (0,0, "Zeichen").
- Siehe Bsp. Zeile 14: Wird es gefunden ("a" von "baut"), dann
nehmen wir das nächste Zeichen ("u") aus dem Vorschaupuffer und suchen
nach der Kombination ("au") im Suchpuffer weiter nach links
fortschreitend, aber nicht erneut von rechts beginnend ("au" von
"baut").
- Wir fahren damit fort, bis kein passendes Muster mehr gefunden
wird ("aus" bei "Maus").
- Wir kodieren den gefundenen String durch ein 3-er Tupel (Offset,
Länge des Strings, nächstes Zeichen), im Beispiel (14, 3, "."). Der
Offset zeigt die Position des Musters im Suchpuffer.
- Wir verschieben beide Puffer um (Stringlänge + 1) Zeichen nach
rechts und wiederholen den Vorgang 2, bis das Ende der zu
komprimierenden Daten erreicht wird.
|
| |
|
|