繁体   English   中英

Python压缩运行长度编码

[英]Python Compression Run Length encoding

我正在尝试了解运行长度编码,我在网上发现了这个我无法做到的挑战。 它要求你编写一个名为compression(strg)的压缩函数,它将长度为64的二进制字符串strg作为输入,并返回另一个二进制字符串作为输出。 输出二进制字符串应该是输入字符串的行程编码。

压缩( '1010101001010101101010100101010110101010010101011010101001010101')

'1010101001010101 * 4'

这是我的,但这没有找到模式:

from itertools import *

def compression(strg):
    return [(len(list(group)),name) for name, group in groupby(strg)]

我需要一些帮助解决这个问题。

我相信你正在将RLE与Lempel / Ziv滑动窗口压缩混为一谈。

RLE严格适用于重复字符: WWWWWWWW => W8

LZ有一个滑动窗口,可以像你描述的那样拾取模式。

David MacKay的网站包含Python中的示例压缩代码,包括LZ

这是最长的重复子字符串问题的示例。 它通常用后缀树数据结构来解决。

对于字符串,您可以使用正则表达式的形式:

import re

s1='1010101001010101101010100101010110101010010101011010101001010101'

i=2
l=s1
j=len(l)/2
while i<len(s1):
    m=re.search('^(.{'+str(j)+'})\\1$',l)
    if m:
        l=m.group(1)
        i,j=i+1,len(l)/2
        continue
    else:
        print '{0} * {1} = {2}'.format(l,i,s1)
        break

打印输出。 请注意,这仅适用于从中间完全对称的字符串 - 此类问题的一小部分。 要压缩其他类型的字符串,您需要一个代表语法,说明如何替换被替换的元素。

以下链接给出了具有详细说明的这个问题的答案:

使用游程编码通过def压缩(S)函数进行图像压缩

希望它能清除您对字符串和二进制压缩的行程编码的理解。 无需使用任何re和itertools即可完成此编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM