JP2016134808A - データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置 - Google Patents

データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置 Download PDF

Info

Publication number
JP2016134808A
JP2016134808A JP2015008947A JP2015008947A JP2016134808A JP 2016134808 A JP2016134808 A JP 2016134808A JP 2015008947 A JP2015008947 A JP 2015008947A JP 2015008947 A JP2015008947 A JP 2015008947A JP 2016134808 A JP2016134808 A JP 2016134808A
Authority
JP
Japan
Prior art keywords
data
data string
string
compression
length
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.)
Pending
Application number
JP2015008947A
Other languages
English (en)
Inventor
井谷 宣子
Nobuko Itani
宣子 井谷
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 JP2015008947A priority Critical patent/JP2016134808A/ja
Publication of JP2016134808A publication Critical patent/JP2016134808A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させる。
【解決手段】コンピュータは、圧縮対象データ列に含まれる第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、第1のデータ列の位置を表す位置情報とを符号化することで、第2のデータ列を表す第1の圧縮データを生成する(ステップ401)。第1のデータ列は、所定長以上の長さのデータ列である。次に、コンピュータは、所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部を参照して、圧縮対象データ列のうち第2のデータ列を除く部分に含まれる第3のデータ列を識別情報に置き換える(ステップ402)。次に、コンピュータは、識別情報を符号化することで、第3のデータ列を表す第2の圧縮データを生成する。そして、コンピュータは、第1の圧縮データと第2の圧縮データとを含む圧縮データ列を出力する(ステップ403)。
【選択図】図4

Description

