差分编码 Differential Encoding

Differential Encoding

百度百科:

差分编码(differential encoding)指的是对数字数据流,除第一个元素外,将其中各元素都表示为各该元素与其前一元素的差的编码。

差分编码,又称增量编码,是以序列式资料之间的差异储存或传送资料的方式(相对于储存传送完整档案的方式)。在需要档案改变历史的情况下的差分编码有时又称为差分压缩。差异储存在称为“delta”或“diff”的不连续档案中。由于改变通常很小(平均占全部大小的2%),差分编码能大幅减少资料的重复。一连串独特的delta档案在空间上要比未编码的相等档案有效率多了。

差分编码的简单例子是储存序列式资料之间的差异(而不是储存资料本身):不存“2, 4, 6, 9, 7”,而是存“2, 2, 2, 3, -2”。单独使用用处不大,但是在序列式数值常出现时可以帮助压缩资料

差分编码是一个数字编码技术,我们熟悉的相关应用是差分曼彻斯特编码:每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。
在这里插入图片描述

前面提到 “差分编码在序列式数值常出现时可以帮助压缩资料”,是否在存储领域或其他领域有所应用?

clfB-tree: Cacheline Friendly Persistent B-tree for NVRAM(ACM Trans 2018) 对 B-tree 节点应用了差分编码的思想,压缩键/指针的大小以存储更多条目。

clfB-tree with Differential Encoding

clfB-tree 是一种 b 树结构,它的树节点适合于单个缓存线。因为缓存线是32字节或64字节,所以不能容纳大量的条目。为了在clfB-tree 节点中存储更多的条目,提出了差分编码:计算第一个键/指针和其他键/指针之间的差值,并且只将差值存储在树节点中。使用差分编码,可以减少每个键和指针使用的字节数,从而在树节点中存储更多的条目。

如果缓存行大小为 64 字节,键和指针为 8 字节,那么树节点的度仅为 4,使得树的高度非常高。
根据 B-tree 的性质,树节点通常存储类似的键和指针(键是相似的;堆管理器通常分配连续的内存块导致内存地址相似)。
因此 clfB-tree 用更少的字节计算和存储键和指针之间的差异,而不是存储整个键和指针,可以有效地压缩键和指针,提高树节点的利用率。
在这里插入图片描述
上图显示了一个 clfB-tree 内部节点的布局。clfB-tree 内部节点的大小设置为缓存行大小(示例中为64字节)。前两个字节存储关于树节点的元数据。第一个字节指示树节点是叶节点还是内部节点,以及树节点中有多少个键。第二个字节存储用于编码指针和键的字节数。

第一个指针/键正常存储。对于其余的指针和键,计算与第一个值的差值,并确定需要多少字节来存储最大差值。

如果指针编码和键编码都需要每个 1 字节,那么 64 字节的树节点可以有最多 23 个键和 24 个子指针。可以进一步以位为单位压缩键、指针和元数据,按位编码需要更多的计算,并且降低了整体索引性能。
最坏的情况下,尽管不太可能,但差分编码存储指针和键仍然需要8个字节。此时 64 字节的树节点最多可以保存 3 个键和 4 个子指针。

如果一个键是字符串类型,大于缓存线,可以像前缀 B-tree(prefix B-tree)一样将键都有的前缀字符串存储在一个单独的内存块,所有键只需存储不同的字符串。


参考:
百度百科
clfB-tree: Cacheline Friendly Persistent B-tree for NVRAM

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中的差分编码是一种用于对信号进行编码的方法。它的基本思想是根据信号的差异来表示信号本身。 差分编码通常用于数字音频、视频和图像等信号的压缩与传输。在差分编码中,信号的每一个采样值都与前一个采样值之间的差异进行编码。 具体来说,差分编码中的每个采样值都由其与前一个采样值之间的差异表示。如果当前采样值与前一个采样值相同,则编码为0;如果它大于前一个采样值,则编码为正数;如果它小于前一个采样值,则编码为负数。 通过这种编码方式,信号的相对变化可以得到很好的保留,而相对较稳定的部分则可以通过较少的比特数来表示。这样可以有效地减少信号的数据量,实现信号的压缩。 在MATLAB中,可以使用内置的差分编码函数来实现对信号的差分编码。例如,可以使用"diff"函数来计算相邻采样值之间的差异,并使用其他函数来进行编码、解码等操作。 差分编码在实际应用中具有广泛的用途。例如,在数字音频中,差分编码可以用于对声音信号的快速变化部分进行编码,从而提高压缩效率。在数字图像中,差分编码可以用于对图像中的边缘和细节进行编码,以实现更好的图像质量。 总之,MATLAB中的差分编码是一种常用的信号编码方法,通过对信号的差异进行编码,可以实现信号的压缩与传输。它在数字音频、视频和图像等领域具有重要的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值