> rice | adaptativo | compressão <
// Codificação Rice – Compressão adaptativa de inteiros com parâmetro ajustável
>> recursos
Parâmetro ajustável
Ajuste k para otimizar diferentes distribuições de dados.
Dados geométricos
Ótimo para dados com distribuição geométrica ou exponencial.
Codificação rápida
Operações simples de divisão e resto para alto desempenho.
>> detalhes técnicos
Como funciona a codificação Rice:
A codificação Rice divide cada inteiro n por 2^k para obter o quociente q e o resto r. O quociente é codificado em unário (q uns seguidos de um zero) e o resto em k bits binários. Isso cria um código de comprimento variável que se adapta à distribuição dos dados por meio do parâmetro k.
Exemplo de codificação 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 maior: menos bits unários, mais bits binários k menor: mais bits unários, menos bits binários
Por que usar a codificação Rice?:
- ▸Adapta-se à distribuição dos dados
- ▸Fácil de implementar
- ▸Codificação e decodificação rápidas
- ▸Ótimo para dados de sensores
- ▸Eficiente para inteiros pequenos
>> perguntas frequentes
O que é a codificação Rice?
A codificação Rice é um método de codificação entrópica de comprimento variável particularmente eficiente para distribuições geométricas. É um caso especial da codificação Golomb em que o divisor M é restrito a potências de 2 (M = 2^k), permitindo implementações rápidas com operações de bits.
Como escolher o parâmetro k?
O valor ideal de k depende da distribuição dos seus dados. Para dados com média μ, o k ideal ≈ log₂(μ × ln(2)). Valores pequenos de k (0–2) funcionam bem para números muito pequenos, enquanto valores maiores (4–8) são melhores para dados com valores mais altos. Use a função de análise para encontrar o k ideal para seus dados.
Rice vs codificação Golomb?
A codificação Rice é um subconjunto da codificação Golomb em que M = 2^k. Essa restrição torna Rice mais rápida (deslocamentos de bits em vez de divisões), embora às vezes um pouco menos eficiente. Golomb pode escolher qualquer valor de M para melhor compressão, enquanto Rice troca um pouco de eficiência por velocidade.
Onde a codificação Rice é usada?
A codificação Rice é amplamente utilizada na compressão de áudio sem perdas (FLAC, ALAC), na compressão de imagens (JPEG-LS) e em dados de sensores com distribuições geométricas. É particularmente eficaz para inteiros pequenos não negativos com probabilidade que decai exponencialmente.
// Exemplo resolvido
| 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 |
// Exemplos de código
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
>> Mais perguntas
P: Qual a diferença entre código Rice e Golomb?
R: O código Rice é o caso especial do Golomb em que o parâmetro M é potência de dois (M = 2^k). Deslocamento de bits e máscara substituem a divisão, o que é muito rápido.
P: Como escolher o parâmetro k?
R: k deve ser cerca de log2 da média dos valores. Um k pequeno demais gera longas sequências unárias; grande demais desperdiça bits no resto. Codecs como o FLAC escolhem k por bloco.
P: Para que serve o código Rice?
R: Para inteiros não negativos com distribuição geométrica, em que valores pequenos são bem mais frequentes. Tipicamente resíduos de predição em áudio sem perdas (FLAC) e imagem (JPEG-LS).