> rice | adaptive | compress <
// Rice 코딩 – 조정 가능한 파라미터로 정수를 적응형으로 압축
>> 기능
조정 가능한 파라미터
다양한 데이터 분포에 맞게 k 값을 조정해 압축 효율을 최적화합니다.
기하분포 데이터
기하·지수 분포를 따르는 데이터에 최적화되어 있습니다.
고속 코딩
단순한 나눗셈과 나머지 연산으로 높은 성능을 제공합니다.
>> 기술 정보
Rice 코딩 동작 방식
Rice 코딩에서는 각 정수 n을 2^k로 나누어 몫 q와 나머지 r을 구합니다. 몫은 유니어리(1을 q번 나열하고 0으로 종료)로 인코딩하고, 나머지는 k비트 이진수로 표현합니다. 이렇게 하면 k 파라미터를 통해 데이터 분포에 맞게 조정되는 가변 길이 코드가 만들어집니다.
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가 클수록: 유니어리 비트는 줄고 이진 비트는 늘어남 k가 작을수록: 유니어리 비트는 늘고 이진 비트는 줄어듦
Rice 코딩을 사용하는 이유
- 데이터 분포에 적응
- 구현이 간단함
- 빠른 인코딩/디코딩
- 센서 데이터에 적합
- 작은 정수에 대해 효율적
>> 자주 묻는 질문
Rice 코딩이란 무엇인가요?
Rice 코딩은 기하분포에 특히 효율적인 가변 길이 엔트로피 코딩 방식입니다. 나누는 값 M을 2의 거듭제곱(M = 2^k)으로 제한한 Golomb 코딩의 특수한 형태로, 비트 시프트 연산을 사용해 더 빠르게 구현할 수 있습니다.
k 파라미터는 어떻게 선택하나요?
최적의 k 값은 데이터 분포에 따라 달라집니다. 평균이 μ인 데이터의 경우 대략적으로 k ≈ log₂(μ × ln(2))로 근사할 수 있습니다. 작은 k(0–2)는 아주 작은 값에 적합하고, 큰 k(4–8)는 더 큰 값을 가지는 데이터에 적합합니다. 분석 기능을 사용해 데이터에 가장 잘 맞는 k를 찾아보세요.
Rice 코딩과 Golomb 코딩의 차이는 무엇인가요?
Rice 코딩은 M = 2^k 제약을 가지는 Golomb 코딩의 부분 집합입니다. 이 제약 덕분에 Rice 코딩은 (나눗셈 대신) 비트 시프트를 사용해 더 빠르게 동작하지만, 압축 효율이 약간 떨어질 수 있습니다. Golomb 코딩은 더 나은 압축을 위해 임의의 M 값을 선택할 수 있지만, Rice는 속도를 위해 약간의 효율을 희생합니다.
Rice 코딩은 어디에 사용되나요?
Rice 코딩은 무손실 오디오 압축(FLAC, ALAC), 이미지 압축(JPEG-LS), 그리고 기하분포를 따르는 센서 데이터 등에서 널리 사용됩니다. 특히, 확률이 지수적으로 감소하는 작은 비음수 정수에 대해 매우 효과적입니다.