Sto cercando di implementare la codifica di Golomb, ma non capisco come sia sintonizzata per ottenere il codice ottimale.
È ha detto che
Golomb coding uses a tunable parameter M to divide an input value into two parts: q, the result of a division by M, and r, the remainder. The quotient is sent in unary coding, followed by the remainder in truncated binary encoding.
Non capisco come dovrei scegliere il parametro M - Non riesco a vedere come la spiegazione in Wikipedia si riferisce ai dati reali. Credo che dovrebbe essere correlato a momenti statistici, è vero?
Ad esempio, se ho questo esempio impostato:
{} 3,4,4,4,3,1,2,2,3,1,2,1,4,1,2,2,2,2,1,1,2,2,1
Credo che M dovrebbe essere molto piccolo per questo tipo di dati. Scommetto che è 1 o 2. La media è ~ 2.2 e la deviazione standard è ~ 1.1. La mia intuizione mi direbbe di scegliere 2.
Un altro set di dati qui:
{} 2,7,11,19,6,2,6,13,11,1,5,2,19,7,6,9,6,7,2,4,5,12,3
Questa volta la media è ~ 7.2 e la deviazione standard è ~ 5.0.
In questo caso 7 è il valore giusto? E dovrei preferire il codice Rice (usare 8 come è una potenza di 2) se ottengo un valore come 7?
Capisco che la divisione sarà più facile se utilizzo la codifica Rice, ma ci sono dei vantaggi nel NON usarla? Voglio dire - in entrambi i casi verranno utilizzati 3 bit per il resto, in che modo il codice Golomb puro potrebbe essere più ottimale di allora?
Ancora una sfumatura: il codice Golomb è per interi non negativi. Se invece ho numeri interi positivi, dovrei invece salvare x-1? Cambierà molto per il primo dei set di dati menzionati.