[二维压缩] | 文本游程编码变体-MNP class 5


一、Run-Length Encoding

这种数据压缩方法背后的思想是:如果一个数据项d在输入流中连续出现n次,则用单对nd替换n次出现。然后,一个数据项的连续出现被称为运行长度为n,这种进行数据压缩的方法被称为运行长度编码或RLE。我们首先将这个想法应用于文本压缩,然后再应用于图像压缩。

二、文本游程编码变体-MNP class 5

1. 文本游程编码变体-MNP class 5方法

在文本游程编码的实现过程中, 字符“@”可能是输入流中的文本的一部分,在这种情况下,必须选择一个不同的转义字符。有时,输入流可能包含字母表中的所有可能的字符。例如,有一个对象文件,它是编译程序的结果, 为解决该问题,MNP class 5方法提供了一个解决方案。
MNP class 55方法用于旧调制解调器中的数据压缩。它是由调制解调器(MNP代表微通信网络协议)的制造商微通信公司开发的,它使用了运行长度和自适应频率编码的组合。当在输入流中找到三个或更多相同的连续字节时,压缩器将在输出流上写入该字节的三个副本,然后进行重复计数。当解压缩器读取三个相同的连续字节时,它知道下一个字节是一个重复计数可能是0,仅表示三次重复。 该方法的一个缺点是,在输入流中运行三个字符将导致四个字符写入输出流。所以在输入流外扩展新的数组记录重复字符的个数!

2. 文本游程编码变体-MNP class 5代码实现

class Run_Length_Encoding:
    def __init__(self):
        self.lowbit = '0'
        self.highbit = '1'
        self.compression_factor_text = 3
        self.escape_character = '@'

    def mnp_class_5(self, input: str):
       if len(input) == 0:
           return ''

       outstring = ''
       outlist = []
       count = 1
       for alphabet_index in range(0, len(input)):
           if alphabet_index + 1 < len(input) and input[alphabet_index] == input[alphabet_index + 1]:
               count += 1
           else:
               if count < self.compression_factor_text:
                   for p in range(count):
                       outstring = outstring + input[alphabet_index]
               else:
                   for p in range(self.compression_factor_text):
                       outstring = outstring + input[alphabet_index]

                   outlist.append(count - self.compression_factor_text)
               count = 1

       return [outstring, outlist]
input = aaaaaaaaaabbbbbbbcccccdd
output :  ['aaabbbcccdd', [7, 4, 2]]

总结

以上就是今天要讲的内容,本文仅仅简单介绍了文本游程编码变体-MNP class 5的相关定义和其中简单代码实的实现方法。


参考

[1] Salomon, David, and Giovanni Motta. Handbook of data compression. London; New York: Springer, 2010.

本文部分参考自《Handbook of Data Compression 》,该内容仅供学习研究之用,如若喜欢请支持购买正品书籍。
转载本文请联系原作者获取授权,同时请注明本文来自池鱼醉故渊博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值