> rice | adattivo | compressione <
// Codifica Rice – Compressione adattiva di interi con parametro regolabile
>> funzioni
Parametro regolabile
Regola k per ottimizzare diverse distribuzioni di dati.
Dati geometrici
Ottimale per dati con distribuzione geometrica o esponenziale.
Codifica veloce
Operazioni semplici di divisione e resto per alte prestazioni.
>> dettagli tecnici
Come funziona la codifica Rice:
La codifica Rice divide ogni intero n per 2^k per ottenere quoziente q e resto r. Il quoziente è codificato in modo unario (q uno seguiti da uno zero) e il resto in k bit binari. Questo crea un codice a lunghezza variabile che si adatta alla distribuzione dei dati attraverso il parametro k.
Esempio di codifica Rice (k=2):
k=2, M=2^2=4 0 → q=0, r=0 → 0|00 → 000 1 → q=0, r=1 → 0|01 → 001 2 → q=0, r=2 → 0|10 → 010 3 → q=0, r=3 → 0|11 → 011 4 → q=1, r=0 → 10|00 → 1000 5 → q=1, r=1 → 10|01 → 1001 6 → q=1, r=2 → 10|10 → 1010 7 → q=1, r=3 → 10|11 → 1011 8 → q=2, r=0 → 110|00 → 11000 k maggiore: meno bit unari, più bit binari k minore: più bit unari, meno bit binari
Perché usare la codifica Rice?:
- ▸Si adatta alla distribuzione dei dati
- ▸Facile da implementare
- ▸Codifica e decodifica veloci
- ▸Ottima per dati da sensori
- ▸Efficiente per piccoli interi
>> domande frequenti
Che cos'è la codifica Rice?
La codifica Rice è un metodo di codifica entropica a lunghezza variabile particolarmente efficiente per distribuzioni geometriche. È un caso particolare della codifica Golomb in cui il divisore M è limitato alle potenze di 2 (M = 2^k), rendendo l'implementazione più veloce tramite operazioni sui bit.
Come scegliere il parametro k?
Il valore ottimale di k dipende dalla distribuzione dei dati. Per dati con media μ, k ottimale ≈ log₂(μ × ln(2)). Valori piccoli di k (0–2) funzionano bene per numeri molto piccoli, mentre valori più grandi (4–8) sono migliori per dati con valori più elevati. Usa la funzione di analisi per trovare il k ottimale per i tuoi dati.
Rice vs codifica Golomb?
La codifica Rice è un sottoinsieme della codifica Golomb in cui M = 2^k. Questa restrizione rende Rice più veloce (shift di bit invece di divisioni), ma talvolta leggermente meno ottimale. Golomb può scegliere qualsiasi valore di M per una migliore compressione, mentre Rice scambia un po' di efficienza con maggiore velocità.
Dove viene utilizzata la codifica Rice?
La codifica Rice è ampiamente utilizzata nella compressione audio lossless (FLAC, ALAC), nella compressione di immagini (JPEG-LS) e nei dati provenienti da sensori con distribuzioni geometriche. È particolarmente efficace per piccoli interi non negativi con probabilità decrescente esponenzialmente.
// Esempio svolto
| n | q | r | k=2 |
|---|---|---|---|
| 0 | 0 | 00 | 000 |
| 1 | 0 | 01 | 001 |
| 2 | 0 | 10 | 010 |
| 3 | 0 | 11 | 011 |
| 4 | 1 | 00 | 1000 |
| 5 | 1 | 01 | 1001 |
| 6 | 1 | 10 | 1010 |
| 7 | 1 | 11 | 1011 |
| 8 | 2 | 00 | 11000 |
// Esempi di codice
Rice code with parameter k (Golomb code with M = 2^k) q = n >> k quotient, written as q ones followed by a zero r = n & (2^k - 1) remainder, written as k plain bits code = unary(q) + r k = 2, n = 9 -> q = 2, r = 01 -> 110 01 Decode: count the leading 1s (q), skip the 0, read k bits (r), n = (q << k) | r Choose k about log2(mean value): small values -> small k
>> Altre domande
D: Che differenza c’è tra codice di Rice e di Golomb?
R: Il codice di Rice è il caso speciale del codice di Golomb in cui il parametro M è una potenza di due (M = 2^k). Shift e maschera sostituiscono la divisione, ed è molto veloce.
D: Come si sceglie il parametro k?
R: k dovrebbe essere circa log2 della media dei valori. Un k troppo piccolo genera lunghe sequenze unarie, troppo grande spreca bit sul resto. Codec come FLAC scelgono k per blocco.
D: A cosa serve il codice di Rice?
R: Per interi non negativi con distribuzione geometrica, dove i valori piccoli sono molto più frequenti. Tipicamente residui di predizione in audio lossless (FLAC) e immagini (JPEG-LS).