도구스개발

엘리아스 감마·델타 부호 계산기

정수를 엘리아스 감마·델타 부호로 바꾸고 비트열을 다시 수로 되읽습니다. 길이를 먼저 적고 값을 잇는 방식이라 구분자가 없어도 경계가 나뉘며, 감마와 델타가 32에서 갈리는 것을 표로 확인할 수 있습니다.

1 이상의 정수를 공백이나 쉼표로 나눠 적습니다. 40개까지.

감마 부호로 5개

17비트

32비트 고정 길이로 적으면 160비트이므로 89.4% 줄어듭니다. 구분자를 따로 넣지 않고도 경계가 나뉩니다.

감마 전체17비트
델타 전체19비트
32비트 고정160비트
짧은 쪽감마 (2비트 차이)

한 수씩

이진수감마델타
1111
2100100100
3110110101
41000010001100
51010010101101

파란색이 그 값에서 짧은 쪽입니다. 감마는 이진수 길이만큼 0을 앞에 붙이고, 델타는 그 «길이 부분»을 다시 감마로 적어 줄입니다.

이어 붙인 비트열

10100110010000101

구분자가 하나도 없는데도 되읽을 수 있습니다. 감마라면 1이 나올 때까지 0을 세고, 그 개수만큼 더 읽으면 한 수가 끝나기 때문입니다. 위 「비트 → 수」로 바꿔 이 비트열을 붙여 넣어 보세요.

가변 길이 부호의 어려움은 「어디까지가 한 수인가」입니다. 엘리아스의 답은 값을 적기 전에 값이 몇 비트인지를 먼저 적는 것입니다. 감마는 이진수 길이 − 1만큼 0을 앞에 붙이므로, 읽는 쪽은 1이 나올 때까지 0을 센 뒤 그 개수만큼 더 읽으면 됩니다. 길이는 언제나 2⌊log₂n⌋ + 1비트로 홀수입니다.
델타는 감마의 앞부분을 다시 감마로 적은 것입니다. 값이 커질수록 감마의 0 나열이 길어지는데, 그 «길이»를 감마로 적으면 훨씬 짧아집니다. 갈리는 자리는 정확히 32입니다 — 31까지는 감마가 같거나 짧고 32부터 델타가 앞섭니다. 10억(30비트) 이라면 감마 59비트, 델타 38비트로 차이가 크게 벌어집니다. 위 표에서 값을 바꿔 가며 파란색이 어느 쪽으로 옮겨 가는지 보세요.
매개변수가 없다는 것이 골롬–라이스와 갈리는 지점입니다. 골롬–라이스는 값이 대략 어느 크기인지 알아야 k를 정할 수 있지만, 엘리아스 부호는 분포를 몰라도 그냥 쓸 수 있습니다. 어떤 분포에서도 최적의 상수배 안에 든다는 뜻에서 「범용 부호」라 부릅니다. 대신 분포를 잘 아는 경우에는 골롬–라이스가 더 짧습니다.
0은 적을 수 없습니다. 두 부호 모두 1 이상의 정수만 다룹니다 — 0은 이진수가 「0」 한 자리라 맨 앞이 1이라는 전제가 무너지기 때문입니다. 0부터 쓰려면 n + 1을 부호화하고 읽을 때 1을 빼는 것이 관행입니다. 실제 쓰임도 대부분 그렇습니다 — 검색 엔진의 문서 번호 차이(gap)처럼 1 이상인 값을 줄줄이 적는 자리입니다.

사용 방법

  1. 1「수 → 비트」에서 부호화할 정수를 넣습니다. 1 이상이어야 합니다.
  2. 2감마와 델타 가운데 어느 쪽이 짧은지 표에서 확인합니다.
  3. 3이어 붙인 비트열을 복사합니다.
  4. 4「비트 → 수」로 바꿔 그 비트열을 붙여 넣습니다.
  5. 5구분자가 없는데도 원래 수로 정확히 나뉘는지 확인합니다.

