需要用于文本压缩/解压缩的伪代码

时间:2012-11-10 19:49:32

标签: java

规范:您将编写一个名为Compress的简单文本压缩和解压缩算法,该算法使用重复字符的计数来压缩和恢复将文本压缩为原始文本。数据将从不是键盘的文件中读入。

输入:aaaaaaaaaaaaaaaaaaaAabc 输出:a19A1a1b1c1

在您的计划中,您必须拥有以下两种方法。然后在main方法中调用这两个方法来压缩和解压缩输入文本。

Public static String CompressStr(String input,Boolean debug_sw)

Public static String DecompressStr(String input,Boolean debug_sw)

2 个答案:

答案 0 :(得分:1)

这是运行长度编码算法: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")

答案 1 :(得分:-1)

Java在标准API中有这样的类:Zip / GZipInputStream和Zip / GZipOutputStream。如果您需要压缩数据,请使用这些数据而不是滚动数据。如果您将此作为学习练习,那么最好尝试阅读Zip的算法。