// Elias Omega —— 面向任意大整数的渐近最优编码
在大整数上逼近信息论的最小位数。
通过递归地编码长度,结构优雅且易于推理。
无需额外参数即可编码任意正整数。
Elias Omega 会不断递归地编码数字长度,直到得到 1。以 n 为起点,先编码 log₂(n),再编码 log₂(log₂(n)),如此反复直到 1。最终的码字由这些值按相反顺序拼接,并在末尾加上 0,从而得到 log(n) + log(log(n)) + log(log(log(n))) + ... 比特。
n=16: 16 → 二进制: 10000(长度 5) 5 → 二进制: 101(长度 3) 3 → 二进制: 11(长度 2) 2 → 二进制: 10(长度 2) 1 → 停止 从后往前构造码字: 从 0 开始(终止符) 前置 10(编码 2) 前置 11(编码 3) 前置 101(编码 5) 前置 10000(编码 16) 结果:10 11 101 10000 0 效率对比: n=100:Gamma=13,Delta=12,Omega=10 比特 n=1000:Gamma=19,Delta=16,Omega=14 比特
Elias Omega 是 Elias 系列中最复杂的一种编码方式,通过递归地编码长度来获得渐近最优的码长。它会先对表示的长度编码,再对该长度的长度编码,如此反复直到 1,因此对极大整数非常高效。
对于很小的整数(< 10),Gamma 往往更合适;在中等范围(10–1000)时,Delta 通常更优;当整数非常大(> 1000)时,Omega 的优势会越来越明显。Omega 使用 log*(n) 级别的迭代,在理论上实现渐近最优表现。
如果编码长度与信息论最小长度 log₂(n) 的比值在 n 趋于无穷大时收敛到 1,则称该编码渐近最优。对于 Omega,有 length(n)/log₂(n) → 1(n → ∞)。
尽管在理论上最优,Omega 的实现和解码要复杂得多。对于实际数据中范围有限的整数,Exp-Golomb 或 Rice 等更简单的编码往往更实用。Omega 更适合理论研究以及整数上界未知或非常大的场景。