Per un numero così piccolo di bit, è impossibile salvare molti bit come Glorfindel ha sottolineato . Tuttavia, se il dominio che stai utilizzando ha qualche bit in più, puoi ottenere risparmi significativi per il caso medio codificando gli intervalli con il valore iniziale e un delta.
Supponiamo che il dominio sia il numero intero, quindi 32 bit. Con l'approccio ingenuo, sono necessari 64 bit (inizio, fine) per memorizzare un intervallo.
Se passiamo a una codifica di (inizio, delta), possiamo costruire da questo la fine dell'intervallo. Sappiamo che nel peggiore dei casi, l'inizio è 0 e il delta ha 32 bit.
2 ^ 5 è 32, quindi codifichiamo la lunghezza del delta in cinque bit (nessuna lunghezza zero, aggiungi sempre 1) e la codifica diventa (inizio, lunghezza, delta). Nel peggiore dei casi, questo costa 32 * 2 + 5 bit, quindi 69 bit. Quindi nel peggiore dei casi, se tutti gli intervalli sono lunghi, questa è peggio della codifica ingenua.
Nel migliore dei casi, costa 32 + 5 + 1 = 38 bit.
Ciò significa che se devi codificare molti intervalli e tali intervalli coprono solo una piccola parte del tuo dominio, alla fine utilizzi meno spazio in media utilizzando questa codifica. Non importa come vengono distribuiti gli inizi, poiché l'avvio richiederà sempre 32 bit, ma non importa come vengono distribuite le lunghezze degli intervalli. Se più lunghezze hai, migliore è la compressione, più intervalli hai che coprono l'intera lunghezza del dominio, peggiore sarà questa codifica.
Tuttavia, se si hanno molti intervalli raggruppati attorno a punti di partenza simili (ad esempio perché si ottengono valori da un sensore), è possibile ottenere risparmi ancora maggiori. È possibile applicare la stessa tecnica al valore iniziale e utilizzare un bias per compensare il valore iniziale.
Supponiamo che tu abbia 10000 intervalli. Gli intervalli sono raggruppati attorno a un determinato valore. Si codifica il bias con 32 bit.
Usando l'approccio ingenuo, occorrerebbero 32 * 2 * 10 000 = 640 000 bit per memorizzare tutti questi intervalli.
La codifica del bias richiede 32 bit e la codifica di ogni intervallo richiede nel migliore dei casi quindi 5 + 1 + 5 + 1 = 12 bit, per un totale di 120 000 + 32 = 120 032 bit. Nel peggiore dei casi, sono necessari 5 + 32 + 5 + 32 bit, quindi 74 bit, per un totale di 740 032 bit.
Ciò significa che otteniamo 10 000 valori su un dominio che impiega 32 bit per la codifica
- 120 032 bit con la codifica delta intelligente nel migliore dei casi
- 640.000 bit con inizio ingenuo, codifica finale, sempre (nessun caso migliore o peggiore)
- 740 032 bit con la codifica delta intelligente nel caso peggiore
Se si considera la codifica ingenua come base, ciò significa un risparmio fino all'81,25% o fino al 15,625% in più.
A seconda della modalità di distribuzione dei valori, tali risparmi sono significativi. Conosci il tuo dominio aziendale! Scopri cosa vuoi codificare.
Come estensione, puoi anche cambiare il bias. Se si analizzano i dati e si identificano gruppi di valori, è possibile ordinare i dati in bucket e codificare ciascuno di questi bucket separatamente, con la propria distorsione. Ciò significa che è possibile applicare questa tecnica non solo agli intervalli raggruppati attorno a un singolo valore iniziale, ma anche agli intervalli raggruppati attorno a più valori.
Se i tuoi punti di partenza sono distribuiti equamente, questa codifica non funziona molto bene.
Questa codifica è ovviamente estremamente negativa da indicizzare. Non puoi semplicemente leggere il valore x-esimo. Può praticamente essere letto solo in sequenza. Ciò è appropriato in alcune situazioni, ad es. Streaming in rete o archiviazione di massa (ad es. Su nastro o HDD).
Valutare i dati, raggrupparli e scegliere la distorsione corretta può essere un lavoro sostanziale e potrebbe richiedere una messa a punto per risultati ottimali.