(57)【要約】【課題】繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させる。【解決手段】コンピュータは、圧縮対象データ列に含まれる第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、第１のデータ列の位置を表す位置情報とを符号化することで、第２のデータ列を表す第１の圧縮データを生成する（ステップ４０１）。第１のデータ列は、所定長以上の長さのデータ列である。次に、コンピュータは、所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部を参照して、圧縮対象データ列のうち第２のデータ列を除く部分に含まれる第３のデータ列を識別情報に置き換える（ステップ４０２）。次に、コンピュータは、識別情報を符号化することで、第３のデータ列を表す第２の圧縮データを生成する。そして、コンピュータは、第１の圧縮データと第２の圧縮データとを含む圧縮データ列を出力する（ステップ４０３）。【選択図】図４
2016134808.tif 000002
【特許請求の範囲】
【請求項１】
圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを符号化することで、前記第２のデータ列を表す第１の圧縮データを生成し、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第２のデータ列を除く部分に含まれる前記第３のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第３のデータ列を表す第２の圧縮データを生成し、
前記第１の圧縮データと前記第２の圧縮データとを含む圧縮データ列を出力する、
処理をコンピュータに実行させるデータ圧縮プログラム。
【請求項２】
前記第３のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第４のデータ列と一致することを特徴とする請求項１記載のデータ圧縮プログラム。
【請求項３】
前記所定長は、前記コンピュータに含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする請求項１又は２記載のデータ圧縮プログラム。
【請求項４】
前記コンピュータは、前記第１の圧縮データ及び前記第２の圧縮データを生成する前に、前記圧縮対象データ列内の非繰り返しデータ列に含まれる１バイトのデータと識別情報との第１の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第２の対応関係を前記記憶部に格納し、
前記第２の対応関係は、前記第３のデータ列と前記識別情報との前記対応関係を含み、
前記コンピュータは、前記非繰り返しデータ列に含まれる前記１バイトのデータを前記第１の対応関係が示す前記識別情報に置き換え、前記第１の対応関係が示す前記識別情報を符号化することで、前記１バイトのデータを表す第３の圧縮データを生成し、前記第１の圧縮データと前記第２の圧縮データと前記第３の圧縮データとを含む前記圧縮データ列を出力することを特徴とする請求項１乃至３のいずれか１項に記載のデータ圧縮プログラム。
【請求項５】
圧縮対象データ列を圧縮した圧縮データ列に含まれる第１の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを復元し、
前記長さ情報と前記位置情報とに基づいて前記第２のデータ列を生成し、
前記圧縮データ列に含まれる第２の圧縮データを復号して、識別情報を復元し、
前記所定長よりも短い第３のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第３のデータ列に置き換え、
前記第２のデータ列を含むとともに、前記第２のデータ列を除く部分に前記第３のデータ列を含む前記圧縮対象データ列を出力する、
処理をコンピュータに実行させるデータ復元プログラム。
【請求項６】
圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを符号化することで、前記第２のデータ列を表す第１の圧縮データを生成する第１の圧縮部と、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部と、
前記記憶部を参照して、前記圧縮対象データ列のうち前記第２のデータ列を除く部分に含まれる前記第３のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第３のデータ列を表す第２の圧縮データを生成する第２の圧縮部と、
前記第１の圧縮データと前記第２の圧縮データとを含む圧縮データ列を出力する出力部と、
を備えることを特徴とするデータ圧縮装置。
【請求項７】
圧縮対象データ列を圧縮した圧縮データ列に含まれる第１の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを復元し、前記長さ情報と前記位置情報とに基づいて前記第２のデータ列を生成する第１の復元部と、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部と、
前記圧縮データ列に含まれる第２の圧縮データを復号して、前記識別情報を復元し、前記記憶部を参照して、前記識別情報を前記第３のデータ列に置き換える第２の復元部と、
前記第２のデータ列を含むとともに、前記第２のデータ列を除く部分に前記第３のデータ列を含む前記圧縮対象データ列を出力する出力部と、
を備えることを特徴とするデータ復元装置。
【請求項８】
コンピュータが、
圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを符号化することで、前記第２のデータ列を表す第１の圧縮データを生成し、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第２のデータ列を除く部分に含まれる前記第３のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第３のデータ列を表す第２の圧縮データを生成し、
前記第１の圧縮データと前記第２の圧縮データとを含む圧縮データ列を出力する、
ことを特徴とするデータ圧縮方法。
【請求項９】
コンピュータが、
圧縮対象データ列を圧縮した圧縮データ列に含まれる第１の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを復元し、
前記長さ情報と前記位置情報とに基づいて前記第２のデータ列を生成し、
前記圧縮データ列に含まれる第２の圧縮データを復号して、識別情報を復元し、
前記所定長よりも短い第３のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第３のデータ列に置き換え、
前記第２のデータ列を含むとともに、前記第２のデータ列を除く部分に前記第３のデータ列を含む前記圧縮対象データ列を出力する、
ことを特徴とするデータ復元方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮プログラム、データ復元プログラム、データ圧縮装置、データ復元装置、データ圧縮方法、及びデータ復元方法に関する。
【背景技術】
【０００２】
近年、文字データ、音声データ、画像データ等の様々な種類の電子データがコンピュータにより処理されており、処理されるデータ量も増大している。このような大量のデータを処理する場合、データ中の冗長な部分を省いて圧縮することにより、データを格納する記憶装置の容量を削減したり、データの転送時間を短縮したりすることができる。
【０００３】
従来のデータ圧縮アルゴリズムの１つとして、ＬＺ７７符号化及びＬＺ７８符号化が提案されている。
【０００４】
ＬＺ７７符号化では、圧縮対象データ列中に繰り返し出現するデータ列（繰り返しデータ列）を、過去に出現した同じデータ列の長さ（一致長）と位置（一致位置）との組み合わせに置き換えることで、データ量を削減することができる。一致位置としては、例えば、繰り返しデータ列のアドレスと過去に出現した同じデータ列のアドレスとの差分（相対アドレス）が用いられる。繰り返し出現しない残りのデータ列（非繰り返しデータ列）は、そのデータ列の長さ（非一致長）と非繰り返しデータ列との組み合わせに置き換えられる。
【０００５】
ＬＺ７７符号化により生成された圧縮データ列から圧縮対象データ列を復元する際、過去に出現した同じデータ列の一致位置から一致長分のデータ列をコピーすることで、繰り返しデータ列を復元できる。また、非繰り返しデータ列については、圧縮データ列から非一致長分のデータ列をコピーすることで、元のデータ列を復元できる。
【０００６】
図１は、ＬＺ７７符号化によるデータ圧縮処理の例を示している。図１の入力文字列のうち、アドレス１からアドレス２４までの文字列“Ａ  ｇｏｏｄ  ｂｅｇｉｎｎｉｎｇ  ｍａｋｅｓ  ａ”は、非繰り返しデータ列に対応する。このため、この文字列は、非一致長２４と文字列“Ａ  ｇｏｏｄ  ｂｅｇｉｎｎｉｎｇ  ｍａｋｅｓ  ａ”との組み合わせである、圧縮データ｛２４，“Ａ  ｇｏｏｄ  ｂｅｇｉｎｎｉｎｇ  ｍａｋｅｓ  ａ”｝に置き換えられる。
【０００７】
アドレス２５からアドレス３０までの文字列“  ｇｏｏｄ  ”は、繰り返しデータ列に対応するため、一致長６と一致位置（相対アドレス）２３との組み合わせである、圧縮データ｛６，２３｝に置き換えられる。アドレス３１からアドレス３３までの文字列“ｅｎｄ”は、非繰り返しデータ列に対応するため、非一致長３と文字列“ｅｎｄ”との組み合わせである、圧縮データ｛３，“ｅｎｄ”｝に置き換えられる。
【０００８】
アドレス３４からアドレス３６までの文字列“ｉｎｇ”は、繰り返しデータ列に対応するため、一致長３と一致位置２０との組み合わせである、圧縮データ｛３，２０｝に置き換えられる。アドレス３７の文字列“．”は、非繰り返しデータ列に対応するため、非一致長１と文字列“．”との組み合わせである、圧縮データ｛１，“．”｝に置き換えられる。
【０００９】
一方、ＬＺ７８符号化では、すべてのデータと頻出データ列とに番号を付けて辞書に登録し、圧縮対象データ列に含まれるデータと頻出データ列とを辞書に登録された番号に置き換えることで、データ量を削減することができる。符号化に用いる辞書は、あらかじめ生成された辞書であってもよく、頻出データ列を用いて随時更新される辞書であってもよい。
【００１０】
ＬＺ７８符号化により生成された圧縮データ列から圧縮対象データ列を復元する際、辞書を参照して、圧縮データ列に含まれる番号を、その番号に対応するデータ又はデータ列に置き換えることで、元のデータ又はデータ列を復元できる。圧縮の際に辞書を更新する場合は、復元の際にも同様に、復元した頻出データ列を用いて辞書を更新することで、圧縮の際に用いられた辞書と同期を取ることができる。
【００１１】
図２は、ＬＺ７８符号化によるデータ圧縮処理の例を示している。この例では、スペースを含む各文字が圧縮開始時の辞書に登録されており、圧縮中に検出された文字又は文字列を１文字伸張した文字列を辞書に追加登録することで、辞書が更新される。
【００１２】
図２の入力文字列のうち、“Ａ”、“ｏ”、“ｅ”、“ｎ”、“ｍ”、“ｇ”、“  ”、“ｉ”、“ｋ”、及び“ｂ”の各文字は、圧縮開始時の辞書に登録されているデータに対応する。このため、これらの文字は、検出された時点で、辞書中の番号を表す次のような圧縮データに置き換えられる。
Ｎ［“Ａ”］，Ｎ［“  ”］，Ｎ［“ｇ”］，Ｎ［“ｏ”］，Ｎ［“ｄ”］，
Ｎ［“ｂ”］，Ｎ［“ｅ”］，Ｎ［“ｉ”］，Ｎ［“ｎ”］，Ｎ［“ｍ”］，
Ｎ［“ａ”］，Ｎ［“ｋ”］
【００１３】
このとき、検出された文字とその直前の文字とからなる２文字が辞書に追加登録される。これにより、入力文字列中の次の文字列が辞書に追加登録され、それ以降に出現する同じ文字列の符号化に使用される。
“Ａ  ”，“  ｇ”，“ｇｏ”，“ｏｏ”，“ｏｄ”，“ｄ  ”，“  ｂ”，
“ｂｅ”，“ｅｇ”，“ｇｉ”，“ｉｎ”，“ｎｎ”，“ｎｇ”
【００１４】
さらに、検出された文字列とその直前の文字とからなる、より長い文字列が辞書に追加登録され、それ以降に出現する同じ文字列の符号化に使用される。例えば、入力文字列中に３回出現する文字列“ｉｎ”のうち、最初に出現するアドレス１１からアドレス１２までの文字列“ｉｎ”は、アドレス１２の文字“ｎ”が符号化された時点で、新たな文字列として辞書に登録される。
【００１５】
そして、２回目に出現するアドレス１４からアドレス１５までの文字列“ｉｎ”と、３回目に出現するアドレス３４からアドレス３５までの文字列“ｉｎ”は、辞書中の番号を表す圧縮データＮ［“ｉｎ”］に置き換えられる。また、２回目に出現する文字列“ｉｎ”が符号化された時点で、文字列“ｉｎ”とその直前の文字“ｎ”とからなる文字列“ｎｉｎ”が、新たな文字列として辞書に登録される。
【００１６】
長い文字列及び短い文字列の双方に対して、効率よく圧縮することが可能なデータ符号化装置も知られている（例えば、特許文献１を参照）。最近一致位置リストを用いて一致文字列の繰返しを検出して符号化できるデータ圧縮方法も知られている（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０００−１２４８１０号公報
【特許文献２】国際公開第２００４／０６２１１０号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【００１８】
上述した従来のデータ圧縮処理には、以下のような問題がある。
ＬＺ７７符号化により、繰り返しデータ列から大きく離れた一致位置を示す情報を符号化する場合、相応のビット数が用いられる。このため、圧縮対象データ列に含まれる同じデータ列の数が少なければ、符号化により削減されるデータ量よりも、符号化に用いられるデータ量の方が多くなる。そこで、ＬＺ７７符号化では、短い繰り返しデータ列が非繰り返しデータとして扱われ、達成可能な圧縮率には一定の限界がある。
【００１９】
なお、かかる問題は、圧縮対象データ列が文字列である場合に限らず、圧縮対象データ列が音声データ、画像データ等の他のデータ列である場合においても生ずるものである。
【００２０】
１つの側面において、本発明は、繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させることを目的とする。
【課題を解決するための手段】
【００２１】
１つの案では、データ圧縮プログラムは、以下の処理をコンピュータに実行させる。
（１）コンピュータは、圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、第１のデータ列の位置を表す位置情報とを符号化することで、第２のデータ列を表す第１の圧縮データを生成する。
（２）コンピュータは、所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部を参照して、圧縮対象データ列のうち第２のデータ列を除く部分に含まれる第３のデータ列を識別情報に置き換える。そして、コンピュータは、識別情報を符号化することで、第３のデータ列を表す第２の圧縮データを生成する。
（３）コンピュータは、第１の圧縮データと第２の圧縮データとを含む圧縮データ列を出力する。
【発明の効果】
【００２２】
１つの実施形態によれば、繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させることができる。
【図面の簡単な説明】
【００２３】
【図１】ＬＺ７７符号化によるデータ圧縮処理を示す図である。
【図２】ＬＺ７８符号化によるデータ圧縮処理を示す図である。
【図３】データ圧縮装置及びデータ復元装置の機能的構成図である。
【図４】データ圧縮処理のフローチャートである。
【図５】データ復元処理のフローチャートである。
【図６】データ圧縮装置の具体例を示す機能的構成図である。
【図７】データ圧縮処理の具体例を示すフローチャートである。
【図８】データ圧縮処理を示す図である。
【図９】データ復元装置の具体例を示す機能的構成図である。
【図１０】データ復元処理の具体例を示すフローチャートである。
【図１１】辞書のデータ列の個数を制限するデータ圧縮処理のフローチャートである。
【図１２】辞書のデータ列の個数を制限するデータ圧縮処理を示す図である。
【図１３】１バイト符号の識別情報を示す図である。
【図１４】１バイト符号及び２バイト符号の識別情報を示す図である。
【図１５】辞書のデータ列の個数を制限するデータ復元処理のフローチャートである。
【図１６】情報処理装置の構成図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照しながら、実施形態を詳細に説明する。
ＬＺ７７符号化は、長い繰り返しデータ列を効率よく圧縮できるため、５バイト程度以上の比較的長い繰り返しデータ列が頻出する圧縮対象データ列に対して、高い圧縮率を得ることができる。
【００２５】
しかし、テキストデータ等の場合、長い繰り返しデータ列は、十数キロバイト程度以上の範囲を探索しないと見つからないことがある。十数キロバイト程度以上の範囲から探索した繰り返しデータ列を符号化する場合、一致位置を表すために十数ビット程度以上のデータが用いられ、その繰り返しデータ列の符号化に２バイト程度のデータが用いられることになる。このため、ＬＺ７７符号化では、２バイト以下の繰り返しデータ列を無視して、非繰り返しデータ列として扱うことが多く、このような短い繰り返しデータ列は圧縮されない。
【００２６】
一方、ＬＺ７８符号化は、頻出データ列が辞書に登録されるため、数バイト程度の短い繰り返しデータ列が頻出する圧縮対象データ列に対して、高い圧縮率を得ることができる。
【００２７】
しかし、辞書に登録するデータ列の数が増えると、辞書の番号を符号化するために用いられる符号の符号量が増えるため、辞書に登録するデータ列を選別することが望ましい。このため、ＬＺ７８符号化では、テキストデータにおける引用文や各種データフォーマットにおけるヘッダ又はフッター等の長い繰り返しデータ列を辞書に登録することが難しく、長い繰り返しデータ列を短いデータ列に分割して扱うことが多い。したがって、このような長い繰り返しデータ列は効率よく圧縮されない。
【００２８】
図３は、実施形態のデータ圧縮装置及びデータ復元装置の機能的構成例を示している。データ圧縮装置３０１は、圧縮部３１１、圧縮部３１２、記憶部３１３、及び出力部３１４を含む。データ復元装置３０２は、復元部３２１、復元部３２２、記憶部３２３、及び出力部３２４を含む。
【００２９】
図４は、図３のデータ圧縮装置３０１が行うデータ圧縮処理の例を示すフローチャートである。
【００３０】
圧縮部３１１は、圧縮対象データ列に含まれる第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、第１のデータ列の位置を表す位置情報とを符号化することで、第２のデータ列を表す第１の圧縮データを生成する（ステップ４０１）。第２のデータ列は、所定長以上の長さのデータ列である。
【００３１】
記憶部３１３は、所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する。
【００３２】
圧縮部３１２は、記憶部３１３を参照して、圧縮対象データ列のうち第２のデータ列を除く部分に含まれる第３のデータ列を識別情報に置き換え、識別情報を符号化することで、第３のデータ列を表す第２の圧縮データを生成する（ステップ４０２）。
【００３３】
出力部３１４は、第１の圧縮データと第２の圧縮データとを含む圧縮データ列を出力する（ステップ４０３）。
【００３４】
図３のデータ圧縮装置３０１によれば、繰り返し出現するデータ列を符号化するデータ圧縮処理の圧縮率を向上させることができる。
【００３５】
図５は、図３のデータ復元装置３０２が行うデータ復元処理の例を示すフローチャートである。
【００３６】
復元部３２１は、データ圧縮装置３０１が出力する圧縮データ列に含まれる第１の圧縮データを復号して、第１のデータ列の長さ情報と位置情報とを復元し、長さ情報と位置情報とに基づいて第２のデータ列を生成する（ステップ５０１）。
【００３７】
記憶部３２３は、第３のデータ列と識別情報との対応関係を記憶する。
復元部３２２は、圧縮データ列に含まれる第２の圧縮データを復号して、識別情報を復元し、記憶部３２３を参照して、識別情報を第３のデータ列に置き換える（ステップ５０２）。
【００３８】
出力部３２４は、第２のデータ列を含むとともに、第２のデータ列を除く部分に第３のデータ列を含む圧縮対象データ列を出力する（ステップ５０３）。
【００３９】
図３のデータ復元装置３０２によれば、データ圧縮装置３０１が出力する圧縮データ列から圧縮対象データ列を復元することができる。
【００４０】
図６は、図３のデータ圧縮装置３０１の具体例を示している。図６のデータ圧縮装置３０１は、圧縮部３１１、圧縮部３１２、記憶部３１３、出力部３１４、及び入力バッファ６０１を含む。圧縮部３１１は、探索部６１１及び符号化部６１２を含み、圧縮部３１２は、探索部６１３及び符号化部６１４を含む。データ圧縮装置３０１は、例えば、コンピュータであってもよい。
【００４１】
入力バッファ６０１は、入力される圧縮対象データ列を記憶し、記憶部３１３は、データ又はデータ列と識別情報との対応関係を表す辞書６１５を記憶する。
【００４２】
圧縮部３１１の探索部６１１は、圧縮対象データ列に含まれる所定長以上の長さの繰り返しデータ列を探索し、検出した繰り返しデータ列の一致長と一致位置とを出力する。また、探索部６１１は、所定長よりも短い繰り返しデータ列と繰り返し出現しないデータ列とを非繰り返しデータ列として扱い、非繰り返しデータ列の非一致長を出力する。符号化部６１２は、繰り返しデータ列の一致長と一致位置とを符号化するとともに、非繰り返しデータ列の非一致長を符号化する。圧縮部３１１は、例えば、ＬＺ７７符号化によりデータ列を圧縮することができる。
【００４３】
圧縮部３１２の探索部６１３は、非繰り返しデータ列から、辞書６１５に登録されたデータ又はデータ列を探索し、検出したデータ又はデータ列に対応する識別情報を辞書６１５から取得する。また、探索部６１３は、所定の登録規則に従って、検出したデータ又はデータ列を含む、より長いデータ列を辞書６１５に追加登録する。符号化部６１４は、探索部６１３が取得した識別情報を符号化する。圧縮部３１２は、例えば、ＬＺ７８符号化によりデータ列を圧縮することができる。
【００４４】
このようなデータ圧縮装置３０１によれば、所定長よりも短い繰り返しデータ列と繰り返し出現しないデータ列とを非繰り返しデータ列として扱い、辞書に登録された識別情報に置き換えることで、ＬＺ７７符号化よりも高い圧縮率を得ることができる。
【００４５】
図７は、図６のデータ圧縮装置３０１が行うデータ圧縮処理の具体例を示すフローチャートである。まず、探索部６１１は、非一致長ｎ＿ｌｅｎを０に設定し（ステップ７０１）、圧縮対象データ列に含まれる所定長以上の長さの繰り返しデータ列を探索する（ステップ７０２）。
【００４６】
繰り返しデータ列の探索において、探索部６１１は、入力バッファ６０１内の符号化位置よりも前のデータ列から、符号化位置のアドレスを始点とする所定長以上の長さのデータ列と一致するデータ列を探索する。そして、繰り返しデータ列を検出した場合、探索部６１１は、その繰り返しデータ列の一致長ｌｅｎと一致位置ａｄｒとを求める。この繰り返しデータ列の探索には、例えば、特許文献２に記載されたルックアップテーブルを用いた探索方法、ハッシュテーブルを用いた探索方法、又は最近一致位置リストを用いた探索方法を用いることができる。
【００４７】
次に、探索部６１１は、繰り返しデータ列を検出したか否かをチェックし（ステップ７０３）、繰り返しデータ列を検出しなかった場合（ステップ７０３，ＮＯ）、非一致長ｎ＿ｌｅｎを１だけインクリメントする（ステップ７１３）。そして、探索部６１１は、符号化位置を１だけインクリメントして、符号化位置が圧縮対象データ列を超えたか否かをチェックする（ステップ７１４）。符号化位置が圧縮対象データ列内にある場合（ステップ７１４，ＮＯ）、探索部６１１は、ステップ７０２以降の処理を繰り返す。
【００４８】
一方、繰り返しデータ列を検出した場合（ステップ７０３，ＹＥＳ）、探索部６１１は、非一致長ｎ＿ｌｅｎが０であるか否かをチェックする（ステップ７０４）。非一致長ｎ＿ｌｅｎが０である場合（ステップ７０４，ＹＥＳ）、符号化部６１２は、一致長ｌｅｎを符号化し（ステップ７０５）、一致位置ａｄｒを符号化する（ステップ７０６）。そして、出力部３１４は、一致長ｌｅｎ及び一致位置ａｄｒを表す符号を出力する。
【００４９】
次に、探索部６１１は、符号化位置を１だけインクリメントして、符号化位置が圧縮対象データ列を超えたか否かをチェックする（ステップ７０７）。符号化位置が圧縮対象データ列内にある場合（ステップ７０７，ＮＯ）、探索部６１１は、ステップ７０１以降の処理を繰り返す。
【００５０】
非一致長ｎ＿ｌｅｎが０でない場合（ステップ７０４，ＮＯ）、符号化部６１２は、非一致長ｎ＿ｌｅｎを符号化し（ステップ７０８）、出力部３１４は、非一致長ｎ＿ｌｅｎを表す符号を出力する。
【００５１】
次に、圧縮部３１２の探索部６１３は、符号化位置よりも前の長さｎ＿ｌｅｎのデータ列を非繰り返しデータ列として扱い、その非繰り返しデータ列の先頭から、辞書６１５に登録されたデータ又はデータ列を探索する（ステップ７０９）。そして、探索部６１３は、検出したデータ又はデータ列に対応する識別情報を辞書６１５から取得する。
【００５２】
次に、符号化部６１４は、探索部６１３が取得した識別情報を符号化し（ステップ７１０）、出力部３１４は、識別情報を表す符号を出力する。そして、探索部６１３は、検出したデータ又はデータ列を含む、より長いデータ列に新たな識別情報を割り当てて、辞書６１５に追加登録する（ステップ７１１）。追加登録されるデータ列は、検出されたデータ又はデータ列と、その直前の１つ以上のデータとからなるデータ列であってもよい。
【００５３】
次に、探索部６１３は、非繰り返しデータ列の符号化が終了したか否かをチェックし（ステップ７１２）、符号化されていないデータが残っている場合（ステップ７１２，ＮＯ）、ステップ７０９以降の処理を繰り返す。そして、非繰り返しデータ列の符号化が終了した場合（ステップ７１２，ＹＥＳ）、符号化部６１２は、ステップ７０５以降の処理を行う。
【００５４】
ステップ７０７において、符号化位置が圧縮対象データ列を超えた場合（ステップ７０７，ＹＥＳ）、データ圧縮装置３０１は、処理を終了する。
【００５５】
ステップ７１４において、符号化位置が圧縮対象データ列を超えた場合（ステップ７１４，ＹＥＳ）、符号化部６１２は、非一致長ｎ＿ｌｅｎを符号化し（ステップ７１５）、出力部３１４は、非一致長ｎ＿ｌｅｎを表す符号を出力する。次に、探索部６１３及び符号化部６１４は、ステップ７０９〜ステップ７１２と同様の処理を行う（ステップ７１６〜ステップ７１９）。そして、非繰り返しデータ列の符号化が終了した場合（ステップ７１９，ＹＥＳ）、データ圧縮装置３０１は、処理を終了する。
【００５６】
短い繰り返しデータ列の探索は、長い繰り返しデータ列の探索よりも処理負荷が大きいため、多数の短い繰り返しデータ列の探索を行うと、データ圧縮処理の効率が低下すると考えられる。このため、ステップ７０２の所定長としては、ある程度の長さを用いることが望ましい。
【００５７】
例えば、所定長として、Central Processing Unit（ＣＰＵ）のロード命令によりメモリからＣＰＵ内のレジスタへロードされるデータの転送単位以上の長さを用いることができる。この転送単位は、ＣＰＵのアーキテクチャによって異なり、例えば、１ワード（３２ビット）又は２ワード（６４ビット）である。探索対象の繰り返しデータ列の長さを転送単位以上に制限することで、イントリンシック命令によって複数バイトのデータ列同士を比較することが可能になり、データ圧縮処理が高速化される。
【００５８】
図８は、３２ビットＣＰＵの転送単位に合わせて、所定長を４バイトとした場合のデータ圧縮処理の例を示している。この例では、図２の場合と同様に、スペースを含む各文字が圧縮開始時の辞書６１５に登録されており、圧縮中に検出された文字又は文字列を１文字伸張した文字列が辞書６１５に追加登録される。Ｎ［Ｘ］は、辞書６１５に登録された文字Ｘ又は文字列Ｘに対応する識別情報を表す。
【００５９】
図８の入力文字列のうち、アドレス１からアドレス２４までの文字列“Ａ  ｇｏｏｄ  ｂｅｇｉｎｎｉｎｇ  ｍａｋｅｓ  ａ”は、非繰り返しデータ列に対応する。このため、この文字列は、非一致長２４と対応する識別情報列との組み合わせである、圧縮データ｛２４，Ｎ［Ａ］Ｎ［  ］Ｎ［ｇ］Ｎ［ｏ］Ｎ［ｏ］・・・Ｎ［ｉｎ］Ｎ［ｇ］・・・Ｎ［ａ］｝に置き換えられる。
【００６０】
このとき、検出された文字又は文字列とその直前の文字とからなる文字列が辞書６１５に追加登録される。これにより、入力文字列中の次の文字列が辞書６１５に追加登録され、それ以降に出現する同じ文字列の符号化に使用される。
“Ａ  ”，“  ｇ”，“ｇｏ”，“ｏｏ”，“ｏｄ”，“ｄ  ”，“  ｂ”，
“ｂｅ”，“ｅｇ”，“ｇｉ”，“ｉｎ”，“ｎｎ”，“ｎｉｎ”，“ｎｇ”
【００６１】
アドレス１１からアドレス１２までの文字列“ｉｎ”は、アドレス１２の文字“ｎ”が符号化された時点で、新たな文字列として辞書６１５に登録される。そして、アドレス１４からアドレス１５までの文字列“ｉｎ”は、識別情報Ｎ［“ｉｎ”］に置き換えられ、文字列“ｉｎ”とその直前の文字“ｎ”とからなる文字列“ｎｉｎ”が、新たな文字列として辞書に登録される。
【００６２】
アドレス２５からアドレス３０までの６バイトの文字列“  ｇｏｏｄ  ”は、４バイト以上の繰り返しデータ列に対応するため、一致長６と一致位置２３との組み合わせである、圧縮データ｛６，２３｝に置き換えられる。
【００６３】
アドレス３１からアドレス３７までの文字列“ｅｎｄｉｎｇ．”は、非繰り返しデータ列に対応するため、非一致長７と対応する識別情報列との組み合わせである、圧縮データ｛３，Ｎ［ｅ］Ｎ［ｎ］Ｎ［ｄ］Ｎ［ｉｎ］Ｎ［ｇ］Ｎ［．］｝に置き換えられる。このとき、アドレス３４からアドレス３５までの文字列“ｉｎ”は、追加登録された識別情報Ｎ［“ｉｎ”］に置き換えられる。
【００６４】
図２のデータ圧縮処理では、アドレス３４からアドレス３６までの文字列“ｉｎｇ”が繰り返しデータ列として扱われているが、図８のデータ圧縮処理では、４バイトよりも短いため、非繰り返しデータ列として扱われる。
【００６５】
図９は、図３のデータ復元装置３０２の具体例を示している。図９のデータ復元装置３０２は、復元部３２１、復元部３２２、記憶部３２３、出力部３２４、入力バッファ９０１、及び出力バッファ９０２を含む。復元部３２１は、復号部９１１及び複写部９１２を含み、復元部３２２は、復号部９１３及び探索部９１４を含む。データ復元装置３０２は、例えば、コンピュータであってもよい。
【００６６】
入力バッファ９０１は、入力される圧縮データ列を記憶し、出力バッファ９０２は、復元済みのデータ列を記憶し、記憶部３２３は、データ又はデータ列と識別情報との対応関係を表す辞書９１５を記憶する。出力部３２４は、出力バッファ９０２が記憶する復元済みのデータ列を出力する。
【００６７】
復元部３２１の復号部９１１は、圧縮データ列に含まれる繰り返しデータ列の圧縮データを復号して、一致長と一致位置とを復元する。複写部９１２は、復元済みのデータ列中の一致位置から一致長に対応するデータ列を複写して、繰り返しデータ列を生成し、出力バッファ９０２に格納する。
【００６８】
復元部３２２の復号部９１３は、圧縮データ列に含まれる非繰り返しデータ列の圧縮データを復号して、非一致長と識別情報とを復元する。探索部９１４は、辞書９１５を探索して、復号部９１３が復元した識別情報に対応するデータ又はデータ列を取得し、出力バッファ９０２に格納する。また、探索部９１４は、データ圧縮装置３０１と同じ登録規則に従って、取得したデータ又はデータ列を含む、より長いデータ列を辞書９１５に追加登録する。
【００６９】
図１０は、図９のデータ復元装置３０２が行うデータ復元処理の具体例を示すフローチャートである。まず、復号部９１１は、圧縮データ列に含まれる復号対象の圧縮データが繰り返しデータ列の圧縮データであるか否かをチェックする（ステップ１００１）。
【００７０】
復号対象の圧縮データが非繰り返しデータ列の圧縮データである場合（ステップ１００１，ＮＯ）、復号部９１３は、その圧縮データを復号して、非一致長を復元し（ステップ１００５）、識別情報を復元する（ステップ１００６）。
【００７１】
次に、探索部９１４は、辞書９１５から、復号部９１３が復元した識別情報に対応するデータ又はデータ列を取得し（ステップ１００７）、出力バッファ９０２に格納する。出力部３２４は、出力バッファ９０２に格納されたデータ又はデータ列を出力する。
【００７２】
次に、探索部９１４は、取得したデータ又はデータ列を含む、より長いデータ列に新たな識別情報を割り当てて、辞書９１５に追加登録する（ステップ１００８）。追加登録されるデータ列は、取得されたデータ又はデータ列と、その直前の１つ以上のデータとからなるデータ列であってもよい。データ圧縮処理において符号化されたデータ又はデータ列に基づくデータ列を辞書６１５に追加登録する処理と同様にして、復元されたデータ又はデータ列に基づくデータ列を辞書９１５に追加登録することで、辞書６１５と辞書９１５との同期を取ることができる。
【００７３】
次に、復号部９１３は、非一致長に対応するデータ列の生成が終了したか否かをチェックし（ステップ１００９）、生成したデータ列の長さが非一致長よりも短い場合（ステップ１００９，ＮＯ）、ステップ１００６以降の処理を繰り返す。そして、生成したデータ列の長さが非一致長に達した場合（ステップ１００９，ＹＥＳ）、復号部９１１は、圧縮データ列の復号が終了したか否かをチェックする（ステップ１００４）。復号されていない圧縮データが残っている場合（ステップ１００４，ＮＯ）、復号部９１１は、次の圧縮データについて、ステップ１００１以降の処理を繰り返す。
【００７４】
一方、復号対象の圧縮データが繰り返しデータ列の圧縮データである場合（ステップ１００１，ＹＥＳ）、復号部９１１は、圧縮データを復号して、一致長と一致位置とを復元する（ステップ１００２）。そして、複写部９１２は、出力バッファ９０２に格納されたデータ列中の一致位置から一致長に対応するデータ列を複写して、繰り返しデータ列を生成し（ステップ１００３）、出力バッファ９０２に格納する。出力部３２４は、出力バッファ９０２に格納された繰り返しデータ列を出力する。そして、復号部９１１は、ステップ１００４以降の処理を繰り返す。
【００７５】
ステップ１００４において、圧縮データ列の復号が終了した場合（ステップ１００４，ＹＥＳ）、データ復元装置３０２は、処理を終了する。
【００７６】
ところで、図７のステップ７１１において辞書６１５に追加登録されるデータ列の個数を制限しない場合、辞書６１５が大きなメモリ領域を占有するとともに、識別情報のビット数が増加して圧縮データの符号量も増加する。そこで、追加登録されるデータ列の個数を適切に制限することが望ましい。
【００７７】
図１１は、辞書６１５のデータ列の個数を制限するデータ圧縮処理の具体例を示すフローチャートである。このデータ圧縮処理では、圧縮開始時の辞書６１５にはデータが登録されておらず、圧縮対象データ列から検出された非繰り返しデータ列に含まれるデータ及びデータ列を辞書６１５に登録することで、辞書６１５が生成される。
【００７８】
図１１のステップ１１０１〜ステップ１１０４、ステップ１１１４、及びステップ１１１５の処理は、図７のステップ７０１〜ステップ７０４、ステップ７１３、及びステップ７１４の処理と同様である。
【００７９】
非一致長ｎ＿ｌｅｎが０である場合（ステップ１１０４，ＹＥＳ）、探索部６１１は、一致長ｌｅｎを記憶部３１３に格納し（ステップ１１０５）、一致位置ａｄｒを記憶部３１３に格納する（ステップ１１０６）。
【００８０】
一方、非一致長ｎ＿ｌｅｎが０でない場合（ステップ１１０４，ＮＯ）、探索部６１１は、非一致長ｎ＿ｌｅｎを記憶部３１３に格納する（ステップ１１１１）。また、探索部６１１は、符号化位置よりも前の長さｎ＿ｌｅｎのデータ列を非繰り返しデータ列として扱い、その非繰り返しデータ列を記憶部３１３に格納する（ステップ１１１２）。
【００８１】
そして、探索部６１１は、記憶部３１３に格納されている１つ又は複数の非繰り返しデータ列に含まれる各データ列の個数を求め、求めた個数を各データ列の出現頻度として記憶部３１３に格納する（ステップ１１１３）。このとき、探索部６１１は、非繰り返しデータ列に含まれるデータ列のうち、ステップ１１０２で繰り返しデータ列の探索に用いた所定長よりも短いデータ列について、出現頻度を求める。
【００８２】
次に、探索部６１１は、符号化位置を１だけインクリメントして、符号化位置が圧縮対象データ列を超えたか否かをチェックする（ステップ１１０７）。符号化位置が圧縮対象データ列内にある場合（ステップ１１０７，ＮＯ）、探索部６１１は、ステップ１１０１以降の処理を繰り返す。
【００８３】
ステップ１１１５において、符号化位置が圧縮対象データ列を超えた場合（ステップ１１１５，ＹＥＳ）、探索部６１１は、ステップ１１１１〜ステップ１１１３と同様の処理を行う（ステップ１１１６〜ステップ１１１８）。そして、データ圧縮装置３０１は、ステップ１１０８以降の処理を行う。
【００８４】
ステップ１１０７において、符号化位置が圧縮対象データ列を超えた場合（ステップ１１０７，ＹＥＳ）、探索部６１３は、記憶部３１３に格納されている非繰り返しデータ列からデータ又はデータ列を選択して、辞書６１５に登録する（ステップ１１０８）。
【００８５】
圧縮対象データ列から複数の非繰り返しデータ列が検出された場合、ステップ１１１３の処理が繰り返される。そして、ステップ１１１２又はステップ１１１７において最後の非繰り返しデータ列が記憶部３１３に格納されたとき、ステップ１１１３又はステップ１１１８において、すべての非繰り返しデータ列に対する各データ列の最終的な出現頻度が求められる。
【００８６】
そこで、探索部６１３は、記憶部３１３に格納されている各データ列の最終的な出現頻度に基づき、所定数のデータ列を選択して、辞書６１５に登録する。例えば、探索部６１３は、最初に、記憶部３１３に格納されているすべての非繰り返しデータ列に含まれる１バイトの各データを選択して、辞書６１５に登録する。次に、探索部６１３は、すべての非繰り返しデータ列に含まれる所定長よりも短いデータ列のうち、出現頻度の高いものから順に所定数のデータ列を選択して、辞書６１５に登録する。
【００８７】
次に、符号化部６１４は、辞書６１５を符号化し（ステップ１１０９）、出力部３１４は、符号化された辞書６１５を出力する。次に、データ圧縮装置３０１は、記憶部３１３に格納されている一致長ｌｅｎ、一致位置ａｄｒ、非一致長ｎ＿ｌｅｎ、及び非繰り返しデータ列を符号化する（ステップ１１１０）。
【００８８】
このとき、符号化部６１２は、各繰り返しデータ列の一致長ｌｅｎ及び一致位置ａｄｒを符号化する。また、探索部６１３は、各非繰り返しデータ列の先頭から、辞書６１５に登録されたデータ又はデータ列を探索し、検出したデータ又はデータ列に対応する識別情報を辞書６１５から取得する。符号化部６１４は、各非繰り返しデータ列の非一致長ｎ＿ｌｅｎと識別情報とを符号化する。そして、出力部３１４は、各繰り返しデータ列の一致長ｌｅｎ及び一致位置ａｄｒを表す符号と、各非繰り返しデータ列の非一致長ｎ＿ｌｅｎ及び識別情報を表す符号とを出力する。
【００８９】
図１１のデータ圧縮処理では、圧縮対象データ列から検出されたすべての非繰り返しデータ列に対して各データ列の出現頻度を求めているが、一部の非繰り返しデータ列に対して各データ列の出現頻度を求めてもよい。例えば、圧縮対象データ列を一定サイズのブロックに分割し、ブロック毎に各データ列の出現頻度を求めて、辞書６１５に登録するデータ又はデータ列を選択してもよい。
【００９０】
また、圧縮対象データ列の先頭の所定サイズのデータ列から検出された非繰り返しデータ列に対して各データ列の出現頻度を求めて、辞書６１５に登録するデータ又はデータ列を選択してもよい。この場合、所定サイズのデータ列に基づいて生成された辞書６１５は、その後更新することなく、それより後のデータ列に対しても適用される。所定サイズは、例えば、数キロバイト程度であってもよい。
【００９１】
図１２は、所定長を４バイトとした場合の辞書６１５のデータ列の個数を制限するデータ圧縮処理の例を示している。この例では、辞書６１５の識別情報を４ビット符号に変換するため、識別情報の個数を１６（２＾４）個に制限している。したがって、最大で１６個のデータ又はデータ列を辞書６１５に登録することができる。
【００９２】
図１２の入力文字列のうち、アドレス１からアドレス２４までの文字列“Ａ  ｇｏｏｄ  ｂｅｇｉｎｎｉｎｇ  ｍａｋｅｓ  ａ”、及び、アドレス３１からアドレス３７までの文字列“ｅｎｄｉｎｇ．”は、非繰り返しデータ列に対応する。一方、アドレス２５からアドレス３０までの６バイトの文字列“  ｇｏｏｄ  ”は、４バイト以上の繰り返しデータ列に対応する。
【００９３】
そこで、まず、非一致長２４と文字列“Ａ  ｇｏｏｄ  ｂｅｇｉｎｎｉｎｇ  ｍａｋｅｓ  ａ”とが記憶部３１３に格納される。次に、“  ｇｏｏｄ  ”の一致長６及び一致位置２３が記憶部３１３に格納され、続いて、非一致長７と文字列“ｅｎｄｉｎｇ．”とが記憶部３１３に格納される。
【００９４】
次に、記憶部３１３に格納された２つの非繰り返しデータ列に含まれる１バイトの各文字が選択されて、辞書６１５に登録される。これにより、次の１４個の文字が識別情報とともに辞書６１５に登録される。
“ａ”，“ｂ”，“ｄ”，“ｅ”，“ｇ”，“ｉ”，“ｋ”，
“ｍ”，“ｎ”，“ｏ”，“ｓ”，“Ａ”，“  ”，“．”
【００９５】
“ａ”、“ｂ”、“ｄ”、“ｅ”、“ｇ”、“ｉ”、及び“ｋ”の識別情報は、それぞれ、０、１、２、３、４、５、及び６である。また、“ｍ”、“ｎ”、“ｏ”、“ｓ”、“Ａ”、“  ”、及び“．”の識別情報は、それぞれ、７、８、９、１０、１１、１２、及び１３である。
【００９６】
次に、２つの非繰り返しデータ列に含まれる２バイト及び３バイトの各文字列の出現頻度に基づき、出現頻度の高いものから順に残りの個数の文字列が選択されて、識別情報とともに辞書６１５に登録される。辞書６１５には最大で１６個の文字又は文字列を登録することができ、既に１４個の文字が登録されているため、残りの個数は２個である。
【００９７】
“ｉｎ”、“ｉｎｇ”、“ｎｇ”、及び“  ａ”の出現頻度は、それぞれ、３、２、２、及び１であるため、出現頻度の高いものから順に２個の文字列“ｉｎ”及び“ｉｎｇ”が選択されて、辞書６１５に登録される。“ｉｎ”及び“ｉｎｇ”の識別情報は、それぞれ、１４及び１５である。
【００９８】
０〜１５の識別情報に対応する符号は、１６進数０ｘ０〜０ｘＦで表され、“ａ”、“ｂ”、“ｄ”、“ｅ”、“ｇ”、“ｉ”、“ｋ”、及び“ｍ”の符号は、それぞれ、０ｘ０、０ｘ１、０ｘ２、０ｘ３、０ｘ４、０ｘ５、０ｘ６、及び０ｘ７となる。また、“ｎ”、“ｏ”、“ｓ”、“Ａ”、“  ”、“．”、“ｉｎ”、及び“ｉｎｇ”の符号は、それぞれ、０ｘ８、０ｘ９、０ｘＡ、０ｘＢ、０ｘＣ、０ｘＤ、０ｘＥ、及び０ｘＦとなる。
【００９９】
こうして生成された辞書６１５に従って、“Ａ  ｇｏｏｄ  ｂｅｇｉｎｎｉｎｇ  ｍａｋｅｓ  ａ”は、非一致長２４と対応する識別情報列（符号列）との組み合わせである、圧縮データ｛２４，ＢＣ４９９２Ｃ１３４Ｅ８ＦＣ７０６３ＡＣ０｝に置き換えられる。
【０１００】
次に、“  ｇｏｏｄ  ”は、一致長６と一致位置２３との組み合わせである、圧縮データ｛６，２３｝に置き換えられる。そして、“ｅｎｄｉｎｇ．”は、辞書６１５に従って、非一致長７と対応する識別情報列（符号列）との組み合わせである、圧縮データ｛３，３８２ＦＤ｝に置き換えられる。
【０１０１】
辞書６１５の識別情報として１バイト符号を用いる場合、図１３に示すように、識別情報の個数は２５６（２＾８）個になる。この場合、最大で２５６個のデータ列を辞書６１５に登録することができる。例えば、複数の非繰り返しデータ列に含まれるすべての１バイトのデータを登録した後、所定長よりも短いデータ列のうち出現頻度の高いものから順に残りの個数のデータ列を登録してもよい。
【０１０２】
また、辞書６１５の識別情報として１バイト符号と２バイト符号とを併用する場合、図１４に示すように、識別情報の個数は３２８９６（２＾７＋２＾１５＝１２８＋３２７６８）個になる。この場合、最大で３２８９６個のデータ列を辞書６１５に登録することができる。例えば、複数の非繰り返しデータ列に含まれるすべての１バイトのデータを登録した後、所定長よりも短いデータ列のうち出現頻度の高いものから順に残りの個数のデータ列を登録してもよい。
【０１０３】
このように、辞書６１５に登録可能なデータ列の個数は、識別情報の符号のビット数に応じて変化する。図１３のような１バイト符号の識別情報は、圧縮対象データ列に含まれるデータ列の種類が比較的少ない場合に有効である。一方、図１４のような１バイト符号及び２バイト符号の識別情報は、圧縮対象データ列に含まれるデータ列の種類が比較的多い場合に有効である。
【０１０４】
圧縮対象データ列に含まれるデータ又はデータ列を辞書６１５に登録する代わりに、圧縮対象データ列と類似する別のデータ列に含まれるデータ又はデータ列を辞書６１５に登録してもよい。
【０１０５】
この場合、データ圧縮装置３０１は、圧縮対象データ列の代わりに別のデータ列を用いて、図１１のステップ１１０１〜ステップ１１０８及びステップ１１１１〜ステップ１１１８と同様の処理を行うことで、辞書６１５を生成することができる。その後、データ圧縮装置３０１は、生成した辞書６１５を用いて、圧縮対象データ列に対して図１１のデータ圧縮処理を行う。ただし、ステップ１１０８、ステップ１１１３、及びステップ１１１８の処理は省略される。
【０１０６】
図１５は、図１１のデータ圧縮処理により生成された圧縮データ列から圧縮対象データ列を復元するデータ復元処理の具体例を示すフローチャートである。まず、復号部９１３は、符号化された辞書６１５を復号して辞書６１５を復元し、辞書９１５として記憶部３２３に格納する（ステップ１５０１）。データ圧縮装置３０１から出力される辞書６１５を辞書９１５として用いることで、辞書６１５と辞書９１５との同期を取ることができる。
【０１０７】
次のステップ１５０２〜ステップ１５０５の処理は、図１０のステップ１００１〜ステップ１００４の処理と同様である。
【０１０８】
復号対象の圧縮データが非繰り返しデータ列の圧縮データである場合（ステップ１５０２，ＮＯ）、復号部９１３は、その圧縮データを復号して、非一致長を復元し（ステップ１５０６）、識別情報を復元する（ステップ１５０７）。
【０１０９】
次に、探索部９１４は、辞書９１５から、復号部９１３が復元した識別情報に対応するデータ又はデータ列を取得し（ステップ１５０８）、出力バッファ９０２に格納する。出力部３２４は、出力バッファ９０２に格納されたデータ又はデータ列を出力する。
【０１１０】
次に、復号部９１３は、非一致長に対応するデータ列の生成が終了したか否かをチェックし（ステップ１５０９）、生成したデータ列の長さが非一致長よりも短い場合（ステップ１５０９，ＮＯ）、ステップ１５０７以降の処理を繰り返す。そして、生成したデータ列の長さが非一致長に達した場合（ステップ１５０９，ＹＥＳ）、データ復元装置３０２は、ステップ１５０５以降の処理を繰り返す。
【０１１１】
ステップ１５０５において、圧縮データ列の復号が終了した場合（ステップ１５０５，ＹＥＳ）、データ復元装置３０２は、処理を終了する。
【０１１２】
図３及び図６のデータ圧縮装置３０１と図３及び図９のデータ復元装置３０２の構成は一例に過ぎず、データ圧縮装置及びデータ復元装置の用途や条件に応じて、一部の構成要素を省略又は変更してもよい。
【０１１３】
図４、図５、図７、図１０、図１１、及び図１５のフローチャートは一例に過ぎず、データ圧縮装置及びデータ復元装置の構成や条件に応じて一部の処理を省略又は変更してもよい。例えば、処理開始時の辞書６１５及び辞書９１５を更新せずにそのまま用いて、データ圧縮処理及びデータ復元処理を行うことも可能である。この場合、図７のステップ７１１及びステップ７１８の処理と、図１０のステップ１００８の処理と、図１１のステップ１１０８、ステップ１１１３、及びステップ１１１８の処理とを省略することができる。
【０１１４】
図４、図７、及び図１１のデータ圧縮処理は、ＬＺ７７符号化に基づくデータ圧縮処理に限らず、圧縮対象データ列中に繰り返し出現するデータ列を符号化する他のデータ圧縮処理に対しても適用することができる。同様に、図５、図１０、及び図１５のデータ復元処理は、ＬＺ７７符号化に基づくデータ復元処理に限らず、他のデータ復元処理に対しても適用することができる。
【０１１５】
図８及び図１２の入力文字列は圧縮対象データ列の一例に過ぎず、圧縮対象データ列は、音声データ、画像データ等の他のデータ列であっても構わない。
【０１１６】
図３及び図６のデータ圧縮装置３０１と図３及び図９のデータ復元装置３０２は、例えば、図１６に示すような情報処理装置（コンピュータ）を用いて実現可能である。
【０１１７】
図１６の情報処理装置は、ＣＰＵ１６０１、メモリ１６０２、入力装置１６０３、出力装置１６０４、補助記憶装置１６０５、媒体駆動装置１６０６、及びネットワーク接続装置１６０７を備える。これらの構成要素はバス１６０８により互いに接続されている。
【０１１８】
メモリ１６０２は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを格納する。情報処理装置がデータ圧縮装置３０１である場合、メモリ１６０２は、図３及び図６の記憶部３１３及び入力バッファ６０１として用いることができる。情報処理装置がデータ復元装置３０２である場合、メモリ１６０２は、図３及び図９の記憶部３２３、入力バッファ９０１、及び出力バッファ９０２として用いることができる。
【０１１９】
ＣＰＵ１６０１（プロセッサ）は、例えば、メモリ１６０２を利用してデータ圧縮プログラムを実行することにより、図３及び図６の圧縮部３１１、圧縮部３１２、探索部６１１、符号化部６１２、探索部６１３、及び符号化部６１４として動作する。また、ＣＰＵ１６０１は、例えば、メモリ１６０２を利用してデータ復元プログラムを実行することにより、図３及び図９の復元部３２１、復元部３２２、復号部９１１、複写部９１２、復号部９１３、及び探索部９１４として動作する。
【０１２０】
入力装置１６０３は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示や情報の入力に用いられる。出力装置１６０４は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問い合わせ又は指示、及び処理結果の出力に用いられる。情報処理装置がデータ復元装置３０２である場合、出力装置１６０４は、図３及び図９の出力部３２４として用いることができる。
【０１２１】
補助記憶装置１６０５は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置１６０５は、ハードディスクドライブ又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置１６０５にプログラム及びデータを格納しておき、それらをメモリ１６０２にロードして使用することができる。
【０１２２】
媒体駆動装置１６０６は、可搬型記録媒体１６０９を駆動し、その記録内容にアクセスする。可搬型記録媒体１６０９は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体１６０９は、Compact Disk Read Only Memory（ＣＤ−ＲＯＭ）、Digital Versatile Disk（ＤＶＤ）、Universal Serial Bus（ＵＳＢ）メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体１６０９にプログラム及びデータを格納しておき、それらをメモリ１６０２にロードして使用することができる。
【０１２３】
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ１６０２、補助記憶装置１６０５、又は可搬型記録媒体１６０９のような、物理的な（非一時的な）記録媒体である。
【０１２４】
ネットワーク接続装置１６０７は、Local Area Network、Wide Area Network等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェースである。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置１６０７を介して受け取り、それらをメモリ１６０２にロードして使用することができる。情報処理装置がデータ圧縮装置３０１である場合、ネットワーク接続装置１６０７は、図３及び図６の出力部３１４として用いることができる。情報処理装置がデータ復元装置３０２である場合、ネットワーク接続装置１６０７は、図３及び図９の出力部３２４として用いることができる。
【０１２５】
情報処理装置がデータ圧縮装置３０１である場合、ＣＰＵ１６０１は、圧縮対象データ列から生成した圧縮データ列を補助記憶装置１６０５へ出力することができ、補助記憶装置１６０５は、その圧縮データ列を格納することができる。ＣＰＵ１６０１は、圧縮データ列を媒体駆動装置１６０６へ出力することもでき、媒体駆動装置１６０６は、その圧縮データ列を可搬型記録媒体１６０９に記録することができる。ＣＰＵ１６０１は、圧縮データ列をネットワーク接続装置１６０７へ出力することもでき、ネットワーク接続装置１６０７は、その圧縮データ列を通信ネットワーク経由でデータ復元装置３０２へ送信することができる。
【０１２６】
情報処理装置がデータ復元装置３０２である場合、ＣＰＵ１６０１は、圧縮データ列から復元した圧縮対象データ列を補助記憶装置１６０５へ出力することができ、補助記憶装置１６０５は、その圧縮対象データ列を格納することができる。ＣＰＵ１６０１は、圧縮対象データ列を媒体駆動装置１６０６へ出力することもでき、媒体駆動装置１６０６は、その圧縮対象データ列を可搬型記録媒体１６０９に記録することができる。ＣＰＵ１６０１は、圧縮対象データ列をネットワーク接続装置１６０７へ出力することもでき、ネットワーク接続装置１６０７は、その圧縮対象データ列を通信ネットワーク経由で外部の装置へ送信することができる。
【０１２７】
なお、情報処理装置が図１６のすべての構成要素を含む必要はなく、用途や条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザからの指示や情報を入力する必要がない場合は、入力装置１６０３を省略してもよい。オペレータ又はユーザへの問い合わせ又は指示、及び処理結果を出力する必要がない場合は、出力装置１６０４を省略してもよい。また、可搬型記録媒体１６０９又は通信ネットワークを利用しない場合は、媒体駆動装置１６０６又はネットワーク接続装置１６０７を省略してもよい。
【０１２８】
情報処理装置がスマートフォンのような通話機能を有する携帯端末である場合、マイク及びスピーカのような通話用の装置を含んでいてもよく、カメラのような撮像装置を含んでいてもよい。
【０１２９】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１３０】
図３乃至図１６を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを符号化することで、前記第２のデータ列を表す第１の圧縮データを生成し、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第２のデータ列を除く部分に含まれる前記第３のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第３のデータ列を表す第２の圧縮データを生成し、
前記第１の圧縮データと前記第２の圧縮データとを含む圧縮データ列を出力する、
処理をコンピュータに実行させるデータ圧縮プログラム。
（付記２）
前記第３のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第４のデータ列と一致することを特徴とする付記１記載のデータ圧縮プログラム。
（付記３）
前記所定長は、前記コンピュータに含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする付記１又は２記載のデータ圧縮プログラム。
（付記４）
前記コンピュータは、前記第１の圧縮データ及び前記第２の圧縮データを生成する前に、前記圧縮対象データ列内の非繰り返しデータ列に含まれる１バイトのデータと識別情報との第１の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第２の対応関係を前記記憶部に格納し、
前記第２の対応関係は、前記第３のデータ列と前記識別情報との前記対応関係を含み、
前記コンピュータは、前記非繰り返しデータ列に含まれる前記１バイトのデータを前記第１の対応関係が示す前記識別情報に置き換え、前記第１の対応関係が示す前記識別情報を符号化することで、前記１バイトのデータを表す第３の圧縮データを生成し、前記第１の圧縮データと前記第２の圧縮データと前記第３の圧縮データとを含む前記圧縮データ列を出力することを特徴とする付記１乃至３のいずれか１項に記載のデータ圧縮プログラム。
（付記５）
圧縮対象データ列を圧縮した圧縮データ列に含まれる第１の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを復元し、
前記長さ情報と前記位置情報とに基づいて前記第２のデータ列を生成し、
前記圧縮データ列に含まれる第２の圧縮データを復号して、識別情報を復元し、
前記所定長よりも短い第３のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第３のデータ列に置き換え、
前記第２のデータ列を含むとともに、前記第２のデータ列を除く部分に前記第３のデータ列を含む前記圧縮対象データ列を出力する、
処理をコンピュータに実行させるデータ復元プログラム。
（付記６）
圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを符号化することで、前記第２のデータ列を表す第１の圧縮データを生成する第１の圧縮部と、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部と、
前記記憶部を参照して、前記圧縮対象データ列のうち前記第２のデータ列を除く部分に含まれる前記第３のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第３のデータ列を表す第２の圧縮データを生成する第２の圧縮部と、
前記第１の圧縮データと前記第２の圧縮データとを含む圧縮データ列を出力する出力部と、
を備えることを特徴とするデータ圧縮装置。
（付記７）
前記第３のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第４のデータ列と一致することを特徴とする付記６記載のデータ圧縮装置。
（付記８）
前記所定長は、前記データ圧縮装置に含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする付記６又は７記載のデータ圧縮装置。
（付記９）
前記第２の圧縮部は、前記圧縮対象データ列内の非繰り返しデータ列に含まれる１バイトのデータと識別情報との第１の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第２の対応関係を前記記憶部に格納し、
前記第２の対応関係は、前記第３のデータ列と前記識別情報との前記対応関係を含み、
前記第２の圧縮部は、前記非繰り返しデータ列に含まれる前記１バイトのデータを前記第１の対応関係が示す前記識別情報に置き換え、前記第１の対応関係が示す前記識別情報を符号化することで、前記１バイトのデータを表す第３の圧縮データを生成し、
前記出力部は、前記第１の圧縮データと前記第２の圧縮データと前記第３の圧縮データとを含む前記圧縮データ列を出力することを特徴とする付記６乃至８のいずれか１項に記載のデータ圧縮装置。
（付記１０）
圧縮対象データ列を圧縮した圧縮データ列に含まれる第１の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを復元し、前記長さ情報と前記位置情報とに基づいて前記第２のデータ列を生成する第１の復元部と、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部と、
前記圧縮データ列に含まれる第２の圧縮データを復号して、前記識別情報を復元し、前記記憶部を参照して、前記識別情報を前記第３のデータ列に置き換える第２の復元部と、
前記第２のデータ列を含むとともに、前記第２のデータ列を除く部分に前記第３のデータ列を含む前記圧縮対象データ列を出力する出力部と、
を備えることを特徴とするデータ復元装置。
（付記１１）
コンピュータが、
圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを符号化することで、前記第２のデータ列を表す第１の圧縮データを生成し、
前記所定長よりも短い第３のデータ列と識別情報との対応関係を記憶する記憶部を参照して、前記圧縮対象データ列のうち前記第２のデータ列を除く部分に含まれる前記第３のデータ列を前記識別情報に置き換え、前記識別情報を符号化することで、前記第３のデータ列を表す第２の圧縮データを生成し、
前記第１の圧縮データと前記第２の圧縮データとを含む圧縮データ列を出力する、
ことを特徴とするデータ圧縮方法。
（付記１２）
前記第３のデータ列は、前記圧縮対象データ列に含まれる、前記所定長よりも短い第４のデータ列と一致することを特徴とする付記１１記載のデータ圧縮方法。
（付記１３）
前記所定長は、前記コンピュータに含まれるメモリからプロセッサへロードされるデータの転送単位以上の長さであることを特徴とする付記１１又は１２記載のデータ圧縮方法。
（付記１４）
前記コンピュータは、前記第１の圧縮データ及び前記第２の圧縮データを生成する前に、前記圧縮対象データ列内の非繰り返しデータ列に含まれる１バイトのデータと識別情報との第１の対応関係を前記記憶部に格納するとともに、前記非繰り返しデータ列に含まれる前記所定長よりも短いデータ列のうち出現頻度の高いデータ列から順に所定数のデータ列を選択して、前記所定数のデータ列と識別情報との第２の対応関係を前記記憶部に格納し、
前記第２の対応関係は、前記第３のデータ列と前記識別情報との前記対応関係を含み、
前記コンピュータは、前記非繰り返しデータ列に含まれる前記１バイトのデータを前記第１の対応関係が示す前記識別情報に置き換え、前記第１の対応関係が示す前記識別情報を符号化することで、前記１バイトのデータを表す第３の圧縮データを生成し、前記第１の圧縮データと前記第２の圧縮データと前記第３の圧縮データとを含む前記圧縮データ列を出力することを特徴とする付記１１乃至１３のいずれか１項に記載のデータ圧縮方法。
（付記１５）
コンピュータが、
圧縮対象データ列を圧縮した圧縮データ列に含まれる第１の圧縮データを復号して、前記圧縮対象データ列に含まれる、所定長以上の長さの第２のデータ列と一致する第１のデータ列の長さを表す長さ情報と、前記第１のデータ列の位置を表す位置情報とを復元し、
前記長さ情報と前記位置情報とに基づいて前記第２のデータ列を生成し、
前記圧縮データ列に含まれる第２の圧縮データを復号して、識別情報を復元し、
前記所定長よりも短い第３のデータ列と前記識別情報との対応関係を記憶する記憶部を参照して、前記識別情報を前記第３のデータ列に置き換え、
前記第２のデータ列を含むとともに、前記第２のデータ列を除く部分に前記第３のデータ列を含む前記圧縮対象データ列を出力する、
ことを特徴とするデータ復元方法。
【符号の説明】
【０１３１】
３０１  データ圧縮装置
３０２  データ復元装置
３１１、３１２  圧縮部
３１３、３２３  記憶部
３１４、３２４  出力部
３２１、３２２  復元部
６０１、９０１  入力バッファ
６１１、６１３、９１４  探索部
６１２、６１４  符号化部
６１５、９１５  辞書
９０２  出力バッファ
９１１、９１３  復号部
９１２  複写部
１６０１  ＣＰＵ
１６０２  メモリ
１６０３  入力装置
１６０４  出力装置
１６０５  補助記憶装置
１６０６  媒体駆動装置
１６０７  ネットワーク接続装置
１６０８  バス
１６０９  可搬型記録媒体
【図１】
2016134808.tif 000003
【図２】
2016134808.tif 000004
【図３】
2016134808.tif 000005
【図４】
2016134808.tif 000006
【図５】
2016134808.tif 000007
【図６】
2016134808.tif 000008
【図７】
2016134808.tif 000009
【図８】
2016134808.tif 000010
【図９】
2016134808.tif 000011
【図１０】
2016134808.tif 000012
【図１１】
2016134808.tif 000013
【図１２】
2016134808.tif 000014
【図１３】
2016134808.tif 000015
【図１４】
2016134808.tif 000016
【図１５】
2016134808.tif 000017
【図１６】
2016134808.tif 000018