(57)【特許請求の範囲】
【請求項１】
圧縮対象のデータ列に対して予め設定された基準位置から注目位置を前記圧縮対象のデータ列の所定の方向に向かって移動させ、前記注目位置よりも前の第１データ列に、前記注目位置から前記注目位置の移動方向に連なる第２データ列と一致する第３データ列が存在するか否かを判定する判定部と、
第１データ列の中に第３データ列が存在する場合には、第３データ列の次のデータである第４データを特定し、該第４データを、前記圧縮対象のデータ列の第２データ列以降から検出する検出部と、
前記検出部が前記第２データ列以降から検出をした前記第４データと、前記第２データ列の次のデータである第５データとを入れ替え、入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離を履歴テーブルに格納する置換処理部と、
前記置換処理部によって入れ替えられたデータを圧縮する圧縮部と
を備えたことを特徴とする圧縮装置。
【請求項２】
前記置換処理部により入れ替えられた前記第４データの次の文字の位置に前記基準位置を移動させる基準位置移動部を更に備えたことを特徴とする請求項１に記載の圧縮装置。
【請求項３】
圧縮装置が、
圧縮対象のデータ列に対して予め設定された基準位置から注目位置を前記圧縮対象のデータ列の所定の方向に向かって移動させ、前記注目位置よりも前の第１データ列に、前記注目位置から前記注目位置の移動方向に連なる第２データ列と一致する第３データ列が存在するか否かを判定する判定ステップと、
第１データ列の中に第３データ列が存在する場合には、第３データ列の次のデータである第４データを特定し、該第４データを、前記圧縮対象のデータ列の第２データ列以降から検出する検出ステップと、
前記検出ステップが前記第２データ列以降から検出をした前記第４データと、前記第２データ列の次のデータである第５データとを入れ替え、入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離を履歴テーブルに格納する置換処理ステップと、
前記置換処理ステップにより入れ替えられたデータを圧縮する圧縮ステップと
を実行することを特徴とする圧縮方法。
【請求項４】
コンピュータに、
圧縮対象のデータ列に対して予め設定された基準位置から注目位置を前記圧縮対象のデータ列の所定の方向に向かって移動させ、前記注目位置よりも前の第１データ列に、前記注目位置から前記注目位置の移動方向に連なる第２データ列と一致する第３データ列が存在するか否かを判定する判定手順と、
第１データ列の中に第３データ列が存在する場合には、第３データ列の次のデータである第４データを特定し、該第４データを、前記圧縮対象のデータ列の第２データ列以降から検出する検出手順と、
前記検出手順が前記第２データ列以降から検出をした前記第４データと、前記第２データ列の次のデータである第５データとを入れ替え、入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離を履歴テーブルに格納する置換処理手順と、
前記置換処理手順によって入れ替えられたデータを圧縮する圧縮手順と
を実行させることを特徴とする圧縮プログラム。
【請求項５】
基準位置から入れ替える前のデータまでの距離と、入れ替えたデータを移動させた距離とを対応付けた履歴テーブルに含まれる前記基準位置から入れ替える前の第４データまでの距離を基にして、前記基準位置を算出する基準位置算出部と、
前記基準位置と、前記入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離とを基にして、入れ替えられた第４データと第５データとの組を判定するデータ判定部と、
前記データ判定部によって判定された同一の組の第４データと第５データとを入れ替えたデータ列を生成し、生成したデータ列に対してデータ圧縮に対する復元を行う復元部と
を備えたことを特徴とする復元装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮装置、圧縮方法、圧縮プログラムおよび復元装置に関する。
【背景技術】
【０００２】
従来、データ転送におけるトラフィックやデータベースに記憶するデータ量を削減することを目的として、様々なデータ圧縮技術が利用されている。例えば、このデータ圧縮技術には、ＬＺ７７（Lempel-Ziv  77）と呼ばれるものがある。
【０００３】
このＬＺ７７によって文字列を圧縮する場合には、注目位置以降の文字列と一致する文字列を、注目位置以前の文字列から検出する。そして、ＬＺ７７では、注目位置以降の文字列を、注目位置以前の一致する文字列までの相対位置と文字列の長さに置き換え、更に、続く一文字を出力する。ＬＺ７７では、このような処理を注目位置を移動させつつ順次実行することで文字列を圧縮する。
【０００４】
図２０は、従来のＬＺ７７を説明するための図である。図２０では、ＬＺ７７によって、文字列Ｓ＝ａｂａｂｄａｃｂａｄａｂａｄｂｂｃｂｄｃを圧縮する場合について説明する。ＬＺ７７では、上記のように、注目位置以降の文字列を、注目位置以前の一致する文字列の出現位置と文字列の長さとの組に置き換える。なお、一致する文字列が存在しない場合には、出現位置と文字列の長さとの組をそれぞれ０に設定する。
【０００５】
まず、ＬＺ７７では、文字列Ｓの先頭となる０番目の文字ａの位置を注目位置とする。この場合には、注目位置以前に一致する文字列が存在しないため、文字列Ｓの０番目の文字ａを（０，０）ａとする（ステップ１０）。ＬＺ７７では、文字列Ｓの１番目の文字ｂの位置を注目位置とする。この場合には、注目位置以前に一致する文字列が存在しないため、文字列Ｓの０番目から１番目までの文字列を（０，０）ａ（０，０）ｂとする（ステップＳ１１）。
【０００６】
ＬＺ７７では、文字列Ｓの２番目の文字ａを注目位置とする。この場合には、注目位置以降の文字列ａｂと一致する文字列が、注目位置以前の文字列に存在する。このため、ＬＺ７７では、注目位置以降の文字列ａｂを、注目位置以前の一致する文字列までの相対位置２と、文字列の長さ２に置き換える。このため、文字列Ｓの０番目から３番目までの文字列を（０，０）ａ（０，０）ｂ（２，２）とする。また、４番目の文字ｄを追加して、（０，０）ａ（０，０）ｂ（２，２）ｄとする（ステップＳ１２）。
【０００７】
ＬＺ７７では、文字列Ｓの５番目の文字ａを注目位置とする。この場合には、注目位置以降の文字ａと一致する文字列が、注目位置以前の文字列に存在する。このため、ＬＺ７７では、注目位置以降の文字ａを、注目位置以前の一致する文字列までの相対位置３と、文字列の長さ１に置き換える。このため、文字列Ｓの０番目から５番目までの文字列を（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）とする。また、６番目の文字ｃを追加して、（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃとする（ステップＳ１３）。
【０００８】
ＬＺ７７では、文字列Ｓの７番目の文字ｂを注目位置とする。この場合には、注目位置以降の文字列ｂａと一致する文字列が、注目位置以前の文字列に存在する。このため、ＬＺ７７では、注目位置以降の文字列ｂａを、注目位置以前の一致する文字列までの相対位置６と、文字列の長さ２に置き換える。このため、文字列Ｓの０番目から８番目までの文字列を（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）とする。また、９番目の文字ｄを追加して、（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄとする（ステップＳ１４）。
【０００９】
ＬＺ７７では、文字列Ｓの１０番目の文字ａを注目位置とする。この場合には、注目位置以降の文字列ａｂａと一致する文字列が、注目位置以前の文字列に存在する。このため、ＬＺ７７では、注目位置以降の文字列ａｂａを、注目位置以前の一致する文字列までの相対位置１０と、文字列の長さ３に置き換える。このため、文字列Ｓの０番目から１２番目までの文字列を（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）とする。また、１３番目の文字ｄを追加して（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）ｄとする（ステップＳ１５）。
【００１０】
ＬＺ７７では、文字列Ｓの１４番目の文字ｂを注目位置とする。この場合には、注目位置以降の文字ｂと一致する文字が、注目位置以前の文字列に存在する。このため、ＬＺ７７では、注目位置以降の文字ｂを、注目位置以前の一致する文字列までの相対位置３と、文字の長さ１に置き換える。このため、文字列Ｓの０番目から１４番目までの文字列は（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）ｄ（３，１）となる。また、１５番目の文字ｂを追加して（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）ｄ（３，１）ｂとする（ステップＳ１６）。
【００１１】
ＬＺ７７では、文字列Ｓの１６番目の文字ｃを注目位置とする。この場合には、注目位置以降の文字列ｃｂと一致する文字が、注目位置以降の文字列に存在する。このため、ＬＺ７７では、注目位置以降の文字列ｃｂを、注目位置以前の一致する文字列までの相対位置１０と、文字列の長さ２に置き換える。このため、文字列Ｓの０番目から１７番目までの文字列は（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）ｄ（３，１）ｂ（１０，２）となる。また、１８番目の文字ｄを追加して（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）ｄ（３，１）ｂ（１０，２）ｄとする（ステップＳ１７）。
【００１２】
ＬＺ７７では、文字列Ｓの１９番目の文字ｃを注目位置とする。この場合には、注目位置以降の文字ｃと一致する文字が、注目位置以前の文字列に存在する。このため、ＬＺ７７では、注目位置以降の文字列ｃを、注目位置以前の一致する文字列までの相対位置３と、文字の長さ１に置き換える。このため、文字列Ｓの０番目から１９番目までの文字列は（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）ｄ（３，１）ｂ（１０，２）ｄ（３，１）となる（ステップＳ１８）。
【００１３】
ステップＳ１０〜Ｓ１８に示したように、文字列ＳにＬＺ７７を適用することで、文字列Ｓは、ＬＺ７７（Ｓ）に圧縮される（ステップＳ１９）。１文字の長さを１とすると、圧縮前の文字列Ｓの長さは「２０」である。これに対して、圧縮後の文字列ＬＺ７７（Ｓ）の長さは、相対位置と長さとの組を１文字とすると、「１７」である。このため、図２０に示した文字列ＳにＬＺ７７を適用することで、データの長さを３だけ削減することができる。
【００１４】
ところで、圧縮対象となる文字列の文字の並び順がＬＺ７７の圧縮方法に対して都合の悪い並び順となっている場合には、ＬＺ７７で圧縮するとかえってデータ量が増えてしまう場合があった。例えば、文字列Ｓ＝ａｂａｂｂａをＬＺ７７によって圧縮すると、文字列Ｓは（０，０）ａ（０，０）ｂ（２，２）ｂ（２，１）となる。圧縮前の文字列Ｓの長さは６であり、圧縮後のデータの長さは７となるため、圧縮前の長さよりも、圧縮後の長さの方が長くなっている。
【００１５】
このため、圧縮対象となる文字列を変換して、ＬＺ７７の圧縮率を高めることが求められている。上記のようにＬＺ７７は、注目位置以降の文字列と一致する文字列を、注目位置以前の文字列から検出するものである。このため、注目位置以降の文字列と注目位置以前の文字列とがなるべく多く一致するように、文字列を変換しておけば、ＬＺ７７の圧縮率を高めることができる。
【００１６】
例えば、文字列Ｓ＝ａｂａｂｂａの４番目の文字ｂと５番目の文字ａとを置換することで文字列Ｓを変換し、文字列Ｔ＝ａｂａｂａｂとする。そして、文字列ＴをＬＺ７７によって圧縮すると、文字列Ｔは（０，０）ａ（０，０）ｂ（２，４）となる。圧縮前の文字列Ｔの長さは６であり、圧縮後のデータの長さは５となる。したがって、圧縮前の長さよりも、圧縮後の長さの方が短くなり、圧縮率を高めることができる。
【先行技術文献】
【非特許文献】
【００１７】
【非特許文献１】昌達Ｋ’ｚ，「圧縮アルゴリズム」，ソフトバンクパブリッシング
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、変換後の文字列Ｔは圧縮時には都合が良いものの、解凍時には元の文字列Ｓに復元する必要がある。このため、文字列Ｔから文字列Ｓを復元するための変換関数πを新たに記憶する必要がある。この変換関数πは記憶コストが大きいため、文字列を変換して圧縮率を高めたとしても、変換関数πを含めた総合的なデータ量が、圧縮前のデータ量よりも大きくなってしまうという問題があった。
【００１９】
文字列Ｓ＝ａｂａｂｂａを文字列Ｔ＝ａｂａｂａｂに変換した場合の変換関数πの一例を示す。図２１は、変換関数πの一例を示す図である。図２１において、ｎとπ（ｎ）は、変換前の文字列の先頭からの位置と、変換後の文字列の先頭からの位置との関係を示している。変換関数πを基にして、文字列Ｔを文字列Ｓに逆変換する。例えば、ｎ＝５とπ（ｎ）＝４とが対応しているため、変換前の文字列の５番目の文字は、変換後の文字列の先頭から４番目の文字となっていることを示す。このため、文字列Ｔの４番目の文字と、５番目の文字と置換すればよいことになる。
【００２０】
また、文字列Ｓを圧縮時の都合の良い文字列Ｔに変換する場合には、あらゆる文字を置換候補としている。このため、同一の文字が複数回置換される場合があり、計算コストが大きいという問題があった。
【００２１】
開示の技術は、上記に鑑みてなされたものであって、効率よくデータ列を圧縮することができる圧縮装置、圧縮方法および圧縮プログラム等を提供することを目的とする。
【課題を解決するための手段】
【００２２】
開示の圧縮装置は、圧縮対象のデータ列に対して予め設定された基準位置から注目位置を前記圧縮対象のデータ列の所定の方向に向かって移動させる。また、開示の圧縮装置は、前記基準位置と前記注目位置の間の第１データ列に、前記注目位置から前記注目位置の移動方向に連なる第２データ列と一致する第３データ列が存在するか否かを判定する。また、開示の圧縮装置は、第１データ列の中に第３データ列が存在する場合には、第３データ列の次のデータである第４データを特定し、該第４データを、前記圧縮対象のデータ列の第２データ列以降から検出する。また、開示の圧縮装置は、前記第２データ列以降から検出をした前記第４データと、前記第２データ列の次のデータである第５データとを入れ替える。また、開示の圧縮装置は、入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離を履歴テーブルに格納する。
【発明の効果】
【００２３】
開示の圧縮装置の一つの態様によれば、効率よくデータ列を圧縮することができるという効果を奏する。
【図面の簡単な説明】
【００２４】
【図１】図１は、本実施例にかかるデータ圧縮復元装置の構成を示す図である。
【図２】図２は、置換履歴表のデータ構造の一例を示す図（１）である。
【図３】図３は、文字列変換部の処理の概要を説明するための図である。
【図４】図４は、各種用語を説明するための図である。
【図５】図５は、文字列変換部の処理を詳細に説明するための図（１）である。
【図６】図６は、文字列変換部の処理を詳細に説明するための図（２）である。
【図７】図７は、文字列変換部の処理を詳細に説明するための図（３）である。
【図８】図８は、文字列変換部の処理を詳細に説明するための図（４）である。
【図９】図９は、文字列変換部の処理を詳細に説明するための図（５）である。
【図１０】図１０は、文字列変換部が一時的に保持する置換履歴表のデータ構造の一例を示す図（１）である。
【図１１】図１１は、文字列変換部が一時的に保持する置換履歴表のデータ構造の一例を示す図（２）である。
【図１２】図１２は、置換履歴表のデータ構造の一例を示す図（２）である。
【図１３】図１３は、原点を復元する処理を説明するための図である。
【図１４】図１４は、文字列逆変換部の処理を詳細に説明するための図（１）である。
【図１５】図１５は、文字列逆変換部の処理を詳細に説明するための図（２）である。
【図１６】図１６は、本実施例にかかる文字列変換部の処理手順を示すフローチャートである。
【図１７】図１７は、本実施例にかかる文字列逆変換部の処理手順を示すフローチャートである。
【図１８】図１８は、置換履歴表のデータ構造の一例を示す図（３）である。
【図１９】図１９は、圧縮復元プログラムを実行するコンピュータの一例を示す図である。
【図２０】図２０は、従来のＬＺ７７を説明するための図である。
【図２１】図２１は、変換係数πの一例を示す図である。
【発明を実施するための形態】
【００２５】
以下に、本願の開示する圧縮装置、圧縮方法、圧縮プログラムおよび復元装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００２６】
本実施例にかかるデータ圧縮復元装置１００の構成の一例について説明する。図１は、本実施例にかかるデータ圧縮復元装置の構成を示す図である。図１に示すように、このデータ圧縮復元装置１００は、入力部１１０、出力部１２０、入出力制御部１３０、記憶部１４０、圧縮部１５０、復元部１６０を有する。
【００２７】
入力部１１０は、各種のデータを入力する入力装置である。この入力部１１０は、例えばキーボードやマウス、タッチパネルに対応する。出力部１２０は、圧縮部１５０、復元部１６０の処理結果等を出力する出力装置である。この出力部１２０は、例えば、ディスプレイなどに対応する。入出力制御部１３０は、入力部１１０、出力部１２０、記憶部１４０、圧縮部１５０、復元部１６０のデータの入出力を制御する処理部である。
【００２８】
記憶部１４０は、入力ファイル１４１、置換履歴表１４２、出力ファイル１４３を記憶する記憶部である。記憶部１４０は、例えば、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
【００２９】
入力ファイル１４１は、複数の入力文字列を含むファイルである。例えば、入力文字列Ｓは、下記によって表される文字列となる。
Ｓ＝ａｂａｂａｄｃｂａｄａｂａｄｂｂｃｂｄｃ
データ圧縮復元装置１００は、この入力文字列Ｓを、ＬＺ７７の圧縮に都合の良い文字列に変換した後に、ＬＺ７７の圧縮方式に基づいて文字列を圧縮する。
【００３０】
置換履歴表１４２は、ＬＺ７７の圧縮に都合の良い文字列に変換した文字列を、変換前の文字列Ｓに戻す場合に利用するデータを保持するテーブルである。図２は、置換履歴表のデータ構造の一例を示す図（１）である。図２に示すように、この置換履歴表１４２は、オフセットと戻り距離とを対応付けて保持する。置換履歴表１４２に関する説明の詳細は後述する。
【００３１】
出力ファイル１４３は、ＬＺ７７の圧縮方式により圧縮した文字列を含むファイルである。例えば、ＬＺ７７の圧縮方式により圧縮した文字列ＬＺ７７（Ｓ）は、下記によって表されるデータとなる。
ＬＺ７７（Ｓ）＝（０，０）ａ（０，０）ｂ（２，３）ｄ（０，０）ｃ（４，７）ｂ（１４、３）ｄ（９，１）
【００３２】
圧縮部１５０は、入力ファイル１４１に含まれる入力文字列を圧縮する処理部である。圧縮部１５０は、文字列変換部１５１と、ＬＺ符号化部１５２とを有する。
【００３３】
文字列変換部１５１は、ＬＺ７７の圧縮方式にとって都合のよい並び順となるように、入力文字列Ｓの文字の順序を変換する処理部である。すなわち、文字列変換部１５１は、文字列内で同じ並びの文字列が繰り返し現れるように、入力文字列Ｓの文字の順序を変換する。図３は、文字列変換部の処理の概要を説明するための図である。図３の上段の文字列Ｓは変換対象となる文字列であり、図３の下段の文字列Ｓ’は文字列Ｓを変換した文字列である。
【００３４】
ここでは説明の便宜上、文字列Ｓの先頭を０番目とし、注目位置の文字を７番目の文字ｂとする。また、以下の説明では、注目位置の文字よりも入力文字列Ｓの先頭側の文字列を、注目位置より「前」と表現する。また、注目位置の文字よりも入力文字列Ｓの末尾側の文字列を、注目位置より「後」と表現する。
【００３５】
文字列変換部１５１は、注目位置より前の文字列と、注目位置より後の文字列とを比較して、一致する文字列を検索し、一致する文字列が長くなるように、注目位置より後の文字を置換する。図３に示す例では、注目位置より前の実線部１Ａの文字列「ｂａｄ」と、注目位置より後の鎖線部１Ｂの文字列「ｂａｄ」とが一致している。
【００３６】
ここで、一致する文字列を長くするためには、実線部１Ａの文字列「ｂａｄ」の次の文字「ｃ」にあわせて、鎖線部１Ｂの文字列「ｂａｄ」の次の文字を「ｃ」となるように、文字列Ｓの順序を変換すればよい。文字列変換部１５１が文字列Ｓの順序を変換する場合には、鎖線部１Ｂの文字列「ｂａｄ」以降の文字列から、文字「ｃ」を検出し、検出した文字「ｃ」と鎖線部１Ｂの文字列「ｂａｄ」の次の文字「ａ」と置換する。
【００３７】
図３に示す例では、文字列Ｓの１６番目に文字「ｃ」が存在するため、文字列変換部１５１は、文字列Ｓの１６番目の文字「ｃ」と、１０番目の文字「ａ」とを置換する。このように、文字列変換部１５１が、文字列Ｓを置換すると、文字列Ｓ’となる。文字列Ｓ’において、実線部２Ａの文字列「ｂａｄｃｂａｄ」と、鎖線部２Ｂの文字列「ｂａｄｃｂａｄ」とが一致している。
【００３８】
文字列Ｓと文字列Ｓ’とで一致する文字列の数を比較すると、文字列Ｓでは、３文字であったものが、文字列Ｓ’では７文字となっている。このため、文字列変換部１５１が、文字列Ｓを変換することで、文字列Ｓは文字列Ｓ’に変換され、ＬＺ７７の圧縮方式にとって都合のよい並び順となる。
【００３９】
続いて、文字列変換部１５１の処理を詳細に説明する前に、この処理を説明する場合に利用する用語について説明する。図４は、各種用語を説明するための図である。スライドバッファは、入力文字列Ｓの一部を格納するバッファである。文字列変換部１５１は、スライドバッファ内の入力文字列Ｓの変換が終了するたびに、未変換の入力文字列Ｓをスライドバッファに順次格納する。
【００４０】
原点ｏは、基準となる文字の位置を示すものである。原点は、基準位置の一例である。注目位置ｐは、図３の注目位置に対応するものであり、原点ｏから末尾に向かって移動する。オフセットｍは、原点ｏから置換対象となる文字までの相対距離である。戻り距離ｎは、置換元の文字から置換先の文字までの移動距離に対応するものである。例えば、図４に示す太文字ａとｂとを置換する場合には、オフセットｍが「６」となり、戻り距離ｎが「２」となる。
【００４１】
次に、文字列変換部１５１の処理を詳細に説明する。図５〜図９は、文字列変換部の処理を詳細に説明するための図である。また、図１０、図１１は、文字列変換部が一時的に保持する置換履歴表のデータ構造の一例を示す図である。ここでは説明の便宜上、入力文字列Ｓが、全てスライドバッファ内に格納できるものとする。また、入力文字列ＳをＳ＝ａｂａｂｄａｃｂａｄａｂａｄｂｂｃｂｄｃとする。
【００４２】
図５について説明する。文字列変換部１５１は、入力文字列Ｓをスライドバッファに格納する。また、文字列変換部１５１は、原点ｏおよび注目位置ｐを入力文字列Ｓの先頭の文字「ａ」に設定する。この場合には、原点ｏ＝０となる（ステップＳ２０）。また、文字列変換部１５１は、注目位置ｐより前に、文字列が存在しないため、注目位置ｐを一つ進めて１文字目の「ｂ」に設定する（ステップＳ２１）。
【００４３】
文字変換処理部１５１は、注目位置ｐより前には、文字「ｂ」が現れていない。このため、文字変換処理部１５１は、注目位置ｐを一つ進めて２文字目の「ａ」に設定する（ステップＳ２２）。
【００４４】
図６の説明に移行する。文字列変換部１５１は、注目位置ｐより後の文字列と、注目位置ｐより前の文字列とを比較すると、鎖線部１ｂの文字列「ａｂ」と、実線部１ａの文字列「ａｂ」とが一致する。文字列変換部１５１は、文字列「ａｂ」を最長一致部とする（ステップＳ２３）。ここで、最長一致部とは、注目位置ｐより前の文字列と一致する、注目位置ｐより後の文字列に対応するものである。
【００４５】
文字列変換部１５１は、鎖線部１ｂの最長一致部「ａｂ」より後の文字列から、実線部１ａの最長一致部「ａｂ」の次の文字「ａ」を検出する。文字列変換部１５１は、オフセットｍ＝５となる位置で、文字「ａ」を検出する。文字列変換部１５１は、検出した文字「ａ」の置換対象となる文字は、鎖線部１ｂの文字列「ａｂ」の次の文字「ｄ」となるため、戻り距離ｎ＝２となる（ステップＳ２４）。
【００４６】
文字列変換部１５１は、ステップＳ２４の処理が終了した時点で、原点ｏ「０」、オフセットｍ「５」、戻り距離ｎ「２」を対応付けて、置換履歴表に格納する。図１０に、ステップＳ２４が終了した時点での置換履歴表のデータの内容を示す。
【００４７】
図６の説明に戻る。文字列変換部１５１は、文字列Ｓの５文字目の「ａ」と４文字目の「ｄ」とを置換する。これにより、注目位置ｐより後の文字列と、注目位置ｐよりも前の文字列において「ａｂａ」が一致するため、最長一致部は鎖線部２ｂとなる。文字列変換部１５１は、最長一致部２ｂの次の文字「ｄ」に、原点ｏと注目位置ｐとを進める。この場合には、原点ｏ＝５となる。また、文字列変換部１５１は、注目位置ｐを更に一つ後にすすめて６文字目の「ｃ」に設定する（ステップＳ２５）。
【００４８】
図７の説明に移行する。文字列変換部１５１は、注目位置ｐよりも前に、文字「ｃ」が現れていないため、注目位置ｐを一つ進めて７文字目の「ｂ」に設定する（ステップＳ２６）。
【００４９】
図８の説明に移行する。文字列変換部１５１は、注目位置ｐより後の文字列と、注目位置ｐより前の文字列とを比較すると、鎖線部３ｂの文字列「ｂａｄ」と、実線部３ａの文字列「ｂａｄ」とが一致する。文字列変換部１５１は、文字列「ｂａｄ」を最長一致部とする（ステップＳ２７）。
【００５０】
文字列変換部１５１は、鎖線部３ｂの最長一致部「ｂａｄ」より後の文字から、実線部３ａの最長一致部「ｂａｄ」の次の文字「ｃ」を検出する。文字列変換部１５１は、オフセットｍ＝１１となる位置で、文字「ｃ」を検出する。文字列変換部１５１は、検出した文字「ａ」の置換対象となる文字は、鎖線部３ｂの文字列「ｂａｄ」の次の文字「ａ」となるため、戻り距離ｎ＝７となる（ステップＳ２８）。
【００５１】
文字列変換部１５１は、ステップＳ２８の処理が終了した時点で、原点ｏ「５」、オフセットｍ「１１」、戻り距離ｎ「７」を対応付けて、置換履歴表に格納する。図１１に、ステップＳ２８が終了した時点での置換履歴表のデータの内容を示す。
【００５２】
図８の説明に戻る。文字列変換部１５１は、文字列Ｓの１６文字目の「ｃ」と１０文字目の「ａ」とを置換する。これにより、注目位置ｐより後の文字列と、注目位置ｐより前の文字列において「ｂａｄｃｂａｄ」が一致するため、最長一致部は鎖線部４ｂとなる。文字列変換部１５１は、最長一致部４ｂの次の文字「ｂ」に、原点ｏと注目位置ｐとを進める。この場合には、原点ｏ＝１４となる。また、文字列変換部１５１は、注目位置ｐを更に一つ後にすすめて１５文字目の「ｂ」に設定する（ステップＳ２９）。
【００５３】
図９の説明に以降する。文字列変換部１５１は、注目位置ｐより後の文字列と、注目位置ｐより前の文字列とを比較すると、鎖線部５ｂの文字列「ｂａｂ」と、実線部５ａの文字列「ｂａｂ」とが一致する。文字列変換部１５１は、文字列「ｂａｂ」を最長一致部とする（ステップＳ３０）。
【００５４】
文字列変換部１５１は、鎖線部５ｂの最長一致部「ｂａｂ」より後の文字列から、実線部５ａの最長一致部「ｂａｂ」の次の文字「ａ」を検出する。しかし、該当文字を検出する前に、スライドバッファの末尾に到達する。文字列変換部１５１は、スライドバッファに格納された文字列を、ＬＺ符号化部１５２に出力する。また、図１１に示した置換履歴表の原点の情報を取り除いたものを、置換履歴表１４２に格納する（ステップＳ３１）。
【００５５】
上記のように、文字列変換部１５１がステップＳ２０〜Ｓ３１の処理を実行することで、入力文字列Ｓは、入力文字列Ｔに変換される。文字列変換部１５１は、入力文字列ＴをＬＺ符号化部１５２に出力する。
【００５６】
また、文字列変換部１５１は、置換履歴表をそのままの状態で記憶部１４０に記憶することはしない。置換履歴表の原点の情報は、オフセットと戻り距離との関係から一意に導くことができる。このため、文字列変換部１５１は、原点の情報を取り除いた置換履歴表を、記憶部１４０に記憶することで、記憶部１４０が記憶すべきデータ量を削減する。なお、文字列変換部１５１は、置換履歴表のオフセットの数値および戻り距離の数値を１バイトに詰め込む。つまり、置換履歴表の１行あたりのデータ量は１バイトとなる。
【００５７】
また、文字変換部１５１が、文字列Ｓを変換する場合には、原点以降の文字を置換対象とし、置換対象となる文字の領域を制限している。上記のように原点は、置換を行うたびに、最長一致部以降の文字の位置に再設定されるため、一度置換された文字が再度置換されることを防止することができ、計算コストを削減することができる。
【００５８】
図１の説明に戻る。ＬＺ符号化部１５２は、ＬＺ７７の圧縮方式に基づいて、入力文字列Ｔを圧縮する処理部である。ＬＺ符号化部１５２がおこなうＬＺ７７の圧縮方式は、図２０を用いて説明した従来のものと同一である。ＬＺ符号化部１５２は、圧縮した入力文字列Ｔを出力文字列として、出力ファイル１４３に格納する。
【００５９】
例えば、ＬＺ符号化部１５２は、入力文字列Ｔ＝ａｂａｂａｄｃｂａｄｃｂａｄｂｂａｂｄｃをＬＺの圧縮方式に基づいて圧縮する。これにより、入力文字列Ｔは、ＬＺ７７（Ｔ）＝（０，０）ａ（０，０）ｂ（２，３）ｄ（０，０）ｃ（４，７）ｂ（１４，３）ｄ（９，１）となる。
【００６０】
復元部１６０は、出力ファイル１４３から入力ファイル１４１を復元する処理部である。復元部１６０は、ＬＺ復号化部１６１と、文字列逆変換部１６２とを有する。
【００６１】
ＬＺ復号化部１６１は、ＬＺ７７の復号方式に基づいて、出力文字列を復号する処理部である。ＬＺ復号化部１６１がおこなうＬＺ７７の復号方式は、従来のものと同一である。例えば、ＬＺ復号化部１６１は、出力文字列を先頭の文字から辿っていき、相対位置と文字列の長さとの関係に基づいて、元の文字列に復号する。
【００６２】
例えば、ＬＺ復号化部１６１は、ＬＺ７７（Ｔ）＝（０，０）ａ（０，０）ｂ（２，３）ｄ（０，０）ｃ（４，７）ｂ（１４，３）ｄ（９，１）を、相対位置と文字列との関係から復号すると、文字列Ｔ＝ａｂａｂａｄｃｂａｄｃｂａｄｂｂａｂｄｃとなる。ＬＺ復号化部１６１は、復号した文字列を文字列逆変換部１６２に出力する。
【００６３】
文字列逆変換部１６２は、ＬＺ７７の圧縮方式にとって都合がよいように変換された文字列を元の文字列に逆変換する処理部である。以下において、文字列逆変換部１６２の処理を具体的に説明する。文字列逆変換部１６２は、置換履歴表１４２を記憶部１４０から読み込み、置換履歴表１４２の原点の情報を復元した後に、文字列を逆変換する。なお、ここでは説明の便宜上、逆変換対象となる文字列ＴをＴ＝ａａｃｃｂｂａａａａａａａａｂｂａａａａとする。また、置換履歴表１４２のデータ構造を図１２に示すものとする。図１２は、置換履歴表のデータ構造の一例を示す図（２）である。
【００６４】
文字列逆変換部１６２が原点の情報を復元する処理について説明する。図１３は、原点を復元する処理を説明するための図である。ここでは、図１２に示した置換履歴表の原点を復元する場合について説明する。文字列逆変換部１６２は、ｎ−１行目の原点に、ｎ−１行目のオフセットの値を加算することで、ｎ行目の原点の値を求める。ただし、１行目の原点の値を０とする。図１３に示す例では、１行目の原点の値は０となる。２行目の原点の値は８となる。３行目の原点の値は９となる。
【００６５】
文字列逆変換部１６２が文字列を逆変換する処理について説明する。文字列逆変換部１６２は、原点を復元した置換履歴表を最後の行から一行ずつ読み出し、置換する２つの文字を判定する。置換する一方の文字は、文字列の先頭から「原点ｏ＋オフセットｍ」の位置に対応する文字となる。置換するもう一方の文字は、文字列の先頭から「原点ｏ＋オフセットｍ−戻り距離ｎ＋１」の位置に対応する文字となる。文字列逆変換部１６２は、置換する２つの文字を判定した後に、各文字を置換する。文字列逆変換部１６２は、上記処理を繰り返し実行することで、文字列を逆変換する。文字列逆変換部１６２は、逆変換した文字列を出力部１２０に出力しても良いし、記憶部１４０に記憶しても良い。
【００６６】
次に、文字列逆変換部１６２の処理を詳細に説明する。図１４、図１５は、文字列逆変換部の処理を詳細に説明するための図である。また、原点を復元した置換履歴表は、図１３の右側に示すものとする。
【００６７】
図１４について説明する。文字列逆変換部１６２は、変換対象となる文字列Ｔ＝ａａｃｃｂｂａａａａａａａａｂｂａａａａをバッファに読み込む（ステップＳ４０）。文字列逆変換部１６２は、置換履歴表の３行目のデータを読み込み、置換する２つの文字を判定する。置換履歴表の３行目のデータは、原点ｏ＝９、オフセットｍ＝７、戻り距離ｎ＝２となる。このため、置換する文字は、先頭から１６番目の文字「ａ」と１５番目の文字「ｂ」となる。文字列逆変換部１６２は、先頭から１６番目の文字「ａ」と１５番目の文字「ｂ」とを置換する（ステップＳ４１）。
【００６８】
図１５の説明に移行する。文字列逆変換部１６２は、置換履歴表の２行目のデータを読み込み、置換する２つの文字を判定する。置換履歴表の２行目のデータは、原点ｏ＝８、オフセットｍ＝１、戻り距離ｎ＝７となる。このため、置換する文字は、先頭から９番目の文字「ｃ」と３番目の文字「ａ」となる。文字列逆変換部１６２は、先頭から９番目の文字「ｃ」と３番目の文字「ａ」とを置換する（ステップＳ４２）。
【００６９】
文字列逆変換部１６２は、置換履歴表の１行目のデータを読み込み、置換する２つの文字を判定する。置換履歴行の１行目のデータは、原点ｏ＝０、オフセットｍ＝８、戻り距離ｎ＝４となる。このため、置換する文字は、先頭から８番目の文字「ｂ」と５番目の文字「ａ」となる。文字列逆変換部１６２は、先頭から８番目の文字「ｂ」と５番目の文字「ａ」とを置換する（ステップＳ４３）。ステップＳ４３が終了した時点で、置換履歴表に対応する置換が全て終了する。
【００７０】
上記のように、文字列逆変換部１６２がステップＳ４０〜Ｓ４３の処理を実行することで、文字列Ｔ＝ａａｃｃｂｂａａａａａａａａｂｂａａａａは、文字列Ｔ＝ａａｃａｂａａａｂｃａａａａｂａｂａａａに逆変換される。この逆変換された文字列は、ＬＺ７７の圧縮方式にあわせて変換される前の文字列に対応する。
【００７１】
ところで、図１に示した圧縮部１５０および復元部１６０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）や、ＦＰＧＡ（Field  Programmable  Gate  Array）などの集積装置に対応する。または、圧縮部１５０および復元部１６０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。
【００７２】
次に、図１に示した文字列変換部１５１の処理手順について説明する。図１６は、本実施例にかかる文字列変換部の処理手順を示すフローチャートである。図１６に示す処理は、例えば、記憶部１４０に入力ファイル１４１が格納されたことを契機として実行される。
【００７３】
図１６に示すように、文字列変換部１５１は、入力文字列をスライドバッファに読み込み（ステップＳ１０１）、初期化処理を行う（ステップＳ１０２）。ステップＳ１０２の初期化処理において、文字列変換部１５１は、原点ｏ、注目位置ｐをスライドバッファの先頭にセットする。
【００７４】
文字列変換部１５１は、スライドバッファに含まれる文字列のうち、注目位置から始まる文字列と、注目位置より前の文字列とを比較して最長一致部を検索する（ステップＳ１０３）。文字列変換部１５１は、最長一致部が存在しない場合には（ステップＳ１０４，Ｎｏ）、注目位置を１つ進め（ステップＳ１０５）、ステップＳ１０３に移行する。
【００７５】
一方、文字列変換部１５１は、最長一致部が存在する場合には（ステップＳ１０４，Ｙｅｓ）、注目位置より前の最長一致部の直後の文字を文字ｙに設定する。また、文字列変換部１５１は、注目位置から始まる最長一致の最後の文字を文字ｘとする（ステップＳ１０６）。文字列変換部１５１は、注目位置より始まる最長一致部に対応する文字列よりも後に存在する文字ｙと一致する文字ｙ’を検索する（ステップＳ１０７）。
【００７６】
文字列変換部１５１は、文字ｙ’を見つける前にスライドバッファの末尾に到着していない場合には（ステップＳ１０８，Ｎｏ）、原点から文字ｙ’までの長さをオフセットｍに設定する（ステップＳ１０９）。
【００７７】
文字列変換部１５１は、文字ｙから文字ｘまでの戻り距離をｎに設定し、文字ｙと文字ｘとを置換する（ステップＳ１１０）。文字列置換部１５１は、原点ｏ、オフセットｍ、戻り距離ｎを対応付けて置換履歴表に登録する（ステップＳ１１１）。
【００７８】
文字列変換部１５１は、最長一致部を再計算し、原点ｏを最長一致部の直後に設定する（ステップＳ１１２）。文字列変換部１５１は、注目位置を原点ｏの一つ前に設定し（ステップＳ１１３）、ステップＳ１０３に移行する。
【００７９】
ところで、ステップＳ１０８において、文字列変換部１５１は、文字列ｙ’を見つける前にスライドバッファの末尾に到達した場合には（ステップＳ１０８，Ｙｅｓ）、スライドバッファを更新する（ステップＳ１１４）。ステップＳ１１４において、文字列変換部１５１は、入力ファイルからスライドバッファに文字列を詰め込む。
【００８０】
文字列変換部１５１は、入力ファイルの末尾に到達していない場合には（ステップＳ１１５，Ｎｏ）、ステップＳ１０３に移行する。一方、文字列変換部１５１は、入力ファイルの末尾に到達した場合には（ステップＳ１１５，Ｙｅｓ）、スライドバッファ中の文字列を全て出力ファイルに書き出し（ステップＳ１１６）、処理を終了する。
【００８１】
次に、図１に示した文字列逆変換部１６２の処理手順について説明する。図１７は、本実施例にかかる文字列逆変換部の処理手順を示すフローチャートである。例えば、図１７に示す処理は、記憶部１４０に、置換履歴表１４２と出力ファイル１４３とが格納されたことを契機に実行される。
【００８２】
図１７に示すように、文字列逆変換部１６２は、置換履歴表１４２を読み込み（ステップＳ２０１）、置換履歴表１４２の原点を復元する（ステップＳ２０２）。文字列逆変換部１６２は、出力文字列Ｔをバッファに読み込み（ステップＳ２０３）、置換履歴表の末尾から、未選択の行を選択する（ステップＳ２０４）。
【００８３】
文字列逆変換部１６２は、置換履歴表の行を全て選択した場合には（ステップＳ２０５，Ｙｅｓ）、文字列Ｔを出力し（ステップＳ２０６）、処理を終了する。一方、文字列逆変換部１６２は、置換履歴表の行を全て選択していない場合には（ステップＳ２０５，Ｎｏ）、出力文字列ＴにおいてＴ[ｏ＋ｍ]とＴ[ｏ＋ｍ−ｎ＋１]とを置換し（ステップＳ２０７）、ステップＳ２０４に移行する。ここで、ｏは原点、ｍはオフセット、ｎは戻り値に対応する。
【００８４】
次に、入力文字列ＳをそのままＬＺ７７の圧縮方式により圧縮した場合のバイト数と、圧縮部１５０が、入力文字列Ｓを入力文字列Ｔに置換した後に圧縮した場合のバイト数との比較結果を示す。なお、入力文字列Ｓを入力文字列Ｔに置換した後に圧縮した場合のバイト数には、入力文字列Ｔから入力文字列Ｓに逆変換する場合に必要となる置換履歴表のバイト数を含める。また、１文字を１バイト、圧縮後の数値の組を１バイト、置換履歴表の各数値を１バイトとする。
【００８５】
入力文字列ＳをＳ＝ａｂａｂｄａｃｂａｄａｂａｄｂｂｃｂｄｃとする。従来のように、この入力文字列ＳをＬＺ７７で圧縮すると、ＬＺ７７（Ｓ）＝（０，０）ａ（０，０）ｂ（２，２）ｄ（３，１）ｃ（６，２）ｄ（１０，３）ｄ（３，１）ｂ（１０，２）ｄ（３，１）となる。このため、ＬＺ７７（Ｓ）のデータ量は「１７」バイトとなる。
【００８６】
入力文字列ＳをＬＺ７７の圧縮方式にとって都合のよい並び順に変換した文字列Ｔを、入力文字列Ｔ＝ａｂａｂａｄｃｂａｄｃｂａｄｂｂａｂｄｃとする。また、文字列Ｔを文字列Ｓに逆変換するための置換履歴表を図１８に示す。図１８は、置換履歴表のデータ構造の一例を示す図（３）である。入力文字列ＴをＬＺ７７で圧縮すると、ＬＺ７７（Ｔ）＝（０，０）ａ（０，０）ｂ（２，３）ｄ（０，０）ｃ（４，７）ｂ（１４，３）ｄ（９，１）となる。このため、ＬＺ７７（Ｔ）のデータ量は１３バイトとなる。また、図１８に示した置換履歴表のデータ量は、原点の情報を省くと、２バイトとなる。このため、ＬＺ７７（Ｔ）のデータ量と置換履歴表のデータ量とを加算すると、「１５」バイトとなる。
【００８７】
したがって、圧縮部１５０は、置換履歴表のデータ量を合わせた場合であっても、従来技術の圧縮方法により圧縮された文字列のデータ量と比較して、データ量を削減することができる。上記に示した例では、圧縮部１５０は、従来技術と比較して、２バイト削減することができる。
【００８８】
次に、本実施例にかかるデータ圧縮復元装置１００の効果について説明する。データ圧縮復元装置１００は、図２１に示した従来技術のように、置換した文字の履歴をすべて置換履歴表に格納することはせず、原点、オフセット、戻り距離のみを置換履歴表に格納する。さらに、置換履歴表の原点の情報は、オフセットと戻り距離との関係から一意に導くことができるため、データ圧縮復元装置１００は、原点の情報を取り除いた置換履歴表を、記憶部１４０に記憶することで、記憶部１４０が記憶すべきデータ量を削減する。具体的に文字列の長さがｎの場合には、従来技術のメモリコストはＯ（ｎ）である。これに対して、本発明では、スライドバッファを利用しているため、メモリコストはＯ（１）となり、従来技術と比較してメモリコストを削減することができる。
【００８９】
また、データ圧縮復元装置１００は、文字列Ｓを変換する場合には、原点以降の文字を置換対象とし、置換対象となる文字の領域を制限している。上記のように原点は、置換を行うたびに、最長一致部以降の文字の位置に再設定されるため、一度置換された文字が再度置換されることを防止することができ、計算コストを削減することができる。具体的に文字列の長さがｎの場合には、従来技術の計算コストはＯ（ｎｌｏｇｎ）である。これに対して本発明の計算コストはＯ（ｎ）となり、従来技術と比較して計算コストを削減することができる。
【００９０】
また、データ圧縮復元装置１００は、圧縮された文字列を復元する場合に、置換履歴表１４２の原点を復元し、復元した原点と、オフセット、戻り距離に基づいて、圧縮された文字列を復号化し、逆変換する。このため、置換履歴表にオフセットと戻り距離のみが記憶されている場合でも、正確に文字列を復元することができる。
【００９１】
ところで、図１に示したデータ圧縮復元装置１００の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、データ圧縮復元装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図１に示した圧縮部１５０および復元部１６０を同一の装置が有している必要はない。別々の装置が、圧縮部１５０、復元部１６０をそれぞれ備えていても構わない。
【００９２】
また、データ圧縮復元装置１００が圧縮を行う場合には、判定部と、検出部と、置換処理部と、基準位置移動部とを備えていればよい。判定部は、圧縮対象のデータ列に対して基準位置を設定し、当該基準位置からデータ列の末尾に向かって注目位置を移動させる。そして、判定部は、注目位置から始まる末尾側の第１データ列と、注目位置よりも先頭側に存在する第２データ列とを比較して、第１データ列と一致するデータ列が第２データ列に存在するか否かを判定する。
【００９３】
検出部は、第１データ列と一致するデータ列が第２データ列に存在する場合には、一致するデータ列の次のデータと同一の第１データを、注目位置よりも末尾側のデータ列から検出する。置換処理部は、第１データ列の次のデータを示す第２データと、第１データとを入れ替え、第２データが移動した距離と、第２データと基準位置との距離とを履歴テーブルに格納する。基準位置移動部は、置換処理部により入れ替えられた第２データよりも末尾側に基準位置を移動させる。この判定部、検出部、置換処理部、基準位置移動部は、図１の文字列変換部１５１に対応する。
【００９４】
また、データ圧縮復元装置１００が復元を行う場合には、基準位置算出部と、データ判定部と、復元部とを備えていればよい。基準位置算出部は、履歴テーブルに含まれる第２データと基準位置との距離を基にして、基準位置を算出する。データ判定部は、基準位置と、履歴テーブルに含まれる第２データが移動した距離と、第２データと基準位置との距離とを基にして、入れ替えられた第１データと第２データとの組を判定する。復元部は、データ判定部によって判定された同一の組の第１データと第２データとを入れ替えることで、データ列を復元する。この基準位置算出部と、データ判定部と、復元部は、図１の文字列逆変換部１６２に対応する。
【００９５】
また、上述の実施例で説明したデータ圧縮復元装置１００等の処理は、あらかじめ用意されたプログラムを各種のコンピュータで実行することによって実現することもできる。ここで、図１９を用いて、上記の実施例で説明したデータ圧縮復元装置１００による処理と同様の機能を実現する圧縮復元プログラムを実行するコンピュータの一例を説明する。図１９は、圧縮復元プログラムを実行するコンピュータの一例を示す図である。
【００９６】
図１９に示すように、データ圧縮復元装置１００として機能するコンピュータ２００は、各種演算処理を実行するＣＰＵ（Central  Processing  Unit）２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、モニタ２０３を有する。
【００９７】
また、コンピュータ２００は、図１９に示すように、記憶媒体からプログラム等を読取る媒体読み取り装置２０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）２０６と、ハードディスク装置２０７を有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【００９８】
ハードディスク装置２０７には、上述したデータ圧縮復元装置１００の機能と同様の機能を発揮する圧縮プログラム２０７ａと、復元プログラム２０７ｂと、各種データ２０７ｃを記憶する。各種データは、図１に示した入力ファイル１４１、置換履歴表１４２、出力ファイル１４３等に対応する。なお、圧縮プログラム２０７ａと、復元プログラム２０７ｂと、各種データ２０７ｃを適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。
【００９９】
そして、ＣＰＵ２０１が、圧縮プログラム２０７ａをハードディスク装置２０７から読み出してＲＡＭ２０６に展開することにより、圧縮プログラム２０７ａは圧縮プロセス２０６ａとして機能する。この圧縮プロセス２０６ａは、図１に示した圧縮部１５０に対応する。
【０１００】
ＣＰＵ２０１が、復元プログラム２０７ｂをハードディスク装置２０７から読み出してＲＡＭ２０６に展開することにより、復元プログラム２０７ｂは復元プロセス２０６ｂとして機能する。この復元プロセス２０６ｂは、図１に示した復元部１６０に対応する。また、ＣＰＵ２０１は、ハードディスク装置２０７から各種データ２０７ｃを読み出して、ＲＡＭ２０６に格納する。
【０１０１】
圧縮プロセス２０６ａは、各種データ２０６ｃに含まれる入力ファイルに対して圧縮処理を実行する。復元プロセス２０６ｂは、各種データ２０６ｃに含まれる圧縮済みの文字列を、置換履歴表に基づいて復元する。
【０１０２】
なお、圧縮プログラム２０７ａおよび復元プログラム２０７ｂについては、必ずしも最初からハードディスク装置２０７に記憶させておく必要はない。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ２００がこれらから各プログラムを読み出して実行するようにしてもよい。
【０１０３】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１０４】
（付記１）圧縮対象のデータ列に対して予め設定された基準位置から注目位置を前記圧縮対象のデータ列の所定の方向に向かって移動させ、前記基準位置と前記注目位置の間の第１データ列に、前記注目位置から前記注目位置の移動方向に連なる第２データ列と一致する第３データ列が存在するか否かを判定する判定部と、
第１データ列の中に第３データ列が存在する場合には、第３データ列の次のデータである第４データを特定し、該第４データを、前記圧縮対象のデータ列の第２データ列以降から検出する検出部と、
前記検出部が前記第２データ列以降から検出をした前記第４データと、前記第２データ列の次のデータである第５データとを入れ替え、入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離を履歴テーブルに格納する置換処理部と
を備えたことを特徴とする圧縮装置。
【０１０５】
（付記２）前記置換処理部により入れ替えられた前記第４データの次の文字の位置に前記基準位置を移動させる基準位置移動部を更に備えたことを特徴とする付記１に記載の圧縮装置。
【０１０６】
（付記３）圧縮装置が、
圧縮対象のデータ列に対して予め設定された基準位置から注目位置を前記圧縮対象のデータ列の所定の方向に向かって移動させ、前記基準位置と前記注目位置の間の第１データ列に、前記注目位置から前記注目位置の移動方向に連なる第２データ列と一致する第３データ列が存在するか否かを判定する判定ステップと、
第１データ列の中に第３データ列が存在する場合には、第３データ列の次のデータである第４データを特定し、該第４データを、前記圧縮対象のデータ列の第２データ列以降から検出する検出ステップと、
前記検出ステップが前記第２データ列以降から検出をした前記第４データと、前記第２データ列の次のデータである第５データとを入れ替え、入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離を履歴テーブルに格納する置換処理ステップと
を実行することを特徴とする圧縮方法。
【０１０７】
（付記４）前記置換処理ステップにより入れ替えられた前記第４データの次の文字の位置に前記基準位置を移動させる基準位置移動ステップを更に実行することを特徴とする付記３に記載の圧縮方法。
【０１０８】
（付記５）コンピュータに、
圧縮対象のデータ列に対して予め設定された基準位置から注目位置を前記圧縮対象のデータ列の所定の方向に向かって移動させ、前記基準位置と前記注目位置の間の第１データ列に、前記注目位置から前記注目位置の移動方向に連なる第２データ列と一致する第３データ列が存在するか否かを判定する判定手順と、
第１データ列の中に第３データ列が存在する場合には、第３データ列の次のデータである第４データを特定し、該第４データを、前記圧縮対象のデータ列の第２データ列以降から検出する検出手順と、
前記検出手順が前記第２データ列以降から検出をした前記第４データと、前記第２データ列の次のデータである第５データとを入れ替え、入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離を履歴テーブルに格納する置換処理手順と
を実行させることを特徴とする圧縮プログラム。
【０１０９】
（付記６）前記置換処理手順により入れ替えられた前記第４データの次の文字の位置に前記基準位置を移動させる基準位置移動手順を更に実行させることを特徴とする付記５に記載の圧縮プログラム。
【０１１０】
（付記７）付記１に記載の履歴テーブルに含まれる前記基準位置から入れ替える前の前記第４データまでの距離を基にして、前記基準位置を算出する基準位置算出部と、
前記基準位置と、前記入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離とを基にして、入れ替えられた第４データと第５データとの組を判定するデータ判定部と、
前記データ判定部によって判定された同一の組の第４データと第５データとを入れ替えることで、データ列を復元する復元部と
を備えたことを特徴とする復元装置。
【０１１１】
（付記８）復元装置が、
付記１に記載の履歴テーブルに含まれる前記基準位置から入れ替える前の前記第４データまでの距離を基にして、前記基準位置を算出する基準位置算出ステップと、
前記基準位置と、前記入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離とを基にして、入れ替えられた第４データと第５データとの組を判定するデータ判定ステップと、
前記データ判定ステップによって判定された同一の組の第４データと第５データとを入れ替えることで、データ列を復元する復元ステップと
を実行することを特徴とする復元方法。
【０１１２】
（付記９）コンピュータに、
付記１に記載の履歴テーブルに含まれる前記基準位置から入れ替える前の前記第４データまでの距離を基にして、前記基準位置を算出する基準位置算出手順と、
前記基準位置と、前記入れ替えたデータを移動させた距離と、前記基準位置から入れ替える前の前記第４データまでの距離とを基にして、入れ替えられた第４データと第５データとの組を判定するデータ判定手順と、
前記データ判定ステップによって判定された同一の組の第４データと第５データとを入れ替えることで、データ列を復元する復元手順と
を実行させることを特徴とする復元プログラム。
【符号の説明】
【０１１３】
１００  データ圧縮復元装置
１１０  入力部
１２０  出力部
１３０  入出力制御部
１４０  記憶部
１５０  圧縮部
１６０  復元部
【図１】
0005585317.tif 000002
【図２】
0005585317.tif 000003
【図３】
0005585317.tif 000004
【図４】
0005585317.tif 000005
【図５】
0005585317.tif 000006
【図６】
0005585317.tif 000007
【図７】
0005585317.tif 000008
【図８】
0005585317.tif 000009
【図９】
0005585317.tif 000010
【図１０】
0005585317.tif 000011
【図１１】
0005585317.tif 000012
【図１２】
0005585317.tif 000013
【図１３】
0005585317.tif 000014
【図１４】
0005585317.tif 000015
【図１５】
0005585317.tif 000016
【図１６】
0005585317.tif 000017
【図１７】
0005585317.tif 000018
【図１８】
0005585317.tif 000019
【図１９】
0005585317.tif 000020
【図２０】
0005585317.tif 000021
【図２１】
0005585317.tif 000022