W przypadku tak małej liczby bitów nie można zapisać wielu bitów, jak zauważył Glorfindel . Jeśli jednak domena, której używasz, ma jeszcze kilka bitów, możesz uzyskać znaczne oszczędności w przypadku średniej wielkości, kodując zakresy wartością początkową i deltą.
Załóżmy, że domeną są liczby całkowite, czyli 32 bity. Przy naiwnym podejściu potrzebujesz 64 bitów (początek, koniec) do przechowywania zakresu.
Jeśli przejdziemy do kodowania (start, delta), możemy z tego skonstruować koniec zakresu. Wiemy, że w najgorszym przypadku początek wynosi 0, a delta ma 32 bity.
2 ^ 5 wynosi 32, więc kodujemy długość delty w pięciu bitach (bez długości zerowej, zawsze dodajemy 1), a kodowanie staje się (początek, długość, delta). W najgorszym przypadku kosztuje to 32 * 2 + 5 bitów, czyli 69 bitów. W najgorszym przypadku, jeśli wszystkie zakresy są długie, jest to gorsze niż naiwne kodowanie.
W najlepszym przypadku kosztuje 32 + 5 + 1 = 38 bitów.
Oznacza to, że jeśli musisz zakodować wiele zakresów, a każdy z tych zakresów obejmuje tylko niewielką część Twojej domeny, to ostatecznie zużywasz mniej miejsca przy użyciu tego kodowania. Nie ma znaczenia, w jaki sposób rozdzielone są początki, ponieważ start zawsze zajmie 32 bity, ale ma znaczenie, w jaki sposób długości przedziałów są rozdzielone. Jeśli im więcej masz małych długości, tym lepsza kompresja, tym więcej zakresów, które pokrywają całą długość domeny, tym gorsze będzie to kodowanie.
Jeśli jednak masz wiele zakresów zgrupowanych wokół podobnych punktów początkowych (na przykład ponieważ otrzymujesz wartości z czujnika), możesz osiągnąć jeszcze większe oszczędności. Możesz zastosować tę samą technikę do wartości początkowej i użyć odchylenia, aby zrównoważyć wartość początkową.
Powiedzmy, że masz 10000 zakresów. Zakresy są pogrupowane wokół określonej wartości. Kodujesz odchylenie za pomocą 32 bitów.
Stosując podejście naiwne, potrzebujesz 32 * 2 * 10 000 = 640 000 bitów do przechowywania wszystkich tych zakresów.
Kodowanie odchylenia zajmuje 32 bity, a kodowanie każdego zakresu w najlepszym przypadku to 5 + 1 + 5 + 1 = 12 bitów, co daje w sumie 120 000 + 32 = 120 032 bitów. W najgorszym przypadku potrzebujesz 5 + 32 + 5 + 32 bitów, a więc 74 bitów, co daje łącznie 740 032 bitów.
Oznacza to, że dla 10 000 wartości w domenie, która wymaga 32 bitów do kodowania, otrzymujemy
- W najlepszym przypadku 120 032 bitów z inteligentnym kodowaniem delta
- 640 000 bitów z naiwnym początkowym, końcowym kodowaniem, zawsze (bez najlepszego lub najgorszego przypadku)
- 740 032 bitów w najgorszym przypadku z inteligentnym kodowaniem delta
Jeśli zastosujesz naiwne kodowanie jako punkt odniesienia, oznacza to oszczędność do 81,25% lub nawet 15 625% więcej kosztów.
W zależności od podziału wartości, oszczędności te są znaczące. Poznaj swoją domenę biznesową! Dowiedz się, co chcesz zakodować.
Jako rozszerzenie możesz również zmienić nastawienie. Jeśli analizujesz dane i identyfikujesz grupy wartości, możesz sortować dane do segmentów i kodować każdy z tych segmentów osobno, z własnym nastawieniem. Oznacza to, że możesz zastosować tę technikę nie tylko do zakresów zgrupowanych wokół jednej wartości początkowej, ale także do zakresów zgrupowanych wokół wielu wartości.
Jeśli punkty początkowe są równo rozłożone, to kodowanie nie działa tak dobrze.
To kodowanie jest oczywiście bardzo złe do indeksowania. Nie można po prostu odczytać x-tej wartości. Można go odczytać tylko sekwencyjnie. Co jest odpowiednie w niektórych sytuacjach, np. Przesyłanie strumieniowe przez sieć lub pamięć masową (np. Na taśmie lub HDD).
Ocena danych, grupowanie ich i wybranie właściwego odchylenia może być znaczną pracą i może wymagać pewnego dopracowania w celu uzyskania optymalnych wyników.