(57)【特許請求の範囲】
【請求項１】
データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルと、
圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定部と、
前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭に初期設定された点であって、処理の経過とともに移動する点である原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理部と、
前記置換処理部によってデータの位置が入れ替えられた前記圧縮対象のデータ列を、ランレングス符号化する符号化部と
を備えたことを特徴とする圧縮装置。
【請求項２】
データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルを保持する圧縮装置が、
圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定ステップと、
前記異なるデータが現れた位置から前記移動距離判定ステップが判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定ステップが判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭に初期設定された点であって、処理の経過とともに移動する点である原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理ステップと、
前記置換処理ステップによってデータの位置が入れ替えられた前記圧縮対象のデータ列を、ランレングス符号化する符号化ステップと
を実行することを特徴とする圧縮方法。
【請求項３】
データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルを保持するコンピュータに、
圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定手順と、
前記異なるデータが現れた位置から前記移動距離判定手順が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定手順が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭に初期設定された点であって、処理の経過とともに移動する点である原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理手順と
前記置換処理手順によってデータの位置が入れ替えられた前記圧縮対象のデータ列を、ランレングス符号化する符号化手順と
を実行させることを特徴とする圧縮プログラム。
【請求項４】
復元対象のデータ列を、ランレングス復号する復号部と、
データ列の先頭に初期設定された点であって、処理の経過とともに移動する点である原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とが格納された履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離を基にして、前記原点を算出する原点算出部と、
前記原点と、前記履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離と、前記入れ替えたデータ間の距離とを基にして、前記復号部によって復号されたデータ列においてデータの組を判定するデータ判定部と、
前記データ判定部によって判定された同一の組のデータを入れ替えることでデータ列を復元する復元部と
を備えたことを特徴とする復元装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮装置、圧縮方法、圧縮プログラムおよび復元装置に関する。
【背景技術】
【０００２】
従来、オリジナルのデータ列の内容を損なわずにデータ量を圧縮したり、圧縮されたデータ列をオリジナルのデータ列に復元したりするデータ圧縮・復元技術が開発されている。この技術の一つとして、ＲＬＥ（Run  Length  Encoding、ランレングス方式）が存在する。このＲＬＥは、同じデータが連続するデータ列を、データ種別とデータが連続する長さとのペアで符号化する技術である。
【０００３】
例えば、下記の式（１）で示されるデータ列ＳがＲＬＥによって符号化されると、データ列Ｓの連続する並び「ｂｂｂｂ」は、「ｂ，４」に圧縮される。データ列Ｓの他の並びについても同様に符号化されると、データ列Ｓは、下記の式（２）で示されるデータ列ＲＬＥ（Ｓ）に圧縮される。この場合、データ列Ｓのデータ量は１９バイトであり、データ列ＲＬＥ（Ｓ）のデータ量は１２バイトであるので、データ列Ｓのデータ量は７バイト分圧縮される。
【０００４】
Ｓ＝ｂｂｂｂａａｂｂｂｂｃｃｃｂｂｂｄｄｄ・・・（１）
ＲＬＥ（Ｓ）＝（ｂ，４）（ａ，２）（ｂ，４）（ｃ，３）（ｂ，３）（ｄ，３）・・・（２）
【０００５】
しかし、同じデータが連続することが少ないデータ列に対してＲＬＥを実行すると、却ってデータ量を増大させてしまうことがある。例えば、下記の式（３）で示されるデータ列ＳがＲＬＥによって符号化されると、データ列Ｓは、下記の式（４）で示されるデータ列ＲＬＥ（Ｓ）となる。この場合、データ量は、９バイトから１４バイトとなり、５バイト分増大してしまう。このため、同じデータが連続するように各データを移動させ、効率よく圧縮できるようにデータ列を変換してからＲＬＥで圧縮する改良技術が存在する。
【０００６】
Ｓ＝ａｂｃｃａｂａａｂ・・・（３）
ＲＬＥ（Ｓ）＝（ａ，１）（ｂ，１）（ｃ，２）（ａ，１）（ｂ，１）（ａ，２）（ｂ，１）・・・（４）
【０００７】
例えば、この改良技術では、先頭を０番目とした場合に、式（３）に示したデータ列Ｓの１番目のデータ「ｂ」を４番目に移動させて、データ「ｂ」が連続するようにする。データ列Ｓの他のデータについても、同じデータが連続するように移動させ、データ列Ｓを、下記の式（５）で示されるデータ列Ｔに変換する。そして、このデータ列ＴがＲＬＥによって符号化されると、データ列Ｔは、下記の式（６）で示されるデータ列ＲＬＥ（Ｔ）となる。この場合、データ量は、９バイトから６バイトとなり、３バイト分圧縮される。
【０００８】
Ｔ＝ａａａａｂｂｂｃｃ・・・（５）
ＲＬＥ（Ｔ）＝（ａ，４）（ｂ，３）（ｃ，２）・・・（６）
【０００９】
ところで、この改良技術で圧縮されたデータ列ＲＬＥ（Ｔ）からデータ列Ｓを復元する過程で、データ列Ｔをデータ列Ｓに逆変換する必要がある。この改良技術では、データ列Ｓがデータ列Ｔに変換される際に、各データの移動前の位置と移動後の位置との対応関係を示す変換関数πを生成しておき、この変換関数πを利用して逆変換を行う。図２５は、従来の変換関数の一例を示す図である。図２５に示すように、変換関数πは、データ列Ｓのｎ番目と、データ列Ｔのπ（ｎ）番目とを対応させている。つまり、データ列Ｓのｎ番目のデータをＳ［ｎ］とし、データ列Ｔのπ（ｎ）番目のデータをＴ［π（ｎ）］とすると、Ｓ［ｎ］＝Ｔ［π（ｎ）］が成り立つ。例えば、データ列Ｓの１番目のデータを復元する場合には、Ｓ［１］＝Ｔ［４］となるので、データ列Ｔの４番目の「ｂ」をデータ列Ｓの１番目に移動させる。このように、変換関数πを用いて、データ列Ｔの各データを順次移動させることで、データ列Ｔをデータ列Ｓに逆変換する。なお、ｎは非負整数（０，１，２・・・ｎ）である。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】昌達Ｋ’ｚ著、“圧縮アルゴリズム”、ソフトバンクパブリッシング
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、上記従来技術では、効率よくデータ列を圧縮することができないという問題があった。
【００１２】
例えば、上記従来技術では、同じデータが連続する並びをより長くするために、各データを移動させるパターンをいくつも試みる必要があった。このため、オリジナルのデータ列が長くなると、パターンの数は指数関数的に増加し、膨大な処理負荷がかかっていた。
【００１３】
また、例えば、上記従来技術では、変換したデータ列を逆変換するために、変換関数を記憶する必要があった。このため、効率よく圧縮できるようにデータ列を変換してからＲＬＥで圧縮したとしても、変換関数を含む全体のデータ量はほとんど圧縮されておらず、却って全体のデータ量が増加してしまうこともあった。
【００１４】
開示の技術は、上記に鑑みてなされたものであって、効率よくデータ列を圧縮することができる圧縮装置、圧縮方法、圧縮プログラムおよび復元装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本願の開示する技術は、一つの態様において、移動距離テーブルと、移動距離判定部と、置換処理部とを備える。移動距離テーブルは、データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する。移動距離判定部は、前記圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する。置換処理部は、前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させる。また、置換処理部は、前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替える。そして、置換処理部は、データを入れ替え後、圧縮対象のデータ列の先頭の原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる。
【発明の効果】
【００１６】
本願の開示する技術の一つの態様によれば、効率よくデータ列を圧縮することができるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】図１は、本実施例にかかるデータ圧縮復元装置の構成を示す図である。
【図２】図２は、戻り距離閾値表のデータ構造の一例を示す図である。
【図３】図３は、置換履歴表のデータ構造の一例を示す図（１）である。
【図４】図４は、各種用語を説明するための図である。
【図５】図５は、文字列変換部の処理を詳細に説明するための図（１）である。
【図６】図６は、文字列変換部の処理を詳細に説明するための図（２）である。
【図７】図７は、文字列変換部の処理を詳細に説明するための図（３）である。
【図８】図８は、文字列変換部の処理を詳細に説明するための図（４）である。
【図９】図９は、文字列変換部の処理を詳細に説明するための図（５）である。
【図１０】図１０は、文字列変換部の処理を詳細に説明するための図（６）である。
【図１１】図１１は、文字列変換部の処理を詳細に説明するための図（７）である。
【図１２】図１２は、文字列変換部が一時的に保持する置換履歴表のデータ構造の一例を示す図（１）である。
【図１３】図１３は、文字列変換部が一時的に保持する置換履歴表のデータ構造の一例を示す図（２）である。
【図１４】図１４は、文字列変換部が一時的に保持する置換履歴表のデータ構造の一例を示す図（３）である。
【図１５】図１５は、置換履歴表のデータ構造の一例を示す図（２）である。
【図１６】図１６は、原点の情報を復元する処理を説明するための図である。
【図１７】図１７は、文字列逆変換部の処理を詳細に説明するための図（１）である。
【図１８】図１８は、文字列逆変換部の処理を詳細に説明するための図（２）である。
【図１９】図１９は、圧縮部の処理手順を示すフローチャートである。
【図２０】図２０は、閾値表生成処理の処理手順を示すフローチャートである。
【図２１】図２１は、文字列変換処理の処理手順を示すフローチャートである。
【図２２】図２２は、文字列逆変換部の処理手順を示すフローチャートである。
【図２３】図２３は、置換履歴表のデータ構造の一例を示す図（３）である。
【図２４】図２４は、圧縮復元プログラムを実行するコンピュータの一例を示す図である。
【図２５】図２５は、従来の変換関数の一例を示す図である。
【発明を実施するための形態】
【００１８】
以下に、本願の開示する圧縮装置、圧縮方法、圧縮プログラムおよび復元装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例】
【００１９】
本実施例にかかるデータ圧縮復元装置の構成の一例について説明する。図１は、本実施例にかかるデータ圧縮復元装置の構成を示す図である。図１に示すように、このデータ圧縮復元装置１００は、入力部１１０、出力部１２０、入出力制御部１３０、記憶部１４０、圧縮部１５０、復元部１６０を有する。
【００２０】
入力部１１０は、各種情報の入力を受け付ける入力装置である。例えば、入力部１１０は、キーボードやマウスなどに対応する。出力部１２０は、各種情報を出力する出力装置である。例えば、出力部１２０は、ディスプレイやモニタなどに対応する。入出力制御部１３０は、入力部１１０、出力部１２０、記憶部１４０、圧縮部１５０、復元部１６０の間における各種情報の入出力を制御する処理部である。例えば、入出力制御部１３０は、各種情報の入出力を制御するＡＳＩＣ（Application  Specific  Integrated  Circuit）等に対応する。
【００２１】
記憶部１４０は、入力ファイル１４１と、戻り距離閾値表１４２と、置換履歴表１４３と、出力ファイル１４４とを有する。記憶部１４０は、例えば、ＲＡＭ（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）２０６と、ハードディスク装置２０７を有する。各装置２０１〜２０７は、バス２０８に接続される。
【０１０１】
ハードディスク装置２０７は、上述したデータ圧縮復元装置１００の機能と同様の機能を発揮する圧縮プログラム２０７ａと、復元プログラム２０７ｂと、各種データ２０７ｃとを記憶する。各種データ２０７ｃは、図１に示した入力ファイル１４１、戻り距離閾値表１４２、置換履歴表１４３、出力ファイル１４４等に対応する。なお、圧縮プログラム２０７ａと、復元プログラム２０７ｂと、各種データ２０７ｃとを適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。
【０１０２】
そして、ＣＰＵ２０１が圧縮プログラム２０７ａをハードディスク装置２０７から読み出してＲＡＭ２０６に展開することにより、圧縮プログラム２０７ａは、圧縮プロセス２０６ａとして機能する。この圧縮プロセス２０６ａは、図１に示した圧縮部１５０に対応する。
【０１０３】
ＣＰＵ２０１が復元プログラム２０７ｂをハードディスク装置２０７から読み出してＲＡＭ２０６に展開することにより、復元プログラム２０７ｂは、復元プロセス２０６ｂとして機能する。この復元プロセス２０６ｂは、図１に示した復元部１６０に対応する。また、ＣＰＵ２０１は、ハードディスク装置２０７から各種データ２０７ｃを読み出して、ＲＡＭ２０６に格納する。
【０１０４】
圧縮プロセス２０６ａは、各種データ２０６ｃに含まれる入力ファイルに対して圧縮処理を実行する。復元プロセス２０６ｂは、各種データ２０６ｃに含まれる圧縮済みの文字列を、置換履歴表に基づいて復元する。
【０１０５】
なお、圧縮プログラム２０７ａおよび復元プログラム２０７ｂについては、必ずしも最初からハードディスク装置２０７に記憶させておく必要はない。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の「可搬用の記憶媒体」に各プログラムを記憶させておく。そして、コンピュータ２００がこれらから各プログラムを読み出して実行するようにしても良い。
【０１０６】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１０７】
（付記１）データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルと、
前記圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定部と、
前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定部が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭の原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理部と
を備えたことを特徴とする圧縮装置。
【０１０８】
（付記２）データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルを保持する圧縮装置が、
前記圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定ステップと、
前記異なるデータが現れた位置から前記移動距離判定ステップが判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定ステップが判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭の原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理ステップと
を実行することを特徴とする圧縮方法。
【０１０９】
（付記３）データと、該データを入れ替えるか否かを決める該データの出現頻度に応じた該データを移動させ得る移動距離の閾値と、を対応付けて記憶する移動距離テーブルを保持するコンピュータに、
前記圧縮対象のデータ列の注目位置からデータを読み進め、注目位置のデータとは異なるデータが現れた場合に、前記異なるデータと前記移動距離テーブルとを基にして、前記異なるデータを移動させ得る移動距離を判定する移動距離判定手順と、
前記異なるデータが現れた位置から前記移動距離判定手順が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在しない場合には、前記注目位置を前記異なるデータが現れた位置に移動させ、
前記異なるデータが現れた位置から前記移動距離判定手順が判定した移動距離を超えない範囲に、前記異なるデータと同じデータが存在する場合には、該同じデータの次のデータと前記異なるデータとを入れ替え、圧縮対象のデータ列の先頭の原点から入れ替えたデータまでの距離と、入れ替えたデータ間の距離とを履歴テーブルに格納し、入れ替えたデータの位置に前記原点と前記注目位置とを移動させる置換処理手順と
を実行させることを特徴とする圧縮プログラム。
【０１１０】
（付記４）付記１に記載の履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離を基にして、前記原点を算出する原点算出部と、
前記原点と、前記履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離と、前記入れ替えたデータ間の距離とを基にして、入れ替えられたデータの組を判定するデータ判定部と、
前記データ判定部によって判定された同一の組のデータを入れ替えることでデータ列を復元する復元部と
を備えたことを特徴とする復元装置。
【０１１１】
（付記５）復元装置が、
付記１に記載の履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離を基にして、前記原点を算出する原点算出ステップと、
前記原点と、前記履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離と、前記入れ替えたデータ間の距離とを基にして、入れ替えられたデータの組を判定するデータ判定ステップと、
前記データ判定ステップによって判定された同一の組のデータを入れ替えることでデータ列を復元する復元ステップと
を実行することを特徴とする復元方法。
【０１１２】
（付記６）コンピュータに、
付記１に記載の履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離を基にして、前記原点を算出する原点算出手順と、
前記原点と、前記履歴テーブルに含まれる前記原点から入れ替えたデータまでの距離と、前記入れ替えたデータ間の距離とを基にして、入れ替えられたデータの組を判定するデータ判定手順と、
前記データ判定手順によって判定された同一の組のデータを入れ替えることでデータ列を復元する復元手順と
を実行させることを特徴とする復元プログラム。
【符号の説明】
【０１１３】
１００      データ圧縮復元装置
１１０      入力部
１２０      出力部
１３０      入出力制御部
１４０      記憶部
１４１      入力ファイル
１４２      戻り距離閾値表
１４３      置換履歴表
１４４      出力ファイル
１５０      圧縮部
１５１      閾値表生成部
１５２      文字列変換部
１５３      ＲＬＥ符号化部
１６０      復元部
１６１      ＲＬＥ復号化部
１６２      文字列逆変換部
２００      コンピュータ
２０１      ＣＰＵ
２０２      入力装置
２０３      モニタ
２０４      媒体読み取り装置
２０５      ネットワークインターフェース装置
２０６ａ    圧縮プロセス
２０６ｂ    復元プロセス
２０６ｃ    各種データ
２０７      ハードディスク装置
２０７ａ    圧縮プログラム
２０７ｂ    復元プログラム
２０７ｃ    各種データ
２０８      バス
【図１】
0005585336.tif 000002
【図２】
0005585336.tif 000003
【図３】
0005585336.tif 000004
【図４】
0005585336.tif 000005
【図５】
0005585336.tif 000006
【図６】
0005585336.tif 000007
【図７】
0005585336.tif 000008
【図８】
0005585336.tif 000009
【図９】
0005585336.tif 000010
【図１０】
0005585336.tif 000011
【図１１】
0005585336.tif 000012
【図１２】
0005585336.tif 000013
【図１３】
0005585336.tif 000014
【図１４】
0005585336.tif 000015
【図１５】
0005585336.tif 000016
【図１６】
0005585336.tif 000017
【図１７】
0005585336.tif 000018
【図１８】
0005585336.tif 000019
【図１９】
0005585336.tif 000020
【図２０】
0005585336.tif 000021
【図２１】
0005585336.tif 000022
【図２２】
0005585336.tif 000023
【図２３】
0005585336.tif 000024
【図２４】
0005585336.tif 000025
【図２５】
0005585336.tif 000026