Golomb-Codes e Rice-Codes sono efficienti solo se i simboli che vuoi codificare hanno una distribuzione geometrica o una distribuzione quasi geometrica. (d (n) = (1-p) p n ). Questo è un codice che può codificare anche valori infiniti, ma il simbolo codificato cresce di dimensioni quando è più lontano da 0, poiché sono meno probabili dei valori vicini a 0. Questo è il motivo per cui si spendono più bit su simboli meno probabili e pochi bit su molto simboli probabili.
Un codice Golomb è un codice di lunghezza variabile. Dove ogni simbolo può essere codificato su una base diversa. Meno è probabile, più lunga è la codifica. Ogni simbolo è codificato da più bit e si scrive la codifica bit per bit, indipendentemente dal fatto che si sia verificato un vincolo magico a 8, 16, 32 o 64 bit. Il codice non è inteso per essere letto / scritto byte, word, int o long, questo è quello che fai, quando scrivi i dati codificati sul disco. Se devi spendere 33 bit per un dato simbolo, devi spenderlo, altrimenti il codice non è reversibile. Ma devi leggere o scrivere bit per bit.
Nel tuo esempio il valore 120 creerebbe un prefisso a 31 bit e alcuni extra 2 per il codice. Ma d'altra parte 120 è 2 -30 volte meno probabile di 0. Quindi è completamente perfetto per spendere questo "molto" bit per esso.
La selezione della M ottimale dipende dalla distribuzione data. Golomb-Coding e Rice-Coding (che è un caso speciale della codifica di Golomb) sono usati nella compressione delle immagini e nella compressione video, perché è facile da implementare e veloce nell'elaborazione.