本発明は、データ圧縮プログラム、データ復元プログラム、データ圧縮装置、データ復元装置、データ圧縮方法、及びデータ復元方法に関する。
近年、文字データ、音声データ、画像データ等の様々な種類の電子データがコンピュータにより処理されており、処理されるデータ量も増大している。このような大量のデータを処理する場合、データ中の冗長な部分を省いて圧縮することにより、データを格納する記憶装置の容量を削減したり、データの転送時間を短縮したりすることができる。
従来のデータ圧縮アルゴリズムの1つとして、LZ77符号化及びLZ78符号化が提案されている。
LZ77符号化では、圧縮対象データ列中に繰り返し出現するデータ列(繰り返しデータ列)を、過去に出現した同じデータ列の長さ(一致長)と位置(一致位置)との組み合わせに置き換えることで、データ量を削減することができる。一致位置としては、例えば、繰り返しデータ列のアドレスと過去に出現した同じデータ列のアドレスとの差分(相対アドレス)が用いられる。繰り返し出現しない残りのデータ列(非繰り返しデータ列)は、そのデータ列の長さ(非一致長)と非繰り返しデータ列との組み合わせに置き換えられる。
LZ77符号化により生成された圧縮データ列から圧縮対象データ列を復元する際、過去に出現した同じデータ列の一致位置から一致長分のデータ列をコピーすることで、繰り返しデータ列を復元できる。また、非繰り返しデータ列については、圧縮データ列から非一致長分のデータ列をコピーすることで、元のデータ列を復元できる。
図1は、LZ77符号化によるデータ圧縮処理の例を示している。図1の入力文字列のうち、アドレス1からアドレス24までの文字列“A good beginning makes a”は、非繰り返しデータ列に対応する。このため、この文字列は、非一致長24と文字列“A good beginning makes a”との組み合わせである、圧縮データ{24,“A good beginning makes a”}に置き換えられる。
アドレス25からアドレス30までの文字列“ good ”は、繰り返しデータ列に対応するため、一致長6と一致位置(相対アドレス)23との組み合わせである、圧縮データ{6,23}に置き換えられる。アドレス31からアドレス33までの文字列“end”は、非繰り返しデータ列に対応するため、非一致長3と文字列“end”との組み合わせである、圧縮データ{3,“end”}に置き換えられる。
アドレス34からアドレス36までの文字列“ing”は、繰り返しデータ列に対応するため、一致長3と一致位置20との組み合わせである、圧縮データ{3,20}に置き換えられる。アドレス37の文字列“.”は、非繰り返しデータ列に対応するため、非一致長1と文字列“.”との組み合わせである、圧縮データ{1,“.”}に置き換えられる。
一方、LZ78符号化では、すべてのデータと頻出データ列とに番号を付けて辞書に登録し、圧縮対象データ列に含まれるデータと頻出データ列とを辞書に登録された番号に置き換えることで、データ量を削減することができる。符号化に用いる辞書は、あらかじめ生成された辞書であってもよく、頻出データ列を用いて随時更新される辞書であってもよい。
LZ78符号化により生成された圧縮データ列から圧縮対象データ列を復元する際、辞書を参照して、圧縮データ列に含まれる番号を、その番号に対応するデータ又はデータ列に置き換えることで、元のデータ又はデータ列を復元できる。圧縮の際に辞書を更新する場合は、復元の際にも同様に、復元した頻出データ列を用いて辞書を更新することで、圧縮の際に用いられた辞書と同期を取ることができる。
図2は、LZ78符号化によるデータ圧縮処理の例を示している。この例では、スペースを含む各文字が圧縮開始時の辞書に登録されており、圧縮中に検出された文字又は文字列を1文字伸張した文字列を辞書に追加登録することで、辞書が更新される。
図2の入力文字列のうち、“A”、“o”、“e”、“n”、“m”、“g”、“ ”、“i”、“k”、及び“b”の各文字は、圧縮開始時の辞書に登録されているデータに対応する。このため、これらの文字は、検出された時点で、辞書中の番号を表す次のような圧縮データに置き換えられる。
N[“A”],N[“ ”],N[“g”],N[“o”],N[“d”],
N[“b”],N[“e”],N[“i”],N[“n”],N[“m”],
N[“a”],N[“k”]
このとき、検出された文字とその直前の文字とからなる2文字が辞書に追加登録される。これにより、入力文字列中の次の文字列が辞書に追加登録され、それ以降に出現する同じ文字列の符号化に使用される。
“A ”,“ g”,“go”,“oo”,“od”,“d ”,“ b”,
“be”,“eg”,“gi”,“in”,“nn”,“ng”
さらに、検出された文字列とその直前の文字とからなる、より長い文字列が辞書に追加登録され、それ以降に出現する同じ文字列の符号化に使用される。例えば、入力文字列中に3回出現する文字列“in”のうち、最初に出現するアドレス11からアドレス12までの文字列“in”は、アドレス12の文字“n”が符号化された時点で、新たな文字列として辞書に登録される。
そして、2回目に出現するアドレス14からアドレス15までの文字列“in”と、3回目に出現するアドレス34からアドレス35までの文字列“in”は、辞書中の番号を表す圧縮データN[“in”]に置き換えられる。また、2回目に出現する文字列“in”が符号化された時点で、文字列“in”とその直前の文字“n”とからなる文字列“nin”が、新たな文字列として辞書に登録される。
長い文字列及び短い文字列の双方に対して、効率よく圧縮することが可能なデータ符号化装置も知られている(例えば、特許文献1を参照)。最近一致位置リストを用いて一致文字列の繰返しを検出して符号化できるデータ圧縮方法も知られている(例えば、特許文献2を参照)。
特開2000−124810号公報 国際公開第2004/062110号パンフレット
上述した従来のデータ圧縮処理には、以下のような問題がある。
LZ77符号化により、繰り返しデータ列から大きく離れた一致位置を示す情報を符号化する場合、相応のビット数が用いられる。このため、圧縮対象データ列に含まれる同じデータ列の数が少なければ、符号化により削減されるデータ量よりも、符号化に用いられるデータ量の方が多くなる。そこで、LZ77符号化では、短い繰り返しデータ列が非繰り返しデータとして扱われ、達成可能な圧縮率には一定の限界がある。
なお、かかる問題は、圧縮対象データ列が文字列である場合に限らず、圧縮対象データ列が音声データ、画像データ等の他のデータ列である場合においても生ずるものである。
1つの側面において、本発明は、繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させることを目的とする。
1つの案では、データ圧縮プログラムは、以下の処理をコンピュータに実行させる。
(1)コンピュータは、圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、第1のデータ列の位置を表す位置情報とを符号化することで、第2のデータ列を表す第1の圧縮データを生成する。
(2)コンピュータは、所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部を参照して、圧縮対象データ列のうち第2のデータ列を除く部分に含まれる第3のデータ列を識別情報に置き換える。そして、コンピュータは、識別情報を符号化することで、第3のデータ列を表す第2の圧縮データを生成する。
(3)コンピュータは、第1の圧縮データと第2の圧縮データとを含む圧縮データ列を出力する。
1つの実施形態によれば、繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させることができる。
LZ77符号化によるデータ圧縮処理を示す図である。 LZ78符号化によるデータ圧縮処理を示す図である。 データ圧縮装置及びデータ復元装置の機能的構成図である。 データ圧縮処理のフローチャートである。 データ復元処理のフローチャートである。 データ圧縮装置の具体例を示す機能的構成図である。 データ圧縮処理の具体例を示すフローチャートである。 データ圧縮処理を示す図である。 データ復元装置の具体例を示す機能的構成図である。 データ復元処理の具体例を示すフローチャートである。 辞書のデータ列の個数を制限するデータ圧縮処理のフローチャートである。 辞書のデータ列の個数を制限するデータ圧縮処理を示す図である。 1バイト符号の識別情報を示す図である。 1バイト符号及び2バイト符号の識別情報を示す図である。 辞書のデータ列の個数を制限するデータ復元処理のフローチャートである。 情報処理装置の構成図である。
以下、図面を参照しながら、実施形態を詳細に説明する。
LZ77符号化は、長い繰り返しデータ列を効率よく圧縮できるため、5バイト程度以上の比較的長い繰り返しデータ列が頻出する圧縮対象データ列に対して、高い圧縮率を得ることができる。
しかし、テキストデータ等の場合、長い繰り返しデータ列は、十数キロバイト程度以上の範囲を探索しないと見つからないことがある。十数キロバイト程度以上の範囲から探索した繰り返しデータ列を符号化する場合、一致位置を表すために十数ビット程度以上のデータが用いられ、その繰り返しデータ列の符号化に2バイト程度のデータが用いられることになる。このため、LZ77符号化では、2バイト以下の繰り返しデータ列を無視して、非繰り返しデータ列として扱うことが多く、このような短い繰り返しデータ列は圧縮されない。
一方、LZ78符号化は、頻出データ列が辞書に登録されるため、数バイト程度の短い繰り返しデータ列が頻出する圧縮対象データ列に対して、高い圧縮率を得ることができる。
しかし、辞書に登録するデータ列の数が増えると、辞書の番号を符号化するために用いられる符号の符号量が増えるため、辞書に登録するデータ列を選別することが望ましい。このため、LZ78符号化では、テキストデータにおける引用文や各種データフォーマットにおけるヘッダ又はフッター等の長い繰り返しデータ列を辞書に登録することが難しく、長い繰り返しデータ列を短いデータ列に分割して扱うことが多い。したがって、このような長い繰り返しデータ列は効率よく圧縮されない。
図3は、実施形態のデータ圧縮装置及びデータ復元装置の機能的構成例を示している。データ圧縮装置301は、圧縮部311、圧縮部312、記憶部313、及び出力部314を含む。データ復元装置302は、復元部321、復元部322、記憶部323、及び出力部324を含む。
図4は、図3のデータ圧縮装置301が行うデータ圧縮処理の例を示すフローチャートである。
圧縮部311は、圧縮対象データ列に含まれる第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、第1のデータ列の位置を表す位置情報とを符号化することで、第2のデータ列を表す第1の圧縮データを生成する(ステップ401)。第2のデータ列は、所定長以上の長さのデータ列である。
記憶部313は、所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する。
圧縮部312は、記憶部313を参照して、圧縮対象データ列のうち第2のデータ列を除く部分に含まれる第3のデータ列を識別情報に置き換え、識別情報を符号化することで、第3のデータ列を表す第2の圧縮データを生成する(ステップ402)。
出力部314は、第1の圧縮データと第2の圧縮データとを含む圧縮データ列を出力する(ステップ403)。
図3のデータ圧縮装置301によれば、繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させることができる。
図5は、図3のデータ復元装置302が行うデータ復元処理の例を示すフローチャートである。
復元部321は、データ圧縮装置301が出力する圧縮データ列に含まれる第1の圧縮データを復号して、第1のデータ列の長さ情報と位置情報とを復元し、長さ情報と位置情報とに基づいて第2のデータ列を生成する(ステップ501)。
記憶部323は、第3のデータ列と識別情報との対応関係を記憶する。
復元部322は、圧縮データ列に含まれる第2の圧縮データを復号して、識別情報を復元し、記憶部323を参照して、識別情報を第3のデータ列に置き換える(ステップ502)。
出力部324は、第2のデータ列を含むとともに、第2のデータ列を除く部分に第3のデータ列を含む圧縮対象データ列を出力する(ステップ503)。
図3のデータ復元装置302によれば、データ圧縮装置301が出力する圧縮データ列から圧縮対象データ列を復元することができる。
図6は、図3のデータ圧縮装置301の具体例を示している。図6のデータ圧縮装置301は、圧縮部311、圧縮部312、記憶部313、出力部314、及び入力バッファ601を含む。圧縮部311は、探索部611及び符号化部612を含み、圧縮部312は、探索部613及び符号化部614を含む。データ圧縮装置301は、例えば、コンピュータであってもよい。
入力バッファ601は、入力される圧縮対象データ列を記憶し、記憶部313は、データ又はデータ列と識別情報との対応関係を表す辞書615を記憶する。
圧縮部311の探索部611は、圧縮対象データ列に含まれる所定長以上の長さの繰り返しデータ列を探索し、検出した繰り返しデータ列の一致長と一致位置とを出力する。また、探索部611は、所定長よりも短い繰り返しデータ列と繰り返し出現しないデータ列とを非繰り返しデータ列として扱い、非繰り返しデータ列の非一致長を出力する。符号化部612は、繰り返しデータ列の一致長と一致位置とを符号化するとともに、非繰り返しデータ列の非一致長を符号化する。圧縮部311は、例えば、LZ77符号化によりデータ列を圧縮することができる。
圧縮部312の探索部613は、非繰り返しデータ列から、辞書615に登録されたデータ又はデータ列を探索し、検出したデータ又はデータ列に対応する識別情報を辞書615から取得する。また、探索部613は、所定の登録規則に従って、検出したデータ又はデータ列を含む、より長いデータ列を辞書615に追加登録する。符号化部614は、探索部613が取得した識別情報を符号化する。圧縮部312は、例えば、LZ78符号化によりデータ列を圧縮することができる。
このようなデータ圧縮装置301によれば、所定長よりも短い繰り返しデータ列と繰り返し出現しないデータ列とを非繰り返しデータ列として扱い、辞書に登録された識別情報に置き換えることで、LZ77符号化よりも高い圧縮率を得ることができる。
図7は、図6のデータ圧縮装置301が行うデータ圧縮処理の具体例を示すフローチャートである。まず、探索部611は、非一致長n_lenを0に設定し(ステップ701)、圧縮対象データ列に含まれる所定長以上の長さの繰り返しデータ列を探索する(ステップ702)。
繰り返しデータ列の探索において、探索部611は、入力バッファ601内の符号化位置よりも前のデータ列から、符号化位置のアドレスを始点とする所定長以上の長さのデータ列と一致するデータ列を探索する。そして、繰り返しデータ列を検出した場合、探索部611は、その繰り返しデータ列の一致長lenと一致位置adrとを求める。この繰り返しデータ列の探索には、例えば、特許文献2に記載されたルックアップテーブルを用いた探索方法、ハッシュテーブルを用いた探索方法、又は最近一致位置リストを用いた探索方法を用いることができる。
次に、探索部611は、繰り返しデータ列を検出したか否かをチェックし(ステップ703)、繰り返しデータ列を検出しなかった場合(ステップ703,NO)、非一致長n_lenを1だけインクリメントする(ステップ713)。そして、探索部611は、符号化位置を1だけインクリメントして、符号化位置が圧縮対象データ列を超えたか否かをチェックする(ステップ714)。符号化位置が圧縮対象データ列内にある場合(ステップ714,NO)、探索部611は、ステップ702以降の処理を繰り返す。
一方、繰り返しデータ列を検出した場合(ステップ703,YES)、探索部611は、非一致長n_lenが0であるか否かをチェックする(ステップ704)。非一致長n_lenが0である場合(ステップ704,YES)、符号化部612は、一致長lenを符号化し(ステップ705)、一致位置adrを符号化する(ステップ706)。そして、出力部314は、一致長len及び一致位置adrを表す符号を出力する。
次に、探索部611は、符号化位置を1だけインクリメントして、符号化位置が圧縮対象データ列を超えたか否かをチェックする(ステップ707)。符号化位置が圧縮対象データ列内にある場合(ステップ707,NO)、探索部611は、ステップ701以降の処理を繰り返す。
非一致長n_lenが0でない場合(ステップ704,NO)、符号化部612は、非一致長n_lenを符号化し(ステップ708)、出力部314は、非一致長n_lenを表す符号を出力する。
次に、圧縮部312の探索部613は、符号化位置よりも前の長さn_lenのデータ列を非繰り返しデータ列として扱い、その非繰り返しデータ列の先頭から、辞書615に登録されたデータ又はデータ列を探索する(ステップ709)。そして、探索部613は、検出したデータ又はデータ列に対応する識別情報を辞書615から取得する。
次に、符号化部614は、探索部613が取得した識別情報を符号化し(ステップ710)、出力部314は、識別情報を表す符号を出力する。そして、探索部613は、検出したデータ又はデータ列を含む、より長いデータ列に新たな識別情報を割り当てて、辞書615に追加登録する(ステップ711)。追加登録されるデータ列は、検出されたデータ又はデータ列と、その直前の1つ以上のデータとからなるデータ列であってもよい。
次に、探索部613は、非繰り返しデータ列の符号化が終了したか否かをチェックし(ステップ712)、符号化されていないデータが残っている場合(ステップ712,NO)、ステップ709以降の処理を繰り返す。そして、非繰り返しデータ列の符号化が終了した場合(ステップ712,YES)、符号化部612は、ステップ705以降の処理を行う。
ステップ707において、符号化位置が圧縮対象データ列を超えた場合(ステップ707,YES)、データ圧縮装置301は、処理を終了する。
ステップ714において、符号化位置が圧縮対象データ列を超えた場合(ステップ714,YES)、符号化部612は、非一致長n_lenを符号化し(ステップ715)、出力部314は、非一致長n_lenを表す符号を出力する。次に、探索部613及び符号化部614は、ステップ709〜ステップ712と同様の処理を行う(ステップ716〜ステップ719)。そして、非繰り返しデータ列の符号化が終了した場合(ステップ719,YES)、データ圧縮装置301は、処理を終了する。
短い繰り返しデータ列の探索は、長い繰り返しデータ列の探索よりも処理負荷が大きいため、多数の短い繰り返しデータ列の探索を行うと、データ圧縮処理の効率が低下すると考えられる。このため、ステップ702の所定長としては、ある程度の長さを用いることが望ましい。
例えば、所定長として、Central Processing Unit(CPU)のロード命令によりメモリからCPU内のレジスタへロードされるデータの転送単位以上の長さを用いることができる。この転送単位は、CPUのアーキテクチャによって異なり、例えば、1ワード(32ビット)又は2ワード(64ビット)である。探索対象の繰り返しデータ列の長さを転送単位以上に制限することで、イントリンシック命令によって複数バイトのデータ列同士を比較することが可能になり、データ圧縮処理が高速化される。
図8は、32ビットCPUの転送単位に合わせて、所定長を4バイトとした場合のデータ圧縮処理の例を示している。この例では、図2の場合と同様に、スペースを含む各文字が圧縮開始時の辞書615に登録されており、圧縮中に検出された文字又は文字列を1文字伸張した文字列が辞書615に追加登録される。N[X]は、辞書615に登録された文字X又は文字列Xに対応する識別情報を表す。
図8の入力文字列のうち、アドレス1からアドレス24までの文字列“A good beginning makes a”は、非繰り返しデータ列に対応する。このため、この文字列は、非一致長24と対応する識別情報列との組み合わせである、圧縮データ{24,N[A]N[ ]N[g]N[o]N[o]・・・N[in]N[g]・・・N[a]}に置き換えられる。
このとき、検出された文字又は文字列とその直前の文字とからなる文字列が辞書615に追加登録される。これにより、入力文字列中の次の文字列が辞書615に追加登録され、それ以降に出現する同じ文字列の符号化に使用される。
“A ”,“ g”,“go”,“oo”,“od”,“d ”,“ b”,
“be”,“eg”,“gi”,“in”,“nn”,“nin”,“ng”
アドレス11からアドレス12までの文字列“in”は、アドレス12の文字“n”が符号化された時点で、新たな文字列として辞書615に登録される。そして、アドレス14からアドレス15までの文字列“in”は、識別情報N[“in”]に置き換えられ、文字列“in”とその直前の文字“n”とからなる文字列“nin”が、新たな文字列として辞書に登録される。
アドレス25からアドレス30までの6バイトの文字列“ good ”は、4バイト以上の繰り返しデータ列に対応するため、一致長6と一致位置23との組み合わせである、圧縮データ{6,23}に置き換えられる。
アドレス31からアドレス37までの文字列“ending.”は、非繰り返しデータ列に対応するため、非一致長7と対応する識別情報列との組み合わせである、圧縮データ{3,N[e]N[n]N[d]N[in]N[g]N[.]}に置き換えられる。このとき、アドレス34からアドレス35までの文字列“in”は、追加登録された識別情報N[“in”]に置き換えられる。
図2のデータ圧縮処理では、アドレス34からアドレス36までの文字列“ing”が繰り返しデータ列として扱われているが、図8のデータ圧縮処理では、4バイトよりも短いため、非繰り返しデータ列として扱われる。
図9は、図3のデータ復元装置302の具体例を示している。図9のデータ復元装置302は、復元部321、復元部322、記憶部323、出力部324、入力バッファ901、及び出力バッファ902を含む。復元部321は、復号部911及び複写部912を含み、復元部322は、復号部913及び探索部914を含む。データ復元装置302は、例えば、コンピュータであってもよい。
入力バッファ901は、入力される圧縮データ列を記憶し、出力バッファ902は、復元済みのデータ列を記憶し、記憶部323は、データ又はデータ列と識別情報との対応関係を表す辞書915を記憶する。出力部324は、出力バッファ902が記憶する復元済みのデータ列を出力する。
復元部321の復号部911は、圧縮データ列に含まれる繰り返しデータ列の圧縮データを復号して、一致長と一致位置とを復元する。複写部912は、復元済みのデータ列中の一致位置から一致長に対応するデータ列を複写して、繰り返しデータ列を生成し、出力バッファ902に格納する。
復元部322の復号部913は、圧縮データ列に含まれる非繰り返しデータ列の圧縮データを復号して、非一致長と識別情報とを復元する。探索部914は、辞書915を探索して、復号部913が復元した識別情報に対応するデータ又はデータ列を取得し、出力バッファ902に格納する。また、探索部914は、データ圧縮装置301と同じ登録規則に従って、取得したデータ又はデータ列を含む、より長いデータ列を辞書915に追加登録する。
図10は、図9のデータ復元装置302が行うデータ復元処理の具体例を示すフローチャートである。まず、復号部911は、圧縮データ列に含まれる復号対象の圧縮データが繰り返しデータ列の圧縮データであるか否かをチェックする(ステップ1001)。
復号対象の圧縮データが非繰り返しデータ列の圧縮データである場合(ステップ1001,NO)、復号部913は、その圧縮データを復号して、非一致長を復元し(ステップ1005)、識別情報を復元する(ステップ1006)。
次に、探索部914は、辞書915から、復号部913が復元した識別情報に対応するデータ又はデータ列を取得し(ステップ1007)、出力バッファ902に格納する。出力部324は、出力バッファ902に格納されたデータ又はデータ列を出力する。
次に、探索部914は、取得したデータ又はデータ列を含む、より長いデータ列に新たな識別情報を割り当てて、辞書915に追加登録する(ステップ1008)。追加登録されるデータ列は、取得されたデータ又はデータ列と、その直前の1つ以上のデータとからなるデータ列であってもよい。データ圧縮処理において符号化されたデータ又はデータ列に基づくデータ列を辞書615に追加登録する処理と同様にして、復元されたデータ又はデータ列に基づくデータ列を辞書915に追加登録することで、辞書615と辞書915との同期を取ることができる。
次に、復号部913は、非一致長に対応するデータ列の生成が終了したか否かをチェックし(ステップ1009)、生成したデータ列の長さが非一致長よりも短い場合(ステップ1009,NO)、ステップ1006以降の処理を繰り返す。そして、生成したデータ列の長さが非一致長に達した場合(ステップ1009,YES)、復号部911は、圧縮データ列の復号が終了したか否かをチェックする(ステップ1004)。復号されていない圧縮データが残っている場合(ステップ1004,NO)、復号部911は、次の圧縮データについて、ステップ1001以降の処理を繰り返す。
一方、復号対象の圧縮データが繰り返しデータ列の圧縮データである場合(ステップ1001,YES)、復号部911は、圧縮データを復号して、一致長と一致位置とを復元する(ステップ1002)。そして、複写部912は、出力バッファ902に格納されたデータ列中の一致位置から一致長に対応するデータ列を複写して、繰り返しデータ列を生成し(ステップ1003)、出力バッファ902に格納する。出力部324は、出力バッファ902に格納された繰り返しデータ列を出力する。そして、復号部911は、ステップ1004以降の処理を繰り返す。
ステップ1004において、圧縮データ列の復号が終了した場合(ステップ1004,YES)、データ復元装置302は、処理を終了する。
ところで、図7のステップ711において辞書615に追加登録されるデータ列の個数を制限しない場合、辞書615が大きなメモリ領域を占有するとともに、識別情報のビット数が増加して圧縮データの符号量も増加する。そこで、追加登録されるデータ列の個数を適切に制限することが望ましい。
図11は、辞書615のデータ列の個数を制限するデータ圧縮処理の具体例を示すフローチャートである。このデータ圧縮処理では、圧縮開始時の辞書615にはデータが登録されておらず、圧縮対象データ列から検出された非繰り返しデータ列に含まれるデータ及びデータ列を辞書615に登録することで、辞書615が生成される。
図11のステップ1101〜ステップ1104、ステップ1114、及びステップ1115の処理は、図7のステップ701〜ステップ704、ステップ713、及びステップ714の処理と同様である。
非一致長n_lenが0である場合(ステップ1104,YES)、探索部611は、一致長lenを記憶部313に格納し(ステップ1105)、一致位置adrを記憶部313に格納する(ステップ1106)。
一方、非一致長n_lenが0でない場合(ステップ1104,NO)、探索部611は、非一致長n_lenを記憶部313に格納する(ステップ1111)。また、探索部611は、符号化位置よりも前の長さn_lenのデータ列を非繰り返しデータ列として扱い、その非繰り返しデータ列を記憶部313に格納する(ステップ1112)。
そして、探索部611は、記憶部313に格納されている1つ又は複数の非繰り返しデータ列に含まれる各データ列の個数を求め、求めた個数を各データ列の出現頻度として記憶部313に格納する(ステップ1113)。このとき、探索部611は、非繰り返しデータ列に含まれるデータ列のうち、ステップ1102で繰り返しデータ列の探索に用いた所定長よりも短いデータ列について、出現頻度を求める。
次に、探索部611は、符号化位置を1だけインクリメントして、符号化位置が圧縮対象データ列を超えたか否かをチェックする(ステップ1107)。符号化位置が圧縮対象データ列内にある場合(ステップ1107,NO)、探索部611は、ステップ1101以降の処理を繰り返す。
ステップ1115において、符号化位置が圧縮対象データ列を超えた場合(ステップ1115,YES)、探索部611は、ステップ1111〜ステップ1113と同様の処理を行う(ステップ1116〜ステップ1118)。そして、データ圧縮装置301は、ステップ1108以降の処理を行う。
ステップ1107において、符号化位置が圧縮対象データ列を超えた場合(ステップ1107,YES)、探索部613は、記憶部313に格納されている非繰り返しデータ列からデータ又はデータ列を選択して、辞書615に登録する(ステップ1108)。
圧縮対象データ列から複数の非繰り返しデータ列が検出された場合、ステップ1113の処理が繰り返される。そして、ステップ1112又はステップ1117において最後の非繰り返しデータ列が記憶部313に格納されたとき、ステップ1113又はステップ1118において、すべての非繰り返しデータ列に対する各データ列の最終的な出現頻度が求められる。
そこで、探索部613は、記憶部313に格納されている各データ列の最終的な出現頻度に基づき、所定数のデータ列を選択して、辞書615に登録する。例えば、探索部613は、最初に、記憶部313に格納されているすべての非繰り返しデータ列に含まれる1バイトの各データを選択して、辞書615に登録する。次に、探索部613は、すべての非繰り返しデータ列に含まれる所定長よりも短いデータ列のうち、出現頻度の高いものから順に所定数のデータ列を選択して、辞書615に登録する。
次に、符号化部614は、辞書615を符号化し(ステップ1109)、出力部314は、符号化された辞書615を出力する。次に、データ圧縮装置301は、記憶部313に格納されている一致長len、一致位置adr、非一致長n_len、及び非繰り返しデータ列を符号化する(ステップ1110)。
このとき、符号化部612は、各繰り返しデータ列の一致長len及び一致位置adrを符号化する。また、探索部613は、各非繰り返しデータ列の先頭から、辞書615に登録されたデータ又はデータ列を探索し、検出したデータ又はデータ列に対応する識別情報を辞書615から取得する。符号化部614は、各非繰り返しデータ列の非一致長n_lenと識別情報とを符号化する。そして、出力部314は、各繰り返しデータ列の一致長len及び一致位置adrを表す符号と、各非繰り返しデータ列の非一致長n_len及び識別情報を表す符号とを出力する。
図11のデータ圧縮処理では、圧縮対象データ列から検出されたすべての非繰り返しデータ列に対して各データ列の出現頻度を求めているが、一部の非繰り返しデータ列に対して各データ列の出現頻度を求めてもよい。例えば、圧縮対象データ列を一定サイズのブロックに分割し、ブロック毎に各データ列の出現頻度を求めて、辞書615に登録するデータ又はデータ列を選択してもよい。
また、圧縮対象データ列の先頭の所定サイズのデータ列から検出された非繰り返しデータ列に対して各データ列の出現頻度を求めて、辞書615に登録するデータ又はデータ列を選択してもよい。この場合、所定サイズのデータ列に基づいて生成された辞書615は、その後更新することなく、それより後のデータ列に対しても適用される。所定サイズは、例えば、数キロバイト程度であってもよい。
図12は、所定長を4バイトとした場合の辞書615のデータ列の個数を制限するデータ圧縮処理の例を示している。この例では、辞書615の識別情報を4ビット符号に変換するため、識別情報の個数を16(2^4)個に制限している。したがって、最大で16個のデータ又はデータ列を辞書615に登録することができる。
図12の入力文字列のうち、アドレス1からアドレス24までの文字列“A good beginning makes a”、及び、アドレス31からアドレス37までの文字列“ending.”は、非繰り返しデータ列に対応する。一方、アドレス25からアドレス30までの6バイトの文字列“ good ”は、4バイト以上の繰り返しデータ列に対応する。
そこで、まず、非一致長24と文字列“A good beginning makes a”とが記憶部313に格納される。次に、“ good ”の一致長6及び一致位置23が記憶部313に格納され、続いて、非一致長7と文字列“ending.”とが記憶部313に格納される。
次に、記憶部313に格納された2つの非繰り返しデータ列に含まれる1バイトの各文字が選択されて、辞書615に登録される。これにより、次の14個の文字が識別情報とともに辞書615に登録される。
“a”,“b”,“d”,“e”,“g”,“i”,“k”,
“m”,“n”,“o”,“s”,“A”,“ ”,“.”
“a”、“b”、“d”、“e”、“g”、“i”、及び“k”の識別情報は、それぞれ、0、1、2、3、4、5、及び6である。また、“m”、“n”、“o”、“s”、“A”、“ ”、及び“.”の識別情報は、それぞれ、7、8、9、10、11、12、及び13である。
次に、2つの非繰り返しデータ列に含まれる2バイト及び3バイトの各文字列の出現頻度に基づき、出現頻度の高いものから順に残りの個数の文字列が選択されて、識別情報とともに辞書615に登録される。辞書615には最大で16個の文字又は文字列を登録することができ、既に14個の文字が登録されているため、残りの個数は2個である。
“in”、“ing”、“ng”、及び“ a”の出現頻度は、それぞれ、3、2、2、及び1であるため、出現頻度の高いものから順に2個の文字列“in”及び“ing”が選択されて、辞書615に登録される。“in”及び“ing”の識別情報は、それぞれ、14及び15である。
0〜15の識別情報に対応する符号は、16進数0x0〜0xFで表され、“a”、“b”、“d”、“e”、“g”、“i”、“k”、及び“m”の符号は、それぞれ、0x0、0x1、0x2、0x3、0x4、0x5、0x6、及び0x7となる。また、“n”、“o”、“s”、“A”、“ ”、“.”、“in”、及び“ing”の符号は、それぞれ、0x8、0x9、0xA、0xB、0xC、0xD、0xE、及び0xFとなる。
こうして生成された辞書615に従って、“A good beginning makes a”は、非一致長24と対応する識別情報列(符号列)との組み合わせである、圧縮データ{24,BC4992C134E8FC7063AC0}に置き換えられる。
次に、“ good ”は、一致長6と一致位置23との組み合わせである、圧縮データ{6,23}に置き換えられる。そして、“ending.”は、辞書615に従って、非一致長7と対応する識別情報列(符号列)との組み合わせである、圧縮データ{3,382FD}に置き換えられる。
辞書615の識別情報として1バイト符号を用いる場合、図13に示すように、識別情報の個数は256(2^8)個になる。この場合、最大で256個のデータ列を辞書615に登録することができる。例えば、複数の非繰り返しデータ列に含まれるすべての1バイトのデータを登録した後、所定長よりも短いデータ列のうち出現頻度の高いものから順に残りの個数のデータ列を登録してもよい。
また、辞書615の識別情報として1バイト符号と2バイト符号とを併用する場合、図14に示すように、識別情報の個数は32896(2^7+2^15=128+32768)個になる。この場合、最大で32896個のデータ列を辞書615に登録することができる。例えば、複数の非繰り返しデータ列に含まれるすべての1バイトのデータを登録した後、所定長よりも短いデータ列のうち出現頻度の高いものから順に残りの個数のデータ列を登録してもよい。
このように、辞書615に登録可能なデータ列の個数は、識別情報の符号のビット数に応じて変化する。図13のような1バイト符号の識別情報は、圧縮対象データ列に含まれるデータ列の種類が比較的少ない場合に有効である。一方、図14のような1バイト符号及び2バイト符号の識別情報は、圧縮対象データ列に含まれるデータ列の種類が比較的多い場合に有効である。
圧縮対象データ列に含まれるデータ又はデータ列を辞書615に登録する代わりに、圧縮対象データ列と類似する別のデータ列に含まれるデータ又はデータ列を辞書615に登録してもよい。
この場合、データ圧縮装置301は、圧縮対象データ列の代わりに別のデータ列を用いて、図11のステップ1101〜ステップ1108及びステップ1111〜ステップ1118と同様の処理を行うことで、辞書615を生成することができる。その後、データ圧縮装置301は、生成した辞書615を用いて、圧縮対象データ列に対して図11のデータ圧縮処理を行う。ただし、ステップ1108、ステップ1113、及びステップ1118の処理は省略される。
図15は、図11のデータ圧縮処理により生成された圧縮データ列から圧縮対象データ列を復元するデータ復元処理の具体例を示すフローチャートである。まず、復号部913は、符号化された辞書615を復号して辞書615を復元し、辞書915として記憶部323に格納する(ステップ1501)。データ圧縮装置301から出力される辞書615を辞書915として用いることで、辞書615と辞書915との同期を取ることができる。
次のステップ1502〜ステップ1505の処理は、図10のステップ1001〜ステップ1004の処理と同様である。
復号対象の圧縮データが非繰り返しデータ列の圧縮データである場合(ステップ1502,NO)、復号部913は、その圧縮データを復号して、非一致長を復元し(ステップ1506)、識別情報を復元する(ステップ1507)。
次に、探索部914は、辞書915から、復号部913が復元した識別情報に対応するデータ又はデータ列を取得し(ステップ1508)、出力バッファ902に格納する。出力部324は、出力バッファ902に格納されたデータ又はデータ列を出力する。
次に、復号部913は、非一致長に対応するデータ列の生成が終了したか否かをチェックし(ステップ1509)、生成したデータ列の長さが非一致長よりも短い場合(ステップ1509,NO)、ステップ1507以降の処理を繰り返す。そして、生成したデータ列の長さが非一致長に達した場合(ステップ1509,YES)、データ復元装置302は、ステップ1505以降の処理を繰り返す。
ステップ1505において、圧縮データ列の復号が終了した場合(ステップ1505,YES)、データ復元装置302は、処理を終了する。
図3及び図6のデータ圧縮装置301と図3及び図9のデータ復元装置302の構成は一例に過ぎず、データ圧縮装置及びデータ復元装置の用途や条件に応じて、一部の構成要素を省略又は変更してもよい。
図4、図5、図7、図10、図11、及び図15のフローチャートは一例に過ぎず、データ圧縮装置及びデータ復元装置の構成や条件に応じて一部の処理を省略又は変更してもよい。例えば、処理開始時の辞書615及び辞書915を更新せずにそのまま用いて、データ圧縮処理及びデータ復元処理を行うことも可能である。この場合、図7のステップ711及びステップ718の処理と、図10のステップ1008の処理と、図11のステップ1108、ステップ1113、及びステップ1118の処理とを省略することができる。
図4、図7、及び図11のデータ圧縮処理は、LZ77符号化に基づくデータ圧縮処理に限らず、圧縮対象データ列中に繰り返し出現するデータ列を符号化する他のデータ圧縮処理に対しても適用することができる。同様に、図5、図10、及び図15のデータ復元処理は、LZ77符号化に基づくデータ復元処理に限らず、他のデータ復元処理に対しても適用することができる。
図8及び図12の入力文字列は圧縮対象データ列の一例に過ぎず、圧縮対象データ列は、音声データ、画像データ等の他のデータ列であっても構わない。
図3及び図6のデータ圧縮装置301と図3及び図9のデータ復元装置302は、例えば、図16に示すような情報処理装置(コンピュータ)を用いて実現可能である。
図16の情報処理装置は、CPU1601、メモリ1602、入力装置1603、出力装置1604、補助記憶装置1605、媒体駆動装置1606、及びネットワーク接続装置1607を備える。これらの構成要素はバス1608により互いに接続されている。
メモリ1602は、例えば、Read Only Memory(ROM)、Random Access Memory(RAM)、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを格納する。情報処理装置がデータ圧縮装置301である場合、メモリ1602は、図3及び図6の記憶部313及び入力バッファ601として用いることができる。情報処理装置がデータ復元装置302である場合、メモリ1602は、図3及び図9の記憶部323、入力バッファ901、及び出力バッファ902として用いることができる。
CPU1601(プロセッサ)は、例えば、メモリ1602を利用してデータ圧縮プログラムを実行することにより、図3及び図6の圧縮部311、圧縮部312、探索部611、符号化部612、探索部613、及び符号化部614として動作する。また、CPU1601は、例えば、メモリ1602を利用してデータ復元プログラムを実行することにより、図3及び図9の復元部321、復元部322、復号部911、複写部912、復号部913、及び探索部914として動作する。
入力装置1603は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示や情報の入力に用いられる。出力装置1604は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問い合わせ又は指示、及び処理結果の出力に用いられる。情報処理装置がデータ復元装置302である場合、出力装置1604は、図3及び図9の出力部324として用いることができる。
補助記憶装置1605は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置1605は、ハードディスクドライブ又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置1605にプログラム及びデータを格納しておき、それらをメモリ1602にロードして使用することができる。
媒体駆動装置1606は、可搬型記録媒体1609を駆動し、その記録内容にアクセスする。可搬型記録媒体1609は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体1609は、Compact Disk Read Only Memory(CD−ROM)、Digital Versatile Disk(DVD)、Universal Serial Bus(USB)メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体1609にプログラム及びデータを格納しておき、それらをメモリ1602にロードして使用することができる。
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ1602、補助記憶装置1605、又は可搬型記録媒体1609のような、物理的な(非一時的な)記録媒体である。
ネットワーク接続装置1607は、Local Area Network、Wide Area Network等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェースである。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置1607を介して受け取り、それらをメモリ1602にロードして使用することができる。情報処理装置がデータ圧縮装置301である場合、ネットワーク接続装置1607は、図3及び図6の出力部314として用いることができる。情報処理装置がデータ復元装置302である場合、ネットワーク接続装置1607は、図3及び図9の出力部324として用いることができる。
情報処理装置がデータ圧縮装置301である場合、CPU1601は、圧縮対象データ列から生成した圧縮データ列を補助記憶装置1605へ出力することができ、補助記憶装置1605は、その圧縮データ列を格納することができる。CPU1601は、圧縮データ列を媒体駆動装置1606へ出力することもでき、媒体駆動装置1606は、その圧縮データ列を可搬型記録媒体1609に記録することができる。CPU1601は、圧縮データ列をネットワーク接続装置1607へ出力することもでき、ネットワーク接続装置1607は、その圧縮データ列を通信ネットワーク経由でデータ復元装置302へ送信することができる。
情報処理装置がデータ復元装置302である場合、CPU1601は、圧縮データ列から復元した圧縮対象データ列を補助記憶装置1605へ出力することができ、補助記憶装置1605は、その圧縮対象データ列を格納することができる。CPU1601は、圧縮対象データ列を媒体駆動装置1606へ出力することもでき、媒体駆動装置1606は、その圧縮対象データ列を可搬型記録媒体1609に記録することができる。CPU1601は、圧縮対象データ列をネットワーク接続装置1607へ出力することもでき、ネットワーク接続装置1607は、その圧縮対象データ列を通信ネットワーク経由で外部の装置へ送信することができる。
なお、情報処理装置が図16のすべての構成要素を含む必要はなく、用途や条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザからの指示や情報を入力する必要がない場合は、入力装置1603を省略してもよい。オペレータ又はユーザへの問い合わせ又は指示、及び処理結果を出力する必要がない場合は、出力装置1604を省略してもよい。また、可搬型記録媒体1609又は通信ネットワークを利用しない場合は、媒体駆動装置1606又はネットワーク接続装置1607を省略してもよい。
情報処理装置がスマートフォンのような通話機能を有する携帯端末である場合、マイク及びスピーカのような通話用の装置を含んでいてもよく、カメラのような撮像装置を含んでいてもよい。
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
図3乃至図16を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
(付記1)
圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを符号化することで、前記第2のデータ列を表す第1の圧縮データを生成し、
前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第2のデータ列を除く部分に含まれる前記第3のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第3のデータ列を表す第2の圧縮データを生成し、
前記第1の圧縮データと前記第2の圧縮データとを含む圧縮データ列を出力する、
処理をコンピュータに実行させるデータ圧縮プログラム。
(付記2)
前記第3のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第4のデータ列と一致することを特徴とする付記1記載のデータ圧縮プログラム。
(付記3)
前記所定長は、前記コンピュータに含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする付記1又は2記載のデータ圧縮プログラム。
(付記4)
前記コンピュータは、前記第1の圧縮データ及び前記第2の圧縮データを生成する前に、前記圧縮対象データ列内の非繰り返しデータ列に含まれる1バイトのデータと識別情報との第1の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第2の対応関係を前記記憶部に格納し、
前記第2の対応関係は、前記第3のデータ列と前記識別情報との前記対応関係を含み、
前記コンピュータは、前記非繰り返しデータ列に含まれる前記1バイトのデータを前記第1の対応関係が示す前記識別情報に置き換え、前記第1の対応関係が示す前記識別情報を符号化することで、前記1バイトのデータを表す第3の圧縮データを生成し、前記第1の圧縮データと前記第2の圧縮データと前記第3の圧縮データとを含む前記圧縮データ列を出力することを特徴とする付記1乃至3のいずれか1項に記載のデータ圧縮プログラム。
(付記5)
圧縮対象データ列を圧縮した圧縮データ列に含まれる第1の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを復元し、
前記長さ情報と前記位置情報とに基づいて前記第2のデータ列を生成し、
前記圧縮データ列に含まれる第2の圧縮データを復号して、識別情報を復元し、
前記所定長よりも短い第3のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第3のデータ列に置き換え、
前記第2のデータ列を含むとともに、前記第2のデータ列を除く部分に前記第3のデータ列を含む前記圧縮対象データ列を出力する、
処理をコンピュータに実行させるデータ復元プログラム。
(付記6)
圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを符号化することで、前記第2のデータ列を表す第1の圧縮データを生成する第1の圧縮部と、
前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部と、
前記記憶部を参照して、前記圧縮対象データ列のうち前記第2のデータ列を除く部分に含まれる前記第3のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第3のデータ列を表す第2の圧縮データを生成する第2の圧縮部と、
前記第1の圧縮データと前記第2の圧縮データとを含む圧縮データ列を出力する出力部と、
を備えることを特徴とするデータ圧縮装置。
(付記7)
前記第3のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第4のデータ列と一致することを特徴とする付記6記載のデータ圧縮装置。
(付記8)
前記所定長は、前記データ圧縮装置に含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする付記6又は7記載のデータ圧縮装置。
(付記9)
前記第2の圧縮部は、前記圧縮対象データ列内の非繰り返しデータ列に含まれる1バイトのデータと識別情報との第1の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第2の対応関係を前記記憶部に格納し、
前記第2の対応関係は、前記第3のデータ列と前記識別情報との前記対応関係を含み、
前記第2の圧縮部は、前記非繰り返しデータ列に含まれる前記1バイトのデータを前記第1の対応関係が示す前記識別情報に置き換え、前記第1の対応関係が示す前記識別情報を符号化することで、前記1バイトのデータを表す第3の圧縮データを生成し、
前記出力部は、前記第1の圧縮データと前記第2の圧縮データと前記第3の圧縮データとを含む前記圧縮データ列を出力することを特徴とする付記6乃至8のいずれか1項に記載のデータ圧縮装置。
(付記10)
圧縮対象データ列を圧縮した圧縮データ列に含まれる第1の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを復元し、前記長さ情報と前記位置情報とに基づいて前記第2のデータ列を生成する第1の復元部と、
前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部と、
前記圧縮データ列に含まれる第2の圧縮データを復号して、前記識別情報を復元し、前記記憶部を参照して、前記識別情報を前記第3のデータ列に置き換える第2の復元部と、
前記第2のデータ列を含むとともに、前記第2のデータ列を除く部分に前記第3のデータ列を含む前記圧縮対象データ列を出力する出力部と、
を備えることを特徴とするデータ復元装置。
(付記11)
コンピュータが、
圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを符号化することで、前記第2のデータ列を表す第1の圧縮データを生成し、
前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第2のデータ列を除く部分に含まれる前記第3のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第3のデータ列を表す第2の圧縮データを生成し、
前記第1の圧縮データと前記第2の圧縮データとを含む圧縮データ列を出力する、
ことを特徴とするデータ圧縮方法。
(付記12)
前記第3のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第4のデータ列と一致することを特徴とする付記11記載のデータ圧縮方法。
(付記13)
前記所定長は、前記コンピュータに含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする付記11又は12記載のデータ圧縮方法。
(付記14)
前記コンピュータは、前記第1の圧縮データ及び前記第2の圧縮データを生成する前に、前記圧縮対象データ列内の非繰り返しデータ列に含まれる1バイトのデータと識別情報との第1の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第2の対応関係を前記記憶部に格納し、
前記第2の対応関係は、前記第3のデータ列と前記識別情報との前記対応関係を含み、
前記コンピュータは、前記非繰り返しデータ列に含まれる前記1バイトのデータを前記第1の対応関係が示す前記識別情報に置き換え、前記第1の対応関係が示す前記識別情報を符号化することで、前記1バイトのデータを表す第3の圧縮データを生成し、前記第1の圧縮データと前記第2の圧縮データと前記第3の圧縮データとを含む前記圧縮データ列を出力することを特徴とする付記11乃至13のいずれか1項に記載のデータ圧縮方法。
(付記15)
コンピュータが、
圧縮対象データ列を圧縮した圧縮データ列に含まれる第1の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを復元し、
前記長さ情報と前記位置情報とに基づいて前記第2のデータ列を生成し、
前記圧縮データ列に含まれる第2の圧縮データを復号して、識別情報を復元し、
前記所定長よりも短い第3のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第3のデータ列に置き換え、
前記第2のデータ列を含むとともに、前記第2のデータ列を除く部分に前記第3のデータ列を含む前記圧縮対象データ列を出力する、
ことを特徴とするデータ復元方法。
301 データ圧縮装置
302 データ復元装置
311、312 圧縮部
313、323 記憶部
314、324 出力部
321、322 復元部
601、901 入力バッファ
611、613、914 探索部
612、614 符号化部
615、915 辞書
902 出力バッファ
911、913 復号部
912 複写部
1601 CPU
1602 メモリ
1603 入力装置
1604 出力装置
1605 補助記憶装置
1606 媒体駆動装置
1607 ネットワーク接続装置
1608 バス
1609 可搬型記録媒体

