Difference between revisions of "Aufgaben:Exercise 2.4Z: LZW Coding and Decoding again"

From LNTwww
m (Text replacement - "„" to """)
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  
{{quiz-Header|Buchseite=Informationstheorie/Komprimierung nach Lempel, Ziv und Welch
+
{{quiz-Header|Buchseite=Information_Theory/Compression_According_to_Lempel,_Ziv_and_Welch
 
}}
 
}}
  
[[File:P_ID2437__Inf_Z_2_4.png|right|frame|Momentaufnahmen der LZW–Wörterbüchern]]
+
[[File:EN_Inf_Z2.4_vers2.png|right|frame|Two snapshots of the LZW dictionary ]]
Die Grafik zeigt Momentaufnahmen des Wörterbuchs, das während der&nbsp; <u>LZW&ndash;Codierung</u>&nbsp; der Eingangssymbolfolge entsteht.
+
The graph shows snapshots of the dictionary created during LZW coding of the input symbol sequence.
*Die obere Grafik gilt für Eingangssymbolfolge&nbsp; <b>ABABABBAA</b>.  
+
*The upper graph is for input symbol sequence&nbsp; <b>ABABABBAA</b>.  
*Das untere Wörterbuch entsteht bei der LZW&ndash;Codierung der Sequenz&nbsp; <b>ABABABABA</b>.  
+
*The lower dictionary is created during LZW coding of the sequence&nbsp; <b>ABABABABA</b>.  
  
  
In beiden Fällen wird vorausgesetzt, dass auch zu späteren Zeitpunkten keine anderen Zeichen als&nbsp; <b>A</b>&nbsp; und&nbsp; <b>B</b>&nbsp; vorkommen können.
+
In both cases, it is assumed that no characters other than&nbsp; <b>A</b>&nbsp; and&nbsp; <b>B</b>&nbsp; can occur at later times.
  
Bei der&nbsp; <u>LZW&ndash;Decodierung</u>&nbsp; entstehen gleiche Wörterbücher, doch erfolgen dann die Wörterbucheinträge erst einen Schritt später.&nbsp; In der Teilaufgabe&nbsp; '''(3)'''&nbsp; wird gefragt, für welchen Codierschritt bzw. für welchen Decodierschritt die beiden dargestellten Momentaufnahmen gültig sind.
+
In <u>LZW decoding</u>, the same dictionaries are created, but then the dictionary entries occur one step later.&nbsp; In subtask&nbsp; '''(3)'''&nbsp; the question is asked for which coding step or for which decoding step the two snapshots shown are valid.
  
  
Bei der <u>LZW&ndash;Codierung</u> wird zu jedem Codierschritt $i$ ein Index $I$ ausgewählt und (binär) übertragen.&nbsp; Das Zeichenpaar <b>AB</b> wird bei den beiden Wörterbüchern durch den Index $I = 2$ dargestellt.&nbsp; Wir betrachten hier den Index $I$ als Dezimalzahl und lassen bei dieser Aufgabe die Binärdarstellung außer Betracht.
+
In <u>LZW coding</u>, an index&nbsp; $I$&nbsp; is selected for each coding step&nbsp; $i$&nbsp; and transmitted (binary).&nbsp; The character pair&nbsp; <b>AB</b>&nbsp; is represented by the index&nbsp;  $I = 2$&nbsp; in the two dictionaries.&nbsp; Here we consider the index&nbsp; $I$&nbsp; as a decimal number and leave the binary representation out of consideration for this task.
  
  
Bei der <u>LZW&ndash;Decodierung</u> wird in gleicher Weise mit Hilfe des Wörterbuchs aus jedem Index&nbsp; $I$&nbsp; ein Zeichen bzw. eine Zeichenfolge generiert, zum Beispiel führt&nbsp; $I = 1$&nbsp; zum Zeichen&nbsp; <b>B</b>&nbsp; und&nbsp; $I = 2$&nbsp; zum Zeichenpaar&nbsp; <b>AB</b>.
+
With <u>LZW decoding</u>, a character or character sequence is generated in the same way from each index&nbsp; $I$&nbsp; with the help of the dictionary, for example&nbsp; $I = 1$&nbsp; leads to the character&nbsp; <b>B</b>&nbsp; and&nbsp; $I = 2$&nbsp; to the character pair&nbsp; <b>AB</b>.
  
Wird  tatsächlich ein Wörterbucheintrag mit dem gewünschten Index&nbsp; $I$&nbsp; gefunden, so läuft die Decodierung problemlos ab. Dies ist aber nicht immer so:
+
If a dictionary entry with the desired index&nbsp; $I$&nbsp; is actually found, the decoding runs smoothly.&nbsp; However, this is not always the case:
* Wird bei der Codierung beim Schritt&nbsp; $i$&nbsp; ein neuer Index&nbsp; $I$&nbsp; eingetragen und ist dieses&nbsp; $I$&nbsp; gleichzeitig das Codierergebnis des Schrittes, so ist dieser Index beim Decodierschritt&nbsp; $i$&nbsp; im Wörterbuch noch nicht belegt.&nbsp; Der Grund hierfür ist, dass  beim Decoder die Einträge um einen Schritt später erfolgen als beim Coder.
+
* If a new index&nbsp; $I$&nbsp; is entered during encoding at step&nbsp; $i$&nbsp; and this&nbsp; $I$&nbsp; is at the same time the encoding result of the step, this index is not yet occupied in the dictionary at decoding step&nbsp; $i$&nbsp;.&nbsp; The reason for this is that with the decoder the entries are made one step later than with the coder.
* Bei binärer Eingangsfolge&nbsp; $($alle Zeichen seien&nbsp; <b>A</b>&nbsp; oder&nbsp; <b>B</b>$)$&nbsp; ist bei der LZW&ndash;Decodierung genau immer dann eine Sonderregelung anzuwenden, wenn im Codierschritt&nbsp; $i$&nbsp; der Eintrag mit dem Index&nbsp; $I = i$&nbsp; vorgenommen wurde.
+
* In the case of a&nbsp; "binary"&nbsp; input sequence&nbsp; $($all characters are&nbsp; <b>A</b>&nbsp; or&nbsp; <b>B</b>$)$,&nbsp; a special rule must always be applied in LZW decoding if the entry with index&nbsp; $I = i$&nbsp; was made in coding step&nbsp; $i$&nbsp;.
  
  
Diese Sonderregelung soll an einem Beispiel veranschaulicht werden:
+
This special rule shall be illustrated by an example:
* Zum Schritt&nbsp; $i$&nbsp; gibt es keinen zum Index&nbsp; $I$&nbsp; passenden  Eintrag im Decoder&ndash;Wörterbuch.
+
* For step&nbsp; $i$&nbsp; there is no entry in the decoder dictionary matching index&nbsp; $I$&nbsp;.
* Wir nehmen an, dass beim vorherigen Schritt&nbsp; $(i- 1)$&nbsp; das Decodierergebnis&nbsp; <b>ABBABA</b>&nbsp; war.
+
* We assume that in the previous step&nbsp; $(i- 1)$&nbsp; the decoding result was&nbsp; <b>ABBABA</b>&nbsp;.
* Dann ergänzt man diese Zeichenfolge um das erste Zeichen der Folge.&nbsp; Hier:&nbsp; <b>ABBABAA</b>.
+
* Then we add the first character of the sequence to this string. &nbsp; Here:&nbsp; <b>ABBABAA</b>.
* Anschließend trägt man die Sequenz&nbsp; <b>ABBABAA</b>&nbsp; in das Wörterbuch unter dem Index&nbsp; $I$&nbsp; ein.
+
* Then one enters the sequence&nbsp; <b>ABBABAA</b>&nbsp; into the dictionary under index&nbsp; $I$&nbsp;.
  
  
Line 37: Line 37:
  
  
''Hinweise:''
+
Hints:
*Die Aufgabe gehört zum  Kapitel&nbsp; [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch|Komprimierung nach Lempel, Ziv und Welch]].
+
*The exercise belongs to the chapter&nbsp; [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch|Compression according to Lempel, Ziv and Welch]].
*Insbesondere wird  Bezug genommen auf die Seiten
+
*In particular, reference is made to the pages&nbsp;
:: [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch#LZ77_.E2.80.93_die_Grundform_der_Lempel.E2.80.93Ziv.E2.80.93Algorithmen|LZ77 &ndash; die Grundform der Lempel-Ziv-Algorithmen]],
+
:: [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch#LZ77_-_the_basic_form_of_the_Lempel-Ziv_algorithms|LZ77 - the basic form of Lempel-Ziv algorithms]],
:: [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch#Lempel.E2.80.93Ziv.E2.80.93Codierung_mit_variabler_Indexbitl.C3.A4nge|Lempel-Ziv-Codierung mit variabler Indexbitlänge]],
+
:: [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch#Lempel-Ziv_coding_with_variable_index_bit_length|Lempel-Ziv coding with variable index bit length]],
:: [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch#Decodierung_des_LZW.E2.80.93Algorithmus|Decodierung des LZW-Agorithmus]].
+
:: [[Information_Theory/Komprimierung_nach_Lempel,_Ziv_und_Welch#Decoding_of_the_LZW_algorithm|Decoding of the LZW algorithm]].
*Beachten Sie zudem bei der Lösung dieser Aufgabe, dass beim LZW&ndash;Algorithmus nicht von einem leeren Wörterbuch ausgegangen wird.
 
*Vielmehr beinhalten die Indizes&nbsp; $I = 0$&nbsp; bis&nbsp; $I = M- 1$&nbsp; alle&nbsp; $M$&nbsp; zulässigen Zeichen des Alphabets.
 
  
 +
*Also, when solving this task, note that the LZW algorithm does not assume an empty dictionary.
 +
*Rather, the indices&nbsp; $I = 0$&nbsp; to&nbsp; $I = M- 1$&nbsp; contain all&nbsp; $M$&nbsp; permissible characters of the alphabet.
  
===Fragebogen===
+
===Questions===
  
 
<quiz display=simple>
 
<quiz display=simple>
{Codieren Sie die Eingangsfolge&nbsp; <b>ABABABBAA</b>&nbsp; entsprechend der <u>oberen Grafik</u>.&nbsp; Welche Indizes&nbsp; $I_i$&nbsp; ergeben sich zu den Schritten&nbsp; $i=1$, ... , $i=5$?
+
{Encode the input sequence&nbsp; <b>ABABABBAA</b>&nbsp; according to the <u>above diagram</u>.&nbsp; Which indices&nbsp; $I_i$&nbsp; result for the steps&nbsp; $i=1$, ... , $i=5$?
 
|type="{}"}
 
|type="{}"}
 
$I_1 \ = \ $ { 0. }
 
$I_1 \ = \ $ { 0. }
Line 60: Line 60:
  
  
{Codieren Sie nun die Eingangsfolge&nbsp; <b>ABABABABA</b>&nbsp; entsprechend der <u>unteren Grafik</u>.&nbsp; Geben Sie die Indizes&nbsp; $I_i$&nbsp; zu den Schritten&nbsp; $i=4$&nbsp; und&nbsp; $i=5$&nbsp; an.
+
{Now encode the input sequence&nbsp; <b>ABABABABA</b>&nbsp; according to the <u>diagram below</u>.&nbsp; Specify the indices&nbsp; $I_i$&nbsp; for the steps&nbsp; $i=4$&nbsp; and&nbsp; $i=5$&nbsp;.
 
|type="{}"}
 
|type="{}"}
 
$I_4 \ = \ $ { 4 }
 
$I_4 \ = \ $ { 4 }
Line 66: Line 66:
  
  
{Für welchen Schritt&nbsp; $i$&nbsp; gilt die Momentaufnahme des auf der Angabenseite dargestellten Wörterbuchs bezüglich
+
{For which step&nbsp; $i$&nbsp; does the snapshot of the dictionary shown on the exercise description page apply with respect to
 
|type="{}"}
 
|type="{}"}
$\text{Codierung:} \ \ i \ = \ $ { 4 }
+
$\text{Encoding:} \ \ i \ = \ $ { 4 }
$\text{Decodierung:} \ \ i \ = \ $ { 5 }
+
$\text{Decoding:} \ \ i \ = \ $ { 5 }
  
  
{Wann muss man auf die Decodier&ndash;Sonderfallregelung zurückgreifen?
+
{When does one have to resort to the decoding special case rule?
 
|type="[]"}
 
|type="[]"}
- Bei der Decodierung von&nbsp; <b>ABABABBAA</b>&nbsp; im Schritt&nbsp; $i = 4$.
+
- When decoding&nbsp; <b>ABABABBAA</b>&nbsp; in step&nbsp; $i = 4$.
+ Bei der Decodierung von&nbsp; <b>ABABABABA</b>&nbsp; im Schritt&nbsp; $i = 4$.
+
+ When decoding&nbsp; <b>ABABABABA</b>&nbsp; in step&nbsp; $i = 4$.
- Bei der Decodierung von&nbsp; <b>ABABABABA</b>&nbsp; im Schritt&nbsp; $i = 5$.
+
- When decoding&nbsp; <b>ABABABABA</b>&nbsp; in step&nbsp; $i = 5$.
  
  
Line 82: Line 82:
 
</quiz>
 
</quiz>
  
===Musterlösung===
+
===Solution===
 
{{ML-Kopf}}
 
{{ML-Kopf}}
'''(1)'''&nbsp; Wir bezeichnen mit&nbsp; $W(I)$&nbsp; ein Feld (Array), welches das Wörterbuch beschreibt und dessen Elemente Character oder Zeichenfolgen beinhalten.&nbsp;   
+
'''(1)'''&nbsp; We use&nbsp; $W(I)$&nbsp; to denote a field (array),&nbsp; that describes the dictionary and whose elements contain characters or strings. &nbsp;   
  
*Die Codierung von&nbsp; <b>ABABABBAA</b>&nbsp; läuft dann wie folgt ab:
+
*The encoding of&nbsp; <b>ABABABBAA</b>&nbsp; proceeds as follows:
 
:: $i = 1$: &nbsp; &nbsp; <b>A</b> &nbsp;&nbsp;&nbsp;&#8594;&nbsp;&nbsp; $\underline{I=0}$, &nbsp; $W(I = 2) =$ <b>AB</b>,
 
:: $i = 1$: &nbsp; &nbsp; <b>A</b> &nbsp;&nbsp;&nbsp;&#8594;&nbsp;&nbsp; $\underline{I=0}$, &nbsp; $W(I = 2) =$ <b>AB</b>,
 
:: $i = 2$: &nbsp; &nbsp; <b>B</b> &nbsp;&nbsp;&nbsp;&#8594;&nbsp;&nbsp; $\underline{I=1}$, &nbsp; $W(I = 3) =$ <b>BA</b>,
 
:: $i = 2$: &nbsp; &nbsp; <b>B</b> &nbsp;&nbsp;&nbsp;&#8594;&nbsp;&nbsp; $\underline{I=1}$, &nbsp; $W(I = 3) =$ <b>BA</b>,
Line 93: Line 93:
 
:: $i = 5$: &nbsp; &nbsp; <b>BA</b> &#8594;&nbsp;&nbsp; $\underline{I=3}$, &nbsp; $W(I = 6) =$ <b>BAA</b>.
 
:: $i = 5$: &nbsp; &nbsp; <b>BA</b> &#8594;&nbsp;&nbsp; $\underline{I=3}$, &nbsp; $W(I = 6) =$ <b>BAA</b>.
  
*Es ist anzumerken, dass das letzte Zeichen&nbsp; $($<b>A</b>$)$&nbsp; des Eingabestrings&nbsp; <b>ABABABBAA</b>&nbsp; zum Zeitpunkt&nbsp; $i = 5$&nbsp; zwar bereits beim Wörterbucheintrag berücksichtigt ist, aber noch nicht codiert wurde.
+
*Note that the last character&nbsp; $($<b>A</b>$)$&nbsp; of the input string&nbsp; <b>ABABABBAA</b>&nbsp; at time&nbsp; $i = 5$&nbsp; is already considered in the dictionary entry but has not yet been encoded.
  
  
  
'''(2)'''&nbsp; Für die Schritte&nbsp; $i = 1$&nbsp; bis&nbsp; $i = 3$&nbsp; ändert sich nichts gegenüber der Teilaufgabe&nbsp; '''(1)'''.  
+
'''(2)'''&nbsp; For the steps&nbsp; $i = 1$&nbsp; to&nbsp; $i = 3$&nbsp; nothing changes compared to subtask&nbsp; '''(1)'''.  
*Danach gilt:
+
*Afterwards, the following applies:
 
:: $i = 4$: &nbsp; &nbsp; <b>ABA</b> &#8594;&nbsp;&nbsp; $\underline{I=4}$, &nbsp; $W(I = 5) =$ <b>ABAB</b>,
 
:: $i = 4$: &nbsp; &nbsp; <b>ABA</b> &#8594;&nbsp;&nbsp; $\underline{I=4}$, &nbsp; $W(I = 5) =$ <b>ABAB</b>,
:: $i = 5$: &nbsp; &nbsp; <b>BA</b> &#8594;&nbsp;&nbsp; $\underline{I=3}$, &nbsp; Codierung abgeschlossen, kein neuer Wörterbucheintrag möglich.
+
:: $i = 5$: &nbsp; &nbsp; <b>BA</b> &#8594;&nbsp;&nbsp; $\underline{I=3}$, &nbsp; encoding completed, no new dictionary entry possible.
  
  
  
'''(3)'''&nbsp; Der Vergleich mit obigen Ergebnissen zeigt:  
+
'''(3)'''&nbsp; The comparison with above results shows:
*Das Wörterbuch des&nbsp; <u>Coders</u>&nbsp; weist genau nach&nbsp; $\underline{i=4}$&nbsp; Codierschritten die gezeigten Einträge auf.  
+
*The dictionary of the&nbsp; <u>encoder</u>&nbsp; has the entries shown exactly after&nbsp; $\underline{i=4}$&nbsp; encoding steps.  
*Beim&nbsp; <u>Decoder</u>&nbsp; ergibt sich demgegenüber eine Zeitverzögerung um einen Schritt: &nbsp; $\underline{i=5}$.
+
*With the&nbsp; <u>decoder</u>, on the other hand, there is a time delay of one step: &nbsp; $\underline{i=5}$.
  
  
  
  
'''(4)'''&nbsp; Richtig ist der <u>Lösungsvorschlag 2</u>:
+
'''(4)'''&nbsp; <u>Solution suggestion 2</u> is correct:
*Die Sonderfallregelung der Decodierung ist&nbsp; (im vorliegenden Beispiel)&nbsp; dann notwendig, wenn im Codierschritt&nbsp; $i$&nbsp; der Index&nbsp; $I =i$&nbsp; ausgegeben wird.  
+
*The special case regulation of the decoding is necessary&nbsp; (in the present example)&nbsp; if the index&nbsp; $I =i$&nbsp; is output in the coding step&nbsp; $i$&nbsp;.
*Bei der Decodierung findet er dann die erforderliche Zuordnung&nbsp; "Index&nbsp; &#8594;&nbsp; Zeichenfolge"&nbsp; nicht, da das generierte Wörterbuch zum Zeitpunkt&nbsp; $i$&nbsp; nur Einträge mit Indizes&nbsp; $I < i$&nbsp; enthält.
+
*During decoding, it then does not find the required assignment&nbsp; "Index&nbsp; &#8594;&nbsp; String"&nbsp; since the generated dictionary at time&nbsp; $i$&nbsp; only contains entries with&nbsp; $I < i$&nbsp;.
*Für die Folge&nbsp; <b>ABABABBAA</b>&nbsp; gilt entsprechend der  Teilaufgabe&nbsp; '''(1)'''&nbsp; stets&nbsp; $I < i$.  
+
*For the sequence&nbsp; <b>ABABABBAA</b> &nbsp; &rArr; &nbsp; $I < i$ always applies according to subtask&nbsp; '''(1)'''&nbsp;.  
*Dagegen ergäbe sich für die Folge&nbsp; <b>ABABABABA</b>&nbsp; folgende Indizes:
+
*In contrast, the following indices would result for the sequence&nbsp; <b>ABABABABA</b>&nbsp;:
 
:$$i = 1\hspace{-0.15cm}: \hspace{0.15cm} I = 0\hspace{0.05cm},  
 
:$$i = 1\hspace{-0.15cm}: \hspace{0.15cm} I = 0\hspace{0.05cm},  
 
\hspace{0.5cm}i = 2\hspace{-0.15cm}: \hspace{0.15cm}I = 1\hspace{0.05cm},  
 
\hspace{0.5cm}i = 2\hspace{-0.15cm}: \hspace{0.15cm}I = 1\hspace{0.05cm},  
Line 122: Line 122:
 
\hspace{0.5cm}i = 5\hspace{-0.15cm}: \hspace{0.15cm}I = 3\hspace{0.05cm}.  $$
 
\hspace{0.5cm}i = 5\hspace{-0.15cm}: \hspace{0.15cm}I = 3\hspace{0.05cm}.  $$
  
Hier noch zusammenfassend die gesamte Decodierung von&nbsp; <b>ABABABABA</b>:  
+
Here is a summary of the entire decoding process of&nbsp; <b>ABABABABA</b>:  
  
*Die Vorbelegung des Wörterbuchs beinhaltet&nbsp; $(I=0$:&nbsp; <b>A</b>$)$ &nbsp; &nbsp; und&nbsp; $(I=1$:&nbsp; <b>B</b>$)$.  
+
*The pre-assignment of the dictionary includes&nbsp; $(I=0$:&nbsp; <b>A</b>$)$ &nbsp; &nbsp; and&nbsp; $(I=1$:&nbsp; <b>B</b>$)$.  
  
*Dann gilt mit dem Wörterbuch&ndash;Array&nbsp; $W(I)$:
+
*Then with the dictionary array&nbsp; $W(I)$:
:: $i = 1$: &nbsp; &nbsp; Decodierung &nbsp; $I=0$ &nbsp; &#8594; &nbsp; <b>A</b>,
+
:: $i = 1$: &nbsp; &nbsp; Decoding &nbsp; $I=0$ &nbsp; &#8594; &nbsp; <b>A</b>,
:: $i = 2$: &nbsp; &nbsp; Decodierung &nbsp; $I=1$ &nbsp; &#8594; &nbsp; <b>B</b>, &nbsp; &nbsp; &nbsp; $W(I = 2) =$ <b>AB</b>,
+
:: $i = 2$: &nbsp; &nbsp; Decoding&nbsp; $I=1$ &nbsp; &#8594; &nbsp; <b>B</b>, &nbsp; &nbsp; &nbsp; $W(I = 2) =$ <b>AB</b>,
:: $i = 3$: &nbsp; &nbsp; Decodierung &nbsp; $I=2$ &nbsp; &#8594; &nbsp; <b>AB</b>, &nbsp;&nbsp;&nbsp; $W(I = 3) =$ <b>BA</b>,
+
:: $i = 3$: &nbsp; &nbsp; Decoding&nbsp; $I=2$ &nbsp; &#8594; &nbsp; <b>AB</b>, &nbsp;&nbsp;&nbsp; $W(I = 3) =$ <b>BA</b>,
:: $i = 4$: &nbsp; &nbsp; Ein Eintrag mit dem Index&nbsp; $I = 4$&nbsp; ist nicht vorhanden &nbsp; &#8658; &nbsp; '''Sonderfallregelung''': <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Man nimmt das letzte Decodierergebnis&nbsp; $($hier&nbsp; <b>AB</b>$)$ und fügt das erste Zeichen dieser Sequenz hinten an &nbsp; &#8658; &nbsp; <b>ABA</b>. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Danach wird&nbsp; <b>ABA</b>&nbsp; im Wörterbuch unter dem&nbsp; Index&nbsp; $I = 4$&nbsp; abgelegt.
+
:: $i = 4$: &nbsp; &nbsp; An entry with index&nbsp; $I = 4$&nbsp; is not present &nbsp; &#8658; &nbsp; '''Special case rule''': <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; One takes the last decoding result&nbsp; $($here&nbsp; <b>AB</b>$)$ and adds the first character of this sequence at the end &nbsp; &#8658; &nbsp; <b>ABA</b>. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Then&nbsp; <b>ABA</b>&nbsp; is stored in the dictionary under&nbsp; index&nbsp; $I = 4$&nbsp;.
:: $i = 5$: &nbsp; &nbsp; Decodierung &nbsp; $I=3$ &nbsp; &#8594; &nbsp; <b>BA</b>. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  '''Ende der Decoder&ndash;Eingangsfolge'''.
+
:: $i = 5$: &nbsp; &nbsp; Decoding &nbsp; $I=3$ &nbsp; &#8594; &nbsp; <b>BA</b>. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  '''End of the decoder input sequence'''.
 
{{ML-Fuß}}
 
{{ML-Fuß}}
  
  
  
[[Category:Information Theory: Exercises|^2.2 Verfahren von Lempel, Ziv, Welch^]]
+
[[Category:Information Theory: Exercises|^2.2 Lempel-Ziv-Welch Compression^]]

Latest revision as of 11:34, 31 August 2021

Two snapshots of the LZW dictionary

The graph shows snapshots of the dictionary created during LZW coding of the input symbol sequence.

  • The upper graph is for input symbol sequence  ABABABBAA.
  • The lower dictionary is created during LZW coding of the sequence  ABABABABA.


In both cases, it is assumed that no characters other than  A  and  B  can occur at later times.

In LZW decoding, the same dictionaries are created, but then the dictionary entries occur one step later.  In subtask  (3)  the question is asked for which coding step or for which decoding step the two snapshots shown are valid.


In LZW coding, an index  $I$  is selected for each coding step  $i$  and transmitted (binary).  The character pair  AB  is represented by the index  $I = 2$  in the two dictionaries.  Here we consider the index  $I$  as a decimal number and leave the binary representation out of consideration for this task.


With LZW decoding, a character or character sequence is generated in the same way from each index  $I$  with the help of the dictionary, for example  $I = 1$  leads to the character  B  and  $I = 2$  to the character pair  AB.

If a dictionary entry with the desired index  $I$  is actually found, the decoding runs smoothly.  However, this is not always the case:

  • If a new index  $I$  is entered during encoding at step  $i$  and this  $I$  is at the same time the encoding result of the step, this index is not yet occupied in the dictionary at decoding step  $i$ .  The reason for this is that with the decoder the entries are made one step later than with the coder.
  • In the case of a  "binary"  input sequence  $($all characters are  A  or  B$)$,  a special rule must always be applied in LZW decoding if the entry with index  $I = i$  was made in coding step  $i$ .


This special rule shall be illustrated by an example:

  • For step  $i$  there is no entry in the decoder dictionary matching index  $I$ .
  • We assume that in the previous step  $(i- 1)$  the decoding result was  ABBABA .
  • Then we add the first character of the sequence to this string.   Here:  ABBABAA.
  • Then one enters the sequence  ABBABAA  into the dictionary under index  $I$ .





Hints:

LZ77 - the basic form of Lempel-Ziv algorithms,
Lempel-Ziv coding with variable index bit length,
Decoding of the LZW algorithm.
  • Also, when solving this task, note that the LZW algorithm does not assume an empty dictionary.
  • Rather, the indices  $I = 0$  to  $I = M- 1$  contain all  $M$  permissible characters of the alphabet.

Questions

1

Encode the input sequence  ABABABBAA  according to the above diagram.  Which indices  $I_i$  result for the steps  $i=1$, ... , $i=5$?

$I_1 \ = \ $

$I_2 \ = \ $

$I_3 \ = \ $

$I_4 \ = \ $

$I_5 \ = \ $

2

Now encode the input sequence  ABABABABA  according to the diagram below.  Specify the indices  $I_i$  for the steps  $i=4$  and  $i=5$ .

$I_4 \ = \ $

$I_5 \ = \ $

3

For which step  $i$  does the snapshot of the dictionary shown on the exercise description page apply with respect to

$\text{Encoding:} \ \ i \ = \ $

$\text{Decoding:} \ \ i \ = \ $

4

When does one have to resort to the decoding special case rule?

When decoding  ABABABBAA  in step  $i = 4$.
When decoding  ABABABABA  in step  $i = 4$.
When decoding  ABABABABA  in step  $i = 5$.


Solution

(1)  We use  $W(I)$  to denote a field (array),  that describes the dictionary and whose elements contain characters or strings.  

  • The encoding of  ABABABBAA  proceeds as follows:
$i = 1$:     A    →   $\underline{I=0}$,   $W(I = 2) =$ AB,
$i = 2$:     B    →   $\underline{I=1}$,   $W(I = 3) =$ BA,
$i = 3$:     AB →   $\underline{I=2}$,   $W(I = 4) =$ ABA,
$i = 4$:     AB →   $\underline{I=2}$,   $W(I = 5) =$ ABB,
$i = 5$:     BA →   $\underline{I=3}$,   $W(I = 6) =$ BAA.
  • Note that the last character  $($A$)$  of the input string  ABABABBAA  at time  $i = 5$  is already considered in the dictionary entry but has not yet been encoded.


(2)  For the steps  $i = 1$  to  $i = 3$  nothing changes compared to subtask  (1).

  • Afterwards, the following applies:
$i = 4$:     ABA →   $\underline{I=4}$,   $W(I = 5) =$ ABAB,
$i = 5$:     BA →   $\underline{I=3}$,   encoding completed, no new dictionary entry possible.


(3)  The comparison with above results shows:

  • The dictionary of the  encoder  has the entries shown exactly after  $\underline{i=4}$  encoding steps.
  • With the  decoder, on the other hand, there is a time delay of one step:   $\underline{i=5}$.



(4)  Solution suggestion 2 is correct:

  • The special case regulation of the decoding is necessary  (in the present example)  if the index  $I =i$  is output in the coding step  $i$ .
  • During decoding, it then does not find the required assignment  "Index  →  String"  since the generated dictionary at time  $i$  only contains entries with  $I < i$ .
  • For the sequence  ABABABBAA   ⇒   $I < i$ always applies according to subtask  (1) .
  • In contrast, the following indices would result for the sequence  ABABABABA :
$$i = 1\hspace{-0.15cm}: \hspace{0.15cm} I = 0\hspace{0.05cm}, \hspace{0.5cm}i = 2\hspace{-0.15cm}: \hspace{0.15cm}I = 1\hspace{0.05cm}, \hspace{0.5cm}i = 3\hspace{-0.15cm}: \hspace{0.15cm}I = 2\hspace{0.05cm}, \hspace{0.5cm}\underline{i = 4\hspace{-0.15cm}: \hspace{0.15cm}I = 4}\hspace{0.05cm}, \hspace{0.5cm}i = 5\hspace{-0.15cm}: \hspace{0.15cm}I = 3\hspace{0.05cm}. $$

Here is a summary of the entire decoding process of  ABABABABA:

  • The pre-assignment of the dictionary includes  $(I=0$:  A$)$     and  $(I=1$:  B$)$.
  • Then with the dictionary array  $W(I)$:
$i = 1$:     Decoding   $I=0$   →   A,
$i = 2$:     Decoding  $I=1$   →   B,       $W(I = 2) =$ AB,
$i = 3$:     Decoding  $I=2$   →   AB,     $W(I = 3) =$ BA,
$i = 4$:     An entry with index  $I = 4$  is not present   ⇒   Special case rule:
                  One takes the last decoding result  $($here  AB$)$ and adds the first character of this sequence at the end   ⇒   ABA.
                  Then  ABA  is stored in the dictionary under  index  $I = 4$ .
$i = 5$:     Decoding   $I=3$   →   BA.             End of the decoder input sequence.