JP5895545B2 - プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体 - Google Patents

プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体 Download PDF

Info

Publication number
JP5895545B2
JP5895545B2 JP2012006860A JP2012006860A JP5895545B2 JP 5895545 B2 JP5895545 B2 JP 5895545B2 JP 2012006860 A JP2012006860 A JP 2012006860A JP 2012006860 A JP2012006860 A JP 2012006860A JP 5895545 B2 JP5895545 B2 JP 5895545B2
Authority
JP
Japan
Prior art keywords
integer
symbol string
address
code
encoded
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012006860A
Other languages
English (en)
Other versions
JP2013150041A (ja
Inventor
片岡 正弘
正弘 片岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012006860A priority Critical patent/JP5895545B2/ja
Priority to US13/722,206 priority patent/US8704685B2/en
Publication of JP2013150041A publication Critical patent/JP2013150041A/ja
Application granted granted Critical
Publication of JP5895545B2 publication Critical patent/JP5895545B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M5/00Conversion of the form of the representation of individual digits
    • H03M5/02Conversion to or from representation by pulses
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code

Description

本発明は、スライド辞書法による符号化で得られた整数を符号化するプログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体に関する。
データ圧縮技術には、ハフマン符号化、LZ77符号化、LZ78符号化などがある。LZ77符号化の改良技術としては、例えばLZSS符号化がある。またLZSSで圧縮したデータをさらにハフマン符号化で圧縮する、ZIP形式やLZH形式の圧縮アルゴリズムもある。
LZ77符号化やLZSS符号化では、スライド辞書法と呼ばれる方法で辞書を作成する。スライド辞書法では、スライド窓と呼ばれるバッファ領域が用いられる。スライド窓には、符号化対象の文字列が読み込まれた順に格納される。そしてスライド窓が文字列で満たされると、古い順に文字列が破棄される。
スライド窓内の領域は、参照部と符号化部とに分けられている。参照部に格納されている文字列を辞書として用い、符号化部に格納されている文字列が符号化される。符号化が終わった文字列は、参照部に格納される。符号化では、符号化部の先頭の文字列と最も長く一致する文字列(最長一致文字列)が、参照部の中から検索される。そして、符号化部内の文字列が、スライド窓の先頭から最長一致系列の先頭までの距離(アドレス)と、最長一致系列の長さとを示す数値に符号化される。このようにして、高い圧縮率が実現される。なお、最長一致文字列の長さが3文字未満の場合は、符号化部の先頭文字が2進数表記(例えばASCIIコード)で出力される。
また、ZIPやLZHでは、符号化された先頭アドレス、長さ、および文字の2進数表記が、さらにハフマン木を用いてハフマン圧縮される。これにより、圧縮率がさらに向上する。
なお、ハフマン圧縮については、ハフマン木を、無節点の木に変換することで、文字コードの圧縮効率の向上と圧縮処理や伸張処理の高速化を図る技術がある。
特開2010−93414号公報
しかし、従来のスライド辞書法を用いた符号化で得られるアドレスや長さの整数は、その整数の符号化に用いられる符号化方式用に最適化された値ではない。そのためスライド辞書法による符号化で得られた整数を、例えばハフマン符号で符号化しても、十分な圧縮率が得られていない。
1つの側面では、本発明は、圧縮率を向上させることができるプログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体を提供することを目的とする。
上記課題を解決するために、符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索し、符号化が終了した記号列の末尾から該最長一致記号列までの距離を示す整数を、該最長一致記号列のアドレスとし、該最長一致記号列に対応する、符号化が行われていない記号列の先頭の記号列を、該アドレスを示す整数と該最長一致記号列の長さを示す整数とに符号化し、出現頻度が高い整数ほど短い符号となるように、アドレスを示す整数と長さを示す整数を符号化する、処理をコンピュータに実行させるプログラムが提供される。
1態様によれば、圧縮率を向上させることができる。
第1の実施の形態に係るシステムの機能構成例を示す図である。 第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。 第2の実施の形態に係るコンピュータの圧縮・伸張機能を示すブロック図である。 元ファイル内の文字列の一例を示す図である。 スライド辞書法を説明する図である。 スライド辞書法による符号化の一例を示す図である。 スライド窓の先頭からのオフセットで最長一致文字列のアドレス修飾を行った場合の例を示す図である。 スライド窓の先頭からのオフセットで最長一致文字列のアドレス修飾を行った場合のアドレスの分布例を示す図である。 参照部の末尾からのオフセットで最長一致文字列のアドレス修飾を行った場合の例を示す図である。 参照部の末尾からのオフセットで最長一致文字列のアドレス修飾を行った場合のアドレスの分布例を示す図である。 アドレス(αn±β)におけるαの特性を示す図である。 アドレス(αn±β)におけるβの特性を示す図である。 最長一致文字列の圧縮状況を示す図である。 記憶部に格納された圧縮ファイルの一例を示す図である。 圧縮処理の手順の一例を示すフローチャートである。 最長一致文字列の符号化処理の手順の一例を示すフローチャートである。 アドレス要素値の算出処理の手順の一例を示すフローチャートである。 ハフマン木の生成処理の手順の一例を示すフローチャートである。 伸張処理の手順を示すフローチャートである。 スライド辞書法による復号処理の手順の一例を示すフローチャートである。 1パスによる圧縮処理の手順の一例を示すフローチャートである。 元ファイルの他の例を示す図である。 参照部の末尾からのオフセットで最長一致文字列のアドレス修飾を行った場合の他の例を示す図である。 アドレスを示す整数の特性を示す図である。 アドレスを示す整数の特性を示す図である。 スライド窓の移動例を示す図である。 スライド窓内の文字列の更新例を示す図である。 最長一致文字列の検索例を示す図である。 アドレスを示す整数の区分けの一例を示す図である。 高頻度整数と低頻度整数とのビット構成の一例を示す図である。 低頻度整数を区分けした場合の圧縮・伸張回数の一例を示す図である。 第4の実施の形態におけるハフマン木の生成処理の手順の一例を示す図である。 低頻度整数を区分けする他の例を示す図である。 整数の出現頻度と符号長との関係の一例を示す図である。 無節点の木の一例を示す図である。
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
まず第1の実施の形態について説明する。第1の実施の形態は、スライド辞書法による符号化で得られる整数の出現頻度の偏りを増加させるものである。整数の出現頻度に偏りを持たせることで、出現頻度が高い記号ほど短い符号に符号化する符号化方式によって、より多くの整数を短い符号に符号化でき、圧縮率を向上させることができる。
図1は、第1の実施の形態に係るシステムの機能構成例を示す図である。図1には、情報処理装置1で生成した圧縮ファイル4aを、他の情報処理装置2で伸張する場合の例を示している。
情報処理装置1は、元ファイル3内の記号列を圧縮するために、第1の符号化手段1aと第2の符号化手段1bとを有する。
第1の符号化手段1aは、符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索する。なお、符号化が終了した記号列の末尾から所定の範囲内の記号列は、例えばバッファ5に格納されている。バッファ5内の記号列は、新たな記号列の符号化が終了するごとに、第1の符号化手段1aにより更新される。
例えば第1の符号化手段1aは、スライド辞書法におけるスライド窓の参照部内の記号列を検索対象とし、符号部内の記号列の先頭の記号列に対しても最も長く一致する最長一致記号列を検索する。
次に第1の符号化手段1aは、符号化が終了した記号列の末尾から該最長一致記号列までの距離(オフセット)を示す整数を、最長一致記号列のアドレスとする。そして第1の符号化手段1aは、最長一致記号列に対応する、符号化が行われていない記号列の先頭の記号列を、アドレスを示す整数と最長一致記号列の長さを示す整数とに符号化する。例えば長さを示す整数とアドレスを示す整数との組からなる中間符号が生成される。第1の符号化手段1aで生成された中間符号の列(中間符号列1c)は、第2の符号化手段1bに送信される。
第2の符号化手段1bは、出現頻度が高い整数ほど短い符号となるように、アドレスを示す整数と長さを示す整数を符号化する。出現頻度が高い整数ほど短い符号となるように符号化する符号化方式としては、例えばハフマン符号化がある。例えば第2の符号化手段1bは、第1の符号化手段1aから受信した中間符号列1cに示される整数の出現頻度を計算する。次に第2の符号化手段1bは、例えば各整数を、ハフマン木を生成するための葉に割り当てる。そして第2の符号化手段1bは、整数の出現頻度に基づいて、葉の上位の節点を生成し、ハフマン木を作成する。ハフマン木では、根から葉まで辿る経路に付与されたラベルの配列が、その葉に割り当てられた整数に対応する符号となる。第2の符号化手段1bは、長さを示す整数とアドレスを示す整数とを符号化し、圧縮ファイル4aに格納する。そして第2の符号化手段1bは、圧縮ファイル4aを、記録媒体4に格納する。なお、第2の符号化手段1bは、各整数の出現頻度を示す情報を記録媒体4に格納してもよい。
記録媒体4は、コンピュータ読み取り可能であり、例えば記録媒体4に格納された圧縮ファイル4aは、情報処理装置2で読み出すことができる。記録媒体4に格納された圧縮ファイル4aは、例えば以下のようなデータ構造を有する。
圧縮ファイル4aには、出現頻度が高い整数ほど短い符号となるように、整数を符号化した圧縮符号が含まれている。圧縮符号の元となる整数には、符号化が終了した記号列の末尾から所定の範囲内の記号列のうち、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列のアドレスを示す整数と、最長一致記号列の長さを示す整数とが含まれる。最長一致記号列のアドレスを示す整数は、符号化が終了した記号列の末尾から所定の範囲内の記号列の末尾から最長一致記号列までの距離である。
情報処理装置2は、圧縮ファイル4aを伸張するために、第1の復号手段2aと第2の復号手段2bとを有する。
第1の復号手段2aは、例えば圧縮ファイル4aから符号列を取得する。取得した符号列には、アドレスを示す整数と長さを示す整数とを含む中間符号を、出現頻度が高い整数ほど短い符号に符号化することで得られた符号が含まれている。第1の復号手段2aは、取得した符号列の先頭から順に、符号を中間符号列2cに復号する。例えば第1の復号手段2aは、ハフマン木を用い、符号の値に応じ、ハフマン木の根から枝を辿り、行き着いた葉に割り当てられた整数に符号化する。なお、第1の復号手段2aは、例えば記録媒体4から整数の出現頻度を示す情報を読み出し、読み出した情報に基づいて、符号化に用いられたものと同様のハフマン木を生成することができる。
第2の復号手段2bは、中間符号列2cに含まれるアドレスを示す整数と長さを示す整数とからなる中間符号を復号する。例えば第2の復号手段2bは、中間符号列2c内の中間符号の復号により既に得られている記号列の末尾から、復号対象の中間符号におけるアドレスを示す整数に応じた距離にある記号を特定する。次に第2の復号手段2bは、特定した記号から、復号対象の中間符号における長さを示す整数分の記号列を取得する。そして第2の復号手段2bは、復号対象の中間符号を、取得した記号列に復号する。これにより、中間符号列2cが記号列に復号される。
このようなシステムによれば、元ファイル3内の記号列は、まず第1の符号化手段1aにより中間符号列1cに符号化される。例えば、既に符号化された記号列として、「・・・caaad」という記号列がバッファ5に格納されており、符号化の対象として、「aaababababb・・」という記号列が続いている場合を考える。なお記号列内の各記号は、すべて1バイトで表されているものとする。この場合、「aaa」という記号列が最長一致記号列として検出される。バッファ5内の「aaa」という最長一致記号列の先頭は、バッファ5内に記号列の末尾から、4バイトの距離にある。また最長一致記号列「aaa」の長さは3バイトである。すると符号化対象の「aaababababb・・」という記号列の先頭の「aaa」が、例えば{3,4}という中間符号に符号化される。この中間符号は、右側の整数が最長一致記号列の長さを示し、左側の整数が最長一致記号列の先頭のアドレスを示す。
なお、元ファイル3内の先頭の所定数の記号については、例えば、その記号を表す2進数表記が、そのまま中間符号となる。また、最長一致記号列が見つからないか、あるいは検出された最長一致文字列の長さが所定値未満の場合、符号化がされていない記号列の先頭の記号は、例えば、その記号を表す2進数表記がそのまま中間符号となる。
第1の符号化手段1aで生成された中間符号列1cは、第2の符号化手段1bに送信される。第2の符号化手段1bでは、最長一致文字列のアドレスや長さを示す整数の出現頻度が求められる。元ファイル3の記号列が、複数のレコードの集合のであり、レコードが何らかの項目値によってソートされている場合、ソートされた項目の記号列が同じレコードは、近傍に配置されている。この場合、最長一致記号列のアドレスは、小さな値となる。その結果、整数の出現頻度を算出すると、整数の値が0に近いほど、出現頻度が高くなるような特性が見られる。すなわち、整数の値が0近傍に偏在している。
そこで第2の符号化手段1bは、出現頻度が高い整数ほど短い符号に符号化する。例えば整数「1」の出現頻度が「0.137」であれば、3ビットの符号「000」に符号化され、整数「2」の出現頻度が「0.074」であれば、4ビットの符号「0010」に符号化される。すると、整数の値が0近傍に偏在していることで、短い符号に符号化される記号列が多くなる。その結果、生成される符号列が短くなる。すなわち圧縮率が向上する。
このような圧縮で生成された符号列は、圧縮ファイル4aとして記録媒体4に格納できる。例えば記録媒体4が可搬型の光ディスクであれば、その光ディスクを情報処理装置2に挿入して、情報処理装置2に圧縮ファイル4aを読み取らせることができる。なお、ネットワークを介して、圧縮ファイル4aを情報処理装置1から情報処理装置2に送信することもできる。
情報処理装置2では、第1の復号手段2aにより、圧縮ファイル4a内の符号列が、中間符号に復号される。中間符号には、例えばアドレスを示す整数と長さを示す整数とが含まれる。複数の中間符号による中間符号列2cは、第2の復号手段2bに送信される。すると第2の復号手段2bにより、中間符号列2cの先頭から順に、中間符号が記号列に復号される。例えば中間符号列2cの先頭の所定数の中間符号は、記号の2進数表記であり、そのまま復号後の記号となる。その後、アドレスを示す整数と長さを示す整数とを含む中間符号があれば、既に復号されている記号列の末尾から、アドレスを示す整数に応じた距離の記号が特定される。次に、特定された記号から、長さを示す整数に応じた長さの記号列が取得される。そして中間符号が、取得した記号列に復号される。中間符号列2c内の中間符号が復号されると、元ファイル3内の記号列と同様の記号列が得られる。
このようにして、スライド辞書法におけるアドレスを、既に符号化された記号列の末尾からの距離で表すことで、アドレスを示す整数を、0近傍の整数に偏在させることができる。すなわち、整数の出現頻度の偏りが大きくなる。このような整数を出現頻度が大きいほど短い符号に符号化する手法で整数を符号化することで、圧縮率が向上する。
なお、第1の符号化手段1a、第2の符号化手段1bは、情報処理装置1が有するCPU(Central Processing Unit)により実現することができる。第1の復号手段2aと第2の復号手段2bとは、情報処理装置2が有するCPUにより実現することができる。また、記録媒体4は、光ディスクのような可搬型の記録媒体、RAM(Random Access Memory)やハードディスクドライブ(HDD:Hard Disk Drive)などにより実現することができる。
また、図1に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、最長一致文字列のアドレスを示す整数が0近傍に偏るように、様々な工夫を施したものである。なお、以下の説明では圧縮対象を文字列とするが、圧縮対象の文字列には記号も含むものとする。
図2は、第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ100は、CPU101によって装置全体が制御されている。CPU101には、バス108を介してRAM102と複数の周辺機器が接続されている。なおコンピュータ100が有するCPU数は1つに限定されず、複数であってもよい。コンピュータ100が複数のCPUを有する場合、複数のCPUが連係動作し、装置全体を制御する。
RAM102は、コンピュータ100の主記憶装置として使用される。RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。
バス108に接続されている周辺機器としては、HDD103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、および通信インタフェース107がある。
HDD103は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、コンピュータ100の二次記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
グラフィック処理装置104には、モニタ11が接続されている。グラフィック処理装置104は、CPU101からの命令に従って、画像をモニタ11の画面に表示させる。モニタ11としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号をCPU101に送信する。なお、マウス13は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク14に記録されたデータの読み取りを行う。光ディスク14は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク14には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
通信インタフェース107は、ネットワーク10に接続されている。通信インタフェース107は、ネットワーク10を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した装置も、図2に示したコンピュータと同様のハードウェアにより実現することができる。
図3は、第2の実施の形態に係るコンピュータの圧縮・伸張機能を示すブロック図である。コンピュータ100は、圧縮部110、記憶部120、および伸張部130を有する。
圧縮部110は、元ファイル21内に記述されている文字列のデータ圧縮を行う。圧縮部110は、元ファイル21のデータを高圧縮率で圧縮するために、第1の符号化処理部111と第2の符号化処理部112とを有する。
第1の符号化処理部111は、スライド辞書法で、元ファイル21内の文字列を符号化する。第1の符号化処理部111で生成された符号は、中間符号ファイル22に書き込まれる。中間符号ファイル22は、例えばRAM102に一時的に格納される。
第2の符号化処理部112は、中間符号ファイル22に含まれている所定の情報を、例えばハフマン符号に符号化する。第2の符号化処理部112は、生成した符号を圧縮ファイル121に書き込む。そして第2の符号化処理部112は、圧縮ファイル121を記憶部120に格納する。
記憶部120は、圧縮ファイル121を記憶する。圧縮ファイル121は、例えばヘッダ部121aと符号部121bを有する。ヘッダ部121aには、例えばスライド辞書法による符号化の際のアドレスの指定方法(修飾方法)や、ハフマン符号化の際に用いられた、符号化対象の整数の相対頻度が書き込まれている。符号部121bには、元ファイル21内の文字列を圧縮して得られた符号が書き込まれている。
伸張部130は、圧縮ファイル121の符号部121bに書き込まれた符号を伸張し、元ファイル21と同じ内容の伸張ファイル24を出力する。伸張部130は、符号を伸張するために、第1の復号処理部131と第2の復号処理部132とを有する。
第1の復号処理部131は、ハフマン符号を伸張する。例えば第1の復号処理部131は、ヘッダ部121aに示されている、整数の相対頻度の情報を用いて、ハフマン符号の復号を行う。第1の復号処理部131は、伸張して得られた値(中間符号)を中間符号ファイル23に書き込む。中間符号ファイル23は、例えばRAM102に一時的に格納される。
第2の復号処理部132は、中間符号ファイル23に格納された中間符号を、スライド辞書法で復号する。例えば第2の復号処理部132は、ヘッダ部121aに格納されている、修飾方法の情報を用いて、中間符号を復号する。第2の復号処理部132は、伸張して得られた値(平文)を伸張ファイル24に書き込む。伸張ファイル24は、例えばRAM102に一時的に格納される。
なお、圧縮部110と伸張部130とは、例えばコンピュータ100のCPU101が、RAM102に格納されたプログラムを実行することにより実現される。また記憶部120は、例えばHDD103または光ディスク14の記憶領域の一部である。
また、図3に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
図3に示したような機能を有するコンピュータ100により、元ファイル21内の文字列がデータ圧縮され、圧縮ファイル121が生成される。そして圧縮ファイル121は、記憶部120に格納される。またコンピュータ100により、圧縮ファイル121内の符号が伸張され、伸張ファイル24が生成される。以下、圧縮処理と伸張処理とについて、具体的に説明する。
<圧縮処理>
まず、元ファイル21内の文字列の圧縮処理について説明する。元ファイル21内の文字列は、例えば複数のレコードの配列である。元ファイル21内のレコードは、所定の基準によってソートされているものとする。
図4は、元ファイル内の文字列の一例を示す図である。図4に示す元ファイル21には、タグによって構造化された名簿が格納されている。このような名簿には、各人の氏名や住所などの情報が登録されている。例えば一人の人に関する情報が、1つのレコードを構成する。
第1の符号化処理部111は、このような文字列を、ZIPなどに利用されているスライド辞書法によって符号化する。スライド辞書法は、スライド窓と呼ばれるバッファ領域を用いて、文字列を符号化するデータ圧縮方法である。
図5は、スライド辞書法を説明する図である。スライド辞書法で用いられるスライド窓30には、圧縮対象の文字列が、図中右側から入力され、左に向かって順次シフトする。そして、スライド窓30内が文字列で満たされると、左端の文字から順に破棄される。このようなスライド窓30への文字列の入力動作は、文字列上のスライド窓30の移動と言い換えることもできる。圧縮対処の文字列のうち、スライド窓30に囲まれた領域内の文字列が、バッファであるスライド窓30に格納される。スライド窓30は、圧縮対象の文字列の先頭から最後尾に向かって移動する。図5の例では、右に向かって移動する。
スライド窓30内の領域は、参照部31と符号化部32とに分けられる。参照部31に格納されている文字列が、符号化部32に格納されている文字列の符号化用の辞書として利用される。すなわち、圧縮対象の文字列の先頭から順に符号化の対象となり、符号化の対象となった文字列は、直前の所定の範囲の文字列を辞書として用い、符号化される。
図6は、スライド辞書法による符号化の一例を示す図である。第1の符号化処理部111は、例えばスライド窓30の符号化部32の先頭からの文字列と、最も長く一致する文字列を、参照部31から検索する。一致した文字列を、最長一致文字列41,42と呼ぶ。なお、最長一致文字列41,42は、最長一致系列とも呼ばれる。
図6の例では、符号化部32の先頭からの3文字「ABC」と一致する文字列が、参照部31から検出されている。符号化部32の4文字目は「D」であるのに対し、参照部31内の「ABC」に続く文字は「X」である。すなわち3文字の文字列は一致するが、4文字目が相違する。この場合、「ABC」の文字列が、最長一致文字列41,42となる。
第1の符号化処理部111は、符号化部32内の最長一致文字列41を、符号化する。その際、第1の符号化処理部111は、最長一致文字列41の長さが3バイト未満の場合、文字列を符号化せずに、文字の2進数表記のまま中間符号ファイル22に出力する。この際、第1の符号化処理部111は、符号化されていないことを示すフラグ「0」を、文字の先頭に付与する。
最長一致文字列41の長さが3バイト以上あれば、第1の符号化処理部111は、参照部31側の最長一致文字列42の長さと、その最長一致文字列のアドレスとを中間符号ファイル22に出力する。この際、第1の符号化処理部111は、符号化されていることを示すフラグ「1」を、文字の先頭に付与する。最長一致文字列の長さは、最長一致文字列42のデータ長であり、例えばバイト数(整数)で表される。図6のように最長一致文字列42が、1バイト文字で3文字分であれば、最長一致文字列の長さは「3」となる。
最長一致文字列のアドレスは、参照部31内での最長一致文字列42の位置を示す情報である。例えば、参照部31内での最長一致文字列42の先頭の文字の位置を、最長一致文字列のアドレスとすることができる。この場合、最長一致文字列のアドレスから、最長一致文字列の長さで示されるデータ長の領域に存在する文字列が、最長一致文字列42である。
最長一致文字列のアドレスは、第2の符号化処理部112によってハフマン符号に符号化される。ここで、最長一致文字列のアドレスをハフマン符号に符号化する場合、アドレスを示す整数に偏りがあるほど、圧縮の効率がよくなる。すなわちハフマン符号化では、出現頻度の高いデータほど短い符号に符号化される。そのため、アドレスを示す整数の出現頻度の偏りが大きいほど、ハフマン符号化したときに、短い符号に符号化される割合が高くなり、圧縮率が向上する。
そこで、最長一致文字列のアドレス修飾方法による、アドレスを示す整数の偏り度合いの違いについて説明する。
まず、比較例として、ZIPなどの既存のLZ77系圧縮におけるアドレス修飾方法について説明する。既存のLZ77系圧縮では、スライド窓30の先頭からのオフセットによって、最長一致文字列のアドレスが指定される。
図7は、スライド窓の先頭からのオフセットで最長一致文字列のアドレス修飾を行った場合の例を示す図である。図7の上段は符号化部32の先頭が人名となった場合の例であり、下段は符号化部32の先頭が地名となった場合の例である。
例えば、符号化部32の先頭の文字列が、タグ付きの人名「<name>片岡正光</name>・・・」となった場合、この文字列に基づいて、参照部31から最長一致文字列が検索される。すると符号化部32内の「<name>片岡正」が、符号化部32の最長一致文字列43となり、その文字列と同じ参照部31内の同じ文字列が、参照部31の最長一致文字列44となる。この場合、参照部31の先頭から最長一致文字列44の先頭の文字までのオフセットγaが、最長一致文字列44のアドレスとなる。
また、上段の例の場合と各レコードのデータ長が異なっていれば、参照部31の先頭の文字列が上段の例と同じでも、符号化部32の先頭が地名となる場合も考えられる。符号化部32の先頭の文字列が、タグ付きの地名「<addr>神奈川県川崎市多摩区・・・」となった場合、この文字列に基づいて、参照部31から最長一致文字列が検索される。すると符号化部32内の「<addr>神奈川県」が、符号化部32の最長一致文字列45となり、その文字列と同じ参照部31内の同じ文字列が、参照部31の最長一致文字列46となる。この場合、参照部31の先頭から最長一致文字列46の先頭の文字までのオフセットγbが、最長一致文字列44のアドレスとなる。
この場合、アドレスを示す整数の出現頻度の分布は、オフセットγa,γbの影響を受ける。
図8は、スライド窓の先頭からのオフセットで最長一致文字列のアドレス修飾を行った場合のアドレスの分布例を示す図である。図8の横軸は、最長一致文字列のアドレスを示す整数であり、縦軸は整数の出現頻度である。図8に示すように、スライド窓の先頭からのオフセットで最長一致文字列のアドレス修飾を行うと、人名や地名は、氏名までのオフセットγa,γbに影響される。すると、レコードを構成する文字列の種別(例えば人名や地名)ごとにはアドレスの偏りがあっても、異なる種別の文字列間ではアドレスが分散する。その結果、全体としてはアドレスを示す整数の偏りはあまり大きくない。
次に、参照部31の末尾(図5中の右端)から最長一致文字列42の先頭の文字までのオフセットを、最長一致文字列42のアドレスとした場合について説明する。
図9は、参照部の末尾からのオフセットで最長一致文字列のアドレス修飾を行った場合の例を示す図である。図9に示すように、参照部31内の最長一致文字列44,46は、参照部31の末尾からのオフセットにより指定することができる。
このようなアドレスを採用すると、図4に示す名簿のような定型化された文字列の場合、最長一致文字列のアドレスを示す整数の出現頻度が高くなる値は、レコード長を1周期とする周期性を採る傾向がある。例えばアドレスをαn+β(またはαn−β)で表すことができる。なお「αn」は、α×nの乗算を示している。
ここでnは、最長一致文字列のアドレスを示す整数の出現頻度が高くなる周期である。この周期は、1レコード当たりのレコード長に近似するものと想定できる。なお周期nは、1以上の整数である。レコードが固定長であれば、固定長のバイト数が、周期nとなる。レコードが可変長であれば、例えば、レコードのデータ長の平均値の小数点以下を四捨五入した値が、周期nとなる。
αは、符号部121b内の最長一致文字列41が属するレコードと、参照部31内の最長一致文字列42が属するレコードとの間の識別番号(レコード番号)の差分である。なお図4に示した文字列では、<number>タグで囲まれた数値が、各レコードのレコード番号である。αは、1以上の整数である。
βは、可変長の場合における、周期nの倍数とアドレスとの誤差である。βは、0以上の整数である。レコードが固定長の場合、βの値は「0」である。
次に、アドレスを「αn±β」と表すことの合理性について説明する。
図10は、参照部の末尾からのオフセットで最長一致文字列のアドレス修飾を行った場合のアドレスの分布例を示す図である。図10の横軸は、最長一致文字列のアドレスを示す整数であり、縦軸は整数の出現頻度である。図10に示すように、アドレスを示す出現頻度が高い整数の値には、レコード長を1周期とする周期性が確認できる。そしてアドレスを示す整数は、レコード長の整数倍「αn」の位置近傍に偏在していることが分かる。すなわち、最長一致文字列のアドレスにおける出現頻度が高くなる値は、レコード長に応じた周期nを1サイクルとする周期性を有している。
このようにアドレスが、レコード長による周期性を有している場合、アドレスを「αn±β」と表すことで、αとβとの整数を、0近傍に偏らせることができる。
図11は、アドレス(αn±β)におけるαの特性を示す図である。図11では、横軸にαの値(整数)を採り、縦軸にαの値が出現する頻度を示している。図11に示すように、αの値が大きくなるほど、その整数が出現する頻度は小さくなっている。すなわちαの値は、0近傍に偏在している。なお図11では、スライド窓30の参照部31のサイズが無限大(∞)であるものとしてグラフを作成しているが、実際には参照部31のサイズは有限である。そのためスライド窓30の参照部31に格納可能なレコード数がαの最大値となり、αが最大値となったときの頻度が、頻度の最小値となる。
図12は、アドレス(αn±β)におけるβの特性を示す図である。図12では、横軸にβの値(整数)を採り、縦軸にβの値が出現する頻度を示している。図12に示すように、βの値が大きくなるほど、その整数が出現する頻度は小さくなっている。すなわちβの値は、0近傍に偏在している。なお図12では、レコード長に応じた周期nの倍数(αn)とアドレスとの誤差が無限大(∞)まであり得るものとしてグラフを作成しているが、誤差は、最大でも周期nの半分の値である。そのため誤差の最大値がβの最大値となり、βが最大値となったときの頻度が、頻度の最小値となる。
図10〜図12に示したような、レコード長によるアドレスの周期性は、図4に示した名簿のような文字列を圧縮対象とした場合に顕著に表れる。すなわち、図4のような名簿の文字列は、レコード内の項目の値の出現位置について、レコード長による周期性がある。例えば氏名、所属、住所などの項目に登録されている人名や地名などの文字列が、概ねレコード長周期で出現する。
このような文字列をスライド辞書法で符号化する際に、スライド窓30の先頭からのオフセットをアドレスとすると、オフセットの基準となる位置の文字(参照部31の先頭の文字列)と、最長一致文字列との関連がない(図8参照)。そのため、レコード長による文字列出現頻度の周期性が、アドレスに反映されない。
他方、参照部31の末尾からのオフセットをアドレスとすると、符号化部32内の最長一致文字列の前の文字からのオフセットとなる。符号化部32内の最長一致文字列と、参照部31内の最長一致文字列とは、複数の項目(氏名や地名)を含むレコードにおける同じ項目の文字列であることが多い。そのため参照部31の末尾からのオフセットをアドレスとすれば、レコード内の項目の出現周期(レコード長)がアドレスに反映される。そこで、第2の実施の形態では、参照部31の末尾からのオフセットをアドレスとしている。
また第2の実施の形態では、例えば、参照部31内に最長一致文字列が複数検出された場合、参照部31の末尾に近い最長一致文字列の位置を、符号化時のアドレスとする。これにより、αの値の0近傍への偏りを高めることができる。
元ファイル21内のすべての文字列がスライド辞書法で符号化されると、中間符号ファイル22に基づいて、第2の符号化処理部112によってハフマン符号への符号化が行われる。例えば、第2の符号化処理部112は、最長一致文字列の長さと、最長一致文字列のアドレスを、ハフマン符号に符号化する。このとき第2の符号化処理部112は、「αn±β」の形式表された最長一致文字列のアドレスについては、「α」と「β」とを個別に符号化する。
図13は、最長一致文字列の圧縮状況を示す図である。最長一致文字列のアドレスは、「αn+β」の場合と、「αn−β」の場合とがある。「αn+β」の場合には、ハフマン圧縮によりαとβとが個別に符号化され、「+」の符号が「0」に変換される。「αn−β」の場合には、ハフマン圧縮によりαとβとが個別に符号化され、「−」の符号が「1」に変換される。なおαとβとのハフマン圧縮には、例えば共通のハフマン木を使用することができる。なお、ハフマン木は、符号化に用いる符号の木の一例である。符号の木としては、第5の実施の形態に示す無節点の木(図35)を用いることもできる。
図11、図12に示したように、αとβとの値は、0近傍に偏在している。そのため、最長一致文字列のアドレスを「αn+β」の形式で表し、αとβとを個別にハフマン圧縮することで、圧縮率を高めることができる。しかもアドレスを「αn+β」の形式で表すことで、圧縮符号長を短縮することができ、圧縮率がさらに向上する。
図14は、記憶部に格納された圧縮ファイルの一例を示す図である。記憶部120に格納された圧縮ファイル121のヘッダ部121aには、例えば圧縮方式として、スライド辞書法におけるアドレスが、参照部31の末尾からのオフセットであることが示されている。またヘッダ部121aには、アドレス形式が「αn±β」の形式であることが示されている。またヘッダ部121aには、レコード長に応じた周期nの値が示されている。さらにヘッダ部121aには、文字の2進数表示の出現頻度や、整数の出現頻度が設定されている。
符号部121bには、例えば文字の2進数表示の圧縮符号121cや長さとアドレスとの圧縮符号121dが設定されている。アドレスの圧縮符号は、例えばαの圧縮符号、正負を示すフラグ、およびβの圧縮符号で構成されている。
このような圧縮ファイル121は、例えば光ディスク14などの可搬型の記録媒体に格納することもできる。この場合、図3と同様の機能を有する他のコンピュータに、可搬型の記録媒体内の圧縮ファイル121を読み取らせ、元ファイル21に伸張させることができる。
次に、以上のような技術を用いた圧縮処理の手順について説明する。
図15は、圧縮処理の手順の一例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。なお図15に示す圧縮処理は、元ファイル21内のすべての文字列をスライド辞書法で符号化した後に、ハフマン符号に符号化する方式(2パス方式)である。2パス方式以外の圧縮方式について後述する(第3の実施の形態)。
[ステップS101]第1の符号化処理部111は、元ファイル21内の文字列を先頭から順に読み出し、スライド窓30に格納する。例えば第1の符号化処理部111は、スライド窓30の符号化部32に、文字列を格納する。
[ステップS102]第1の符号化処理部111は、スライド窓30の参照部31に格納された文字列を辞書として用い、符号化部32内の最長一致文字列を符号化する。この処理の詳細は後述する(図16参照)。
[ステップS103]第1の符号化処理部111は、スライド窓30のデータを更新する。例えば第1の符号化処理部111は、参照部31内に符号化された文字列分の空き領域があれば、符号化された文字列を参照部31内の文字列の末尾の後ろに書き込む。また第1の符号化処理部111は、参照部31内に符号化された文字列分の空き領域がなければ、参照部31内の文字列の先頭から順に文字を削除し、符号化された文字列分の空き領域を設け、参照部31内の文字列を前方にシフトする。そして第1の符号化処理部111は、符号化された文字列を参照部31内の文字列の末尾の後ろに書き込む。
また第1の符号化処理部111は、符号化された文字列を符号化部32から削除し、符号化部32内の文字列を前方にシフトする。そして第1の符号化処理部111は、元ファイル21内に未処理の文字列があれば、先頭から順に読み出し、スライド窓の符号化部32の空き領域に格納する。
[ステップS104]第1の符号化処理部111は、スライド窓30の符号化部32が空になったか否かを判断する。スライド窓30の符号化部32が空になった場合、第1の符号化処理部111は、処理をステップS105に進める。またスライド窓30の符号化部32に、符号化が未処理の文字列が残っていれば、第1の符号化処理部111は、処理をステップS102に進める。
[ステップS105]第2の符号化処理部111は、最長一致文字列のアドレスの要素値(n、α、β)を算出する。この処理の詳細は後述する(図17参照)。
[ステップS106]第2の符号化処理部112は、ハフマン木を生成する。
[ステップS107]第2の符号化処理部112は、中間符号ファイル22内の符号列(アドレス、長さ、文字の2進数表示)を、ハフマン符号に符号化する。なお図13に示すように、アドレスについて「αn+β」の形式で記載されている場合、αとβとを個別に符号化する。また第2の符号化処理部112は、例えば、α・β・長さおよび文字の2進数表記を、それぞれ個別のハフマン木を用いて符号化する。なおαとβとの頻度特性が類似していれば、共通のハフマン木を用いて得符号化することもできる。
[ステップS108]第2の符号化処理部112は、圧縮ファイル121を出力する。例えば、第2の符号化処理部112は、ステップS106で生成した符号を、圧縮ファイル121の符号部121bに書き込む。また第2の符号化処理部112は、圧縮ファイル121のヘッダ部121aに、アドレス修飾の方法を示す情報や、アドレスや長さの整数の出現確率を書き込む。アドレス修飾の方法を示す情報には、例えば、参照部31の末尾から最長一致文字列の先頭までのオフセットをアドレスとしたこと、「αn+β」の形式のアドレスの「α」と「β」とを個別に符号化したこと、n(レコード長)の値などが示される。またヘッダ部121aには、例えば、α・β・長さ・文字の2進数表記を、それぞれ個別のハフマン木で符号化したのか、あるいはαとβについては共通のハフマン木で符号化したのかを示す情報が含まれる。そして第2の符号化処理部112は、例えば生成した圧縮ファイル121を記憶部120に格納する。
このようにして、元ファイル21内の文字列が圧縮され、圧縮ファイル121が生成される。
次に最長一致文字列の符号化処理(ステップS102)について詳細に説明する。
図16は、最長一致文字列の符号化処理の手順の一例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
[ステップS111]第1の符号化処理部111は、スライド窓30の符号化部32の先頭の文字列に対応する最長一致文字列を、参照部31から検索する。最長一致文字列が複数検出された場合、第1の符号化処理部111は、参照部31の末尾に近い方の最長一致文字列を、検索結果とする。
[ステップS112]第1の符号化処理部111は、検索結果として得られた最長一致文字列のアドレスと長さを取得する。最長一致文字列のアドレスは、例えば参照部31の末尾から最長一致文字列の先頭の文字までのオフセット(バイト数)である。長さは、最長一致文字列のバイト数である。
[ステップS113]第1の符号化処理部111は、最長一致文字列の長さが3バイト以上か否かを判断する。第1の符号化処理部111は、最長一致文字列の長さが3バイト以上であれば、処理をステップS114に進める。また第1の符号化処理部111は、最長一致文字列の長さが3バイト未満であれば、処理をステップS115に進める。
[ステップS114]第1の符号化処理部111は、アドレスと長さを示す符号を中間符号ファイル22に出力する。例えばアドレスは、図6に示したようなデータ形式で出力される。その後、最長一致文字列の符号化処理が終了する。
[ステップS115]第1の符号化処理部111は、最長一致文字列の長さが3バイト未満の場合、最長一致文字列の2進数表記を、符号として中間符号ファイル22に出力する。その後、最長一致文字列の符号化処理が終了する。
このようにして、最長一致文字列が符号化される。このような符号化が、元ファイル21内のすべての文字列に対して行われる。
次に、アドレス要素値の算出処理(ステップS105)について詳細に説明する。
図17は、アドレス要素値の算出処理の手順の一例を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。
[ステップS121]第2の符号化処理部112は、アドレスの各整数をRAM102に記録する。
[ステップS122]第2の符号化処理部112は、記録した整数をグループ化する。例えば図10のように、アドレスを示す整数とその整数の出現頻度とを求める。そして出現頻度が1以上で連続する整数を、1つのグループとする。また出現頻度が1以上で連続する整数において、出現頻度の増減が繰り返される場合、例えば、出現頻度が減少から増加に転じる整数の値を境界として、その境界の前後で異なるグループとなるようにグループを分けをする。これにより、例えば図10に示すような出現頻度の整数を、「α=1」のときのαn近傍の整数のグループ、「α=2」のときのαn近傍の整数のグループというように、アドレスを示す整数が複数のグループに分けられる。
[ステップS123]第2の符号化処理部112は、グループごとのαを決定する。例えば第2の符号化処理部112は、グループごとに、そのグループに属する整数の平均値を求める。次に第2の符号化処理部112は、平均値を昇順に並べる。そして第2の符号化処理部112は、平均値が小さいグループから順に、1から昇順の整数をαとして割り当てる。各グループに割り当てられたαの値が、そのグループに属する整数におけるαの値となる。
[ステップS124]第2の符号化処理部112は、グループ化された整数に基づいて、出現頻度が高くなる整数の周期性を調査し、レコード長に応じた周期nを判断する。例えば第2の符号化処理部112は、複数のグループを、割り当てられたαの値が小さい順に並べる。次に第2の符号化処理部112は、グループごとに、グループ内での整数の平均値を計算する。さらに第2の符号化処理部112は、隣接するグループ間での平均値の差分を求め、グループ間距離とする。そして第2の符号化処理部112は、グループ間距離の平均値を周期nとする。
なお、第2の符号化処理部112は、グループ内での整数の平均値に代えて、グループ内で出現頻度が最大値となる整数を求めてもよい。この場合、第2の符号化処理部112は、隣接するグループ間での出現頻度が最大値となる整数の差分を、グループ間距離とする。
[ステップS125]第2の符号化処理部112は、各整数のβの値を求める。例えば第2の符号化処理部112は、アドレスを示す整数が属するグループに割り当てられてαの値と、ステップS124で求めた周期nとにより、「α×n」を計算する。そしてアドレスを示す整数と「α×n」との差分をβとする。このときアドレスを示す整数が「α×n」以上であれば、βの符号は「+」となる。またアドレスを示す整数が「α×n」より小さければ、βの符号は「−」となる。
このようにして、最長一致文字列のアドレスを「αn±β」の形式で表すことができる。
次に、ハフマン木の生成処理(ステップS106)について説明する。
図18は、ハフマン木の生成処理の手順の一例を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。
[ステップS131]第2の符号化処理部112は、αを示す整数の出現頻度の出現頻度を求める。αを示す整数の出現頻度は、例えばすべてのアドレスのαの総出現回数のうち、その整数が出現した回数である。そして第2の符号化処理部112は、αを示す整数の出現頻度に基づいて、ハフマン木を生成する。
[ステップS132]第2の符号化処理部112は、βを示す整数の出現頻度の出現頻度を求める。βを示す整数の出現頻度は、例えばすべてのアドレスのβの総出現回数のうち、その整数が出現した回数である。そして第2の符号化処理部112は、βを示す整数の出現頻度に基づいて、ハフマン木を生成する。
[ステップS133]第2の符号化処理部112は、αとβとの頻度特性の類似性を判定する。第2の符号化処理部112は、例えば整数の値ごとに、αの出現頻度とβの出現頻度との差分を計算する。第2の符号化処理部112は、整数の値ごとに得られた差分を合計し、合計値が所定値以下であれば、類似していると判断する。
[ステップS134]第2の符号化処理部112は、αとβとの頻度特性の類似が類似している場合、処理をステップS135に進める。また第2の符号化処理部112は、αとβとの頻度特性が類似していない場合、処理をステップS136に進める。
[ステップS135]第2の符号化処理部112は、αとβとに共通のハフマン木を生成する。例えば第2の符号化処理部112は、αまたはβを示す整数の出現頻度の出現頻度を求める。この場合の整数の出現頻度は、例えばすべてのアドレスのαの総出現回数とβの総出現回数との和のうち、その整数が出現した回数である。そして第2の符号化処理部112は、αまたはβを示す整数の出現頻度に基づいて、ハフマン木を生成する。
[ステップS136]第2の符号化処理部112は、長さを示す整数の出現頻度の出現頻度を求める。長さを示す整数の出現頻度は、例えばすべての長さを示す整数の総出現回数のうち、その整数が出現した回数である。そして第2の符号化処理部112は、長さを示す整数の出現頻度に基づいて、ハフマン木を生成する。
[ステップS137]第2の符号化処理部112は、文字の2進数表記の出現頻度の出現頻度を求める。文字の2進数表記の出現頻度は、例えば文字の2進数表記の総出現回数のうち、その文字の2進数表記が出現した回数である。そして第2の符号化処理部112は、文字の2進数表記の出現頻度に基づいて、ハフマン木を生成する。
このようにして、圧縮辞書として用いるハフマン木が生成される。生成されたハフマン木を用いて、スライド辞書法によって生成されたアドレスや長さなどの整数や、文字の2進数表示が、ハフマン符号に符号化される。なお、αとβとの出現頻度の特性が類似している場合、ハフマン木を共通化することで、圧縮・伸張時に使用するメモリなどの資源が少なくて済む。
次に圧縮ファイル121に含まれている符号の伸張処理について説明する。
図19は、伸張処理の手順を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。
[ステップS141]第1の復号処理部131は、圧縮ファイル121のヘッダ部121aから、整数および文字の2進数表示の出現頻度を読み出す。
[ステップS142]第1の復号処理部131は、ハフマン木を生成する。例えば第1の復号処理部131は、整数の出現頻度に基づいて、アドレス(α・β)と長さを示すハフマン符号を伸張するためのハフマン木を生成する。また第1の復号処理部131は、文字の2進数表示の出現頻度に基づいて、文字の進数表示のハフマン符号を伸張するためのハフマン木を生成する。なおハフマン木の生成方法は、データ圧縮時のハフマン木の生成方法と同じである。
[ステップS143]第1の復号処理部131は、圧縮ファイル121の符号部121b内の最長一致文字列のハフマン符号を、先頭から順に復号する。例えば第1の復号処理部131は、最長一致文字列がアドレスと長さで表されていれば、アドレス(α・β)と長さを示すハフマン符号を、共通のハフマン木に基づいて復号する。また第1の復号処理部131は、最長一致文字列が文字の2進数表示で表されていれば、文字の2進数表示を示すハフマン符号を、文字の2進数表示用のハフマン木に基づいて復号する。伸張されたデータ(中間符号)は、中間符号ファイル23に格納される。
[ステップS144]第2の復号処理部132は、スライド辞書法により、中間符号ファイル23内の中間符号を復号する。この処理の詳細は後述する(図20参照)。
[ステップS145]第1の復号処理部131は、圧縮ファイル121の符号部121b内の符号をすべて復号したか否かを判断する。第1の復号処理部131は、すべての符号の復号が完了した場合、処理を終了する。また第1の復号処理部131は、復号していない符号があれば、処理をステップS143に進める。
このようにして、符号部121b内の符号が復号される。
次にスライド辞書法による復号処理の手順について説明する。
図20は、スライド辞書法による復号処理の手順の一例を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。なお初期状態では、スライド窓の内容は空であるものとする。
[ステップS151]第2の復号処理部132は、中間符号ファイル23から、第1の復号処理部131で復号された、1つの最長一致文字列分の符号(中間符号)を取得する。
[ステップS152]第2の復号処理部132は、取得した中間符号が、アドレス+長さの形式の符号か、あるいは文字の2進数表示かを判断する。例えば第2の復号処理部132は、中間符号の先頭のフラグが「0」であれば、文字の2進数表記であると判断する。また第2の復号処理部132は、中間符号の先頭のフラグが「1」であれば、アドレス+長さの形式であると判断する。第2の復号処理部132は、文字の2進数表記であれば、処理をステップS153に進める。また第2の復号処理部132は、アドレス+長さの形式であれば、処理をステップS154に進める。
[ステップS153]第2の復号処理部132は、中間符号が文字の2進数表記であれば、文字の進数表現を伸張ファイル24に出力する。その後、第2の復号処理部132は、処理をステップS157に進める。
[ステップS154]第2の復号処理部132は、中間符号がアドレス+長さの形式であれば、「αn+β」の形式で記述されているアドレスを、アドレスを示す整数に変換する。例えば第2の復号処理部132は、圧縮ファイル121のヘッダ部121aから、レコード長に応じた周期nを取得する。そして第2の復号処理部132は「αn+β」を計算し、アドレスを示す整数を得る。
[ステップS155]第2の復号処理部132は、アドレスを示す整数と、長さを示す整数とを、文字列に復号する。例えば第2の復号処理部132は、アドレスに示す整数を、スライド窓内の復号されている文字列の末尾からのオフセットとして、そのオフセットの位置の文字を検出する。そして第2の復号処理部132は、検出した文字から長さで示されたデータ長分の文字列を取得し、復号後の文字列とする。
[ステップS156]第2の復号処理部132は、復号された文字列を伸張ファイル24に出力する。
[ステップS157]第2の復号処理部132は、スライド窓のデータを更新する。例えば第2の復号処理部132は、復号された文字数分だけ、スライド窓内の先頭の文字列を破棄する。次に第2の復号処理部132は、復号された文字数分だけ、スライド窓内の文字列を前方にシフトする。そして第2の復号処理部132は、スライド窓内の末尾に復号された文字列を格納する。
このようにして、最長一致文字列に対応する符号を、元の最長一致文字列に復号することができる。
以上説明したように、第2の実施の形態では、スライド辞書法による符号化の際に、参照部31の末尾からのオフセットをアドレスとし、アドレスを「αn+β」の形式で表している。これにより、αやβを0近傍の整数に偏らせることができる。ハフマン符号は、出現頻度の高い整数ほど、短い符号に符号化される。そのため、0近傍に偏った整数をハフマン符号に符号化することが、圧縮効率が向上する。
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態は、1パスによるデータ圧縮を行うものである。なお第3の実施の形態を実現するための機能構成は、図3に示した第2の実施の形態の機能構成と同じである。そこで図3に示した各要素の符号を用いて、第3の実施の形態の処理を説明する。
図21は、1パスによる圧縮処理の手順の一例を示すフローチャートである。以下、図21に示す処理をステップ番号に沿って説明する。
[ステップS201]第1の符号化処理部111は、元ファイル21内の文字列を先頭から順に読み出し、スライド窓30に格納する。例えば第1の符号化処理部111は、スライド窓30の符号化部32に、文字列を格納する。
[ステップS202]第1の符号化処理部111は、スライド窓30の参照部31に格納された文字列を辞書として用い、符号化部32内の最長一致文字列を符号化する。この処理の詳細は、第2の実施の形態における最長一致文字列の符号化処理(図16参照)と同様である。
[ステップS203]第1の符号化処理部111は、スライド窓30のデータを更新する。この処理の詳細は、図15のステップS103の処理と同様である。
[ステップS204]第1の符号化処理部111は、スライド窓30が文字列で満杯になったか否かを判断する。スライド窓30が文字列で満杯になった場合、第1の符号化処理部111は、処理をステップS205に進める。またスライド窓30が文字列で満杯になっていなければ、第1の符号化処理部111は、処理をステップS202に進める。
[ステップS205]第2の符号化処理部111は、最長一致文字列のアドレスの要素値(n、α、β)を算出する。この処理の詳細は、図17に示した第2の実施の形態の処理と同様である。
[ステップS206]第2の符号化処理部112は、ハフマン木を生成する。ハフマン木は、例えばアドレス「αn+β」のαとβとのそれぞれに応じて生成される。またαとβとの出現頻度の特性が類似していれば、αとβとの整数の出現頻度に応じて、1つのハフマン木を生成することもできる。ハフマン木の生成処理の詳細は、図18に示した第2の実施の形態の処理と同様である。
[ステップS207]第1の符号化処理部111は、最長一致文字列の符号化処理を再度実行する。例えば第1の符号化処理部111は、ステップS202で符号化された文字列の次の文字から符号化を再開する。
[ステップS208]第1の符号化処理部111は、ステップS203の処理と同様に、スライド窓30のデータを更新する。
[ステップS209]第1の符号化処理部111は、スライド窓30の符号化部32が空になったか否かを判断する。スライド窓30の符号化部32が空になった場合、第1の符号化処理部111は、処理をステップS210に進める。またスライド窓30の符号化部32に、符号化が未処理の文字列が残っていれば、第1の符号化処理部111は、処理をステップS207に進める。
[ステップS210]第2の符号化処理部112は、中間符号ファイル22内の符号列(アドレス、長さ、文字の2進数表示)を、ハフマン符号に符号化する。なお図13に示すように、アドレスについて「αn+β」の形式で記載されている場合、αとβとを個別に符号化する。また第2の符号化処理部112は、例えば、α・β・長さおよび文字の2進数表記を、それぞれ個別のハフマン木を用いて符号化する。なおαとβとの頻度特性が類似していれば、共通のハフマン木を用いて得符号化することもできる。
[ステップS211]第2の符号化処理部112は、圧縮ファイル121を出力する。
このように、中間符号の一部を用いてハフマン木を生成することで、ハフマン木の生成処理が容易となる。その結果、圧縮処理の高速化が図れる。
〔第4の実施の形態〕
次に第4の実施の形態について説明する。第4の実施の形態は、文字列の出現頻度が、レコード長による周期性を有していない場合に適したデータ圧縮処理である。以下、第4の実施の形態における第2の実施の形態との相違点について説明する。
図4〜図13には、名簿のデータベースのようなデータベース系のファイルを圧縮する場合の、スライド辞書法による符号化について説明した。データベース系のファイルでは、各レコードに共通の項目が含まれており、各項目の文字列が、レコード長による周期性を持って出現する。他方、名簿のようなデータベースほどレコード長による周期性を有していないデータもある。例えば、国語辞書などの辞書の文字列は、名簿ほどのレコード長による周期性は期待できない。
そこで、第4の実施の形態では、第2の実施の形態で示した最長一致文字列のアドレスと長さを、以下のように補正し、0の近傍に近づける。
・補正後のアドレス=参照部の末尾から最長一致文字列の先頭までのオフセット−最長一致文字列の長さ
・補正後の長さ=最長一致文字列の長さ−3
補正後のアドレスは、参照部の末尾から最長一致文字列の末尾までのオフセットを示している。
補正後の長さは、長さを示す整数の開始値を「0」にシフトしたものである。すなわち、最長一致文字列が「0」ということはないため、補正前の長さを示す整数として「0」は使用されない。また最長一致文字列の長さが2バイト以下の場合、第2の実施の形態と同様に、文字列の2進数表記が中間符号として出力される。そのため、補正前の長さを示す整数として「1〜2」も使用されない。このように補正前の長さを示す整数では「0〜2」は使われない。そこで第4の実施の形態では、「3,4,5,・・・」という配列の整数が、「0」から開始される「0,1,2,・・・」という配列の整数に補正される。これにより、長さを示す整数を「0」近傍に偏らせることができる。なお、伸張時には、復号して得られた長さを示す整数に「3」を加えた値が、最長一致文字列の長さとなる。
図22は、元ファイルの他の例を示す図である。図22に示す元ファイル21aには、電子辞書に用いる辞書データが、圧縮対象の文字列として格納されている。図22に示すように、電子辞書や電子書籍の本文(例えばXHTML(Extensible HyperText Markup Language)ファイルは、見出しと解説で構成されている。すると、見出し語などに、関連した用語や基礎単語などの文字列が繰り返し表記される。例えば、図22の例では、”『相合”という文字列が繰り返し出現する。このような電子辞書などの辞書データに関しては、最長一致文字列のアドレスとして、例えば参照部31の末尾から最長一致文字列の末尾の文字までのオフセットを使用する。
図23は、参照部の末尾からのオフセットで最長一致文字列のアドレス修飾を行った場合の他の例を示す図である。図23の例では、辞書データの”『相合牛」・・・”という文字列が符号化部32の先頭にあるものとする。そして符号化部32の”『相合”の3文字を最長一致文字列47とし、参照部31からは、2つの最長一致文字列48,49が検出されている。この場合、参照部31の末尾に近い方の最長一致文字列49を用いて、符号化部32の最長一致文字列47が符号化される。
符号化の際に、最長一致文字列49のアドレスと長さが決定される。このとき、参照部31の末尾から最長一致文字列49の末尾の文字までのオフセットを、アドレスとする。このようにして決定したアドレスおよび長さは、以下のような特性を有する。
図24は、アドレスを示す整数の特性を示す図である。図24では、横軸にアドレスを示す整数の値を示し、縦軸にアドレスを示す整数の値が出現する頻度を示している。図24に示すように、アドレスを示す整数の値が大きくなるほど、その整数が出現する頻度は小さくなっている。すなわちアドレスを示す整数の値は、0近傍に偏在している。なお図24では、スライド窓30の参照部31のサイズが無限大(∞)であるものとしてグラフを作成しているが、実際には参照部31のサイズは有限である。そのためスライド窓30の参照部31のデータ長がアドレスを示す整数の最大値となり、アドレスを示す整数が最大値となったときの頻度が、頻度の最小値となる。
図25は、アドレスを示す整数の特性を示す図である。図25では、横軸に長さを示す整数の値を示し、縦軸にアドレスを示す整数の値が出現する頻度を示している。図25に示すように、長さを示す整数の値が大きくなるほど、その整数が出現する頻度は小さくなっている。すなわち長さを示す整数の値は、0近傍に偏在している。なお図25では、スライド窓30の参照部31のサイズが無限大(∞)であるものとしてグラフを作成しているが、実際には参照部31のサイズは有限である。そのためスライド窓30の参照部31のデータ長が、長さを示す整数の最大値となり、長さを示す整数が最大値となったときの頻度が、頻度の最小値となる。
このようにして、電子辞書などのデータをスライド辞書法で符号化したときの符号を、0の近傍に偏らせることができる。特に、アドレスについては、参照部31の末尾から最長一致文字列の末尾の文字をまでのオフセットをアドレスとしたことで、アドレスを示す整数の値が、「0」近傍への偏り度合いが高くなる。
次に、スライド窓の制御およびアドレスの計算方法について詳細に説明する。
スライド窓30はFIFO(First-In First-Out)型のバッファである。スライド窓30には、符号化対象の文字列が順次入力され、スライド窓30内が文字列で満杯になると、古い文字列から順に破棄される。このような動作を、文字列上でのスライド窓の移動と捉えると、図26のように表せる。
図26は、スライド窓の移動例を示す図である。図26では、スライド窓30のうちの参照部31の論理的な移動を示している。図26には、「→うし」という文字列の符号化が完了した後の、スライド窓30の移動状況が示されている。「→うし」という3文字列が符号化されたことで、参照部31が、文字列上を右方向に3文字分移動している。その結果、参照部31の先頭からは「あい−」の3文字が押し出され、参照部31の末尾に「→うし」という3文字が追加されている。なお符号化部32も、参照部31と同様に移動する。
図26にはスライド窓30の移動を論理的処理として示したが、スライド窓30はバッファであり、実際には、バッファへの文字列の書き込みによりスライド窓30内のデータが更新される。
図27は、スライド窓内の文字列の更新例を示す図である。第1の符号化処理部111は、符号化カウンタ33を有する。符号化カウンタ33は、符号化された文字列の量を示すカウンタである。例えば、符号化された文字列の量がバイト数で符号化カウンタ33に示される。符号化カウンタ33の値を、参照部31の長さ(データ量)で除算したときの余りの値が、参照部31の物理領域の先頭から、参照部31の論理的な末尾の文字の次の領域までのオフセットとなる。参照部31の論理的な末尾の文字の次の領域は、参照部31に次に格納する文字列の書き込み位置である。
文字列が符号化されると、符号化された文字列が、書き込み位置を先頭として、参照部31に書き込まれる。なお書き込み位置以降に既に文字列が書き込まれている場合、符号化された文字列が上書きで書き込まれる。また符号化カウンタ33の値は、文字列の符号化が完了するごとに、符号化された文字列分(例えばバイト数)カウントアップされる。
例えば参照部31の長さを、8192バイトとする。この場合、8192バイト分の文字列が符号化されると、参照部31内が文字列で満杯になる。この時点での符号化カウンタ33の値は「8192」である。
この状況で、文字列「→うし」の符号化が完了したものとする。この場合、文字列「→うし」が、参照部31の先頭に書き込まれる。また「→うし」は2バイト文字で3文字であるため、6バイト分の文字列が符号化されたこととなる。そこで符号化カウンタ33の値は、6だけカウントアップされる。その結果、符号化カウンタ33の値が「8192」から「8198」に更新される。
なお符号化部32の文字列の更新も参照部31と同様に、符号化カウンタ33の値を用いて更新できる。
このようにして、スライド窓30のバッファへの物理的な書き込みをサイクリックに行うことができる。その結果、スライド窓30内の文字列の更新時の書き込みデータ量が少なくて済み、圧縮処理の高速化が図れる。また伸張時にも同様のスライド窓の制御を行うことで、伸張処理の高速化が図れる。なお第2の実施の形態においても、図27に示した方法でスライド窓30の文字列を更新し、圧縮・伸張処理の高速化が可能である。
図27に示したような物理領域を有する参照部31から最長一致文字列を検索する場合、参照部31の論理的な先頭の文字から後方に向かって、最長一致文字列の照合が行われる。
図28は、最長一致文字列の検索例を示す図である。なお図28は、電子辞書のデータをスライド辞書法で符号化する場合の例であり、最長一致文字列の末端までのオフセットをアドレスとする。
図28の例では、”『相合牛』・・・」”の文字列に対する最長一致文字列が検索され、”『相合”の3文字と一致する文字列が、2箇所検出されている。この場合、参照部31の後方(末尾により近い方)の文字列が、最長一致文字列として検出される。
最長一致文字列を検出すると、検出された最長一文字列の末尾の文字の位置が、参照部31の物理的な先頭からのオフセットで表される。第1の符号化処理部111は、最長一文字列の末尾の文字の位置の、参照部31の物理的な先頭からのオフセットを、検出位置ポインタ34に設定する。そして第1の符号化処理部111は、以下の式により、最長一致文字列のアドレスを算出する。
最長一致文字列のアドレス=符号化カウンタの値−検出位置ポインタの値−参照部のデータ長×m ・・・(1)
ここで、mは0以上の整数である。第1の符号化処理部111は、例えば「参照部のデータ長×m」の値が「符号化カウンタの値−検出位置ポインタの値」より小さくなるようなmのうちの最大値を求め、そのmの最大値を用いて上記式(1)を計算する。
なお最長一致文字列のアドレスは、「符号化カウンタの値−検出位置ポインタの値」を「参照部のデータ長」で除算することで求めることもできる。この場合、除算したときの余りが、最長一致文字列のアドレスとなる。
例えば図28の例では、参照部31の論理的な先頭は、物理領域の先頭から7バイト目の文字である。そして、参照部31の論理的な先頭の文字から8000バイト目の”『相合”の文字が、最長一致文字列として検出されている。検出された最長一致文字列は、参照部31の物理的な領域の末尾から186バイトの位置にある。また参照部31の物理領域上では、論理的な先頭の文字の前に6バイト分の文字が存在する。すると参照部31の論理的な末尾から最長一致文字列の末尾の文字までのオフセットは「192」となる。
ここで、図28の例に示す数値を、式(1)に当てはめてみる。符号化カウンタ33の値が「8198」であり、検出位置ポインタ34の値は「8006」である。すると「符号化カウンタの値−検出位置ポインタの値」は「192」となる。また参照部のデータ長は「8192」である。そこで「m=0」として式(1)を計算すると、最長一致文字列のアドレスが「192」となり、正しい結果が得られていることが分かる。
なお第2の実施の形態のように最長一致文字列の先頭までのオフセットをアドレスとする場合、最長一文字列の先頭の文字の位置を示すオフセットの値を、検出位置ポインタ34に設定すればよい。
次に、最長一致文字列のアドレスを分解し、0近傍の複数の整数で表す手法について説明する。電子辞書のようなデータでは、第2の実施の形態のようにアドレスを「αn+β」という形式にすることが難しい。そこで第4の実施の形態では、アドレスを示す整数を、整数を2進数表記したときの桁数が所定の閾値以下の下位整数と、その閾値より大きな上位整数とに区分けする。図24、図25に示したように、アドレスや長さの整数が、値が大きくなるほど出現頻度が低下する特性を有する場合、下位整数は上位整数よりも出現頻度が高い。そこで以下の説明では、下位整数を高頻度整数と呼び、上位整数を低頻度整数と呼ぶこととする。
図29は、アドレスを示す整数の区分けの一例を示す図である。図29では、横軸にアドレスを示す整数の値を示し、縦軸にアドレスを示す整数の値が出現する頻度を示している。図29の例は、スライド窓30の参照部31のデータ長が8k(8192)バイトの例である。
アドレスを示す整数の出現頻度は、整数の値が大きくなるほど低下する。参照部31のデータ長が8kバイトであれば、アドレスを示す整数の最大値は8k(8192)である。また最長一致記号列の長さについて、そこで、例えば整数「128」を高頻度整数の境界値とし、境界値以下の整数を高頻度整数、境界値より大きな整数を低頻度整数とする。この境界値は、アドレスの桁数の閾値の一例である。境界値「128」は、2進数表記における桁数の境界値「7」に等しい。
このように1〜8192までの整数を区分けすると、高頻度整数(1〜128)については7ビットで表現できる。低頻度整数(129〜8192)については、例えば上位3ビット、中位3ビット、下位7ビットの合成とみなし、3分割することができる。
図30は、高頻度整数と低頻度整数とのビット構成の一例を示す図である。
図30に示すように、高頻度整数は、全7ビットで表現される。低頻度整数は、13ビットで表現される。なお、7ビットすべてが「0」の場合、アドレスを示す整数「1」を表しているものとする。すなわち7ビットで表される数値に1を加算した値を、アドレスを示す整数とする。
低頻度整数は、上位3ビット、中位3ビット、下位7ビットに分割される。このように分割した場合、以下のような特性が統計的に推定できる。
・低頻度整数の下位7ビットは、高頻度整数の全7ビットと相似した特性を持つ。
・低頻度整数の上位3ビットは、中位3ビットと相似した特性を持つ。
そこで第4の実施の形態では、第2の符号化処理部112は、低頻度整数の下位7ビットについては、高頻度整数と共通の符号に符号化する。また第2の符号化処理部112は、低頻度整数の上位3ビットについては、低頻度整数の中位3ビットと共通の符号に符号化する。このような符号化を行うことで、ハフマン木の葉の数を8192から136(128+8)に減少させることができる。その結果、ハフマン木のサイズが縮小し、圧縮・伸張処理の効率化を図ることができる。
図31は、低頻度整数を区分けした場合の圧縮・伸張回数の一例を示す図である。128を高頻度整数の境界値とした場合、1〜128の高頻度整数に関しては、高頻度整数を表す「1〜7」ビットが圧縮・伸張の対象となる。高頻度整数を表す「1〜7」ビットは、1回で圧縮・伸張が行われる。
低頻度整数のうちの「129〜1024」を表す中位3ビットおよび下位7ビットのうち、下位7ビットに関しては、高頻度整数とみなして圧縮・伸張が行われる。そこで中位3ビットに関して、個別に圧縮・伸張が行われる。従って、低頻度整数のうちの「129〜1024」については、中位3ビット・上位3ビットそれぞれの圧縮・伸張が行われ、圧縮また伸張回数は2回となる。
低頻度整数のうちの「1025〜8192」を表す全13ビットのうち、下位7ビットに関しては、高頻度整数とみなして圧縮・伸張が行われる。そこで中位3ビット、上位3ビットに関しては、それぞれ低頻度整数のうちの「129〜1024」を表す中位3ビットとみなして個別に圧縮・伸張が行われる。従って、低頻度整数のうちの「1025〜8192」については、下位7ビット・中位3ビット・上位3ビットそれぞれの圧縮・伸張が行われ、圧縮また伸張回数は3回となる。
次に、低頻度整数を複数に区分けする場合のハフマン木の生成処理の手順について説明する。
図32は、第4の実施の形態におけるハフマン木の生成処理の手順の一例を示す図である。以下、図32に示す処理をステップ番号に沿って説明する。
[ステップS301]第2の符号化処理部112は、アドレスを示す整数と、長さを示す整数とを合わせ、各整数の出現頻度を計算する。
[ステップS302]第2の符号化処理部112は、低頻度整数を上位3ビット、中位3ビット、下位7ビットに分割する。
[ステップS303]第2の符号化処理部112は、高頻度整数の7ビットで表される128個の整数と、低頻度整数の中位3ビットで表される8個の整数それぞれに対応する葉を生成する。葉の構造体には、割り当てられた整数と、その整数の出現頻度が設定される。
[ステップS304]第2の符号化処理部112は、アドレスを示す整数と長さを示す整数とに共通のハフマン木を生成する。例えば第2の符号化処理部112は、高出現頻度の整数の出現頻度と、低頻度整数の中位3ビットで表される整数の出現頻度とを用いて、ハフマン木を生成する。このようになお、アドレスを示す整数と長さを示す整数とのハフマン木を共通化することで、圧縮・伸張時に使用するメモリなどの資源が少なくて済む。
[ステップS305]第2の符号化処理部112は、文字の2進数表記それぞれの出現頻度に基づいてハフマン木を生成する。
このようにして、アドレスと長さを符号化するためのハフマン木と、文字の2進数表記を符号化するためのハフマン木とが生成される。
第4の実施の形態では、アドレスと長さを符号化するためのハフマン木について、低頻度整数を複数に分割して、下位7ビットを高頻度整数と同様に扱う。また低頻度整数の上位3ビットは、中位3ビットと同様に扱う。これにより、葉の数を減少させ、ハフマン木の構造を簡略化することができる。ハフマン木の構造化簡略化されることで、圧縮・伸張の速度も高速化する。
またアドレスと長さとのそれぞれを示す整数のうちの低頻度整数を複数に分割したことで、ハフマン符号化を行うアドレスまたは長さを示す整数のデータ長に制限がある場合であっても、その制限が緩和される。例えばLZ77符号(スライド辞書法を使用)とハフマン符号化を組み合わせた圧縮形式の1つであるLHAでは、最長一致記号列の長さについて、256(8ビット)に制限が設けられている。上記の例では、アドレスと長さを示す整数は、分割前は13ビットであるが、分割によって8ビット以下に抑えられている。その結果、LHAにおけるハフマン符号の際の長さの制限にかからずに済む。
なお上記の例では、低頻度整数を3つに区分けしているが、例えば低頻度整数を2つに区分けするだけでも、ハフマン木の葉の数を削減できる。
図33は、低頻度整数を区分けする他の例を示す図である。図33の例では、高頻度整数境界値を「256」としている。この場合、「1〜256」が高頻度整数となる。高頻度整数は全8ビットで表される。そして、8ビットで表される整数それぞれが割り当てられた256個の葉が生成される。
全13ビットで表される低頻度整数は、上位5ビットと下位8ビットとに区分けされる。この場合、下位8ビットは、高頻度整数とみなして符号化できる。そこで上位5ビットの表される32個の整数それぞれが割り当てられた32個の葉が生成される。
以上より、生成されるハフマン木の葉の数は、「288」(256+32)となり、ハフマン木の葉の数が削減できることが分かる。
〔第5の実施の形態〕
次に、第5の実施の形態について説明する。第5の実施の形態は、圧縮・伸張の際にハフマン木に代えて、無節点の木を生成するものである。
無節点の木は、ハフマン木と同様に、出現頻度が高い記号(例えば文字や整数)ほど、短い符号に符号化するものである。ただし、ハフマン木は、根(ルート)の下位に複数の節点が設けられるのに対して、無節点の木では、根の下位に節点は設けられず、すべての葉が根の下位に直接接続される。このような構造の無節点の木を用いると、圧縮符号を1ビット毎ではなく、数ビットの符号単位で伸張することが可能となり、伸張速度が向上する。
無節点の木を生成する際には、例えば各整数の出現頻度に応じて、符号化時の符号長が決定される。
図34は、整数の出現頻度と符号長との関係の一例を示す図である。図34には、整数に関し、出現回数、出現頻度、補正確率、符号長、および圧縮符号が示されている。
例えば第2の符号化処理部112は、各整数の出現回数を計数し、出現頻度を求める。出現頻度は、例えばすべての整数の出現回数に対する、対応する整数の出現回数の割合である。
第2の符号化処理部112は、出現頻度に基づいて補正確率を求める。補正確率は、例えば、「1/2」のべき乗のうち、出現頻度以下の最も大きな数である。例えば、出現頻度「0.137」の場合、「1/4(0.25)」より小さく、「1/8(0.125)」より大きい。そこで出現頻度「0.137」の補正確率は「1/8」となる。
次に第2の符号化処理部112は、補正確率に基づいて、符号長を求める。符号長は、符号のビット数である。例えば補正確率を「1/2」のべき乗で表したときの指数(何乗か)が、符号長とされる。補正確率「1/8」であれば、「1/2」の3乗であることから、符号長は「3」となる。
第2の符号化処理部112は、各整数の圧縮符号を、その整数の出現頻度に応じて決定した符号長の符号に決定する。例えば符号長が「3」であれば、圧縮符号は「000」、符号長が「4」であれば、圧縮符号は「0010」となる。第2の符号化処理部112は、アドレスや長さを示す整数を、図34に示すような圧縮符号に符号化する。
このような整数と圧縮符号との対応関係に基づいて、無節点の木を生成することができる。例えば図30に示すように低頻度整数を区分けした場合、葉の数は136個となる。すると8ビットで表すことができる。そこで符号の最大ビット数が8の場合の無節点の木の例を、図35を参照して説明する。
図35は、無節点の木の一例を示す図である。無節点の木50には、根51と複数の葉52a,52b,52c,・・・52m,52nが設けられている。根51の直下に葉52a,52b,52c,・・・52m,52nが設けられており、ハフマン木にあるような節は存在しない。ここで葉52a,52b,52c,・・・52m,52nそれぞれの識別番号を、左から順に1,2,3,・・・とする。
根の構造体61には、8ビットで表せるアドレスに対応する各領域に、葉52a,52b,52c,・・・52m,52nへのポインタが設定されている。葉の構造体62には、例えば対応する葉52aの識別番号、圧縮符号長、圧縮符号、整数(圧縮される記号)などが設定されている。
ここで根の構造体61においては、圧縮符号長が少ない葉ほど、多くのポインタが設定される。例えば葉52aの圧縮符号長は「3」、圧縮符号は「000」である。この場合、根の構造体の葉52aに対しては、「00000000」〜「00011111」のアドレス範囲のすべての領域に、葉52aへのポインタが設定される。
このような無節点の木50によれば、復号を符号単位で行うことができる。例えば第1の復号処理部131は、復号対象の符号列の先頭の8ビットの値を取得し、根の構造体61の先頭から、取得した値をオフセットとした領域に格納されているポインタを参照する。次に第1の復号処理部131は、参照したポインタで示されている葉の構造体を参照する。そして第1の復号処理部131は、取得した8ビットのうち、参照した葉の構造体に示されている圧縮符号長で示されるビット数の先頭のビットを、参照した葉の構造体に示されている整数に復号する。その後、第1の復号処理部131は、復号していない符号列の先頭8ビットを再度取得し、同様に復号する。
例えば、取得した8ビットの値が「00000111」であれば、対応するオフセットの領域が参照される。その領域には、葉52aに対応する葉の構造体62へのポインタが設定されている。葉の構造体62には、圧縮符号長が「3」であること、整数「1」に復号することが示されている。そこで、第1の復号処理部131は、8ビットの値「00000111」のうちの先頭の3ビット「000」を整数「1」に復号する。
このように、無節点の木50を用いて復号することで、ハフマン木を用いた復号のように、根からの節点を辿るための複数の判断が不要となり、根51から1パスで目的の葉を検出し、復号することができる。すなわち無節点の木50により、圧縮データを1ビットごとでなく、8ビットをまとめた1回の判定で、葉の構造体を獲得するができる。これにより、圧縮された符号を高速に伸長することができる。
〔その他の実施の形態〕
上記の各実施の形態に示した処理機能をコンピュータ100によって実現するために、各実施の形態に示した処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM/RWなどがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。なおプログラムを記録する記録媒体には、一時的な伝搬信号自体は含まれない。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
また、上記の処理機能の少なくとも一部を、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現することもできる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
1,2 情報処理装置
1a 第1の符号化手段
1b 第2の符号化手段
1c 中間符号列
2a 第1の復号手段
2b 第2の復号手段
2c 中間符号列
3 元ファイル
4 記録媒体
4a 圧縮ファイル
5 バッファ

Claims (14)

  1. 符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索し、
    符号化が終了した記号列の末尾から該最長一致記号列の末尾までの距離を示す整数を、該最長一致記号列のアドレスとし、該最長一致記号列に対応する、符号化が行われていない記号列の先頭の記号列を、該アドレスを示す整数と該最長一致記号列の長さを示す整数とに符号化し、
    該最長一致記号列のアドレスを示す整数の出現頻度が高くなる周期n(nは1以上の整数)を求め、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式に変換し、αとβとの値および長さを示す整数を、出現頻度が高いほど短い符号となるように符号化する、
    処理をコンピュータに実行させるプログラム。
  2. 最長一致記号列の検索では、検索対象の記号列をバッファに格納し、記号列の符号化が終了するごとに、符号化が終了した記号列を、該バッファ内の最先に符号化された記号列の位置に上書きで書き込む、
    処理をコンピュータに実行させる請求項1記載のプログラム。
  3. 最長一致記号列の検索では、符号化された記号数を示すカウンタの値から、前記バッファの先頭から最長一致記号列の位置までのオフセットと、前記バッファの記憶容量の整数倍とを減算した結果を、該最長一致記号列のアドレスとする、
    処理をコンピュータに実行させる請求項2記載のプログラム。
  4. 符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索し、
    符号化が終了した記号列の末尾から該最長一致記号列までの距離を示す整数を、該最長一致記号列のアドレスとし、該最長一致記号列に対応する、符号化が行われていない記号列の先頭の記号列を、該アドレスを示す整数と該最長一致記号列の長さを示す整数とに符号化し、
    該最長一致記号列のアドレスを示す整数の出現頻度が高くなる周期n(nは1以上の整数)を求め、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式に変換し、αとβとの値および長さを示す整数を、出現頻度が高いほど短い符号となるように符号化する、
    処理をコンピュータに実行させるプログラム。
  5. 符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索し、
    符号化が終了した記号列の末尾から該最長一致記号列までの距離を示す整数を、該最長一致記号列のアドレスとし、該最長一致記号列に対応する、符号化が行われていない記号列の先頭の記号列を、該アドレスを示す整数と該最長一致記号列の長さを示す整数とに符号化し、
    該最長一致記号列のアドレスを示す整数を、桁数が閾値以下の値の下位整数と、前記閾値より大きい値の上位整数とに分け、上位整数を前記閾値以下の桁で表される整数と前記閾値より上の桁で表される整数とに分離し、符号化に用いる符号の木の葉として、前記閾値以下の桁で表される整数それぞれに対応する葉と、上位整数の前記閾値より上の桁で表される整数それぞれに対応する葉とを生成し、生成された葉それぞれに対応する整数の出現頻度に応じて符号の木を生成し、該符号の木を用い、出現頻度が高い整数ほど短い符号となるように、アドレスを示す整数と長さを示す整数を符号化する、
    処理をコンピュータに実行させるプログラム。
  6. 整数の符号化では、最長一致記号列のアドレスを示す整数と、最長一致記号列の長さを示す整数とに共通の符号の木を生成し、該符号の木を用いて整数を符号化する、
    処理をコンピュータに実行させる請求項1乃至5のいずれかに記載のプログラム。
  7. 符号化が終了した記号列の書き込みでは、符号化された記号数を示すカウンタの値を前記バッファに格納可能な記号数で除算し、前記バッファの先頭から該除算の余りで示された距離の位置に、符号化が終了した記号列を上書きで書き込み、該記号列の記号数分だけ該カウンタの値をカウントアップする、
    処理をコンピュータに実行させる請求項2または3記載のプログラム。
  8. 符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索したときに、該最長一致記号列のアドレスを示す整数の出現頻度が高くなる周期n(nは1以上の整数)に基づいて、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式で表したときのαとβとの値、および長さを示す整数を含む中間符号を、出現頻度が高い整数ほど短い符号に符号化することで得られた符号が、符号列に含まれており、該符号列の先頭から順に、符号を中間符号に復号し、
    以前に得られた中間符号の復号により既に得られている記号列の末尾から、新たに得られた中間符号のアドレスを示す整数に応じた距離にある記号を特定し、該記号を末尾とする記号列であり、該中間符号の長さを示す整数分の長さの該記号列を取得し、該中間符号を該取得した記号列に復号する、
    処理をコンピュータに実行させるプログラム。
  9. 符号の復号では、復号に用いる符号の木として、根の直下にすべての葉が接続された無節点の木を用いる、
    処理をコンピュータに実行させる請求項8記載のプログラム。
  10. コンピュータが、
    符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索し、
    符号化が終了した記号列の末尾から該最長一致記号列の末尾までの距離を示す整数を、該最長一致記号列のアドレスとして、該最長一致記号列に対応する、符号化が行われていない記号列の先頭の記号列を、該アドレスを示す整数と該最長一致記号列の長さを示す整数とに符号化し、
    該最長一致記号列のアドレスを示す整数の出現頻度が高くなる周期n(nは1以上の整数)を求め、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式に変換し、αとβとの値および長さを示す整数を、出現頻度が高いほど短い符号となるように符号化し、
    整数の符号化によって得られた符号を含む圧縮ファイルを生成する、
    ことを特徴とする圧縮ファイル生成方法。
  11. コンピュータが、
    符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索したときに、該最長一致記号列のアドレスを示す整数の出現頻度が高くなる周期n(nは1以上の整数)に基づいて、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式で表したときのαとβとの値、および長さを示す整数を含む中間符号を、出現頻度が高い整数ほど短い符号に符号化することで得られた符号が、符号列に含まれており、該符号列の先頭から順に、符号を中間符号に復号し、
    以前に得られた中間符号の復号により既に得られている記号列の末尾から、新たに得られた中間符号のアドレスを示す整数に応じた距離にある記号を特定し、該記号を末尾とする記号列であり、該中間符号の長さを示す整数分の長さの該記号列を取得し、該中間符号を該取得した記号列に復号する、
    ことを特徴とする圧縮符号伸張方法。
  12. 符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索し、符号化が終了した記号列の末尾から該最長一致記号列の末尾までの距離を示す整数を、該最長一致記号列のアドレスとして、該最長一致記号列に対応する、符号化が行われていない記号列の先頭の記号列を、該アドレスを示す整数と該最長一致記号列の長さを示す整数とに符号化する第1の符号化手段と、
    該最長一致記号列のアドレスを示す整数の出現頻度が高くなる周期n(nは1以上の整数)を求め、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式に変換し、αとβとの値および長さを示す整数を、出現頻度が高いほど短い符号となるように符号化する第2の符号化手段と、
    を有することを特徴とする情報処理装置。
  13. 符号化が終了した記号列の末尾から所定の範囲内の記号列を検索対象として、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列を検索したときに、該最長一致記号列のアドレスを示す整数の出現頻度が高くなる周期n(nは1以上の整数)に基づいて、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式で表したときのαとβとの値、および長さを示す整数を含む中間符号を、出現頻度が高い整数ほど短い符号に符号化することで得られた符号が、符号列に含まれており、該符号列の先頭から順に、符号を中間符号に復号する第1の復号手段と、
    以前に得られた中間符号の復号により既に得られている記号列の末尾から、新たに得られた中間符号のアドレスを示す整数に応じた距離にある記号を特定し、該記号を末尾とする記号列であり、該中間符号の長さを示す整数分の長さの該記号列を取得し、該中間符号を該取得した記号列に復号する第2の復号手段と、
    を有することを特徴とする情報処理装置。
  14. 圧縮ファイルを記憶するコンピュータ読み取り可能な記録媒体において、
    前記圧縮ファイルには、出現頻度が高い整数ほど短い符号となるように、整数を符号化した圧縮符号が含まれており、
    前記圧縮ファイルに含まれる圧縮符号の元となる整数には、符号化が終了した記号列の末尾から所定の範囲内の記号列のうち、符号化が行われていない記号列の先頭の記号列に対して最も長く一致する最長一致記号列の末尾のアドレスを示す整数と、該最長一致記号列の長さを示す整数とが含まれており、
    最長一致記号列のアドレスを示す整数は、符号化が終了した記号列の末尾から所定の範囲内の記号列の末尾から該最長一致記号列までの距離を示す整数の出現頻度が高くなる周期n(nは1以上の整数)に基づいて、最長一致記号列のアドレスをαn±β(αは1以上の整数、βは0以上の整数)の形式で表したときのαとβとの値である、
    ことを特徴とする記録媒体。
JP2012006860A 2012-01-17 2012-01-17 プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体 Expired - Fee Related JP5895545B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012006860A JP5895545B2 (ja) 2012-01-17 2012-01-17 プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体
US13/722,206 US8704685B2 (en) 2012-01-17 2012-12-20 Encoding method, encoding apparatus, decoding method, decoding apparatus, and system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012006860A JP5895545B2 (ja) 2012-01-17 2012-01-17 プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体

Publications (2)

Publication Number Publication Date
JP2013150041A JP2013150041A (ja) 2013-08-01
JP5895545B2 true JP5895545B2 (ja) 2016-03-30

Family

ID=48779589

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012006860A Expired - Fee Related JP5895545B2 (ja) 2012-01-17 2012-01-17 プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体

Country Status (2)

Country Link
US (1) US8704685B2 (ja)
JP (1) JP5895545B2 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6009676B2 (ja) * 2013-08-09 2016-10-19 株式会社日立製作所 データ圧縮装置およびデータ伸張装置
US9124295B2 (en) * 2013-11-14 2015-09-01 Nicolas Thomas Mathieu Dupont System and method for data compression and transmission
US10028277B2 (en) 2013-11-20 2018-07-17 Cyborg Inc. Variable frequency data transmission
JP6609404B2 (ja) * 2014-07-22 2019-11-20 富士通株式会社 圧縮プログラム、圧縮方法および圧縮装置
JP6476647B2 (ja) 2014-08-20 2019-03-06 富士通株式会社 圧縮プログラム、圧縮装置、圧縮方法、伸長プログラム、伸長装置および伸長方法
US20160092492A1 (en) * 2014-09-27 2016-03-31 Qualcomm Incorporated Sharing initial dictionaries and huffman trees between multiple compressed blocks in lz-based compression algorithms
JP6511836B2 (ja) * 2015-01-30 2019-05-15 富士通株式会社 圧縮プログラム、圧縮方法、圧縮装置および伸長プログラム
JP6742692B2 (ja) * 2015-01-30 2020-08-19 富士通株式会社 符号化プログラムおよび伸長プログラム
JP6641857B2 (ja) * 2015-10-05 2020-02-05 富士通株式会社 符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置
JP6781373B2 (ja) * 2016-10-05 2020-11-04 富士通株式会社 検索プログラム、検索方法、および検索装置
JP6834327B2 (ja) * 2016-10-06 2021-02-24 富士通株式会社 符号化プログラム、符号化装置および符号化方法
JP6950162B2 (ja) * 2016-10-06 2021-10-13 富士通株式会社 暗号化システム、暗号化方法、暗号化装置および暗号化プログラム
WO2018125926A1 (en) * 2016-12-27 2018-07-05 Datalogic Usa, Inc Robust string text detection for industrial optical character recognition
JP7210130B2 (ja) 2017-04-07 2023-01-23 富士通株式会社 符号化プログラム、符号化方法および符号化装置
US10992711B2 (en) * 2017-04-13 2021-04-27 At&T Intellectual Property I, L.P. Network aware data driven internet of things service engine
JP7003443B2 (ja) 2017-05-16 2022-01-20 富士通株式会社 符号化プログラム、符号化装置および符号化方法
JP6931442B2 (ja) 2017-05-16 2021-09-08 富士通株式会社 符号化プログラム、インデックス生成プログラム、検索プログラム、符号化装置、インデックス生成装置、検索装置、符号化方法、インデックス生成方法および検索方法
CN109831544B (zh) * 2019-01-30 2021-10-08 重庆农村商业银行股份有限公司 一种应用于电子邮箱地址的编码存储方法及系统
US10944697B2 (en) 2019-03-26 2021-03-09 Microsoft Technology Licensing, Llc Sliding window buffer for minimum local resource requirements
US11165704B2 (en) 2019-04-30 2021-11-02 Ebay Inc. Adaptive encoding network
CN110868222B (zh) * 2019-11-29 2023-12-15 中国人民解放军战略支援部队信息工程大学 Lzss压缩数据误码检测方法及装置
CN112052916B (zh) * 2020-10-10 2024-03-01 腾讯科技(深圳)有限公司 基于神经网络的数据处理方法、装置以及可读存储介质
CN116737741B (zh) * 2023-08-11 2023-11-07 成都筑猎科技有限公司 一种平台商户余额数据实时更新处理方法
CN117156014B (zh) * 2023-09-20 2024-03-12 浙江华驰项目管理咨询有限公司 一种工程造价数据优化存储方法及系统
CN117097441B (zh) * 2023-10-19 2024-02-13 深圳龙电华鑫控股集团股份有限公司 基于数据分析的载波通信系统传输效率优化方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2862064B2 (ja) * 1993-10-29 1999-02-24 三菱電機株式会社 データ復号装置及びデータ受信装置及びデータ受信方法
JPH10190476A (ja) * 1996-12-27 1998-07-21 Canon Inc データ圧縮方法及びその装置
JP4242970B2 (ja) * 1998-07-09 2009-03-25 富士通株式会社 データ圧縮方法及びデータ圧縮装置
JP3541930B2 (ja) * 1998-08-13 2004-07-14 富士通株式会社 符号化装置及び復号化装置
JP3839604B2 (ja) * 1998-12-22 2006-11-01 株式会社東芝 データ処理方法
AU3274301A (en) * 2000-01-05 2001-07-16 Realnetworks, Inc. Systems and methods for multiple-file data compression
CN1446404A (zh) * 2000-08-15 2003-10-01 西加特技术有限责任公司 操作码的双模数据压缩
JP2002135128A (ja) * 2000-10-25 2002-05-10 Sony Corp データ圧縮方法、データ圧縮・伸長方法、データ圧縮装置及びデータ圧縮・伸長装置
JP2003087798A (ja) * 2001-09-13 2003-03-20 Canon Inc 動画像圧縮装置及び方法
US7436876B2 (en) * 2002-11-15 2008-10-14 Time Domain Corporation System and method for fast acquisition of ultra wideband signals
US7519577B2 (en) * 2003-06-23 2009-04-14 Microsoft Corporation Query intermediate language method and system
JP4093193B2 (ja) * 2004-03-18 2008-06-04 セイコーエプソン株式会社 データ圧縮方法及びプログラムならびにデータ復元方法及び装置
KR100647956B1 (ko) * 2004-12-14 2006-11-23 엘지전자 주식회사 휴대폰용 정지 영상 압축 및 복원 방법
JP2007043595A (ja) * 2005-08-05 2007-02-15 Nec Corp 可変長符号復号化方法および装置ならびにデータ伸長装置
JP4814999B2 (ja) * 2008-01-31 2011-11-16 富士通株式会社 データ圧縮・復元方法及び圧縮・復元プログラム
JP5062131B2 (ja) 2008-10-06 2012-10-31 富士通株式会社 情報処理プログラム、情報処理装置、および情報処理方法
JP5418218B2 (ja) * 2009-12-25 2014-02-19 富士通株式会社 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置

Also Published As

Publication number Publication date
JP2013150041A (ja) 2013-08-01
US8704685B2 (en) 2014-04-22
US20130181851A1 (en) 2013-07-18

Similar Documents

Publication Publication Date Title
JP5895545B2 (ja) プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体
JP3309031B2 (ja) 短ブロックのデータを圧縮、伸長するための方法、及び装置
Adjeroh et al. The Burrows-Wheeler Transform:: Data Compression, Suffix Arrays, and Pattern Matching
US8838551B2 (en) Multi-level database compression
US7283072B1 (en) Methods of creating a dictionary for data compression
JP5812188B2 (ja) プログラム、圧縮データ生成方法、伸張方法、情報処理装置、および記録媒体
TWI594238B (zh) 直接對lz77引擎輸出之標記進行霍夫曼編碼程序之硬體資料壓縮器
US20160112064A1 (en) Parallel history search and encoding for dictionary-based compression
US20160321282A1 (en) Extracting method, information processing method, computer product, extracting apparatus, and information processing apparatus
US9941900B1 (en) Techniques for general-purpose lossless data compression using a recurrent neural network
KR101049699B1 (ko) 데이터의 압축방법
US9378126B2 (en) Decompression apparatus and decompression method
US9916314B2 (en) File extraction method, computer product, file extracting apparatus, and file extracting system
US8947272B2 (en) Decoding encoded data
US8989507B2 (en) Bitmap compression for fast searches and updates
JP2011221845A (ja) テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム
US8463759B2 (en) Method and system for compressing data
JP6835285B1 (ja) データ圧縮方法、データ圧縮装置、データ圧縮プログラム、データ伸長方法、データ伸長装置およびデータ伸長プログラム
US11196443B2 (en) Data compressor, data decompressor, and data compression/decompression system
US7538697B1 (en) Heuristic modeling of adaptive compression escape sequence
JP2018046518A (ja) データ処理装置及びデータ処理方法
Sagar Lossless data compression and decompression algorithm and its hardware architecture
Salomon et al. Dictionary methods
Salomon Basic Codes
Nadarajan et al. Analysis of string matching compression algorithms

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140904

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150526

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150602

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150803

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20150929

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160104

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20160112

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160202

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160215

R150 Certificate of patent or registration of utility model

Ref document number: 5895545

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees