我有一个函数,它使用Run Length Encoding(RLE(在Python中压缩给定的比特流。我希望现在能够解压缩压缩的比特流。这是我压缩比特流的代码。
def RLEC(inputstream):
count = ""
result = ""
prev_char = ""
for i in range(len(inputstream)):
if inputstream[i] != prev_char:
result = result + str(count) + prev_char
prev_char = inputstream[i]
count = 1
else:
count += 1
else:
result += str(count) + prev_char
return result
如果我压缩比特流,例如01111111111111111111110将被压缩为1026110。我该如何解压才能给出我最初的答案?或者至少能够把数字分成几个部分,每个部分都告诉我有多少比特,是什么比特?如果这是错误的,我应该使用什么格式来最大限度地提高比特流效率,并能够解压缩/拆分为单独的部分?
正如评论中所指出的,您的格式存在根本缺陷,不能对进行唯一解压缩。您的示例1026110
可以是1个零、26个一和1个零,或可以是1026个一和一个零。或者只是按顺序阅读,一个零,261个一,然后是其他内容。或者一个零然后2611个零。
由于1和0必须交替,所以根本不需要将它们放在输出中。相反,可以考虑用句点来终止十进制数字,使其明确无误。那么你会得到1.26.1.
,对于一个零,26个一,和一个零。惯例是以零开始,因此如果流以一开始,则压缩版本将以零计数开始。例如,0.26.1.
表示零、26个一和1个零。
最后,你正在解压的绝不是";比特流";。按照建议,它是一个ASCII字符字符串,作为十进制数字和终止符。这是相当低效的空间(至少2.4倍(,这是一个问题,因为目的是压缩。相反,您应该设计一个真正的比特流格式,用比特而不是十进制数字来编码行程长度。