(57)【要約】【課題】復元速度を落とさずに符号量を減らす。【解決手段】データ圧縮装置は、一致検出部と一位置保持部と符号形式選択部と符号化部とを備える。一致検出部は、入力されたデータにおける先行の部分列と一致する一致列と、部分列の一致列からの相対位置と、一致列の長さである一致長と、を検出する。一位置保持部は、一つ前に符号化された相対位置を保持する。符号形式選択部は、相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、一致検出部により検出された相対位置の近さに基づいて、１つを選択する。符号化部は、バイト単位に符号を配置すると共に、一致検出部により検出された相対位置が、一位置保持部に保持されている一つ前に符号化された相対位置と同一の場合に、選択された符号形式に基づき、一致検出部により検出された相対位置を省略して符号化する。【選択図】図２
2019036810.tif 000002
【特許請求の範囲】
【請求項１】
入力されたデータにおける先行の部分列と一致する一致列と、前記部分列の前記一致列からの相対位置と、前記一致列の長さである一致長と、を検出する一致検出部と、
一つ前に符号化された前記相対位置を保持する一位置保持部と、
前記相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、前記一致検出部により検出された前記相対位置の近さに基づいて、１つを選択する符号形式選択部と、
バイト単位に符号を配置すると共に、前記一致検出部により検出された前記相対位置が、前記一位置保持部に保持されている前記一つ前に符号化された相対位置と同一の場合に、選択された前記符号形式に基づき、前記一致検出部により検出された相対位置を省略して符号化する符号化部と、
を備えることを特徴とするデータ圧縮装置。
【請求項２】
前記符号形式における前記相対位置に割り当てるためのビットの長さは、前記相対位置が近いほど短いことを特徴とする請求項１に記載のデータ圧縮装置。
【請求項３】
前記選択された符号形式を識別するために符号形式情報を用いることを特徴とする請求項１又は２に記載のデータ圧縮装置。
【請求項４】
前記符号化部は、
前記符号形式情報を、前記複数の符号形式において固定長のビットで符号化し、
前記符号化された符号形式情報を、符号化された１以上の前記一致長を含むデータの先頭に配置する
ことを特徴とする請求項３に記載のデータ圧縮装置。
【請求項５】
前記符号化部は、
前記符号形式情報を、前記複数の符号形式において２ビットで符号化し、
４つのデータの圧縮において用いられた、それぞれの前記符号形式に対応する前記符号形式情報を一まとめにし、圧縮された前記４つのデータの先頭に付与する、
ことを特徴とする請求項３又は４に記載のデータ圧縮装置。
【請求項６】
前記符号化部は、
前記符号形式情報を、前記複数の符号形式において固定長のビットで符号化し、
前記一致長を１つ含むデータの符号化の度に、該符号化において用いられた前記符号形式に対応する前記符号形式情報を符号化したものを、符号化された前記一致長を１つ含むデータの先頭に付与する、
ことを特徴とする請求項３又は４に記載のデータ圧縮装置。
【請求項７】
前記入力されたデータにおいて、一致する先行の部分列が存在しない非一致列の長さである非一致長の符号化には、短い長さのビットが割り当てられることを特徴とする請求項１から６のいずれか１項に記載のデータ圧縮装置。
【請求項８】
前記相対位置が省略されずに符号化される場合に、前記相対位置に割り当てるバイトの長さを２バイト以下とすることを特徴とする請求項１から７のいずれか１項に記載のデータ圧縮装置。
【請求項９】
先行の部分列と一致する一致列からの前記部分列の相対位置の近さに応じて選択された符号形式に基づき符号化されている符号、又は、一つ前に符号化された前記相対位置と同一の相対位置が省略され符号化されている符号を復元するデータ復元装置であって、
入力された符号から、該符号が生成された際に用いられた符号形式を識別するための符号形式情報を取得する符号形式情報取得部と、
一つ前に復元された前記相対位置を保持する一位置保持部と、
前記符号形式情報に基づき、符号化の際に前記相対位置が省略された符号の復元に、前記一位置保持部に保持されている前記一つ前に復元された相対位置を用いると共に、符号化の際に前記相対位置が省略されなかった符号の復元に、該符号に含まれる符号化された前記相対位置を用いる一致位置取得部と、
を備えることを特徴とするデータ復元装置。
【請求項１０】
入力されたデータにおける先行の部分列と一致する一致列と、前記部分列の前記一致列からの相対位置と、前記一致列の長さである一致長と、を検出し、
一つ前に符号化された前記相対位置を保持し、
前記相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、検出された前記相対位置の近さに基づいて、１つを選択し、
バイト単位に符号を配置すると共に、検出された前記相対位置が、保持されている前記一つ前に符号化された相対位置と同一の場合に、選択された前記符号形式に基づき、前記検出された相対位置を省略して符号化する、
処理をデータ圧縮装置に実行させるデータ圧縮プログラム。
【請求項１１】
先行の部分列と一致する一致列からの前記部分列の相対位置の近さに応じて選択された符号形式に基づき符号化されている符号、又は、一つ前に符号化された前記相対位置と同一の相対位置が省略され符号化されている符号を復元するためのデータ復元プログラムであって、
入力された符号から、該符号が生成された際に用いられた符号形式を識別するための符号形式情報を取得し、
一つ前に復元された前記相対位置を保持し、
前記符号形式情報に基づき、符号化の際に前記相対位置が省略された符号の復元に、保持されている前記一つ前に復元された相対位置を用いると共に、符号化の際に前記相対位置が省略されなかった符号の復元に、該符号に含まれる符号化された前記相対位置を用いる、
処理をデータ復元装置に実行させることを特徴とするデータ復元プログラム。
【請求項１２】
入力されたデータにおける先行の部分列と一致する一致列と、前記部分列の前記一致列からの相対位置と、前記一致列の長さである一致長と、を検出し、
一つ前に符号化された前記相対位置を保持し、
前記相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、検出された前記相対位置の近さに基づいて、１つを選択し、
バイト単位に符号を配置すると共に、検出された前記相対位置が、保持されている前記一つ前に符号化された相対位置と同一の場合に、選択された前記符号形式に基づき、前記検出された相対位置を省略して符号化する、
処理をデータ圧縮装置が実行することを特徴とするデータ圧縮方法。
【請求項１３】
先行の部分列と一致する一致列からの前記部分列の相対位置の近さに応じて選択された符号形式に基づき符号化されている符号、又は、一つ前に符号化された前記相対位置と同一の相対位置が省略され符号化されている符号を復元するデータ復元方法であって、
入力された符号から、該符号が生成された際に用いられた符号形式を識別するための符号形式情報を取得し、
一つ前に復元された前記相対位置を保持し、
前記符号形式情報に基づき、符号化の際に前記相対位置が省略された符号の復元に、保持されている前記一つ前に復元された相対位置を用いると共に、符号化の際に前記相対位置が省略されなかった符号の復元に、該符号に含まれる符号化された前記相対位置を用いる、
処理をデータ復元装置が実行することを特徴とするデータ復元方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮装置、データ復元装置、データ圧縮プログラム、データ復元プログラム、データ圧縮方法、およびデータ復元方法に関する。
【背景技術】
【０００２】
データの圧縮技術であるロスレスデータ圧縮技術の性能は、圧縮率（圧縮率＝（圧縮後のデータサイズ）／（元のデータサイズ））、圧縮速度、復元速度で測られる。従来のロスレスデータ圧縮方式としては、例えばＬＺ７７方式やＬＺ４方式が知られる。
【０００３】
ＬＺ７７方式は、データ圧縮装置に入力されたデータにおいて、先行の部分列（前部分列とも記載する）と一致する部分列（一致列とも記載する）がある場合、一致列を、一致長と一致位置に置き換え、データ量を削減する方式である。なお、一致長とは、一致列の長さであり、一致位置とは、一致列と一致する前部分列の当該一致列からの相対位置である。またこの方式では、入力されるデータにおいて一致する前部分列が存在しない非一致列がある場合に、圧縮データに、その非一致列と、その長さである非一致長とを含ませる。
【０００４】
ＬＺ４方式は、ＬＺ７７方式に属する方式であり、一致長、一致位置、非一致長の各々に予め定めた固定長のビットを割当てて符号化する方式である。なお、この固定長のビットはバイト単位に配置されるものである。この圧縮方式において非一致列は、そのまま圧縮データの一部とされる。このＬＺ４方式を用いた場合の復元速度は、ＬＺ７７方式において最も高速な復元速度の方式の一つとなる。
【０００５】
データの読み出しの速度の向上のためには、高い復元速度が求められると同時に、復元対象となるデータ量（符号量）がより少ないことが求められる。復元速度としては、例えば圧縮を行わない場合の読出速度の２、３倍程度の復元速度が求められることがある。 
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開第２００５―２８６３７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＬＺ４方式においては、一致位置に固定サイズである２バイトを割当て符号化する。この場合、圧縮できない非一致列を除き、符号の大半を一致位置に割り当てられたビットが占めてしまい、これにより圧縮率が低下する。
【０００８】
一方、ハフマン符号等により、一致位置の符号化において符号を可変長とすると、圧縮率は向上するが、復元速度が記憶媒体等の読出速度より遅くなる問題が発生し得る。
【０００９】
本発明の一つの側面に係る目的は、復元速度を落とさずに符号量を減らすことである。
【課題を解決するための手段】
【００１０】
本発明の一つの態様に係るデータ圧縮装置は、一致検出部と一位置保持部と符号形式選択部と符号化部とを備える。一致検出部は、入力されたデータにおける先行の部分列と一致する一致列と、部分列の一致列からの相対位置と、一致列の長さである一致長と、を検出する。一位置保持部は、一つ前に符号化された相対位置を保持する。符号形式選択部は、相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、一致検出部により検出された相対位置の近さに基づいて、１つを選択する。符号化部は、バイト単位に符号を配置すると共に、一致検出部により検出された相対位置が、一位置保持部に保持されている一つ前に符号化された相対位置と同一の場合に、選択された符号形式に基づき、一致検出部により検出された相対位置を省略して符号化する。
【発明の効果】
【００１１】
復元速度を落とさずに符号量を減らすことができる。
【図面の簡単な説明】
【００１２】
【図１】圧縮対象となる元データとＬＺ７７方式による圧縮データの各一例を示す図である。
【図２】第１の実施形態に係るデータ圧縮方法を説明するための図である。
【図３】第１、２、３の実施形態に係るデータ圧縮装置の機能ブロック図である。
【図４】第１、２、３の実施形態に係るデータ圧縮装置による処理のフローと従来のデータ圧縮処理のフローを示す図である。
【図５】第１、２、３の実施形態に係るデータ復元装置の機能ブロック図である。
【図６】第１、２、３の実施形態に係るデータ復元装置による処理のフローと従来のデータ復元処理のフローを示す図である。
【図７】第１、２、３の実施形態に係るデータ圧縮装置とデータ復元装置の各ハードウェア構成を例示する図である。
【図８】第２の実施形態に係るデータ圧縮方法を説明するための図である。
【図９】第３の実施形態に係るデータ圧縮方法を説明するための図である。
【発明を実施するための形態】
【００１３】
（第１の実施形態）
本実施形態に係るデータ圧縮方法は、ＬＺ７７方式に基づく圧縮方法であり、更に以下の点に着目されたものである。まず第１に、表形式データ等のデータでは、同じ部分列が繰返し用いられる傾向がある。第２に、このようなデータにおいては、一致列毎の一致位置が連続して同一となりやすい性質がある。また第３に、このようなデータにおいては、同一の部分列が近接して繰り返される場合が少なくないため、非一致長や、非一致列、又は一致位置などを短いビットで表現できる場合が少なくない。このため本実施形態では、圧縮の際に一致位置に係る情報に割り当てるバイトやビットの数を少なくし、これにより圧縮データのデータ量を減らし圧縮率を向上させる。また本実施形態においては、高速な復元速度の維持のため、符号化する部分列に割り当てるビットの長さを予め定めた固有のものとし、当該ビットをバイト単位に配置する。
【００１４】
本実施形態に係るデータ圧縮装置は、一致位置の情報（当該情報も一致位置と記載する）を保持する。そしてデータ圧縮装置は、入力されたデータにおいて新たな一致列を検出した場合で、当該一致列の一致位置が先に保持されていた一致位置と連続して同一である場合に、当該一致列の一致位置を省略して符号化する。またデータ圧縮装置は、一致位置が近接する場合と遠い場合とで、符号を切り替える。この具体的な説明を以下に述べる。
【００１５】
データ圧縮装置は、一致位置に対し割当てるビット（バイト）の長さがそれぞれ異なる複数の符号形式のいずれかを選択し、選択した符号形式に基づき、データの圧縮処理を行う。本実施形態においては、この符号形式は４種類存在するとする。データ圧縮装置は、入力されたデータにおいて、一致列を検出したときに、その一致列の最後までのデータを一塊として符号化する。当該一塊のデータをサブデータとも記載する。データ圧縮装置は、サブデータに含まれる一致列の一致位置が遠いか近いかにより、符号形式の１つを選択して、これに基づき当該サブデータの符号化を行う。
【００１６】
データ圧縮装置は、サブデータがどの符号形式に基づいて符号化されたかを識別するための情報（符号形式情報とも記載する）を割り当てたビット（識別ビットとも記載する）を、圧縮後の当該サブデータに付与する。より具体的には、本実施形態に係るデータ圧縮装置は、４つの連続するサブデータの符号化において、当該４つのサブデータを一まとめにしたデータの先頭に、これらの各サブデータの識別ビットを、４つのサブデータの順番に従って付与する。この識別ビットは、本実施形態においては、１つのサブデータに対し２ビットである。そのため、４つのサブデータの先頭には、これらに対応する４つの識別ビットを合わせた１バイトが付与されることになる。なお、識別ビットを合わせたものがバイト単位になれば、上述した態様に限定されない。例えば、２つのサブデータを一まとまりとし、これらの各識別ビットを４ビットとし、当該２つのサブデータの先頭にこれらの２つの識別ビットを付与してもよい。
【００１７】
図１および２を用いて具体的に説明する。図１は圧縮対象となる元データとＬＺ７７方式による圧縮データの各一例を示す図である。圧縮対象となる元のデータは、図１に示されるように、「２０１６０４０１，００１，２０１６０４０２，００２，２０１６０４０５，」である。これらの各数字には１バイトが割り当てられている。まず、このデータのうちの最初の一致列は、その４アドレス前のアドレス７から９までの部分列「０１，」と一致する、アドレス１１からアドレス１３までの部分列「０１，」である。このため、最初のサブデータは、アドレス１から１３までとなる。
【００１８】
なお、本実施形態においては、一致長が２バイト以下の一致列を一致列として扱わないこととする。なぜなら、一致長が２バイト以下の一致列の場合、これを一致長、又は一致長と一致列に置き換えて符号化しても、符号量が減らない場合が多いと考えられるからである。
【００１９】
ここで図１を参照し、ＬＺ７７方式により、アドレス１から１３までのサブデータである「２０１６０４０１，００１，」を圧縮した場合について説明する。このとき圧縮されたデータには、一致列であるアドレス１１から１３までの部分列に代わり、アドレス１１から１３までの一致長の３が含まれる。そして、当該一致列の先頭のアドレス１１からの、前部分列「０１，」の先頭のアドレス７の相対位置である４が、一致位置として圧縮データに含まれることになる。また当該サブデータ「２０１６０４０１，００１，」において、非一致列であるアドレス１から１０までの「２０１６０４０１，０」と、この場合の非一致長である１０が、圧縮データに含まれることになる。
【００２０】
アドレス１４から２０までのサブデータ「２０１６０４０」は、１３アドレス前の部分列と同一であるため、圧縮データには、一致位置として１３が含まれることになり、また当該一致列「２０１６０４０」の一致長の７が含まれることになる。当該サブデータには非一致列は存在しないため、当該サブデータを圧縮したデータにおいては、非一致長は「０」であり、非一致列の部分は存在しない。なお、以下では圧縮されたサブデータを、圧縮サブデータ又は符号とも記載する。ただし符号には、圧縮されたサブデータ以外に、圧縮された任意のデータの意味が含まれるとする。
【００２１】
図２は、本実施形態に係るデータ圧縮方法を説明するための図である。ここでも元データとして図１に示したものを用いる。図２の左下の四角内において、本実施形態における符号形式が示される。本実施形態では、４つの符号形式（符号形式Ａ、Ｂ、Ｃ、Ｄ）が存在する。サブデータ毎に、これらの符号形式のうちの１つが選択され、これに基づき圧縮サブデータが生成される。本実施形態においては、上述のように４つの圧縮サブデータは一まとめにされる。そしてこの４つの圧縮サブデータの先頭には、これらの各圧縮サブデータの生成の際に選択された符号形式を示す識別ビットが、４つの圧縮サブデータの順番に従って、まとめられて付与される。
【００２２】
図２の左下において、各符号の先頭の１バイトには非一致長と一致長が割り当てられる。ここでは非一致長に割り当てるビットを一致長に割り当てるビットの前に配置しているが、これは一例であり、この順番に限定されない。ここでは、非一致長と一致長とに対し、それぞれ４ビット割り当てられる。ここでは、非一致長のビット表現における最大値を「１１１０」とする。このため非一致長に割り当てられるビットが「１１１１」の場合には、これは非一致長をビット表現したものとはならない。代わりに、当該「１１１１」は、新たに非一致長に割り当てるための１バイトが追加されたことを示すものである。当該１バイトは、非一致長と一致長が割り当てられる１バイトのすぐ後ろに追加される。この追加された１バイトと、元の４ビットにより、非一致長はビット表現される。
【００２３】
同様に、サブデータの一致長のビット表現における最大値は「１１１０」であり、「１１１１」のビットの場合、これは、更に一致長に割り当てられるための１バイトを追加したことを示すものである。この追加される１バイトは、非一致長と一致長に割り当てられる１バイト、又は非一致長に更に割り当てられる１バイトのすぐ後ろに追加される。
【００２４】
また本実施形態に係るデータ圧縮装置１は、上述したように、元データにおいて一致長が３バイト以上の一致列を、一致長、又は一致長と一致位置に置き換え符号化する。このため、符号化された一致長は、「実際の一致長−３」をビット表現したものとなる。また一致長が２バイト以下の一致列は、一致列として、後述する検出の対象とはならない。
【００２５】
各符号には、次に非一致列が割り当てられる。なおこの非一致列が割り当てられるビットやバイトの数は非一致長に応じて任意である。
【００２６】
次に符号形式について詳細に説明する。符号形式Ａは、一致位置が、前の符号における一致位置と等しい場合に選択される符号形式である。例えば、図２の上の四角内に示されたＬＺ７７方式による圧縮データにおいて、左から２番目、３番目、４番目の各括弧において示される圧縮サブデータ内の一致位置の値は互いに等しく１３である。このとき、元データにおける３番目と４番目の各サブデータの圧縮のため、符号形式Ａが選択される。符号形式Ａにおいては、一致位置に割り当てるビットの長さは０ビットであり、一致位置は符号中に含まれない。符号形式Ａの場合の識別ビットは、図２に示す一例では「００」となる。
【００２７】
符号形式Ｂは、一致位置が、前の符号の一致位置と異なり、且つ１バイトで表現可能な数（２８−１＝２５５以下の整数）の場合に選択される符号形式である。この符号形式では、一致位置に対し１バイトが割り当てられる。符号形式Ｂの場合の識別ビットは、図２に示す一例では「０１」となる。
【００２８】
符号形式Ｃは、一致位置が、前の符号の一致位置と異なり、且つ、１バイトでは表現できず、２バイトで表現可能な数（２１６−１以下の整数）の場合に選択される符号形式である。この符号形式では、一致位置に対し２バイトが割り当てられる。符号形式Ｃの場合の識別ビットは、図２に示す一例では「１０」となる。
【００２９】
符号形式Ｄは、一致位置が、前の符号の一致位置と異なり、且つ、２バイトでは表現できず、３バイトで表現可能な数（２２４−１以下の整数）の場合に選択される符号形式である。この符号形式では、一致位置に対し３バイトが割り当てられる。符号形式Ｃの場合の識別ビットは、図２に示す一例では「１１」となる。
【００３０】
各符号形式における、非一致列が割り当てられるビットを除く、識別ビットの２ビットを含めた符号のビットの総数は、例えば符号形式Ａの場合には１０（２（識別ビット）＋４（非一致長）＋４（一致長）＋０（一致位置）＝１０）となる。同様に、符号形式Ｂでは１８、符号形式Ｃでは２６、符号形式Ｄでは３４となる。
【００３１】
本実施形態に係るデータ圧縮装置により、図１に示す元データを圧縮して得られるデータは、図２の右下に示される。ここでは、図２の上のＬＺ７７方式による圧縮データを用いて、図２の右下のデータを説明する。まず、ＬＺ７７方式による圧縮データのうちの左から１番目の圧縮サブデータを参照すると、非一致長は１０、一致長は３である。このため、図２の右下の１番目の符号（符号１）において先頭は、「１０」をビット表現したものと、３を差し引かれた「３」をビット表現したものとをこの順番で組み合わせたものとなる。
【００３２】
また当該符号１では、非一致列である「２０１６０４０１，０」に１０バイトが割り当てられている。また、このとき一致位置は４であり、これは１バイトで表される数であるため、符号形式Ｂが選択されている。このため符号１の識別ビットは「０１」となる。
【００３３】
同様に、ＬＺ７７方式による圧縮データのうちの左から４番目の圧縮サブデータを参照すると、一致位置は１３である。これは、当該圧縮データにおいて、直前の、左から３番目の圧縮サブデータにおける一致位置の１３と等しい。このため、図２の右下における４番目の符号（符号４）の生成において符号形式Ａが選択されることがわかる。そして、これにより符号４の生成において、一致位置には０バイトが割り当てられることがわかる。
【００３４】
図３は、本実施形態に係るデータ圧縮装置１の機能ブロック図である。データ圧縮装置１は、入力バッファ保持部１０、一致検出部１１、一位置保持部１２、位置比較部１３、保持位置更新部１４、および符号形式選択部１５等を備える。また更にデータ圧縮装置１は、符号形式情報出力部１６、一致長／一致位置出力部１７、非一致長／非一致列出力部１８、符号構成部１９、および出力バッファ保持部１９’等を備える。ここで符号形式情報出力部１６と一致長／一致位置出力部１７と符号構成部１９との組み合わせ、又は、符号形式情報出力部１６と一致長／一致位置出力部１７と非一致長／非一致列出力部１８と符号構成部１９との組み合わせを符号化部とも記載する。
【００３５】
入力バッファ保持部１０、一致検出部１１、および非一致長／非一致列出力部１８は、互いに接続されている。一致検出部１１、位置比較部１３、および符号形式選択部１５は、互いに接続されている。一位置保持部１２、位置比較部１３、および保持位置更新部１４は、互いに接続されている。符号形式選択部１５は、符号形式情報出力部１６および一致長／一致位置出力部１７に接続されている。符号形式情報出力部１６、一致長／一致位置出力部１７、および非一致長／非一致列出力部１８は、符号構成部１９に接続されている。符号構成部１９は、出力バッファ保持部１９に接続されている。なお、ここに示した接続関係は一例であり、これ以外の接続関係があってもよい。
【００３６】
データ圧縮装置１は、入力バッファ保持部１０を介し被圧縮データを入力される。入力バッファ保持部１０は、入力された被圧縮データを保持する。
【００３７】
一致検出部１１は、被圧縮データから、一致列を検出すると共に、当該一致列の一致位置、および一致長を検出する。当該検出は、被圧縮データを最初から順次読み取って行われる。一致検出部１１は、被圧縮データにおいて一致列が検出される毎に、当該一致列を含むサブデータを生成する。なお、一致検出部１１は、被圧縮データをまとめて取得し、１以上のサブデータへと分割し、これらのサブデータに逐次的に処理を行ってもよい。
【００３８】
一位置保持部１２は、１つ前のサブデータの符号化において用いられた一致位置（１つ前の一致位置、直前の一致位置、又は前回の一致位置とも記載する）を保持する。
【００３９】
位置比較部１３は、現時点の符号化（復元）の処理対象のサブデータ（今回のサブデータとも記載する）における一致列の一致位置（今回の一致位置とも記載する）と、一位置保持部１２に保持されている一致位置とを比較する。
【００４０】
保持位置更新部１４は、位置比較部１３により互いに比較された２つの一致位置が異なる場合に、一位置保持部１２が保持する一致位置を、今回の一致位置に更新する。また保持位置更新部１４は、今回の一致位置が前回の一致位置と同一である場合には、一位置保持部１２が保持する一致位置を更新しない。ただしこれに限定されず、保持位置更新部１４は、今回の一致位置が前回の一致位置と同一である場合には、一位置保持部１２が保持する一致位置を同じ値に更新してもよい。
【００４１】
符号形式選択部１５は、一致検出部１１より一致長と一致位置等を取得する。また符号形式選択部１５は、位置比較部１３による処理結果を取得し、今回の一致位置が、位置比較部１３に保持されていた一致位置と同一の場合には符号形式Ａを選択する。それ以外の場合には符号形式選択部１５は、今回の一致位置が近いか遠いかに応じ、符号形式Ｂ、Ｃ、Ｄのいずれかを選択する。符号形式選択部１５は、選択した符号形式に対応する符号形式情報を符号形式情報出力部１６に出力する。なお符号形式選択部１５は、位置比較部１３から一致長と一致位置等を取得してもよい。
【００４２】
符号形式情報出力部１６は、符号形式選択部１５からの符号形式情報を符号化し、これを符号構成部１９に出力する。符号形式情報出力部１６は、１つの符号形式情報を符号化するたびに、これを符号構成部１９に出力する。ただしこれに限定されず、符号形式情報出力部１６は、例えば４つの符号化情報の符号化毎に、これらをまとめたものを符号構成部１９へ出力してもよい。
【００４３】
一致長／一致位置出力部１７は、符号形式選択部１５より今回のサブデータにおける一致列の一致長と符号形式情報、又は一致長と一致列と符号形式情報を取得する。また一致長／一致位置出力部１７は、符号形式に応じて今回の一致位置を符号化すると共に、今回のサブデータにおける一致列の一致長を符号化し、これらの符号化したデータを符号構成部１９に出力する。
【００４４】
非一致長／非一致列出力部１８は、一致検出部１１から順次１つずつ、サブデータおよび当該サブデータ中の一致列等を取得する。そして非一致長／非一致列出力部１８は、サブデータと一致列から非一致列を生成する。あるいは、非一致長／非一致列出力部１８は、入力バッファ保持部１０から被圧縮データ、一致検出部１１から一致列等を取得してもよい。そして非一致長／非一致列出力部１８は、被圧縮データにおける一致列毎にサブデータを生成し、サブデータから一致列を省いた非一致列を生成してもよい。
【００４５】
非一致長／非一致列出力部１８は、生成した非一致列の非一致長を導出する。当該非一致長の導出は、非一致長／非一致列出力部１８が、生成した非一致列を順次カウントアップして行われる。ただし、これに限定されない。例えば、非一致長／非一致列出力部１８は、入力バッファ保持部１０から被圧縮データ、一致検出部１１から一致列等を取得し、一致検出部１１と非一致長／非一致列出力部１８が同期を取りながら、バイト単位で被圧縮データを取得する場合が考えられる。そしてこの場合、非一致長／非一致列出力部１８は、一致検出部１１が一致列を検出した場合、通知を受けるとする。この通知までの間、非一致長／非一致列出力部１８は、入力バッファ保持部１０からの被圧縮データをカウントし、非一致長を導出してもよい。あるいはまた、一致検出部１１が、一致列を検出するまでの間、非一致長をカウントしていき、一致列が検出されたときに、当該非一致長を非一致長／非一致列出力部１８に出力してもよい。非一致長／非一致列出力部１８は、非一致列と非一致長とを符号化し、これらを符号構成部１９へ出力する。
【００４６】
符号構成部１９は、符号形式情報出力部１６と一致長／一致位置出力部１７と非一致長／非一致列出力部１８からの各符号を図２の下に示すように並べ替え、一まとめにしたものを、圧縮データを出力する。この並べ替えは、例えば以下のように行われる。符号構成部１９は、符号形式情報出力部１６と一致長／一致位置出力部１７と非一致長／非一致列出力部１８から、互いに同一の１つのサブデータに対応する各符号を取得する。そして、符号構成部１９は、非一致長／非一致列出力部１８からの符号を一致長／一致位置出力部１７の前に配置する。そして、符号構成部１９は、一致長／一致位置出力部１７と非一致長／非一致列出力部１８からの次のサブデータに対応する符号にも同様の処理をする。そして、符号構成部１９は、当該処理後の符号を前の処理に係る符号（一致長／一致位置出力部１７と非一致長／非一致列出力部１８からの各符号を処理したもの）の後に配置する。本実施形態における符号構成部１９は、符号形式情報出力部１６からの符号（識別ビットの情報）を、入力される順番に配置する。また本実施形態における符号構成部１９は、４つのサブデータに係る符号が入力されるまで、上記処理を繰り返す。そして本実施形態における符号構成部１９は、４つの識別ビットの組み合わせを、上記一致長／一致位置出力部１７と非一致長／非一致列出力部１８からの各符号の配置処理をしたものの４つの組合せの前に付与する。
【００４７】
なおこれ以外にも符号構成部１９は、圧縮サブデータ毎に、上記各部からの符号を、符号形式情報出力部１６からの符号、非一致長／非一致列出力部１８からの符号、一致長／一致位置出力部１７からの符号の順に配置していってもよい。
【００４８】
出力バッファ保持部１９’は、符号構成部１９から出力された圧縮サブデータを保持し、出力する。
【００４９】
図４は、本実施形態に係るデータ圧縮装置による処理のフローと従来のデータ圧縮処理のフローを示す図である。図４の左側には、従来のデータ圧縮処理のフローが示され、右側には、本実施形態に係るデータ圧縮装置による処理のフローが示される。
【００５０】
まず、本実施形態における圧縮処理との比較のために、従来のデータ圧縮処理について端的に説明する。従来のデータ圧縮装置は、被圧縮データが入力されると、当該データにおける先行する任意の部分列と一致する一致列が存在するか探索する（ステップＳ１００）。一致列が検出されなかった場合には（ステップＳ１０１：ＮＯ）、従来のデータ圧縮装置は非一致長をカウントアップし（ステップＳ１０２）、更に一致列の探索を行う（ステップＳ１００）。一致列が検出された場合には（ステップＳ１０１：ＹＥＳ）、従来のデータ圧縮装置は、非一致長と非一致列とを符号化し（ステップＳ１０３）、一致長と一致位置とを符号化する（ステップＳ１０４）。従来のデータ圧縮装置は、被圧縮データの終了部分まで符号化が行われた場合には（ステップＳ１０５：ＹＥＳ）、処理を終了し、そうでない場合には（ステップＳ１０５：ＮＯ）、符号化を未だ行っていない被圧縮データにおいて一致列の探索を行う（ステップＳ１００）。
【００５１】
次に、図４の右側に示されたフローチャートを用いて、本実施形態に係るデータ圧縮装置１による処理について説明する。まず初期化として、一位置保持部１２は、直前の一致位置に対応するパラメータＩに０を格納し、これを保持する（ステップＳ２００）。Ｉへの０の格納処理は、ここでは保持位置更新部１４により行われるとするが、一位置保持部１２により行われてもよい。
【００５２】
次に、一致検出部１１は、入力バッファ保持部１０により入力された被圧縮データにおいて、先行する任意の部分列を一致する一致列を探索する（ステップＳ２０１）。
【００５３】
一致列が検出されない間（ステップＳ２０２：ＮＯ）、一致検出部１１又は非一致長／非一致列出力部１８は、非一致長をカウントアップする（ステップＳ２０３）。なお、非一致長の初期値は０である。
【００５４】
一致列が検出された場合（ステップＳ２０２：ＹＥＳ）、非一致長／非一致列出力部１８は、非一致長と非一致列とを符号化する（ステップＳ２０３）。
【００５５】
位置比較部１３は、一致検出部１１から取得した一致位置と、一位置保持部１２に保持されているＩの値とを比較する（ステップＳ２０４）。
【００５６】
今回の一致位置とＩの値とが異なる場合（ステップＳ２０４：ＮＯ）、位置比較部１３は当該結果と今回の一致位置を保持位置更新部１４へ出力する。保持位置更新部１４は、一位置保持部１２が保持するＩの値を、位置比較部１３から取得した今回の一致位置に更新する（ステップＳ２０５）。
【００５７】
今回の一致位置とＩの値とが同一の場合（ステップＳ２０４：ＹＥＳ）、位置比較部１３は当該結果を保持位置更新部１４へ出力する。保持位置更新部１４は、これを受けて一位置保持部１２の保持するＩの値を更新しない。ただしこれに限定されず、今回の一致位置とＩの値とが同一の場合には、位置比較部１３は当該結果を保持位置更新部１４へ出力しないこととしてもよく、これにより保持位置更新部１４からのＩの更新処理は行われないものとしてもよい。あるいは、今回の一致位置とＩの値とが同一の場合、位置比較部１３は当該結果と今回の結果とを保持位置更新部１４へ出力し、これに応じて保持位置更新部１４はＩを更新しなくとも、若しくは同一の値に更新してもよい。
【００５８】
符号形式選択部１５は、位置比較部１３からの比較結果、又は位置比較部１３からの比較結果と一致検出部１１からの一致位置に基づいて、符号形式を選択する（ステップＳ２０６）。符号形式選択部１５は、選択した符号形式に対応する符号形式情報を符号形式情報出力部１６に出力する。
【００５９】
符号形式情報出力部１６は、符号形式情報を符号化する（ステップＳ２０７）。
一致長／一致位置出力部１７は、符号形式選択部１５からの符号形式情報に基づき、符号形式選択部１５を介して一致検出部２１から取得した一致長と一致位置とを符号化する。なお、符号形式選択部１５からの符号形式情報が、上述した符号形式Ａに対応するものであれば、一致長／一致位置出力部１７は、当該符号形式情報と一致長とを符号形式選択部１５から取得し、一致位置を取得しなくともよい。
【００６０】
一致検出部１１が被圧縮データの最後まで探索を行った場合など、被圧縮データの符号化が終了した場合（ステップＳ２０９：ＹＥＳ）、本実施形態に係るデータ圧縮装置１による処理は終了する。一方、被圧縮データの符号化が終了していない場合（ステップＳ２０９：ＮＯ）、一致検出部１１による一致列の探索が行われる（ステップＳ２０１）。
【００６１】
本実施形態に係るデータ圧縮装置１による処理のフローにおいて、ステップＳ２０４は、ステップＳ２０７の処理の前後や、ステップＳ２０５とステップＳ２０６の処理と並行して行われてもよい。またステップＳ２０７とステップＳ２０８の処理は逆の順序で行われても、並行して行われてもよい。またステップＳ２０４の処理がステップＳ２０７の処理の前後に実行される場合には、当該ステップＳ２０４の処理は、ステップＳ２０７又はステップＳ２０８と並列して行われても、ステップＳ２０７又はステップＳ２０８と順序を入れ替えて行われてもよい。
【００６２】
本実施形態に係るデータ圧縮装置１による処理は、従来の処理に比べ、ステップＳ２００、およびステップＳ２０５からステップ２０８の処理が加わっている。また、ステップＳ２０９における符号化には、符号形式情報が用いられており、この点も従来の場合と異なる。
【００６３】
次に、上記データ圧縮装置１により圧縮された圧縮データを復元するデータ復元装置について説明する。図５は、本実施形態に係るデータ復元装置２の機能ブロック図である。データ復元装置２は、入力バッファ保持部２０、符号形式情報取得部２１、一位置保持部２２、保持位置更新部２３、一致長／一致位置取得部２４、および非一致長取得部２５等を備える。更にまたデータ復元装置２は、非一致列出力部２６、一致列出力部２７、および出力バッファ保持部２８等を備える。入力バッファ保持部２０、符号形式情報取得部２１、および一致長／一致位置取得部２４は、互いに接続されている。入力バッファ保持部２０、非一致長取得部２５、および非一致列出力部２６は、互いに接続されている。符号形式情報取得部２１は、保持位置更新部２３および非一致長取得部２５に接続されている。一位置保持部２２は、保持位置更新部２３および一致長／一致位置取得部２４に接続されている。一致長／一致位置取得部２４は、一致列出力部２７に接続されている。非一致列出力部２６および一致列出力部２７は、出力バッファ保持部２８に接続されている。なお、接続関係は上記に限定されない。
【００６４】
入力バッファ保持部２０は、圧縮データの入力を受け付け、これを保持する。
符号形式情報取得部２１は、入力バッファ保持部２０が保持する圧縮データの符号形式情報（ビット表現された符号形式情報であり、これも以下では符号形式情報と記載する場合もあるとする）等を取得する。ここでは符号形式情報取得部２１は、４つの圧縮サブデータの先頭に付与された１バイトからの符号形式情報と、これに対応する圧縮サブデータの一致位置を、圧縮サブデータ毎に順番に取得する。ただしこれに限定されず、符号形式情報取得部２１は、４つの圧縮サブデータの１セットにおける符号形式情報と一致位置の組を取得してもよい。また、入力バッファ保持部２０に保持された圧縮データが、圧縮サブデータ毎に、その先頭に、これに対応する１つの符号形式情報が付与されたものである場合、符号形式情報取得部２１は、逐次的に、当該圧縮サブデータと符号識別情報との組を取得してもよい。また符号形式情報取得部２１は、一致位置以外に一致長等を取得してもよい。
【００６５】
一位置保持部２２は、一致位置を保持する。
保持位置更新部２３は、符号形式情報取得部２１より取得した符号形式情報に従って一位置保持部２２が保持する一致位置を更新する。ここでは、符号形式情報がビット表現で「０１」、「１０」、又は「１１」のときに、保持位置更新部２３は、一位置保持部２２が保持する一致位置を更新する。一方、符号形式情報がビット表現で「００」の場合、保持位置更新部２３は、一位置保持部２２が保持する一致位置を更新しない。ただしこれに限定されず、符号形式情報がビット表現で「００」の場合、保持位置更新部２３は、一位置保持部２２が保持する一致位置を同一の値に更新してもよい。また、一位置保持部２２に保持される一致位置が更新されない場合、すなわち符号形式情報がビット表現で「００」のときは、符号形式情報取得部２１から保持位置更新部２３への出力はなくともよい。
【００６６】
保持位置更新部２３は、符号形式情報取得部２１から順次、符号形式情報と、これに対応する圧縮サブデータにおける一致位置を取得する。
【００６７】
保持位置更新部２３は、今回の符号形式情報がビット表現で「０１」、「１０」、又は「１１」のときに、一位置保持部２２の保持する一致位置を、符号形式情報取得部２１から取得した今回の一致位置に更新する。
【００６８】
一致長／一致位置取得部２４は、入力バッファ保持部２０又は符号形式情報取得部２１から符号形式情報を取得する。また一致長／一致位置取得部２４は、当該符号形式情報に基づき、今回の圧縮サブデータの一致位置と一致長を入力バッファ保持部２０（若しくは符号形式情報取得部２１）、又は一位置保持部２２から取得する。一致長／一致位置取得部２４は、今回の符号形式情報が「００」以外の場合には、入力バッファ保持部２０（又は符号形式情報取得部２１）から今回の圧縮サブデータの一致位置を取得する。一方、今回の符号形式情報が「００」の場合には、一致長／一致位置取得部２４は、一位置保持部２２から一致位置を取得する。一致長／一致位置取得部２４は、入力バッファ保持部２０（又は符号形式情報取得部２１）から今回の圧縮サブデータの一致長を取得する。
【００６９】
ここで符号形式情報取得部２１と一致長／一致位置取得部２４等が取り扱う情報を同じ圧縮サブデータのものとするため、符号形式情報取得部２１は、一致長／一致位置取得部２４へ、入力バッファ保持部２０からデータを読み込む毎に通知を行ってもよい。そしてこれに基づき、一致長／一致位置取得部２４は、入力バッファ保持部２０から順番に１つずつ圧縮サブデータの一致長と一致位置の組み合わせを取得してもよい。あるいは、符号形式情報取得部２１が、入力バッファ保持部２１から一致長と一致位置（符号形式情報のビットが「００」以外のとき）を取得し、圧縮サブデータ毎に、一致長／一致位置取得部２４に出力してもよい。
【００７０】
非一致長取得部２５は、今回の圧縮サブデータにおける非一致長を、入力バッファ保持部２０（又は符号形式情報取得部２１）から取得する。非一致長取得部２５は、入力バッファ保持部２０（又は符号形式情報取得部２１）から非一致列を取得してもよい。非一致長取得部２５が処理する対象を、今回の圧縮サブデータに対応するものとするため、上記一致長／一致位置取得部２４における場合と同様に、符号形式情報取得部２１から通知等がされてもよい。非一致長取得部２５は、取得した非一致長を復元する。
【００７１】
非一致列出力部２６は、非一致長取得部２５から非一致長を取得し、当該非一致長分の非一致列を非一致列出力部２６又は入力バッファ保持部２０から取得する。そして非一致列出力部２６は、取得した非一致列をコピーして出力バッファ保持部２８へ出力する。なお、ここで非一致列出力部２６が入力バッファ保持部２０から非一致列を取得する場合には、当該非一致列を含む圧縮サブデータを今回の圧縮サブデータと一致させるため、非一致長取得部２５から通知等がされてもよい。
【００７２】
一致列出力部２７は、一致長／一致位置取得部２４から今回の圧縮サブデータの一致長と一致位置を取得し、一致位置における一致長分の一致列を復元する。このときに一致列出力部２７は、出力バッファ保持部２８から、先に復元されたデータにおいて、取得した一致位置に存在する一致長分の一致列を取得（コピー）する。そして一致列出力部２７は、コピーした一致列を出力バッファ保持部２８へ出力する。なお、この出力は、非一致列出力部２６からの出力バッファ保持部２８への出力の後毎に行われてもよい。
【００７３】
出力バッファ保持部２８は、非一致列出力部２６と一致列出力部２８からの各出力内容を保持し、これらの組み合わせを元データとして出力する。
【００７４】
図６は、本実施形態に係るデータ復元装置による処理のフローと従来のデータ復元処理のフローを示す図である。まず、本実施形態に係るデータ復元処理が従来のものとどのように異なるかを示すため、従来のデータ復元処理について端的に説明する。
【００７５】
従来のデータ復元装置においては、非一致長が復元され（ステップＳ３００）、圧縮データから当該復元された非一致長分の非一致列がコピーされ、これが出力バッファに出力される（ステップＳ３０１）。また圧縮データからの一致長と一致位置が復元され（ステップＳ３０２）、当該一致長分の一致列が出力バッファから読み込まれてコピーされ、これにより復元された一致列が出力バッファへ出力される。圧縮データは、順次このように復元されるが、圧縮データの最後の部分の復元処理が終わらない間は（ステップＳ３０４：ＮＯ）、上記処理は繰り返され、圧縮データの最後の部分の復元処理が終わった場合（ステップＳ３０４：ＹＥＳ）、処理は終了する。
【００７６】
次に本実施形態に係るデータ復元装置２による処理のフローについて説明する。データ復元装置２の保持位置更新部２３は、入力バッファ保持部２０への新たな圧縮データの入力に先立ち、あるいは当該入力に伴い、一位置保持部２２が保持する一致位置を初期化する。このときに保持位置更新部２３は、一致位置のパラメータＩに０を格納する（ステップＳ４００）。Ｉは、順次処理される圧縮サブデータにおいて、直前の一致位置を指し示すパラメータである。
【００７７】
非一致長取得部２５は、今回の圧縮サブデータの非一致長を入力バッファ保持部２０（又は符号形式情報取得部２１）から取得し、これを復元する（ステップＳ４０１）。非一致列出力部２６は、当該非一致長分の非一致列を、入力バッファ保持部２０又は非一致長取得部２５から取得し、これをコピーしたものを出力バッファ保持部２８へ出力する。
【００７８】
符号形式情報取得部２１は、入力バッファ保持部２０より、今回の圧縮サブデータの、符号形式情報を取得して復元する（ステップＳ４０３）。
【００７９】
符号形式情報取得部２１は、復元した符号形式情報を保持位置更新部２３へ出力する。符号形式情報取得部２１は、符号形式情報のビット表現が「００」以外の場合、今回の圧縮サブデータの一致位置を保持位置更新部２３へ出力する。なお、符号形式情報取得部２１は、符号形式情報のビット表現が「００」の場合、今回の圧縮サブデータの一致位置を保持位置更新部２３へ出力してもよいし、しなくともよい。
【００８０】
保持位置更新部２３は、符号形式情報から、保持されている直前の一致位置が今回の一致位置と同一かどうかを判断する（ステップＳ４０４）。直前の一致位置と今回の一致位置が異なる場合には（ステップＳ４０４：ＮＯ）、保持位置更新部２３は、一位置保持部２２におけるＩを今回の一致位置に更新する（ステップＳ４０５）。直前の一致位置と今回の一致位置が同一の場合には（ステップＳ４０４：ＹＥＳ）、Ｉの更新はされない。
【００８１】
一致長／一致位置取得部２４は、符号形式に基づき、入力バッファ保持部２０（若しくは符号形式情報取得部２１）、又は一位置保持部２２から一致位置を取得する。また一致長／一致位置取得部２４は、入力バッファ保持部２０（若しくは符号形式情報取得部２１）から一致長を取得して、一致位置と一致長とを復元する（ステップＳ４０６）。一致列出力部２７は、一致長／一致位置取得部２４から一致位置と一致長を取得し、出力バッファ保持部２８から当該一致位置に存在する当該一致長分の一致列を取得して、これをコピーしたものを出力バッファ保持部２８へ出力する（ステップＳ４０７）。
【００８２】
符号形式情報取得部２１等が、入力バッファ保持部２０に保持された圧縮データの最後のデータを取得し終えていないと判定等した場合には（ステップＳ４０８：ＮＯ）、データ復元装置２による処理は、ステップＳ４０１に戻る。圧縮データの最後のデータについて処理が行われた場合と判定等される場合には（ステップＳ４０８：ＹＥＳ）、データ復元装置２は処理を終了する。
【００８３】
図７は、本実施形態に係るデータ圧縮装置１とデータ復元装置２の各ハードウェア構成を例示する図である。ここでは、データ圧縮装置１およびデータ復元装置２は、一般的なコンピュータとしてハードウェアを有し、これらの装置による各処理は、以下に示すハードウェア３を具体的に利用することにより実行される。ハードウェア３は、互いにバス３４によって接続されたプロセッサ３０、記憶装置３１、入力インタフェース３２、および出力インタフェース３３等を備える。
【００８４】
プロセッサ３０は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
【００８５】
記憶装置３１は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、半導体メモリ等のメモリである。また記憶装置３１には、例えばハードディスクドライブ、光ディスク装置等が含まれていてもよい。当該記憶装置３１により、上述した一位置保持部１２、２２の各機能が実現されることができる。
【００８６】
プロセッサ３０が、記憶装置３１に記憶された情報を用いることにより、一致検出部１１、位置比較部１３、保持位置更新部１４、２３、符号形式選択部１５、および符号形式情報取得部２１等の各機能が実現されることができる。同様に、プロセッサ３０と記憶装置３１により、符号形式情報出力部１６、一致長／一致位置出力部１７、非一致長／非一致列出力部１８、符号構成部１９、一致長／一致位置取得部２４、および非一致長取得部２５等の各機能が実現されることができる。また同様に、プロセッサ３０と記憶装置３１により、非一致列出力部２６および一致列出力部２７等の各機能が実現されることができる。
【００８７】
入力インタフェース回路３２は、外部からの情報の入力を受け付けるための回路である。入力インタフェース回路３２と記憶装置３１により、入力バッファ保持部１０、２０の各機能が実現されることができる。
【００８８】
出力インタフェース回路３３は、外部に情報を出力するための回路である。出力インタフェース回路３３と記憶装置３１により、出力バッファ保持部１９、２８の各機能が実現されることができる。
【００８９】
なお、上述した場合以外にも、図３又は５に示す機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されてもよい。
【００９０】
本実施形態に係るデータ圧縮装置１によれば、一致位置に基づき符号形式を選択し、直前の一致位置と同一の今回の一致位置を省略して符号化し、かつ符号をバイト単位に配置することによって、復元速度を落とさずに符号量を減らすことができる。
【００９１】
より具体的に説明すると、本実施形態に係るデータ圧縮方法を用いてバイト単位に符号が配置されることで、ハフマン符号などの復元の際に行われるようなビット処理が省略可能になる。ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の記憶装置からの読出速度が６００メガバイト／秒程度に対し、ＬＺ７７方式とハフマン符号とを用いた場合では、復元速度は３００メガバイト／秒程度となり、これにより元のデータを読み出す速度が低下する。本実施形態における圧縮／復元方式を用いた場合、２，０００メガバイト／秒程度の復元速度となり、これはＨＤＤ等の読出速度の３倍程度であり、充分な速度を得ることができる。また符号量についても、従来のＬＺ４方式のように符号中の一致位置に常に数バイトを割り当てなくて済み、一致位置の値により割り当てるバイト数を臨機応変に変動させる分、少なくて済むようになる。例えば、図２の右下に示される、本実施形態に係るデータ圧縮方法を用いて符号化された図１の元データにおける４番目までのサブデータ（識別ビットを含む）は、その長さが１９バイトであるが、同じデータをＬＺ４方式により符号化すると、その長さは２４バイトになる。このように本実施形態に係るデータ圧縮方法によれば、符号量を減らすことができ、これにより、例えばコンピュータの記憶領域等に余裕を持たせることができる。
【００９２】
（第２の実施形態）
図８は、第２の実施形態に係るデータ圧縮方法を説明するための図である。本実施形態に係るデータ圧縮装置とデータ復元装置の各機能ブロックは、図３、５に示したものと同様であり、これらの各機能ブロックの処理内容は第１の実施形態の場合と同様である。このため、これらに同様の符号を付与する。また本実施形態に係るデータ圧縮装置とデータ復元装置による各処理のフローも、図４、６に示したものと同様である。本実施形態においては、第１の実施形態における符号形式（図２）に代わり、図８の中央の四角に囲まれた部分に示される符号形式Ｅ、Ｆ、Ｇ、Ｈが用いられる。図８の上の四角に囲まれた部分には、理解容易のための、元データと共にＬＺ７７方式による圧縮データが示されている。ここにおける圧縮データの一致位置等の内容は、図２で説明したものと同様である。
【００９３】
図８の中央の四角に示されるように、本実施形態における符号形式には、符号形式Ｅ、Ｆ、Ｇ、Ｈの４種類がある。本実施形態における識別ビットは、長さが２ビットであり、非一致長および一致長のそれぞれが割り当てられるビットとまとめられ、先頭の１バイトに納められる。
【００９４】
ここで非一致長には２ビット、一致長には４ビットが割り当てられる。ここでサブデータの非一致長がビット表現で「１０」より大きい場合、更に非一致長に割り当てられるための１バイトが、非一致長と一致長に割り当てられる１バイトのすぐ後ろに追加される。なお、非一致長に割り当てられる上記２ビットが「１１」の場合、これは、１バイトが更に追加されることを示すものである。同様に、一致長に割り当てられるビットが、「１１１１」の場合も同様とする。
【００９５】
また元データにおいて一致長が３バイト以上の一致列についても上記第１の実施形態と同様とする。
【００９６】
また符号形式Ｅ、Ｆ、Ｇ、Ｈにおいて一致位置に割り当てられるバイトの数は、それぞれ符号形式Ａ、Ｂ、Ｃ、Ｄの各バイト数と等しい。例えば、今回のサブデータの一致位置が直前のサブデータの一致位置と等しい場合には、一致位置に０バイトを割り当てる符号形式Ｅが選択される。またサブデータの一致位置が、２８以上で２１６未満の場合には、一致位置に２バイトを割り当てる符号形式Ｇが選択される。この場合、圧縮サブデータ毎の、非一致列が割り当てられるビットを除く、識別ビットを含めたビットの総数は、例えば、符号形式Ｅでは８（２（識別ビット）＋２（非一致長）＋４（一致長）＋０（一致位置）＝８）となる。同様に、符号形式Ｆでは１６、符号形式Ｇでは２４、符号形式Ｈでは３２となる。
【００９７】
図８の下には、同図の上に示された元データを、本実施形態における符号形式を用いて符号化した圧縮データの一例が示される。図８においてｎ番目のサブデータを符号化したものに識別ビットを付与したものを、ｎ番目の符号とする。まず左から当該データを参照すると、１番目のサブデータにおいて一致位置は５であり１バイトで表せることと、先行するサブデータがなく直前の一致位置がないことから、当該サブデータの圧縮には符号形式Ｆが選択されることがわかる。このため、図８の下の圧縮データの最初の部分の識別ビットは「０１」となる。また１番目のサブデータにおいて非一致長は５であるため、これは２ビットで表すと「１１」以上であるため、図８の下のデータにおける矢印で示されるように、先頭の１バイトの後に１バイト追加される。このとき非一致長は、２ビットの最大値である「１０」と追加された１バイトで示される各数の和として表現される。
【００９８】
１番目のサブデータの一致長は３であるため、一致長に割り当てられる４ビットは「００００」となることがわかる。また１番目のサブデータの非一致列は“０１０１，”で５文字であるため、１文字に１バイト割り当てられるとすると、１番目の符号において当該非一致列に５バイト割り当てられていることがわかる。また、１番目のサブデータにおける一致位置は「５」であるため、これは１バイトで表現できるので、１番目の符号において当該一致位置に１バイトが割り当てられていることがわかる。２番目以降のサブデータと符号についても同様である。
【００９９】
本実施形態における符号化によれば、上記第１の実施形態の場合のように、４つの圧縮サブデータの各符号形式情報の符号化を待ち、これらを一まとめにする処理がない分、処理負荷が低減されると共にデータの圧縮時間が短縮される。また一致長に割り当てられるビットの数が、上記第１の実施形態と比較して多いため、頻繁に同じ部分列が繰り返されるデータの符号化において、符号量を減らすことができる。
【０１００】
（第３の実施形態）
図９は、第３の実施形態に係るデータ圧縮方法を説明するための図である。本実施形態に係るデータ圧縮装置とデータ復元装置の各機能ブロックは、図３、５に示したものと同様であり、これらの各機能ブロックの処理内容は第１、２の実施形態の場合と同様である。このため、これらに同様の符号を付与する。また本実施形態に係るデータ圧縮装置とデータ復元装置による各処理のフローも、図４、６に示したものと同様である。本実施形態においては、第１、２の実施形態における符号形式（図２、８）に代わり、図９の中央の四角に囲まれた部分に示される符号形式Ｊ、Ｋ、Ｌ、Ｍが用いられる。図９の上の四角に囲まれた部分には、理解容易のための、元データと共にＬＺ７７方式による圧縮データが示されている。ここにおける圧縮データの一致位置等の内容は、図２で説明したものと同様である。
【０１０１】
図９の中央の四角に示されるように、本実施形態における符号形式には、符号形式Ｊ、Ｋ、Ｌ、Ｍの４種類がある。本実施形態における識別ビットと非一致長に割り当てられるビットは、それぞれ長さが２ビットであり、これらが１つにまとめられた４ビットが、符号の先頭に付与される。ここでサブデータの非一致長がビット表現で「１１」以上となる場合、更に非一致長に割り当てられるための１バイトが、非一致長に割り当てられた２ビットを配置したバイトのすぐ後ろに追加される。
【０１０２】
符号形式Ｊは、一致位置が、０から２６−１までの数で、６ビットで表されるときに選択される形式である。ここでは一致長に２ビットが割り当てられ、一致長と一致位置のそれぞれに割り当てたビットが１バイトにまとめられる。一致長は、上記実施形態の場合と同様、３を最低の長さとし、一致長の値から３を引いた数をビット表現したものを、ビット表現された一致長とする。一致長が２ビットの「１０」以下で表現できない場合には、更に一致長を割り当てるための１バイトが追加され、当該１バイトは一致位置の最後のビットの後ろに付与される。上記一致長に割り当てられる２ビットが「１１」のとき、これは１バイトの追加を示すものとなる。符号形式Ｊにおいて、非一致列に割り当てるためのビットを除いた、ビットの総数は、１２（２（識別ビット）＋２（非一致長）＋２（一致長）＋６（一致位置）＝１２）となる。
【０１０３】
符号形式Ｋは、一致位置が、２６から２１３−１までの数で、１３ビットで表されるときに選択される形式である。ここでは一致長に３ビットが割り当てられ、一致長と一致位置のそれぞれに割り当てたビットが２バイトにまとめられる。上記同様、一致長の値から３を引いた数をビット表現したものを、ビット表現された一致長とする。一致長が３ビットで表現できない場合には、上記同様、更に一致長を割り当てるための１バイトが追加され、当該１バイトは一致位置の最後のビットの後ろに付与される。符号形式Ｋにおいて、非一致列を割り当てるためのビットを除いた、ビットの総数は、２０（２（識別ビット）＋２（非一致長）＋３（一致長）＋１３（一致位置）＝２０）となる。
【０１０４】
符号形式Ｌは、一致位置が直前の一致位置と同一となるサブデータの符号化において選択される形式である。上記実施形態同様、一致位置は省略されて符号化される。ここでは、一致長に割り当てるビットの長さを４ビットとし、これを上述した非一致列に割り当てるビットのすぐ後ろ（図９でαにより示される位置）、又は先行する「識別ビットおよび非一致長」の４ビットのすぐ後ろ（図９でα’により示される位置）に配置する。一致長が４ビットで表現できない場合には、上記同様、更に一致長を割り当てるための１バイトがその後ろに追加される。また当該符号形式においては、上記実施形態同様、一致列に割り当てられるバイト数は０となる。符号形式Ｌにおいて、非一致列を割り当てるためのビットを除いた、ビットの総数は、８（２（識別ビット）＋２（非一致長）＋４（一致長）＋０（一致位置）＝８）となる。
【０１０５】
符号形式Ｍは、一致位置が、２１３から２１６−１までの数で、１６ビットで表されるときに選択される形式である。ここでは一致位置に２バイト割り当てられる。またここでは、符号形式Ｌと同様に、一致長に割り当てるビットの長さを４ビットとし、これを一致位置に割り当てる２バイトの後ろ（図９でβにより示される位置）、又は先行する「識別ビットおよび非一致長」の４ビットのすぐ後ろ（図９でβ’により示される位置）に配置する。一致長が４ビットで表現できない場合は、上記符号形式Ｌと同様となる。符号形式Ｍにおいて、非一致列を割り当てられるためのビットを除いた、ビットの総数は、２４（２（識別ビット）＋２（非一致長）＋４（一致長）＋１６（一致位置）＝２４）となる。
【０１０６】
図９の下には、同図の上に示された元データを、本実施形態における符号形式を用いて符号化した圧縮データの一例が示される。ここでは、上記第２の実施形態同様、元データのｎ番目のサブデータを符号化したものに識別ビットを付したものをｎ番目の符号と記載する。ただし本実施形態における符号化では、１つのサブデータを１つの符号にしようとすれば、当該符号がバイト単位に配置できなくなる場合が存在する。これに対処するため本実施形態に係るデータ圧縮装置１は、２つ以上のサブデータの各一致長や非一致列等を符号化したものを互いにまとめた符号を生成する場合もある。図９の下に示される「第１、２の符号」がこれにあたる。第１、２の符号について、説明する。
【０１０７】
まず、図９の上の元データにおいて１番目のサブデータの一致位置は５であることから、１番目のサブデータの符号化には符号形式Ｊが選択されることがわかる。すると図９下の圧縮データにおいて、１番目のサブデータの符号形式を示すビットは、最初の２ビット「００」となる。次に当該サブデータの非一致長である５は、ビット表現で「１０」以上となるため、更に１バイトが追加される。これにより非一致長は、２ビット「１０」（＝２）と１バイト「００００００１１」（＝３）の和により示される。非一致長に当初から割り当てられている２ビットに追加される１バイトは、図９において、上記第２の実施形態同様、当該２ビットを始点とする矢印の終点で示される。
【０１０８】
ここで図９の下の圧縮データにおいて、１番目の非一致長に割り当てられる２ビットと、更に追加された１バイトの間に４ビットが含まれている。１番目のサブデータの符号化に係る識別ビットと、当該サブデータの非一致長に割り当てられる２ビットを合わせたものは４ビットとなるが、これはバイト単位のものではない。このため本実施形態においては、当該４ビットの後に２番目のサブデータに係る識別ビットと、当該サブデータの非一致長に割り当てられる２ビットを合わせた４ビットを付与する。
【０１０９】
２番目のサブデータにおいて、一致位置は５であり、これは１番目のサブデータの一致位置と等しい。このため、２番目のサブデータの符号化には符号形式Ｌが選択される。これに伴い、２番目のサブデータに係る識別ビットは「１０」となる。また２番目のサブデータにおける非一致長は１であるため、非一致長に割り当てられる２ビットは「０１」となる。
【０１１０】
このとき、１番目のサブデータの非一致列は、２番目のサブデータの非一致長に割り当てられる２ビットの後ろに配置される。１番目のサブデータの非一致列は「０１０１，」であり、これは５つの数字列であるため、非一致列には５バイトが割り当てられる。続いて、１番目のサブデータの一致長は３であるため、符号形式Ｊにおける一致長を割り当てるための２ビットは、「００」となる。符号形式Ｊにおいては、一致位置と一致列とが１バイトでまとめられるため、一致長を表現する２ビットの後ろの６ビットは、１番目の一致位置の５をビット表現した「０００１０１」となる。
【０１１１】
次に続くビットは、１番目のサブデータが割り当てられたビットと当該サブデータに係る識別ビットと２番目のサブデータの非一致長と当該サブデータに係る識別ビットが先にあるため、２番目のサブデータの非一致列の２に割り当てられるビットとなる。また符号形式Ｌでは、一致位置を省略して符号化し、更に一致長のビット表現を非一致列のビット表現の後続とする。２番目のサブデータにおいて一致長は４であるため、１（＝４−３）を４ビットで表した「０００１」が、非一致列に割り当てられたビットの後ろに示される。
【０１１２】
ここで、符号化されたデータをバイト単位にするため、２番目の一致長を表した４ビット「０００１」の後ろに、３番目のサブデータに係る識別ビットと、当該サブデータの非一致長に係るビットを合わせた４ビットを付与する。３番目のサブデータの一致列は、２番目のサブデータの一致列と等しいため、当該３番目のサブデータの符号化には符号形式Ｌが選択される。このため識別ビットは「１０」となる。また３番目のサブデータの非一致長は１であるため、非一致長のビット表現は「０１」となる。この非一致長に割り当てられるビットの後には、非一致列の３に割り当てられるバイトが続く。当該バイトに続き、３番目のサブデータの一致長である４を割り当てるビット「０００１」が配置される。
【０１１３】
以下の圧縮データについても同様である。
本実施形態に係るデータ圧縮方法は、実際のデータにおいては一致位置が２バイト以下で表現できることが多い点に着目されたものである。これに応じて、本実施形態においては、一致位置に割り当てるバイトの長さを２バイト以下としている。そしてこれに応じて臨機応変に、且つバイト単位となるようにビットが配置される。これにより、本実施形態における符号量は、上記実施形態における符号量よりも少なくなる。
【０１１４】
本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施形態および変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。特許請求の範囲内およびそれと同等の発明の意義の範囲内で施される様々な変形も、本発明の範囲内とみなされる。
【０１１５】
上述の実施形態１〜ｎを含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
入力されたデータにおける先行の部分列と一致する一致列と、前記部分列の前記一致列からの相対位置と、前記一致列の長さである一致長と、を検出する一致検出部と、
一つ前に符号化された前記相対位置を保持する一位置保持部と、
前記相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、前記一致検出部により検出された前記相対位置の近さに基づいて、１つを選択する符号形式選択部と、
バイト単位に符号を配置すると共に、前記一致検出部により検出された前記相対位置が、前記一位置保持部に保持されている前記一つ前に符号化された相対位置と同一の場合に、選択された前記符号形式に基づき、前記一致検出部により検出された相対位置を省略して符号化する符号化部と、
を備えることを特徴とするデータ圧縮装置。
（付記２）
前記符号形式における前記相対位置に割り当てるためのビットの長さは、前記相対位置が近いほど短いことを特徴とする付記１に記載のデータ圧縮装置。
（付記３）
前記選択された符号形式を識別するために符号形式情報を用いることを特徴とする付記１又は２に記載のデータ圧縮装置。
（付記４）
前記符号化部は、
前記符号形式情報を、前記複数の符号形式において固定長のビットで符号化し、
前記符号化された符号形式情報を、符号化された１以上の前記一致長を含むデータの先頭に配置する
ことを特徴とする付記３に記載のデータ圧縮装置。
（付記５）
前記符号化部は、
前記符号形式情報を、前記複数の符号形式において２ビットで符号化し、
４つのデータの圧縮において用いられた、それぞれの前記符号形式に対応する前記符号形式情報を一まとめにし、圧縮された前記４つのデータの先頭に付与する、
ことを特徴とする付記３又は４に記載のデータ圧縮装置。
（付記６）
前記符号化部は、
前記符号形式情報を、前記複数の符号形式において固定長のビットで符号化し、
前記一致長を１つ含むデータの符号化の度に、該符号化において用いられた前記符号形式に対応する前記符号形式情報を符号化したものを、符号化された前記一致長を１つ含むデータの先頭に付与する、
ことを特徴とする付記３又は４に記載のデータ圧縮装置。
（付記７）
前記入力されたデータにおいて、一致する先行の部分列が存在しない非一致列の長さである非一致長の符号化には、短い長さのビットが割り当てられることを特徴とする付記１から６のいずれか１つに記載のデータ圧縮装置。
（付記８）
前記相対位置が省略されずに符号化される場合に、前記相対位置に割り当てるバイトの長さを２バイト以下とすることを特徴とする付記１から７のいずれか１つに記載のデータ圧縮装置。
（付記９）
先行の部分列と一致する一致列からの前記部分列の相対位置の近さに応じて選択された符号形式に基づき符号化されている符号、又は、一つ前に符号化された前記相対位置と同一の相対位置が省略され符号化されている符号を復元するデータ復元装置であって、
入力された符号から、該符号が生成された際に用いられた符号形式を識別するための符号形式情報を取得する符号形式情報取得部と、
一つ前に復元された前記相対位置を保持する一位置保持部と、
前記符号形式情報に基づき、符号化の際に前記相対位置が省略された符号の復元に、前記一位置保持部に保持されている前記一つ前に復元された相対位置を用いると共に、符号化の際に前記相対位置が省略されなかった符号の復元に、該符号に含まれる符号化された前記相対位置を用いる一致位置取得部と、
を備えることを特徴とするデータ復元装置。
（付記１０）
入力されたデータにおける先行の部分列と一致する一致列と、前記部分列の前記一致列からの相対位置と、前記一致列の長さである一致長と、を検出し、
一つ前に符号化された前記相対位置を保持し、
前記相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、検出された前記相対位置の近さに基づいて、１つを選択し、
バイト単位に符号を配置すると共に、検出された前記相対位置が、保持されている前記一つ前に符号化された相対位置と同一の場合に、選択された前記符号形式に基づき、前記検出された相対位置を省略して符号化する、
処理をデータ圧縮装置に実行させるデータ圧縮プログラム。
（付記１１）
先行の部分列と一致する一致列からの前記部分列の相対位置の近さに応じて選択された符号形式に基づき符号化されている符号、又は、一つ前に符号化された前記相対位置と同一の相対位置が省略され符号化されている符号を復元するためのデータ復元プログラムであって、
入力された符号から、該符号が生成された際に用いられた符号形式を識別するための符号形式情報を取得し、
一つ前に復元された前記相対位置を保持し、
前記符号形式情報に基づき、符号化の際に前記相対位置が省略された符号の復元に、保持されている前記一つ前に復元された相対位置を用いると共に、符号化の際に前記相対位置が省略されなかった符号の復元に、該符号に含まれる符号化された前記相対位置を用いる、
処理をデータ復元装置に実行させることを特徴とするデータ復元プログラム。
（付記１２）
入力されたデータにおける先行の部分列と一致する一致列と、前記部分列の前記一致列からの相対位置と、前記一致列の長さである一致長と、を検出し、
一つ前に符号化された前記相対位置を保持し、
前記相対位置に割り当てるビットの長さが互いに異なるように設定された複数の符号形式の中から、検出された前記相対位置の近さに基づいて、１つを選択し、
バイト単位に符号を配置すると共に、検出された前記相対位置が、保持されている前記一つ前に符号化された相対位置と同一の場合に、選択された前記符号形式に基づき、前記検出された相対位置を省略して符号化する、
処理をデータ圧縮装置が実行することを特徴とするデータ圧縮方法。
（付記１３）
先行の部分列と一致する一致列からの前記部分列の相対位置の近さに応じて選択された符号形式に基づき符号化されている符号、又は、一つ前に符号化された前記相対位置と同一の相対位置が省略され符号化されている符号を復元するデータ復元方法であって、
入力された符号から、該符号が生成された際に用いられた符号形式を識別するための符号形式情報を取得し、
一つ前に復元された前記相対位置を保持し、
前記符号形式情報に基づき、符号化の際に前記相対位置が省略された符号の復元に、保持されている前記一つ前に復元された相対位置を用いると共に、符号化の際に前記相対位置が省略されなかった符号の復元に、該符号に含まれる符号化された前記相対位置を用いる、
処理をデータ復元装置が実行することを特徴とするデータ復元方法。
【符号の説明】
【０１１６】
１  データ圧縮装置
２  データ復元装置
１０、２０  入力バッファ保持部
１１  一致検出部
１２、２２  一位置保持部
１３  位置比較部
１４、２３  保持位置更新部
１５  符号形式選択部
１６  符号形式情報出力部
１７  一致長／一致位置出力部
１８  非一致長／非一致列出力部
１９  符号構成部
１９’、２８  出力バッファ保持部
２１  符号形式情報取得部
２４  一致長／一致位置取得部
２５  非一致長取得部
２６  非一致列出力部
２７  一致列出力部
【図１】
2019036810.tif 000003
【図２】
2019036810.tif 000004
【図３】
2019036810.tif 000005
【図４】
2019036810.tif 000006
【図５】
2019036810.tif 000007
【図６】
2019036810.tif 000008
【図７】
2019036810.tif 000009
【図８】
2019036810.tif 000010
【図９】
2019036810.tif 000011