(57)【要約】【課題】繰り返し出現するデータ列を含む長いデータ列をより高速に圧縮する。【解決手段】データ格納部５１１は、複数のブロックに分割された圧縮対象データ列を格納する。アドレス格納部５１２は、第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後のデータ列の順序で、それらのアドレスを表す複数のアドレス情報を格納する。検出部５１３は、アドレス格納部５１２に格納された複数のアドレス情報に基づいて、第１のブロック内の複数のデータ列のうち第１のデータ列と一致する第２のデータ列を、第１のブロック内で探索する。そして、第１のブロック内に第２のデータ列が含まれていない場合、検出部５１３は、複数のブロックのうち第２のブロックを参照して第２のデータ列を検出する。符号化部５１４は、検出された第２のデータ列の情報に基づいて第１のデータ列を符号化し、符号化された第１のデータ列を出力する。【選択図】図５
2015159352.tif 000002
【特許請求の範囲】
【請求項１】
複数のブロックに分割された圧縮対象データ列を格納するデータ格納部と、
前記複数のブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後の前記複数のデータ列の順序で、前記複数のアドレスを表す複数のアドレス情報を格納するアドレス格納部と、
前記複数のアドレス情報に基づいて、前記複数のデータ列のうち第１のデータ列と一致する第２のデータ列を前記第１のブロック内で探索し、前記第１のブロック内に前記第２のデータ列が含まれていない場合、前記複数のブロックのうち第２のブロックを参照して前記第２のデータ列を検出する検出部と、
検出された前記第２のデータ列の情報に基づいて前記第１のデータ列を符号化して出力する符号化部と、
を備えることを特徴とするデータ圧縮装置。
【請求項２】
前記データ格納部は、前記圧縮対象データ列を入力順に前方から後方へ向かって格納し、前記第２のブロックは、前記第１のブロックよりも前方のブロックであり、前記符号化部は、前記第２のデータ列の位置情報を用いて前記第１のデータ列を符号化することを特徴とする請求項１記載のデータ圧縮装置。
【請求項３】
前記アドレス格納部は、前記複数のアドレス情報を前記複数のデータ列の値の順序で格納し、前記検出部は、前記複数のアドレス情報をデータ列の値の降順に参照しながら前記第２のデータ列を探索することを特徴とする請求項２記載のデータ圧縮装置。
【請求項４】
前記アドレス格納部は、前記第２のブロック内の複数のアドレスを表す複数のアドレス情報を、前記第２のブロック内の前記複数のアドレスを始点とする複数のデータ列の値の順序で格納し、前記検出部は、前記第２のブロック内の前記複数のアドレスを表す前記複数のアドレス情報をデータ列の値の降順に参照しながら、前記第２のブロック内で前記第２のデータ列を探索し、参照位置のアドレス情報が表すアドレスを始点とする第３のデータ列の値が前記第１のデータ列の値よりも小さくなった場合、前記第２のブロックよりも前方の第３のブロックを参照して前記第２のデータ列を検出することを特徴とする請求項３記載のデータ圧縮装置。
【請求項５】
前記第１のブロックのサイズは、前記第１のブロック内の前記複数のアドレスを始点とする前記複数のデータ列を１つのキャッシュメモリ内で並べ替え可能なサイズであることを特徴とする請求項１乃至４のいずれか１項に記載のデータ圧縮装置。
【請求項６】
複数のブロックに分割された圧縮対象データ列を格納するデータ格納部を参照して、前記複数のブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後の前記複数のデータ列の順序で、前記複数のアドレスを表す複数のアドレス情報をアドレス格納部に格納し、
前記複数のアドレス情報に基づいて、前記複数のデータ列のうち第１のデータ列と一致する第２のデータ列を前記第１のブロック内で探索し、前記第１のブロック内に前記第２のデータ列が含まれていない場合、前記複数のブロックのうち第２のブロックを参照して前記第２のデータ列を検出し、
検出された前記第２のデータ列の情報に基づいて前記第１のデータ列を符号化して出力する、
処理をコンピュータに実行させるプログラム。
【請求項７】
コンピュータによって実行されるデータ圧縮方法であって、
複数のブロックに分割された圧縮対象データ列を格納するデータ格納部を参照して、前記複数のブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後の前記複数のデータ列の順序で、前記複数のアドレスを表す複数のアドレス情報をアドレス格納部に格納し、
前記複数のアドレス情報に基づいて、前記複数のデータ列のうち第１のデータ列と一致する第２のデータ列を前記第１のブロック内で探索し、前記第１のブロック内に前記第２のデータ列が含まれていない場合、前記複数のブロックのうち第２のブロックを参照して前記第２のデータ列を検出し、
検出された前記第２のデータ列の情報に基づいて前記第１のデータ列を符号化して出力する、
ことを特徴とするデータ圧縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮装置、データ圧縮方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、文字データ、音声データ、画像データ等の様々な種類の電子データがコンピュータにより処理されており、処理されるデータ量も増大している。このような大量のデータを処理する場合、データ中の冗長な部分を省いて圧縮することにより、データを格納する記憶装置の容量を削減したり、データの転送時間を短縮したりすることができる。
【０００３】
従来のデータ圧縮アルゴリズムの１つとして、ＬＺ７７符号化が提案されている（例えば、非特許文献１を参照）。ＬＺ７７符号化では、圧縮対象データ列中に繰り返し出現するデータ列を、過去に出現した同じデータ列の位置と長さの組み合わせに置き換えることで、データ量を削減することができる。
【０００４】
図１は、ＬＺ７７符号化によるデータ圧縮処理の例を示している。図１の入力文字列のうち、符号化位置１０１から始まる第１の文字列と一致する第２の文字列が探索され、第２の文字列の位置と長さの組み合わせを用いて、第１の文字列が符号化される。符号化位置１０１は、符号化が進むにつれて後方にシフトする。
【０００５】
例えば、符号化位置１０１から始まる文字列“ａｂｃｄｅｆ．．．”が符号化されるとき、符号化位置１０１より前方で一致する文字列（一致文字列）は“ａｂｃｄｅｆ”である。そこで、この一致文字列の先頭位置と符号化位置１０１の相対アドレス“１８（バイト）”を一致位置とし、一致文字列の長さ“６（バイト）”を一致長として、（一致位置，一致長）＝（１８，６）のような符号が生成される。これにより、符号化位置１０１から始まる文字列“ａｂｃｄｅｆ”が（１８，６）に置き換えられる。
【０００６】
図２は、このようなデータ圧縮処理の例を示すフローチャートである。まず、データ圧縮装置は、符号化位置より前方の文字列中で符号化位置から始まる文字列と一致する文字列（一致文字列）を探索し（ステップ２０１）、一致文字列が見つかったか否かをチェックする（ステップ２０２）。一致文字列が見つからなかった場合（ステップ２０２，ＮＯ）、データ圧縮装置は、一致文字列が見つからなかった部分（非一致部分）の長さをカウントする（ステップ２０７）。そして、データ圧縮装置は、符号化位置を後方へシフトし、ステップ２０１以降の処理を繰り返す。
【０００７】
一方、一致文字列が見つかった場合（ステップ２０２，ＹＥＳ）、データ圧縮装置は、符号化位置の直前の文字が非一致部分であるか否かをチェックする（ステップ２０３）。直前の文字が非一致部分である場合（ステップ２０３，ＹＥＳ）、データ圧縮装置は、非一致部分の文字列を符号化する（ステップ２０４）。そして、データ圧縮装置は、符号化位置から始まる文字列を、一致文字列の一致位置及び一致長を用いて符号化する（ステップ２０５）。
【０００８】
一方、直前の文字が非一致部分でない場合（ステップ２０３，ＮＯ）、データ圧縮装置は、ステップ２０５の処理を行う。
【０００９】
次に、データ圧縮装置は、入力文字列の符号化が終了したか否かをチェックし（ステップ２０６）、入力文字列の符号化が終了していない場合（ステップ２０６，ＮＯ）、符号化位置を後方へシフトして、ステップ２０１以降の処理を繰り返す。そして、入力文字列の符号化が終了した場合（ステップ２０６，ＹＥＳ）、データ圧縮装置は、処理を終了する。
【００１０】
なお、ステップ２０６において、入力文字列の最後尾に非一致部分が残されている場合、データ圧縮装置は、その非一致部分の文字列を符号化してから処理を終了する。
【００１１】
こうして圧縮された入力文字列を復元する際には、一致位置から一致長分の文字列をコピーすることで、一致文字列と同じ繰返し文字列が復元される。ＬＺ７７符号化により圧縮された文字列は、単純なコピーにより復元することができるため、復元処理を高速に行うことが可能である。
【００１２】
図３は、図１の入力文字列から一致文字列を探索するための一致位置リストを生成する処理の例を示している（例えば、特許文献１を参照）。図３の一致位置リスト３０３は、順位リスト３０２から生成され、入力バッファ３０１内の各文字列のアドレスから最近出現した一致文字列の一致位置を求めるための情報を格納する。この例では、入力バッファ３０１内の各文字列として、“０”〜“３１”の各アドレスから始まる３文字（３バイト）の文字列（接頭部）が用いられている。
【００１３】
まず、入力バッファ３０１の各アドレスから始まる接頭部の値に基づいて、それらのアドレスをソートすることで、順位リスト３０２が生成される。次に、順位リスト３０２において同じ接頭部に対応する複数のアドレスのうち、隣接する２つのアドレスの差分から最近出現した一致文字列の一致位置が求められる。そして、入力バッファ３０１と同じ“０”〜“３１”のアドレスを有する一致位置リスト３０３の各アドレスに、求められた一致位置の情報が格納される。
【００１４】
例えば、順位リスト３０２において接頭部“ａｂｃ”に対応するアドレス“６”とアドレス“１２”の差分“６”は、入力バッファ３０１のアドレス“１２”から始まる接頭部“ａｂｃ”の一致位置を表している。そこで、一致位置リスト３０３のアドレス“１２”に差分“６”が格納される。
【００１５】
また、順位リスト３０２において接頭部“ｄｅｆ”に対応するアドレス“３”とアドレス“２１”の差分“１８”は、入力バッファ３０１のアドレス“２１”から始まる接頭部“ｄｅｆ”の一致位置を表している。そこで、一致位置リスト３０３のアドレス“２１”に差分“１８”が格納される。
【００１６】
さらに、順位リスト３０２において直前の接頭部が異なる場合は、一致文字列が存在しないことを示すために、一致位置リスト３０３の対応するアドレスに差分“０”が格納される。
【００１７】
こうして生成された一致位置リスト３０３は、図４に示すように、符号化位置から始まる接頭部と同じ文字列が出現した複数の一致位置を示すリンクドリストとして用いることができる。例えば、符号化位置がアドレス“２６”である場合、同じ接頭部“ａｂｃ”が出現した一致位置は、アドレス“１８”、アドレス“１２”、アドレス“６”、及びアドレス“０”の４箇所である。これらの一致位置を順に辿ることによって、符号化位置から始まる文字列とより長く一致する文字列を求めることができ、圧縮率が向上する。
【００１８】
データベースオペレーションにおいて、２つのリストをそれぞれソートした後にソートされた２つのリストをマージして１つのリストを生成する、マージソートも知られている（例えば、非特許文献２を参照）。
【００１９】
また、ブロック単位に分割されたデータストリームを圧縮するデータ圧縮方法も知られている（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特開２００１−３４５７１０号公報
【特許文献２】国際公開第２００９／０５７４５９号パンフレット
【非特許文献】
【００２１】
【非特許文献１】Fiala, E., and Greene, D., “Data Compression with Finite Windows”, Communications of the ACM, 32(4), April 1989, 490-505.
【非特許文献２】Satish, N et al.,“Fast Sort on CPUs and GPUs: A Case for Bandwidth Oblivious SIMD Sort”, Proceedings of the ACM SIGMOD International Conference on Management of Data, 2010, 351-362.
【発明の概要】
【発明が解決しようとする課題】
【００２２】
上述した従来のデータ圧縮技術には、以下のような問題がある。
図３の一致位置リスト３０３を用いたデータ圧縮処理では、入力バッファ３０１の各アドレスから始まる接頭部の値に基づいて、それらのアドレスをソートすることで、順位リスト３０２が生成される。
【００２３】
このとき、ソート対象である入力バッファ３０１の全体に渡ってランダムアクセスが行われる。ここで、入力バッファ３０１のサイズが大きくなると、コンピュータの中央処理装置（ＣＰＵ）に設けられた１次キャッシュメモリ内に、入力バッファ３０１と順位リスト３０２とを格納することが難しくなる。そこで、１次キャッシュメモリより容量の大きな２次キャッシュメモリが利用される。
【００２４】
しかし、２次キャッシュメモリのアクセス速度は、１次キャッシュメモリのアクセス速度よりも低速であるため、２次キャッシュメモリを利用してソートを行うと、順位リスト３０２を生成するための処理時間が長くなる。このため、１次キャッシュメモリに対するランダムアクセスの高速性が損なわれ、処理速度が１０分の１程度に低下する場合もある。
【００２５】
なお、かかる問題は、圧縮対象データ列が文字列である場合に限らず、圧縮対象データ列が音声データ、画像データ等の他のデータ列である場合においても生ずるものである。また、かかる問題は、ＬＺ７７符号化によるデータ圧縮処理に限らず、圧縮対象データ列中に繰り返し出現するデータ列を符号化する他のデータ圧縮処理においても生ずるものである。
【００２６】
１つの側面において、本発明は、繰り返し出現するデータ列を含む長いデータ列をより高速に圧縮することを目的とする。
【課題を解決するための手段】
【００２７】
１つの案では、データ圧縮装置は、データ格納部、アドレス格納部、検出部、及び符号化部を含む。
【００２８】
データ格納部は、複数のブロックに分割された圧縮対象データ列を格納する。データ格納部は、それらのブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後のデータ列の順序で、それらのアドレスを表す複数のアドレス情報を格納する。
【００２９】
検出部は、それらのアドレス情報に基づいて、第１のデータ列と一致する第２のデータ列を第１のブロック内で探索し、第１のブロック内に第２のデータ列が含まれていない場合、複数のブロックのうち第２のブロックを参照して第２のデータ列を検出する。符号化部は、検出された第２のデータ列の情報に基づいて第１のデータ列を符号化して出力する。
【発明の効果】
【００３０】
１つの実施形態によれば、繰り返し出現するデータ列を含む長いデータ列をより高速に圧縮することができる。
【図面の簡単な説明】
【００３１】
【図１】ＬＺ７７符号化によるデータ圧縮処理を示す図である。
【図２】ＬＺ７７符号化によるデータ圧縮処理のフローチャートである。
【図３】一致位置リストを生成する処理を示す図である。
【図４】入力バッファと一致位置リストを示す図である。
【図５】データ圧縮装置の機能的構成図である。
【図６】データ圧縮処理のフローチャートである。
【図７】データ圧縮装置の具体例を示す図である。
【図８】圧縮対象データ列を２つのブロックに分割した場合を示す図である。
【図９】圧縮対象データ列を４つのブロックに分割した場合を示す図である。
【図１０】一致位置リスト生成処理のフローチャートである。
【図１１】一致位置リスト生成処理の具体例を示すフローチャート（その１）である。
【図１２】一致位置リスト生成処理の具体例を示すフローチャート（その２）である。
【図１３】情報処理装置のハードウェア構成図である。
【発明を実施するための形態】
【００３２】
以下、図面を参照しながら、実施形態を詳細に説明する。
上述したように、図３の一致位置リスト３０３を用いたデータ圧縮処理では、入力バッファ３０１の各アドレスから始まる接頭部の値に基づいて、それらのアドレスをソートすることで、順位リスト３０２が生成される。
【００３３】
このとき、ソート対象である入力バッファ３０１の全体に渡ってランダムアクセスが行われる。ここで、入力バッファ３０１のサイズが大きくなると、コンピュータの中央処理装置（ＣＰＵ）に設けられた１次キャッシュメモリ内に、入力バッファ３０１と順位リスト３０２とを格納することが難しくなる。そこで、１次キャッシュメモリより容量の大きな２次キャッシュメモリが利用される。
【００３４】
しかし、２次キャッシュメモリのアクセス速度は、１次キャッシュメモリのアクセス速度よりも低速であるため、２次キャッシュメモリを利用してソートを行うと、順位リスト３０２を生成するための処理時間が長くなる。このため、１次キャッシュメモリに対するランダムアクセスの高速性が損なわれ、処理速度が１０分の１程度に低下する場合もある。
【００３５】
なお、かかる問題は、圧縮対象データ列が文字列である場合に限らず、圧縮対象データ列が音声データ、画像データ等の他のデータ列である場合においても生ずるものである。また、かかる問題は、ＬＺ７７符号化によるデータ圧縮処理に限らず、圧縮対象データ列中に繰り返し出現するデータ列を符号化する他のデータ圧縮処理においても生ずるものである。
【００３６】
図５は、実施形態のデータ圧縮装置の機能的構成例を示している。図５のデータ圧縮装置５０１は、データ格納部５１１、アドレス格納部５１２、検出部５１３、及び符号化部５１４を含む。
【００３７】
データ格納部５１１は、複数のブロックに分割された圧縮対象データ列を格納する。アドレス格納部５１２は、それらのブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後のデータ列の順序で、それらのアドレスを表す複数のアドレス情報を格納する。
【００３８】
検出部５１３は、アドレス格納部５１２に格納された複数のアドレス情報に基づいて、第１のデータ列と一致する第２のデータ列を探索し、符号化部５１４は、検出された第２のデータ列の情報に基づいて第１のデータ列を符号化する。
【００３９】
図６は、図５のデータ圧縮装置５０１が行うデータ圧縮処理の例を示すフローチャートである。
【００４０】
検出部５１３は、アドレス格納部５１２に格納された複数のアドレス情報に基づいて、第１のブロック内の複数のデータ列のうち第１のデータ列と一致する第２のデータ列を、第１のブロック内で探索する（ステップ６０１）。そして、第１のブロック内に第２のデータ列が含まれていない場合、検出部５１３は、複数のブロックのうち第２のブロックを参照して第２のデータ列を検出する（ステップ６０２）。
【００４１】
符号化部５１４は、検出された第２のデータ列の情報に基づいて第１のデータ列を符号化し、符号化された第１のデータ列を出力する（ステップ６０３）。
【００４２】
図５のデータ圧縮装置５０１によれば、繰り返し出現するデータ列を含む長いデータ列をより高速に圧縮することができる。
【００４３】
図７は、図５のデータ圧縮装置５０１の具体例を示している。図７のデータ圧縮装置５０１は、データ格納部５１１、アドレス格納部５１２、検出部５１３、符号化部５１４、ソート部７０１、及び一致位置格納部７０２を含む。
【００４４】
データ格納部５１１は、図３の入力バッファ３０１に対応し、複数のブロックに分割された圧縮対象データ列７１１を、入力順に前方から後方へ向かって格納する。
【００４５】
ソート部７０１は、データ格納部５１１において、圧縮対象データ列７１１の各ブロック内の各アドレスを始点とするデータ列を、データ列の内容に基づいて並べ替える。このとき、ソート部７０１は、複数の同じデータ列が互いに隣接するようにデータ列を並べ替える。そして、ソート部７０１は、並べ替えた後のデータ列の順序で各データ列のアドレス情報を保持する順位リスト７１２を生成し、アドレス格納部５１２に格納する。
【００４６】
検出部５１３は、順位リスト７１２のアドレス情報に基づいて、圧縮対象データ列７１１中に繰り返し出現するデータ列を検出する。そして、検出部５１３は、各データ列と一致するデータ列（一致データ列）の先頭位置（一致位置）を表す位置情報を保持する一致位置リスト７１３を生成し、一致位置格納部７０２に格納する。
【００４７】
符号化部５１４は、一致位置リスト７１３の位置情報に基づいて、圧縮対象データ列７１１を符号化して圧縮データを生成し、生成した圧縮データを出力する。
【００４８】
図８は、図１の入力文字列を圧縮対象データ列７１１として用いて一致位置リスト７１３を生成する処理の例を示している。この例では、３２バイトの圧縮対象データ列７１１がデータ格納部５１１の前方から後方へ向かって、“０”〜“３１”のアドレスに格納され、圧縮対象データ列７１１は、ブロック８０１とブロック８０２の２つのブロックに分割されている。各ブロックのサイズは１６バイトである。
【００４９】
ブロック８０１は、圧縮対象データ列７１１の“０”〜“１５”のアドレスに対応し、ブロック８０２は、“１６”〜“３１”のアドレスに対応する。各ブロックは、“０”〜“１５”のブロック内アドレスを有する。
【００５０】
ソート部７０１は、各ブロック内アドレスから始まる３バイトの文字列（接頭部）の値の昇順に、各ブロック内の１６個の接頭部をソートし、順位リスト８１１及び順位リスト８１２を生成する。順位リスト８１１及び順位リスト８１２は、図７の順位リスト７１２に対応する。また、順位リスト８１１及び順位リスト８１２は、ブロック８０１及びブロック８０２にそれぞれ対応し、ソート後の接頭部の順序で各接頭部の先頭位置のブロック内アドレスを保持している。
【００５１】
検出部５１３は、順位リスト８１１及び順位リスト８１２の各々において、同じ接頭部に対応する複数のブロック内アドレスのうち、隣接する２つのブロック内アドレスの差分から最近出現した一致文字列の一致位置を求める。順位リスト８０１と順位リスト８０２の両方に同じ接頭部に対応するブロック内アドレスが含まれている場合、検出部５１３は、それらのブロック内アドレスに基づいて一致位置を求める。
【００５２】
そして、検出部５１３は、“０”〜“１５”のブロック内アドレスを有する一致位置リスト８２１及び一致位置リスト８２２に、求めた一致位置を表す位置情報を格納する。一致位置リスト８２１及び一致位置リスト８２２は、図７の一致位置リスト７１３に対応する。
【００５３】
例えば、順位リスト８１２において接頭部“ａｂｃ”に対応するブロック内アドレス“１０”とブロック内アドレス“１３”の差分“３”は、ブロック８０２のブロック内アドレス“１３”から始まる接頭部“ａｂｃ”の一致位置を表している。そこで、一致位置リスト８２２のブロック内アドレス“１３”に差分“３”が格納される。
【００５４】
また、順位リスト８１１において最も後方の接頭部“ａｂｃ”に対応するブロック内アドレス“１２”と、順位リスト８１２において最も前方の接頭部“ａｂｃ”に対応するブロック内アドレス“２”との差分は、“−１０”である。“−１０”を圧縮対象データ列７１１におけるアドレスの差分に換算すると、“６”が得られる。この差分“６”は、ブロック８０２のブロック内アドレス“２”から始まる接頭部“ａｂｃ”の一致位置を表している。そこで、一致位置リスト８２２のブロック内アドレス“２”に差分“６”が格納される。
【００５５】
さらに、順位リスト８１１及び順位リスト８１２の全体を通して１つのみ含まれる接頭部については、一致文字列が存在しないことを示すために、一致位置リスト８２１及び一致位置リスト８２２の対応するブロック内アドレスに差分“０”が格納される。こうして得られた一致位置リスト８２１及び一致位置リスト８２２は、図３の一致位置リスト３０３に対応していることが分かる。
【００５６】
図９は、図１の入力文字列を圧縮対象データ列７１１として用いて一致位置リスト７１３を生成する処理の別の例を示している。この例では、圧縮対象データ列７１１は、ブロック９０１〜ブロック９０４の４つのブロックに分割されている。各ブロックのサイズは８バイトである。
【００５７】
ブロック９０１は、圧縮対象データ列７１１の“０”〜“７”のアドレスに対応し、ブロック９０２は、“８”〜“１５”のアドレスに対応する。ブロック９０３は、圧縮対象データ列７１１の“１６”〜“２３”のアドレスに対応し、ブロック９０４は、“２４”〜“３１”のアドレスに対応する。各ブロックは、“０”〜“７”のブロック内アドレスを有する。
【００５８】
ソート部７０１は、各ブロック内アドレスから始まる３バイトの接頭部の値の昇順に、各ブロック内の８個の接頭部をソートし、順位リスト９１１〜順位リスト９１４を生成する。順位リスト９１１〜順位リスト９１４は、図７の順位リスト７１２に対応する。また、順位リスト９１１〜順位リスト９１４は、ブロック９０１〜ブロック９０４にそれぞれ対応し、ソート後の接頭部の順序で各接頭部の先頭位置のブロック内アドレスを保持している。
【００５９】
検出部５１３は、順位リスト９１１〜順位リスト９１４の各々において、同じ接頭部に対応する複数のブロック内アドレスのうち、隣接する２つのブロック内アドレスの差分から最近出現した一致文字列の一致位置を求める。２つの順位リストに同じ接頭部に対応するブロック内アドレスが含まれている場合、検出部５１３は、それらのブロック内アドレスに基づいて一致位置を求める。
【００６０】
そして、検出部５１３は、“０”〜“７”のブロック内アドレスを有する一致位置リスト９２１〜一致位置リスト９２４に、求めた一致位置を表す位置情報を格納する。一致位置リスト９２１〜一致位置リスト９２４は、図７の一致位置リスト７１３に対応する。
【００６１】
例えば、順位リスト９１３の接頭部“ａｂｃ”に対応するブロック内アドレス“２”と、順位リスト９１４において最も前方の接頭部“ａｂｃ”に対応するブロック内アドレス“２”との差分は、“０”である。“０”を圧縮対象データ列７１１におけるアドレスの差分に換算すると、“８”が得られる。この差分“８”は、ブロック９０４のブロック内アドレス“２”から始まる接頭部“ａｂｃ”の一致位置を表している。そこで、一致位置リスト９２４のブロック内アドレス“２”に差分“８”が格納される。
【００６２】
また、順位リスト９１１の接頭部“ｄｅｆ”に対応するブロック内アドレス“３”と、順位リスト９１３の接頭部“ｄｅｆ”に対応するブロック内アドレス“５”との差分は、“２”である。“２”を圧縮対象データ列７１１におけるアドレスの差分に換算すると、“１８”が得られる。この差分“１８”は、ブロック９０３のブロック内アドレス“５”から始まる接頭部“ｄｅｆ”の一致位置を表している。そこで、一致位置リスト９２３のブロック内アドレス“５”に差分“１８”が格納される。
【００６３】
さらに、順位リスト９１１〜順位リスト９１４の全体を通して１つのみ含まれる接頭部については、一致文字列が存在しないことを示すために、一致位置リスト９２１〜一致位置リスト９２４の対応するブロック内アドレスに差分“０”が格納される。こうして得られた一致位置リスト９２１〜一致位置リスト９２４は、図３の一致位置リスト３０３に対応していることが分かる。
【００６４】
図８及び図９に示した処理によれば、長い圧縮対象データ列が入力された場合でも、圧縮対象データ列を１次キャッシュメモリ内でソート可能なサイズのブロックに分割することで、ランダムアクセスの高速性を活用して順位リストを生成することが可能になる。したがって、長い圧縮対象データ列をより高速に圧縮することができる。
【００６５】
入力バッファが１バイト配列である場合、順位リストは２バイト配列になるため、１次キャッシュメモリ内でブロックのソート処理を行うためには、ブロックサイズの約３倍の記憶容量が消費される。したがって、１次キャッシュメモリの約３分の１のサイズがソート可能な最大ブロックサイズとなると考えられる。例えば、１次キャッシュメモリのサイズが３２Ｋバイトである場合、ソート可能な最大ブロックサイズは約１０．６Ｋバイトである。ブロックサイズとして、１０２４バイト又は１０２４バイト×（２のべき乗）を用いてもよい。
【００６６】
図８及び図９に示したように、１つのブロック内の一致文字列については、対応する１つの順位リスト内で隣接する２つのブロック内アドレスの差分から一致位置が求められる。そして、１つのブロック内で一致位置が見つからない場合に、直前のブロック又はさらに前方のブロックを順に参照することで、ブロック間に跨った一致位置が求められる。このとき、各ブロックの順位リストを後方から前方に向かって参照しながら接頭部を比較することで、接頭部の値の降順に比較することができ、各順位リストの参照回数が最小限に抑えられる。
【００６７】
図１０は、図７のデータ圧縮装置５０１が行う一致位置リスト生成処理の例を示すフローチャートである。
【００６８】
まず、データ圧縮装置５０１は、入力された圧縮対象データ列７１１をデータ格納部５１１に格納し（ステップ１００１）、圧縮対象データ列７１１をブロックＢ（０）〜ブロックＢ（ｍ−１）のｍ個のブロックに分割する（ステップ１００２）。ｍは、２以上の整数である。
【００６９】
次に、ソート部７０１は、ブロックを識別する変数ｉに０を設定する（ステップ１００３）。そして、ソート部７０１は、ブロックＢ（ｉ）内の各ブロック内アドレスを始点とするデータ列を、各データ列の値の昇順にソートし、ブロックＢ（ｉ）の順位リストを生成する（ステップ１００４）。各データ列の値の昇順にデータ列をソートすることで、複数の同じデータ列が互いに隣接するようにデータ列が並べ替えられる。
【００７０】
次に、検出部５１３は、ブロックＢ（０）〜ブロックＢ（ｉ）のｉ＋１個の順位リストを参照して、ブロックＢ（ｉ）内の各アドレスを始点とするデータ列と一致する一致データ列を探索し、ブロックＢ（ｉ）の一致位置リストを生成する（ステップ１００５）。
【００７１】
次に、ソート部７０１は、ｉがｍ−１であるか否かをチェックし（ステップ１００６）、ｉがｍ−１でない場合（ステップ１００６，ＮＯ）、ｉを１だけインクリメントして（ステップ１００７）、ステップ１００４以降の処理を繰り返す。そして、ｉがｍ−１に達した場合（ステップ１００６，ＹＥＳ）、データ圧縮装置５０１は、処理を終了する。
【００７２】
図１１及び図１２は、図１０の一致位置リスト生成処理の具体例を示すフローチャートである。
【００７３】
この具体例では、ブロックサイズをＳバイト、各アドレスから始まるデータ列の接頭部のサイズをＮバイトとする。また、ブロックＢ（ｉ）の順位リストをＯｄｒ２Ｐｉ［］、一致位置リストをＰｒｅＰｉ［］とし、順位リストＯｄｒ２Ｐｉ［］の参照位置を示す参照ポインタをＰ＿Ｏｄｒ２Ｐｉとする。
【００７４】
Ｏｄｒ２Ｐｉ［ｘ］は、順位リストＯｄｒ２Ｐｉ［］のブロック内アドレスｘに格納された値を表し、ＰｒｅＰｉ［ｘ］は、一致位置リストＰｒｅＰｉ［］のブロック内アドレスｘに格納された値を表す。一致位置リスト生成処理の開始時には、すべてのＰｒｅＰｉ［ｘ］が“０”に初期化されている。
【００７５】
図１１のステップ１１０１〜ステップ１１０３の処理は、図１０のステップ１００１〜ステップ１００３の処理と同様である。ソート部７０１は、ブロックＢ（ｉ）内の各ブロック内アドレスを始点とするデータ列の接頭部を、接頭部の値の昇順にソートし、順位リストＯｄｒ２Ｐｉ［］を生成する（ステップ１１０４）。接頭部を昇順にソートすることで、順位リストＯｄｒ２Ｐｉ［］内で複数の同じ接頭部が互いに隣接するようになる。ブロックＢ（ｉ）内に複数の同じ接頭部が含まれている場合、ソート部７０１は、それらの同じ接頭部をブロック内アドレスの昇順にソートする。
【００７６】
次に、検出部５１３は、参照ポインタＰ＿Ｏｄｒ２Ｐ０〜参照ポインタＰ＿Ｏｄｒ２ＰｉにＳ−１を設定する（ステップ１１０５）。これにより、参照ポインタＰ＿Ｏｄｒ２Ｐ０〜参照ポインタＰ＿Ｏｄｒ２Ｐｉは、それぞれ、順位リストＯｄｒ２Ｐ０［］〜順位リストＯｄｒ２Ｐｉ［］の最後尾を指すように設定される。
【００７７】
次に、検出部５１３は、ブロックＢ（ｉ）内の所定のアドレスから始まる接頭部と同じ接頭部をブロックＢ（ｉ）内で探索するために、下記の条件１が成立するか否かをチェックする（ステップ１１０６）。
【００７８】
条件１：Ｐ＿Ｏｄｒ２Ｐｉが０でなく、かつ、圧縮対象データ列７１１のアドレスＸ（ｉ）から始まる接頭部がアドレスＹ（ｉ）から始まる接頭部と一致する。
Ｘ（ｉ）＝ｉ×Ｓ＋Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ］
Ｙ（ｉ）＝ｉ×Ｓ＋Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ−１］
【００７９】
条件１が成立する場合（ステップ１１０６，ＹＥＳ）、検出部５１３は、Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ］−Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ−１］の値をＰｒｅＰｉ［Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ］］に格納する（ステップ１１０７）。
【００８０】
次に、検出部５１３は、Ｐ＿Ｏｄｒ２Ｐｉを１だけデクリメントして、Ｐ＿Ｏｄｒ２Ｐｉと０とを比較し（ステップ１１０８）、Ｐ＿Ｏｄｒ２Ｐｉが０以上である場合（ステップ１１０８，ＮＯ）、ステップ１１０６以降の処理を繰り返す。Ｐ＿Ｏｄｒ２Ｐｉをデクリメントすることで、順位リストＯｄｒ２Ｐｉ［］の後方から前方へ向かって参照位置が移動する。
【００８１】
そして、Ｐ＿Ｏｄｒ２Ｐｉが０より小さくなった場合（ステップ１１０８，ＹＥＳ）、ソート部７０１は、ｉを１だけインクリメントして、ｉとｍを比較する（ステップ１１０９）。ｉがｍ以下である場合（ステップ１１０９，ＮＯ）、ソート部７０１は、ステップ１１０４以降の処理を繰り返し、ｉがｍより大きくなった場合（ステップ１１０９，ＹＥＳ）、ソート部７０１は、処理を終了する。ｉをインクリメントしてステップ１１０４以降の処理を繰り返すことで、次のブロックＢ（ｉ）の順位リストＯｄｒ２Ｐｉ［］が生成される。
【００８２】
一方、条件１が成立しない場合（ステップ１１０６，ＮＯ）、検出部５１３は、ソート済みのブロックを識別する変数ｂにｉを設定する（図１２、ステップ１２０１）。そして、検出部５１３は、ｂを１だけデクリメントして、ｂと０とを比較し（ステップ１２０２）、ｂが０より小さい場合（ステップ１２０２，ＮＯ）、ステップ１１０８以降の処理を繰り返す。
【００８３】
一方、ｂが０以上である場合（ステップ１２０２，ＹＥＳ）、検出部５１３は、Ｐ＿Ｏｄｒ２Ｐｂと０とを比較し（ステップ１２０３）、Ｐ＿Ｏｄｒ２Ｐｂが０より小さい場合（ステップ１２０３，ＮＯ）、ステップ１２０２以降の処理を繰り返す。
【００８４】
一方、Ｐ＿Ｏｄｒ２Ｐｂが０以上である場合（ステップ１２０３，ＹＥＳ）、検出部５１３は、ステップ１２０４の処理を行う。ステップ１２０４において、検出部５１３は、ブロックＢ（ｉ）内の所定のアドレスから始まる接頭部と同じ接頭部を、ブロックＢ（ｉ）よりも前方のブロックＢ（ｂ）内で探索するために、下記の条件２が成立するか否かをチェックする。
【００８５】
条件２：圧縮対象データ列７１１のアドレスＸ（ｉ）から始まる接頭部がアドレスＸ（ｂ）から始まる接頭部と一致する。
Ｘ（ｉ）＝ｉ×Ｓ＋Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ］
Ｘ（ｂ）＝ｂ×Ｓ＋Ｏｄｒ２Ｐｂ［Ｐ＿Ｏｄｒ２Ｐｂ］
【００８６】
条件２が成立する場合（ステップ１２０４，ＹＥＳ）、検出部５１３は、（ｉ−ｂ）×Ｓ＋Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ］−Ｏｄｒ２Ｐｂ［Ｐ＿Ｏｄｒ２Ｐｂ］の値をＰｒｅＰｉ［Ｏｄｒ２Ｐｉ［Ｐ＿Ｏｄｒ２Ｐｉ］］に格納する（ステップ１２０５）。そして、検出部５１３は、Ｐ＿Ｏｄｒ２Ｐｂを１だけデクリメントして（ステップ１２０６）、ステップ１１０８以降の処理を繰り返す。Ｐ＿Ｏｄｒ２Ｐｂをデクリメントすることで、順位リストＯｄｒ２Ｐｂ［］の後方から前方へ向かって参照位置が移動する。
【００８７】
一方、条件２が成立しない場合（ステップ１２０４，ＮＯ）、検出部５１３は、圧縮対象データ列７１１のアドレスＸ（ｉ）から始まる接頭部の値と、アドレスＸ（ｂ）から始まる接頭部の値とを比較する（ステップ１２０７）。
【００８８】
アドレスＸ（ｉ）から始まる接頭部の値がアドレスＸ（ｂ）から始まる接頭部の値より小さい場合（ステップ１２０７，ＹＥＳ）、検出部５１３は、Ｐ＿Ｏｄｒ２Ｐｂを１だけデクリメントして（ステップ１２０８）、ステップ１２０３以降の処理を繰り返す。
【００８９】
一方、アドレスＸ（ｉ）から始まる接頭部の値がアドレスＸ（ｂ）から始まる接頭部の値より大きい場合（ステップ１２０７，ＮＯ）、検出部５１３は、ステップ１２０２以降の処理を繰り返す。このとき、ステップ１２０２においてｂをデクリメントすることで、探索対象のブロックＢ（ｂ）がさらに前方のブロックへ変更される。したがって、順位リストＯｄｒ２Ｐｂ［］に格納された値のうち、Ｐ＿Ｏｄｒ２Ｐｂよりも前方の値については参照されることがなく、順位リストＯｄｒ２Ｐｂ［］の参照回数が最小限に抑えられる。
【００９０】
このような一致位置リスト生成処理によれば、１つのブロック内で一致位置が見つからない場合に、直前のブロック又はさらに前方のブロックを順に参照することで、ブロック間に跨った一致位置が求められる。このとき、各ブロックの順位リストを後方から前方に向かって参照しながら接頭部を比較することで、接頭部の値の降順に比較することができ、各順位リストの参照回数が最小限に抑えられる。
【００９１】
図５及び図７のデータ圧縮装置５０１の構成は一例に過ぎず、データ圧縮装置の用途や条件に応じて、一部の構成要素を省略又は変更してもよい。例えば、検出部５１３が一致位置リスト７１３を生成することなく、検出した一致データ列の一致位置の情報を符号化部５１４へ直接出力する場合は、図７の一致位置格納部７０２を省略することができる。
【００９２】
図８及び図９の圧縮対象データ列７１１は一例に過ぎず、圧縮対象データ列７１１は、音声データ、画像データ等の他のデータ列であっても構わない。圧縮対象データ列７１１のブロック数は２又は４に限られず、２以上の他の整数でもよい。
【００９３】
図６及び図１０〜図１２のフローチャートは一例に過ぎず、データ圧縮装置の構成や条件に応じて一部の処理を省略又は変更してもよい。例えば、ソート部７０１は、図１０のステップ１００４の順位リスト生成処理をｉがインクリメントされる度に行う代わりに、ステップ１００３の処理の前にすべてのブロックの順位リストを生成しても構わない。同様に、ソート部７０１は、図１１のステップ１１０４の順位リスト生成処理をｉがインクリメントされる度に行う代わりに、ステップ１１０３の処理の前にすべてのブロックの順位リストを生成しても構わない。
【００９４】
図１２のステップ１２０２において、検出部５１３は、デクリメントされたｂを０と比較する代わりに、０より大きな所定の整数と比較してもよい。ｂが所定の整数より小さくなった場合にステップ１２０３以降の処理を中止して、ステップ１１０８以降の処理を行うことで、探索対象のブロック数を削減して処理を高速化することができる。
【００９５】
図１２のステップ１２０４において条件２が成立しない場合（ステップ１２０４，ＮＯ）、検出部５１３は、ステップ１２０７の処理を行うことなく、直ちにステップ１２０８以降の処理を行ってもよい。
【００９６】
図１０のステップ１００４及び図１１のステップ１１０４において、ソート部７０１は、接頭部の値の昇順の代わりに、接頭部の値の降順に接頭部をソートしてもよい。この場合、検出部５１３は、各順位リストの参照位置を後方から前方へ向かって移動させる代わりに、前方から後方へ向かって移動させながら、同じ接頭部を探索する。これにより、接頭部の値の降順に接頭部を比較することができるため、各順位リストの参照回数が最小限に抑えられる。
【００９７】
また、すべてのブロックのサイズが同じである必要はなく、ブロックサイズはブロック毎に異なっていてもよい。図６及び図１０〜図１２のデータ圧縮処理は、ＬＺ７７符号化によるデータ圧縮処理に限らず、圧縮対象データ列中に繰り返し出現するデータ列を符号化する他のデータ圧縮処理に対しても適用することができる。
【００９８】
図５及び図７のデータ圧縮装置５０１は、例えば、図１３に示すような情報処理装置（コンピュータ）を用いて実現可能である。
【００９９】
図１３の情報処理装置は、ＣＰＵ１３０１、メモリ１３０２、入力装置１３０３、出力装置１３０４、補助記憶装置１３０５、媒体駆動装置１３０６、及びネットワーク接続装置１３０７を備える。これらの構成要素はバス１３０８により互いに接続されている。
【０１００】
メモリ１３０２は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを格納する。メモリ１３０２は、図５及び図７のデータ格納部５１１、アドレス格納部５１２、及び一致位置格納部７０２として用いることができる。
【０１０１】
ＣＰＵ１３０１（プロセッサ）は、例えば、メモリ１３０２を利用してプログラムを実行することにより、図５及び図７の検出部５１３、符号化部５１４、及びソート部７０１として動作する。ＣＰＵ１３０１内にキャッシュメモリが設けられている場合、そのキャッシュメモリをデータ格納部５１１、アドレス格納部５１２、及び一致位置格納部７０２として用いることもできる。
【０１０２】
入力装置１３０３は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示や情報の入力に用いられる。出力装置１３０４は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問い合わせ又は指示、及び処理結果の出力に用いられる。
【０１０３】
補助記憶装置１３０５は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置１３０５は、ハードディスクドライブ又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置１３０５にプログラム及びデータを格納しておき、それらをメモリ１３０２にロードして使用することができる。
【０１０４】
媒体駆動装置１３０６は、可搬型記録媒体１３０９を駆動し、その記録内容にアクセスする。可搬型記録媒体１３０９は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体１３０９は、Compact Disk Read Only Memory（ＣＤ−ＲＯＭ）、Digital Versatile Disk（ＤＶＤ）、Universal Serial Bus（ＵＳＢ）メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体１３０９にプログラム及びデータを格納しておき、それらをメモリ１３０２にロードして使用することができる。
【０１０５】
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ１３０２、補助記憶装置１３０５、又は可搬型記録媒体１３０９のような、物理的な（非一時的な）記録媒体である。
【０１０６】
ネットワーク接続装置１３０７は、Local Area Network、Wide Area Network等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェースである。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置１３０７を介して受け取り、それらをメモリ１３０２にロードして使用することができる。
【０１０７】
ＣＰＵ１３０１は、圧縮対象データ列７１１から生成した圧縮データを補助記憶装置１３０５へ出力することができ、補助記憶装置１３０５は、その圧縮データを格納することができる。ＣＰＵ１３０１は、圧縮データを媒体駆動装置１３０６へ出力することもでき、媒体駆動装置１３０６は、その圧縮データを可搬型記録媒体１３０９に記録することができる。ＣＰＵ１３０１は、圧縮データをネットワーク接続装置１３０７へ出力することもでき、ネットワーク接続装置１３０７は、その圧縮データを通信ネットワーク経由で外部の装置へ送信することができる。
【０１０８】
なお、情報処理装置が図１３のすべての構成要素を含む必要はなく、用途や条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザからの指示や情報を入力する必要がない場合は、入力装置１３０３を省略してもよい。オペレータ又はユーザへの問い合わせ又は指示、及び処理結果を出力する必要がない場合は、出力装置１３０４を省略してもよい。また、可搬型記録媒体１３０９又は通信ネットワークを利用しない場合は、媒体駆動装置１３０６又はネットワーク接続装置１３０７を省略してもよい。
【０１０９】
情報処理装置がスマートフォンのような通話機能を有する携帯端末である場合、マイク及びスピーカのような通話用の装置を含んでいてもよく、カメラのような撮像装置を含んでいてもよい。
【０１１０】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１１１】
図５乃至図１３を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数のブロックに分割された圧縮対象データ列を格納するデータ格納部と、
前記複数のブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後の前記複数のデータ列の順序で、前記複数のアドレスを表す複数のアドレス情報を格納するアドレス格納部と、
前記複数のアドレス情報に基づいて、前記複数のデータ列のうち第１のデータ列と一致する第２のデータ列を前記第１のブロック内で探索し、前記第１のブロック内に前記第２のデータ列が含まれていない場合、前記複数のブロックのうち第２のブロックを参照して前記第２のデータ列を検出する検出部と、
検出された前記第２のデータ列の情報に基づいて前記第１のデータ列を符号化して出力する符号化部と、
を備えることを特徴とするデータ圧縮装置。
（付記２）
前記データ格納部は、前記圧縮対象データ列を入力順に前方から後方へ向かって格納し、前記第２のブロックは、前記第１のブロックよりも前方のブロックであり、前記符号化部は、前記第２のデータ列の位置情報を用いて前記第１のデータ列を符号化することを特徴とする付記１記載のデータ圧縮装置。
（付記３）
前記アドレス格納部は、前記複数のアドレス情報を前記複数のデータ列の値の順序で格納し、前記検出部は、前記複数のアドレス情報をデータ列の値の降順に参照しながら前記第２のデータ列を探索することを特徴とする付記２記載のデータ圧縮装置。
（付記４）
前記アドレス格納部は、前記第２のブロック内の複数のアドレスを表す複数のアドレス情報を、前記第２のブロック内の前記複数のアドレスを始点とする複数のデータ列の値の順序で格納し、前記検出部は、前記第２のブロック内の前記複数のアドレスを表す前記複数のアドレス情報をデータ列の値の降順に参照しながら、前記第２のブロック内で前記第２のデータ列を探索し、参照位置のアドレス情報が表すアドレスを始点とする第３のデータ列の値が前記第１のデータ列の値よりも小さくなった場合、前記第２のブロックよりも前方の第３のブロックを参照して前記第２のデータ列を検出することを特徴とする付記３記載のデータ圧縮装置。
（付記５）
前記第１のブロックのサイズは、前記第１のブロック内の前記複数のアドレスを始点とする前記複数のデータ列を１つのキャッシュメモリ内で並べ替え可能なサイズであることを特徴とする付記１乃至４のいずれか１項に記載のデータ圧縮装置。
（付記６）
複数のブロックに分割された圧縮対象データ列を格納するデータ格納部を参照して、前記複数のブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後の前記複数のデータ列の順序で、前記複数のアドレスを表す複数のアドレス情報をアドレス格納部に格納し、
前記複数のアドレス情報に基づいて、前記複数のデータ列のうち第１のデータ列と一致する第２のデータ列を前記第１のブロック内で探索し、前記第１のブロック内に前記第２のデータ列が含まれていない場合、前記複数のブロックのうち第２のブロックを参照して前記第２のデータ列を検出し、
検出された前記第２のデータ列の情報に基づいて前記第１のデータ列を符号化して出力する、
処理をコンピュータに実行させるプログラム。
（付記７）
前記データ格納部は、前記圧縮対象データ列を入力順に前方から後方へ向かって格納し、前記第２のブロックは、前記第１のブロックよりも前方のブロックであり、前記符号化部は、前記第２のデータ列の位置情報を用いて前記第１のデータ列を符号化することを特徴とする付記６記載のプログラム。
（付記８）
前記アドレス格納部は、前記複数のアドレス情報を前記複数のデータ列の値の順序で格納し、前記第２のデータ列を探索する処理は、前記複数のアドレス情報をデータ列の値の降順に参照しながら前記第２のデータ列を探索することを特徴とする付記７記載のプログラム。
（付記９）
前記アドレス格納部は、前記第２のブロック内の複数のアドレスを表す複数のアドレス情報を、前記第２のブロック内の前記複数のアドレスを始点とする複数のデータ列の値の順序で格納し、前記第２のデータ列を探索する処理は、前記第２のブロック内の前記複数のアドレスを表す前記複数のアドレス情報をデータ列の値の降順に参照しながら、前記第２のブロック内で前記第２のデータ列を探索し、参照位置のアドレス情報が表すアドレスを始点とする第３のデータ列の値が前記第１のデータ列の値よりも小さくなった場合、前記第２のブロックよりも前方の第３のブロックを参照して前記第２のデータ列を検出することを特徴とする付記８記載のプログラム。
（付記１０）
前記第１のブロックのサイズは、前記第１のブロック内の前記複数のアドレスを始点とする前記複数のデータ列を１つのキャッシュメモリ内で並べ替え可能なサイズであることを特徴とする付記６乃至９のいずれか１項に記載のプログラム。
（付記１１）
コンピュータによって実行されるデータ圧縮方法であって、
複数のブロックに分割された圧縮対象データ列を格納するデータ格納部を参照して、前記複数のブロックのうち第１のブロック内の複数のアドレスを始点とする複数のデータ列を並べ替えた後の前記複数のデータ列の順序で、前記複数のアドレスを表す複数のアドレス情報をアドレス格納部に格納し、
前記複数のアドレス情報に基づいて、前記複数のデータ列のうち第１のデータ列と一致する第２のデータ列を前記第１のブロック内で探索し、前記第１のブロック内に前記第２のデータ列が含まれていない場合、前記複数のブロックのうち第２のブロックを参照して前記第２のデータ列を検出し、
検出された前記第２のデータ列の情報に基づいて前記第１のデータ列を符号化して出力する、
ことを特徴とするデータ圧縮方法。
（付記１２）
前記データ格納部は、前記圧縮対象データ列を入力順に前方から後方へ向かって格納し、前記第２のブロックは、前記第１のブロックよりも前方のブロックであり、前記符号化部は、前記第２のデータ列の位置情報を用いて前記第１のデータ列を符号化することを特徴とする付記１１記載のデータ圧縮方法。
（付記１３）
前記アドレス格納部は、前記複数のアドレス情報を前記複数のデータ列の値の順序で格納し、前記第２のデータ列を探索する処理は、前記複数のアドレス情報をデータ列の値の降順に参照しながら前記第２のデータ列を探索することを特徴とする付記１２記載のデータ圧縮方法。
（付記１４）
前記アドレス格納部は、前記第２のブロック内の複数のアドレスを表す複数のアドレス情報を、前記第２のブロック内の前記複数のアドレスを始点とする複数のデータ列の値の順序で格納し、前記第２のデータ列を探索する処理は、前記第２のブロック内の前記複数のアドレスを表す前記複数のアドレス情報をデータ列の値の降順に参照しながら、前記第２のブロック内で前記第２のデータ列を探索し、参照位置のアドレス情報が表すアドレスを始点とする第３のデータ列の値が前記第１のデータ列の値よりも小さくなった場合、前記第２のブロックよりも前方の第３のブロックを参照して前記第２のデータ列を検出することを特徴とする付記１３記載のデータ圧縮方法。
（付記１５）
前記第１のブロックのサイズは、前記第１のブロック内の前記複数のアドレスを始点とする前記複数のデータ列を１つのキャッシュメモリ内で並べ替え可能なサイズであることを特徴とする付記１１乃至１４のいずれか１項に記載のデータ圧縮方法。
【符号の説明】
【０１１２】
１０１  符号化位置
３０１  入力バッファ
３０２、７１２、８１１、８１２、９１１〜９１４  順位リスト
３０３、７１３、８２１、８２２、９２１〜９２４  一致位置リスト
５０１  データ圧縮装置
５１１  データ格納部
５１２  アドレス格納部
５１３  検出部
５１４  符号化部
７０１  ソート部
７０２  一致位置格納部
７１１  圧縮対象データ列
８０１、８０２、９０１〜９０４  ブロック
１３０１  ＣＰＵ
１３０２  メモリ
１３０３  入力装置
１３０４  出力装置
１３０５  補助記憶装置
１３０６  媒体駆動装置
１３０７  ネットワーク接続装置
１３０８  バス
１３０９  可搬型記録媒体
【図１】
2015159352.tif 000003
【図２】
2015159352.tif 000004
【図３】
2015159352.tif 000005
【図４】
2015159352.tif 000006
【図５】
2015159352.tif 000007
【図６】
2015159352.tif 000008
【図７】
2015159352.tif 000009
【図８】
2015159352.tif 000010
【図９】
2015159352.tif 000011
【図１０】
2015159352.tif 000012
【図１１】
2015159352.tif 000013
【図１２】
2015159352.tif 000014
【図１３】
2015159352.tif 000015
【手続補正書】
【提出日】平成27年1月5日(2015.1.5)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図３
【補正方法】変更
【補正の内容】
【図３】
2015159352.tif 000016