골롬-라이스 부호 계산기
값과 매개변수 m을 넣으면 몫은 단항, 나머지는 이진으로 적는 골롬-라이스 부호를 만들고 길이를 냅니다. m을 바꿔 가며 비트 수가 어떻게 갈리는지 보이고, 값의 평균에서 최적 m을 구해 줍니다.
0 이상의 정수를 쉼표나 공백으로 나눠 적습니다. 64개까지, 100,000까지.
2의 거듭제곱이라 라이스 부호입니다. 나머지가 늘 1비트입니다.
전체 비트 수
37비트
값 16개를 m=2으로 부호화하면 값당 평균 2.31비트입니다. 고정 길이로 적으면 값당 3비트씩 48비트가 듭니다.
값마다의 부호
| 값 | 몫 | 나머지 | 부호 | 비트 |
|---|---|---|---|---|
| 0 | 0 | 0 | 00 | 2 |
| 1 | 0 | 1 | 01 | 2 |
| 0 | 0 | 0 | 00 | 2 |
| 2 | 1 | 0 | 100 | 3 |
| 0 | 0 | 0 | 00 | 2 |
| 1 | 0 | 1 | 01 | 2 |
| 3 | 1 | 1 | 101 | 3 |
| 0 | 0 | 0 | 00 | 2 |
| 1 | 0 | 1 | 01 | 2 |
| 0 | 0 | 0 | 00 | 2 |
| 0 | 0 | 0 | 00 | 2 |
| 2 | 1 | 0 | 100 | 3 |
| 1 | 0 | 1 | 01 | 2 |
| 0 | 0 | 0 | 00 | 2 |
| 4 | 2 | 0 | 1100 | 4 |
| 1 | 0 | 1 | 01 | 2 |
파란 부분이 몫을 단항으로 적은 것(1을 몫만큼 늘어놓고 0으로 끝냄)이고, 회색이 나머지를 이진으로 적은 것입니다. 어느 부호도 다른 부호의 앞부분이 아니라서, 이어 붙여도 구분자 없이 하나씩 떼어 낼 수 있습니다.
이어 붙인 비트열
0001001000001101000100001000100110001
이 비트열을 되돌리면 원래 값이 그대로 나옵니다: 0, 1, 0, 2, 0, 1, 3, 0, 1, 0, 0, 2, 1, 0, 4, 1
m을 바꿔 가며
| m | 전체 비트 | 값당 |
|---|---|---|
| 1 (라이스) | 32비트 | 2 |
| 2 (라이스) | 37비트 | 2.31 |
| 4 (라이스) | 49비트 | 3.06 |
| 8 (라이스) | 64비트 | 4 |
| 16 (라이스) | 80비트 | 5 |
| 32 (라이스) | 96비트 | 6 |
라이스가 되는 m(2의 거듭제곱)과 지금 고른 m, 그리고 이 자료에서 가장 짧은 m만 골라 보였습니다. m이 너무 작으면 단항 부분이 길어지고, 너무 크면 나머지 비트가 낭비됩니다. 그 사이에 골짜기가 하나 있고, 값의 분포가 기하분포에 가까울수록 그 골짜기가 아래 공식의 값과 잘 맞습니다.
최적 m 구하기
m = ⌈ −log(1+θ) / log θ ⌉, θ = 1 − p
값이 기하분포를 따른다고 보고 평균에서 p를 되돌린 뒤 최적 m을 구합니다. 흔히 인용되는 m ≈ −1/log₂(1−p)는 이 식의 근사인데, 대부분 같은 값을 주지만 p=0.4처럼 갈리는 자리가 있습니다. 그런 곳에서는 근사식이 고른 m이 실제로는 최적이 아닙니다.
사용 방법
- 1부호화할 값을 쉼표나 공백으로 나눠 적습니다. 0 이상의 정수만 됩니다.
- 2매개변수 m을 정합니다. 2의 거듭제곱이면 라이스 부호가 됩니다.
- 3값마다의 부호에서 파란 부분(단항 몫)과 회색 부분(이진 나머지)을 봅니다.
- 4「m을 바꿔 가며」 표에서 비트 수의 골짜기를 찾습니다.
- 5맨 아래에서 값의 평균으로 구한 최적 m과 견줍니다.
자주 묻는 질문
값 n을 매개변수 m으로 나눠 몫은 단항으로, 나머지는 이진으로 적습니다. 몫이 q라면 1을 q개 늘어놓고 0으로 끊은 뒤, 나머지를 이진으로 붙입니다. 예를 들어 m=4일 때 9는 몫 2, 나머지 1이므로 「110」 + 「01」이 됩니다.
라이스 부호는 m이 2의 거듭제곱인 골롬 부호입니다. 그때 나머지가 언제나 k = log₂m 비트라 나눗셈이 시프트로 끝나서, 하드웨어와 코덱이 이 경우만 쓰는 일이 많습니다. m이 2의 거듭제곱이 아니면 나머지를 절단 이진 부호로 적어 앞쪽 몇 개를 한 비트 짧게 씁니다.
값이 기하분포를 따를 때 θ = 1−p라 하면 m = ⌈−log(1+θ)/log θ⌉가 정확한 답입니다(갤러거–반부리스, 1975). 값의 평균 μ만 알고 있다면 p = 1/(μ+1)로 바꿔 넣으면 됩니다. 흔히 인용되는 m ≈ −1/log₂(1−p)는 이것의 근사인데, 대부분 같은 값을 주지만 p=0.4처럼 갈리는 자리가 있고 그때는 근사식 쪽이 최적이 아닙니다.
크게 손해입니다. m이 너무 작으면 몫이 커져 단항 부분이 길어지고, 너무 크면 나머지 비트가 낭비됩니다. 평균이 20쯤인 값에 m=1을 쓰면 값당 20비트를 넘고, m=512를 쓰면 나머지에만 9비트를 쓰게 됩니다. 최적 m 근처에 골짜기가 하나 있고, 이 계산기의 「m을 바꿔 가며」 표에서 그 모양을 볼 수 있습니다.
허프만은 어떤 분포에도 최적이지만 부호표가 필요하고, 골롬-라이스는 분포를 하나 가정하는 대신 표가 없습니다. 매개변수 m 하나만 주고받으면 되므로 값이 기하분포에 가까운 자료에서는 표를 실어 보내는 비용까지 따지면 골롬-라이스가 이깁니다. FLAC 같은 무손실 오디오와 이미지 예측 잔차가 그런 자료입니다.
그대로는 안 됩니다. 이 부호는 0 이상의 정수를 위한 것입니다. 실제 코덱은 음수를 지그재그로 옮겨(0, −1, 1, −2, 2 …를 0, 1, 2, 3, 4 …로) 0 이상으로 바꾼 뒤 넣습니다. 예측 잔차는 부호가 반씩 섞이므로 이 단계가 반드시 앞에 붙습니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 검증은 m = 1부터 40까지, 값 0부터 200까지의 모든 조합을 부호화한 뒤 되돌려 원래 값이 나오는지 대조해 했습니다. 여러 값을 이어 붙여 구분자 없이 갈라지는지도 확인했습니다.
- 어느 부호도 다른 부호의 앞부분이 아닌지(접두부호), 크라프트 부등식 Σ2^(−길이) ≤ 1을 지키는지도 테스트로 고정해 두었습니다. 골롬 부호는 낭비가 없어 이 합이 1에 아주 가깝습니다.
- 최적 m 공식은 갤러거–반부리스(1975)의 정확한 결과 m = ⌈−log(1+θ)/log θ⌉를 씁니다. m을 1부터 200까지 훑어 기대 길이가 실제로 최소인지 여러 p에서 확인했습니다.
- 흔히 인용되는 근사식 m ≈ −1/log₂(1−p)는 대부분 같은 값을 주지만 p=0.4에서 갈립니다 — 정확한 답은 1인데 근사식은 2를 주고, 기대 길이가 3.64 대 3.69비트로 근사식 쪽이 손해입니다. 이 계산기는 두 값을 나란히 보이되 정확한 쪽을 최적으로 씁니다.
- 음수는 다루지 않습니다. 실제 코덱은 지그재그 사상으로 0 이상으로 옮긴 뒤 이 부호를 씁니다.
- 값은 64개까지, 값의 크기는 100,000까지, m은 4,096까지 다룹니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.