Claims (9)

  1. 圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを符号化することで、前記第2のデータ列を表す第1の圧縮データを生成し、
    前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第2のデータ列を除く部分に含まれる前記第3のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第3のデータ列を表す第2の圧縮データを生成し、
    前記第1の圧縮データと前記第2の圧縮データとを含む圧縮データ列を出力する、
    処理をコンピュータに実行させるデータ圧縮プログラム。
  2. 前記第3のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第4のデータ列と一致することを特徴とする請求項1記載のデータ圧縮プログラム。
  3. 前記所定長は、前記コンピュータに含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする請求項1又は2記載のデータ圧縮プログラム。
  4. 前記コンピュータは、前記第1の圧縮データ及び前記第2の圧縮データを生成する前に、前記圧縮対象データ列内の非繰り返しデータ列に含まれる1バイトのデータと識別情報との第1の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第2の対応関係を前記記憶部に格納し、
    前記第2の対応関係は、前記第3のデータ列と前記識別情報との前記対応関係を含み、
    前記コンピュータは、前記非繰り返しデータ列に含まれる前記1バイトのデータを前記第1の対応関係が示す前記識別情報に置き換え、前記第1の対応関係が示す前記識別情報を符号化することで、前記1バイトのデータを表す第3の圧縮データを生成し、前記第1の圧縮データと前記第2の圧縮データと前記第3の圧縮データとを含む前記圧縮データ列を出力することを特徴とする請求項1乃至3のいずれか1項に記載のデータ圧縮プログラム。
  5. 圧縮対象データ列を圧縮した圧縮データ列に含まれる第1の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを復元し、
    前記長さ情報と前記位置情報とに基づいて前記第2のデータ列を生成し、
    前記圧縮データ列に含まれる第2の圧縮データを復号して、識別情報を復元し、
    前記所定長よりも短い第3のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第3のデータ列に置き換え、
    前記第2のデータ列を含むとともに、前記第2のデータ列を除く部分に前記第3のデータ列を含む前記圧縮対象データ列を出力する、
    処理をコンピュータに実行させるデータ復元プログラム。
  6. 圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを符号化することで、前記第2のデータ列を表す第1の圧縮データを生成する第1の圧縮部と、
    前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部と、
    前記記憶部を参照して、前記圧縮対象データ列のうち前記第2のデータ列を除く部分に含まれる前記第3のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第3のデータ列を表す第2の圧縮データを生成する第2の圧縮部と、
    前記第1の圧縮データと前記第2の圧縮データとを含む圧縮データ列を出力する出力部と、
    を備えることを特徴とするデータ圧縮装置。
  7. 圧縮対象データ列を圧縮した圧縮データ列に含まれる第1の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを復元し、前記長さ情報と前記位置情報とに基づいて前記第2のデータ列を生成する第1の復元部と、
    前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部と、
    前記圧縮データ列に含まれる第2の圧縮データを復号して、前記識別情報を復元し、前記記憶部を参照して、前記識別情報を前記第3のデータ列に置き換える第2の復元部と、
    前記第2のデータ列を含むとともに、前記第2のデータ列を除く部分に前記第3のデータ列を含む前記圧縮対象データ列を出力する出力部と、
    を備えることを特徴とするデータ復元装置。
  8. コンピュータが、
    圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを符号化することで、前記第2のデータ列を表す第1の圧縮データを生成し、
    前記所定長よりも短い第3のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第2のデータ列を除く部分に含まれる前記第3のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第3のデータ列を表す第2の圧縮データを生成し、
    前記第1の圧縮データと前記第2の圧縮データとを含む圧縮データ列を出力する、
    ことを特徴とするデータ圧縮方法。
  9. コンピュータが、
    圧縮対象データ列を圧縮した圧縮データ列に含まれる第1の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第2のデータ列と一致する第1のデータ列の長さを表す長さ情報と、前記第1のデータ列の位置を表す位置情報とを復元し、
    前記長さ情報と前記位置情報とに基づいて前記第2のデータ列を生成し、
    前記圧縮データ列に含まれる第2の圧縮データを復号して、識別情報を復元し、
    前記所定長よりも短い第3のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第3のデータ列に置き換え、
    前記第2のデータ列を含むとともに、前記第2のデータ列を除く部分に前記第3のデータ列を含む前記圧縮対象データ列を出力する、
    ことを特徴とするデータ復元方法。
