需要用于文本压缩/解压缩的伪代码
问题描述:
规格:您将编写一个简单的文本压缩和解压缩算法,称为压缩,它使用重复字符的计数来压缩和恢复,将文本压缩为原始文本。数据将从文件而不是键盘读入。需要用于文本压缩/解压缩的伪代码
输入:aaaaaaaaaaaaaaaaaaaAabc 输出:a19A1a1b1c1
在你的程序中,必须有以下两种方法。然后在main方法中调用这两个方法来压缩和解压缩输入文本。
公共静态字符串CompressStr(字符串输入,布尔debug_sw)
公共静态字符串DecompressStr(字符串输入,布尔debug_sw)
答
Java有这个类的标准API中:ZIP/GZipInputStream和Zip/GZipOutputStream。如果您需要压缩数据,请使用这些数据而不是滚动自己的数据。如果你将此作为学习练习,最好试着阅读Zip的算法。
+0
不是我的downvote,但是这并没有回答这个问题:“你要写一个简单的文本压缩和解压缩算法... *,它使用重复字符的计数*”即RLE而不是LZW等 – DNA
答
那是游程编码算法:http://en.wikipedia.org/wiki/Run-length_encoding
Loop: count = 0
REPEAT
get next symbol
count = count + 1
UNTIL (symbol unequal to next one)
output symbol
IF count > 1
output count
GOTO Loop
一些Python代码:
# http://acm.zhihua-lai.com
def runlen(s):
r = ""
l = len(s)
if l == 0:
return ""
if l == 1:
return s + "1"
last = s[0]
cnt = 1
i = 1
while i < l:
if s[i] == s[i - 1]: # check it is the same letter
cnt += 1
else:
r = r + s[i - 1] + str(cnt) # if not, store the previous data
cnt = 1
i += 1
r = r + s[i - 1] + str(cnt)
return r
if __name__ == "__main__":
print runlen("aaabbccccddddd")
print runlen("a")
print runlen("")
print runlen("abcdefg")
print runlen("eeeeeaaaff")
http://mattgemmell.com/2008/12/08/what-have-you-尝试/ – Jack
如何:读取文件;用“count + char”替换“字符序列”;写入文件。 – rodrigo