Gekürzte Lauflängencodierung, wie gibt man die erste 0 an?
Also, wir haben in Informatik vor kurzem diese gekürzte Schreibweise für die Lauflängencodierung durch genommen, also wo man die Anzahl der Nullen und Einsen in Folge, Satt den Nullen aufschreibt. (Bsp. aus 01000110 wird 11321).
Leider haben wir dazu keine Notizen aufgeschrieben und ich hab jetzt keine Ahnung wie man angibt, dass die erste Zahl eine 0 ist.
Könnte bitte jemand der davon ne Ahnung hat es erklären?
Danke im voraus.
1 Antwort
Es gibt unterschiedliche Lauflängenkodierungen, von daher ist es nicht eindeutig zu klären aber:
01000110 -> 11321
1 Null, 1 Eins, 3 Nullen, 2 Eisen, 1 Null
Das Problem ist, daß diese Variante die Information womit gestartet wird (1 oder 0) nicht vorhält, und auch informationen fehlen, wie höherwertige Zahlen kodiert werden.
Das Problem ist, wenn ich für die Wiederholungen von Bits immer ein Oktett verwende, dann spare ich unterm Strich nichts. (Andererseits würde ich z.B. mit Nibbles ja die Runlänge erheblich einschränken)
Es gibt ja auch Kodierungen, die für Runs auf Bytebene arbeiten, da nutzt man dann einen Schwellwert, der spezifisch für die Wahrscheinlichkeit der möglichen Werte gewählt wird. Eine andere Variante findet sich z.B. bei JPEG, wo nur die 0-Runs kodiert werden, weil diese sehr häufig bei den Matritzen vorkommen.
So oder so, im vorliegenden Beispiel ist zwar das Prinzip zu erkennen, es ist aber halt keine fertige Lauflängenkodierung.
----
P.S.: Wenn mein Datenstrom eine Transofrmation durchläuft, sodaß er immer mit einer 0 (oder 1) beginnt, wäre das Startproblem natürlich auch gelöst (eben außerhalb der eigentlichen RLE).
Wenn man davon ausgeht, dass jedes Byte separat codiert wird, löst sich das Problem mit den höherwertigen Zahlen ganz von selbst. Evtl. könnte man auch Hexadezimal codieren und dabei immer 2 Byte zusammenfassen.
Das größere Problem ist tatsächlich die Frage ob das erste Bit 0 oder 1 ist. Da fällt mir leider spontan auch nichts ein, ausser evtl. eine ganze Ziffer dafür zu "verschwenden".