JP2015008947A 2015-01-20 2015-01-20 データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置 Pending JP2016134808A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015008947A JP2016134808A (ja) 2015-01-20 2015-01-20 データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015008947A JP2016134808A (ja) 2015-01-20 2015-01-20 データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置

Publications (1)

Publication Number Publication Date
JP2016134808A true JP2016134808A (ja) 2016-07-25

Family

ID=56464556

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015008947A Pending JP2016134808A (ja) 2015-01-20 2015-01-20 データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置

Country Status (1)

Country Link
JP (1) JP2016134808A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108233942A (zh) * 2018-01-08 2018-06-29 武汉斗鱼网络科技有限公司 一种用于数据存储的方法、装置及计算机设备
CN117278054A (zh) * 2023-11-21 2023-12-22 湖北华中电力科技开发有限责任公司 一种智慧电网监控数据存储方法及系统

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108233942A (zh) * 2018-01-08 2018-06-29 武汉斗鱼网络科技有限公司 一种用于数据存储的方法、装置及计算机设备
CN108233942B (zh) * 2018-01-08 2022-02-22 武汉斗鱼网络科技有限公司 一种用于数据存储的方法、装置及计算机设备
CN117278054A (zh) * 2023-11-21 2023-12-22 湖北华中电力科技开发有限责任公司 一种智慧电网监控数据存储方法及系统
CN117278054B (zh) * 2023-11-21 2024-02-02 湖北华中电力科技开发有限责任公司 一种智慧电网监控数据存储方法及系统

