(57)【特許請求の範囲】
【請求項１】
コンピュータに、
メモリに第１記憶領域および第２記憶領域を設定し、
圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較し、
前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成し、
前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較することであって、前記圧縮対象データは前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記第２記憶領域に移動され、
前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納する、
処理を実行させることを特徴とする圧縮プログラム。
【請求項２】
前記圧縮対象データと前記第１記憶領域内のデータとの間の前記所定の一致性は、前記圧縮対象データと前記第１記憶領域内のデータ間での最長一致データのデータサイズが所定サイズ以上である、
ことを特徴とする請求項１に記載の圧縮プログラム。
【請求項３】
前記コンピュータに、さらに、
前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の一致性が検出される場合、前記第２記憶領域内のデータに基づいて前記圧縮対象データのための第２圧縮符号を生成する、
処理を実行させることを特徴とする請求項１または２に記載の圧縮プログラム。
【請求項４】
前記第１圧縮符号と前記第２圧縮符号は、同種の符号でありかつ前記圧縮対象データと前記第１記憶領域内のデータとの比較および前記圧縮対象データと前記第２記憶領域内のデータとの比較のいずれかに基づいて生成されたことを示す識別子を含み、
前記コンピュータに、さらに、
前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記第１圧縮符号および前記第２圧縮符号の符号化処理と異なる種類の符号化処理によって前記圧縮対象データのための第３圧縮符号を生成する、
処理を実行させることを特徴とする請求項３に記載の圧縮プログラム。
【請求項５】
前記第２記憶領域は、前記メモリに第１サイズで設定され、
前記圧縮対象データは、前記第１記憶領域内の位置を示す位置情報に従って前記第１記憶領域に格納され、前記位置情報は前記第１記憶領域に格納された前記圧縮対象データのサイズに応じて更新され、
前記コンピュータに、さらに、
前記位置情報によって示される前記第１記憶領域内のデータの合計サイズが所定サイズを超える場合に、前記第２記憶領域のサイズを前記第１サイズから前記第１サイズよりも小さい第２サイズに変更する、
処理を実行させることを特徴とする請求項１〜４のいずれか１項に記載の圧縮プログラム。
【請求項６】
前記第２記憶領域に記憶されたデータのうち、最先で記憶されたデータを前記第２記憶領域から削除する、
ことを特徴とする請求項５に記載の圧縮プログラム。
【請求項７】
前記第１記憶領域は、前記メモリに第３サイズで設定され、
前記コンピュータに、さらに、
前記第２記憶領域のサイズが前記第１サイズから前記第２サイズに変更される場合、前記第１記憶領域のサイズを前記第３サイズから前記第３サイズよりも大きい第４サイズに変更する、
処理を実行させることを特徴とする請求項５または６に記載の圧縮プログラム。
【請求項８】
前記第１記憶領域は、前記メモリに第３サイズで設定され、
前記圧縮対象データは、前記第１記憶領域内の位置を示す位置情報に従って前記第１記憶領域に格納され、
前記コンピュータに、さらに、
前記格納された圧縮対象データのサイズに応じて前記位置情報を更新し、
前記第３サイズ内に前記圧縮対象データが格納されるよう前記位置情報の更新を制御し、
前記圧縮対象データと前記所定の一致性が検出された前記第１記憶領域内のデータの検出回数をカウントし、
前記位置情報に従って前記検出回数が所定回数を超えている前記第１記憶領域内の格納済みデータに前記圧縮対象データが上書きされる場合、前記圧縮対象データに続いて前記格納済みデータを前記第１記憶領域内に再登録する、
処理を実行させることを特徴とする請求項１〜６のいずれか１項に記載の圧縮プログラム。
【請求項９】
メモリと、
前記メモリに第１記憶領域および第２記憶領域を設定する制御部と、
圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較する第１参照部と、
前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成する第１生成部と、
前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較する第２参照部と、
前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記圧縮対象データを前記第２記憶領域に移動する第１更新部と、
前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納する第２更新部と、
を含むことを特徴とする圧縮装置。
【請求項１０】
コンピュータに、
圧縮ファイルから圧縮データを順次読み出すことであって、
前記圧縮ファイルは、
第１メモリに第１記憶領域および第２記憶領域を設定し、
圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較し、
前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成し、
前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較することであって、前記圧縮対象データは前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記第２記憶領域に移動され、
前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納し且つ前記第２記憶領域内のデータに基づいて前記圧縮対象データのための第２圧縮符号を生成することであって、前記第１圧縮符号と前記第２圧縮符号は、同種の符号でありかつ前記圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとの比較および前記圧縮対象データと前記第２記憶領域内のデータとの比較のいずれかに基づいて生成されたことを示す識別子を含み、
前記圧縮対象データと前記第２記憶領域内のデータとの比較に基づいて前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の第２一致性が検出されない場合、前記第１圧縮符号と前記第２圧縮符号と異なる種類の符号化処理によって前記圧縮対象データのための第３圧縮符号を生成し、
前記第１圧縮符号、前記第２圧縮符号および前記第３圧縮符号に基づいて生成されたものであり、
前記読み出した圧縮データが前記第１圧縮符号であると判定される場合、前記第１圧縮符号に応じた第２メモリの第４記憶領域内のデータに基づいて第１伸張データを生成し、
前記読み出した圧縮データが前記第２圧縮符号であると判定される場合、前記第２圧縮符号に応じた前記第２メモリの第５記憶領域内のデータに基づいて第２伸張データを生成し、
前記第２伸張データが生成される場合、前記第２圧縮符号および前記第２伸張データに応じて前記第４記憶領域を更新し、
前記読み出した圧縮データが前記第３圧縮符号であると判定される場合、前記符号化処理に対応する復号処理によって前記読み出した圧縮データから第３伸張データを生成し、
前記第３伸張データを前記第４記憶領域に格納する、
処理を実行させることを特徴とする伸張プログラム。
【請求項１１】
第１メモリと、
圧縮ファイルから圧縮データを順次読み出す制御部であって、前記圧縮ファイルは、
第２メモリに第１記憶領域および第２記憶領域を設定し、
圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較し、
前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成し、
前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較することであって、前記圧縮対象データは前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記第２記憶領域に移動され、
前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納し且つ前記第２記憶領域内のデータに基づいて前記圧縮対象データのための第２圧縮符号を生成することであって、前記第１圧縮符号と前記第２圧縮符号は、同種の符号でありかつ前記圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとの比較および前記圧縮対象データと前記第２記憶領域内のデータとの比較のいずれかに基づいて生成されたことを示す識別子を含み、
前記圧縮対象データと前記第２記憶領域内のデータとの比較に基づいて前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の第２一致性が検出されない場合、前記第１圧縮符号と前記第２圧縮符号と異なる種類の符号化処理によって前記圧縮対象データのための第３圧縮符号を生成し、
前記第１圧縮符号、前記第２圧縮符号および前記第３圧縮符号に基づいて生成されたものであり、
前記読み出した圧縮データが前記第１圧縮符号であると判定される場合、前記第１圧縮符号に応じた前記第１メモリの第４記憶領域内のデータに基づいて第１伸張データを生成する第１生成部と、
前記読み出した圧縮データが前記第２圧縮符号であると判定される場合、前記第２圧縮符号に応じた前記第１メモリの第５記憶領域内のデータに基づいて第２伸張データを生成する第２生成部と、
前記第２伸張データが生成される場合、前記第２圧縮符号および前記第２伸張データに応じて前記第４記憶領域を更新する更新部と、
前記読み出した圧縮データが前記第３圧縮符号であると判定される場合、前記符号化処理に対応する復号処理によって前記読み出した圧縮データから第３伸張データを生成する第３生成部と、を含み、
前記制御部によって前記第３伸張データが前記第４記憶領域に格納されることを特徴とする伸張装置。
【請求項１２】
第１メモリと、
前記第１メモリに第１記憶領域および第２記憶領域を設定する第１制御部と、
圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較する第１参照部と、
前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成する第１生成部と、
前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較する第２参照部と、
前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記圧縮対象データを前記第２記憶領域に移動する第１更新部と、
前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納する第２更新部と、
前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の一致性が検出される場合、前記第２記憶領域内のデータに基づいて前記圧縮対象データのための第２圧縮符号を生成する第２生成部であって、前記第１圧縮符号と前記第２圧縮符号は、同種の符号でありかつ前記圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとの比較および前記圧縮対象データと前記第２記憶領域内のデータとの比較のいずれかに基づいて生成されたことを示す識別子を含み、
前記圧縮対象データと前記第２記憶領域内のデータとの比較に基づいて前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の第２一致性が検出されない場合、前記第１圧縮符号と前記第２圧縮符号と異なる種類の符号化処理によって前記圧縮対象データのための第３圧縮符号を生成する第３生成部と、を含み、
前記制御部によって前記第１圧縮符号、前記第２圧縮符号および前記第３圧縮符号に基づいて圧縮ファイルが生成される、圧縮装置と、
第２メモリと、
圧縮ファイルから圧縮データを順次読み出す第２制御部と、
前記読み出した圧縮データが前記第１圧縮符号であると判定される場合、前記第１圧縮符号に応じた前記第１メモリの第４記憶領域内のデータに基づいて第１伸張データを生成する第４生成部と、
前記読み出した圧縮データが前記第２圧縮符号であると判定される場合、前記第２圧縮符号に応じた前記第１メモリの第５記憶領域内のデータに基づいて第２伸張データを生成する第５生成部と、
前記第２伸張データが生成される場合、前記第２圧縮符号および前記第２伸張データに応じて前記第４記憶領域を更新する第３更新部と、
前記読み出した圧縮データが前記第３圧縮符号であると判定される場合、前記符号化処理に対応する復号処理によって前記読み出した圧縮データから第３伸張データを生成する第６生成部と、を含み、
前記第２制御部によって前記第３伸張データが前記第４記憶領域に格納される、伸張装置と、
を含むことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの圧縮技術または伸張技術の少なくとも一方に関する。
【背景技術】
【０００２】
ＬＺ７７と呼ばれる圧縮アルゴリズムがあり、ＺＩＰなどの圧縮ファイルフォーマットに採用されている。【０００３】
ＬＺ７７では、圧縮対象ファイルの先頭から順次圧縮処理が行なわれる。ＬＺ７７においては、データ参照領域（スライド窓などと呼ばれる）が設定され、圧縮対象ファイルのうち、圧縮処理が行なわれたデータは、順次スライド窓に格納される。スライド窓のサイズは予め設定されており、スライド窓内に格納されるデータがスライド窓のサイズを超えると、スライド窓内に先に格納されたデータを更新しつつデータが格納される。【０００４】
ＬＺ７７において順次行なわれる圧縮処理は、スライド窓内に含まれるデータのうち、圧縮対象ファイル内で圧縮処理の処理対象となるデータと最も長く一致するデータ列（最長一致データ列）に基づいて生成される圧縮符号が用いられる。圧縮符号は、スライド窓の最長一致データ列の一致長およびスライド窓内の位置を組み合わせた情報である。【０００５】
ＬＺ７７によれば、最長一致データ列の一致長が長いほど、多くのデータが１つの圧縮符号（一致長と位置との組み合わせ）により表現されるので、圧縮率が向上する。一致長の長い最長一致データ列が多く抽出されれば圧縮率が向上するので、スライド窓のサイズが大きくなれば圧縮率が向上する傾向にある。これは、より多くのデータから処理対象のデータと一致するデータを探し当てることになるため、一致長が長いデータ列を特定する確率が向上するためである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平５−２４１７７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、圧縮率を向上させるためにスライド窓のサイズを大きくすると、処理対象のデータとスライド窓内に格納されたデータとの照合回数が増大するため、圧縮対象ファイルの圧縮に要する時間が増大する。【０００８】
本発明の一側面において、圧縮に要する処理時間を低減させることを目的とする。
【課題を解決するための手段】
【０００９】
一態様によれば、圧縮プログラムは、コンピュータに、メモリに第１記憶領域および第２記憶領域を設定し、圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較し、前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成し、前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較することであって、前記圧縮対象データは前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記第２記憶領域に移動され、前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納する、処理を実行させる。 
【００１０】
一態様によれば、圧縮装置は、メモリと、前記メモリに第１記憶領域および第２記憶領域を設定する制御部と、圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較する第１参照部と、前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成する第１生成部と、前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較する第２参照部と、前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記圧縮対象データを前記第２記憶領域に移動する第１更新部と、前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納する第２更新部と、を含む。
【００１１】
一態様によれば、伸張プログラムは、圧縮ファイルから圧縮データを順次読み出し、前記読み出した圧縮データが第１圧縮符号であると判定される場合、前記第１圧縮符号に応じた第２メモリの第４記憶領域内のデータに基づいて第１伸張データを生成し、前記読み出した圧縮データが第２圧縮符号であると判定される場合、前記第２圧縮符号に応じた前記第２メモリの第５記憶領域内のデータに基づいて第２伸張データを生成し、前記第２伸張データが生成される場合、前記第２圧縮符号および前記第２伸張データに応じて前記第４記憶領域を更新し、前記読み出した圧縮データが第３圧縮符号であると判定される場合、前記符号化処理に対応する復号処理によって前記読み出した圧縮データから第３伸張データを生成し、前記第３伸張データを前記第４記憶領域に格納する、処理を実行させる。前記圧縮ファイルは、第１メモリに第１記憶領域および第２記憶領域を設定し、圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較し、前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための前記第１圧縮符号を生成し、前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較することであって、前記圧縮対象データは前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記第２記憶領域に移動され、前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納し且つ前記第２記憶領域内のデータに基づいて前記圧縮対象データのための前記第２圧縮符号を生成することであって、前記第１圧縮符号と前記第２圧縮符号は、同種の符号でありかつ前記圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとの比較および前記圧縮対象データと前記第２記憶領域内のデータとの比較のいずれかに基づいて生成されたことを示す識別子を含み、前記圧縮対象データと前記第２記憶領域内のデータとの比較に基づいて前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の第２一致性が検出されない場合、前記第１圧縮符号と前記第２圧縮符号と異なる種類の符号化処理によって前記圧縮対象データのための前記第３圧縮符号を生成し、前記第１圧縮符号、前記第２圧縮符号および前記第３圧縮符号に基づいて生成されたものである。
【００１２】
一態様によれば、伸張装置は、第１メモリと、圧縮ファイルから圧縮データを順次読み出す制御部と、前記読み出した圧縮データが第１圧縮符号であると判定される場合、前記第１圧縮符号に応じた前記第１メモリの第４記憶領域内のデータに基づいて第１伸張データを生成する第１生成部と、前記読み出した圧縮データが第２圧縮符号であると判定される場合、前記第２圧縮符号に応じた前記第１メモリの第５記憶領域内のデータに基づいて第２伸張データを生成する第２生成部と、前記第２伸張データが生成される場合、前記第２圧縮符号および前記第２伸張データに応じて前記第４記憶領域を更新する更新部と、前記読み出した圧縮データが第３圧縮符号であると判定される場合、前記符号化処理に対応する復号処理によって前記読み出した圧縮データから第３伸張データを生成する第３生成部と、を含み、前記制御部によって前記第３伸張データが前記第４記憶領域に格納される。前記圧縮ファイルは、第２メモリに第１記憶領域および第２記憶領域を設定し、圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較し、前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための前記第１圧縮符号を生成し、前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較することであって、前記圧縮対象データは前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記第２記憶領域に移動され、前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納し且つ前記第２記憶領域内のデータに基づいて前記圧縮対象データのための前記第２圧縮符号を生成することであって、前記第１圧縮符号と前記第２圧縮符号は、同種の符号でありかつ前記圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとの比較および前記圧縮対象データと前記第２記憶領域内のデータとの比較のいずれかに基づいて生成されたことを示す識別子を含み、前記圧縮対象データと前記第２記憶領域内のデータとの比較に基づいて前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の第２一致性が検出されない場合、前記第１圧縮符号と前記第２圧縮符号と異なる種類の符号化処理によって前記圧縮対象データのための前記第３圧縮符号を生成し、前記第１圧縮符号、前記第２圧縮符号および前記第３圧縮符号に基づいて生成されたものである。
【００１３】
一態様によれば、システムは、圧縮装置および伸張装置を含む。その圧縮装置は、第１メモリと、前記第１メモリに第１記憶領域および第２記憶領域を設定する第１制御部と、圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとを比較する第１参照部と、前記圧縮対象データと前記第１記憶領域内のデータとの間に所定の一致性が検出される場合、前記第１記憶領域内のデータに基づいて前記圧縮対象データのための第１圧縮符号を生成する第１生成部と、前記圧縮対象データと前記第１記憶領域内のデータとの間に前記所定の一致性が検出されない場合、前記圧縮対象データと前記第２記憶領域内のデータとを比較する第２参照部と、前記圧縮対象データと前記第１記憶領域内のデータとの比較の後に前記圧縮対象データを前記第２記憶領域に移動する第１更新部と、前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記圧縮対象データを前記第１記憶領域に格納する第２更新部と、前記圧縮対象データと前記第２記憶領域内のデータとの間に所定の一致性が検出される場合、前記第２記憶領域内のデータに基づいて前記圧縮対象データのための第２圧縮符号を生成する第２生成部であって、前記第１圧縮符号と前記第２圧縮符号は、同種の符号でありかつ前記圧縮対象ファイル内の圧縮対象データと前記第１記憶領域内のデータとの比較および前記圧縮対象データと前記第２記憶領域内のデータとの比較のいずれかに基づいて生成されたことを示す識別子を含み、前記圧縮対象データと前記第２記憶領域内のデータとの比較に基づいて前記圧縮対象データと前記第２記憶領域内のデータとの間に前記所定の第２一致性が検出されない場合、前記第１圧縮符号と前記第２圧縮符号と異なる種類の符号化処理によって前記圧縮対象データのための第３圧縮符号を生成する第３生成部とを含み、前記制御部によって前記第１圧縮符号、前記第２圧縮符号および前記第３圧縮符号に基づいて圧縮ファイルが生成される。また、伸張装置は、第２メモリと、圧縮ファイルから圧縮データを順次読み出す第２制御部と、前記読み出した圧縮データが前記第１圧縮符号であると判定される場合、前記第１圧縮符号に応じた前記第１メモリの第４記憶領域内のデータに基づいて第１伸張データを生成する第４生成部と、前記読み出した圧縮データが前記第２圧縮符号であると判定される場合、前記第２圧縮符号に応じた前記第１メモリの第５記憶領域内のデータに基づいて第２伸張データを生成する第５生成部と、前記第２伸張データが生成される場合、前記第２圧縮符号および前記第２伸張データに応じて前記第４記憶領域を更新する第３更新部と、前記読み出した圧縮データが前記第３圧縮符号であると判定される場合、前記符号化処理に対応する復号処理によって前記読み出した圧縮データから第３伸張データを生成する第６生成部と、を含み、前記第２制御部によって前記第３伸張データが前記第４記憶領域に格納される。
【発明の効果】
【００１５】
一側面によれば、圧縮処理に要する処理時間を低減させることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、圧縮処理の流れの一例を示す。
【図２】図２は、伸張処理の流れの一例を示す。
【図３】図３は、機能構成例を示す。
【図４】図４は、位置情報テーブルＴ１の例を示す。
【図５】図５は、圧縮処理の全体フローチャート例を示す。
【図６】図６は、記憶領域Ａ３の参照処理のフローチャート例を示す。
【図７】図７は、記憶領域Ａ２の参照処理のフローチャート例を示す。
【図８】図８は、記憶領域Ａ３の更新処理のフローチャート例を示す。
【図９】図９は、記憶領域Ａ２の更新処理のフローチャート例を示す。
【図１０】図１０は、圧縮データの生成・書込みのフローチャート例を示す。
【図１１】図１１は、圧縮データのフォーマット例を示す。
【図１２】図１２は、位置情報テーブルＴ２の例を示す。
【図１３】図１３は、伸張処理のフローチャート例を示す。
【図１４】図１４は、記憶領域Ｂ３の参照処理のフローチャート例を示す。
【図１５】図１５は、記憶領域Ｂ２の参照処理のフローチャート例を示す。
【図１６】図１６は、記憶領域Ｂ３の更新処理のフローチャート例を示す。
【図１７】図１７は、記憶領域Ｂ２の更新処理のフローチャート例を示す。
【図１８】図１８は、記憶領域Ｂ２の参照処理のフローチャート例を示す。
【図１９】図１９は、コンピュータ１のハードウェア構成例を示す。
【図２０】図２０は、コンピュータ１で動作するプログラムの構成例を示す。
【図２１】図２１は、実施形態のシステムにおける装置の構成例を示す。
【図２２】図２２は、抽出回数カウントの例を示す。
【図２３】図２３は、記憶領域Ａ２および記憶領域Ａ３のサイズ制御の例を示す。
【発明を実施するための形態】
【００１７】
以下に、実施の形態について説明する。
【００１８】
図１は、圧縮処理の流れの一例を示す。圧縮処理のワークエリアとして、メモリに記憶領域Ａ１、記憶領域Ａ２および記憶領域Ａ３が設けられる。記憶領域Ａ１にロードされた圧縮対象のファイルＦ１から順次データが読み出され、読み出された処理対象のデータは順次圧縮データに変換される。得られた圧縮データは順次記憶領域Ａ４に格納され、記憶領域Ａ４に格納された圧縮データに基づき、圧縮ファイルＦ２が生成される。図１に示す圧縮処理では、ファイルＦ１から処理対象のデータが読み出されるごとに、記憶領域Ａ３の参照結果に応じた圧縮データの生成、記憶領域Ａ２の参照結果に応じた記憶領域Ａ３への更新、記憶領域Ａ２への更新のいずれか少なくとも１つが行なわれる。
【００１９】
圧縮データの生成は、上述の通り、記憶領域Ａ１内の処理対象のデータについての記憶領域Ａ３内への参照処理の結果か、記憶領域Ａ２への参照処理の結果に基づいて行われる。処理対象のデータと、記憶領域Ａ３内のデータ列との照合（図１に示す「照合１」）により、処理対象のデータと最も長く一致するデータ列（最長一致データ列）が抽出される。照合１により所定の長さＬｍｉｎ以上の長さの最長一致データ列が得られると、最長一致データ列の長さと記憶領域Ａ３における位置とに基づいて、圧縮符号が生成される。また、照合１による最長一致データ列の長さが所定の長さＬｍｉｎよりも短い場合には、処理対象のデータと、記憶領域Ａ２内のデータ列との照合（図１に示す「照合２」）により、最長一致データ列が抽出される。照合２により得られる最長一致データ列が所定の長さＬｍｉｎ以上の長さの一致長を有する場合には、最長一致データ列の長さと記憶領域Ａ２における位置とに基づいて、圧縮符号が生成される。照合２により得られる最長一致データ列の一致長が所定の長さＬｍｉｎよりも短い場合には、圧縮符号が生成されずに、処理対象のデータに対してハフマン符号化を行ない、得られたハフマン符号が圧縮データとなる。この場合にハフマン符号化を行なわずに、処理対象のデータそのままを用いて圧縮符号としてもよい。さらには、本実施例以外の圧縮処理が用いられてもよい。照合１でも照合２でも所定長Ｌｍｉｎ以上の一致長の最長一致データ列が得られなかった場合の圧縮データの生成が、いずれの方法で行なわれるかは予め定められ、その方法を判別可能な情報が、例えば圧縮ファイルのヘッダに格納される。
【００２０】
生成された圧縮符号は、記憶領域Ａ４に書き込まれる（図１に示す「書込み」）。所定の長さＬｍｉｎは本実施例の圧縮処理により圧縮符号を生成するか否かの閾値として設定される長さであり、少なくとも１バイト以上である。所定の長さＬｍｉｎは、例えばＺＩＰのフォーマットに合わせると、３バイトと設定される。
【００２１】
また、圧縮データは、符号の形式を示す識別子を含む。例えば、照合１でも照合２でも所定長Ｌｍｉｎ以上の一致長の最長一致データ列が得られなかった場合の圧縮データは、処理対象のデータに対応するハフマン符号（または処理対象のデータそのもの）であることを示す識別子（例えば、「０」）などを含む。また、例えば、照合１または照合２により得られた最長一致データ長が所定の長さＬｍｉｎを超える場合には、圧縮データが本実施例の圧縮処理を用いて得られた圧縮符号であることを示す識別子（例えば「１」）を含む。識別子に「１」を含む圧縮符号について、例えば、照合１により得られた最長一致データ列に基づく圧縮符号を示す識別子は「１１」とし、照合２により得られた最長一致データ列に基づく圧縮符号を示す識別子は「１０」などとする。例えば、圧縮データの先頭に識別子を含み、圧縮データの先頭ビットが「０」であれば、照合１でも照合２でも所定長Ｌｍｉｎ以上の一致長の最長一致データ列が得られなかった場合の圧縮データであることが判別される。また、圧縮データの先頭ビットが「１」であれば、最長一致データ列に基づき符号化された圧縮符号を含むことが判別され、さらにその後続のビットにより、照合１による最長一致データ列であるか照合２による最長一致データ列であるかが示される。後続のビットが「０」であれば、照合２により得られる最長一致データ列に基づく圧縮符号であることが判別され、「１」であれば、照合１により得られる最長一致データ列に基づく圧縮符号であることが判別される。
【００２２】
記憶領域Ａ３は、処理対象のデータおよび記憶領域Ａ２に格納されたデータに基づいて、更新される。例えば、照合２により抽出される最長一致データ列は、記憶領域Ａ３に格納される（図１に示す「更新１」）。
【００２３】
記憶領域Ａ３は、例えば、データサイズが定められた（例えば、数キロバイト〜数十キロバイト程度）記憶領域である。例えば、定められたデータサイズ以上のデータが格納される場合には、記憶領域Ａ３の先頭に格納された古いデータの上に、新しいデータが格納される。さらに、データの格納に応じて論理的な先頭が順次更新される。記憶領域Ａ３内に格納されたデータは、例えば、データの格納に応じてスライドされる先頭の書込み位置からの相対的なアドレスにより示される。論理的な先頭の書き込み位置からの相対的なアドレスにより記憶領域Ａ３における格納データ間での格納順序の先後が示される。
【００２４】
上述の記憶領域Ａ３の更新１は、例えば、照合１による最長一致データ列の長さが所定の長さＬｍｉｎよりも短いことにより、処理対象のデータに対応する圧縮符号の生成が行われなかった場合に行われることとしてもよい。
【００２５】
記憶領域Ａ２は、ファイルＦ１から順次読み出される処理対象のデータに基づいて更新される。例えば、記憶領域Ａ１の処理対象のデータが記憶領域Ａ２に書き込まれる（更新２）。記憶領域Ａ２は、例えば、データサイズが定められた（例えば数キロバイト〜数十キロバイト程度）記憶領域である。例えば、記憶領域Ａ２に定められたデータサイズ以上のデータが格納される場合には、記憶領域Ａ２の先頭に格納された古いデータの上に、新しいデータが格納される。
【００２６】
上述の更新２は、例えば、照合２による最長一致データ列の長さが所定の長さＬｍｉｎよりも短いことにより、記憶領域Ａ３の更新が行われなかった場合に行われることとしてもよい。さらには、更新２は、照合１による最長一致データ列および照合２による最長一致データ列のいずれの一致長も所定の長さＬｍｉｎよりも短い場合に行なわれることとしてもよい。
【００２７】
図１に示すファイルＦ１の例では、「・・・１ｓｔ  ｈｏｒｓｅ・・・２ｎｄ  ｈｏｒｓｅ・・・３ｒｄ  ｈｏｒｓｅ・・・」という文字列が含まれる（「・・・」は不特定な文字列である）。
【００２８】
「１ｓｔ  ｈｏｒｓｅ・・・」の「ｈ」以降が処理対象のデータである場合には、記憶領域Ａ３内で「ｈｏｒｓｅ・・・」の最長一致データ列が探索される。図１に示す通り、記憶領域Ａ３にはデータが格納されていない状態なので、そもそも先頭のデータである「ｈ」と一致するデータが存在しない。すなわち、照合１による最長一致データ列は所定の長さＬｍｉｎよりも短い。さらに、記憶領域Ａ２内で「ｈｏｒｓｅ・・・」の最長一致データ列が探索される。記憶領域Ａ２においても「ｈ」と一致するデータが含まれないので、照合２による最長一致データ列は所定の長さＬｍｉｎよりも短い。
【００２９】
図１の例において、「１ｓｔ  ｈｏｒｓｅ・・・」の「ｈ」以降が処理対象のデータである場合には、照合１でも照合２でも所定の長さＬｍｉｎ以上の一致長の最長一致データ列が得られないため、処理対象のデータの先頭データ「ｈ」のハフマン符号化が行なわれる。上述の通り、ハフマン符号化の代わりに、他の圧縮処理が用いられてもよいし、文字データ「ｈ」がそのまま用いられてもよい。先頭データに基づき得られる圧縮データｄ１は、記憶領域Ａ４に書き込まれる。
【００３０】
また、照合２による最長一致データ列が所定の長さよりも短いため、記憶領域Ａ３の更新（更新１）は行なわれない。照合１でも照合２でも所定の長さＬｍｉｎ以上の一致長の最長一致データ列が得られないので、記憶領域Ａ２が更新される（更新２）。更新２では、処理対象のデータの先頭データ「ｈ」が記憶領域Ａ２に格納される。
【００３１】
次の処理対象のデータは「ｏ・・・」となる。「ｏｒｓｅ・・・」の場合も、「ｈｏｒｓｅ・・・」同様に「ｏ」のハフマン符号化と、記憶領域Ａ２への「ｏ」の格納が行なわれる。
【００３２】
「２ｎｄ  ｈｏｒｓｅ・・・」の「ｈ」以降が処理対象のデータである場合には、記憶領域Ａ３内で「ｈｏｒｓｅ・・・」の最長一致データ列が探索される。図１に示す通り、記憶領域Ａ３にはデータが格納されていない状態なので、そもそも先頭のデータである「ｈ」と一致するデータが存在しない。すなわち、照合１による最長一致データ列は所定の長さＬｍｉｎよりも短い。
【００３３】
さらに、記憶領域Ａ２内で「ｈｏｒｓｅ・・・」の最長一致データ列が探索される（照合２）。記憶領域Ａ２内には既に「・・・１ｓｔ  ｈｏｒｓｅ・・・」が格納されている。例えば、まず記憶領域Ａ２に対して「ｈ」の探索が行われ、探索により得られた記憶領域Ａ２内の「ｈ」の箇所から「ｏ」、「ｒ」、「ｓ」、「ｅ」・・・と連続しているか否か、順次照合される。図１の例では、処理対象のデータ「ｈｏｒｓｅ・・・」と記憶領域Ａ２内の「・・・１ｓｔ  ｈｏｒｓｅ・・・」の「ｈｏｒｓｅ」が一致する。一致した「ｈｏｒｓｅ」が最長一致データ列であり、一致長が所定の長さＬｍｉｎ以上であれば、最長一致データ列「ｈｏｒｓｅ」の記憶領域Ａ２内のアドレスおよび一致長に基づき圧縮符号が生成される。生成された圧縮符号を含む圧縮データｄ２は記憶領域Ａ４に格納される。
【００３４】
また、照合２により得られた最長一致データ列の一致長が所定の長さＬｍｉｎ以上であるので、最長一致データ列に基づいて記憶領域Ａ３の更新が行なわれる（更新１）。すなわち、最長一致データ列「ｈｏｒｓｅ」が記憶領域Ａ３に格納される。
【００３５】
「３ｒｄ  ｈｏｒｓｅ・・・」の「ｈ」以降が処理対象のデータである場合には、記憶領域Ａ３内で「ｈｏｒｓｅ・・・」の最長一致データ列が探索される（照合１）。図１に示す通り、記憶領域Ａ３内には既に「ｈｏｒｓｅ」が格納されている。例えば、まず記憶領域Ａ３に対して「ｈ」の探索が行われ、探索により得られた記憶領域Ａ３内の「ｈ」の箇所から「ｏ」、「ｒ」、「ｓ」、「ｅ」・・・と連続しているか否か、順次照合される。図１の例では、照合１によりデータ列「ｈｏｒｓｅ」が一致する。一致した「ｈｏｒｓｅ」が最長一致データ列であり、一致長が所定の長さＬｍｉｎ以上であれば、最長一致データ列「ｈｏｒｓｅ」の記憶領域Ａ３内のアドレスおよび一致長に基づき圧縮符号が生成される。生成された圧縮符号を含む圧縮データｄ３は、記憶領域Ａ４に格納される。
【００３６】
照合１により得られた最長一致データ列が所定長の長さＬｍｉｎ以上なので、例えば、照合２、更新１および更新２を行なわずに、後続のデータについて処理が行なわれる。照合２、更新１および更新２のうち、更新２のみが行なわれることとしてもよい。
【００３７】
図１に示す圧縮処理によれば、記憶領域Ａ３には、ファイルＦ１内に複数回出現するデータ列が格納される。すなわち、圧縮符号は、ファイルＦ１内に複数回出現したデータ列が格納された記憶領域Ａ３を参照した結果に応じて生成される。ファイルＦ１内で同じデータが多用されるならば、記憶領域Ａ３に格納されるデータはファイルＦ１で多用されるデータである可能性が高い。つまり、記憶領域Ａ３に格納されたデータとの照合により、通常のＬＺ７７のスライド窓よりも一致データが見つかる可能性が高い。さらに、記憶領域Ａ３には記憶領域Ａ２内の最長一致データ列が格納されるため、ファイルＦ１内で繰り返されるデータの長さが長ければ、記憶領域Ａ３においても、データ長が長いデータ列が最長一致データ列として抽出される可能性が高い。これにより最長一致データ列を用いた圧縮の特性が維持される。そのため、ＬＺ７７で使用するスライド窓よりも記憶領域Ａ３のサイズを小さくしても圧縮率が維持され、かつ処理対象のデータとの照合を行なうデータのサイズが小さく済むため、圧縮の速度向上が見込まれる。 
【００３８】
また、ファイルＦ１に対して１回のデータ読み出しで圧縮処理が行なわれる。そのため、圧縮辞書を生成してから圧縮辞書に基づいて圧縮処理を行なうよりも、各記憶領域が設けられたメモリへのアクセスが抑制される。また、記憶領域Ａ２の更新が、記憶領域Ａ３が更新されなかった場合に行われることとすると、記憶領域Ａ２の更新の回数が抑制される。
【００３９】
図１の例の変形例として、記憶領域Ａ２に所定の長さＬｍｉｎ以上の最長一致データ列が存在する場合にも、ハフマン符号を含む圧縮データが生成されてもよい。図１の例において、「・・・２ｎｄ  ｈｏｒｓｅ・・・」の「ｈ」以降が処理対象のデータである場合には、上述の通り、照合１では所定の長さＬｍｉｎ以上の最長一致データ列が得られず、照合２により所定の長さＬｍｉｎ以上の最長一致データ列が得られた。この場合に、例えば、記憶領域Ａ２内の最長一致データ列「ｈｏｒｓｅ」を用いずに、「ｈ」のハフマン符号を含む識別子「０」の圧縮データが生成される。この場合においても最長一致データ列「ｈｏｒｓｅ」に基づく記憶領域Ａ３の更新処理（更新１）は行なわれる。すると、次回に処理対象のデータが「ｈｏｒｓｅ・・・」となった場合に、記憶領域Ａ３の照合（照合１）による圧縮符号が生成される。この変形例においては、記憶領域Ａ２の照合により生成された圧縮符号は用いないので、記憶領域Ａ３の照合により生成された圧縮符号に付与される識別子は、「１」でよい。「１０」や「１１」のように２ビット目での判別をせずともどの記憶領域を参照して復号化すれば良いかが判断可能なためである。この変形例では、同じデータ列が２回目に出現した際には、最長一致データ列に基づく圧縮符号が生成されないが、３回目以降には、最長一致データ列に基づく圧縮符号が生成される。その一方で上述したように、伸張方法を判別するため識別子が１ビットで表現される。
【００４０】
図２は、伸張処理の流れの一例を示す。伸張処理のワークエリアとして、メモリに記憶領域Ｂ１、記憶領域Ｂ２および記憶領域Ｂ３が設けられる。記憶領域Ｂ１にロードされた伸張対象の圧縮ファイルＦ２から順次圧縮データが読み出され、読み出された処理対象の圧縮データは順次伸張データに変換される。圧縮ファイルＦ２に含まれる圧縮データは、上述の通り、本実施例の圧縮処理による圧縮符号、またはハフマン符号などの本実施例以外の圧縮処理による圧縮符号（または処理対象のデータそのもの）である。得られた伸張データは順次記憶領域Ｂ４に格納され、記憶領域Ｂ４に格納された伸張データに基づき、伸張ファイルＦ３が生成される。図２に示す伸張処理では、ファイルＦ２から処理対象の圧縮データが読み出されるたびに、伸張データの生成、記憶領域Ｂ２の参照結果に応じた記憶領域Ｂ３への更新、記憶領域Ｂ２への更新のいずれか少なくとも１つが行なわれる。
【００４１】
処理対象の圧縮データが本実施例の圧縮処理による圧縮符号である場合（例えば識別子が「１０」または「１１」）には、記憶領域Ｂ２または記憶領域Ｂ３に格納されたデータを用いて伸張データが生成される。圧縮データがハフマン符号などの本実施例以外の圧縮処理による圧縮符号である場合（例えば識別子が「０」）には、その圧縮処理に合わせて伸張データが生成される。圧縮データが本実施例の圧縮処理による圧縮符号であるか否かは、圧縮データに付与された識別子に基づいて判断される。
【００４２】
例えば、処理対象の圧縮データの識別子が「１１」である場合には、圧縮符号に含まれる最長一致データ列の位置と一致長とに基づいて記憶領域Ｂ３からデータが取得される。取得されるデータは、記憶領域Ｂ３内の圧縮符号に示される位置に存在し、圧縮符号に示される一致長のデータである。取得されたデータが伸張データとなる。処理対象の圧縮データの識別子が「１０」である場合には、記憶領域Ｂ２において圧縮符号に示される位置に存在する、圧縮符号に示される長さのデータが取得される。取得されたデータが伸張データとなる。処理対象の圧縮データの識別子が「０」の場合には、その圧縮データに基づき伸張データが生成される。この圧縮データが本実施例以外の圧縮処理による圧縮符号である場合には、その圧縮処理に対応する伸張処理により伸張データが取得され、そもそも圧縮符号でない場合には、そのまま伸張データとなる。
【００４３】
各圧縮データの伸張に応じて、記憶領域Ｂ２および記憶領域Ｂ３の更新が随時行なわれる。圧縮データに含まれる識別子が「０」の場合は、記憶領域Ｂ３の更新処理（更新１）は行なわれず、記憶領域Ｂ２の更新処理（更新２）が行なわれる。圧縮データに含まれる識別子が「１０」の場合は、記憶領域Ｂ２の更新処理（更新２）は行なわれず、記憶領域Ｂ３の更新処理（更新１）が行なわれる。図１の圧縮処理において、識別子「１０」を付与する圧縮符号の生成に応じて、更新２を行なうことと定められている場合には、伸張処理時においても識別子「１０」が付与された圧縮データの伸張に応じて更新２も行なわれる。圧縮データに含まれる識別子が「１１」の場合は、記憶領域Ｂ２の更新処理（更新２）も記憶領域Ｂ３の更新処理（更新１）も行なわれない。図１の圧縮処理において、識別子「１１」を付与する圧縮符号の生成に応じて、更新２を行なうことと定められている場合には、伸張処理時においても識別子「１１」が付与された圧縮データの伸張に応じて更新２が行なわれる。
【００４４】
記憶領域Ｂ３は、例えば、データサイズが定められた（例えば、数キロバイト〜数十キロバイト程度）記憶領域である。例えば、記憶領域Ｂ３に定められたデータサイズ以上のデータが格納される場合には、記憶領域Ｂ３の先頭に格納された古いデータの上に、新しいデータが格納される。さらに、データの格納に応じて論理的な先頭が順次更新される。記憶領域Ｂ３内に格納されたデータは、例えば、順次更新される先頭の書き込み位置からの相対的なアドレスにより示される。論理的な先頭の書き込み位置からの相対的なアドレスにより記憶領域Ｂ３における格納データ間での格納順序の先後が示される。
【００４５】
記憶領域Ｂ２も記憶領域Ｂ３と同様、例えば、データサイズが定められた（例えば、数キロバイト〜数十キロバイト程度）記憶領域である。例えば、記憶領域Ｂ２に定められたデータサイズ以上のデータが格納される場合には、記憶領域Ｂ２の先頭に格納された古いデータの上に新しいデータが格納される。さらに、データの格納に応じて論理的な先頭が順次更新される。記憶領域Ｂ２内に格納されたデータは、例えば、順次更新される先頭の書き込み位置からの相対的なアドレスにより示される。論理的な先頭の書き込み位置からの相対的なアドレスにより記憶領域Ｂ２における格納データ間での格納順序の先後が示される。
【００４６】
図２には、図１で例示された圧縮データｄ１、圧縮データｄ２および圧縮データｄ３それぞれについての伸張処理例が示される。圧縮ファイルＦ２に含まれる圧縮データは、圧縮データに含まれる識別子に応じた手順で伸張される。
【００４７】
圧縮データｄ１の読出しにおいて、まず識別子が「０」であることが確認される。ハフマン符号化を用いて圧縮データｄ１を生成した場合には、ハフマン符号化に基づく復号化手順により、伸張データ「ｈ」を生成する。圧縮データｄ１がデータ「ｈ」そのものを含む場合には、データ「ｈ」を伸張データとする。また、識別子が「０」である場合には、記憶領域Ｂ２への更新（図２に示す更新２）が行なわれる。更新２では、伸張データ「ｈ」が記憶領域Ｂ２に格納される。
【００４８】
圧縮データｄ２の読出しにおいては、まず識別子が「１０」であることが確認される。識別子が「１０」である場合には、圧縮データｄ２内の圧縮符号に基づいて記憶領域Ｂ２を参照する（図２に示す参照２）。図２の例において、記憶領域Ｂ２における圧縮符号に示される位置から、圧縮符号に示される一致長の長さのデータは、「ｈｏｒｓｅ」となる。圧縮データｄ２よりも先に読み出された圧縮データに基づいて、記憶領域Ｂ２が更新され（図２に示す更新２）、図１の例において圧縮データｄ２を生成した際の記憶領域Ａ２と同じ状態であるために、位置と長さの指定により同じデータ「ｈｏｒｓｅ」が取得される。また、識別子が「１０」である場合には、記憶領域Ｂ３への更新（図２に示す更新１）が行なわれる。更新１では、伸張データ「ｈｏｒｓｅ」が記憶領域Ｂ３に格納される。識別子「１０」の場合に、更新２が行なわれるか否かは設定に応じて変更される。圧縮処理において、識別子「１０」の圧縮データを生成する際に、記憶領域Ａ２の更新（図１に示す更新２）を行なっていれば、伸張処理においても記憶領域Ｂ２の更新（図２に示す更新２）を行なう。
【００４９】
圧縮データｄ３の読出しにおいては、まず識別子「１１」であることが確認される。識別子が「１１」である場合には、圧縮データｄ３内の圧縮符号に基づいて記憶領域Ｂ３を参照する（図２に示す参照１）。図２の例において、記憶領域Ｂ３における圧縮符号に示される位置から、圧縮符号に示される一致長の長さのデータは、「ｈｏｒｓｅ」となる。圧縮データｄ３よりも先に読み出された圧縮データに基づいて、記憶領域Ｂ３が更新され（図２に示す更新１）、図１の例において圧縮データｄ３を生成した際の記憶領域Ａ３と同じ状態であるために、位置と長さの指定により同じデータ「ｈｏｒｓｅ」が取得される。識別子「１１」の場合に、更新１と更新２とが行なわれるか否かは設定に応じて変更される。圧縮処理において、識別子「１１」の圧縮データを生成する際に、記憶領域Ａ２の更新（図１に示す更新２）を行なっていれば、伸張処理においてもそれに合わせて更新を行なう。  図２に示す伸張処理によれば、記憶領域Ｂ３の更新は、圧縮データが本実施例以外の圧縮処理による圧縮符号である場合（または処理対象のデータそのものである場合）に行われる。そのため、ＬＺ７７などのように圧縮データの伸張処理ごとにスライド窓の更新が行われず、更新回数が抑制されることにより、伸張速度の高速化が図れる。
【００５０】
図１において説明した圧縮処理の変形例においては、「０」と「１」との２通りの識別子が用いられ、記憶領域Ａ２内のデータを示す圧縮符号は用いられない。この変形例に対応する伸張処理においては、識別子「０」の圧縮データについては、伸張データを生成し、記憶領域Ｂ２に格納する（更新２）とともに、伸張データと記憶領域Ｂ２内のデータとを照合する。照合の結果、伸張データと所定の長さＬｍｉｎ以上の長さで一致する最長一致データ列が記憶領域Ｂ２内に存在すれば、最長一致データ列を記憶領域Ｂ３に格納する（更新１）。これにより記憶領域Ｂ３は、記憶領域Ａ３と同じ状態となる。
【００５１】
図３は、機能構成例を示す。本実施形態の処理を実行するコンピュータ１は、記憶部１３を含み、さらに、圧縮部１１と伸張部１２との少なくとも一方を含む。圧縮部１１は圧縮処理を行ない、伸張部１２は伸張処理を行なう。記憶部１３は、圧縮対象のファイルＦ１や、圧縮処理により得られるファイルＦ２や、ファイルＦ２を伸張して得られるファイルＦ３などを格納する。また、記憶部１３は、圧縮部１１や伸張部１２のワークエリアとして用いられる。圧縮部１１は、制御部１１１、参照部１１２、更新部１１３、参照部１１４および更新部１１５を含む。伸張部１２は、制御部１２１、参照部１２２、更新部１２３、参照部１２４および更新部１２５を含む。
【００５２】
制御部１１１は、参照部１１２、更新部１１３、参照部１１４および更新部１１５を制御して、圧縮機能を実現させる。また、制御部１１１は、各機能部の処理に用いるデータを保持するため、記憶部１３に記憶領域（例えば、上述の記憶領域Ａ１、記憶領域Ａ２、記憶領域Ａ３および記憶領域Ａ４）を確保する。参照部１１２は、記憶領域Ａ１内の読出し位置のデータ列に基づき、記憶領域Ａ２内のデータの参照処理を実行する。更新部１１３は、記憶領域Ａ１内の読出し位置のデータ列の読出しに応じて、記憶領域Ａ２内のデータを更新する。参照部１１４は、記憶領域Ａ１内の読出し位置のデータ列に基づき、図１に示す記憶領域Ａ３の参照処理を実行する。制御部１１１は、参照部１１４による記憶領域Ａ３内の参照結果に応じて圧縮データを生成する。更新部１１５は、参照部１１２による記憶領域Ａ２の参照結果に応じて、記憶領域Ａ３を更新する。圧縮部１１内の各機能部による処理の実行手順については後述する。
【００５３】
制御部１２１は、参照部１２２、更新部１２３、参照部１２４および更新部１２５を制御して、伸張機能を実現させる。また、制御部１２１は、各機能部の処理に用いるデータを保持するため、記憶部１３に記憶領域（例えば、上述の記憶領域Ｂ１、記憶領域Ｂ２、記憶領域Ｂ３および記憶領域Ｂ４）を確保する。参照部１２２は、記憶領域Ｂ１内の読出し位置の圧縮データに基づき、記憶領域Ｂ２内のデータの参照処理を実行する。更新部１２３は、記憶領域Ｂ１内の読出し位置の圧縮データに応じて、記憶領域Ｂ２内のデータを更新する。参照部１２４は、記憶領域Ｂ１内の読出し位置のデータ列に基づき、図２に示す記憶領域Ｂ３の参照処理を実行する。更新部１２５は、参照部１２２による記憶領域Ｂ２の参照結果に応じて、記憶領域Ｂ３を更新する。伸張部１２内の各機能部による処理の実行手順については後述する。
【００５４】
図４は、記憶領域の位置情報の管理に用いられる位置情報テーブルＴ１の例を示す。位置情報テーブルＴ１は、圧縮処理に用いられる各記憶領域（記憶領域Ａ１、記憶領域Ａ２、記憶領域Ａ３および記憶領域Ａ４など）の記憶部１３における位置の管理に用いられる。位置情報テーブルＴ１には、ファイルＦ１をロードする記憶領域Ａ１の開始位置Ｐ１、終了位置Ｐ２および読出し位置Ｐ３が含まれる。また、位置情報テーブルＴ１には、記憶領域Ａ２の開始位置Ｐ４、終了位置Ｐ５、参照位置Ｐ６および更新位置Ｐ７が含まれる。さらに、位置情報テーブルＴ１には、記憶領域Ａ３の開始位置Ｐ８、終了位置Ｐ９、参照位置Ｐ１０および更新位置Ｐ１１が含まれる。ファイルＦ２生成用に設けられた記憶領域Ａ４の開始位置Ｐ１２、終了位置Ｐ１３および書込み位置Ｐ１４が含まれる。位置情報テーブルＴ１に格納されるそれぞれの位置情報の初期値は、制御部１１１により設定される。各記憶領域の開始位置と終了位置は、圧縮や伸張の対象となるデータの格納開始位置、終了位置を示す。ヘッダ等を除くため、例えば、読出し位置Ｐ３の初期値は、開始位置Ｐ１と同じである。また、参照位置Ｐ６および更新位置Ｐ７の初期値も開始位置Ｐ４と同じである。参照位置Ｐ１０および更新位置Ｐ１１の初期値も開始位置Ｐ８と同じであるし、書込み位置Ｐ１４も開始位置Ｐ１２と同じである。
【００５５】
図５は、圧縮処理の手順例を示す。まず、コンピュータ１内のオペレーティング・システムやアプリケーションプログラムの動作により圧縮機能が呼び出される（Ｓ１０１）と、制御部１１１は、前処理を実行する（Ｓ１０２）。Ｓ１０２の前処理は、例えば、図１に示す記憶領域Ａ１、記憶領域Ａ２および記憶領域Ａ３の確保、圧縮データを記憶する記憶領域Ａ４の確保、各記憶領域内の各位置情報（例えば、図４に示す各位置情報）の設定などである。
【００５６】
Ｓ１０２の処理を終えると、制御部１１１は、圧縮対象のファイルＦ１を記憶領域Ａ１にロードする（Ｓ１０３）。制御部１１１は、ファイルＦ１の終端に基づいて終了位置Ｐ２を設定する。次に、制御部１１１は、参照部１１４に記憶領域Ａ３の参照処理を実行させる（Ｓ１０４）。
【００５７】
図６は、記憶領域Ａ３の参照処理のフローチャート例を示す。参照部１１４は、制御部１１１に参照処理を指示される（Ｓ２００）と、参照位置Ｐ１０、一致長Ｌ３ａおよび最長一致位置Ｐ３ａをセットする（Ｓ２０１）。参照位置Ｐ１０及び最長一致位置Ｐ３ａは、開始位置Ｐ８と同じか、もしくは更新位置Ｐ１１と同じにセットされる。一致長Ｌ３ａは例えば、「０」などにセットされる。参照部１１４は、さらにカウンタ値ｊを初期値（例えばｊ＝０）にセットする（Ｓ２０２）。
【００５８】
参照部１１４は、記憶領域Ａ１内の単位データと記憶領域Ａ３内の単位データとが一致するか否か判定を行なう（Ｓ２０３）。この判定においては、記憶領域Ａ１の読出し位置Ｐ３からカウンタ値ｊ移動した位置（Ｐ３＋ｊ）の単位データと、記憶領域Ａ３の参照位置Ｐ１０からカウンタ値ｊ移動した位置（Ｐ１０＋ｊ）の単位データとが一致するか否かが判定される。単位データは、例えば文字などの単位の情報である。本実施例においては、単位データは、カウンタ値ｊや参照位置Ｐ１０などを表現する単位量であり、カウンタ値ｊや参照位置Ｐ１０のインクリメントによる増分と同じデータ量で表される。
【００５９】
位置（Ｐ３＋ｊ）の単位データと位置（Ｐ１０＋ｊ）の単位データとが一致する場合（Ｓ２０３：Ｙｅｓ）には、参照部１１４はカウンタ値ｊをインクリメントする（Ｓ２０４）。参照部１１４は、さらにカウンタ値ｊが所定の長さＬｍａｘ以上であるか否かを判定する（Ｓ２０５）。所定の長さＬｍａｘは、本実施例の圧縮処理で取り扱う一致長Ｌ３ａに対して設定された最大値である。本実施例においては、カウンタ値ｊのインクリメントの増分が、所定の長さＬｍａｘの長さ表現の単位量（単位データのデータ量）であるので、Ｓ２０５の処理においては、「等しい」か否かの判断が行なわれればよい。Ｓ２０３において、単位データ間での一致判定でなく、複数の単位データごとの一致判定が行われ、それに応じた量のインクリメントがＳ２０４で行なわれるならば、カウンタ値ｊは所定の長さＬｍａｘよりも大きくなり得る。その場合は、Ｓ２０５で「以上」か否かの判断が行なわれればよい。後述の所定の長さＬｍａｘとの比較処理についても同様であり、インクリメントされるデータ量が長さ表現の単位量であれば、「等しい」か否かが判断され、インクリメントされるデータ量が長さ表現の単位量よりも大きいことがあるならば、「以上」か否かが判断される。
もしカウンタ値ｊが所定の長さＬｍａｘ以上であれば（Ｓ２０５：Ｙｅｓ）、参照部１１４は、一致長Ｌ３ａにカウンタ値ｊを代入し、最長一致位置Ｐ３ａに参照位置Ｐ１０の値を代入する（Ｓ２０６）。図６のＳ２０６の処理に示される「Ｌ３ａ＝ｊ，Ｐ３ａ＝Ｐ１０」の「＝」は代入演算子を示す。カウンタ値ｊが所定の長さＬｍａｘ以上でなければ（Ｓ２０５：Ｎｏ）、参照部１１４は、再度Ｓ２０３の判定を行なう。Ｓ２０５及びＳ２０６は付加的な手順であり、Ｓ２０４が行なわれると必ずＳ２０３の判定が行なわれることとしてもよい。
【００６０】
位置（Ｐ３＋ｊ）の単位データと位置（Ｐ１０＋ｊ）の単位データとが一致しない場合（Ｓ２０３：Ｎｏ）には、参照部１１４は、カウンタ値ｊが一致長Ｌ３ａよりも大きいか否かを判定する（Ｓ２０７）。カウンタ値ｊが一致長Ｌ３ａよりも大きい場合（Ｓ２０７：Ｙｅｓ）には、参照部１１４は、一致長Ｌ３ａにカウンタ値ｊを代入し、最長一致位置Ｐ３ａに参照位置Ｐ１０の値を代入する（Ｓ２０８）。カウンタ値ｊが一致長Ｌ３ａ以下である（Ｓ２０７：Ｎｏ）か、Ｓ２０８の処理が行なわれると、参照部１１４は参照位置Ｐ１０をインクリメントする（Ｓ２０９）。
【００６１】
参照部１１４は、Ｓ２０９でインクリメントされた参照位置Ｐ１０が終了位置Ｐ９に達しているか否かを判定する（Ｓ２１０）。
【００６２】
図６のＳ２１０の処理に示される「Ｐ１０＝Ｐ９」の「＝」は等号を示す。参照位置Ｐ１０が終了位置Ｐ９に達していない場合（Ｓ２１０：Ｎｏ）には、参照部１１４はＳ２０２の処理を再度行なう。Ｓ２０１において参照位置Ｐ１０が開始位置Ｐ８に設定されれば上述の通りであるが、参照位置Ｐ１０が更新位置Ｐ１１に設定されるならば、参照位置Ｐ１０が更新位置Ｐ１１に達しているか否かがＳ２１０で判断される。参照位置Ｐ１０が更新位置Ｐ１１に初期設定されるならば、参照位置Ｐ１０が終了位置Ｐ９に達した場合にはＳ２０９の処理で参照位置Ｐ１０は開始位置Ｐ８に戻される。
【００６３】
参照位置Ｐ１０が終了位置Ｐ９に達している（Ｓ２１０：Ｙｅｓ）か、Ｓ２０６の処理が行なわれた場合には、参照部１１４は、最長一致位置Ｐ３ａおよび一致長Ｌ３ａを制御部１１１に返し、記憶領域Ａ３の参照処理を終了する（Ｓ２１１）。
【００６４】
参照部１１４による参照結果が制御部１１１に返されると、制御部１１１は、参照部１１２に記憶領域Ａ２の参照処理を実行させる（Ｓ１０５）。
【００６５】
図７は、記憶領域Ａ２の参照処理のフローチャート例を示す。参照部１１２は、制御部１１１により記憶領域Ａ２の参照を指示される（Ｓ３００）と、参照部１１４の処理により得られた一致長Ｌ３ａが所定の長さＬｍｉｎよりも短いか否かを判定する（Ｓ３０１）。一致長Ｌ３ａが所定の長さＬｍｉｎ以上である場合（Ｓ３０１：Ｎｏ）には、参照部１１２は処理を終了する（Ｓ３１４）。
【００６６】
一致長Ｌ３ａが所定の長さＬｍｉｎよりも短い場合（Ｓ３０１：Ｙｅｓ）には、参照部１１２は、参照位置Ｐ６、一致長Ｌ２ａおよび最長一致位置Ｐ２ａをセットする（Ｓ３０２）。参照位置Ｐ６及び最長一致位置Ｐ２ａは、開始位置Ｐ４と同じか、もしくは更新位置Ｐ７と同じにセットされる。一致長Ｌ２ａは例えば、「０」などにセットされる。参照部１１２は、さらにカウンタ値ｉを初期値（例えばｉ＝０）にセットする（Ｓ３０３）。
【００６７】
参照部１１２は、記憶領域Ａ１内の単位データと記憶領域Ａ２内の単位データとが一致するか否か判定を行なう（Ｓ３０４）。この判定においては、記憶領域Ａ１の読出し位置Ｐ３からカウンタ値ｉ移動した位置（Ｐ３＋ｉ）の単位データと、記憶領域Ａ２の参照位置Ｐ６からカウンタ値ｉ移動した位置（Ｐ６＋ｉ）の単位データとが一致するか否かが判定される。
【００６８】
位置（Ｐ３＋ｉ）の単位データと位置（Ｐ６＋ｉ）の単位データとが一致する場合（Ｓ３０４：Ｙｅｓ）には、参照部１１２はカウンタ値ｉをインクリメントする（Ｓ３０５）。参照部１１２は、さらにカウンタ値ｉが所定の長さＬｍａｘ以上であるか否かを判定する（Ｓ３０６）。所定の長さＬｍａｘは、図６における所定の長さＬｍａｘと同じでも異なっていてもよい。カウンタ値ｉが所定の長さＬｍａｘ以上であれば（Ｓ３０６：Ｙｅｓ）、参照部１１２は、一致長Ｌ２ａにカウンタ値ｉを代入し（Ｓ３０７）、最長一致位置Ｐ２ａに参照位置Ｐ６の値を代入する（Ｓ３０８）。図７のＳ３０７および３０８の処理に示される「＝」は代入演算子を示す。カウンタ値ｉが所定の長さＬｍａｘ以上でなければ（Ｓ３０６：Ｎｏ）、参照部１１２は、再度Ｓ３０４の判定を行なう。Ｓ３０６〜Ｓ３０８は付加的な手順であり、Ｓ３０５が行なわれると必ずＳ３０４の判定が行なわれることとしてもよい。
【００６９】
位置（Ｐ３＋ｉ）の単位データと位置（Ｐ６＋ｉ）の単位データとが一致しない場合（Ｓ３０４：Ｎｏ）には、参照部１１２は、カウンタ値ｉが一致長Ｌ２ａよりも大きいか否かを判定する（Ｓ３０９）。カウンタ値ｉが一致長Ｌ２ａよりも大きい場合（Ｓ３０９：Ｙｅｓ）には、参照部１１２は、一致長Ｌ２ａにカウンタ値ｉを代入し（Ｓ３１０）、最長一致位置Ｐ２ａに参照位置Ｐ６の値を代入する（Ｓ３１１）。カウンタ値ｉが一致長Ｌ２ａ以下である（Ｓ３０９：Ｎｏ）か、Ｓ３１１の処理が行なわれると、参照部１１２は、参照位置Ｐ６をインクリメントする（Ｓ３１２）。
【００７０】
参照部１１２は、Ｓ３１２でインクリメントされた参照位置Ｐ６が終了位置Ｐ５であるか否かを判定する（Ｓ３１３）。Ｓ３０２において参照位置Ｐ６が開始位置Ｐ４に設定されれば上述の通りであるが、参照位置Ｐ６が更新位置Ｐ７に設定されるならば、参照位置Ｐ６が更新位置Ｐ７であるか否かがＳ３１３で判断される。参照位置Ｐ６が更新位置Ｐ７に初期設定されるならば、参照位置Ｐ６が終了位置Ｐ５である場合にはＳ３１２の処理で参照位置Ｐ６は開始位置Ｐ４に戻される。図７のＳ３１３の処理に示される「Ｐ６＝Ｐ５」の「＝」は等号を示す。参照位置Ｐ６が終了位置Ｐ５でない場合（Ｓ３１３：Ｎｏ）には、参照部１１２はＳ３０３の処理を再度行なう。
【００７１】
参照位置Ｐ６が終了位置Ｐ５である（Ｓ３１３：Ｙｅｓ）か、Ｓ３０８の処理が行なわれた場合には、参照部１１２は、最長一致位置Ｐ２ａおよび一致長Ｌ２ａを制御部１１１に返し、記憶領域Ａ２の参照処理を終了する（Ｓ３１４）。
【００７２】
次に、制御部１１１は、Ｓ１０５の記憶領域Ａ２への参照処理の結果（一致長Ｌ２ａおよび最長一致位置Ｐ２ａ）に基づいて、更新部１１５に記憶領域Ａ３への更新処理を実行させる（Ｓ１０６）。
【００７３】
図８は、記憶領域Ａ３の更新処理のフローチャート例を示す。更新部１１５は、制御部１１１から記憶領域Ａ３の更新処理を指示される（Ｓ４００）と、参照部１１４の処理により得られた一致長Ｌ３ａが所定の長さＬｍｉｎよりも短いか否かを判定する（Ｓ４０１）。一致長Ｌ３ａが所定の長さＬｍｉｎよりも短い場合（Ｓ４０１：Ｙｅｓ）には、更新部１１５は、さらに、参照部１１２の処理により得られた一致長Ｌ２ａが所定の長さＬｍｉｎ以上であるか否かを判定する（Ｓ４０２）。一致長Ｌ３ａが所定の長さＬｍｉｎ以上である（Ｓ４０１：Ｎｏ）か、一致長Ｌ２ａが所定の長さＬｍｉｎよりも短い場合（Ｓ４０２：Ｎｏ）には、更新部１１５は処理を終了する（Ｓ４０６）。
【００７４】
一致長Ｌ２ａが所定の長さＬｍｉｎ以上である場合（Ｓ４０２：Ｙｅｓ）には、更新部１１５は、記憶領域Ａ２内の最長一致位置Ｐ２ａから、一致長Ｌ２ａの長さのデータを読み出す（Ｓ４０３）。更新部１１５は、Ｓ４０３で読みだしたデータを、記憶領域Ａ３の更新位置Ｐ１１に格納する（Ｓ４０４）。さらに、更新部１１５は、Ｓ４０４のデータ格納に応じて、更新位置Ｐ１１を更新する（Ｓ４０５）。Ｓ４０５において、更新位置Ｐ１１は、一致長Ｌ２ａだけ移動される。図８のＳ４０５の処理「Ｐ１１＝Ｐ１１＋Ｌ２ａ」の「＝」は代入演算子を示す。更新部１１５は、Ｓ４０５の処理を終えると、処理を終了する（Ｓ４０６）。
【００７５】
制御部１１１は、更新部１１５が処理を終えると、更新部１１３に記憶領域Ａ２への更新処理を実行させる（Ｓ１０７）。
【００７６】
図９は、記憶領域Ａ２の更新処理のフローチャート例を示す。更新部１１３は、制御部１１１から記憶領域Ａ２の更新処理を指示される（Ｓ５００）と、参照部１１４の処理により得られた一致長Ｌ３ａが所定の長さＬｍｉｎ以上であるか否かを判定する（Ｓ５０１）。
【００７７】
一致長Ｌ３ａが所定の長さＬｍｉｎ以上である場合（Ｓ５０１：Ｙｅｓ）には、更新部１１３は、記憶領域Ａ１の読出し位置Ｐ３から一致長Ｌ３ａのデータを読み出し、記憶領域Ａ２の更新位置Ｐ７に、読みだしたデータを格納する（Ｓ５０２）。Ｓ５０２のデータの格納に応じて、更新部１１３は、更新位置Ｐ７を更新する（Ｓ５０３）。Ｓ５０３において、更新位置Ｐ７は、一致長Ｌ３ａだけ移動される。図９のＳ５０３の処理「Ｐ７＝Ｐ７＋Ｌ３ａ」における「＝」は代入演算子である。
【００７８】
一致長Ｌ３ａが所定の長さＬｍｉｎ以上でない場合（Ｓ５０１：Ｎｏ）には、さらに、一致長Ｌ２ａが所定の長さＬｍｉｎ以上であるか否かが判定される（Ｓ５０４）。Ｓ５０４の判定において一致長Ｌ２ａが所定の長さＬｍｉｎ以上であると判定される場合（Ｓ５０４：Ｙｅｓ）には、更新部１１３は、記憶領域Ａ１の読出し位置Ｐ３から一致長Ｌ２ａのデータを読み出し、記憶領域Ａ２の更新位置Ｐ７に、読みだしたデータを格納する（Ｓ５０５）。Ｓ５０５のデータの格納に応じて、更新部１１３は、更新位置Ｐ７を更新する（Ｓ５０６）。Ｓ５０６において、更新位置Ｐ７は、一致長Ｌ２ａだけ移動される。図９のＳ５０６の処理「Ｐ７＝Ｐ７＋Ｌ２ａ」における「＝」は代入演算子である。
【００７９】
一方、一致長Ｌ２ａが所定の長さＬｍｉｎよりも短い場合（Ｓ５０４：Ｎｏ）には、更新部１１３は、記憶領域Ａ１の読出し位置Ｐ３から単位データを読み出し、記憶領域Ａ２の更新位置Ｐ７に、読み出したデータを格納する（Ｓ５０７）。更新部１１３は、更新位置Ｐ７を更新する（Ｓ５０８）。Ｓ５０８において、更新位置Ｐ７は、単位データの長さだけ移動される。単位データは、例えば文字などの単位の情報である。本実施例においては、単位データは、カウンタ値ｊや参照位置Ｐ１０などのインクリメントによる増分と同じデータ量で表される。図９のＳ５０８の処理「Ｐ７＝Ｐ７＋（単位長）」における「＝」は代入演算子である。
【００８０】
Ｓ５０３、Ｓ５０６またはＳ５０８の処理が行なわれると、更新部１１３は処理を終了する（Ｓ５０９）。更新部１１３が処理を終了すると、制御部１１１は、圧縮データを生成し、生成した圧縮データを記憶領域Ａ４の書込み位置Ｐ１４に書き込む（Ｓ１０８）。
【００８１】
図１０は、圧縮データの生成・書込みのフローチャート例を示す。制御部１１１が生成・書込み処理を開始する（Ｓ６００）と、参照部１１４の処理により得られた一致長Ｌ３ａが所定の長さＬｍｉｎ以上であるか否かを判定する（Ｓ６０１）。
【００８２】
一致長Ｌ３ａが所定の長さＬｍｉｎ以上である場合（Ｓ６０１：Ｙｅｓ）には、制御部１１１は、最長一致位置Ｐ３ａおよび一致長Ｌ３ａに基づき圧縮符号を生成し、生成した圧縮符号に識別子「１１」を付与して、圧縮データを生成する（Ｓ６０２）。制御部１１１は、Ｓ６０３で生成した圧縮データを書込み位置Ｐ１４に書き込む（Ｓ６０３）。さらに、制御部１１１は、書込み位置Ｐ１４を更新する（Ｓ６０４）。Ｓ６０４において、書込み位置Ｐ１４は、一致長Ｌ３ａ＋２ビットだけ移動される。一致長Ｌ３ａは圧縮符号の書込みサイズであり、２ビットは圧縮符号に付与される識別子の書込みサイズである。図１０のＳ６０４の処理「Ｐ１４＝Ｐ１４＋Ｌ３ａ＋２」における「＝」は代入演算子である。
【００８３】
一致長Ｌ３ａが所定の長さＬｍｉｎ以上でない場合（Ｓ６０１：Ｎｏ）には、さらに、一致長Ｌ２ａが所定の長さＬｍｉｎ以上であるか否かが判定される（Ｓ６０５）。Ｓ６０５の判定において一致長Ｌ２ａが所定の長さＬｍｉｎ以上であると判定される場合（Ｓ６０５：Ｙｅｓ）には、制御部１１１は、最長一致位置Ｐ２ａおよび一致長Ｌ２ａに基づき圧縮符号を生成し、生成した圧縮符号に識別子「１０」を付与して、圧縮データを生成する（Ｓ６０６）。制御部１１１は、Ｓ６０６で生成した圧縮データを書込み位置Ｐ１４に書き込む（Ｓ６０７）。さらに、制御部１１１は、書込み位置Ｐ１４を更新する（Ｓ６０８）。Ｓ６０８において、書込み位置Ｐ１４は、一致長Ｌ２ａ＋２ビットだけ移動される。一致長Ｌ２ａは圧縮符号の書込みサイズであり、２ビットは圧縮符号に付与される識別子の書込みサイズである。図１０のＳ６０８の処理「Ｐ１４＝Ｐ１４＋Ｌ２ａ＋２」における「＝」は代入演算子である。
【００８４】
一方、一致長Ｌ２ａが所定の長さＬｍｉｎよりも短い場合（Ｓ６０５：Ｎｏ）には、制御部１１１は、読出し位置Ｐ３の単位データをハフマン符号化し、ハフマン符号に識別子「０」を付与して圧縮データを生成する（Ｓ６０９）。上述の通り、ハフマン符号化以外にも、本実施例以外の圧縮処理を行なう設定であれば、制御部１１１は、設定に応じた圧縮処理を行なって得られるデータに識別子「０」を付して圧縮データを生成する。また、圧縮処理を行なわない設定であれば、制御部１１１は、単位データに対して識別子を付与して、圧縮データを生成する。制御部１１１は、Ｓ６０１で生成した圧縮データを書込み位置Ｐ１４に書き込む（Ｓ６０７）。さらに、制御部１１１は、書込み位置Ｐ１４を更新する（Ｓ６１１）。Ｓ６１１において、書込み位置Ｐ１４は、生成したハフマン符号の符号長＋１ビットだけ移動される。１ビットは圧縮符号に付与される識別子の書込みサイズである。図１０のＳ６１１の処理「Ｐ１４＝Ｐ１４＋（単位長）＋１」における「＝」は代入演算子である。
【００８５】
Ｓ６０４、Ｓ６０８またはＳ６１１の処理が行なわれると、制御部１１１は処理を終了する（Ｓ６１２）。図１０の手順により生成される圧縮データの例は、図１１を用いて後述する。さらに、制御部１１１は、記憶領域Ａ１の読出し位置Ｐ３の位置を更新する（Ｓ１０９）。Ｓ１０９において、読出し位置Ｐ３は一致長Ｌ３ａに応じた量だけ移動される。一致長Ｌ３ａが所定の長さＬｍｉｎよりも短い場合には、読出し位置Ｐ３は単位長だけ移動される。一致長Ｌ３ａが所定の長さＬｍｉｎ以上である場合には、読出し位置Ｐ３は一致長Ｌ３ａだけ移動される。制御部１１１は、更新された読出し位置Ｐ３がファイルＦ１の終点位置Ｐ２に達しているか否かを判断する（Ｓ１１０）。読出し位置Ｐ３がファイルＦ１の終点位置Ｐ２に達していない場合（Ｓ１１０：Ｎｏ）には、制御部１１１はＳ１０４の処理を再度行なう。
【００８６】
読出し位置Ｐ３がファイルＦ１の終点位置Ｐ２に達している場合（Ｓ１１０：Ｙｅｓ）には、制御部１１１は、記憶領域Ａ４に格納された圧縮データに基づき、圧縮ファイルＦ２を生成する（Ｓ１１１）。圧縮ファイルＦ２のヘッダなどに、本実施例の圧縮処理が行なわれたことを示す識別情報が含まれる。Ｓ１１１の処理が終わると、制御部１１１は、圧縮機能を終了する（Ｓ１１２）。例えば、Ｓ１１２において、制御部１１１は、圧縮機能の呼び出し先に対して圧縮処理終了の通知を行なう。
【００８７】
上述の圧縮処理により、記憶領域Ａ３および記憶領域Ａ２をワークエリアとした圧縮処理が行なわれる。ファイルＦ１に長さをもったデータが何度も繰り返されるようであれば、そのデータが記憶領域Ａ３内に格納されるので、記憶領域Ａ３のサーチにより圧縮符号が生成される。その場合には、記憶領域Ａ２へのサーチは抑制される。また、記憶領域Ａ３へのサーチにより圧縮符号が生成されない場合には、記憶領域Ａ２へのサーチが行なわれ、その結果が記憶領域Ａ３に反映される。そのため、記憶領域Ａ３へのサーチのみで効率的に圧縮符号の生成が行なわれる。
【００８８】
図１１は、圧縮データのフォーマット例を示す。図１１の例では、記憶領域Ａ１に読出し位置Ｐ３から「ｈｏｒｓｅ・・・」とデータが格納されている。図１１の（１）は、この場合において、一致長Ｌ３ａおよび一致長Ｌ２ａがともに所定の長さＬｍｉｎより短い場合の圧縮データの例を示している。また、図１１の（２）は、一致長Ｌ３ａが所定の長さＬｍｉｎよりも短く、一致長Ｌ２ａが所定の長さＬｍｉｎ以上である場合の圧縮データの例を示している。図１１の（３）は、一致長Ｌ３ａが所定の長さＬｍｉｎ以上である場合の圧縮データの例を示している。
【００８９】
圧縮データ例の（１）は、識別子「０」とハフマン符号とを含む。識別子「０」は、本実施例の圧縮処理による圧縮符号でないことを示す。圧縮データ例の（１）に含まれるハフマン符号は、読出し位置Ｐ３に存在する単位データである文字「ｈ」に対応するハフマン符号である。また、ハフマン符号でなくとも、本実施例の圧縮処理とは異なる他の圧縮処理により圧縮された圧縮符号でもよい。
【００９０】
圧縮符号例の（２）は、識別子、最長一致位置Ｐ２ａおよび一致長Ｌ２ａを含む。識別子「１０」の先頭ビット「１」は、本実施例の圧縮処理を用いた圧縮符号であることを示す。最長一致位置Ｐ２ａは、記憶領域Ａ２の中で、処理対象のデータと最も長く一致したデータの存在位置を示す。図１１の例では、最長一致位置Ｐ２ａは、１２ビットで表現されており、０ｘ５Ｅ６である。この例では、１バイト文字で構成されたデータ列におけるデータの位置の表現に１２ビット用いている。１２ビットのデータでは、０〜４０９５までの値を表現できるので、最長一致位置Ｐ２ａは、４ＫＢ程度のデータ列における位置を表現することができる。最長一致位置Ｐ２ａが１２ビットで位置を表現可能な記憶領域Ａ２のサイズは、４ＫＢ程度かそれよりも小さい。逆に言えば、記憶領域Ａ２のサイズ設定に応じて最長一致位置Ｐ２ａのビット数が定められ、例えば、記憶領域Ａ２が４ＫＢならば最長一致位置Ｐ２ａは１２ビットで表現される。一致長Ｌ２ａは、０ｘ５を示す。一致長Ｌ２ａが０ｘ５なので、図１１の例の最長一致データ列は、「ｈｏｒｓｅ」の５文字である。一致長Ｌ２ａの表現に４ビット用いられているので、図１１の例においては、一致長Ｌ２ａは０ｘＦ（１０進数で１５）まで表現できる。一致長Ｌ２ａを表現するビット数は、所定の長さＬｍａｘの設定に応じて定められる。
【００９１】
圧縮符号例の（３）は、識別子、最長一致位置Ｐ３ａおよび一致長Ｌ３ａを含む。識別子「１１」の先頭ビット「１」は、本実施例の圧縮処理を用いた圧縮符号であることを示す。最長一致位置Ｐ３ａは、記憶領域Ａ３の中で、処理対象のデータと最も長く一致したデータの存在位置を示す。図１１の例では、最長一致位置Ｐ３ａは、１２ビットで表現されており、０ｘ５Ｅ６である。この例では、１バイト文字で構成されたデータ列におけるデータの位置の表現に１２ビット用いているので、記憶領域Ａ３のサイズは、４ＫＢ程度かそれよりも小さい。一致長Ｌ３ａは、０ｘ５を示す。一致長Ｌ３ａが０ｘ５なので、図１１の例の最長一致データ列は、「ｈｏｒｓｅ」の５文字である。一致長Ｌ３ａの表現に４ビット用いられているので、図１１の例においては、所定の長さＬｍａｘの設定の上限は、０ｘＦ（１０進数で１５）である。
【００９２】
図１２は、記憶領域の位置情報の管理に用いられる位置情報テーブルＴ２の例を示す。位置情報テーブルＴ２は、伸張処理に用いられる各記憶領域（記憶領域Ｂ１、記憶領域Ｂ２、記憶領域Ｂ３および記憶領域Ｂ４など）の記憶部１３における位置の管理に用いられる。位置情報テーブルＴ２には、ファイルＦ２をロードする記憶領域Ｂ１の開始位置Ｑ１、終了位置Ｑ２および読出し位置Ｑ３が含まれる。また、位置情報テーブルＴ２には、記憶領域Ｂ２の開始位置Ｑ４、終了位置Ｑ５、参照位置Ｑ６および更新位置Ｑ７が含まれる。さらに、位置情報テーブルＴ２には、記憶領域Ｂ３の開始位置Ｑ８、終了位置Ｑ９、参照位置Ｑ１０および更新位置Ｑ１１が含まれる。ファイルＦ３生成のために確保された記憶領域Ｂ４の開始位置Ｑ１２、終了位置Ｑ１３および書込み位置Ｑ１４が含まれる。位置情報テーブルＴ２に格納されるそれぞれの位置情報の初期値は、制御部１２１により設定される。各記憶領域の開始位置と終了位置は、圧縮や伸張の対象となるデータの格納開始位置、終了位置を示す。ヘッダ等を除くため、例えば、読出し位置Ｑ３の初期値は、開始位置Ｑ１と同じである。また、参照位置Ｑ６および更新位置Ｑ７の初期値も開始位置Ｑ４と同じである。参照位置Ｑ１０および更新位置Ｑ１１の初期値も開始位置Ｑ８と同じであるし、書込み位置Ｑ１４も開始位置Ｑ１２と同じである。
【００９３】
図１３は、伸張処理のフローチャート例を示す。まず、コンピュータ１内のオペレーティング・システムやアプリケーションプログラムの動作により伸張機能が呼び出される（Ｓ７００）と、制御部１２１は、前処理を実行する（Ｓ７０１）。Ｓ７０１の前処理は、例えば、図２に示す記憶領域Ｂ１、記憶領域Ｂ２および記憶領域Ｂ３の確保、伸張データを記憶する記憶領域Ｂ４の確保、各記憶領域内の各位置情報（例えば、図１２に示す各位置情報）の設定などである。また、Ｓ７０１の処理は、圧縮ファイルのヘッダに本実施例の圧縮処理が行なわれたことを示す識別子が含まれる場合にのみ行なわれることとしてもよい。Ｓ７０１の処理を終えると、制御部１２１は、伸張対象のファイルＦ２を記憶領域Ｂ１にロードする（Ｓ７０２）。制御部１２１は、ファイルＦ２の終端に基づいて終了位置Ｑ２を設定する。
【００９４】
次に、制御部１２１は、記憶領域Ｂ１の読出し位置Ｑ３のデータ（識別子）を参照し、識別子が本実施例の圧縮処理による圧縮符号であることを示す（識別子が「０」）か否（識別子が「１０」または「１１」）かを判定する（Ｓ７０３）。図１１に例示した圧縮データのフォーマットによれば、圧縮データの先頭が識別子であるため、読出し位置Ｑ３のデータが識別子である。圧縮データ内の別の位置に識別子が付与されている場合には、制御部１２１は、Ｓ７０３でその位置を参照する。
【００９５】
Ｓ７０３において、識別子が「０」である場合（Ｓ７０３：Ｙｅｓ）には、制御部１２１は、伸張データを生成し、生成した伸張データを記憶領域Ｂ４の書込み位置Ｑ１４に書き込む（Ｓ７０４）。Ｓ７０４で生成される伸張データは、圧縮データに含まれるハフマン符号を伸張して得られるデータである。上述の通り、ハフマン符号化以外を用いて圧縮データが生成されている場合には、その圧縮処理に応じた伸張処理が行なわれる。さらに、制御部１２１は、伸張データの書込み位置Ｑ１４を単位データの長さ分（単位長）ずらす。  一方、Ｓ７０３において、識別子が「１０」または「１１」である場合（Ｓ７０３：Ｎｏ）には、制御部１２１は、参照部１２４に記憶領域Ｂ３の参照を実行させる。
【００９６】
図１４は、記憶領域Ｂ３の参照処理のフローチャート例を示す。参照部１２４は、制御部１２１から記憶領域Ｂ３の参照処理を指示される（Ｓ８００）と、参照部１２４は、識別子が「１１」であるか否（識別子が「１０」）かを判定する（Ｓ８０１）。識別子が「１１」である場合（Ｓ８０１：Ｙｅｓ）には、参照部１２４は、記憶領域Ｂ１の読出し位置Ｑ３から圧縮符号を読み出す（Ｓ８０２）。参照部１２４は、圧縮符号に示される位置ＱＸと長さＬＸとに基づき記憶領域Ｂ３内の位置ＱＸから長さＬＸのデータを読み出す（Ｓ８０３）。位置ＱＸは、圧縮処理時における記憶領域Ａ３内の最長一致位置を示す。長さＬＸは、圧縮処理時における最長一致データ列の一致長Ｐ３ａを示す。参照部１２４は、Ｓ８０３の処理後に、Ｓ８０３で読みだしたデータを制御部１２１に返すか、Ｓ８０１の判定で識別子が「１１」でない場合（Ｓ８０１：Ｎｏ）に、処理を終了する（Ｓ８０４）。
【００９７】
図１５は、記憶領域Ｂ２の参照処理のフローチャート例を示す。参照部１２２は、制御部１２１から記憶領域Ｂ２の参照処理を指示される（Ｓ９００）と、参照部１２２は、識別子が「１０」であるか否（識別子が「１１」）かを判定する（Ｓ９０１）。識別子が「１０」である場合（Ｓ９０１：Ｙｅｓ）には、参照部１２２は、記憶領域Ｂ１の読出し位置Ｑ３から圧縮符号を読み出す（Ｓ９０２）。参照部１２２は、圧縮符号に示される位置ＱＸと長さＬＸとに基づき記憶領域Ｂ２内の位置ＱＸから長さＬＸのデータを読み出す（Ｓ９０３）。位置ＱＸは、圧縮処理時における記憶領域Ａ２内の最長一致位置を示す。長さＬＸは、圧縮処理時における最長一致データ列の一致長Ｐ２ａを示す。参照部１２２は、Ｓ９０３の処理後にＳ９０３で読みだしたデータを制御部１２１に返すか、Ｓ９０１の判定で識別子が「１０」でない場合（Ｓ９０１：Ｎｏ）に、処理を終了する（Ｓ９０４）。
【００９８】
制御部１２１は、Ｓ７０５およびＳ７０６の参照結果に応じて、伸張データを生成し、生成した伸張データを記憶領域Ｂ４の書込み位置Ｑ１４に書き込む（Ｓ７０７）。すなわち、Ｓ７０７において、制御部１２１は、Ｓ８０３またはＳ９０３において読み出されたデータを伸張データとして書込み位置Ｑ１４に書き込む。
【００９９】
さらに、制御部１２１は、参照部１２２の参照結果に基づく記憶領域Ｂ３の更新処理を更新部１２５に指示する（Ｓ７０８）。
【０１００】
図１６は、記憶領域Ｂ３の更新処理のフローチャート例を示す。更新部１２５は、制御部１２１から記憶領域Ｂ３の更新処理を指示される（Ｓ１０００）と、処理対象の圧縮データの識別子が「１０」であるか否かを判定する（Ｓ１００１）。識別子が「１０」である場合（Ｓ１００１：Ｙｅｓ）には、更新部１２５は、記憶領域Ｂ２の位置ＱＸから長さＬＸのデータを読み出す（Ｓ１００２）。更新部１２５は、さらに、Ｓ１００２で読みだしたデータを記憶領域Ｂ３の更新位置Ｑ１１に格納する（Ｓ１００３）。更新部１２５は、Ｓ１００３の格納に応じて更新位置Ｑ１１を更新する（Ｓ１００４）。Ｓ１００４において、更新位置Ｑ１１は、長さＬＸだけ移動される。識別子が「１０」でない（Ｓ１００１：Ｎｏ）か、Ｓ１００４の処理が行なわれた場合には、更新部１２５は処理を終了する（Ｓ１００５）。
【０１０１】
制御部１２１は、更新部１２５の処理が終了する（Ｓ７０８の処理が終了する）か、Ｓ７０４の処理が終了すると、記憶領域Ｂ２の更新処理を更新部１２３に指示する（Ｓ７０９）。制御部１２１が実行するＳ７０５の処理と、Ｓ７０６の処理との処理順序が入れ替えられてもよい。また、Ｓ７０７の処理とＳ７０８の処理との処理順序が入れ替えられてもよい。
【０１０２】
図１７は、記憶領域Ｂ２の更新処理のフローチャート例を示す。更新部１２３は、制御部１２１に記憶領域Ｂ２の更新処理を指示される（Ｓ１１００）と、処理対象の圧縮データの識別子が「０」であるか否かを判定する（Ｓ１１０１）。Ｓ１１０１で識別が「０」の場合（Ｓ１１０１：Ｙｅｓ）には、更新部１２３は、Ｓ７０４で生成した伸張データを更新位置Ｑ７に格納する（Ｓ１１０２）。Ｓ１１０２の格納に応じて、更新部１２３は、更新位置Ｑ７の更新を行なう（Ｓ１１０３）。Ｓ１１０３の更新では、更新位置Ｑ７が単位データの長さ（単位長）分移動される。
【０１０３】
Ｓ１１０１で、識別子が「０」でない場合（Ｓ１１１０：Ｎｏ）には、更新部１２３は、識別子が「１０」であるか否かを判定する（Ｓ１１０４）。識別子が「１０」である場合（Ｓ１１０４：Ｙｅｓ）には、Ｓ１００２で記憶領域Ｂ２から読み出したデータを更新位置Ｑ７に格納する（Ｓ１１０５）。Ｓ１１０５の格納に応じて、更新部１２３は、更新位置Ｑ７の更新を行なう（Ｓ１１０６）。Ｓ１１０６の更新では、更新位置Ｑ７が単位データの長さ（単位長）分移動される。Ｓ１１０３もしくはＳ１１０６の処理が行なわれるか、Ｓ１１０４で識別子が「１０」でない場合（Ｓ１１０４：Ｎｏ）には、更新部１２３は処理を終了する（Ｓ１１０７）。
【０１０４】
更新部１２３が記憶領域Ｂ２の更新処理を終了した場合に、制御部１２１は読出し位置Ｑ３の更新を行なう（Ｓ７１０）。Ｓ７１０において、読出し位置Ｑ３は圧縮データに応じた量だけ移動される。制御部１２１は、更新された読出し位置Ｑ３が圧縮ファイルＦ２の終点位置Ｑ２に達しているか否かを判断する（Ｓ７１１）。読出し位置Ｑ３が圧縮ファイルＦ２の終点位置Ｑ２に達していない場合（Ｓ７１１：Ｎｏ）には、制御部１２１はＳ７０３の処理を再度行なう。
【０１０５】
読出し位置Ｑ３が圧縮ファイルＦ２の終点位置Ｑ２に達している場合（Ｓ７１１：Ｙｅｓ）には、制御部１２１は、記憶領域Ｂ４に格納された伸張データに基づき、伸張ファイルＦ３を生成する（Ｓ７１２）。Ｓ７１２の処理が終わると、制御部１２１は、伸張機能を終了する（Ｓ７１３）。例えば、Ｓ７１３において、制御部１２１は、伸張機能の呼び出し先に対して伸張処理終了の通知を行なう。
【０１０６】
図２の説明において上述したとおり、圧縮処理の変形例に対応する伸張処理において、識別子「０」の圧縮データについては、伸張データを生成し、記憶領域Ｂ２に格納するとともに、伸張データと記憶領域Ｂ２内のデータとを照合する。照合の結果、伸張データと所定の長さＬｍｉｎ以上の長さで一致する最長一致データ列が記憶領域Ｂ２内に存在すれば、最長一致データ列を記憶領域Ｂ３に格納する。これにより記憶領域Ｂ３は、記憶領域Ａ３と同じ状態となる。すなわち、参照部１２２は、識別子「０」の圧縮データから得られる伸張データ記憶領域Ｂ２内のデータとの照合処理を行ない、更新部１２５は、参照部１２２の照合結果に応じて記憶領域Ｂ３の更新を行なう。
【０１０７】
図１８は、記憶領域Ｂ２の参照処理のフローチャート例を示す。参照部１２２は、制御部１２１に記憶領域Ｂ２の参照処理を指示される（Ｓ１２００）と、参照位置Ｑ６、一致長Ｌ２ｂおよび最長一致位置Ｑ２ｂをセットする（Ｓ１２０１）。参照位置Ｑ６及び最長一致位置Ｑ２ｂは、開始位置Ｑ４と同じか、もしくは更新位置Ｑ７と同じにセットされる。一致長Ｌ２ｂは例えば、「０」などにセットされる。参照部１１２は、さらにカウンタ値ｋを初期値（例えばｋ＝０）にセットする（Ｓ１２０２）。
【０１０８】
参照部１２２は、記憶領域Ｂ１の読出し位置Ｑ３からカウンタ値ｋ移動した位置（Ｑ３＋ｋ）のデータの識別子が、本実施例の圧縮処理による圧縮符号でないことを示す（「０」である）か否かを判定する（Ｓ１２０３）。位置（Ｑ３＋ｋ）の識別子が、本実施例の圧縮処理による圧縮符号でないことを示す（「０」である）場合（Ｓ１２０３：Ｙｅｓ）に、参照部１２２は、記憶領域Ｂ１内の単位データと記憶領域Ｂ２内の単位データとが一致するか否か判定を行なう（Ｓ１２０４）。この判定においては、記憶領域Ｂ１の読出し位置Ｑ３からカウンタ値ｋ移動した位置（Ｑ３＋ｋ）の単位データと、記憶領域Ｂ２の参照位置Ｑ６からカウンタ値ｋ移動した位置（Ｑ６＋ｋ）の単位データとが一致するか否かが判定される。
【０１０９】
位置（Ｑ３＋ｋ）の単位データと位置（Ｑ６＋ｋ）の単位データとが一致する場合（Ｓ１２０４：Ｙｅｓ）には、参照部１２２は、カウンタ値ｋをインクリメントする（Ｓ１２０５）。参照部１２２は、さらにカウンタ値ｋが所定の長さＬｍａｘ以上であるか否かを判定する（Ｓ１２０６）。所定の長さＬｍａｘは、図７における所定の長さＬｍａｘと同じである。カウンタ値ｋが所定の長さＬｍａｘ以上であれば（Ｓ１２０６：Ｙｅｓ）、参照部１２２は、一致長Ｌ２ｂにカウンタ値ｋを代入し、最長一致位置Ｑ２ｂに参照位置Ｑ６の値を代入する（Ｓ１２０７）。図１８のＳ１２０７の処理に示される「＝」は代入演算子を示す。カウンタ値ｋが所定の長さＬｍａｘ以上でなければ（Ｓ１２０６：Ｎｏ）、参照部１２２は、再度Ｓ１２０３の判定を行なう。Ｓ１２０６およびＳ１２０７は付加的な手順であり、Ｓ１２０５が行なわれると必ずＳ１２０３の判定が行なわれることとしてもよい。
【０１１０】
位置（Ｑ３＋ｋ）の識別子が「１０」または「１１」である場合（Ｓ１２０３：Ｎｏ）か、位置（Ｑ３＋ｋ）の単位データと位置（Ｑ６＋ｋ）の単位データとが一致しない場合（Ｓ１２０４：Ｎｏ）には、参照部１２２は、カウンタ値ｋが一致長Ｌ２ｂよりも大きいか否かを判定する（Ｓ１２０８）。カウンタ値ｋが一致長Ｌ２ｂよりも大きい場合（Ｓ１２０８：Ｙｅｓ）には、参照部１２２は、一致長Ｌ２ｂにカウンタ値ｋを代入し、最長一致位置Ｑ２ｂに参照位置Ｑ６の値を代入する（Ｓ１２０９）。カウンタ値ｋが一致長Ｌ２ｂ以下である（Ｓ１２０８：Ｎｏ）か、Ｓ１２０９の処理が行なわれると、参照部１２２は、参照位置Ｑ６をインクリメントする（Ｓ１２１０）。
【０１１１】
参照部１２２は、Ｓ１２１０でインクリメントされた参照位置Ｑ６が終了位置Ｑ５であるか否かを判定する（Ｓ１２１１）。Ｓ１２１１において参照位置Ｑ６が開始位置Ｑ４に設定されれば上述の通りであるが、参照位置Ｑ６が更新位置Ｑ７に設定されるならば、参照位置Ｑ６が更新位置Ｑ７であるか否かがＳ１２１１で判断される。参照位置Ｑ６が更新位置Ｑ７に初期設定されるならば、参照位置Ｑ６が終了位置Ｑ５に達した場合にはＳ１２１０の処理で参照位置Ｑ６は開始位置Ｑ４に戻される。図１８のＳ１２１１の処理に示される「Ｑ６＝Ｑ５」の「＝」は等号を示す。参照位置Ｑ６が終了位置Ｑ５でない場合（Ｓ１２１１：Ｎｏ）には、参照部１２２はＳ１２０２の処理を再度行なう。
【０１１２】
参照位置Ｑ６が終了位置Ｑ５である（Ｓ１２１１：Ｙｅｓ）か、Ｓ１２０７の処理が行なわれた場合には、参照部１２２は、最長一致位置Ｑ２ｂおよび一致長Ｌ２ｂを制御部１２１に返し、記憶領域Ｂ２の参照処理を終了する（Ｓ１２１２）。
【０１１３】
制御部１２１は、図１８の手順で得られた一致長Ｌ２ｂが所定の長さＬｍｉｎ以上である場合に、更新部１２５に記憶領域Ｂ３の更新処理を行なわせる。更新部１２５は、記憶領域Ｂ２内の最長一致位置Ｑ２ｂから長さＬ２ｂのデータを読出し、読みだしたデータを記憶領域Ｂ３の更新位置Ｑ１４に格納する。更新部１２５の処理により、変形例においても、記憶領域Ｂ３は記憶領域Ａ３と同じ状態に保たれる。
【０１１４】
上述の伸張処理によれば、記憶領域Ｂ３を、圧縮処理に用いられる記憶領域Ａ３と同じ状態に更新しつつ伸張が行なわれる。
【０１１５】
下記に、本実施形態に用いられるハードウェア及びソフトウェアについて説明する。
【０１１６】
図１９は、コンピュータ１のハードウェア構成例を示す。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【０１１７】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【０１１８】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【０１１９】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力デバイス３０７は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていてもよいし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であってもよい。 
【０１２０】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って圧縮部１１の処理または伸張部１２の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１３の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（圧縮対象のファイルＦ１、圧縮されたファイルＦ２など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図２２を用いて説明する。
【０１２１】
図２０は、コンピュータ１で動作するプログラムの構成例を示す。コンピュータ１において、図１９に示すハードウェア群２１（３０１〜３１２）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群２１の制御・管理が行なわれることにより、アプリケーションプログラム２４やミドルウェア２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア２３またはアプリケーションプログラム２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【０１２２】
プロセッサ３０１が、圧縮機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）圧縮部１１の機能が実現される。また、プロセッサ３０１が、伸張機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）伸張部１２の機能が実現される。圧縮機能および伸張機能は、それぞれアプリケーションプログラム２４自体に含まれてもよいし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の一部であってもよい。
【０１２３】
アプリケーションプログラム２４（またはミドルウェア２３）の圧縮機能では、処理対象のデータに合致するデータを抽出するための検索範囲が抑制されるため、プロセッサ３０１のメモリアクセスの負荷が抑制される。そのため、ＲＡＭ３０２上にワークエリアを確保する時間も削減される。
【０１２４】
図２１は、実施形態のシステムにおける装置の構成例を示す。図２１のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【０１２５】
図３に示す圧縮部１１と伸張部１２とは、図２１に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれてもよい。コンピュータ１ｂが圧縮部１１を含み、コンピュータ１ａが伸張部１２を含んでもよいし、コンピュータ１ａが圧縮部１１を含み、コンピュータ１ｂが伸張部１２を含んでもよい。また、コンピュータ１ａとコンピュータ１ｂとの双方が、圧縮部１１および伸張部１２を備えてもよい。
【０１２６】
本実施形態の圧縮処理によれば、圧縮処理に要する処理時間を低減される。また、本実施形態の圧縮処理は、最長一致データ列と判定されたデータ列のみが格納される記憶領域内のデータと再度一致判定が行なわれるので、繰り返し同じデータ列が用いられるファイル（例えば、住所録など）ほど、この効果が増大する。
【０１２７】
以下、上述の実施形態における変形例の一例を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行なわれうる。
【０１２８】
図２２は、抽出回数カウントの例を示す。記憶領域Ａ５は、記憶領域Ａ３に格納される各単位データに対応する数値を格納可能な記憶領域である。各単位データに対応する数値は、最長一致データ列として抽出された回数を示す。図２２において、記憶領域Ａ３に格納された単位データ「ｈ」が最長一致データ列の一部として抽出された回数は８回であることが示されている。記憶領域Ａ５において、各単位データに対応する数値は、例えば４ビットで表現される。すると、各単位データについて１５回まで抽出された回数をカウント可能となる。例えば、図５のＳ１０８において、制御部１１１が記憶領域Ａ３から最長一致位置Ｐ３ａから一致長Ｌ３ａのデータを読み出す際に、読み出すデータに対応する数値のそれぞれをインクリメントすることにより、抽出された回数がカウントされる。また、図８のＳ４０４で更新位置Ｐ１１へのデータの書込みを行なう際に、書込みが行なわれた位置のデータに対応する数値がリセットされる。
【０１２９】
抽出された回数は、例えば、記憶領域Ａ３の更新の際に利用される。Ｓ４０４でデータが格納される位置のデータの抽出回数が閾値よりも大きい場合には、Ｓ４０５の処理後、再度Ｓ４０４の処理でそのデータの格納を行なうこととしてもよい。
【０１３０】
ファイルＦ１内に何度も同じデータが出現するならば、記憶領域Ａ３が除かれたデータを記憶領域Ａ２への参照により再度記憶領域Ａ３に格納することとなってしまう。しかしながら、抽出回数をカウントし、抽出回数の多いデータを記憶領域Ａ３内に再登録することとすると、記憶領域Ａ２への参照回数が抑制される。
【０１３１】
図２２の仕組みを圧縮処理に用いた場合には、伸張処理にも同様の仕組みが設けられる。伸張処理においては、図１３のＳ７０５において抽出回数がカウントされる。また、図１６のＳ１００３において、抽出回数を示す値がリセットされ、さらに閾値よりも大きいか否かが判定される。抽出回数が閾値よりも大きい場合には、Ｓ１００４の処理後、再度Ｓ１００３の処理が行なわれ記憶領域Ａ３に格納される。
【０１３２】
図２３は、記憶領域Ａ２および記憶領域Ａ３のサイズ制御の例を示す。上述の圧縮処理の手順に従うと、圧縮処理の序盤においては記憶領域Ａ３内に格納されるデータは少ない。記憶領域Ａ３内にデータが多く格納されている方が本実施例の圧縮処理による圧縮符号が生成される確率が高くなるので、なるべく早期に記憶領域Ａ３内にデータが格納された方が圧縮ファイル内の本実施例の圧縮処理による圧縮符号割合が高くなり、圧縮率向上が見込まれる。記憶領域Ａ２内のデータが多い方が処理対象のデータと一致するデータが見つかりやすいので、記憶領域Ａ２のデータサイズが多い方が早く記憶領域Ａ３内にデータが格納される確率が高くなる。すなわち、圧縮処理の序盤においては、記憶領域Ａ３のサイズは大きくなくても構わないが、記憶領域Ａ２のサイズが大きい方が圧縮率の向上が見込める。
【０１３３】
一方、記憶領域Ａ３内にデータがたまると、処理対象のデータと一致するデータが記憶領域Ａ３内から抽出されやすくなる。ファイルＦ１内のデータについて記憶領域Ａ３の参照による圧縮符号化が行なわれやすくなると、記憶領域Ａ３の更新が頻繁に行なわれなくとも圧縮率は維持される。その一方で、ファイルＦ１内には、繰り返されるデータだけでなく１回しか出現しないデータも出現しうるので、そういったデータに対して、記憶領域Ａ２の参照自体が無駄な処理となってしまう。
【０１３４】
そこで、例えば、制御部１１１は、記憶領域Ａ３に閾値以上のデータが格納されたら（更新位置Ｐ１１が閾値を超えたら）、記憶領域Ａ２のデータサイズを小さくする制御を行なってもよい。この場合に、例えば、記憶領域Ａ２内の古いデータから削除される。すなわち、更新位置Ｐ７からデータサイズ変更分のデータが削除される。図２３は、更新位置Ｐ１１が閾値を超えていない段階の記憶領域Ａ２から、更新位置Ｐ７以降のデータが除かれて、更新位置Ｐ１１が閾値を超えた段階の記憶領域Ａ２となっている様を模式的に示している。
【０１３５】
また、記憶領域Ａ２のサイズを小さくする制御を行なうとともに、記憶領域Ａ３のサイズを大きくする制御を行なってもよい。これにより、記憶領域Ａ３内に格納されるデータであって何度も最長一致データ列に含まれるデータが記憶領域Ａ３の更新処理により削除されてしまうこと、もしくは図２２を用いて説明した制御が行なわれることの頻度が低減される。
【０１３６】
図２３に示されるサイズ制御が行なわれる場合には、制御部１２１も記憶領域Ｂ２および記憶領域Ｂ３に対して同様のサイズ制御を行なう。これにより圧縮側と伸張側とで同一のデータの参照により符号の変換が行なわれる。
【０１３７】
また、圧縮処理の対象は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮処理により圧縮し、ログファイルとして格納するなどの処理が行なわれる。また、例えば、データベース内のページ単位に圧縮が行なわれてもよいし、複数のページをまとめた単位で圧縮が行なわれてもよい。
【０１３８】
また、上述の圧縮処理の対象となるデータは、上述の通り、文字情報に限定されるものでない。数値のみの情報であってもよいし、画像・音声などのデータに対して上述の圧縮処理を用いてもよい。例えば、音声合成により得られるデータを多量に含むファイルなどは、データ内に繰り返しを多く含むため動的辞書により圧縮率が向上することが見込まれる。また、固定カメラにより撮影された動画像についても各フレームの画像が似たものになることから繰り返しが多く含まれる。そのため、上述の圧縮処理を適用することにより、文書データや音声データと同様の効果を得ることができる。
【符号の説明】
【０１３９】
１        コンピュータ
２        基地局
３        ネットワーク
１ａ      コンピュータ
１ｂ      コンピュータ
１１      圧縮部
１２      伸張部
１３      記憶部
１１１    制御部
１１２    参照部
１１３    更新部
１１４    参照部
１１５    更新部
１２１    制御部
１２２    参照部
１２３    更新部
１２４    参照部
１２５    更新部
【図１】
0006032291.tif 000002
【図２】
0006032291.tif 000003
【図３】
0006032291.tif 000004
【図４】
0006032291.tif 000005
【図５】
0006032291.tif 000006
【図６】
0006032291.tif 000007
【図７】
0006032291.tif 000008
【図８】
0006032291.tif 000009
【図９】
0006032291.tif 000010
【図１０】
0006032291.tif 000011
【図１１】
0006032291.tif 000012
【図１２】
0006032291.tif 000013
【図１３】
0006032291.tif 000014
【図１４】
0006032291.tif 000015
【図１５】
0006032291.tif 000016
【図１６】
0006032291.tif 000017
【図１７】
0006032291.tif 000018
【図１８】
0006032291.tif 000019
【図１９】
0006032291.tif 000020
【図２０】
0006032291.tif 000021
【図２１】
0006032291.tif 000022
【図２２】
0006032291.tif 000023
【図２３】
0006032291.tif 000024