엘리아스-파노 인코딩 계산기
정렬된 정수 수열을 넣으면 상위비트(유니터리)·하위비트(고정폭)로 쪼개 압축하는 엘리아스-파노 인코딩 결과를 계산하고, 디코딩으로 원래 수열이 복원되는지 검증합니다.
쉼표나 공백으로 구분합니다. 오름차순(중복 허용)이어야 합니다
전체 비트 수
38비트
고정폭 저장(50비트) 대비 24% 절약
하위비트 (l비트 고정폭, 그대로 이어붙임)
상위비트 (유니터리, 18비트)
110110101011010010
사용 방법
- 1오름차순으로 정렬된 정수 수열을 쉼표나 공백으로 구분해 입력합니다.
- 2하위비트 폭(l)과 상위비트 유니터리 인코딩 결과를 확인합니다.
- 3디코딩 결과가 원래 수열과 정확히 일치하는지, 순진한 고정폭 저장 대비 얼마나 압축되는지 확인합니다.
자주 묻는 질문
정렬돼 있다는 사실 자체를 정보로 활용합니다. 각 값을 상위비트와 하위비트로 쪼개, 하위 l비트는 고정폭으로 그대로 저장하고 상위비트는 유니터리(0을 이어 쓰다 1로 끊는 방식)로 저장합니다. l은 n·2^l ≥ U(n=원소 개수, U=값의 범위)를 만족하는 가장 작은 값으로 정합니다.
정렬된 수열에서는 상위비트가 감소하지 않습니다. i번째 원소가 담긴 위치에서 i를 빼면 바로 그 원소의 상위비트 값이 나오므로, 값을 통째로 쓰는 대신 "증가분"만 표시하면 됩니다. 값의 범위가 아무리 커도 원소 개수에 비례한 크기로 압축됩니다.
원소당 대략 log2(U/n) + 2비트만 씁니다. 값의 범위(U)가 원소 개수(n)보다 훨씬 크더라도, 원소 개수에 비례해 커질 뿐 범위 자체에 비례하지 않는다는 것이 이 기법의 핵심 장점입니다.
네. 엄격한 오름차순이 아니라 비내림차순(같은 값이 연달아 나와도 됨)이면 됩니다. 유니터리 인코딩에서 위치에 i를 더하는 부분이 중복값도 자연스럽게 처리합니다.
검색엔진의 역색인(inverted index)에서 문서 ID 목록을 압축하거나, succinct 자료구조에서 정렬된 정수 배열을 저장할 때 널리 쓰입니다. Apache Lucene 등 실제 검색엔진 구현체에 포함되어 있습니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.
알아두면 좋은 점
- Elias(1974)·Fano(1971)가 독립 제안한 고전 기법으로, n⌈log(U/n)⌉+2n 비트 공식과 인코딩 절차는 표준 정보검색 교재(정렬된 정수 압축, antoniomallia.it 등)와 Apache Lucene EliasFanoEncoder 구현을 교차 확인했습니다(2026-09-05).
- 특정 수열의 인코딩 결과를 외운 정답과 대조하는 대신, 인코딩한 결과를 실제로 디코딩해 원래 수열과 정확히 일치하는지 매번 계산해서 검증합니다.
- 이 계산기는 인코딩·디코딩 원리를 보여주는 용도이며, 상수시간 임의접근을 위한 rank/select 색인 구조까지는 구현하지 않았습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 5일 · 결과는 참고용 추정치입니다.