Similar Documents

Publication Publication Date Title
US7375660B1 (en) Huffman decoding method
JP2017073094A (ja) 符号化プログラム、符号化装置、符号化方法、復号化プログラム、復号化装置および復号化方法
US9344114B1 (en) Compressed caching in a virtual memory system
US9965448B2 (en) Encoding method and information processing device
US9479195B2 (en) Non-transitory computer-readable recording medium, compression method, decompression method, compression device, and decompression device
KR20170040343A (ko) 적응형 레이트 압축 해시 프로세싱 디바이스
US9391636B2 (en) Method and system
JP2016134808A (ja) データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置
WO2014030189A1 (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
JP6990881B2 (ja) エントロピー・エンコーディングのシステム・レベル・テスト
US11309909B2 (en) Compression device, decompression device, and method
US20150248432A1 (en) Method and system
JP2000201080A (ja) 付加コ―ドを用いたデ―タ圧縮/復元装置および方法
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
JP6135788B2 (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
US8854235B1 (en) Decompression circuit and associated compression method and decompression method
US10915559B2 (en) Data generation method, information processing device, and recording medium
JP2023043618A (ja) 圧縮回路、圧縮方法、及びストレージシステム
US10803243B2 (en) Method, device, and medium for restoring text using index which associates coded text and positions thereof in text data
JP6658908B2 (ja) 出力プログラム、出力方法および出力システム
JP2015159352A (ja) データ圧縮装置、データ圧縮方法、及びプログラム
US20240106459A1 (en) Compression device and compression method
JP2011041102A (ja) 圧縮暗号化装置、復号伸長装置、それらの方法及びプログラム
US10447295B2 (en) Coding method, coding device, decoding method, and decoding device
JP2004013680A (ja) 文字コード圧縮・復元装置および同方法