// Elias Delta —— 对大整数比 Gamma 更高效的通用编码
对于 n > 3 的整数,比 Elias Gamma 更省比特。
无需任何额外参数,适用于任意正整数。
使用 log₂(n) + 2log₂(log₂(n)) + 1 个比特。
Elias Delta 将正整数 n 分为三步编码:1)计算 L = ⌊log₂(n)⌋ + 1(位长度);2)用 Elias Gamma 对 L 进行编码;3)附加 n 的低位 L−1 个比特。由于采用双对数增长形式,它在保持通用性的同时,比 Gamma 在大整数上更节省比特。
n=1: L=1, Gamma(1)='1', bits='', Delta='1' n=2: L=2, Gamma(2)='010', bits='0', Delta='0100' n=3: L=2, Gamma(2)='010', bits='1', Delta='0101' n=4: L=3, Gamma(3)='011', bits='00', Delta='01100' n=16: L=5, Gamma(5)='00101', bits='0000', Delta='001010000' 长度对比: n | Gamma | Delta | 节省 1 | 1 | 1 | 0 16 | 9 | 9 | 0 100 | 13 | 12 | 1 1000 | 19 | 16 | 3
Elias Delta 是对 Elias Gamma 的改进:先用 Gamma 对整数二进制长度进行编码,再拼接剩余比特。它大约使用 log₂(n) + 2log₂(log₂(n)) + 1 个比特,对大整数更加高效。
Gamma 使用 2⌊log₂(n)⌋ + 1 比特,而 Delta 使用 log₂(n) + 2log₂(log₂(n)) + 1 比特。对于 n > 3,Delta 更省空间,且 n 越大节省越明显;对于 1–3 这样很小的整数,两者差别不大。
当你的数据主要是 n > 3 的整数时,推荐使用 Delta。若数据几乎都是 1–2 这样的极小整数,Gamma 可能略有优势。对于非常大的整数,可以考虑进一步改进的 Elias Omega。
Delta 处于折中位置:Gamma 最简单但效率最低;Delta 提升了压缩率;Omega 对超大整数最省比特,但实现也最复杂。应根据数据分布和实现成本综合选择。