(57)【要約】      （修正有）【課題】短い繰り返しと長い繰り返しとが混在するようなデータをより効率的に圧縮する。【解決手段】圧縮方法は、data_compression_com_decompressionのような文字列を圧縮する場合に、_comについては、その_coが_compressionにおける_coと一致するので_coと語頭文字列ｍ＝０且つ一致長ｌ＝１で_co(0,1)と符号化する。また、decompressionにおけるcompressionについては、直前のcomを用いずに、語頭文字pを設定することでcompが共通するcompressionを直近出現位置として特定し、語頭文字列長ｍ＝１及び一致長ｌ＝７であるからcom(1,7)pと符号化する。【選択図】図１３
2013211643.tif 000002
【特許請求の範囲】
【請求項１】
第１のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第１の語長の語が過去に出現していたことを検出すると、前記第１の語長の語の後ろに出現する符号化前の語と過去に出現した前記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定する第１の特定処理と、
前記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第３の語長の語の過去の出現位置が検出されると、前記第３の語長の語の後ろに出現する符号化前の語と過去に出現した前記第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する第２の特定処理と、
前記第１の一致長より前記第２の一致長が長い場合には、前記第２の語長又は前記第３の語長と前記第２の一致長と前記第２の語長の符号化前の語とを符号化して、第２のデータ格納部に格納する第１の符号化処理と、
前記第１の一致長が前記第２の一致長以上である場合又は前記第２の一致長が特定されない場合には、ゼロ又は前記第１の語長と前記第１の一致長とを符号化して、前記第２のデータ格納部に格納する第２の符号化処理と、
前記圧縮対象データにおいて前記第１の語長の語が過去に出現していない場合には、前記第１の語長の語の後ろに出現する符号化前の語を符号化して、前記第２のデータ格納部に格納する処理と、
を、コンピュータに実行させるためのプログラム。
【請求項２】
前記第２の特定処理が、
前記第２の語長を１乃至Ｍ（Ｍは１以上の整数）まで変化させて、複数の第２の一致長を特定する処理を含み、
前記第１の符号化処理及び前記第２の符号化処理における前記第２の一致長は、前記複数の第２の一致長のうち最も長い一致長であり、前記第２の語長は、当該最も長い一致長が特定された際の第２の語長である
請求項１記載のプログラム。
【請求項３】
前記第１の一致長と前記第２の一致長とがゼロである場合又は前記第１の一致長がゼロで且つ前記第２の一致長が特定されない場合には、前記第１の語長の語の後ろに出現する符号化前の語を符号化する処理
をさらに含む請求項１又は２記載のプログラム。
【請求項４】
符号化前の語を符号化する場合には、直前の１又は複数の語からなる文脈に対して次に出現する語の符号を保持する符号保持部から、前記符号化前の語と前記符号化前の語の直前の１又は複数の語とから前記符号化前の語の符号を特定する
請求項１乃至３のいずれか１つ記載のプログラム。
【請求項５】
第１のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第１の語長の語が過去に復元されていたことを検出すると、第２のデータ格納部に格納されており且つ前記第１の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第２の語長に相当する第１の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第３の語長に相当する第２の符号と、前記連結すべき語に相当する第３の符号とを復元する処理と、
復元された前記連結すべき語を、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語と前記連結すべき語とを連結することで得られる第４の語長の語の後ろで復元されている前記第３の語長の語をコピーして、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語が過去に復元されていないことを検出すると、前記第２のデータ格納部に格納されており且つ前記第１の語長の語の符号の後ろに出現する符号を復元して、前記第１のデータ格納部に格納する処理と、
を、コンピュータに実行させるためのプログラム。
【請求項６】
前記連結すべき語の語長は、前記第２の語長から前記第１の語長を減じた数である
請求項５記載のプログラム。
【請求項７】
複数の語を含む圧縮対象データを記憶する第１の記憶部と、
予め定められた複数の語長の各々について、当該語長を有する語の、前記圧縮対象データにおける最近出現位置を保持する位置保持部と、
前記位置保持部から、直前に符号化された第１の語長の語の最近出現位置を取得し、前記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語の最近出現位置を取得する位置取得部と、
前記位置取得部により前記第１の語長の語の最近出現位置が取得された場合に、前記第１の語長の語の後ろに出現する符号化前の語と取得された前記最近出現位置における前記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定し、前記位置取得部により前記第３の語長の語の最近出現位置が取得された場合に、前記第３の語長の語の後ろに出現する符号化前の語と特定された前記最近出現位置における前記第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する一致長特定部と、
指定された語長を符号化する第１の符号化部と、
前記複数の語のうち指定された語を符号化する第２の符号化部と、
制御部と、
第２の記憶部と、
を有し、
前記位置取得部が前記第１の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第１の一致長を特定し、前記位置取得部が前記第３の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第２の一致長を特定し、
前記制御部は、
前記第１の一致長より前記第２の一致長が長い場合には、前記第２の語長又は前記第３の語長と前記第２の一致長とを指定して前記第１の符号化部に符号化を行わせ、前記第２の語長の符号化前の語を前記第２の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させ、
前記第１の一致長が前記第２の一致長以上である場合又は前記第２の一致長が特定されない場合、ゼロ又は前記第１の語長と前記第１の一致長とを前記第１の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させ、
前記圧縮対象データにおいて前記第１の語長の語が過去に出現していない場合には、前記第１の語長の語の後ろに出現する符号化前の語を前記第２の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させる
情報処理装置。
【請求項８】
前記位置取得部は、前記第２の語長を１乃至Ｍ（Ｍは１以上の整数）まで変化させて、前記第２の語長の各々について前記第３の語長の語の最近出現位置を取得し、
前記一致長特定部は、前記位置取得部が前記第３の語長の語の最近出現位置を取得すると、対応する前記第２の一致長を特定し、
前記制御部は、
前記第１の一致長より前記第２の一致長のうち最も長い第２の一致長が長い場合には、当該最も長い第２の一致長に対応する第２の語長又は第３の語長と当該最も長い第２の一致長とを指定して前記第１の符号化部に符号化を行わせ、当該最も長い第２の一致長に対応する第２の語長の符号化前の語を前記第２の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させ、
前記第１の一致長が前記第２の一致長のいずれのもの以上である場合又は前記第２の一致長が特定されない場合、ゼロ又は前記第１の語長と前記第１の一致長とを前記第１の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させる
請求項７記載の情報処理装置。
【請求項９】
復元された複数の語を記憶する第１の記憶部と、
予め定められた複数の語長の各々について、当該語長を有する語の、前記復元された複数の語における最近出現位置を保持する位置保持部と、
前記位置保持部から、直前に復元された第１の語長の語に当該第１の語長の語の後で復元された第２の語長の語を加えることで得られる第３の語長の語の過去の最近出現位置を取得する位置取得部と、
圧縮データに含まれる複数の符号のうち前記第２の語長を特定するための符号を復元する制御部と、
前記複数の符号のうち文字に相当する符号を復元する第１の復元部と、
前記第２の語長の語の後ろで一致する語の語長を表す一致長に相当する符号を復元する第２の復元部と、
前記位置取得部から出力される前記第３の語長の語の過去の最近出現位置と前記第２の復元部から出力される前記一致長とで特定される語を、前記第１の記憶部からコピーして、前記第１の記憶部に記憶するコピー部と、
を有し、
前記制御部は、
前記位置保持部から、前記第１の語長の語の最近出現位置が取得できない場合には、前記複数の符号のうち前記第１の語長の語に相当する符号の後に出現する符号を、前記第１の符号部により復元させ、前記第１の記憶部に記憶させ、
前記位置保持部から、前記第１の語長の語の最近出現位置が取得されると、前記複数の符号のうち前記第１の語長の語に相当する符号の後に出現し且つ前記第２の語長を特定するための符号を復元し、前記複数の符号のうち前記第１の語長の語に相当する符号の後に出現する前記一致長に相当する符号を前記第２の復元部に復元させ、復元された前記第２の語長及び前記一致長に応じて前記位置取得部及び前記コピー部を動作させる
情報処理装置。
【請求項１０】
第１のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第１の語長の語が過去に出現していたことを検出すると、前記第１の語長の語の後ろに出現する符号化前の語と過去に出現した前記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定する第１の特定処理と、
前記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第３の語長の語の過去の出現位置が検出されると、前記第３の語長の語の後ろに出現する符号化前の語と過去に出現した前記第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する第２の特定処理と、
前記第１の一致長より前記第２の一致長が長い場合には、前記第２の語長又は前記第３の語長と前記第２の一致長と前記第２の語長の符号化前の語とを符号化して、第２のデータ格納部に格納する第１の符号化処理と、
前記第１の一致長が前記第２の一致長以上である場合又は前記第２の一致長が特定されない場合には、ゼロ又は前記第１の語長と前記第１の一致長とを符号化して、前記第２のデータ格納部に格納する第２の符号化処理と、
前記圧縮対象データにおいて前記第１の語長の語が過去に出現していない場合には、前記第１の語長の語の後ろに出現する符号化前の語を符号化して、前記第２のデータ格納部に格納する処理と、
を含み、コンピュータにより実行される圧縮方法。
【請求項１１】
第１のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第１の語長の語が過去に復元されていたことを検出すると、第２のデータ格納部に格納されており且つ前記第１の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第２の語長に相当する第１の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第３の語長に相当する第２の符号と、前記連結すべき語に相当する第３の符号とを復元する処理と、
復元された前記連結すべき語を、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語と前記連結すべき語とを連結することで得られる第４の語長の語の後ろで復元されている前記第３の語長の語をコピーして、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語が過去に復元されていないことを検出すると、前記第２のデータ格納部に格納されており且つ前記第１の語長の語の符号の後ろに出現する符号を復元して、前記第１のデータ格納部に格納する処理と、
を含み、コンピュータにより実行される復元方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ圧縮技術に関する。
【背景技術】
【０００２】
データを圧縮する技術には、ＬＺ（Lempel Ziv）７７符号やＳＬＣ（Super Lossless data Compression）符号が知られている。なお、本願では、データの種類を問わず、データの１語（ｗｏｒｄ）単位を文字と呼び、データの任意の長さの語が繋がったものを文字列と呼ぶこととする。
【０００３】
ＬＺ７７符号は、繰り返し出現する文字列を過去に出現した文字列の出現位置とその長さで表現する。ＳＬＣ符号は繰り返しの先頭Ｎ文字を繰返し符号の一部と扱わないで残すことで、残した先頭Ｎ文字（＝語頭Ｎ文字）に過去の最近一致位置を関連付け、一致長のみで符号化を行う。ＬＺ７７符号が長い繰り返しのみを効率的に扱うのに対して、ＳＬＣ符号は短い繰り返しと長い繰り返しの双方を効率的に圧縮できるメリットがある。
【０００４】
例えば図１に示すように、Data_compression_&_decompressionという文字列（アンダーバーはスペースを表すものとする）を圧縮する場合、compressionという文字列が繰り返されている。ＬＺ７７符号によれば、decompressionに含まれるcompressionは、位置６から１１文字（長さ１１）一致するので、（６，１１）と表される。一方、ＳＬＣ符号では、Ｎ＝３とするとcomが語頭文字列となり、この語頭文字列の後の文字列の一致長は８となるので、decompressionに含まれるcompressionは、（com，８）と表される。
【０００５】
ＳＬＣ符号は、短い繰り返しも効率的に圧縮できるメリットがある一方、過去の一致位置と関連付けるために残す語頭Ｎ文字が多頻出するデータでは、長い繰返しを短い繰返しと同じに扱うことになり、効率的に圧縮できない問題がある。例えば、図２のような文字列を考える。この文字列Data_compression_com_decompression（アンダーバーはスペースを表すものとする）では、文字列comが３回出現している。decompressionにおけるcomは、直前のcomと一致しているので、ＳＬＣ符号によれば（com，０）と表される。しかしながら、decompressionにおけるcompressionは、それより前にcompressionそのものが出現しているので、こちらを利用できればより効率的な符号化が可能となる。このように、ＳＬＣ符号では、固定の長さＮの文字列に関連付けられた１つの最近一致位置しか用いることができないため、ＬＺ７７符号のように離れた長い繰返しを利用できない場合がある。図２の例に対してＬＺ７７符号を用いれば、decompressionにおけるcompressionは、同じく（６，１１）と符号化できる。ログデータのように、短い繰り返しが頻出する一方で、長い繰り返しも含むようなデータでは、このような問題が顕在化する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−１２４８１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、本技術の目的は、短い繰り返しと長い繰り返しとが混在するようなデータをより効率的に圧縮するための技術を提供することである。
【課題を解決するための手段】
【０００８】
本技術の第１の態様に係る圧縮方法は、（Ａ）第１のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第１の語長の語が過去に出現していたことを検出すると、上記第１の語長の語の後ろに出現する符号化前の語と過去に出現した上記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定する第１の特定処理と、（Ｂ）上記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語が圧縮対象データにおいて過去に出現した位置を探索して、第３の語長の語の過去の出現位置が検出されると、第３の語長の語の後ろに出現する符号化前の語と過去に出現した第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する第２の特定処理と、（Ｃ）第１の一致長より第２の一致長が長い場合には、第２の語長又は第３の語長と第２の一致長と第２の語長の符号化前の語とを符号化して、第２のデータ格納部に格納する第１の符号化処理と、（Ｄ）第１の一致長が第２の一致長以上である場合又は第２の一致長が特定されない場合には、ゼロ又は第１の語長と前記第１の一致長とを符号化して、第２のデータ格納部に格納する第２の符号化処理と、（Ｅ）圧縮対象データにおいて第１の語長の語が過去に出現していない場合には、第１の語長の語の後ろに出現する符号化前の語を符号化して、第２のデータ格納部に格納する処理とを含む。
【０００９】
本技術の第２の態様に係る復元方法は、（Ａ）第１のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第１の語長の語が過去に復元されていたことを検出すると、第２のデータ格納部に格納されており且つ上記第１の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第２の語長に相当する第１の符号と、連結すべき語の後ろで一致する語の一致長を表す第３の語長に相当する第２の符号と、上記連結すべき語に相当する第３の符号とを復元する処理と、（Ｂ）復元された上記連結すべき語を、第１のデータ格納部に格納する処理と、（Ｃ）複数の語において、上記第１の語長の語と連結すべき語とを連結することで得られる第４の語長の語の後ろで復元されている第３の語長の語をコピーして、第１のデータ格納部に格納する処理と、（Ｄ）複数の語において、上記第１の語長の語が過去に復元されていないことを検出すると、第２のデータ格納部に格納されており且つ第１の語長の語の符号の後ろに出現する符号を復元して、第１のデータ格納部に格納する処理とを含む。
【発明の効果】
【００１０】
短い繰り返しと長い繰り返しとが混在するようなデータをより効率的に圧縮できるようになる。
【図面の簡単な説明】
【００１１】
【図１】図１は、圧縮すべきデータの一例を示す図である。
【図２】図２は、圧縮すべきデータの一例を示す図である。
【図３】図３は、圧縮すべきデータの一例を示す図である。
【図４】図４は、圧縮処理の一例を説明するための図である。
【図５】図５は、最近出現位置を格納するデータ構造例を示す図である。
【図６】図６は、圧縮処理の一例を説明するための図である。
【図７】図７は、最近出現位置を格納するデータ構造例を示す図である。
【図８】図８は、圧縮処理の一例を説明するための図である。
【図９】図９は、最近出現位置を格納するデータ構造例を示す図である。
【図１０】図１０は、圧縮処理の一例を説明するための図である。
【図１１】図１１は、最近出現位置を格納するデータ構造例を示す図である。
【図１２】図１２は、圧縮データの一例を示す図である。
【図１３】図１３は、圧縮処理を行う情報処理装置の機能ブロック図である。
【図１４】図１４は、圧縮処理の処理フローを示す図である。
【図１５】図１５は、圧縮処理の処理フローを示す図である。
【図１６】図１６は、復元処理の一例を説明するための図である。
【図１７】図１７は、最近出現位置を格納するデータ構造例を示す図である。
【図１８】図１８は、復元処理の一例を説明するための図である。
【図１９】図１９は、最近出現位置を格納するデータ構造例を示す図である。
【図２０】図２０は、復元処理の一例を説明するための図である。
【図２１】図２１は、最近出現位置を格納するデータ構造例を示す図である。
【図２２】図２２は、復元処理の一例を説明するための図である。
【図２３】図２３は、最近出現位置を格納するデータ構造例を示す図である。
【図２４】図２４は、復元処理を行う情報処理装置の機能ブロック図である。
【図２５】図２５は、復元処理の処理フローを示す図である。
【図２６】図２６は、第２の実施の形態における圧縮処理の処理フローを示す図である。
【図２７】図２７は、第３の実施の形態における第２符号化部の構成例を示す図である。
【図２８】図２８は、第３の実施の形態における第２符号化部の処理フローを示す図である。
【図２９】図２９は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１２】
［実施の形態１］
まず、本実施の形態においてどのように圧縮がなされるかについて具体例を用いて説明する。本実施の形態では、図３に示すような文字列を圧縮する場合を考える。すなわち、data_compression_com_decompression_data_comという文字列を圧縮する。なお、図３において文字の上に記載された数字は位置を表すものである。
【００１３】
この圧縮処理の過程を図４乃至図１２を用いて説明する。なお、既に符号化を行った直前Ｎ文字のＮは３であるものとする。ステップ（１）では、既に符号化を行った直前Ｎ文字は存在しないので、現在位置の文字「ｄ」については、そのまま符号化して”ｄ”が生成される。”ｄ”は文字「ｄ」の符号を表すものとする。そして、現在位置を１つ先に進める。
【００１４】
ステップ（２）では、直前Ｎ文字はまだ揃っていないので、現在位置の文字「ａ」については、そのまま符号化して”ａ”が生成される。そして、現在位置を１つ先に進める。ステップ（３）では、直前Ｎ文字はまだ揃っていないので、現在位置の文字「ｔ」については、そのまま符号化して”ｔ”が生成される。そして、現在位置を１つ先に進める。
【００１５】
ステップ（４）では、直前Ｎ文字が「ｄａｔ」となるので、過去に文字列「ｄａｔ」が出現していたか確認する。この場合出現していないので、現在位置の文字「ａ」を、そのまま符号化して”ａ”を生成する。さらに、図５に示すように、直前Ｎ文字に連結する文字列である語頭文字列の文字列長ｉ＝０について、文字列「ｄａｔ」と出現位置「１」（ここでは先頭の文字「ｄ」の出現位置を示しているが、最後の文字「ｔ」の出現位置であっても良い）とを対応付けておく。そして、現在位置を１つ先に進める。
【００１６】
ステップ（５）では、直前Ｎ文字が「ａｔａ」となるので、過去に文字列「ａｔａ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「＿」を、そのまま符号化して”＿”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ａｔａ」と出現位置「２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｄａｔａ」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００１７】
ステップ（６）では、直前Ｎ文字が「ｔａ＿」となるので、過去に文字列「ｔａ＿」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｃ」を、そのまま符号化して”ｃ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｔａ＿」と出現位置「３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ａｔａ＿」と出現位置「２」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｄａｔａ＿」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００１８】
ステップ（７）では、直前Ｎ文字が「ａ＿ｃ」となるので、過去に文字列「ａ＿ｃ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｏ」を、そのまま符号化して”ｏ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ａ＿ｃ」と出現位置「４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｔａ＿ｃ」と出現位置「３」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ａｔａ＿ｃ」と出現位置「２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｄａｔａ＿ｃ」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００１９】
ステップ（８）では、直前Ｎ文字が「＿ｃｏ」となるので、過去に文字列「＿ｃｏ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｍ」を、そのまま符号化して”ｍ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｃｏ」と出現位置「５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ａ＿ｃｏ」と出現位置「４」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｔａ＿ｃｏ」と出現位置「３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ａｔａ＿ｃｏ」と出現位置「２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｄａｔａ＿ｃｏ」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２０】
ステップ（９）では、直前Ｎ文字が「ｃｏｍ」となるので、過去に文字列「ｃｏｍ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｐ」を、そのまま符号化して”ｐ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｃｏｍ」と出現位置「６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「＿ｃｏｍ」と出現位置「５」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ａ＿ｃｏｍ」と出現位置「４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｔａ＿ｃｏｍ」と出現位置「３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ａｔａ＿ｃｏｍ」と出現位置「２」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２１】
ステップ（１０）では、直前Ｎ文字が「ｏｍｐ」となるので、過去に文字列「ｏｍｐ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｒ」を、そのまま符号化して”ｒ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｍｐ」と出現位置「７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｃｏｍｐ」と出現位置「６」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「＿ｃｏｍｐ」と出現位置「５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ａ＿ｃｏｍｐ」と出現位置「４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｔａ＿ｃｏｍｐ」と出現位置「３」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２２】
ステップ（１１）では、直前Ｎ文字が「ｍｐｒ」となるので、過去に文字列「ｍｐｒ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｅ」を、そのまま符号化して”ｅ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｍｐｒ」と出現位置「８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｍｐｒ」と出現位置「７」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｃｏｍｐｒ」と出現位置「６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「＿ｃｏｍｐｒ」と出現位置「５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ａ＿ｃｏｍｐｒ」と出現位置「４」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２３】
ステップ（１２）では、直前Ｎ文字が「ｐｒｅ」となるので、過去に文字列「ｐｒｅ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｓ」を、そのまま符号化して”ｓ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｐｒｅ」と出現位置「９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｍｐｒｅ」と出現位置「８」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｍｐｒｅ」と出現位置「７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｃｏｍｐｒｅ」と出現位置「６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「＿ｃｏｍｐｒｅ」と出現位置「５」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２４】
ステップ（１３）では、直前Ｎ文字が「ｒｅｓ」となるので、過去に文字列「ｒｅｓ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｓ」を、そのまま符号化して”ｓ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｒｅｓ」と出現位置「１０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｐｒｅｓ」と出現位置「９」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｍｐｒｅｓ」と出現位置「８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｏｍｐｒｅｓ」と出現位置「７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｃｏｍｐｒｅｓ」と出現位置「６」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２５】
ステップ（１４）では、直前Ｎ文字が「ｅｓｓ」となるので、過去に文字列「ｅｓｓ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｉ」を、そのまま符号化して”ｉ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｅｓｓ」と出現位置「１１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｒｅｓｓ」と出現位置「１０」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｐｒｅｓｓ」と出現位置「９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｍｐｒｅｓｓ」と出現位置「８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｏｍｐｒｅｓｓ」と出現位置「７」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２６】
ステップ（１５）では、直前Ｎ文字が「ｓｓｉ」となるので、過去に文字列「ｓｓｉ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｏ」を、そのまま符号化して”ｏ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｓｓｉ」と出現位置「１２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｅｓｓｉ」と出現位置「１１」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｒｅｓｓｉ」と出現位置「１０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｐｒｅｓｓｉ」と出現位置「９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｍｐｒｅｓｓｉ」と出現位置「８」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２７】
ステップ（１６）では、直前Ｎ文字が「ｓｉｏ」となるので、過去に文字列「ｓｉｏ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｎ」を、そのまま符号化して”ｎ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｓｉｏ」と出現位置「１３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｓｓｉｏ」と出現位置「１２」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｅｓｓｉｏ」と出現位置「１１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｒｅｓｓｉｏ」と出現位置「１０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｐｒｅｓｓｉｏ」と出現位置「９」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２８】
ステップ（１７）では、直前Ｎ文字が「ｉｏｎ」となるので、過去に文字列「ｉｏｎ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「＿」を、そのまま符号化して”＿”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｉｏｎ」と出現位置「１４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｓｉｏｎ」と出現位置「１３」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｓｓｉｏｎ」と出現位置「１２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｅｓｓｉｏｎ」と出現位置「１１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｒｅｓｓｉｏｎ」と出現位置「１０」とを対応付けておく。そして、現在位置を１つ先に進める。
【００２９】
ステップ（１８）では、直前Ｎ文字が「ｏｎ＿」となるので、過去に文字列「ｏｎ＿」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｃ」を、そのまま符号化して”ｃ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｎ＿」と出現位置「１５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｉｏｎ＿」と出現位置「１４」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｓｉｏｎ＿」と出現位置「１３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｓｉｏｎ＿」と出現位置「１２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｅｓｓｉｏｎ＿」と出現位置「１１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００３０】
ステップ（１９）では、直前Ｎ文字が「ｎ＿ｃ」となるので、過去に文字列「ｎ＿ｃ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｏ」を、そのまま符号化して”ｏ”を生成する。さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｎ＿ｃ」と出現位置「１６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｎ＿ｃ」と出現位置「１５」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｉｏｎ＿ｃ」と出現位置「１４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｉｏｎ＿ｃ」と出現位置「１３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｓｉｏｎ＿ｃ」と出現位置「１２」とを対応付けておく。そして、現在位置を１つ先に進める。
【００３１】
ステップ（２０）では、直前Ｎ文字が「＿ｃｏ」となるので、過去に文字列「＿ｃｏ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。そうすると、出現位置５において検出される。そうすると、ｉ＝０として、出現位置５における「＿ｃｏ」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合「ｍ」だけが一致するので一致長ｌ＝１と特定される。次に、ｉ＝１として、現在位置の文字「ｍ」を直前Ｎ文字に連結した「＿ｃｏｍ」が過去に出現していたかを図５のｉ＝１についてのデータを用いて確認する。そうすると、出現位置５において検出される。そうすると、ｉ＝１として、直前Ｎ文字＋現在位置の文字である「＿ｃｏｍ」より後ろの文字列と出現位置５における「＿ｃｏｍ」より後ろの文字列とで一致する文字列の長さを特定する。この場合一致する文字列がないのでｌ＝０と特定される。さらに、ｉ＝２として、現在位置の文字「ｍ」及びその後ろの文字「＿」を直前Ｎ文字に連結した「＿ｃｏｍ＿」が過去に出現していたかを図５のｉ＝２についてのデータを用いて確認する。そうすると、出現位置が検出されない。従って、一致長ｌ＝０と特定される。同様に、ｉ＝３及びｉ＝４についても、出現位置が検出されないので、ｌ＝０と特定される。
【００３２】
そうすると、ｉ＝０の場合に、一致長ｌ＝１となって、最大一致長ｍａｘ＿ｌ＝１で、その時の語頭文字列長ｍ＝０と特定される。従って、語頭文字列長ｍ＝「０」と最大一致長ｍａｘ＿ｌ＝「１」とを符号化して”０，１”を生成する。なお、語頭文字列長ｍにＮを加算したＮ＋ｍを符号化する場合もある。
【００３３】
さらに、図５に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｃｏ」と出現位置「１７」とを対応付けておく。なお、文字列「＿ｃｏ」の最近出現位置は「５」から「１７」に更新される。図５は時系列での登録状況を示しているので、図５では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｎ＿ｃｏ」と出現位置「１６」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｎ＿ｃｏ」と出現位置「１５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｉｏｎ＿ｃｏ」と出現位置「１４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｉｏｎ＿ｃｏ」と出現位置「１３」とを対応付けておく。そして、現在位置を１つ先に進める。
【００３４】
図６に示すように、ステップ（２１）では、直前Ｎ文字が「ｃｏｍ」となるので、過去に文字列「ｃｏｍ」が出現していたかを図５のｉ＝０についてのデータを用いて確認する。そうすると、出現位置６において検出される。そうすると、ｉ＝０として、出現位置６における「ｃｏｍ」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、どの文字も一致しないので、一致長ｌ＝０と特定される。次に、ｉ＝１として、現在位置の文字「＿」を直前Ｎ文字に連結した「ｃｏｍ＿」が過去に出現していたかを図５のｉ＝１についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、ｌ＝０と特定される。ｉ＝２として、現在位置の文字「＿」及び次の文字「ｄ」を直前Ｎ文字に連結した「ｃｏｍ＿ｄ」が過去の出現していたかを図５のｉ＝２についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、ｌ＝０と特定される。同様に、ｉ＝３及びｉ＝４についても、出現位置が検出されないので、ｌ＝０と特定される。
【００３５】
このようにｉ＝０からｉ＝４までｌ＝０である場合には、語頭文字列長ｍ＝「０」で最大一致長ｍａｘ＿ｌ＝「０」として特定し、これらを符号化して”０，０”を生成する。ｍａｘ＿ｌ＝０の場合には、現在位置の文字「＿」を符号化して”＿”を生成する。
【００３６】
さらに、図７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｃｏｍ」と出現位置「１８」とを対応付けておく。なお、文字列「ｃｏｍ」の最近出現位置は「６」から「１８」に更新される。図５及び図７は時系列での登録状況を示しているので、図７では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「＿ｃｏｍ」と出現位置「１７」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｎ＿ｃｏｍ」と出現位置「１６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｏｎ＿ｃｏｍ」と出現位置「１５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｉｏｎ＿ｃｏｍ」と出現位置「１４」とを対応付けておく。そして、現在位置を１つ先に進める。
【００３７】
図８に示すように、ステップ（２２）では、直前Ｎ文字が「ｏｍ＿」となるので、過去に文字列「ｏｍ＿」が出現していたかを図５及び図７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｄ」を、そのまま符号化して”ｄ”を生成する。さらに、図９に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｍ＿」と出現位置「１９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｃｏｍ＿」と出現位置「１８」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「＿ｃｏｍ＿」と出現位置「１７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｎ＿ｃｏｍ＿」と出現位置「１６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｏｎ＿ｃｏｍ＿」と出現位置「１５」とを対応付けておく。そして、現在位置を１つ先に進める。
【００３８】
ステップ（２３）では、直前Ｎ文字が「ｍ＿ｄ」となるので、過去に文字列「ｍ＿ｄ」が出現していたかを図５、図７及び図９のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｅ」を、そのまま符号化して”ｅ”を生成する。さらに、図９に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｍ＿ｄ」と出現位置「２０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｍ＿ｄ」と出現位置「１９」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｃｏｍ＿ｄ」と出現位置「１８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「＿ｃｏｍ＿ｄ」と出現位置「１７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｎ＿ｃｏｍ＿ｄ」と出現位置「１６」とを対応付けておく。そして、現在位置を１つ先に進める。
【００３９】
ステップ（２４）では、直前Ｎ文字が「＿ｄｅ」となるので、過去に文字列「＿ｄｅ」が出現していたかを図５、図７及び図９のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｃ」を、そのまま符号化して”ｃ”を生成する。さらに、図９に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｄｅ」と出現位置「２１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｍ＿ｄｅ」と出現位置「２０」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｍ＿ｄｅ」と出現位置「１９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｃｏｍ＿ｄｅ」と出現位置「１８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「＿ｃｏｍ＿ｄｅ」と出現位置「１７」とを対応付けておく。そして、現在位置を１つ先に進める。
【００４０】
ステップ（２５）では、直前Ｎ文字が「ｄｅｃ」となるので、過去に文字列「ｄｅｃ」が出現していたかを図５、図７及び図９のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｏ」を、そのまま符号化して”ｏ”を生成する。さらに、図９に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｄｅｃ」と出現位置「２２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「＿ｄｅｃ」と出現位置「２１」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｍ＿ｄｅｃ」と出現位置「２０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｏｍ＿ｄｅｃ」と出現位置「１９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｃｏｍ＿ｄｅｃ」と出現位置「１８」とを対応付けておく。そして、現在位置を１つ先に進める。
【００４１】
ステップ（２６）では、直前Ｎ文字が「ｅｃｏ」となるので、過去に文字列「ｅｃｏ」が出現していたかを図５、図７及び図９のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｍ」を、そのまま符号化して”ｍ”を生成する。さらに、図９に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｅｃｏ」と出現位置「２３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｄｅｃｏ」と出現位置「２２」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「＿ｄｅｃｏ」と出現位置「２１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｍ＿ｄｅｃｏ」と出現位置「２０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｏｍ＿ｄｅｃｏ」と出現位置「１９」とを対応付けておく。そして、現在位置を１つ先に進める。
【００４２】
ステップ（２７）では、直前Ｎ文字が「ｃｏｍ」となるので、過去に文字列「ｃｏｍ」が出現していたかを図５、図７及び図９のｉ＝０についてのデータを用いて確認する。そうすると、出現位置１８において検出される。そうすると、ｉ＝０として、出現位置１８における「ｃｏｍ」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、出現位置１８の次の文字は「＿」であるから、現在位置の文字「ｐ」と異なる。従って一致長ｌ＝０と特定される。
【００４３】
次に、ｉ＝１として、現在位置の文字「ｐ」を直前Ｎ文字に連結した「ｃｏｍｐ」が過去に出現していたかを図５、図７及び図９のｉ＝１についてのデータを用いて確認する。そうすると、出現位置６において検出される。そうすると、ｉ＝１として、直前Ｎ文字＋現在位置の文字である「ｃｏｍｐ」より後ろの文字列と出現位置６における「ｃｏｍｐ」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「ｒｅｓｓｉｏｎ＿」が一致するので、ｌ＝８と特定される。さらに、ｉ＝２として、現在位置の文字「ｐ」及びその後ろの文字「ｒ」を直前Ｎ文字に連結した「ｃｏｍｐｒ」が過去に出現していたかを図５、図７及び図９のｉ＝２についてのデータを用いて確認する。そうすると、出現位置６において検出される。そうすると、ｉ＝２として、直前Ｎ文字＋現在位置の文字「ｐ」＋次の文字「ｒ」の文字列「ｃｏｍｐｒ」より後ろの文字列と、出現位置６における「ｃｏｍｐｒ」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「ｅｓｓｉｏｎ＿」が一致するので、ｌ＝７と特定される。さらに、ｉ＝３として、現在位置の文字「ｐ」及びその後ろの文字列「ｒｅ」を直前Ｎ文字に連結した「ｃｏｍｐｒｅ」が過去に出現していたかを図５、図７及び図９のｉ＝３についてのデータを用いて確認する。そうすると、出現位置６において検出される。そうすると、ｉ＝３として、直前Ｎ文字＋現在位置の文字「ｐ」＋次の文字列「ｒｅ」の文字列「ｃｏｍｐｒｅ」より後ろの文字列と、出現位置６における「ｃｏｍｐｒｅ」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「ｓｓｉｏｎ＿」が一致するので、ｌ＝６と特定される。さらに、ｉ＝４として、現在位置の文字「ｐ」及びその後ろの文字列「ｒｅｓ」を直前Ｎ文字に連結した「ｃｏｍｐｒｅｓ」が過去に出現していたかを図５、図７及び図９のｉ＝４についてのデータを用いて確認する。そうすると、出現位置６において検出される。そうすると、ｉ＝４として、直前Ｎ文字＋現在位置の文字「ｐ」＋次の文字列「ｒｅｓ」の文字列「ｃｏｍｐｒｅｓ」より後ろの文字列と、出現位置６における「ｃｏｍｐｒｅｓ」より後ろの文字列とで一致する文字列の長さを特定する。この場合、文字列「ｓｉｏｎ＿」が一致するので、ｌ＝５と特定される。
【００４４】
図８の下段のテーブルから、一致長ｌが最も長い最大一致長ｍａｘ＿ｌ＝８と特定され、その時の語頭文字列の文字列長ｍ＝１と特定される。そうすると、これらを符号化して”１，８”を生成する。さらに、現在位置からｍ文字の語頭文字「ｐ」を符号化して”ｐ”を生成する。
【００４５】
さらに、図９に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｃｏｍ」と出現位置「２４」とを対応付けておく。なお、文字列「ｃｏｍ」の最近出現位置は「１８」から「２４」に更新される。図５、図７及び図９は時系列での登録状況を示しているので、図９では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｅｃｏｍ」と出現位置「２３」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｄｅｃｏｍ」と出現位置「２２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「＿ｄｅｃｏｍ」と出現位置「２１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｍ＿ｄｅｃｏｍ」と出現位置「２０」とを対応付けておく。
【００４６】
なお、現在位置は、符号化済みの文字の次の文字に進む。この例では、”＿”の次の文字である文字「ｄ」に進む。ｉ＝０からｉ＝４までの文字列と出現位置との対応付けについては、現在位置の移動とは別に１つずつ文字の位置をずらして行っても良いし、本例のように、現在位置の移動に伴いスキップするようにしても良い。
【００４７】
次に、図１０に示すように、ステップ（２８）では、直前Ｎ文字が「ｏｎ＿」となるので、過去に文字列「ｏｎ＿」が出現していたかを図５、図７及び図９のｉ＝０についてのデータを用いて確認する。そうすると、出現位置１５において検出される。そうすると、ｉ＝０として、出現位置１５における「ｏｎ＿」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、どの文字も一致しないので、一致長ｌ＝０と特定される。次に、ｉ＝１として、現在位置の文字「ｄ」を直前Ｎ文字に連結した「ｏｎ＿ｄ」が過去に出現していたかを図５、図７及び図９のｉ＝１についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、ｌ＝０と特定される。ｉ＝２として、現在位置の文字「ｄ」及び次の文字「ａ」を直前Ｎ文字に連結した「ｏｎ＿ｄａ」が過去の出現していたかを図５、図７及び図９のｉ＝２についてのデータを用いて確認する。そうすると、過去の出現位置が検出されないので、ｌ＝０と特定される。同様に、ｉ＝３及びｉ＝４についても、出現位置が検出されないので、ｌ＝０と特定される。
【００４８】
このようにｉ＝０からｉ＝４までｌ＝０である場合には、語頭文字列長ｍ＝「０」で最大一致長ｍａｘ＿ｌ＝「０」として特定し、これらを符号化して”０，０”を生成する。ｍａｘ＿ｌ＝０の場合には、現在位置の文字「ｄ」を符号化して”ｄ”を生成する。
【００４９】
さらに、図１１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｎ＿＿」と出現位置「２５」とを対応付けておく。なお、文字列「ｏｎ＿」の最近出現位置は「１５」から「２５」に更新される。図５、図７、図９及び図１１は時系列での登録状況を示しているので、図１１では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｉｏｎ＿」と出現位置「２４」とを対応付けておく。なお、文字列「ｉｏｎ＿」の最近出現位置は「１４」から「２４」に更新される。また、語頭文字列の文字列長ｉ＝２について、文字列「ｓｉｏｎ＿」と出現位置「２３」とを対応付けておく。なお、文字列「ｓｉｏｎ＿」の最近出現位置は「１３」から「２３」に更新される。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｓｉｏｎ＿」と出現位置「２２」とを対応付けておく。なお、文字列「ｓｓｉｏｎ＿」の最近出現位置は「１２」から「２２」に更新される。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｅｓｓｉｏｎ＿」と出現位置「２１」とを対応付けておく。なお、文字列「ｅｓｓｉｏｎ＿」の最近出現位置は「１１」から「２１」に更新される。そして、現在位置を１つ先に進める。
【００５０】
図１０に示すように、ステップ（２９）では、直前Ｎ文字が「ｎ＿ｄ」となるので、過去に文字列「ｎ＿ｄ」が出現していたかを図５、図７、図９及び図１１のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ａ」を、そのまま符号化して”ａ”を生成する。さらに、図１１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｎ＿ｄ」と出現位置「２６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｎ＿ｄ」と出現位置「２５」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｉｏｎ＿ｄ」と出現位置「２４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｉｏｎ＿ｄ」と出現位置「２３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｓｉｏｎ＿ｄ」と出現位置「２２」とを対応付けておく。そして、現在位置を１つ先に進める。
【００５１】
ステップ（３０）では、直前Ｎ文字が「＿ｄａ」となるので、過去に文字列「＿ｄａ」が出現していたかを図５、図７、図９及び図１１のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の文字「ｔ」を、そのまま符号化して”ｔ”を生成する。さらに、図１１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｄａ」と出現位置「２７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｎ＿ｄａ」と出現位置「２６」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｎ＿ｄａ」と出現位置「２５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｉｏｎ＿ｄａ」と出現位置「２４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｉｏｎ＿ｄａ」と出現位置「２３」とを対応付けておく。そして、現在位置を１つ先に進める。
【００５２】
ステップ（３１）では、直前Ｎ文字が「ｄａｔ」となるので、過去に文字列「ｄａｔ」が出現していたかを図５、図７、図９及び図１１のｉ＝０についてのデータを用いて確認する。そうすると、出現位置１において検出される。そして、ｉ＝０として、出現位置１における「ｄａｔ」の後ろの文字列と現在位置以降の文字列とで一致する文字列の長さを特定する。この場合、文字列「ａ＿ｃｏｍ」が一致するので、一致長ｌ＝５と特定される。次に、ｉ＝１として、現在位置の文字「ａ」を直前Ｎ文字に連結した「ｄａｔａ」が過去に出現していたかを図５、図７、図９及び図１１のｉ＝１についてのデータを用いて確認する。そうすると、出現位置１が検出される。この場合、文字列「＿ｃｏｍ」が一致するので、一致長ｌ＝４と特定される。ｉ＝２として、現在位置の文字「ａ」及び次の文字列「＿」を直前Ｎ文字に連結した「ｄａｔａ＿」が過去に出現していたかを図５、図７、図９及び図１１のｉ＝２についてのデータを用いて確認する。そうすると、出現位置１が検出される。この場合、文字列「ｃｏｍ」が一致するので、一致長ｌ＝３と特定される。ｉ＝３として、現在位置の文字「ａ」と後ろの文字列「＿ｃ」を直前Ｎ文字に連結した「ｄａｔａ＿ｃ」が過去に出現していたかを図５、図７、図９及び図１１のｉ＝３についてのデータを用いて確認する。そうすると、出現位置１が検出される。この場合、文字列「ｏｍ」が一致するので、一致長ｌ＝２が特定される。ｉ＝４として、現在位置の文字「ａ」と後ろの文字列「＿ｃｏ」を直前Ｎ文字に連結した「ｄａｔａ＿ｃｏ」が過去に出現していたかを図５、図７、図９及び図１１のｉ＝３についてのデータを用いて確認する。そうすると、出現位置１が検出される。この場合、文字列「ｍ」が一致するので、一致長ｌ＝１が特定される。
【００５３】
図１０の最も下のテーブルから、一致長ｌが最も長い最大一致長ｍａｘ＿ｌ＝５と特定され、その時の語頭文字列の文字列長ｍ＝０と特定される。そうすると、これらを符号化して”０，５”を生成する。さらに、現在位置からｍ文字を語頭文字列として符号化するが、ｍ＝０であるから、符号化は行われない。
【００５４】
さらに、図１１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｄａｔ」と出現位置「２８」とを対応付けておく。なお、文字列「ｄａｔ」の最近出現位置は「１」から「２８」に更新される。図５、図７、図９及び図１１は時系列での登録状況を示しているので、図１１では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「＿ｄａｔ」と出現位置「２７」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｎ＿ｄａｔ」と出現位置「２６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｏｎ＿ｄａｔ」と出現位置「２５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｉｏｎ＿ｄａｔ」と出現位置「２４」とを対応付けておく。
【００５５】
以上のような処理を行えば、図１２のような符号列が生成されるようになる。このように、decompressionのうちのcompressionについては、直前のcomではなく、さらに前のcompressionに基づいて符号化されるようになっているので、ＳＬＣ符号よりも効率的な符号化がなされている。
【００５６】
次に、上で述べたような処理を行うための情報処理装置１００の構成を図１３に示す。情報処理装置１００は、元データ格納部１１と、入力部１２と、入力バッファ１３と、位置探索部１４と、符号化制御部１５と、第１符号化部１６と、第２符号化部１７と、出力バッファ１８と、出力部１９と、圧縮データ格納部２０とを有する。入力部１２と、入力バッファ１３と、位置探索部１４と、符号化制御部１５と、第１符号化部１６と、第２符号化部１７と、出力バッファ１８と、出力部１９とは、圧縮処理プログラムを実行することによって実現される。
【００５７】
元データ格納部１１は、複数の文字を含む圧縮対象データを格納する。入力部１２は、元データ格納部１１に格納されている圧縮対象データを読み出し、入力バッファ１３に格納する。符号化制御部１５は、位置探索部１４と連携して、入力バッファ１３に格納されているデータに基づき、第１符号化部１６及び第２符号化部１７に出力すべきデータを決定して出力する。
【００５８】
位置探索部１４は、位置保持部１４１と、位置取得部１４２と、一致長取得部１４３とを有する。位置保持部１４１は、元データに出現する各Ｎ文字の最近出現位置を保持するデータ構造と、元データに出現する各Ｎ＋１文字の最近出現位置を保持するデータ構造と、元データに出現する各Ｎ＋２文字の最近出現位置を保持するデータ構造と、．．．元データに出現する各Ｎ＋Ｍ文字の最近出現位置を保持するデータ構造とを有している。Ｍは、予め定めておく。なお、上で述べた例ではＭ＝４となっている。但し、Ｍ＝４に限定されるものではない。データ構造は、例えばハッシュテーブルが考えられる。例えば、Ｎ文字のハッシュ値を算出して、当該ハッシュ値をアドレスとして用いて当該アドレスに最近出現位置を表すデータを格納しておく。検索する場合にも、検索対象の文字列のハッシュ値を算出して、当該ハッシュ値をアドレスとして用いて当該アドレスにアクセスし、最近出現位置を表すデータを読み出す。但し、最近出現位置が未登録である場合には、過去に出現していないことが分かる。上で述べた図５、図７、図９及び図１１で模式的に述べたデータと類似のデータが、位置保持部１４１に保持される。
【００５９】
位置取得部１４２は、特定の文字列の最近出現位置を位置保持部１４２から取得する。過去に出現していない場合には、最近出現位置を位置保持部１４２から取得できないということになる。具体的には、直前Ｎ文字と語頭文字列（文字列長ｉ（ｉは０以上Ｍ以下））とを連結した文字列の最近出現位置を抽出する。
【００６０】
また、一致長取得部１４３は、語頭文字列の文字列長ｉに応じて、例えば入力バッファ１３から、直前Ｎ文字の後ろに出現する符号化前のｉ文字とを連結した文字列の後ろに出現する文字列と、取得された最近出現位置において過去に出現したと判断されたＮ＋ｉ文字より後ろに出現する文字列との一致長を特定する。
【００６１】
符号化制御部１５は、例えば語頭文字列の文字列長ｉの各々について、位置探索部１４から、最近出現位置及び一致長を取得して、最適な語頭文字列及びその文字列長（すなわち語頭文字列長）を決定する。
【００６２】
符号化制御部１５は、直前Ｎ文字が過去に出現していない場合等には、符号化すべき文字のデータを第２符号化部１７に出力する。第２符号化部１７は、文字のデータを、所定のルールに従って符号化して、出力バッファ１８に出力する。具体的には末尾位置に符号を格納する。また、符号化制御部１５は、直前Ｎ文字が過去に出現している場合には、語頭文字列及び語頭文字列長と一致長とを、第１符号化部１６に出力する。第１符号化部１６は、語頭文字列長ｍを符号化するｍ符号化部１６１と、一致長ｌを符号化するｌ符号化部１６２とを有する。ｍ符号化部１６１は、語頭文字列長ｍを所定のルールで符号化して、出力バッファ１８に出力する。ｌ符号化部１６２は、一致長ｌを所定のルールで符号化して、出力バッファ１８に出力する。なお、第１符号化部１６は、語頭文字列を受け取ると、第２符号化部１７に出力して、符号化を行わせる。出力部１９は、入力バッファ１３に格納された元データの符号化が完了すると、出力バッファ１８から符号化後のデータを読み出して、圧縮データ格納部２０に格納する。
【００６３】
次に、本情報処理装置１００の処理内容を図１４及び図１５を用いて説明する。ここでは、入力部１２が、元データ格納部１１から、元データを読み出して、入力バッファ１３に格納したものとする。そして、位置探索部１４及び符号化制御部１５は、入力バッファ１３における現在位置を先頭に設定した後、以下のような処理を実施する。
【００６４】
位置探索部１４は、現在位置の直前Ｎ文字を特定する（図１４：ステップＳ１）。そして、位置探索部１４の位置取得部１４２は、位置保持部１４１に対して直前Ｎ文字の最近出現位置を要求し、位置保持部１４１から出力を得ると、当該出力を符号化制御部１５に出力する。
【００６５】
符号化制御部１５は、位置探索部１４からの出力を受け取ると、最近出現位置が取得できたか判断する（ステップＳ３）。最近出現位置が取得できた場合には、処理は端子Ａを介して図１５の処理に移行する。一方、最近出現位置が取得できない場合には、符号化制御部１５は、現在位置の文字を第２符号化部１７に出力して、第２符号化部１７は、当該現在位置の文字を符号化して、出力バッファ１８に出力する（ステップＳ５）。上で述べた例では、図４におけるステップ（１）からステップ（１９）までは、最近出現位置が取得できないので、ステップＳ５で処理されている。そして、データ終了であれば（ステップＳ７：Ｙｅｓルート）処理を終了し、出力部１９は、出力バッファ１８に格納されている符号を圧縮データ格納部２０に格納する。そして処理は終了する。
【００６６】
一方、未処理のデータが存在している場合には（ステップＳ７：Ｎｏルート）、位置探索部１４の位置保持部１４１は、直前Ｎ文字及び直前Ｎ＋ｉ文字列（ｉは１以上Ｍ以下の整数）の最近出現位置の更新を行う（ステップＳ９）。図５、図７、図９及び図１１に模式的に示したようなデータを蓄積する。なお、同一文字列について既に最近出現位置が登録されている場合には、最近出現位置を更新する。
【００６７】
また、符号化制御部１５及び位置探索部１４は、入力バッファ１３における現在位置を移動させる（ステップＳ１１）。そして処理はステップＳ１に戻る。
【００６８】
次に、端子Ａの後ろの処理を図１５を用いて説明する。符号化制御部１５及び位置探索部１４は、語頭文字列のカウンタｉを０に初期化し、語頭文字列長ｍを０に初期化し、最大一致長ｍａｘ＿ｌを０に初期化する（ステップＳ１３）。そして、位置探索部１４の位置取得部１４２は、直前Ｎ文字にこれから符号化するｉ文字列を加えたＮ＋ｉ文字の最近出現位置Ｐを位置保持部１４１から特定し、一致長取得部１４３は、これから符号化するｉ文字より後ろの文字列と位置ＰにおけるＮ＋ｉ文字より後方の文字列とが一致する文字列長である一致長ｌを例えば入力バッファ１３から特定する（ステップＳ１５）。位置探索部１４は、ｉ毎に、最近出現位置と一致長ｌとを符号化制御部１５に出力する。
【００６９】
なお、ｉ＝０の場合には、既に最近出現位置Ｐは得られているので、この場合にはこの最近出現位置Ｐに基づき一致長ｌを特定する。
【００７０】
そして、符号化制御部１５は、今回特定された一致長ｌが最大一致長ｍａｘ＿ｌより長いか判断する（ステップＳ１７）。今回特定された一致長ｌが最大一致長ｍａｘ＿ｌより長い場合には、符号化制御部１５は、ｍａｘ＿ｌに今回特定された一致長ｌを設定し、さらに語頭文字列長ｍにｉを設定する（ステップＳ１９）。一方、今回特定された一致長ｌが最大一致長ｍａｘ＿ｌ以下であれば、処理はステップＳ２１に移行する。
【００７１】
そして、ｉが所定の定数Ｍ未満であれば（ステップＳ２１：Ｎｏルート）、位置探索部１４及び符号化制御部１５は、ｉを１インクリメントして（ステップＳ２３）、処理はステップＳ１５に戻る。一方、ｉが定数Ｍ以上であれば（ステップＳ２１：Ｙｅｓルート）、符号化制御部１５は、語頭文字列長ｍ及び語頭文字列と最大一致長ｍａｘ＿ｌとを第１符号化部１６に出力する。
【００７２】
そして、第１符号化部１６のｍ符号化部１６１は、語頭文字列長ｍを所定のルールで符号化して、出力バッファ１８に出力する。さらに、第１符号化部１６のｌ符号化部１６２は、最大一致長ｍａｘ＿ｌを所定のルールで符号化して、出力バッファ１８に出力する（ステップＳ２５）。
【００７３】
ここで、最大一致長ｍａｘ＿ｌが０である場合には（ステップＳ２７：Ｙｅｓルート）処理は端子Ｂを介して図１４のステップＳ５に戻る。すなわち、現在位置の１文字を符号化制御部１５が、第２符号化部１７に出力して符号化を行わせる。
【００７４】
一方、最大一致長ｍａｘ＿ｌが１以上である場合には、第１符号化部１６は、語頭文字列長ｍの語頭文字列を第２符号化部１７に出力して、第２符号化部１７は、受け取った語頭文字列を所定のルールに従って符号化して、出力バッファ１８に出力する。そして処理は端子Ｃを介して図１４のステップＳ７に戻る。
【００７５】
図１５の処理フローは、上で述べた例では、ステップ（２０）において実行される。すなわち、図４の最下段のテーブルに示したようなデータを生成し、ｍ＝０及びｍａｘ＿ｌ＝１が符号化される。ｍ＝０であるから、第１符号化部１６から第２符号化部１７に出力される文字はない。
【００７６】
また、ステップ（２１）でも、図１５の処理フローは実行されるが、図６の最下段のテーブルに示したようなデータを生成し、ｍ＝０及びｍａｘ＿ｌ＝０が符号化される。但し、ｍａｘ＿ｌ＝０であるからステップＳ２７で端子Ｂを介して図１４のステップＳ５に戻るため、現在位置の文字「＿」が符号化される。
【００７７】
さらに、ステップ（２２）乃至ステップ（２６）については、図１４の処理フローが実行される。そして、ステップ（２７）でも、図１５の処理フローが実行される。この場合、図８の最下段のテーブルに示したようなデータを生成し、ｍ＝１及びｍａｘ＿ｌ＝８が符号化される。さらに、語頭文字列「ｐ」がステップＳ２９で符号化される。
【００７８】
また、ステップ（２８）でも、図１５の処理フローが実行される。但し、図１０の中段のテーブルに示されるようなデータを生成し、ｍ＝０及びｍａｘ＿ｌ＝０が符号化される。ｍａｘ＿ｌ＝０であるため、ステップＳ２７で端子Ｂを介して図１４のステップＳ５に戻るため、現在位置の文字「ｄ」が符号化される。
【００７９】
さらに、ステップ（２９）及び（３０）については、図１４の処理フローが実行される。そして、ステップ（３１）でも、図１５の処理フローが実行される。この場合、図１０の最下段のテーブルに示されるようなデータを生成し、ｍ＝０及びｍａｘ＿ｌ＝５が符号化される。なお、ｍ＝０であるから語頭文字列は符号化されない。
【００８０】
以上のような処理を実施することによって、上で述べたように、短い文字列と長い文字列の繰り返しがある場合でもより効率的に圧縮することができるようになる。なお、ｍ及びｍａｘ＿ｌの順番については、逆であっても良い。また、語頭文字列については、ｍより後に符号化されていればよい。ｍａｘ＿ｌは語頭文字の後ろで符号化されても良い。
【００８１】
次に、復元処理について図１６乃至図２３を用いて説明する。図１２に示した符号列から、図３に示した文字列を復元する場合を一例として述べる。なお、既に符号化を行った直前Ｎ文字のＮは３であるものとする。ステップ（１０１）では、既に符号化を行った直前Ｎ文字は存在しないので、現在位置の符号”ｄ”については、そのまま復元して文字「ｄ」が生成される。そして、現在位置を１つ先に進める。
【００８２】
ステップ（１０２）では、直前Ｎ文字はまだ揃っていないので、現在位置の符号”ａ”については、そのまま復元して文字「ａ」が生成される。そして、現在位置を１つ先に進める。ステップ（１０３）では、直前Ｎ文字はまだ揃っていないので、現在位置の符号”ｔ”については、そのまま復元して文字「ｔ」が生成される。そして、現在位置を１つ先に進める。
【００８３】
ステップ（１０４）では、直前Ｎ文字が「ｄａｔ」となるので、過去に文字列「ｄａｔ」が出現していたか確認する。この場合出現していないので、現在位置の符号”ａ”を、そのまま復元して文字「ａ」を生成する。さらに、図１７に示すように、直前Ｎ文字に連結する文字列である語頭文字列の文字列長ｉ＝０について、文字列「ｄａｔ」と出現位置「１」（ここでは先頭の文字「ｄ」の出現位置を示しているが、最後の文字「ｔ」の出現位置であっても良い）とを対応付けておく。そして、現在位置を１つ先に進める。
【００８４】
ステップ（１０５）では、直前Ｎ文字が「ａｔａ」となるので、過去に文字列「ａｔａ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号「＿」を、そのまま復元して文字「＿」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ａｔａ」と出現位置「２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｄａｔａ」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００８５】
ステップ（１０６）では、直前Ｎ文字が「ｔａ＿」となるので、過去に文字列「ｔａ＿」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｃ”を、そのまま復元して文字「ｃ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｔａ＿」と出現位置「３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ａｔａ＿」と出現位置「２」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｄａｔａ＿」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００８６】
ステップ（１０７）では、直前Ｎ文字が「ａ＿ｃ」となるので、過去に文字列「ａ＿ｃ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｏ”を、そのまま復元して文字「ｏ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ａ＿ｃ」と出現位置「４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｔａ＿ｃ」と出現位置「３」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ａｔａ＿ｃ」と出現位置「２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｄａｔａ＿ｃ」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００８７】
ステップ（１０８）では、直前Ｎ文字が「＿ｃｏ」となるので、過去に文字列「＿ｃｏ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｍ”を、そのまま復元して文字「ｍ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｃｏ」と出現位置「５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ａ＿ｃｏ」と出現位置「４」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｔａ＿ｃｏ」と出現位置「３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ａｔａ＿ｃｏ」と出現位置「２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｄａｔａ＿ｃｏ」と出現位置「１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００８８】
ステップ（１０９）では、直前Ｎ文字が「ｃｏｍ」となるので、過去に文字列「ｃｏｍ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｐ”を、そのまま復元して文字「ｐ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｃｏｍ」と出現位置「６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「＿ｃｏｍ」と出現位置「５」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ａ＿ｃｏｍ」と出現位置「４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｔａ＿ｃｏｍ」と出現位置「３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ａｔａ＿ｃｏｍ」と出現位置「２」とを対応付けておく。そして、現在位置を１つ先に進める。
【００８９】
ステップ（１１０）では、直前Ｎ文字が「ｏｍｐ」となるので、過去に文字列「ｏｍｐ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｒ”を、そのまま復元して文字「ｒ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｍｐ」と出現位置「７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｃｏｍｐ」と出現位置「６」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「＿ｃｏｍｐ」と出現位置「５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ａ＿ｃｏｍｐ」と出現位置「４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｔａ＿ｃｏｍｐ」と出現位置「３」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９０】
ステップ（１１１）では、直前Ｎ文字が「ｍｐｒ」となるので、過去に文字列「ｍｐｒ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｅ”を、そのまま復元して文字「ｅ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｍｐｒ」と出現位置「８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｍｐｒ」と出現位置「７」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｃｏｍｐｒ」と出現位置「６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「＿ｃｏｍｐｒ」と出現位置「５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ａ＿ｃｏｍｐｒ」と出現位置「４」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９１】
ステップ（１１２）では、直前Ｎ文字が「ｐｒｅ」となるので、過去に文字列「ｐｒｅ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｓ”を、そのまま復元して文字「ｓ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｐｒｅ」と出現位置「９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｍｐｒｅ」と出現位置「８」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｍｐｒｅ」と出現位置「７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｃｏｍｐｒｅ」と出現位置「６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「＿ｃｏｍｐｒｅ」と出現位置「５」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９２】
ステップ（１１３）では、直前Ｎ文字が「ｒｅｓ」となるので、過去に文字列「ｒｅｓ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｓ”を、そのまま復元して文字「ｓ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｒｅｓ」と出現位置「１０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｐｒｅｓ」と出現位置「９」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｍｐｒｅｓ」と出現位置「８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｏｍｐｒｅｓ」と出現位置「７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｃｏｍｐｒｅｓ」と出現位置「６」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９３】
ステップ（１１４）では、直前Ｎ文字が「ｅｓｓ」となるので、過去に文字列「ｅｓｓ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｉ”を、そのまま復元して文字「ｉ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｅｓｓ」と出現位置「１１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｒｅｓｓ」と出現位置「１０」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｐｒｅｓｓ」と出現位置「９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｍｐｒｅｓｓ」と出現位置「８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｏｍｐｒｅｓｓ」と出現位置「７」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９４】
ステップ（１１５）では、直前Ｎ文字が「ｓｓｉ」となるので、過去に文字列「ｓｓｉ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｏ”を、そのまま復元して文字「ｏ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｓｓｉ」と出現位置「１２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｅｓｓｉ」と出現位置「１１」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｒｅｓｓｉ」と出現位置「１０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｐｒｅｓｓｉ」と出現位置「９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｍｐｒｅｓｓｉ」と出現位置「８」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９５】
ステップ（１１６）では、直前Ｎ文字が「ｓｉｏ」となるので、過去に文字列「ｓｉｏ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｎ”を、そのまま復元して文字「ｎ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｓｉｏ」と出現位置「１３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｓｓｉｏ」と出現位置「１２」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｅｓｓｉｏ」と出現位置「１１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｒｅｓｓｉｏ」と出現位置「１０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｐｒｅｓｓｉｏ」と出現位置「９」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９６】
ステップ（１１７）では、直前Ｎ文字が「ｉｏｎ」となるので、過去に文字列「ｉｏｎ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”＿”を、そのまま復元して文字「＿」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｉｏｎ」と出現位置「１４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｓｉｏｎ」と出現位置「１３」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｓｓｉｏｎ」と出現位置「１２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｅｓｓｉｏｎ」と出現位置「１１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｒｅｓｓｉｏｎ」と出現位置「１０」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９７】
ステップ（１１８）では、直前Ｎ文字が「ｏｎ＿」となるので、過去に文字列「ｏｎ＿」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｃ”を、そのまま復元して文字「ｃ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｎ＿」と出現位置「１５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｉｏｎ＿」と出現位置「１４」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｓｉｏｎ＿」と出現位置「１３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｓｉｏｎ＿」と出現位置「１２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｅｓｓｉｏｎ＿」と出現位置「１１」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９８】
ステップ（１１９）では、直前Ｎ文字が「ｎ＿ｃ」となるので、過去に文字列「ｎ＿ｃ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｏ”を、そのまま復元して文字「ｏ」を生成する。さらに、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｎ＿ｃ」と出現位置「１６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｎ＿ｃ」と出現位置「１５」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｉｏｎ＿ｃ」と出現位置「１４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｉｏｎ＿ｃ」と出現位置「１３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｓｉｏｎ＿ｃ」と出現位置「１２」とを対応付けておく。そして、現在位置を１つ先に進める。
【００９９】
ステップ（１２０）では、直前Ｎ文字が「＿ｃｏ」となるので、過去に文字列「＿ｃｏ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。そうすると、出現位置５において検出される。そうすると、現在位置の符号に含まれる語頭文字列長ｍと一致長ｌとに相当する符号を復元する。図１６の最下段のテーブルに示すように、ｍ＝０及びｌ＝１が得られる。ｍ＝０であるから、検出された出現位置５がそのまま有効となり、出現位置５における「＿ｃｏ」の後ろの文字列「ｍ」を１文字文コピーすることで復元する。
【０１００】
なお、図１７に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｃｏ」と出現位置「１７」とを対応付けておく。なお、文字列「＿ｃｏ」の最近出現位置は「５」から「１７」に更新される。図１７は時系列での登録状況を示しているので、図１７では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｎ＿ｃｏ」と出現位置「１６」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｎ＿ｃｏ」と出現位置「１５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｉｏｎ＿ｃｏ」と出現位置「１４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｉｏｎ＿ｃｏ」と出現位置「１３」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１０１】
図１８に示すように、ステップ（１２１）では、直前Ｎ文字が「ｃｏｍ」となるので、過去に文字列「ｃｏｍ」が出現していたかを図１７のｉ＝０についてのデータを用いて確認する。そうすると、出現位置６において検出される。そして、現在位置の符号に含まれる語頭文字列長ｍと一致長ｌとに相当する符号を復元する。図１８の下段のテーブルに示すように、ｍ＝０及びｌ＝０が得られる。ｌ＝０の場合には、コピー文字列は無いということになるので、次の符号”＿”を復元して、文字「＿」を生成する。
【０１０２】
さらに、図１９に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｃｏｍ」と出現位置「１８」とを対応付けておく。なお、文字列「ｃｏｍ」の最近出現位置は「６」から「１８」に更新される。図１７及び図１９は時系列での登録状況を示しているので、図１９では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「＿ｃｏｍ」と出現位置「１７」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｎ＿ｃｏｍ」と出現位置「１６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｏｎ＿ｃｏｍ」と出現位置「１５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｉｏｎ＿ｃｏｍ」と出現位置「１４」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１０３】
図２０に示すように、ステップ（１２２）では、直前Ｎ文字が「ｏｍ＿」となるので、過去に文字列「ｏｍ＿」が出現していたかを図１７及び図１９のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｄ”を、そのまま復元して文字「ｄ」を生成する。さらに、図２１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｍ＿」と出現位置「１９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｃｏｍ＿」と出現位置「１８」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「＿ｃｏｍ＿」と出現位置「１７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｎ＿ｃｏｍ＿」と出現位置「１６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｏｎ＿ｃｏｍ＿」と出現位置「１５」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１０４】
ステップ（１２３）では、直前Ｎ文字が「ｍ＿ｄ」となるので、過去に文字列「ｍ＿ｄ」が出現していたかを図１７、図１９及び図２１のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｅ”を、そのまま復元して文字「ｅ」を生成する。さらに、図２１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｍ＿ｄ」と出現位置「２０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｍ＿ｄ」と出現位置「１９」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｃｏｍ＿ｄ」と出現位置「１８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「＿ｃｏｍ＿ｄ」と出現位置「１７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｎ＿ｃｏｍ＿ｄ」と出現位置「１６」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１０５】
ステップ（１２４）では、直前Ｎ文字が「＿ｄｅ」となるので、過去に文字列「＿ｄｅ」が出現していたかを図１７、図１９及び図２１のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｃ”を、そのまま復元して文字「ｃ」を生成する。さらに、図２１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｄｅ」と出現位置「２１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｍ＿ｄｅ」と出現位置「２０」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｍ＿ｄｅ」と出現位置「１９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｃｏｍ＿ｄｅ」と出現位置「１８」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「＿ｃｏｍ＿ｄｅ」と出現位置「１７」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１０６】
ステップ（１２５）では、直前Ｎ文字が「ｄｅｃ」となるので、過去に文字列「ｄｅｃ」が出現していたかを図１７、図１９及び図２１のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｏ”を、そのまま復元して文字「ｏ」を生成する。さらに、図２１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｄｅｃ」と出現位置「２２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「＿ｄｅｃ」と出現位置「２１」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｍ＿ｄｅｃ」と出現位置「２０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｏｍ＿ｄｅｃ」と出現位置「１９」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｃｏｍ＿ｄｅｃ」と出現位置「１８」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１０７】
ステップ（１２６）では、直前Ｎ文字が「ｅｃｏ」となるので、過去に文字列「ｅｃｏ」が出現していたかを図１７、図１９及び図２１のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｍ”を、そのまま復元して文字「ｍ」を生成する。さらに、図２１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｅｃｏ」と出現位置「２３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｄｅｃｏ」と出現位置「２２」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「＿ｄｅｃｏ」と出現位置「２１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｍ＿ｄｅｃｏ」と出現位置「２０」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｏｍ＿ｄｅｃｏ」と出現位置「１９」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１０８】
ステップ（１２７）では、直前Ｎ文字が「ｃｏｍ」となるので、過去に文字列「ｃｏｍ」が出現していたかを図１７、図１９及び図２１のｉ＝０についてのデータを用いて確認する。そうすると、出現位置１８において検出される。そうすると、現在位置の符号に含まれる語頭文字列長ｍと一致長ｌとに相当する符号を復元する。図２０の下段のテーブルに示すように、ｍ＝１及びｌ＝８が得られる。ｌ＝０ではないので、ｍ＝１で次の符号”ｐ”を復元して語頭文字「ｐ」を生成する。そして、直前Ｎ文字「ｃｏｍ」に語頭文字「ｐ」を連結した文字列「ｃｏｍｐ」の最近出現位置を、図１７、図１９及び図２１のｉ＝１についてのデータを用いて検出する。そうすると、最近出現位置は「６」と特定されるので、最近出現位置の「ｃｏｍｐ」の後ろの一致文字列８文字文「ｒｅｓｓｉｏｎ＿」をコピーすることで復元する。語頭文字列「ｐ」と共に「ｐｒｅｓｓｉｏｎ＿」が復元される。
【０１０９】
さらに、図２１に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｃｏｍ」と出現位置「２４」とを対応付けておく。なお、文字列「ｃｏｍ」の最近出現位置は「１８」から「２４」に更新される。図１７、図１９及び図２１は時系列での登録状況を示しているので、図２１では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｅｃｏｍ」と出現位置「２３」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｄｅｃｏｍ」と出現位置「２２」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「＿ｄｅｃｏｍ」と出現位置「２１」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｍ＿ｄｅｃｏｍ」と出現位置「２０」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１１０】
次に、図２２に示すように、ステップ（１２８）では、直前Ｎ文字が「ｏｎ＿」となるので、過去に文字列「ｏｎ＿」が出現していたかを図１７、図１９及び図２１のｉ＝０についてのデータを用いて確認する。そうすると、出現位置１５において検出される。そうすると、現在位置の符号に含まれる語頭文字列長ｍと一致長ｌとに相当する符号を復元する。図２２の中段のテーブルに示すように、ｍ＝０及びｌ＝０が得られる。ｌ＝０であるので、次の符号”ｄ”を復元して文字「ｄ」を生成する。
【０１１１】
さらに、図２３に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｏｎ＿＿」と出現位置「２５」とを対応付けておく。なお、文字列「ｏｎ＿」の最近出現位置は「１５」から「２５」に更新される。図１７、図１９、図２１及び図２３は時系列での登録状況を示しているので、図２３では「更新」の列に更新が発生したことを示している。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｉｏｎ＿」と出現位置「２４」とを対応付けておく。なお、文字列「ｉｏｎ＿」の最近出現位置は「１４」から「２４」に更新される。また、語頭文字列の文字列長ｉ＝２について、文字列「ｓｉｏｎ＿」と出現位置「２３」とを対応付けておく。なお、文字列「ｓｉｏｎ＿」の最近出現位置は「１３」から「２３」に更新される。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｓｉｏｎ＿」と出現位置「２２」とを対応付けておく。なお、文字列「ｓｓｉｏｎ＿」の最近出現位置は「１２」から「２２」に更新される。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｅｓｓｉｏｎ＿」と出現位置「２１」とを対応付けておく。なお、文字列「ｅｓｓｉｏｎ＿」の最近出現位置は「１１」から「２１」に更新される。そして、現在位置を１つ先に進める。
【０１１２】
図２２に示すように、ステップ（１２９）では、直前Ｎ文字が「ｎ＿ｄ」となるので、過去に文字列「ｎ＿ｄ」が出現していたかを図１７、図１９、図２１及び図２３のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ａ”を、そのまま復元して文字「ａ」を生成する。さらに、図２３に示すように、語頭文字列の文字列長ｉ＝０について、文字列「ｎ＿ｄ」と出現位置「２６」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｏｎ＿ｄ」と出現位置「２５」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｉｏｎ＿ｄ」と出現位置「２４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｓｉｏｎ＿ｄ」と出現位置「２３」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｓｉｏｎ＿ｄ」と出現位置「２２」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１１３】
ステップ（１３０）では、直前Ｎ文字が「＿ｄａ」となるので、過去に文字列「＿ｄａ」が出現していたかを図１７、図１９、図２１及び図２３のｉ＝０についてのデータを用いて確認する。この場合出現していないので、現在位置の符号”ｔ”を、そのまま復元して文字「ｔ」を生成する。さらに、図２３に示すように、語頭文字列の文字列長ｉ＝０について、文字列「＿ｄａ」と出現位置「２７」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝１について、文字列「ｎ＿ｄａ」と出現位置「２６」とを対応付けておく。また、語頭文字列の文字列長ｉ＝２について、文字列「ｏｎ＿ｄａ」と出現位置「２５」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝３について、文字列「ｉｏｎ＿ｄａ」と出現位置「２４」とを対応付けておく。さらに、語頭文字列の文字列長ｉ＝４について、文字列「ｓｉｏｎ＿ｄａ」と出現位置「２３」とを対応付けておく。そして、現在位置を１つ先に進める。
【０１１４】
ステップ（１３１）では、直前Ｎ文字が「ｄａｔ」となるので、過去に文字列「ｄａｔ」が出現していたかを図１７、図１９、図２１及び図２３のｉ＝０についてのデータを用いて確認する。そうすると、出現位置１において検出される。そうすると、現在位置の符号に含まれる語頭文字列長ｍと一致長ｌとに相当する符号を復元する。図２２の最下段のテーブルに示すように、ｍ＝０及びｌ＝５が得られる。ｍ＝０であるから、語頭文字列については存在しない。従って、最近出現位置１における文字列「ｄａｔ」から一致長ｌ＝５文字分だけコピーすることで復元する。すなわち、「ａ＿ｃｏｍ」という文字列がコピーされる。
【０１１５】
従って、図３に示すような文字列が復元される。
【０１１６】
次に、このような復元処理を行う情報処理装置２００の構成を図２４に示す。情報処理装置２００は、圧縮データ格納部２１と、入力部２２と、復元制御部２３と、位置保持部２４と、位置取得部２５と、一致長復元部２６と、文字復元部２７と、コピー部２８と、出力バッファ２９と、出力部３０と、元データ格納部３１とを有する。入力部２２と、復元制御部２３と、位置保持部２４と、位置取得部２５と、一致長復元部２６と、文字復元部２７と、コピー部２８と、出力バッファ２９と、出力部３０とは、復元処理プログラムを情報処理装置２００で実行することによって実現される。
【０１１７】
入力部２２は、圧縮データ格納部２１に格納されている圧縮データの符号を復元制御部２３に出力する。復元制御部２３は、位置保持部２４からの出力に応じて位置取得部２５、一致長復元部２６及び文字復元部２７を制御する。また、復元制御部２３は、語頭文字列長ｍに相当する符号を復元する。位置保持部２４は、出力バッファ２９に格納されている復元済みの文字列からＮ文字及びＮ＋ｉ（ｉは１以上Ｍ以下の整数）文字の最近出現位置を管理している。一致長復元部２６は、一致長ｌに相当する符号を復元して、コピー部２８に出力する。位置取得部２５は、復元制御部２３から語頭文字列長ｍ及び語頭文字列を受け取り、直前Ｎ文字＋語頭文字列についての最近出現位置を、位置保持部２４から取得して、コピー部２８に出力する。コピー部２８は、位置取得部２５からの最近出現位置と一致長復元部２６からの一致長ｌに従って、出力バッファ２９から適切な位置の文字列を読み出して、出力バッファ２９に追加登録する。文字復元部２７は、所定のルールに従って文字に相当する符号を復元して、出力バッファ２９に出力する。出力バッファ２９では、入力される文字が順番に格納される。出力部３０は、復元処理が完了すると、出力バッファ２９から復元データを読み出して、元データ格納部３１に格納する。
【０１１８】
次に、図２５を用いて情報処理装置２００の処理内容を説明する。ここでは、入力部２２が、圧縮データ格納部２１から、圧縮データに含まれる符号を読み出して、復元制御部２３に出力するものとする。そして、位置保持部２４及び復元制御部２３は、同期して以下のような処理を実施する。なお、復元制御部２３が、現在処理しようとしている符号が現在位置の符号である。
【０１１９】
位置保持部２４は、出力バッファ２９に最近入力されたＮ文字である直前Ｎ文字を特定し（ステップＳ４１）、この直前Ｎ文字の最近出現位置を保持しているか判断する（ステップＳ４３）。直前Ｎ文字の最近出現位置を保持しているか否かについての判断結果は、位置保持部２４から符号制御部２３に出力される。
【０１２０】
位置保持部２４が直前Ｎ文字の最近出現位置を保持していない場合には、復元制御部２は、現在位置の符号を文字復元部２７に出力し、文字復元部２７は、受け取った符号を所定のルールに従って復元して、復元によって生成された文字を出力バッファ２９に出力する（ステップＳ４５）。上で述べた例では、図１６におけるステップ（１０１）からステップ（１１９）までは、最近出現位置が取得できないので、ステップＳ４５で処理されている。そして、データ終了であれば（ステップＳ４７：Ｙｅｓルート）処理を終了し、出力部３０は、出力バッファ２９に格納されているデータを元データ格納部３１に格納する。そして処理は終了する。
【０１２１】
一方、未処理のデータが存在している場合には（ステップＳ４７：Ｎｏルート）、位置保持部２４は、直前Ｎ文字及び直前Ｎ＋ｉ文字（ｉは１以上Ｍ以下の整数）の最近出現位置の更新を行う（ステップＳ４９）。図１７、図１９、図２１及び図２３に模式的に示したようなデータを蓄積する。なお、同一文字列について既に最近出現位置が登録されている場合には、最近出現位置を更新する。
【０１２２】
また、位置保持部２４及び復元制御部２３は、現在位置を移動させる（ステップＳ５１）。そして処理はステップＳ４１に戻る。
【０１２３】
一方、位置保持部２４が直前Ｎ文字の最近出現位置を保持している場合には、復元制御部２３は、現在位置の符号として語頭文字列長ｍに相当する符号及び一致長ｌに相当する符号を保持しているので、語頭文字列長ｍに相当する符号を復元し、さらに一致長ｌに相当する符号を一致長復元部２６に出力して復元処理を行わせる（ステップＳ５３）。一致長復元部２６は、復元制御部２３から受け取った、一致長ｌに相当する符号を復元して、一致長ｌを生成し、復元制御部２３及びコピー部２８に出力する。
【０１２４】
復元制御部２３は、一致長復元部２６から受け取った一致長ｌが０であるか判断する（ステップＳ５５）。一致長ｌ＝０であれば、復元制御部２３は、現在位置を１つ後ろにずらして、次の符号を文字復元部２７に出力する。そして処理はステップＳ４５に移行する。コピー部２８は、ｌ＝０であればコピー処理を行わない。このように、図１８に示したステップ（１２１）及び図２２に示したステップ（１２８）のような場合を処理する。
【０１２５】
一方、一致長ｌが０ではない場合には、復元制御部２３は、語頭文字列長ｍ分の符号を文字復元部２７に出力し、ｍ文字分の符号を復元させる。文字復元部２７は、ｍ文字分の符号を所定のルールで復元してｍ文字生成すると、出力バッファ２９に出力する（ステップＳ５７）。復元制御部２３は、語頭文字列長ｍを、位置取得部２５に出力し、位置取得部２５は、復元制御部２３から受け取った語頭文字列長ｍに従って、直前Ｎ文字と復元したｍ文字とを加えたＮ＋ｍ文字の最近出現位置を位置保持部２４から取得し、最近出現位置及びｍ（又はＮ＋ｍ）をコピー部２８に出力する。コピー部２８は、出力バッファ２９から最近出現位置におけるＮ＋ｍ文字より後方の一致長ｌの文字をコピーして、出力バッファ２９に出力する（ステップＳ５９）。そして処理はステップＳ４７に移行する。
【０１２６】
このような処理を行えば、図１６に示したステップ（１２０）、図２０に示したステップ（１２７）及び図２２に示したステップ（１３１）のような処理が行われる。
【０１２７】
なお、語頭文字列長にＮ＋ｍ＝Ｘを設定して符号化した場合には、復元する際には、Ｘ−Ｎを算出すれば、上で述べた語頭文字列長ｍが得られる。また、圧縮の際にも述べたが、ｍとｌと語頭文字の順番は異なる態様が可能であるので、復元の際には、それに応じて処理の順番を変えることになる。
【０１２８】
［実施の形態２］
上で述べた実施の形態では、位置保持部１４１及び位置保持部２４において、直前Ｎ文字と直前Ｎ文字＋ｉ文字（ｉは１以上Ｍ以下）とについて最近出現位置を保持するような構成を採用していた。しかしながら、このような最近出現位置を保持するデータ構造を多く持つとメモリを多く消費することになる。従って、ｉを固定の１つにしてしまうことも可能である。図３のような文字列を符号化する場合には、ｉ＝１のみあれば処理可能である。
【０１２９】
このような場合、図１５の処理については、図２６に示すような処理に変更する。なお、直前Ｎ文字の最近出現位置を最近出現位置Ａとする。
【０１３０】
具体的には、位置探索部１４の一致長取得部１４３は、これから符号化する文字列と、最近出現位置Ａにおける直前Ｎ文字より後方の文字列とが一致する長さである第１の一致長ｌ１を例えば入力バッファ１３から特定する（ステップＳ６１）。
【０１３１】
また、位置取得部１４２は、位置保持部１４１から、直前Ｎ文字にこれから符号化するＭ文字を加えた文字列の最近出現位置Ｂを特定し、一致長取得部１４３は、これから符号化するＭ文字より後ろの文字列と位置ＢにおけるＮ＋Ｍ文字より後方の文字列とが一致する長さである第２の一致長ｌ２を例えば入力バッファ１３から特定する（ステップＳ６３）。上でも述べたようにＭは固定である。
【０１３２】
そして、位置探索部１４は、直前Ｎ文字についての最近出現位置Ａ及び一致長ｌ１と、直前Ｎ文字＋Ｍ文字についての最近出現位置Ｂ及び一致長ｌ２を符号化制御部１５に出力する。
【０１３３】
そして、符号化制御部１５は、一致長ｌ１が一致長ｌ２以上であるか判断する（ステップＳ６５）。一致長ｌ１が一致長ｌ２以上である場合には、語頭長ｍ＝０である。従って、本実施の形態では、符号化制御部１５は、一致長ｌ１及び語頭長ｍ＝Ｎ（ｍ＝０でもよい）を第１符号化部１６に出力する。第１符号化部１６のｍ符号化部１６１は、語頭長ｍ＝Ｎを所定のルールで符号化し、出力バッファ１８に出力する。また、第１符号化部１６のｌ符号化部１６２は、一致長ｌ１を所定のルールで符号化し、出力バッファ１８に出力する（ステップＳ７１）。
【０１３４】
そして、符号化制御部１５は、一致長ｌ１が０であるか判断する（ステップＳ７３）。一致長ｌ１が０である場合には、処理は端子Ｂを介して図１４のステップＳ５に移行する。一方、一致長ｌ１＝０ではない場合には、端子Ｃを介して図１４のステップＳ７に戻る。
【０１３５】
また、ｌ１＜ｌ２であれば、符号化制御部１５は、Ｎ＋Ｍ（Ｍであってもよい）を語頭文字列長ｍとして第１符号化部１６に出力し、一致長ｌ２を第１符号化部１６に出力する。
【０１３６】
第１符号化部１６のｍ符号化部１６１は、符号化制御部１５から受け取った語頭文字列長ｍを所定のルールで符号化して、生成された符号を出力バッファ１８に出力する。また、第１符号化部１６のｌ符号化部１６２は、一致長ｌ２を所定のルールに従って符号化して、生成された符号を出力バッファ１８に出力する（ステップＳ６７）。さらに、符号化制御部１５は、これから符号化するＭ文字を、第２符号化部１７に出力する。第２符号化部１７は、符号化制御部１５から受け取ったＭ文字を所定のルールで符号化して、出力バッファ１８に出力する（ステップＳ６９）。そして処理は端子Ｃを介して図１４のＳ７の処理に戻る。
【０１３７】
このようにすれば圧縮処理における処理負荷を下げることもできる。
【０１３８】
［実施の形態３］
圧縮効果を高めるために、入力文字と直前の文字との依存関係（以下、文脈と称する）を取り入れた条件付き出現確率に基づいて可変長符号化を行う手法が存在している。この手法は、例えば、“Ｕｎｂｏｕｎｄｅｄ Ｌｅｎｇｔｈ Ｃｏｎｔｅｘｔｓ ｆｏｒ ＰＰＭ ”Ｊｏｈｎ Ｇ．Ｃｌｅａｒｙ他著１９９５ ＩＥＥＥ Ｄａｔａ Ｃｏｍｐｒｅｓｓｉｏｎ Ｃｏｎｆｅｒｅｎｃｅ， ｐ５２−６１に詳細が記載されている。
【０１３９】
このような条件付き出現確率に基づいた可変長符号化の手法を、第２符号化部１７に用いることが有効である。
【０１４０】
例えば、１文字を文脈とした場合における第２符号化部１７の構成例を図２７に示す。但し、１文字ではなくより多くの文字数の文字列を文脈として用いる場合もある。
【０１４１】
図２７の例では、第２符号化部１７は、固定１次文脈を用いて符号化を行うために直前文字に対応した２５６個の符号テーブル１７２乃至１７４を含む符号テーブル保持部１７１と、符号生成部１７５とを有する。
【０１４２】
符号化制御部１５は、符号化すべき文字のデータ（元データ）を第２符号化部１７に出力するので、第２符号化部１７は、元データが入力されると、入力された文字の直前文字に対応する符号テーブル１７２乃至１７４のいずれかを選択する（図２８：ステップＳ８１）。
【０１４３】
そして、符号生成部１７５は、選択された符号テーブル１７２乃至１７４のいずれかに登録されている符号から、入力された文字を符号化して、出力バッファ１８に出力する（図２８：ステップＳ８３）。
【０１４４】
なお、図２７の例では、符号テーブル１７２乃至１７４が１バイト２５６種類全ての文字に対応して設けられているが、直前文字から抜き出した特徴に対応させて符号テーブルを設けることにより、符号テーブルの数を減らしてもよい。例えば、文字データの最上位ビットを除き、文字データの残り７ビットに対応させて符号テーブルを設けるようにしてもよい。
【０１４５】
なお、圧縮処理において上記のような条件付き出現確率に基づいて可変長符号化を行った場合には、情報処理装置２００における文字復元部２７についても、条件付き出現確率に基づく可変長復元処理を実施することになる。
【０１４６】
これによって、より効率的に圧縮することができるようになる。
【０１４７】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、情報処理装置１００及び２００の機能ブロック図は一例であって、必ずしも実際のモジュール構成と一致するわけではない。また、処理フローについても、処理結果が変わらない限り処理ステップの順番を入れ替えたり、並列に実行するようにしても良い。
【０１４８】
また、情報処理装置１００と情報処理装置２００とが別々に設けられるだけではなく、一体となっている場合もある。
【０１４９】
さらに、上で述べたＭ及びＮについては、一例であって他の値を用いる場合でも良い。例えばＮ＝３以外であっても良い。また、Ｍは１、２、３又は１３等が可能であるが、他の値であっても良い。
【０１５０】
なお、上で述べた情報処理装置１００及び２００は、コンピュータ装置であって、図２９に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１５１】
以上述べた本実施の形態をまとめると、以下のようになる。
【０１５２】
本実施の形態に係る圧縮方法は、（Ａ）第１のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第１の語長の語が過去に出現していたことを検出すると、上記第１の語長の語の後ろに出現する符号化前の語と過去に出現した上記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定する第１の特定処理と、（Ｂ）上記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語が圧縮対象データにおいて過去に出現した位置を探索して、第３の語長の語の過去の出現位置が検出されると、第３の語長の語の後ろに出現する符号化前の語と過去に出現した第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する第２の特定処理と、（Ｃ）第１の一致長より第２の一致長が長い場合には、第２の語長又は第３の語長と第２の一致長と第２の語長の符号化前の語とを符号化して、第２のデータ格納部に格納する第１の符号化処理と、（Ｄ）第１の一致長が第２の一致長以上である場合又は第２の一致長が特定されない場合には、ゼロ又は第１の語長と第１の一致長とを符号化して、第２のデータ格納部に格納する第２の符号化処理と、（Ｅ）圧縮対象データにおいて第１の語長の語が過去に出現していない場合には、上記第１の語長の語の後ろに出現する符号化前の語を符号化して、第２のデータ格納部に格納する処理とを含む。
【０１５３】
このように第２の語長及び第２の語長の符号化前の語を符号化することで、短い繰り返しと長い繰り返しが混在する場合においてもより効率よく圧縮できるようになる。
【０１５４】
また、上で述べた第２の特定処理が、第２の語長を１乃至Ｍ（Ｍは１以上の整数）まで変化させて、複数の第２の一致長を特定する処理を含む場合もある。この場合には、第１の符号化処理及び第２の符号化処理における第２の一致長は、複数の第２の一致長のうち最も長い一致長であり、第２の語長は、当該最も長い一致長が特定された際の第２の語長である場合もある。このようにすればより効率的に符号化することができる。
【０１５５】
また、上記圧縮方法は、第１の一致長と前記第２の一致長とがゼロである場合又は第１の一致長がゼロで且つ第２の一致長が特定されない場合には、第１の語長の語の後ろに出現する符号化前の語を符号化する処理をさらに含むようにしても良い。
【０１５６】
さらに、上記圧縮方法において、符号化前の語を符号化する場合には、直前の１又は複数の語からなる文脈に対して次に出現する語の符号を保持する符号保持部から、符号化前の語と符号化前の語の直前の１又は複数の語とから符号化前の語の符号を特定するようにしても良い。このようにすればより効率的な符号化が可能となる。
【０１５７】
本実施の形態に係る復元方法は、（Ａ）第１のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第１の語長の語が過去に復元されていたことを検出すると、第２のデータ格納部に格納されており且つ第１の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第２の語長に相当する第１の符号と、連結すべき語の後ろで一致する語の一致長を表す第３の語長に相当する第２の符号と、上記連結すべき語に相当する第３の符号とを復元する処理と、（Ｂ）復元された上記連結すべき語を、第１のデータ格納部に格納する処理と、（Ｃ）複数の語において、第１の語長の語と連結すべき語とを連結することで得られる第４の語長の語の後ろで復元されている第３の語長の語をコピーして、第１のデータ格納部に格納する処理と、（Ｄ）複数の語において、第１の語長の語が過去に復元されていないことを検出すると、第２のデータ格納部に格納されており且つ第１の語長の語の符号の後ろに出現する符号を復元して、第１のデータ格納部に格納する処理とを含む。
【０１５８】
これによって、上記の圧縮方法で符号化された圧縮データを復元できるようになる。
【０１５９】
なお、上で述べた連結すべき語の語長は、第２の語長から第１の語長を減じた数である場合もある。上でも述べたように、語頭長についてはＮ＋ｍの場合もあればｍだけの場合もある。
【０１６０】
また、圧縮処理を行う情報処理装置は、（Ａ）複数の語を含む圧縮対象データを記憶する第１の記憶部と、（Ｂ）予め定められた複数の語長の各々について、当該語長を有する語の、圧縮対象データにおける最近出現位置を保持する位置保持部と、（Ｃ）位置保持部から、直前に符号化された第１の語長の語の最近出現位置を取得し、第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語の最近出現位置を取得する位置取得部と、（Ｄ）位置取得部により第１の語長の語の最近出現位置が取得された場合に、第１の語長の語の後ろに出現する符号化前の語と取得された最近出現位置における第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定し、位置取得部により第３の語長の語の最近出現位置が取得された場合に、第３の語長の語の後ろに出現する符号化前の語と特定された最近出現位置における第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する一致長特定部と、（Ｅ）指定された語長を符号化する第１の符号化部と、（Ｆ）複数の語のうち指定された語を符号化する第２の符号化部と、（Ｇ）制御部と、（Ｈ）第２の記憶部とを有する。
【０１６１】
そして、位置取得部が第１の語長の語の最近出現位置を取得すると、一致長特定部が第１の一致長を特定し、位置取得部が第３の語長の語の最近出現位置を取得すると、一致長特定部が前記第２の一致長を特定する。また、上で述べた制御部は、第１の一致長より第２の一致長が長い場合には、第２の語長又は第３の語長と第２の一致長とを指定して第１の符号化部に符号化を行わせ、第２の語長の符号化前の語を第２の符号化部に符号化を行わせ、符号化により生成された符号を第２の記憶部に記憶させる。また、上記制御部は、第１の一致長が第２の一致長以上である場合又は第２の一致長が特定されない場合、ゼロ又は第１の語長と第１の一致長とを第１の符号化部に符号化を行わせ、符号化により生成された符号を第２の記憶部に記憶させる。そして、上記制御部は、圧縮対象データにおいて第１の語長の語が過去に出現していない場合には、第１の語長の語の後ろに出現する符号化前の語を第２の符号化部に符号化を行わせ、符号化により生成された符号を第２の記憶部に記憶させる。
【０１６２】
また、上で述べた位置取得部は、第２の語長を１乃至Ｍ（Ｍは１以上の整数）まで変化させて、第２の語長の各々について第３の語長の語の最近出現位置を取得するようにしても良い。また、一致長特定部は、位置取得部が第３の語長の語の最近出現位置を取得すると、対応する第２の一致長を特定するようにしても良い。このような場合には、上で述べた制御部は、第１の一致長より第２の一致長のうち最も長い第２の一致長が長い場合には、当該最も長い第２の一致長に対応する第２の語長又は第３の語長と当該最も長い第２の一致長とを指定して第１の符号化部に符号化を行わせ、当該最も長い第２の一致長に対応する第２の語長の符号化前の語を第２の符号化部に符号化を行わせ、符号化により生成された符号を第２の記憶部に記憶させてもよい。また、第１の一致長が第２の一致長のいずれのもの以上である場合又は第２の一致長が特定されない場合、ゼロ又は第１の語長と第１の一致長とを第１の符号化部に符号化を行わせ、符号化により生成された符号を第２の記憶部に記憶させるようにしても良い。
【０１６３】
また、復元を行う情報処理装置は、（Ａ）復元された複数の語を記憶する第１の記憶部と、（Ｂ）予め定められた複数の語長の各々について、当該語長を有する語の、復元された複数の語における最近出現位置を保持する位置保持部と、（Ｃ）位置保持部から、直前に復元された第１の語長の語に当該第１の語長の語の後で復元された第２の語長の語を加えることで得られる第３の語長の語の過去の最近出現位置を取得する位置取得部と、（Ｄ）圧縮データに含まれる複数の符号のうち第２の語長を特定するための符号を復元する制御部と、（Ｅ）複数の符号のうち文字に相当する符号を復元する第１の復元部と、（Ｆ）第２の語長の語の後ろで一致する語の語長を表す一致長に相当する符号を復元する第２の復元部と、（Ｇ）位置取得部から出力される第３の語長の語の過去の最近出現位置と第２の復元部から出力される一致長とで特定される語を、第１の記憶部からコピーして、第１の記憶部に記憶するコピー部とを有する。
【０１６４】
そして、上で述べた制御部は、位置保持部から、第１の語長の語の最近出現位置が取得できない場合には、複数の符号のうち第１の語長の語に相当する符号の後に出現する符号を、第１の符号部により復元させ、第１の記憶部に記憶させる。また、上で述べた制御部は、位置保持部から、第１の語長の語の最近出現位置が取得されると、複数の符号のうち第１の語長の語に相当する符号の後に出現し且つ第２の語長を特定するための符号を復元し、複数の符号のうち第２の語長を特定するための符号の後に出現する一致長に相当する符号を第２の復元部に復元させ、復元された第２の語長及び一致長に応じて位置取得部及びコピー部を動作させる。
【０１６５】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
【０１６６】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１６７】
（付記１）
第１のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第１の語長の語が過去に出現していたことを検出すると、前記第１の語長の語の後ろに出現する符号化前の語と過去に出現した前記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定する第１の特定処理と、
前記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第３の語長の語の過去の出現位置が検出されると、前記第３の語長の語の後ろに出現する符号化前の語と過去に出現した前記第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する第２の特定処理と、
前記第１の一致長より前記第２の一致長が長い場合には、前記第２の語長又は前記第３の語長と前記第２の一致長と前記第２の語長の符号化前の語とを符号化して、第２のデータ格納部に格納する第１の符号化処理と、
前記第１の一致長が前記第２の一致長以上である場合又は前記第２の一致長が特定されない場合には、ゼロ又は前記第１の語長と前記第１の一致長とを符号化して、前記第２のデータ格納部に格納する第２の符号化処理と、
前記圧縮対象データにおいて前記第１の語長の語が過去に出現していない場合には、前記第１の語長の語の後ろに出現する符号化前の語を符号化して、前記第２のデータ格納部に格納する処理と、
を、コンピュータに実行させるためのプログラム。
【０１６８】
（付記２）
前記第２の特定処理が、
前記第２の語長を１乃至Ｍ（Ｍは１以上の整数）まで変化させて、複数の第２の一致長を特定する処理を含み、
前記第１の符号化処理及び前記第２の符号化処理における前記第２の一致長は、前記複数の第２の一致長のうち最も長い一致長であり、前記第２の語長は、当該最も長い一致長が特定された際の第２の語長である
付記１記載のプログラム。
【０１６９】
（付記３）
前記第１の一致長と前記第２の一致長とがゼロである場合又は前記第１の一致長がゼロで且つ前記第２の一致長が特定されない場合には、前記第１の語長の語の後ろに出現する符号化前の語を符号化する処理
をさらに含む付記１又は２記載のプログラム。
【０１７０】
（付記４）
符号化前の語を符号化する場合には、直前の１又は複数の語からなる文脈に対して次に出現する語の符号を保持する符号保持部から、前記符号化前の語と前記符号化前の語の直前の１又は複数の語とから前記符号化前の語の符号を特定する
付記１乃至３のいずれか１つ記載のプログラム。
【０１７１】
（付記５）
第１のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第１の語長の語が過去に復元されていたことを検出すると、第２のデータ格納部に格納されており且つ前記第１の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第２の語長に相当する第１の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第３の語長に相当する第２の符号と、前記連結すべき語に相当する第３の符号とを復元する処理と、
復元された前記連結すべき語を、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語と前記連結すべき語とを連結することで得られる第４の語長の語の後ろで復元されている前記第３の語長の語をコピーして、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語が過去に復元されていないことを検出すると、前記第２のデータ格納部に格納されており且つ前記第１の語長の語の符号の後ろに出現する符号を復元して、前記第１のデータ格納部に格納する処理と、
を、コンピュータに実行させるためのプログラム。
【０１７２】
（付記６）
前記連結すべき語の語長は、前記第２の語長から前記第１の語長を減じた数である
付記５記載のプログラム。
【０１７３】
（付記７）
複数の語を含む圧縮対象データを記憶する第１の記憶部と、
予め定められた複数の語長の各々について、当該語長を有する語の、前記圧縮対象データにおける最近出現位置を保持する位置保持部と、
前記位置保持部から、直前に符号化された第１の語長の語の最近出現位置を取得し、前記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語の最近出現位置を取得する位置取得部と、
前記位置取得部により前記第１の語長の語の最近出現位置が取得された場合に、前記第１の語長の語の後ろに出現する符号化前の語と取得された前記最近出現位置における前記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定し、前記位置取得部により前記第３の語長の語の最近出現位置が取得された場合に、前記第３の語長の語の後ろに出現する符号化前の語と特定された前記最近出現位置における前記第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する一致長特定部と、
指定された語長を符号化する第１の符号化部と、
前記複数の語のうち指定された語を符号化する第２の符号化部と、
制御部と、
第２の記憶部と、
を有し、
前記位置取得部が前記第１の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第１の一致長を特定し、前記位置取得部が前記第３の語長の語の最近出現位置を取得すると、前記一致長特定部が前記第２の一致長を特定し、
前記制御部は、
前記第１の一致長より前記第２の一致長が長い場合には、前記第２の語長又は前記第３の語長と前記第２の一致長とを指定して前記第１の符号化部に符号化を行わせ、前記第２の語長の符号化前の語を前記第２の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させ、
前記第１の一致長が前記第２の一致長以上である場合又は前記第２の一致長が特定されない場合、ゼロ又は前記第１の語長と前記第１の一致長とを前記第１の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させ、
前記圧縮対象データにおいて前記第１の語長の語が過去に出現していない場合には、前記第１の語長の語の後ろに出現する符号化前の語を前記第２の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させる
情報処理装置。
【０１７４】
（付記８）
前記位置取得部は、前記第２の語長を１乃至Ｍ（Ｍは１以上の整数）まで変化させて、前記第２の語長の各々について前記第３の語長の語の最近出現位置を取得し、
前記一致長特定部は、前記位置取得部が前記第３の語長の語の最近出現位置を取得すると、対応する前記第２の一致長を特定し、
前記制御部は、
前記第１の一致長より前記第２の一致長のうち最も長い第２の一致長が長い場合には、当該最も長い第２の一致長に対応する第２の語長又は第３の語長と当該最も長い第２の一致長とを指定して前記第１の符号化部に符号化を行わせ、当該最も長い第２の一致長に対応する第２の語長の符号化前の語を前記第２の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させ、
前記第１の一致長が前記第２の一致長のいずれのもの以上である場合又は前記第２の一致長が特定されない場合、ゼロ又は前記第１の語長と前記第１の一致長とを前記第１の符号化部に符号化を行わせ、符号化により生成された符号を前記第２の記憶部に記憶させる
付記７記載の情報処理装置。
【０１７５】
（付記９）
復元された複数の語を記憶する第１の記憶部と、
予め定められた複数の語長の各々について、当該語長を有する語の、前記復元された複数の語における最近出現位置を保持する位置保持部と、
前記位置保持部から、直前に復元された第１の語長の語に当該第１の語長の語の後で復元された第２の語長の語を加えることで得られる第３の語長の語の過去の最近出現位置を取得する位置取得部と、
圧縮データに含まれる複数の符号のうち前記第２の語長を特定するための符号を復元する制御部と、
前記複数の符号のうち文字に相当する符号を復元する第１の復元部と、
前記第２の語長の語の後ろで一致する語の語長を表す一致長に相当する符号を復元する第２の復元部と、
前記位置取得部から出力される前記第３の語長の語の過去の最近出現位置と前記第２の復元部から出力される前記一致長とで特定される語を、前記第１の記憶部からコピーして、前記第１の記憶部に記憶するコピー部と、
を有し、
前記制御部は、
前記位置保持部から、前記第１の語長の語の最近出現位置が取得できない場合には、前記複数の符号のうち前記第１の語長の語に相当する符号の後に出現する符号を、前記第１の符号部により復元させ、前記第１の記憶部に記憶させ、
前記位置保持部から、前記第１の語長の語の最近出現位置が取得されると、前記複数の符号のうち前記第１の語長の語に相当する符号の後に出現し且つ前記第２の語長を特定するための符号を復元し、前記複数の符号のうち前記第１の語長の語に相当する符号の後に出現する前記一致長に相当する符号を前記第２の復元部に復元させ、復元された前記第２の語長及び前記一致長に応じて前記位置取得部及び前記コピー部を動作させる
情報処理装置。
【０１７６】
（付記１０）
第１のデータ格納部に格納されており且つ複数の語を含む圧縮対象データにおいて直前に符号化された第１の語長の語が過去に出現していたことを検出すると、前記第１の語長の語の後ろに出現する符号化前の語と過去に出現した前記第１の語長の語の後ろに出現する符号化済みの語とが一致する第１の一致長を特定する第１の特定処理と、
前記第１の語長の語に当該第１の語長の語の後ろに出現する第２の語長の符号化前の語を加えることで得られる第３の語長の語が前記圧縮対象データにおいて過去に出現した位置を探索して、前記第３の語長の語の過去の出現位置が検出されると、前記第３の語長の語の後ろに出現する符号化前の語と過去に出現した前記第３の語長の語の後ろに出現する符号化済みの語とが一致する第２の一致長を特定する第２の特定処理と、
前記第１の一致長より前記第２の一致長が長い場合には、前記第２の語長又は前記第３の語長と前記第２の一致長と前記第２の語長の符号化前の語とを符号化して、第２のデータ格納部に格納する第１の符号化処理と、
前記第１の一致長が前記第２の一致長以上である場合又は前記第２の一致長が特定されない場合には、ゼロ又は前記第１の語長と前記第１の一致長とを符号化して、前記第２のデータ格納部に格納する第２の符号化処理と、
前記圧縮対象データにおいて前記第１の語長の語が過去に出現していない場合には、前記第１の語長の語の後ろに出現する符号化前の語を符号化して、前記第２のデータ格納部に格納する処理と、
を含み、コンピュータにより実行される圧縮方法。
【０１７７】
（付記１１）
第１のデータ格納部に格納されており且つ復元された複数の語において直前に復元された第１の語長の語が過去に復元されていたことを検出すると、第２のデータ格納部に格納されており且つ前記第１の語長の語の後ろに出現し且つ連結すべき語の語長を特定するための第２の語長に相当する第１の符号と、前記連結すべき語の後ろで一致する語の一致長を表す第３の語長に相当する第２の符号と、前記連結すべき語に相当する第３の符号とを復元する処理と、
復元された前記連結すべき語を、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語と前記連結すべき語とを連結することで得られる第４の語長の語の後ろで復元されている前記第３の語長の語をコピーして、前記第１のデータ格納部に格納する処理と、
前記複数の語において、前記第１の語長の語が過去に復元されていないことを検出すると、前記第２のデータ格納部に格納されており且つ前記第１の語長の語の符号の後ろに出現する符号を復元して、前記第１のデータ格納部に格納する処理と、
を含み、コンピュータにより実行される復元方法。
【符号の説明】
【０１７８】
１１  元データ格納部
１２  入力部
１３  入力バッファ
１４  位置探索部
１５  符号化制御部
１６  第１符号化部
１７  第２符号化部
１８  出力バッファ
１９  出力部
２０  圧縮データ格納部
１４１  位置保持部
１４２  位置取得部
１４３  一致長取得部
１６１  ｍ符号化部
１６２  ｌ符号化部
２１  圧縮データ格納部
２２  入力部
２３  復元制御部
２４  位置保持部
２５  位置取得部
２６  一致長復元部
２７  文字復元部
２８  コピー部
２９  出力バッファ
３０  出力部
３１  元データ格納部
【図１】
2013211643.tif 000003
【図２】
2013211643.tif 000004
【図３】
2013211643.tif 000005
【図４】
2013211643.tif 000006
【図５】
2013211643.tif 000007
【図６】
2013211643.tif 000008
【図７】
2013211643.tif 000009
【図８】
2013211643.tif 000010
【図９】
2013211643.tif 000011
【図１０】
2013211643.tif 000012
【図１１】
2013211643.tif 000013
【図１２】
2013211643.tif 000014
【図１３】
2013211643.tif 000015
【図１４】
2013211643.tif 000016
【図１５】
2013211643.tif 000017
【図１６】
2013211643.tif 000018
【図１７】
2013211643.tif 000019
【図１８】
2013211643.tif 000020
【図１９】
2013211643.tif 000021
【図２０】
2013211643.tif 000022
【図２１】
2013211643.tif 000023
【図２２】
2013211643.tif 000024
【図２３】
2013211643.tif 000025
【図２４】
2013211643.tif 000026
【図２５】
2013211643.tif 000027
【図２６】
2013211643.tif 000028
【図２７】
2013211643.tif 000029
【図２８】
2013211643.tif 000030
【図２９】
2013211643.tif 000031