Für solch eine kleine Anzahl von Bits ist es unmöglich, viele Bits zu speichern, wie Glorfindel herausgestellt hat . Wenn die von Ihnen verwendete Domain jedoch einige Bits mehr enthält, können Sie im Durchschnitt erhebliche Einsparungen erzielen, indem Sie Bereiche mit dem Startwert und einem Delta codieren.
Nehmen wir an, die Domain sind die ganzen Zahlen, also 32 Bit. Bei der naiven Methode benötigen Sie 64 Bit (Anfang, Ende), um einen Bereich zu speichern.
Wenn wir zu einer Kodierung von (Start, Delta) wechseln, können wir daraus das Ende des Bereichs konstruieren. Wir wissen, dass im schlimmsten Fall der Start 0 ist und das Delta 32 Bits hat.
2 ^ 5 ist 32, also codieren wir die Länge des Deltas in fünf Bits (keine Nulllänge, addieren immer 1) und die Codierung wird (Start, Länge, Delta). Im schlimmsten Fall kostet dies 32 * 2 + 5 Bit, also 69 Bit. Im schlimmsten Fall, wenn alle Bereiche lang sind, ist dies schlechter als die naive Codierung.
Im besten Fall kostet es 32 + 5 + 1 = 38 Bit.
Wenn Sie also viele Bereiche codieren müssen und diese Bereiche jeweils nur einen kleinen Teil Ihrer Domain abdecken, belegen Sie mit dieser Codierung im Durchschnitt weniger Speicherplatz . Es spielt keine Rolle, wie die Starts verteilt sind, da der Start immer 32 Bit dauert, aber es spielt keine Rolle, wie die Längen der Bereiche verteilt sind. Je kleiner die Länge ist, desto besser ist die Komprimierung. Je mehr Bereiche über die gesamte Länge der Domäne verfügbar sind, desto schlechter wird die Codierung.
Wenn Sie jedoch viele Bereiche um ähnliche Startpunkte gruppieren (z. B. weil Sie Werte von einem Sensor erhalten), können Sie noch größere Einsparungen erzielen. Sie können dieselbe Technik auf den Startwert anwenden und eine Abweichung verwenden, um den Startwert zu versetzen.
Nehmen wir an, Sie haben 10000 Bereiche. Die Bereiche sind um einen bestimmten Wert gruppiert. Sie codieren die Vorspannung mit 32 Bits.
Bei Verwendung des naiven Ansatzes würden Sie 32 * 2 * 10 000 = 640 000 Bits benötigen, um alle diese Bereiche zu speichern.
Das Codieren der Vorspannung dauert 32 Bits, und das Codieren jedes Bereichs dauert im besten Fall dann 5 + 1 + 5 + 1 = 12 Bits, was insgesamt 120 000 + 32 = 120 032 Bits ergibt. Im schlimmsten Fall benötigen Sie 5 + 32 + 5 + 32 Bit, also 74 Bit, für insgesamt 740 032 Bit.
Dies bedeutet, dass wir für 10 000 Werte in einer Domäne, für deren Codierung 32 Bit erforderlich sind, Folgendes erhalten
- 120 032 Bit im besten Fall mit der intelligenten Delta-Codierung
- 640 000 Bits mit der naiven Start- und Endkodierung, immer (kein bester oder schlechtester Fall)
- 740 032 Bit mit der Smart-Delta-Codierung im ungünstigsten Fall
Wenn Sie die naive Codierung als Basis nehmen, bedeutet dies entweder Einsparungen von bis zu 81,25% oder bis zu 15,625% mehr Kosten.
Je nachdem, wie Ihre Werte verteilt sind, sind diese Einsparungen erheblich. Kennen Sie Ihre Geschäftsdomäne! Wissen Sie, was Sie codieren möchten.
Als Erweiterung können Sie auch die Vorspannung ändern. Wenn Sie die Daten analysieren und Wertegruppen identifizieren, können Sie die Daten in Gruppen sortieren und jede dieser Gruppen separat mit einer eigenen Verzerrung codieren. Dies bedeutet, dass Sie diese Technik nicht nur auf Bereiche anwenden können, die um einen einzelnen Startwert gruppiert sind, sondern auch auf Bereiche, die um mehrere Werte gruppiert sind.
Wenn Ihre Startpunkte gleichmäßig verteilt sind, funktioniert diese Codierung nicht wirklich gut.
Diese Kodierung ist offensichtlich extrem schlecht zu indizieren. Sie können den x-ten Wert nicht einfach ablesen. Es kann so ziemlich nur sequentiell gelesen werden. Was in manchen Situationen angebracht ist, z. B. Streaming über das Netzwerk oder Massenspeicher (z. B. auf Band oder Festplatte).
Das Auswerten der Daten, das Gruppieren und das Auswählen der richtigen Verzerrung kann ein erheblicher Aufwand sein und erfordert möglicherweise eine Feinabstimmung, um optimale Ergebnisse zu erzielen.