자주 묻는 질문

값의 이진수 길이 − 1만큼 0을 앞에 붙이고 이어서 이진수를 그대로 적습니다. 5는 이진수가 101(3비트)이므로 0을 두 개 붙여 00101이 됩니다. 읽을 때는 1이 나올 때까지 0을 세고 그 개수만큼 더 읽으면 한 수가 끝납니다.

감마의 앞부분(0을 늘어놓는 부분)을 다시 감마로 적어 줄인 것입니다. 값의 비트 수를 감마로 쓴 뒤, 값의 이진수에서 맨 앞 1을 뗀 나머지를 붙입니다. 맨 앞 1을 떼도 되는 이유는 비트 수를 이미 알기 때문입니다.

31까지는 감마가 같거나 짧고, 32부터 델타가 앞섭니다. 값이 커질수록 차이가 벌어져 10억(30비트)이라면 감마 59비트, 델타 38비트입니다. 다룰 값이 대부분 작다면 감마가, 크다면 델타가 유리합니다.

부호가 스스로 길이를 알려 주기 때문입니다. 감마라면 앞의 0 개수가 곧 「뒤로 몇 비트를 더 읽어야 하는가」이므로, 여러 수를 그냥 이어 붙여도 읽는 쪽이 정확히 나눌 수 있습니다. 이런 성질을 접두 부호(prefix-free)라고 합니다.

매개변수가 없기 때문입니다. 골롬–라이스 부호는 값이 대략 어느 크기인지 알아야 k를 정할 수 있지만, 엘리아스 부호는 분포를 몰라도 그냥 쓸 수 있고 어떤 분포에서도 최적의 상수배 안에 듭니다. 대신 분포를 잘 아는 경우에는 골롬–라이스가 더 짧습니다.

0은 이진수가 「0」 한 자리라 「맨 앞 비트가 1」이라는 전제가 무너지기 때문입니다. 두 부호 모두 1 이상만 다루므로, 0부터 쓰려면 n + 1을 부호화하고 읽을 때 1을 빼는 것이 관행입니다.

검색 엔진의 역색인처럼 1 이상인 정수를 줄줄이 적는 자리에 쓰입니다. 문서 번호를 그대로 적는 대신 앞 번호와의 차이(gap)를 적으면 값이 작아지는데, 작은 값이 짧게 적히는 이 부호와 잘 맞습니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 감마·델타 부호를 손으로 적을 수 있는 값들(1 → 1, 2 → 010, 5 → 00101, 9 → 0001001 등)과 대조해 고정했습니다.
  • 부호화한 것을 되읽어 원래 수가 그대로 나오는지 1~3000의 모든 값에서 두 부호 모두 확인했습니다. 「부호가 스스로 경계를 알려 준다」는 주장의 실제 검사입니다.
  • 수 열 개를 구분자 없이 이어 붙인 비트열이 정확히 나뉘는지도 함께 고정했습니다. 바이트를 맞추려고 뒤에 0을 덧댄 경우는 정상으로, 안에 1이 섞여 남은 경우는 「다 읽지 못했다」로 나눠 답합니다.
  • 길이 식도 실제로 만든 문자열의 길이와 맞춰 검사합니다. 감마가 2⌊log₂n⌋ + 1로 언제나 홀수인 것, 델타가 감마(비트 수) + (비트 수 − 1)인 것을 1~5000에서 고정했습니다.
  • 감마와 델타가 갈리는 자리가 32라는 것은 외운 값이 아니라 1부터 훑어 찾은 결과이고, 31까지는 감마가 같거나 짧고 32~5000에서는 델타가 같거나 짧다는 것도 함께 확인했습니다.
  • 값은 10¹⁵까지, 한 번에 40개까지 다룹니다. 되읽기는 1,000개에서 멈춥니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.