-4

仕様: Compress と呼ばれる単純なテキスト圧縮および圧縮解除アルゴリズムを作成します。このアルゴリズムは、繰り返される文字の数を使用して、テキストを元のテキストに圧縮および復元します。データは、キーボードではなくファイルから読み込まれます。

入力: aaaaaaaaaaaaaaaaaaaAabc 出力: a19A1a1b1c1

プログラムには、以下の 2 つのメソッドが必要です。次に、これら 2 つのメソッドをメイン メソッドで呼び出して、入力テキストを圧縮および解凍します。

Public static String CompressStr(文字列入力、Boolean debug_sw)

Public static String DecompressStr(文字列入力、Boolean debug_sw)

4

2 に答える 2

1

それが Run-Length エンコーディング アルゴリズムです: 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")
于 2012-11-10T19:55:39.280 に答える
-1

Java には、標準 API にこのためのクラスがあります: Zip/GZipInputStream および Zip/GZipOutputStream です。データを圧縮する必要がある場合は、独自に展開する代わりにそれらを使用してください。学習演習としてこれを行っている場合は、Zip のアルゴリズムを読んだ方がよいでしょう。

于 2012-11-10T19:55:02.700 に答える