Gekürzte Lauflängencodierung, wie gibt man die erste 0 an?

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.

Isendrak  30.09.2019, 16:23

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".

1
KarlRanseierIII  30.09.2019, 16:53
@Isendrak

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).

1