哥伦布编码是一个针对整数的变长编码方式,详细介绍可以看维基百科。这里简单介绍下:

哥伦布编码使用指定的整数 M 把输入的整数分成两部分:商数 q、余数 r。 商数当做一元编码,而余数放在后面做为可缩短的二进制编码。

将整数变为一元编码非常简单:q 的一元编码结果就是 q 个 1 加上 1 个 0。如下表:

整数 一元编码
0 0
1 10
2 110
3 1110
4 11110
5 111110
6 1111110

一元编码可以用以下代码实现;

function unary_encoding(q) {return (1 << (q + 1)) - 2; } 

将 M 选为 64 时,余数取值区间为 [0, 64),只需要用 6 位二进制表示。将待处理的数组每一项都除以 64,并将商数和余数分别做一元编码和二进制编码,得到如下结果:

整数 商数 余数 商数一元编码 余数二进制编码
151 2 23 110 010111
41 0 41 0 101001
16 0 16 0 010000
61 0 61 0 111101
192 3 0 1110 000000
         

表格中每一行后两列拼起来就是该整数对应的哥伦布编码,可以看到,64 以下的整数编码后会变短。

这段代码运行结果如下:

["110010111", "0101001", "0010000", "0111101", "1110000000"]

摘自:https://imququ.com/post/golomb-coded-sets.html

go语言的实现:https://github.com/tcnksm/go-casper/blob/master/internal/encoding/golomb/golomb.go
https://github.com/dave-andersen/deltagolomb/blob/master/deltagolomb.go
 

GOLOMB-RICE 编码

Golomb-Rice是Golomb编码的一个变种,它给Golomb编码的参数m添加了个限制条件:m必须是2的次幂。这样有两个好处:

不需要做模运算即可得到余数r,r = N & (m - 1) 对余数r编码更为简单,只需要取r二进制的低\(\log_2(m)\)位即可。

则Golomb-Rice的编码过程更为简洁:

初始化参数m,m必须为2的次幂 计算q和r,q = N / m ; r = N & (m - 1) 使用一元编码编码q 取r的二进制位的低\(\log_2(m)\)位作为r的码字。

转载于:https://www.cnblogs.com/bonelee/p/6878992.html

golomb哥伦布编码——本质上就是通过0来区分商和余数相关推荐

  1. 5.2 Python图像处理之图像编码-哥伦布编码

    5.2 Python图像处理之图像编码-哥伦布编码 文章目录 5.2 Python图像处理之图像编码-哥伦布编码 1 算法原理 变体Rice–Golomb 在图像的应用 2 代码 3 效果 1 算法原 ...

  2. 八、H.264中的熵编码基本方法、指数哥伦布编码

    GitHub代码地址:点击这里 本节视频免费 1. H.264中的熵编码基本方法 在成功从NAL Unit中获取到语法元素的码流之后,接下来就是对语法元素的码流进行解析.根据我们在前面的博文中所讲述的 ...

  3. 【H.264/AVC视频编解码技术详解】八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  4. 八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码

    由于种种问题,哈夫曼编码并没有作为一种实际应用的技术使用到实际编码算法中:本节看下H.264中实际使用的熵编码算法:指数哥伦布编码 在H264官方标准文档的第九章由说明 一.H.264中熵编码基本方法 ...

  5. Golomb及指数哥伦布编码原理介绍及实现

    2017年的第一篇博文. 本文主要有以下三部分内容: 介绍了Golomb编码,及其两个变种:Golomb-Rice和Exp-Golomb的基本原理 C++实现了一个简单的BitStream库,能够方便 ...

  6. 【H264/AVC 句法和语义详解】(五):Exp-Golomb指数哥伦布编码(理论篇)

    版权声明:本文为博主原创文章,未经博主允许不得转载.    https://blog.csdn.net/u011399342/article/details/80472399 本篇隶属于文集:< ...

  7. [熵编码] 指数哥伦布编码

    规定语法元素的编解码模式的描述符如下: 比特串: b(8):任意形式的8比特字节(就是为了说明语法元素是为8个比特,没有语法上的含义) f(n):n位固定模式比特串(其值固定,如forbidden_z ...

  8. python数据库开发 dga_使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...

    from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...

  9. 【编解码】从零开始写H264解码器(4) 熵编码之指数哥伦布编码

    1. 引言 经过上一章的学习,我们学会看描述子.这时候我们就会发现,在语法中,除了简单的 u(n),i(n) 这种读取固定长度的二进制解析方法之外,用的更多的还有ue(v),se(v)这些. 只有学会 ...

最新文章

  1. 字段变成小写 序列化_序列化/反序列化
  2. 设置***遇到一个小问题
  3. nginx 一个请求发给多台机器_Nginx系列二:负载均衡与反向代理
  4. sympy随笔-python符号计算
  5. [js] 举例说明面向对象编程有什么缺点?
  6. 从零开始学习Hadoop--第2章 第一个MapReduce程序
  7. 三款新功能发布,助力阿里云表格存储再次升级
  8. django-编辑功能
  9. cropper左右移动_移动端cropper.js上传图片、裁剪
  10. PHPer 面试指南-扩展阅读资源整理
  11. 5G 还未商用,6G 研究已开始?!
  12. Java多线程系列 JUC线程池01 线程池框架
  13. Exchange2003/2010共存模式环境迁移
  14. EXCEL图表之瀑布图
  15. 软件工程大学生职业生涯规划_软件工程专业大学生职业生涯规划书范文
  16. Denoise-----去除噪声
  17. 如何在Word中画横线?
  18. 手机就能申请摇号 杭州市小客车摇号功能全新上线
  19. Base64编码理解
  20. 浅析cv::cuda::threshold函数的实现

热门文章

  1. oracle离线文档查dbms_小白小记-logminer工具分析离线归档日志
  2. sqlu8多阶级层次bom_男性比女性多3164万:性别比例失衡,为何还有那么多剩女?...
  3. java if else 过多_Java中if-else过多怎么解决
  4. linux搜索有哪些文件夹,Linux常见几个查找命令
  5. 消控中心人员配置_建筑能耗监测系统集中化运行管理模式和人员配置!
  6. dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了
  7. 阿里云物联网批量获取设备的在线离线状态
  8. 【微信小程序企业级开发教程】界面刷新获取新更新数据
  9. 【系统分析与设计】UML协作图绘制方法(真の能看懂~!)
  10. Tensorflow【实战Google深度学习框架】TensorFlow模型的保存与恢复加载