인코딩 | 디코딩 | 압축

> rice | adaptive | compress <

// Rice 코딩 – 조정 가능한 파라미터로 정수를 적응형으로 압축

0자
0자

>> 기능

[적응형]

조정 가능한 파라미터

다양한 데이터 분포에 맞게 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), 그리고 기하분포를 따르는 센서 데이터 등에서 널리 사용됩니다. 특히, 확률이 지수적으로 감소하는 작은 비음수 정수에 대해 매우 효과적입니다.