(57)【要約】最近一致位置リストを過去に出現した一致文字列の候補の絞り込みに用い、候補となった入力バッファ中の文字列を比較することで一致文字列を検出して符号化する。入力部は、入力バッファに被圧縮データ列を入力して保持する。最近一致位置リスト生成部は、入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した相対位置を格納した最近一致位置リストを生成して保持する。繰返し候補取得部は、最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する。一致検出部は、取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、候補位置からの最長一致した文字列を検出する。符号生成部は、検出した一致文字列の一致長と相対位置により符号化する。
2004062110.tif 000002
【特許請求の範囲】
【請求項１】
被圧縮データ列から圧縮データを生成するデータ圧縮方法に於いて、
入力部により、入力バッファに被圧縮データ列を入力して保持する入力ステップと、
最近一致位置リスト生成部により、前記入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した位置を格納した最近一致位置リストを生成して保持するリスト生成ステップと、
繰返し候補取得部により、前記最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得ステップと、
一致検出部により、取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、前記繰返し候補の位置からの一致した文字列を検出する一致検出ステップと、
符号生成部により、検出した一致文字列を符号化する符号生成ステップと、
を備えたことを特徴とするデータ圧縮方法。
【請求項２】
請求の範囲１のデータ圧縮方法に於いて、
前記候補取得ステップは、符号化位置をアドレスとして前記最近一致位置リストから取得した格納値を文字列の繰返し位置の第１候補とし、
前記一致検出ステップは、前記第１候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、一致した文字列を取得して符号化させることを特徴とするデータ圧縮方法。
【請求項３】
請求の範囲２のデータ圧縮方法に於いて、
前記候補取得ステップは、更に、
前記第１候補を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に前記第１候補に続く１又は複数の後続候補を取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするデータ圧縮方法。
【請求項４】
請求の範囲３のデータ圧縮方法に於いて、前記候補取得ステップは、後続候補を取得した際に、取得した後続候補の値を次に後続する候補を取得するための評価値とすることを特徴とするデータ圧縮方法。
【請求項５】
請求の範囲２のデータ圧縮方法に於いて、
前記候補取得ステップは、更に、
前記第１候補をアドレスとして前記最近一致位置リストから取得した値を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に第１候補に続く１又は複数の後続候補を取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするデータ圧縮方法。
【請求項６】
請求の範囲５のデータ圧縮方法に於いて、前記候補取得ステップは、後続候補を取得した際に、取得した後続候補の値を次に後続する候補を取得するための評価値とすることを特徴とするデータ圧縮方法。
【請求項７】
請求の範囲２のデータ圧縮方法に於いて、
前記候補取得ステップは、更に、第１候補に続く１又は複数の後続候補として、先行する候補をアドレスとして前記最近一致位置リストから取得した格納値を後続候補とし、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を取得して符号化させることを特徴とするデータ圧縮方法。
【請求項８】
請求の範囲２のデータ圧縮方法に於いて、
前記候補取得ステップは、更に、
前記第１候補を評価値とし、前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に前記第１候補に続く１又は複数の後続候補とし、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、符号化位置の文字列との一致長の最も長い文字列を改定第１候補として取得する第１ステップと、
前記改定第１候補に続く１又は複数の後続候補として、先行する候補をアドレスとして前記最近一致位置リストから取得した格納値を改定後続候補とする第２ステップと、
を備え、
前記一致検出ステップは、前記改定第１候補及び改定後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするデータ圧縮方法。
【請求項９】
請求の範囲１のデータ圧縮方法に於いて、前記符号生成ステップは、符号化位置からの文字列を、検出された一致文字列の相対位置と一致長で符号化することを特徴とするデータ圧縮方法。
【請求項１０】
コンピュータに、
入力バッファに被圧縮データ列を入力して保持する入力ステップと、
前記入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した位置を格納した最近一致位置リストを生成して保持するリスト生成ステップと、
前記最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得ステップと、
取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、前記繰返し候補の位置からの一致した文字列を検出する一致検出ステップと、
検出した一致文字列を符号化する符号生成ステップと、
を実行させることを特徴とするプログラム。
【請求項１１】
請求の範囲１０のプログラムに於いて、
前記候補取得ステップは、符号化位置をアドレスとして前記最近一致位置リストから取得した格納値を文字列の繰返し位置の第１候補とし、
前記一致検出ステップは、前記第１候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、一致した文字列を検出して符号化させることを特徴とするプログラム。
【請求項１２】
請求の範囲１１のプログラムに於いて、
前記候補取得ステップは、更に、
前記第１候補を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に前記第１候補に続く１又は複数の後続候補として取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするプログラム。
【請求項１３】
請求の範囲１２のプログラムに於いて、前記候補取得ステップは、後続候補を取得した際に、取得した後続候補の値を次に後続する候補を取得するための評価値とすることを特徴とするプログラム。
【請求項１４】
請求の範囲１１のプログラムに於いて、
前記候補取得ステップは、更に、
前記第１候補をアドレスとして前記最近一致位置リストから取得した値を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に第１候補に続く１又は複数の後続候補を取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするプログラム。
【請求項１５】
請求の範囲１４のプログラムに於いて、前記候補取得ステップは、後続候補を取得した際に、取得した後続候補の値を次に後続する候補を取得するための評価値とすることを特徴とするプログラム。
【請求項１６】
請求の範囲１１のプログラムに於いて、
前記候補取得ステップは、更に、第１候補に続く１又は複数の後続候補として、先行する候補をアドレスとして前記最近一致位置リストから取得した格納値を後続候補とし、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするプログラム。
【請求項１７】
請求の範囲１１のプログラムに於いて、
前記候補取得ステップは、更に、
前記第１候補を評価値とし、前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に前記第１候補に続く１又は複数の後続候補とし、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、符号化位置の文字列との一致長の最も長い文字列を改定第１候補とする第１ステップと、
前記改定第１候補に続く１又は複数の改定後続候補として、先行する候補をアドレスとして前記最近一致位置リストから取得した格納値を改定後続候補とする第２ステップと、
を備え、
前記一致検出ステップは、前記改定第１候補及び改定後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を取得して符号化させることを特徴とするプログラム。
【請求項１８】
請求の範囲１０のプログラムに於いて、前記符号生成ステップは、符号化位置からの文字列を、検出された一致文字列の相対位置と一致長で符号化することを特徴とするプログラム。
【請求項１９】
被圧縮データ列から圧縮データを生成するデータ圧縮装置に於いて、
入力バッファに被圧縮データ列を入力して保持する入力バッファと、
前記入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した位置を格納した最近一致位置リストを生成して保持する最近一致位置リスト生成部と、
前記最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得部と、
取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、前記候補位置からの一致した文字列を検出する一致検出部と、
検出した一致文字列を符号化する符号生成部と、
を備えたことを特徴とするデータ圧縮装置。
【発明の詳細な説明】
【技術分野】  本発明は、被圧縮データ列から圧縮データを生成するデータ圧縮方法、プログラム及び装置に関し、特に、被圧縮データ列から生成される辞書を用いて、そのデータ列を圧縮するデータ圧縮方法、プログラム及び装置に関する。
【背景技術】  近年、文字コード、画像データ等の様々な種類のデータがコンピュータで扱われるようになるのに伴い、取り扱われるデータ量も増大している。そのような大量のデータを扱う場合、データ中の冗長な部分を省いて圧縮することにより、必要な記憶容量を減らしたり、遠隔地へ高速に伝送したりすることができる。
ここで本発明は、文字コードの圧縮に限らず、様々なデータの圧縮に適用できるが、以下の説明では情報理論に基づき、データ列をワード単位に分割し、１ワードのデータを文字と呼び、任意のワード数のデータ列を文字列と呼ぶことにする。
従来のデータ圧縮技術には、データ系列の類似性を利用した辞書型符号化と、データ列の出現頻度を利用した確率統計型符号化とがある。このうち、前者の辞書型符号化の代表的な方法として、ＬＺ７７符号化とＬＺ７８符号化が知られている（植松友彦箸、「文書データ圧縮アルゴリズム入門」、ＣＱ出版、ｐｐ．１３１−２０８，１９９５年）。
ＬＺ７７符号化とＬＺ７８符号化では、ＬＺ７７符号化の方が、簡単な処理で充分な圧縮率が得られることから、実際の使用では主流となっている。ＬＺ７７符号化では、図１に示すように、一定サイズのスライドバッファ１００を設け、このバッファ１００内で入力文字列と最長一致する文字列を検索し、その位置と長さを用いて入力文字列を符号化する。符号化が進むにつれてバッファ１００をスライドさせていくことから、この符号化方法は、スライド辞書法とも呼ばれる。図１では、バッファ２００の右隣の入力文字列“ａｂｃｄａａａｑ．．．”が符号化されるとき、バッファ２００内で一致する文字列のうち最長のものは“ａｂｃｄ”である。そこで、この最長一致文字列の先頭位置と入力文字列の先頭位置の相対アドレス“５（バイト）”を一致位置とし、最長一致文字列の長さ“４（バイド）”を一致長として、（一致位置，一致長）＝（５，４）のような符号を生成する。これにより、入力文字列の先頭の“ａｂｃｄ”が（５，４）に置き換えられる。同様にして、次の文字列“ａａａ”は、符号（１３，３）に置き換えられる。しかし、実際に用いられるスライドバッファはもっと長く、最長一致する文字列を発見するためにバッファ内の文字列を順に検索していくと、膨大な時間を要する。このため、実際には、バッファ内のすべての文字列と照合するのではなく、文字列の接頭部（２〜４文字程度）の出現位置を随時テーブルに登録し、テーブルに保持されている位置の文字列のみと照合している。このような検索に使用されるテーブルとしては、ルックアップテーブル（Ｌｏｏｋ  Ｕｐ  Ｔａｂｌｅ，ＬＵＴ）とハッシュテーブル（Ｈａｓｈ  Ｔａｂｌｅ）とがある。
図２は、ＬＵＴを用いた文字列検索を示している。ＬＵＴ２０２は、バッファ２００内の文字列の接頭部をアドレスとして、その文字列のバッファ２００内における出現位置（アドレスまたはポインタ）を格納している。そして、検索時には、入力文字列の接頭部をアドレスとして、ＬＵＴ２０２の領域にアクセスし、対応する文字列の位置を取得する。同じ接頭部の文字列がバッファ１００内に複数存在する場合は、図３のように、リンクドリスト２０４の形式で複数の出現位置が保持される。したがって、ＬＵＴ２０２に１回アクセスするだけで、バッファ２００内のすべての対応する文字列の位置を取得することができる。ここでは、２文字分の接頭部が用いられており、入力文字列の接頭部“ａｂ”に対応するＬＵＴ２０２の領域は、リンクドリスト１０４を利用して２つの出現位置を保持している。
このように、ＬＵＴは、検索する接頭部をテーブルの領域に１対１に対応させ、１回のテーブル引きのみで必要な情報を取得できるため、非常に高速な検索を行うことができる。しかし、長い文字列を検索する場合、テーブルに必要な領域の数は出現可能な文字の数の巾乗で増えるため、必要な領域が膨大になる。例えば、出現可能な文字の数を８ビット、２５６個とすると、ｎ文字の接頭部に対して２５６のｎ乗個の領域が必要となる。ところが、検索する接頭部を長くすると、用意された領域のうち実際に使用される（登録される）部分は一部分のみに止まり、テーブル内はまばらな状態になる。したがって、検索する接頭部を長くすると、メモリの使用効率が悪化する。そこで、ハッシュテーブルでは、検索文字列をアドレスとして用いる際に、一定の数値以下に縮退させて、複数の文字列が１つの領域を共有するようにしている。このため、テーブル引きの後で、得られた文字列が実際に検索している文字列かどうかをチェックする必要があるが、ＬＵＴに比べて、同等のテーブル領域でより長い文字列を検索することができる。
図４は、ハッシュテーブルを用いた文字列検索を示している。ハッシュコード生成部２０６は、入力文字列の接頭部“ａｂｃ”からハッシュコード２０８を生成し、それをアドレスとしてハッシュテーブル２１０にアクセスする。ハッシュブーブル２１０には、ハッシュコード２０８に対応するバッファ２００内の位置が格納されており、その位置にある文字列“ａｂｃｄｅ”と入力文字列を照合することで、両者の接頭部が一致するかどうかがチェックされる。そして、それらが一致すれば、入力文字列と一致する文字列がバッファ２００内に存在すると判断される。ハッシュテーブルの場合も、ＬＵＴの場合と同様に、バッファ内の同じ接頭部を持つ複数の文字列に対しては、リンクドリストの形式で複数の出現位置が保持される。いずれの場合も、リンクドリストは、最長一致文字列を検索するために用いられる。
しかしながら、このような従来のデータ圧縮技術には、次のような問題がある。まずＬＵＴを用いて長い文字列を検索する場合、膨大な領域を持つテーブルを用意しても、その一部分のみしか使用されないので、テーブル内はまばらな状態になる。ハッシュテーブルでは、ＬＵＴと比べるとテーブルサイズが小さくなるが、入力データが少なければ、同じようにテーブル内がまばらな状態になる。したがって、メモリが必ずしも有効に利用されないという問題がある。また、最長一致文字列を検索する際、リンクドリストに保持された複数の出現位置を一つ一つ辿らなければならず、同じ接頭部を持つ文字列が多くなると、検索処理に時間がかかるという問題もある。
この問題を解決するため本願発明者等にあっては、入力データ量に比例した少ないメモリ量で検索できるデータ圧縮方法を提案している（日本国特許出願：特願２０００−９８８３４）。この方法は、従来のように符号化を進めながら順次、検索テーブルに登録して行くのではなく、入力バッファを設け、入力バッファ用の検索テーブルを一度で作り上げる方法である。検索には、入力バッファ中の各アドレスを起点とした文字列を、文字列の内容に従って並びかえた順位リストを利用する。中でも、順位リストから最近一致位置リストを生成し、最近一致位置リストから同じ数字が続く箇所を検出して一致を見つける方法が最も少ないメモリ量で実装することが出来る。
図５は、本願発明者が提案している方法で使用される入力バッファ、順位リスト及び最近一致位置リストの具体例である。この方法は次の手順で処理される。
（データ入力とリスト生成）
図５（Ａ）入力バッファ２１２にバッファサイズのデータを入力し、符号化対象位置アドレスｔをｔ＝１に初期化し、図５（Ｂ）の順位リスト２１４と図５（Ｃ）の最近一致位置リスト２１６を作成する。ここで、順位リスト２１４は、入力バッファ２１２の各アドレスを始点とする３文字列を数値順にソートして作成する。また最近一致位置リスト２１６は、最も最近に出現したアドレスの相対位置を格納する。例えばアドレス１５からの文字列「ｃｏｍ」が最も最近に出現したのはアドレス１、相対位置１４であることから、最近一致位置リスト２１６のアドレス１５に相対位置１４を格納する。なお、特願２０００−９８８３４号ではアドレスそのものを最近一致位置リストに格納しており、この場合、最近一致位置リスト２１６のアドレス１５にはアドレス１を格納する。
（一致文字列の検出と符号化）
最近一致位置リスト２１６の中の同じ数字が連続する部分をから一致文字列を検出して符号化する。図５（Ｄ）の最近一致位置リスト２１６について見ると、アドレス１５〜２０に数字１４が連続し、アドレス２４〜２９に数字９が連続し、アドレス３０〜３１に数字２３が連続している。まずアドレス１５〜２０に連続する数字１４は、アドレス１５−１４＝１からの文字列と一致し、一致長は６＋２＝８で一致位置が１４となり、（一致長，位置）＝（８，１４）が符号として生成される。またアドレス２４〜２９，３０〜３２に連続する数字９，２３は、アドレス２４−２３＝１からの文字列と一致し、一致長は９＋２＝１１で一致位置が２３となり、（一致長，位置）＝（１１，２３）が符号として生成される。
しかしながら、図５に示したデータ圧縮方法は、最近一致位置リストから同じ数字が連続する箇所を検出することによって一致文字列を検出しているが、図６（Ａ）の入力バッファ１１２のように、長い文字列の繰返しの間に、長い文字列を形成している短い文字列の繰返しが出現するようなデータでは、最長一致を検出することができない。即ち、図６（Ａ）の入力バッファ２１２にあっては、アドレス１，１６からの長い文字列「ａｂｃｄｅｆ」の間に、アドレス７，１０，１３からの短い文字列「ａｂｃ」、「ｃｄｅ」が繰り返されているが、入力バッファ２１２のデータから生成された図６（Ｂ）の最近一致位置リスト２１６には同じ数字が連続した個所がなく、文字列「ａｂｃｄｅｆ」の繰返しが検出できないという問題がある。
【発明の開示】
本発明は、最近一致位置リストに同じ数字の連続がなくとも一致文字列の繰返しを検出して符号化できるデータ圧縮方法、プログラム及び装置を提供することを目的とする。
本発明は、最近一致位置リストを過去に出現した一致文字列の候補の絞り込みに用い、候補となった入力バッファ中の文字列を比較することで一致文字列を検出して符号化することを基本とする。
（方法）
本発明は、被圧縮データ列から圧縮データを生成するデータ圧縮方法を提供する。このデータ圧縮方法は、
入力部により、入力バッファに被圧縮データ列を入力して保持する入力ステップと、
最近一致位置リスト生成部により、入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した相対位置を格納した最近一致位置リストを生成して保持するリスト生成ステップと、
候補取得部により、最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得ステップと、
一致検出部により、取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、繰返し候補の位置からの一致した文字列を検出する一致検出ステップと、
符号生成部により、検出した一致文字列を符号化する符号生成ステップと、
を備えたことを特徴とする。
ここで候補取得ステップは、符号化位置をアドレスとして最近一致位置リストから取得した格納値を文字列の繰返し位置の第１候補とし、一致検出ステップは、第１候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、一致した文字列を取得して符号化させる。
このような本発明のデータ圧縮方法によれば、最近一致位置リストに同じ数字の連続がなくとも、最近一致位置リストで候補を絞り込むことで、一致文字列の繰返しを検出して符号化する処理を高速で実現できる。また入力バッファ中の文字列の比較で一致検出することで、より長い文字列の一致検出ができる。更に、検索テーブルとして使用するのは、入力バッファと最近一致位置リストのみであるため、少ないメモリ量で実装できる。
本発明のデータ圧縮方法における候補取得ステップの第１形態は、更に、
第１候補を評価値とする第１ステップと、
符号化位置に後続する各位置をアドレスとして最近一致位置リストから取得した格納値と評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に第１候補に続く１又は複数の後続候補とする第２ステップと、
を備え、
一致検出ステップは、第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を取得して符号化させることを特徴とする。
ここで、候補取得ステップは、後続候補を取得した際に、取得した後続候補の値を次に後続する候補を取得するための評価値としても良い。
また本発明のデータ圧縮方法における候補取得ステップの第２形態は、更に、
第１候補をアドレスとして最近一致位置リストから取得した値を評価値とする第１ステップと、
符号化位置に後続する各位置をアドレスとして最近一致位置リストから取得した格納値と評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に第１候補に続く１又は複数の後続候補とする第２ステップと、
を備え、
一致検出ステップは、第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とする。
この場合にも、候補取得ステップは、後続候補を取得した際に、取得した後続候補の値をアドレスとして最近一致位置リストから取得した値を次に後続する候補を取得するための評価値としても良い。
また本発明のデータ圧縮方法における候補取得ステップの第３形態は、更に、第１候補に続く１又は複数の後続候補として、先行する候補をアドレスとして最近一致位置リストから取得した格納値を後続候補とし、一致検出ステップは、第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を取得して符号化させることを特徴とする。
更に本発明のデータ圧縮方法における候補取得ステップの第４形態は、更に、
第１候補を評価値とし、符号化位置に後続する各位置をアドレスとして最近一致位置リストから取得した格納値と評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に第１候補に続く１又は複数の後続候補とし、第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、符号化位置の文字列との一致長の最も長い文字列を改定第１候補とする第１ステップと、
改定第１候補に続く１又は複数の改定後続候補として、先行する候補をアドレスとして前記最近一致位置リストから取得した格納値を改定後続候補とする第２ステップと、
を備え、
一致検出ステップは、改定第１候補及び改定後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して号化させることを特徴する。
本発明のデータ圧縮方法における符号生成ステップは、符号化位置からの文字列を、検出された一致文字列の相対位置と一致長で符号化することを特徴とする。
（プログラム）
本発明は、被圧縮データ列から圧縮データを生成するプログラムを提供する。このプログラムは、コンピュータに、
入力バッファに被圧縮データ列を入力して保持する入力ステップと、
入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した相対位置を格納した最近一致位置リストを生成して保持するリスト生成ステップと、
最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得ステップと、
取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、繰返し候補の位置からの一致した文字列を取得する一致検出ステップと、
検出した一致文字列を符号化する符号生成ステップと、
を実行させることを特徴とする。なお、このプログラムの詳細はデータ圧縮方法と基本的に同じになる。
（装置）
本発明は、被圧縮データ列から圧縮データを生成するデータ圧縮装置を提供する。この装置は、
入力バッファに被圧縮データ列を入力して保持する入力バッファと、
入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した相対位置を格納した最近一致位置リストを生成して保持する最近一致位置リスト生成部と、
最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得部と、
取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、繰返し候補の位置からの一致した文字列を検出する一致検出部と、
検出した一致文字列を符号化する符号生成部と、
を備えたことを特徴とする。なお、このデータ圧縮装置の詳細はデータ圧縮方法と基本的に同じになる。
【図面の簡単な説明】図１は従来のＬＺ７７によるデータ圧縮処理の説明図；
図２はＬＺ７７におけるＬＵＴを用いた処理の説明図；
図３はＬＺ７７におけるリンクドリストを用いた処理の説明図；
図４はＬＺ７７におけるハッシュテーブルを用いた処理の説明図；
図５は本願発明者等が提案している最近一致位置リストを用いた一致文字列検索の説明図；
図６は入力バッファで文字列の繰返しがあっても最近一致位置リストで同じ数字が連続しない例の説明図；
図７は本発明の機能構成のブロック図；
図８は本発明の実施形態が適用されるコンピュータのハードウェア環境の説明図；
図９は本発明の第１実施形態によるデータ圧縮処理の説明図；
図１０は図９の第１実施形態によるデータ圧縮処理のフローチャート；
図１１は図１０に続くデータ圧縮処理のフローチャート；
図１２は本発明の第２実施形態によるデータ圧縮処理の説明図；
図１３は図１２の第２実施形態によるデータ圧縮処理のフローチャート；
図１４は図１３に続くデータ圧縮処理のフローチャート；
図１５は本発明の第３実施形態によるデータ圧縮処理の説明図；
図１６は図１５の第３実施形態によるデータ圧縮処理のフローチャート；
図１７は図１６に続くデータ圧縮処理のフローチャート；
図１８は本発明の第４実施形態によるデータ圧縮処理の説明図；
図１９は図１８の第４実施形態によるデータ圧縮処理のフローチャート；
図２０は図１９に続くデータ圧縮処理のフローチャート；
【発明を実施するための最良の形態】  図７は、本発明によるデータ圧縮装置の機能構成のブロック図である。図７において、本発明のデータ圧縮装置は、入力ファイル１０、入力部１１、入力バッファ１２、最近一致位置リスト生成部１４、繰返し候補取得部１６、一致検出部１８、符号生成部２０及び出力ファイル２２で構成される。入力ファイル１０にはデータ圧縮を行う被圧縮データが格納されている。この入力ファイルの被圧縮データは、入力部１Ｉにより入力バッファ１２のバッファサイズ分切り出され、入力バッファ１２に入力されて保持される。最近一致位置リスト生成部１４は、入力バッファ１２に保持された被圧縮データ列における入力バッファ中の各アドレスを起点とする所定長の各文字列、例えば３文字の各文字列が、最も最近に出現した相対位置を格納した最近一致位置リスト２４を生成して保持する。一致検出部１８は、最近一致位置リスト２４を用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する。即ち一致検出部１８は、最近一致位置リスト２４を過去に出現した一致文字列の候補の絞り込みに使用している。符号生成部２０は、一致検出部１８により取得した繰返し候補の位置を起点とする文字列と符号化位置を起点とする文字列を比較し、一致長の最も長い文字列を検出する。更に符号生成部２０は、一致検出部１８で検出した一致文字列を符号化する。この符号化は、検出した一致文字列の（相対位置，一致長）で符号化を行う。符号生成部２０で生成された符号は出力ファイル２２に圧縮データとして格納され、必要に応じてファイル転送やファイル格納が行われることになる。このような本発明のデータ圧縮装置において、繰返し候補取得部１６による最近一致位置リスト２４を用いた繰返し文字列の候補の絞り込み方法として、本発明にあっては、後の第１，第２，第３及び第４実施形態で明らかにする４つの方法がある。
図７における本発明のデータ圧縮装置は，例えば図８のようなコンピュータのハードウェア資源により実現される。図８のコンピュータにおいて、ＣＰＵ１００のバス１０１にはＲＡＭ１０２、ハードディスドコントローラ（ソフト）１０４、フロッピィディスクドライバ（ソフト）１１０、ＣＤ−ＲＯＭドライバ（ソフト）１１４、マウスコントローラ１１８、キーボードコントローラ１２２、ディスプレイコントローラ１２６、通信用ボード１３０が接続される。ハードディスクコントローラ１０４はハードディスクドライブ１０６を接続し、本発明のデータ圧縮処理を実行するアプリケーションプログラムをローディングしており、コンピュータの起動時にハードディスクドライブ１０６から必要なプログラムを呼び出して、ＲＡＭ１０２上に展開し、ＣＰＵ１００により実行する。フロッピィディスクドライバ１１０にはフロッピィディスクドライブ（ハード）１１２が接続され、フロッピィディスク（Ｒ）に対する読み書きができる。ＣＤ−ＲＯＭドライバ１１４に対しては、ＣＤドライブ（ハード）１１６が接続され、ＣＤに記憶されたデータやプログラムを読み込むことができる。マウスコントローラ１１８はマウス１２０の入力操作をＣＰＵ１００に伝える。キーボードコントローラ１２２はキーボード１２４の入力操作をＣＰＵ１００に伝える。ディスプレイコントローラ１２６は表示部１２８に対して表示を行う。通信用ボード１３０は通信回線１３２を使用し、インターネット等のネットワークを介して他のコンピュータやサーバとの間で通信を行う。
図９は、本発明によるデータ圧縮方法の第１実施形態の説明図である。この第１実施形態において、図７の繰返し候補取得部１６は、次の処理を行う。
（１）  符号化位置をアドレスとして、最近一致位置リスト２４から取得した位置を文字列の繰返し位置の第１候補とする。
（２）  第１候補を評価値とする。
（３）  符号化位置に後続する各位置、即ち符号化位置に＋１，＋２，＋３，…＋Ｎとした各位置をアドレスとして、最近一致位置リスト２４から取得した格納値と評価値を比較し、取得した格納値が評価値より過去の値である場合、具体的には取得した格納値が評価値より大きい場合に、符号化位置からの距離が小さい順に、第１候補に続く１または複数の後続候補、即ち第２候補、第３候補…とする。
このような繰返し候補取得部１６により第１候補及び第２候補以降の後続する候補が取得されたならば、図７の一致検出部１８は、第１候補及び後続候補のアドレスを起点とする文字列と符号化位置を起点とする文字列を比較し、一致長の最も長い文字列を取得して符号生成部２０により符号化させる。この第１実施形態の処理を、図９（Ａ）の入力バッファ１２に格納された文字列と、この入力バッファ１２の文字列から生成された図９（Ｂ）の最近一致位置リスト２４を参照して具体的に説明すると次のようになる。
図９（Ａ）の入力バッファ１２に保持された被圧縮データとしての文字列に対し、入力バッファ１２中の各アドレスを起点として所定長例えば３文字の各文字列が最も最近に出現した相対位置を格納した最近一致位置リスト２４が生成される。この最近一致位置リスト２４の生成は、例えば入力バッファ１２のアドレス１からの文字列「ａｂｃ」については、最も最近に出現した文字列がないことから、最近一致位置リスト２４のアドレス１には一致文字列が存在しないことを示す値「０」を保持する。入力バッファ１２のアドレス２〜６についても、それぞれ最も最近に出現した文字列がないことから、最近一致位置リスト２４のアドレス２〜６に０を保持する。続いて入力バッファ１２のアドレス７からの文字列「ａｂｃ」については、最も最近に出現した文字列としてアドレス１からの文字列「ａｂｃ」があることから、７−１＝６となる相対位置を示す値を最近一致位置リスト２４のアドレス７に保持する。以下同様にして、入力バッファ１２に基づき、最近一致位置リスト２４の各アドレスに最近出現した文字列がない場合は０を、文字列がある場合は相対位置を示す値を格納する。このようにして最近一致位置リスト２４が生成できたならば、生成した最近一致位置リスト２４を用いて、図７の繰返し候補取得部１６が繰返し文字列の候補の絞り込みを行う。いま、図９において、入力バッファ１２のアドレス１９が符号化位置２６であったとして説明すると次のようになる。まず入力バッファ１２の符号化位置２６のアドレス１９により最近一致位置リスト２４を参照し、アドレス１９の格納値を文字列の繰返し位置の第１候補とする。この第１候補の位置は、アドレス１９とその格納値６から１９−６＝１３となり、矢印３６のようにアドレス１３の位置を示し、これは入力バッファ１２におけるアドレス１３からの繰返し文字列を第１候補２８とすることを意味する。続いて、符号化位置２６に対し＋１，＋２，…＋Ｎをアドレスとして最近一致位置リスト２４を参照し、各アドレスの格納値として１０，５，１８を取得する。このように符号化位置２６に後続する各位置のアドレスから取得した格納値について、第１候補位置の格納値で与えられる評価値６と比較し、評価値より大きいものを後続する候補とする。この後続する候補の順位は、符号化位置２６からの距離の小さい順に第１候補、第２候補、…とする。この符号化位置２６に続く各位置の格納値は、アドレス２０の格納値１０、アドレス２１の格納値５及びアドレス２２の格納値１８の３つである。このうち評価値６より大きいのは格納値１０と格納値１８である。そのうち符号化位置２６からの距離が小さい方のアドレス２０の格納値１０を繰返し位置の第２候補とする。この第２候補の位置は矢印３８に示すように１９−１０＝９からアドレス９の位置であり、入力バッファ１２におけるアドレス９からの文字列が繰返し文字列の第２候補３０となる。更に、最近一致位置リスト２４のアドレス２２の格納値１８による繰返し位置が第３候補となり、この第３候補の位置は矢印４２に示すように１９−１８＝１となるアドレス１の位置であり、これに対応した入力バッファ１２のアドレス１からの文字列が第３候補３２となる。このようにして文字列繰返し位置の第１候補、第２候補及び第３候補が取得されたならば、各候補のアドレス１３からの第１候補２８の文字列、アドレス９からの第２候補３０の文字列、及びアドレス１の第３候補３２からの文字列のそれぞれにつき、符号化位置２６からの文字列との一致比較３４を行い、一致長の最も長い文字列を取得して符号化する。この場合、第３候補３２からの文字列が最も長く符号化位置２６からの文字列に一致し、一致文字列は「ａｂｃｄｅｆ」となり、したがって（相対位置，一致長）＝（１８，６）で符号化を行う。なお図９の実施形態にあっては、第３候補を求める際の評価値に第１候補を用いたが、第１候補と第２候補のうち、より長く一致したほうを用いてもよい。ただし、図９にあっては、第２候補の一致長は０であることから、必然的に第１候補が第３候補を取得するための評価値に使用されている。
図１０及び図１１は、本発明の第１実施形態のデータ圧縮処理のフローチャートであり、次の処理手順となる。
ステップＳ１：  入力バッファにバッファサイズのデータを入力し、符号化対象位置アドレスｔをｔ＝１に初期化し、順位リストと最近一致位置リストを作成する。
ステップＳ２：  最近一致位置リストのアドレスｔから相対位置Ｒｉを取得する。
ステップＳ３：  取得した相対位置Ｒｉの値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ４に進み、そうでなければステップＳ１３に進む。
ステップＳ４：  相対位置Ｒｉの値を第１候補および評価値に設定する。
ステップＳ５：  符号化位置アドレスｔからアドレスｔ＝ｔ＋１の相対位置相対位置Ｒを取得する。
ステップＳ６：  取得した相対位置Ｒの値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ７に進み、そうでなければステップＳ９に進む。
ステップＳ７：  取得した相対位置Ｒの値が評価値より大きいかどうかチェックし、大きければステップＳ８に進み、そうでなければステップＳ９に進む。
ステップＳ８：  相対位置Ｒを次の候補に設定してステップＳ５に戻る。
ステップＳ９：  取得した相対位置の値が文字一致でないことを示す０の場合であり、各候補位置を起点とする文字列と符号化対象位置を起点とする文字列の一致を比較し、一致長ｓを検出する。
ステップＳ１０：  最長一致の候補文字列の相対位置Ｒと一致長ｓを符号化した後に、ｔ＝ｔ＋ｓに設定する。
ステップＳ１１：  符号化位置アドレスｔがバッファサイズより大きくなったらステップＳ１２に進み、そうでなければステップＳ２に戻る。
ステップＳ１２：  圧縮するデータの終了をチェックし、終了であれば処理を終わり、そうでなければステップＳ１に戻る。
ステップＳ１３：  ステップＳ３で文字一致を示す値でなかった場合であり、アドレスｔの文字をそのまま符号として出力し、ｔ＝ｔ＋１としてステップＳ１１に進む。
図１２は、本発明の第２実施形態によるデータ圧縮処理の説明図である。この第２実施形態にあっては、図７の繰返し候補取得部１６は次の処理を行う。
（１）  符号化位置２６をアドレスとして最近一致位置リスト２４から取得した格納値６を文字列の繰返し位置の第１候補とする。
（２）  第１候補６は、符号化位置２６からの相対位置なので、アドレス１９−６＝１３として、最近一致位置リスト２４のアドレス１３から取得した値６を符号化位置２６からの相対位置に換算した値、即ち６＋６＝１２を評価値とする。
（３）  符号化位置２６に後続する＋１，＋２，…＋Ｎの各位置をアドレス１９，２０，２１，２２として、最近一致位置リスト２４から取得した格納値１０，５，１８と評価値１２を比較し、取得した格納値が評価値より大きい場合、符号化位置２６からの距離が小さい順に、第１候補に続く１または複数の後続候補、この例ではアドレス２２の格納値１８を第２候補とする。
このようにして繰返し候補取得部１６により第１候補及び第２候補が取得されたならば、図７の一致検出部１８が第１候補のアドレス１９−６＝１３となる入力バッファ１２のアドレス１３からの第１候補２８の文字列、第２候補のアドレス１９−１８＝１となる入力バッファ１２のアドレス１からの第２候補４４の文字列を、符号化位置２６からの文字列と一致比較３４を行い、最長一致した文字列、この場合にはアドレス１からの第２候補４４との一致比較による文字「ａｂｃｄｅｆ」を検出し、符号生成部２０が（相対位置，一致長）＝（１８，６）で符号化を行う。
図１３及び図１４は、本発明の第２実施形態のデータ圧縮処理のフローチャートであり、次の処理手順となる。
ステップＳ１：  入力バッファにバッファサイズのデータを入力し、符号化対象位置アドレスｔをｔ＝１に初期化し、順位リストと最近一致位置リストを作成する。
ステップＳ２：  最近一致位置リストのアドレスｔから相対位置Ｒ１を取得する。
ステップＳ３：  取得した相対位置Ｒ１の値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ４に進み、そうでなければステップＳ１３に進む。
ステップＳ４：  相対位置Ｒ１の値を第１候補とし、第１候補のアドレスの相対位置Ｒ２を評価値に設定（符号化位置ｔからの相対位置はＲ１＋Ｒ２）する。
ステップＳ５：  符号化位置アドレスｔからアドレスｔ＝ｔ＋１の相対位置相対位置Ｒを取得する。
ステップＳ６：  取得した相対位置Ｒの値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ７に進み、そうでなければステップＳ９に進む。
ステップＳ７：  取得した相対位置Ｒの値が評価値より大きいかどうかチェックし、大きければステップＳ８に進み、そうでなければステップＳ９に進む。
ステップＳ８：  相対位置Ｒを次の候補に設定してステップＳ５に戻る。
ステップＳ９：  取得した相対位置の値が文字一致でないことを示す０の場合であり、各候補位置を起点とする文字列と符号化対象位置を起点とする文字列の一致を比較し、一致長ｓを検出する。
ステップＳ１０：  最長一致の候補文字列の相対位置Ｒと一致長ｓを符号化した後に、ｔ＝ｔ＋ｓに設定する。
ステップＳ１１：  符号化位置アドレスｔがバッファサイズより大きくなったらステップＳ１２に進み、そうでなければ゜ステップＳ２に戻る。
ステップＳ１２：  圧縮するデータの終了をチェックし、終了であれば処理を終わり、そうでなければステップＳ１に戻る。
ステップＳ１３：  ステップＳ３で文字一致を示す値でなかった場合であり、アドレスｔの文字をそのまま符号として出力し、ｔ＝ｔ＋１としてステップＳ１１に進む。
なお図１２の第２実施形態にあっては、第３候補以降の候補を求める際の評価値にも第１候補を用いるが、第１候補と第２候補のうち、より長く一致したほうを用いてもよい。ただし、このケースでは第３候補は存在していない。
図１５は、本発明の第３実施形態によるデータ圧縮処理の説明図である。この第３実施形態にあっては、図７の繰返し候補取得部１６が次の処理を行う。
（１）  入力バッファ１２の符号化位置２６をアドレス１９として、最近一致位置リスト２４から取得した格納値６を文字列の繰返し位置の第１候補とする。
（２）  第１候補に続く後続候補として、先行する候補をアドレスとして最近一致位置リスト２４から取得した格納値を後続候補とする。即ち、第１候補をアドレス１９−６＝１３として、最近一致位置リスト２４のアドレス１３から取得した格納値６を第２候補とする。また、第２候補のアドレス１３−６＝７として、最近一致位置リスト２４のアドレス７から取得した格納値６を第３候補とする。更に、第３候補をアドレス７−６＝１とした最近一致位置リスト２４のアドレス１から取得した格納値を第３候補とする。
このようにして繰返し文字列の位置の候補、即ち第１候補、第２候補、第３候補が取得されたならば、図７の一致検出部１８が入力バッファ１２における第１候補２８、第２候補４６、第３候補４８の各アドレス１３，７，１を起点とする文字列と符号化位置２６のアドレス１９を起点とする文字列と一致比較３４を行い、一致長の最も長い候補の文字列を取得して符号生成部２０により符号化させる。この例では、第３候補４８からの文字列が符号化位置２６からの文字列に最も長く一致する文字列「ａｂｃｄｅｆ」であることから、第３候補４８の相対位置１９−１＝１８と一致長６を求め、（相対位置，一致長）＝（１８，６）で符号化を行う。
図１６及び図１７は、本発明の第３実施形態によるデータ圧縮処理のフローチャートであり、次の処理手順となる。
ステップＳ１：  入力バッファにバッファサイズのデータを入力し、符号化対象位置アドレスｔをｔ＝１に初期化し、順位リストと最近一致位置リストを作成する。
ステップＳ２：  最近一致位置リストのアドレスｔから相対位置Ｒｉを取得する。
ステップＳ３：  取得した相対位置Ｒの値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ４に進み、そうでなければステップＳ１２に進む。
ステップＳ４：  相対位置Ｒ１の値を第１候補に設定する。
ステップＳ５：  符号化位置アドレス（ｔ−Ｒ１）からの相対位置Ｒ２を取得する。
ステップＳ６：  取得した相対位置Ｒの値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ７に進み、そうでなければステップＳ８に進む。
ステップＳ７：  相対位置Ｒ２を次の候補Ｒ１に設定する（符号化位置からの位置はＲ１＋Ｒ２のため、Ｒ１＝Ｒ１＋Ｒ２）。
ステップＳ８：  取得した相対位置の値が文字一致でないことを示す０の場合であり、各候補位置を起点とする文字列と符号化対象位置を起点とする文字列の一致を比較し、一致長ｓを検出する。
ステップＳ９：  最長一致の候補文字列の相対位置Ｒと一致長ｓを符号化した後に、ｔ＝ｔ＋ｓに設定する。
ステップＳ１０：  符号化位置アドレスｔがバッファサイズより大きくなったらステップＳ１１に進み、そうでなければステップＳ２に戻る。
ステップＳ１１：  圧縮するデータの終了をチェックし、終了であれば処理を終わり、そうでなければステップＳ１に戻る。
ステップＳ１２：  ステップＳ３で文字一致を示す値でなかった場合であり、アドレスｔの文字をそのまま符号として出力し、ｔ＝ｔ＋１としてステップＳ１０に進む。
図１８は、本発明の第４実施形態によるデータ圧縮処理の説明図である。この第４実施形態にあっては、図９の第１実施形態によって最長一致の文字列を取得した後、この取得した文字列の候補を改めて第１候補いわゆる改定第１候補として、図１５の第３実施形態の処理を適用するようにしたことを特徴とする。即ち、図９の第１実施形態は最近の一致部分を見つけることのできる処理であるが、それ以上、過去に延ばすことができないことから、これに過去の一致部分に候補を延ばすことのできる図１５の第３実施形態の処理を組み合わせたものである。
図１８の第４実施形態について、図７の繰返し候補取得部１６による処理は、図９の第１実施形態の処理である第１処理と、図１５の第３実施形態の処理である第２処理とに分かれる。
（第１処理）
（１）  符号化位置５０をアドレス１１として、最近一致位置リスト２４から取得した格納値４を文字列繰返し位置の第１候補とする。
（２）  第１候補の格納値を評価値４とする。
（３）  符号化位置５０に後続する＋１，＋２，…＋Ｎの各位置をアドレス１２〜１７として、最近一致位置リスト２４から取得した格納値７，７，３，３，３，３を評価値４と比較し、評価値４より大きい場合に符号化位置５０からの距離の小さい順に、第１候補に続く後続候補とする。この場合、アドレス１２，１３の格納値が７となって、評価値４より大きいことから、第２候補となる。ここでアドレス１２，１３の格納値は共に７であることから、第２候補のアドレスは１１−７＝４となる。それ以外のアドレス１４〜１７については、評価値４より小さいことから候補外である。
このようにして第１候補及び第２候補が取得されたならば、図７の一致検出部１８によりアドレス７の第１候補５２及びアドレス４の第２候補５４を起点とした文字列と、符号化位置５０のアドレス１１を起点とした文字列の一致比較６０を行い、一致長の最も長い文字列、この場合にはアドレス４からの第２候補５４の文字列「ａｂｃａｂｃ」を、次の第２処理のための改定第１候補５６とする。
（第２処理）
第２処理は、改定第１候補５６のアドレス４−３＝１として、最近一致位置リスト２４から取得した格納値を改定第２候補５８とする。そして図７の符号生成部２０により、改定第１候補５６のアドレス４及び改定第２候補のアドレス１を起点とする文字列と、符号化位置５０のアドレス１１を起点とする文字列を比較する一致比較６０を行い、最も長く一致する候補の文字列を検出する。この場合には第２改定候補５８の文字列が、文字列「ａｂｃａｂｃａｂｃ」となって最も長く一致し、改定第２候補の相対位置１１−１＝１０で一致長が９であることから、（相対位置，一致長）＝（１０，９）で符号化を行う。
図１９及び図２０は、本発明の第４実施形態のデータ圧縮処理のフローチャートであり、次の処理手順となる。
ステップＳ１：  入力バッファにバッファサイズのデータを入力し、符号化対象位置アドレスｔをｔ＝１に初期化し、順位リストと最近一致位置リストを作成する。
ステップＳ２：  最近一致位置リストのアドレスｔから相対位置Ｒ１を取得する。
ステップＳ３：  取得した相対位置Ｒ１の値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ４に進み、そうでなければステップＳ１８に進む。
ステップＳ４：  相対位置Ｒ１の値を第１候補及び評価値に設定する。
ステップＳ５：  符号化位置アドレスｔからアドレスｔ＝ｔ＋１の相対位置相対位置Ｒを取得する。
ステップＳ６：  取得した相対位置Ｒ１の値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ７に進み、そうでなければステップＳ９に進む。
ステップＳ７：  取得した相対位置Ｒ１の値が評価値より大きいかどうかチェックし、大きければステップＳ８に進み、そうでなければステップＳ９に進む。
ステップＳ８：  相対位置Ｒ１を次の候補に設定してステップＳ５に戻る。
ステップＳ９：  取得した相対位置の値が文字一致でないことを示す０の場合であり、各候補位置を起点とする文字列と符号化対象位置を起点とする文字列の一致を比較し、一致長ｓを検出する。
ステップＳ１０：  最長一致の候補を選択し、改定第１候補とする。
ステップＳ１１：  改定第１候補の相対位置をＲ１とすると、最近一致位置リストのアドレス（ｔ−Ｒ１）の相対位置Ｒ２を取得する。
ステップＳ１２：  取得した相対位置Ｒの値が文字一致を示す０以外の値か否かチェックし、そうであればステップＳ１３に進み、そうでなければステップＳ１４に進む。
ステップＳ１３：  相対位置Ｒ２を次の改定候補Ｒ１に設定してステップＳ１１に戻る。
ステップＳ１４：  ステップＳ１２で取得した相対位置の値が文字一致でないことを示す場合であり、各候補位置を起点とする文字列と符号化対象位置を起点とする文字列の一致を比較し、一致長ｓを検出する。
ステップＳ１５：  最長一致の候補文字列の相対位置Ｒと一致長ｓを符号化した後に、ｔ＝ｔ＋ｓに設定する。
ステップＳ１６：  符号化位置アドレスｔがバッファサイズより大きくなったらステップＳ１７に進み、そうでなければステップＳ２に戻る。
ステップＳ１７：  圧縮するデータの終了をチェックし、終了であれば処理を終わり、そうでなければステップＳ１に戻る。
ステップＳ１８：  ステップＳ３で文字一致を示す値でなかった場合であり、アドレスｔの文字をそのまま符号として出力し、ｔ＝ｔ＋１としてステップＳ１６に進む。
なお、本発明は上記の実施形態に限定されず、その目的と利点を損なうことのない適宜の変形を含む。更に本発明は、上記の実施形態に示した数値による限定は受けない。
【産業上の利用の可能性】
以上説明してきたように本発明によれば、入力バッファ中の各アドレスを起点とする所定長の各文字列が、最も最近出現した相対値を格納した最近一致位置リストで一致文字列の候補を絞り込み、絞り込んだ候補について符号化位置との文字列の一致検出で最も長い文字列を検出して符号化することができ、最近一致位置リストに同じ数字が連続せずに一致位置が不明となる被圧縮データの文字列であっても、最長一致文字列を検出して高速に符号化することができる。
また、最長一致文字列の検出による符号化に使用する検索テーブルとして使用するのは入力バッファと最近一致位置リストのみで済むため、少ないメモリ量でデータ圧縮機能を実装することができる。
【図１】
2004062110.tif 000003
【図２】
2004062110.tif 000004
【図３】
2004062110.tif 000005
【図４】
2004062110.tif 000006
【図５】
2004062110.tif 000007
【図６】
2004062110.tif 000008
【図７】
2004062110.tif 000009
【図８】
2004062110.tif 000010
【図９】
2004062110.tif 000011
【図１０】
2004062110.tif 000012
【図１１】
2004062110.tif 000013
【図１２】
2004062110.tif 000014
【図１３】
2004062110.tif 000015
【図１４】
2004062110.tif 000016
【図１５】
2004062110.tif 000017
【図１６】
2004062110.tif 000018
【図１７】
2004062110.tif 000019
【図１８】
2004062110.tif 000020
【図１９】
2004062110.tif 000021
【図２０】
2004062110.tif 000022
【手続補正書】
【提出日】平成17年7月1日(2005.7.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
被圧縮データ列から圧縮データを生成するデータ圧縮方法に於いて、
入力部により、入力バッファに被圧縮データ列を入力して保持する入力ステップと、
最近一致位置リスト生成部により、前記入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した位置を格納した最近一致位置リストを生成して保持するリスト生成ステップと、
繰返し候補取得部により、前記最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得ステップと、
一致検出部により、取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、前記繰返し候補の位置からの一致した文字列を検出する一致検出ステップと、
符号生成部により、検出した一致文字列を符号化する符号生成ステップと、
を備えたことを特徴とするデータ圧縮方法。
【請求項２】
請求の範囲１のデータ圧縮方法に於いて、
前記候補取得ステップは、符号化位置をアドレスとして前記最近一致位置リストから取得した格納値を文字列の繰返し位置の第１候補とし、
前記一致検出ステップは、前記第１候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、一致した文字列を取得して符号化させることを特徴とするデータ圧縮方法。
【請求項３】
請求の範囲２のデータ圧縮方法に於いて、
前記候補取得ステップは、更に、
前記第１候補を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に前記第１候補に続く１又は複数の後続候補を取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするデータ圧縮方法。
【請求項４】
請求の範囲２のデータ圧縮方法に於いて、
前記候補取得ステップは、更に、
前記第１候補をアドレスとして前記最近一致位置リストから取得した値を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に第１候補に続く１又は複数の後続候補を取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするデータ圧縮方法。
【請求項５】
請求の範囲２のデータ圧縮方法に於いて、
前記候補取得ステップは、更に、
前記第１候補を評価値とし、前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に前記第１候補に続く１又は複数の後続候補とし、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、符号化位置の文字列との一致長の最も長い文字列を改定第１候補として取得する第１ステップと、
前記改定第１候補に続く１又は複数の後続候補として、先行する候補をアドレスとして前記最近一致位置リストから取得した格納値を改定後続候補とする第２ステップと、
を備え、
前記一致検出ステップは、前記改定第１候補及び改定後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするデータ圧縮方法。
【請求項６】
コンピュータに、
入力バッファに被圧縮データ列を入力して保持する入力ステップと、
前記入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した位置を格納した最近一致位置リストを生成して保持するリスト生成ステップと、
前記最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得ステップと、
取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、前記繰返し候補の位置からの一致した文字列を検出する一致検出ステップと、
検出した一致文字列を符号化する符号生成ステップと、
を実行させることを特徴とするプログラム。
【請求項７】
請求の範囲６のプログラムに於いて、
前記候補取得ステップは、符号化位置をアドレスとして前記最近一致位置リストから取得した格納値を文字列の繰返し位置の第１候補とし、
前記一致検出ステップは、前記第１候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、一致した文字列を検出して符号化させることを特徴とするプログラム。
【請求項８】
請求の範囲７のプログラムに於いて、
前記候補取得ステップは、更に、
前記第１候補を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に前記第１候補に続く１又は複数の後続候補として取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするプログラム。
【請求項９】
請求の範囲７のプログラムに於いて、
前記候補取得ステップは、更に、
前記第１候補をアドレスとして前記最近一致位置リストから取得した値を評価値とする第１ステップと、
前記符号化位置に後続する各位置をアドレスとして前記最近一致位置リストから取得した格納値と前記評価値を比較し、取得した格納値が評価値より過去の値である場合に、符号化位置からの距離が小さい順に第１候補に続く１又は複数の後続候補を取得する第２ステップと、
を備え、
前記一致検出ステップは、前記第１候補及び後続候補を起点にする文字列と符号化位置を起点にする文字列を比較し、一致長の最も長い文字列を検出して符号化させることを特徴とするプログラム。
【請求項１０】
被圧縮データ列から圧縮データを生成するデータ圧縮装置に於いて、
入力バッファに被圧縮データ列を入力して保持する入力バッファと、
前記入力バッファ中の各アドレスを起点とする所定長の各文字列が最も最近出現した位置を格納した最近一致位置リストを生成して保持する最近一致位置リスト生成部と、
前記最近一致位置リストを用いて符号化位置の文字列が過去に出現した位置の繰返し候補を取得する候補取得部と、
取得した繰返し候補の位置を起点にする文字列と符号化位置を起点にする文字列を比較し、前記候補位置からの一致した文字列を検出する一致検出部と、
検出した一致文字列を符号化する符号生成部と、
を備えたことを特徴とするデータ圧縮装置。
【国際調査報告】
2004062110.tif 000023
2004062110.tif 000024