高级整数编码技术解析
1. 整数的可变长度编码基础
在整数编码领域,标准二进制表示法是一个基础概念。通常,我们用β(n)来表示整数n的标准二进制表示。不过,这种表示法(即β码)存在一些不足,它不满足前缀属性,例如2的二进制表示10是4的二进制表示100的前缀。而且,当我们处理一组整数时,如果整数的数量或者最大整数未知,固定长度的表示法就无法使用,这时可变长度编码(VLC)就成了自然的选择。
对于整数的可变长度编码,有两个重要要求:
- 给定一个整数n,其编码应尽可能短,并且仅基于n的大小、长度和位模式构建,无需查表或其他映射操作。
- 对于可变长度编码的比特流,应能轻松解码下一个编码并得到整数n,即使该整数之前未出现过。
在许多整数的可变长度编码中,整数的部分二进制表示会包含在编码中,其余部分则是用于指示编码整数长度或精度的辅助信息。
部分编码只能处理非负整数,而有些只能处理正整数。对于正整数的可变长度编码,可以通过在编码前将整数加1,解码后将结果减1的方式扩展到非负整数。对于任意整数的可变长度编码,可以通过双射映射来实现,例如:
| 原整数 | 映射后整数 |
| ---- | ---- |
| 0 | 1 |
| -1 | 2 |
| 1 | 3 |
| -2 | 4 |
| 2 | 5 |
| -3 | 6 |
| 3 | 7 |
| -4 | 8 |
| 4 | 9 |
| -5 | 10 |
| 5 | 11 |
| … | … |
双射函数要求是一一对应且满射的。
超级会员免费看
订阅专栏 解锁全文
3323

被折叠的 条评论
为什么被折叠?



