(57)【特許請求の範囲】
【請求項１】
バイト単位に上位から下位の順にアドレスを指定してデータを記憶する記憶部に、複数バイトからなる文字列データを記憶し、
前記記憶部に記憶した文字列データから、各アドレスを起点とする第１バイト長の文字列及び該第１バイト長よりも長い第２バイト長の文字列を、夫々アドレス順次に抽出し、
抽出した第１及び第２バイト長の文字列夫々について、抽出した文字列同士が一致する一致文字列夫々の先頭バイトのアドレスのうち、任意の第１アドレスよりも上位であり、該第１アドレスに最も近い第２アドレスの情報を、該第１アドレスに関連付けて記憶し、
関連付けて記憶した前記第１及び第２アドレスを参照して、前記第２バイト長の一致文字列を含む重複文字列、及び前記第１バイト長の一致文字列と一致する文字列を、前記記憶部に記憶した文字列データから検出し、
検出した結果に基づき、前記文字列データを符号化する
ことを特徴とする符号化方法。
【請求項２】
前記第２バイト長の一致文字列を含む重複文字列を検出する場合、各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする請求項１に記載の符号化方法。
【請求項３】
前記第２バイト長の一致文字列を含む重複文字列を検出する場合、予め定めた上限回数の範囲内で各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする請求項１に記載の符号化方法。
【請求項４】
前記第１及び第２バイト長の文字列から取得した前記第２アドレスの情報のうち、前記第２バイト長の文字列から取得した第２アドレスの情報を優先的に選択して、第２アドレスの情報と一致文字列のバイト長とを関連付けたリストを生成し、
前記第２バイト長の一致文字列を含む文字列、及び前記第１バイト長の一致文字列と一致する文字列を検出する際、前記リストを参照する
ことを特徴とする請求項１から請求項３の何れか１つに記載の符号化方法。
【請求項５】
前記第１バイト長は、ｎバイト（ｎは２以上の整数）であり、前記第２バイト長はｎ＋１バイト長であることを特徴とする請求項１から請求項４の何れか１つに記載の符号化方法。
【請求項６】
複数バイトからなる文字列データを、バイト単位に上位から下位の順にアドレスを指定して記憶する記憶部、
該記憶部に記憶した文字列データから、各アドレスを起点とする第１バイト長の文字列及び該第１バイト長よりも長い第２バイト長の文字列を、夫々アドレス順次に抽出する抽出部、
該抽出部により抽出した第１及び第２バイト長の文字列夫々について、抽出した文字列同士が一致する一致文字列夫々の先頭バイトのアドレスのうち、任意の第１アドレスよりも上位であり、該第１アドレスに最も近い第２アドレスの情報と、該第１アドレスとを関連付けて記憶したリストを生成するリスト生成部、
該リスト生成部が生成したリストに基づき、前記第２バイト長の一致文字列を含む重複文字列、及び前記第１バイト長の一致文字列と一致する文字列を、前記記憶部に記憶した文字列データから検出する検出部、及び
該検出部による検出結果に基づき、前記文字列データを符号化する符号化部
を備えることを特徴とする符号化装置。
【請求項７】
バイト単位に上位から下位の順にアドレスを指定して文字列データを記憶する記憶部を備えたコンピュータに、
該記憶部に記憶した文字列データから、各アドレスを起点とする第１バイト長の文字列及び該第１バイト長よりも長い第２バイト長の文字列を、夫々アドレス順次に抽出する抽出処理、
該抽出処理により抽出した第１及び第２バイト長の文字列夫々について、抽出した文字列同士が一致する一致文字列夫々の先頭バイトのアドレスのうち、任意の第１アドレスよりも上位であり、該第１アドレスに最も近い第２アドレスの情報と、該第１アドレスとを関連付けて記憶したリストを生成するリスト生成処理、
該リスト生成処理により生成したリストに基づき、前記第２バイト長の一致文字列を含む重複文字列、及び前記第１バイト長の一致文字列と一致する文字列を、前記記憶部に記憶した文字列データから検出する検出処理、及び
該検出処理による検出結果に基づき、前記文字列データを符号化する符号化処理
を実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを符号化する符号化方法、符号化装置及びコンピュータプログラムに関する。
【背景技術】
【０００２】
近年、コンピュータ等の情報処理装置では、文字コード、プログラムコード、数値データ、画像データ、動画データ等の様々な種類のデータが利用されており、情報処理装置が備える記憶装置の大容量化に伴い、データ量も増大している。情報処理装置にて大量のデータを利用する場合、データ中の冗長な部分を省いて符号化することにより、必要な記憶容量を減らしたり、遠隔地へ高速に伝送したりすることが行われている。
【０００３】
従来の符号化技術として、ＬＺ７７符号化が知られている。ＬＺ７７符号化では、一定サイズのスライドバッファを設け、このスライドバッファ内で入力文字列と最長一致する文字列を検索し、一致する文字列の出現位置と一致長とを用いて入力文字列を符号化することを行う。
【０００４】
ＬＺ７７符号化により符号化されたデータは、出現位置及び一致長により特定される文字列の単純なコピーにより復号することが可能であるため、高速な復号処理が可能である。このため、ソフトウェアアップデートなど、復号のみが多用されるケースでは、高速な復号処理が可能なＬＺ７７符号化が用いられることが多い。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００４／０６２１１０号
【特許文献２】特開２００１−３４５７１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＬＺ７７符号化の実装における課題の１つは、符号化処理における重複文字列の検出をいかに高速に行うかである。
重複文字列の検出手法として、予め定めた長さ（例えば、３バイト）の接頭語の最近出現位置リストを作成しておき、この最近出現位置リストを利用する手法が提案されている。すなわち、最近出願位置リストを参照し、符号化対象の文字列（接頭語）と同じ文字列の出現箇所を順に辿ることによって、より長く一致する重複文字列を検出する（特許文献１及び２を参照）。
【０００７】
しかしながら、前述の従来手法では、同じ接頭語を持つ文字列が多い場合に、重複文字列の候補が多くなり、重複文字列の検出に時間がかかるという問題点を有していた。例えば、プログラムコードや数値データなどは、一致する３バイト長の文字列（同一の接頭語）が多数出現すると共に、その接頭語に１バイトの文字を付加したバリエーションが多数存在するため、最近出現位置リストをリンクドリストとして用いて重複文字列を検出する場合、検出時間が長くなるという問題点を有していた。
【０００８】
本願は、上記の課題を解決するため、符号化処理における重複文字列の検出を高速化することができる符号化方法、符号化装置及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願に開示する符号化方法は、バイト単位に上位から下位の順にアドレスを指定してデータを記憶する記憶部に、複数バイトからなる文字列データを記憶し、前記記憶部に記憶した文字列データから、各アドレスを起点とする第１バイト長の文字列及び該第１バイト長よりも長い第２バイト長の文字列を、夫々アドレス順次に抽出し、抽出した第１及び第２バイト長の文字列夫々について、抽出した文字列同士が一致する一致文字列夫々の先頭バイトのアドレスのうち、任意の第１アドレスよりも上位であり、該第１アドレスに最も近い第２アドレスの情報を、該第１アドレスに関連付けて記憶し、関連付けて記憶した前記第１及び第２アドレスを参照して、前記第２バイト長の一致文字列を含む重複文字列、及び前記第１バイト長の一致文字列と一致する文字列を、前記記憶部に記憶した文字列データから検出し、検出した結果に基づき、前記文字列データを符号化する。
【発明の効果】
【００１０】
本願によれば、符号化処理における重複文字列の検出を高速化することができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態に係る符号化装置の機能的構成を示すブロック図である。
【図２】本実施の形態に係る符号化装置のハードウェア構成を示すブロック図である。
【図３】入力バッファに記憶した文字列データの一例を示す図である。
【図４】順位リストの一例を示す図である。
【図５】最近出現位置リストの一例を示す図である。
【図６】統合リストの一例を示す図である。
【図７】符号化手法を説明する説明図である。
【図８】符号化処理の処理手順を説明するフローチャートである。
【図９】符号化処理の処理手順を説明するフローチャートである。
【図１０】実施の形態２に係る符号化処理の処理手順を説明するフローチャートである。
【図１１】実施の形態２に係る符号化処理の処理手順を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本願をその実施の形態を示す図面に基づいて具体的に説明する。
実施の形態１．
図１は本実施の形態に係る符号化装置の機能的構成を示すブロック図である。本実施の形態に係る符号化装置は、入力部１１、記憶部１２、抽出部１３、リスト生成部１４、リスト統合部１５、検出部１６、及び符号化部１７を備える。記憶部１２が備える記憶領域の一部は、符号化対象のデータをバッファサイズ分ずつ記憶する入力バッファ１２１、及び入力バッファ１２１に記憶した符号化対象のデータから生成されるリストを記憶するための順位リスト保持部１２２ａ〜１２２ｃ、最近出現位置リスト保持部１２３ａ〜１２３ｃ、統合リスト保持部１２４として利用される。
【００１３】
入力部１１は、装置外部から入力された符号化対象のデータを記憶部１２に記憶させる。符号化対象のデータは、例えば、文字コード、画像データ、プログラムコード、数値データなどの各種データを含み、複数バイト長の文字列により構成される。記憶部１２には、適宜のサイズからなる入力バッファ１２１が設けられ、符号化対象のデータは、入力バッファ１２１のバッファサイズ分ずつ切り出され、入力バッファ１２１にて記憶される。
なお、符号化対象のデータは、入力部１１を通じて装置外部から入力されるものだけでなく、装置内部で生成されたデータを符号化対象としてもよい。
【００１４】
抽出部１３は、入力バッファ１２１に記憶した文字列データから、入力バッファ１２１中の各アドレスを起点として、例えば、３バイト長の文字列（３バイト文字列）、４バイト長の文字列（４バイト文字列）、及び５バイト長の文字列（５バイト文字列）をアドレス順次に抽出する。
リスト生成部１４は、抽出部１３が抽出した３バイト文字列、４バイト文字列、及び５バイト文字列の夫々について、抽出した文字列同士が一致する一致文字列を検出する。次いで、リスト生成部１４は、検出した一致文字列同士の相対位置を示す情報をリスト化することにより、最近出現位置リストを生成する。リスト生成部１４は、生成した最近出現位置リストを最近出現位置リスト保持部１２３ａ〜１２３ｃに記憶する。
【００１５】
リスト統合部１５は、最近出現位置リスト保持部１２３ａ〜１２３ｃに記憶した最近出現位置リストを１つに統合し、統合リストを生成する。このとき、リスト統合部１５は、最も長いバイト長の文字列（本実施の形態では５バイト文字列）の一致を優先的に選択し、一致文字列のバイト長（接頭語の長さ）及び一致文字列の相対位置を関連付けて記憶することにより、統合リストを生成する。リスト統合部１５は、生成した統合リストを統合リスト保持部１２４に記憶する。
【００１６】
検出部１６は、統合リスト保持部１２４に記憶した統合リストを参照して、入力バッファ１２１内の重複文字列を検出する。ここで、最長の接頭語（本実施の形態では、５バイト文字列）を含む重複文字列を検出する場合、検出部１６は、各一致文字列の先頭バイトまで遡ってその接頭語を含んだ重複文字列を検出する。それ以外の長さの接頭語（本実施の形態では、３バイト文字列及び４バイト文字列）を検出する場合、検出部１６は、統合リストに記憶されている相対位置で検出を終了する。
【００１７】
符号化部１７は、入力バッファ１２１に記憶した文字列データを、検出部１６が検出した重複文字列の（相対位置，一致長）により符号化を行う。符号化部１７が出力する符号データは、例えば、圧縮データとして出力ファイルに格納され、必要に応じてファイル転送又はファイル格納が実行される。
【００１８】
本実施の形態では、入力バッファ１２１に記憶した文字列データから、３バイト長、４バイト長及び５バイト長の各文字列を抽出して符号化する構成について説明するが、抽出する文字列のバイト長は適宜設定することが可能である。例えば、本実施の形態では、３種類のバイト長の文字列を抽出する構成としたが、２種類以上のバイト長の文字列を抽出すればよく、ｎバイト長及びｎ＋１バイト長（ここで、ｎは２以上の整数、例えばｎ＝３）の文字列を抽出する構成としてもよい。また、抽出する文字列のバイト長は、連続した整数値をとる必要はなく、３バイト長、４バイト長、５バイト長、８バイト長のように、離散的な整数値に設定してもよい。
【００１９】
図２は本実施の形態に係る符号化装置のハードウェア構成を示すブロック図である。本実施の形態に係る符号化装置は、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、通信インタフェース１０４、ハードディスクドライブ１０５、光ディスクドライブ１０６、キーボード１０７、及びディスプレイ１０８を備える。
【００２０】
ＲＯＭ１０２には、上述したハードウェア各部の動作を制御するために必要な制御用プログラムが予め格納されている。また、ハードディスク１０５Ｄには、符号化装置に入力された文字列データを符号化するためのコンピュータプログラムが予め格納されている。
【００２１】
ＣＰＵ１０１は、適宜のタイミングでＲＯＭ１０２又はハードディスク１０５Ｄに格納されているコンピュータプログラムをＲＡＭ１０３上に読み出して実行することにより、上述したハードウェア各部の動作を制御し、装置全体を本願の符号化装置として動作させる。
【００２２】
ＲＡＭ１０３は、ＤＲＡＭ（Dynamic RAM）、ＳＲＡＭ（Static RAM）、フラッシュメモリなどのデータを一時的に記憶するためのメモリである。ＲＡＭ１０３には、上述した入力バッファ１２１及び各種リスト保持部１２２ａ〜１２２ｃ，１２３ａ〜１２３ｃ，１２４が設けられ、符号化対象のデータを記憶すると共に、ＣＰＵ１０１によるコンピュータプログラムの実行時に発生する種々のデータ（例えば、各種パラメータ、演算の途中経過、演算結果等）を一時的に記憶する。
【００２３】
通信インタフェース１０４は、通信ネットワーク（不図示）を介して、外部の装置と通信を行うためのインタフェースである。
【００２４】
ハードディスクドライブ１０５は、ハードディスク１０５Ｄに対してデータの書き込み、及びハードディスク１０５Ｄからのデータの読み出しを制御する。ハードディスクドライブ１０５は、キーボード１０７を通じて受付けた情報、通信インタフェース１０４にて受信した情報、光ディスクドライブ１０６により光ディスク１０６Ｄから読み出された情報等をハードディスク１０５Ｄに書き込むことにより、ハードディスク１０５Ｄに各種情報を記憶させる。
【００２５】
光ディスクドライブ１０６は、光ディスク１０６Ｄに対してデータの書き込み、及び光ディスク１０６Ｄに記録されたデータの読み出しを制御する。なお、本実施の形態では、本願のコンピュータプログラムがハードディスク１０５Ｄに記憶されているものとするが、光ディスク１０６Ｄに記録された状態で提供されるものであってもよい。
【００２６】
キーボード１０７は、ユーザによる操作及び文字入力を受付ける。ディスプレイ１０８は、ユーザに報知すべき情報を表示する。
【００２７】
なお、符号化装置のハードウェア構成は上記のものに限定されるものではない。例えば、通信ネットワークを介して符号化装置１０の遠隔操作が可能である場合には、光ディスクドライブ１０６、キーボード１０７、ディスプレイ１０８等が省略されていてもよい。
【００２８】
符号化装置は、ハードディスク１０５Ｄに格納されたコンピュータプログラムをＣＰＵ１０１に実行させ、ＲＯＭ１０２に格納された制御用プログラムに従ってハードウェア各部を制御することにより、図１に示した記憶部１２、抽出部１３、リスト生成部１４、リスト統合部１５、検出部１６、及び符号化部１７としての機能を実現する。
【００２９】
次に、符号化装置の各処理部が実行する処理内容について説明する。図３は入力バッファ１２１に記憶した文字列データの一例を示す図である。図３に一例として示した入力バッファ１２１のバッファサイズは３４バイトであり、入力バッファ１２１中の各アドレス「１」〜「３４」に対応付けて、文字列データ「ａｂｃｄｅ…ｆｇｈ」の各文字を記憶している様子を示している。
【００３０】
抽出部１３は、入力バッファ１２１に記憶した文字列データから、各アドレスを起点とする３バイト文字列、４バイト文字列、及び５バイト文字列をそれぞれアドレス順次に抽出する。
例えば、図３に示す文字列データから３バイト文字列を抽出する場合、抽出部１３は、入力バッファ１２１の先頭アドレスであるアドレス「１」を起点として文字列「ａｂｃ」を抽出し、次いで、アドレス「２」を起点とする文字列「ｂｃｄ」、アドレス「３」を起点とする文字列「ｃｄｅ」、…、アドレス「３４」を起点とする文字列「ｈ＿＿」のように、アドレスを１バイトずつ変更しながら３バイト長の文字列を順次抽出する。ここで、「＿」は該当する文字が存在しないことを示している。
４バイト文字列及び５バイト文字列を抽出する場合についても全く同様であり、抽出部１３は、入力バッファ１２１に記憶した文字列データから、各アドレスを起点とする４バイト文字列及び５バイト文字列をアドレス順次に抽出する。
【００３１】
抽出部１３は、抽出した文字列をソートして各バイト長の文字列について順位リストを生成する。図４は順位リストの一例を示す図である。例えば、図３に示す文字列データからアドレス順次に３バイト文字列を抽出した場合、前述したように、「ａｂｃ」、「ｂｃｄ」、「ｃｄｅ」、…等の文字列が得られる。抽出した文字列を、例えば、文字コードの小さい順にソートした場合、アドレス「１」，「９」，「１５」，「２１」及び「２７」を起点として抽出される「ａｂｃ」の文字列が第１順位となるので、これらのアドレスを「ａｂｃ」の文字列と関連付けて順位リストに記憶する。同様に、抽出部１３は、ソート結果の順に、ソートした文字列と当該文字列の先頭アドレスとを関連付けて記憶することにより、順位リストを生成する。図４（ａ）は、３バイト文字列から生成した順位リストの一例を表す。
４バイト文字列及び５バイト文字列をソートする場合も全く同様であり、４バイト文字列及び５バイト文字列から生成した順位リストは、それぞれ図４（ｂ）及び図４（ｃ）に示したようになる。
【００３２】
リスト生成部１４は、抽出部１３が生成した順位リストを参照し、最近出現位置リストを生成する。ここで、最近出現位置は、抽出した各バイト長の文字列同士が一致する一致文字列夫々の先頭アドレスのうち、任意のアドレス（第１アドレス）よりも上位であり、このアドレス（第１アドレス）に最も近いアドレス（第２アドレス）の位置を表す。最近出現位置リストは、入力バッファ１２１中のアドレス毎に最近出現位置を記憶したリストである。
【００３３】
例えば、図４（ａ）に示す順位リストを参照した場合、入力バッファ１２１のアドレス「９」を起点として抽出した「ａｂｃ」という文字列は、アドレス「１」、「１５」、「２１」、「２７」から抽出した文字列に一致する。このうち、アドレス「９」より上位であり、かつアドレス「９」に最も近いアドレスは、アドレス「１」である。このため、リスト生成部１４は、アドレス「９」からみたアドレス「１」の相対位置（＝８）を、アドレス「９」に関連付けて記憶する。なお、該当する最近出現位置が存在しない場合には「０」を記憶する。
このように、リスト生成部１４は、最近出現した文字列がない場合には「０」を、文字列がある場合にはその相対位置を示す値をアドレス毎に記憶して、最近出現位置リストを生成する。図５は最近出現位置リストの一例を示す図であり、図５（ａ）〜図５（ｃ）は、それぞれ３バイト文字列、４バイト文字列、５バイト文字列について生成した最近出現位置リストを表している。
【００３４】
リスト統合部１５は、各バイト長の文字列についての最近出現位置リストを１つに統合する。このとき、リスト統合部１５は、より長いバイト長の文字列を優先的に選択し、相対位置を示す値及び一致する文字列のバイト長をアドレス毎に記憶して、統合リストを生成する。図６は統合リストの一例を示す図である。図６に示した統合リストの上段は一致文字列（接頭語）のバイト長を表し、下段は、相対位置を示す値を表している。
【００３５】
例えば、図５（ａ）〜図５（ｃ）に示す各最近出現位置リストのアドレス「１」〜「８」の欄を参照した場合、何れも「０」が記憶されているため、リスト統合部１５は、統合リストのバイト長及び相対位置の欄に「０」を記憶する。
次いで、各最近出現位置リストのアドレス「９」の欄を参照した場合、一致文字列の相対位置を示す値として「８」が記憶されている。この場合、リスト統合部１５は、より長いバイト長の相対位置、すなわち５バイト長の一致文字列の相対位置を示す「８」を選択し、バイト長及び相対位置を示す値（「５」及び「８」）を統合リストに記憶する。
以下同様にして、リスト統合部１５は、アドレス毎に採用する相対位置を選択し、選択した相対位置を示す値、及び一致文字列のバイト長を記憶することにより、統合リストを生成する。
【００３６】
検出部１６は、統合リストを参照して重複文字列を検出する。このとき、検出部１６は、最長バイト長の５バイト文字列については、各一致文字列の先頭バイトまで遡って検出対象の文字列を含んだ重複文字列を検出し、それ以外のバイト長の文字列（３バイト文字列及び４バイト文字列）については、統合リストに記憶された相対位置で検出を終了する。すなわち、検出部１６は、接頭語のバイト長が最長バイト長である場合にのみ、統合リストをリンクドリストとして使用して重複文字列の検出を行う。
符号化部１７は、検出部１６による検出結果を利用して、重複文字列の（相対位置，一致長）で入力バッファ１２１に記憶された文字列データを符号化する。
【００３７】
図７は符号化手法を説明する説明図である。入力バッファ１２１に、図３に示した文字列データが記憶されているものとした場合、前述したように、図６に示した統合リストが得られる。入力バッファ１２１の先頭バイト（アドレス「１」）から順次符号化を行い、現在の符号化位置がアドレス「２４」であったとする。統合リストのアドレス「２４」の欄を参照すると、相対位置は「１３」であり、記憶されているバイト長は「３」であるため、検出部１６は、アドレス「２４」を先頭バイトとする３バイト文字列「ｃｂｅ」と一致する文字列を、アドレス「２４」から１３バイト前の位置（アドレス「１１」）から検出する。この場合、３バイト文字列「ｃｂｅ」が重複文字列として検出される。統合リストのアドレス「２４」の欄に記憶されているバイト長は最長バイト長の「５」ではないため、検出部１６は、検出した位置以外に一致候補は存在しないと判断し、アドレス「１１」の位置で検出を終了する。検出結果により得られる重複文字列「ｃｂｅ」の相対位置及び一致長は１３及び３であるため、符号化部１７は、アドレス「２４」を先頭バイトとする３バイト文字列「ｃｄｅ」を、（１３，３）で符号化する。
【００３８】
アドレス「２４」を先頭バイトとする３バイト文字列の符号化が完了したので、符号化部１７は、次の符号化位置をアドレス「２７」に設定する。統合リストのアドレス「２７」の欄を参照すると、相対位置は「１８」であり、記憶されているバイト長は「５」であるため、検出部１６は、アドレス「２７」を先頭バイトとする５バイト文字列「ａｂｃｄｅ」を含む重複文字列を、アドレス「２７」から１８バイト前の位置（アドレス「９」）から検出する。この場合、アドレス「９」からアドレス「１４」までの６バイト文字列「ａｂｃｄｅｆ」が第１候補の重複文字列として検出される。
【００３９】
統合リストのアドレス「２７」の欄に記憶されているバイト長は最長バイト長の「５」であるため、検出部１６は、検出した位置以外に一致候補が存在する可能性があると判断し、更に入力バッファ１２１中のアドレスを上位アドレス側へ遡って一致候補、すなわち、前述した５バイト文字列「ａｂｃｄｅ」を含む重複文字列を検出する。この結果、アドレス「１」からアドレス「８」までの８バイト文字列「ａｂｃｄｅｆｇｈ」が第２候補の重複文字列として検出される。
【００４０】
検出部１６による検出により複数の候補が得られた場合、符号化部１７は、最も長いバイト長の重複文字列を選択し、選択した重複文字列の相対位置及び一致長で文字列を符号化する。前述した例では、第２候補の重複文字列の方が第１候補の重複文字列より長いため、符号化部１７は、第２候補の重複文字列を選択し、選択した第２候補の重複文字列の相対位置及び一致長で文字列を符号化する。すなわち、符号化位置であるアドレス「２７」からみた第２候補の重複文字列の相対位置は「２６」であり、一致長は「８」であるため、符号化部１７は、アドレス「２７」を先頭とする８バイト文字列「ａｂｃｄｅｆｇｈ」を、（２６，８）で符号化する。
【００４１】
このようにして、検出部１６及び符号化部１７は、入力バッファ１２１の先頭バイトから最終バイトまで検出及び符号化を繰り返して実行することにより、入力バッファ１２１に記憶された文字列データを符号化する。
【００４２】
次に、符号化装置が実行する符号化処理の処理手順について説明する。図８及び図９は符号化処理の処理手順を説明するフローチャートである。符号化装置は、まず、入力バッファ１２１に符号化対象のデータを入力する（ステップＳ１１）。入力するデータは文字列データであり、対象の文字列データのバイト数が入力バッファ１２１のバッファサイズより大きい場合、バッファサイズ分だけ切出して文字列データを入力バッファ１２１に記憶する。ここで、入力バッファ１２１の表記をＩｎＢｕｆ［ＢＵＦＦ＿ＳＩＺＥ］とする。ＢＵＦＦ＿ＳＩＺＥは、入力バッファ１２１のバッファサイズを表す。
【００４３】
次いで、符号化装置の抽出部１３は、入力バッファ１２１に記憶した文字列データから、各アドレスを起点とする３バイト文字列、４バイト文字列、及び５バイト文字列をそれぞれアドレス順次に抽出する。抽出部１３は、抽出した３バイト文字列、４バイト文字列、及び５バイト文字列をそれぞれソートして、各バイト長の順位リストを生成し、生成した順位リストを記憶部１２内の順位リスト保持部１２２ａ〜１２２ｃに記憶する。
【００４４】
リスト生成部１４は、順位リスト保持部１２２ａ〜１２２ｃに記憶した順位リストを参照して、最近出現位置リストを生成する（ステップＳ１２）。このとき、リスト生成部１４は、３バイト文字列、４バイト文字列、及び５バイト文字列の夫々について最近出現位置リストを生成する。ここで、３バイト文字列、４バイト文字列、及び５バイト文字列の最近出現位置リストをそれぞれＰｒｅｖ３Ｐ［ＢＵＦＦ＿ＳＩＺＥ］、Ｐｒｅｖ４Ｐ［ＢＵＦＦ＿ＳＩＺＥ］、Ｐｒｅｖ５Ｐ［ＢＵＦＦ＿ＳＩＺＥ］により表記する。
リスト生成部１４は、生成した各バイト長の最近出現位置リストをそれぞれ記憶部１２内の最近出現位置リスト保持部１２３ａ〜１２３ｃに記憶する。
【００４５】
リスト統合部１５は、最近出現位置リスト保持部１２３ａ〜１２３ｃに記憶した最近出現位置リストを参照して、統合リストを生成する（ステップＳ１３）。このとき、リスト統合部１５は、より長いバイト長の文字列を優先的に選択し、相対位置を示す値及び一致する文字列（接頭語）のバイト長をアドレス毎に記憶して、統合リストを生成する。統合リストの表記を、Ｐｒｅｖ３−５Ｐ［ＢＵＦＦ＿ＳＩＺＥ］［２］とする。ここで、Ｐｒｅｖ３−５Ｐ［Ｘ］［０］は、統合リスト内のアドレス「Ｘ」の欄に記憶されたバイト長を表し、Ｐｒｅｖ３−５Ｐ［Ｘ］［１］は、統合リスト内のアドレス「Ｘ」の欄に記憶された相対位置を表すものとする。
リスト統合部１５は、生成した統合リストを記憶部１２内の統合リスト保持部１２４に記憶する。
【００４６】
次いで、符号化部１７は、符号化位置を初期化（ｉ＝０）すると共に（ステップＳ１４）、コピー位置及び一致長を初期化し（ステップＳ１５）、比較アドレスを初期化する（ステップＳ１６）。ここで、コピー位置及び一致長の表記を、それぞれｏｆｆｓｅｔ及びｌｅｎとした場合、符号化部１７は、統合リストに記憶されたＰｒｅｖ３−５Ｐ［ｉ］［１］をｏｆｆｓｅｔに入力し、Ｐｒｅｖ３−５Ｐ［ｉ］［０］をｌｅｎに入力することにより、コピー位置及び一致長の初期化を行う。また、比較アドレスをｃｍｐ＿ｐとした場合、符号化部１７は、ｃｍｐ＿ｐにｉの値を入力することにより、比較アドレスの初期化を行う。
符号化部１７は、初期化した符号化位置、コピー位置、一致長、及び比較アドレスを検出部１６に通知する。
【００４７】
検出部１６は、Ｐｒｅｖ３−５Ｐ［ｃｍｐ＿ｐ］［０］＜５であるか否かを判断する（ステップＳ１７）。すなわち、検出部１６は、現在の符号化位置ｉに対応して統合リストに記憶してあるバイト長が最長バイト長（本実施の形態の場合では「５」）より短いか否かを判断する。
【００４８】
現在の符号化位置ｉに対応して統合リストに記憶してあるバイト長が５である場合（Ｓ１７：ＮＯ）、検出部１６は、比較アドレスｃｍｐ＿ｐを、ｃｍｐ＿ｐ−Ｐｒｅｖ３−５Ｐ［ｃｍｐ＿ｐ］［１］に設定し（ステップＳ１８）、比較アドレスｃｍｐ＿ｐから始まる文字列と、現在の符号化位置ｉから始まる文字列とを比較して、重複文字列の一致長ｔｍｐ＿ｌｅｎを求める（ステップＳ１９）。
【００４９】
次いで、検出部１６は、重複文字列の一致長ｔｍｐ＿ｌｅｎが、現時点で記憶されている一致長ｌｅｎより長いか否かを判断する（ステップＳ２０）。
重複文字列の一致長ｔｍｐ＿ｌｅｎが、現時点で記憶されている一致長ｌｅｎより長い場合（Ｓ２０：ＹＥＳ）、検出部１６は、一致長ｌｅｎを重複文字列の一致長ｔｍｐ＿ｌｅｎに更新し、コピー位置ｏｆｆｓｅｔをｉ−ｃｍｐ＿ｐに更新する（ステップＳ２１）。
ステップＳ２１で一致長及びコピー位置を更新した場合（Ｓ２１）、又はステップＳ２０で、重複文字列の一致長ｔｍｐ＿ｌｅｎが、現時点で記憶されている一致長ｌｅｎ以下であると判断した場合（Ｓ２０：ＮＯ）、検出部１６は、処理をステップＳ１７へ戻す。
【００５０】
ステップＳ１７において、現在の符号化位置ｉに対応して統合リストに記憶してあるバイト長が５より短いと判断した場合（Ｓ１７：ＹＥＳ）、検出部１６は、現時点のコピー位置ｏｆｆｓｅｔ及び一致長ｌｅｎを符号化部１７に通知する。
【００５１】
符号化部１７は、現時点の一致長ｌｅｎが０であるか否かを判断する（ステップＳ２２）。現時点の一致長ｌｅｎが０である場合（Ｓ２２：ＹＥＳ）、符号化部１７は、ＩｎＢｕｆ［ｉ］を符号化し（ステップＳ２３）、符号化位置ｉを１だけインクリメントする（ステップＳ２４）。なお、一致長ｌｅｎが０の場合、符号化位置ｉの文字データ（ＩｎＢｕｆ［ｉ］）を出力することによって符号化を行う。
【００５２】
ステップＳ２２において、現時点の一致長ｌｅｎが０でない場合（Ｓ２２：ＮＯ）、符号化部１７は、ＩｎＢｕｆ［ｉ］，…，ＩｎＢｕｆ［ｉ＋ｌｅｎ］の文字列データを、（ｏｆｆｓｅｔ，ｌｅｎ）で符号化し（ステップＳ２５）、次の符号化位置をｉ＋ｌｅｎに設定する（ステップＳ２６）。
【００５３】
次いで、符号化部１７は、ｉの値が入力バッファ１２１に入力したサイズ以上であるか否かを判断する（ステップＳ２７）。ｉの値が入力バッファ１２１に入力したサイズより小さいと判断した場合（Ｓ２７：ＮＯ）、符号化部１７は、処理をステップＳ１５へ戻す。
【００５４】
一方、ｉの値が入力バッファ１２１に入力したサイズ以上であると符号化部１７にて判断した場合（Ｓ２７：ＹＥＳ）、符号化装置は、符号化対象のデータが終了したか否かを判断する（ステップＳ２８）。
符号化対象のデータが終了していないと判断した場合（Ｓ２８：ＮＯ）、符号化装置は、処理をステップＳ１１へ戻し、残る符号化対象データの入力バッファ１２１への読込み、及び入力バッファ１２１に読込んだ文字列データの符号化を行う。
符号化対象のデータが終了したと判断した場合（Ｓ２８：ＹＥＳ）、符号化装置は、本フローチャートによる処理を終了する。
【００５５】
以上のように、本実施の形態では、複数のバイト長の接頭語の最近出現位置をそれぞれ求め、１つのリスト（統合リスト）に統合する。この統合リストを用いて、符号化対照文字列の過去の出現位置を検出する。統合の際には、図６に示すように、より長い接頭語の最近出現位置とその接頭語の長さとを関連付けて記憶する。重複文字列の検出の際には、最近出現位置をリンクドリストとして遡ってより長い一致を求める。このとき、図７に示すように、リンクドリストとして辿る際に、最近出現位置として記憶しているアドレスの接頭語長を確認し、最長の５バイト文字列の場合にのみ、リンクドリストとして遡る構成としている。
【００５６】
この構成により、短い重複文字列は短い接頭語により検出することができ、長い重複文字列は長い接頭語により検出することができる。従来技術の課題であった重複文字列の候補が多いものは、より長い接頭語で振り分けられて候補を絞り込むことができるため、重複文字列の検出を高速化することができる。
【００５７】
なお、本実施の形態では、複数のバイト長の接頭語に関する最近出現位置リストから統合リストを生成し、生成した統合リストを参照して重複文字列を検出する構成としたが、統合リストを生成せずに、各最近出現位置リストを参照して重複文字列を検出する構成としてもよい。例えば、各最近出現位置リストを参照し、より長い接頭語の最近出現位置リストに最近出現位置が記憶されている場合には、この最近出現位置及び接頭語を優先して重複文字列を検出する構成とすることができる。また、最長の接頭語の最近出現位置リストに最近出現位置が記憶されている場合には、リンクドリストとして遡ってより長い一致を求める構成とすることができる。
【００５８】
また、本実施の形態では、３種類のバイト長の文字列を抽出する構成としたが、２種類のバイト長の文字列を抽出する構成であってもよいことは勿論のことである。この場合、Ｎバイト長及びＭバイト長（Ｎ，Ｍは２以上の整数、かつＮ≠Ｍ）の文字列を抽出すればよい。また、３バイト長、４バイト長、５バイト長、８バイト長のように、４種類以上のバイト長の文字列を抽出する構成であってもよい。
【００５９】
抽出すべき文字列のバイト長については、一致文字列や重複文字列の検索効率の観点から適宜設定することが可能である。例えば、抽出すべき文字列として２バイト長及び３バイト長の文字列を設定している場合、符号化すべきデータに依っては、入力バッファ１２１から抽出される２バイト長の一致文字列が非常に多くなり、２バイト長のバリエーションである３バイト長の一致文字列も数多く抽出される可能性がある。このようなケースでは、文字列の検索効率はあまり良くないため、２バイト長及び３バイト長の組み合わせより、３バイト長及び４バイト長（又は３バイト長、４バイト長及び５バイト長）の組み合わせが好ましい。このように、一致文字列や重複文字列の検索効率の観点から、抽出すべき文字列のバイト長を適宜設定することが好ましい。
【００６０】
実施の形態２．
実施の形態１では、最長の接頭語を含む重複文字列を検索する場合、各一致文字列の先頭バイトまで遡って検出する構成としたが、遡る回数に上限を設定し、設定した上限回数の範囲内で重複文字列を検出する構成としてもよい。
本実施の形態では、設定した上限回数の範囲内で重複文字列を検出する構成について説明する。なお、符号化装置の機能的構成及びハードウェア構成は、実施の形態１と全く同様であるため、その説明を省略することとする。
【００６１】
図１０及び図１１は実施の形態２に係る符号化処理の処理手順を説明するフローチャートである。実施の形態１と同様に、符号化装置は、入力バッファ１２１に符号化対象のデータを入力する（ステップＳ３１）。ここで、入力バッファ１２１の表記をＩｎＢｕｆ［ＢＵＦＦ＿ＳＩＺＥ］とする。ＢＵＦＦ＿ＳＩＺＥは、入力バッファ１２１のバッファサイズを表す。
【００６２】
次いで、符号化装置の抽出部１３は、入力バッファ１２１に記憶した文字列データから、各アドレスを起点とする３バイト文字列、４バイト文字列、及び５バイト文字列をそれぞれアドレス順次に抽出する。抽出部１３は、抽出した３バイト文字列、４バイト文字列、及び５バイト文字列をそれぞれソートして、各バイト長の順位リストを生成し、生成した順位リストを記憶部１２内の順位リスト保持部１２２ａ〜１２２ｃに記憶する。
【００６３】
リスト生成部１４は、順位リスト保持部１２２ａ〜１２２ｃに記憶した順位リストを参照して、最近出現位置リストを生成する（ステップＳ３２）。このとき、リスト生成部１４は、３バイト文字列、４バイト文字列、及び５バイト文字列の夫々について最近出現位置リストを生成する。ここで、３バイト文字列、４バイト文字列、及び５バイト文字列の最近出現位置リストをそれぞれＰｒｅｖ３Ｐ［ＢＵＦＦ＿ＳＩＺＥ］、Ｐｒｅｖ４Ｐ［ＢＵＦＦ＿ＳＩＺＥ］、Ｐｒｅｖ５Ｐ［ＢＵＦＦ＿ＳＩＺＥ］により表記する。リスト生成部１４は、生成した各バイト長の最近出現位置リストをそれぞれ記憶部１２内の最近出現位置リスト保持部１２３ａ〜１２３ｃに記憶する。
【００６４】
リスト統合部１５は、最近出現位置リスト保持部１２３ａ〜１２３ｃに記憶した最近出現位置リストを参照して、統合リストを生成する（ステップＳ３３）。このとき、リスト統合部１５は、より長いバイト長の文字列を優先的に選択し、相対位置を示す値及び一致する文字列（接頭語）のバイト長をアドレス毎に記憶して、統合リストを生成する。統合リストの表記を、Ｐｒｅｖ３−５Ｐ［ＢＵＦＦ＿ＳＩＺＥ］［２］とする。ここで、Ｐｒｅｖ３−５Ｐ［Ｘ］［０］は、統合リスト内のアドレス「Ｘ」の欄に記憶されたバイト長を表し、Ｐｒｅｖ３−５Ｐ［Ｘ］［１］は、統合リスト内のアドレス「Ｘ」の欄に記憶された相対位置を表すものとする。
リスト統合部１５は、生成した統合リストを記憶部１２内の統合リスト保持部１２４に記憶する。
【００６５】
次いで、符号化部１７は、符号化位置を初期化（ｉ＝０）すると共に（ステップＳ３４）、コピー位置及び一致長を初期化する（ステップＳ３５）。ここで、コピー位置及び一致長の表記を、それぞれｏｆｆｓｅｔ及びｌｅｎとした場合、符号化部１７は、統合リストに記憶されたＰｒｅｖ３−５Ｐ［ｉ］［１］をｏｆｆｓｅｔに入力し、Ｐｒｅｖ３−５Ｐ［ｉ］［０］をｌｅｎに入力することにより、コピー位置及び一致長の初期化を行う。
また、符号化部１７は、比較アドレスを初期化し、重複文字列を検出する際の上限回数を設定する（ステップＳ３６）。比較アドレスをｃｍｐ＿ｐとした場合、符号化部１７は、ｃｍｐ＿ｐにｉの値を入力することにより、比較アドレスの初期化を行う。また、現在の検出回数をｓｅａｒｃｈ＿ｎｕｍと表記した場合、ステップＳ３６においてｓｅａｒｃｈ＿ｎｕｍを上限回数Ｓ（例えば、Ｓ＝８）に設定する。
符号化部１７は、符号化位置、コピー位置、一致長、比較アドレス、及び上限回数を検出部１６に通知する。
【００６６】
検出部１６は、Ｐｒｅｖ３−５Ｐ［ｃｍｐ＿ｐ］［０］＜５であるか否かを判断する（ステップＳ３７）。すなわち、検出部１６は、現在の符号化位置ｉに対応して統合リストに記憶してあるバイト長が最長バイト長（本実施の形態の場合では「５」）より短いか否かを判断する。
【００６７】
現在の符号化位置ｉに対応して統合リストに記憶してあるバイト長が５である場合（Ｓ３７：ＮＯ）、検出部１６は、現在の検出回数ｓｅａｒｃｈ＿ｎｕｍが０より大きいか否かを判断する（ステップＳ３８）。
現在の検出回数ｓｅａｒｃｈ＿ｎｕｍが０より大きい場合（Ｓ３８：ＹＥＳ）、検出部１６は、比較アドレスｃｍｐ＿ｐを、ｃｍｐ＿ｐ−Ｐｒｅｖ３−５Ｐ［ｃｍｐ＿ｐ］［１］に設定し（ステップＳ３９）、比較アドレスｃｍｐ＿ｐから始まる文字列と、現在の符号化位置ｉから始まる文字列とを比較して、重複文字列の一致長ｔｍｐ＿ｌｅｎを求める（ステップＳ４０）。
【００６８】
次いで、検出部１６は、重複文字列の一致長ｔｍｐ＿ｌｅｎが、現時点で記憶されている一致長ｌｅｎより長いか否かを判断する（ステップＳ４１）。
重複文字列の一致長ｔｍｐ＿ｌｅｎが、現時点で記憶されている一致長ｌｅｎより長い場合（Ｓ４１：ＹＥＳ）、検出部１６は、一致長ｌｅｎ及びコピー位置ｏｆｆｓｅｔを、それぞれｔｍｐ＿ｌｅｎ及びｉ−ｃｍｐ＿ｐに更新すると共に、検出回数ｓｅａｒｃｈ＿ｎｕｍを１だけデクリメントする（ステップＳ４２）。
ステップＳ４２で一致長、コピー位置、及び検出回数を更新した場合（Ｓ４２）、又はステップＳ４１で、重複文字列の一致長ｔｍｐ＿ｌｅｎが、現時点で記憶されている一致長ｌｅｎ以下であると判断した場合（Ｓ４１：ＮＯ）、検出部１６は、処理をステップＳ３７へ戻す。
【００６９】
ステップＳ３７において、現在の符号化位置ｉに対応して統合リストに記憶してあるバイト長が５より短いと判断した場合（Ｓ３７：ＹＥＳ）、又はステップＳ３８で検出回数が０になったと判断した場合（Ｓ３８：ＮＯ）、検出部１６は、現時点のコピー位置ｏｆｆｓｅｔ及び一致長ｌｅｎを符号化部１７に通知する。
【００７０】
符号化部１７は、現時点の一致長ｌｅｎが０であるか否かを判断する（ステップＳ４３）。現時点の一致長ｌｅｎが０である場合（Ｓ４３：ＹＥＳ）、符号化部１７は、ＩｎＢｕｆ［ｉ］を符号化し（ステップＳ４４）、符号化位置ｉを１だけインクリメントする（ステップＳ４５）。なお、一致長ｌｅｎが０の場合、符号化位置ｉの文字データ（ＩｎＢｕｆ［ｉ］）を出力することによって符号化を行う。
【００７１】
ステップＳ４３において、現時点の一致長ｌｅｎが０でない場合（Ｓ４３：ＮＯ）、符号化部１７は、ＩｎＢｕｆ［ｉ］，…，ＩｎＢｕｆ［ｉ＋ｌｅｎ］の文字列データを、（ｏｆｆｓｅｔ，ｌｅｎ）で符号化し（ステップＳ４６）、次の符号化位置をｉ＋ｌｅｎに設定する（ステップＳ４７）。
【００７２】
次いで、符号化部１７は、ｉの値が入力バッファ１２１に入力したサイズ以上であるか否かを判断する（ステップＳ４８）。ｉの値が入力バッファ１２１に入力したサイズより小さいと判断した場合（Ｓ４８：ＮＯ）、符号化部１７は、処理をステップＳ３５へ戻す。
【００７３】
一方、ｉの値が入力バッファ１２１に入力したサイズ以上であると符号化部１７にて判断した場合（Ｓ４８：ＹＥＳ）、符号化装置は、符号化対象のデータが終了したか否かを判断する（ステップＳ４９）。
符号化対象のデータが終了していないと判断した場合（Ｓ４９：ＮＯ）、符号化装置は、処理をステップＳ３１へ戻し、残る符号化対象データの入力バッファ１２１への読込み、及び入力バッファ１２１に読込んだ文字列データの符号化を行う。
符号化対象のデータが終了したと判断した場合（Ｓ４９：ＹＥＳ）、符号化装置は、本フローチャートによる処理を終了する。
【００７４】
以上のように、実施の形態２では、最長の接頭語を含む重複文字列を検索する際の上限回数を設定しているので、重複文字列の検出時間をより短くすることができる。
【００７５】
以上の実施の形態に関し、更に以下の付記を開示する。
【００７６】
（付記１）
バイト単位にアドレスを指定してデータを記憶する記憶部に、複数バイトからなる文字列データを記憶し、
前記記憶部に記憶した文字列データから、各アドレスを起点とする第１バイト長の文字列及び該第１バイト長よりも長い第２バイト長の文字列を、夫々アドレス順次に抽出し、
抽出した第１及び第２バイト長の文字列夫々について、抽出した文字列同士が一致する一致文字列夫々の先頭バイトのアドレスのうち、任意の第１アドレスよりも上位であり、該第１アドレスに最も近い第２アドレスの情報を、該第１アドレスに関連付けて記憶し、
関連付けて記憶した前記第１及び第２アドレスを参照して、前記第２バイト長の一致文字列を含む重複文字列、及び前記第１バイト長の一致文字列と一致する文字列を、前記記憶部に記憶した文字列データから検出し、
検出した結果に基づき、前記文字列データを符号化する
ことを特徴とする符号化方法。
【００７７】
（付記２）
前記第２バイト長の一致文字列を含む重複文字列を検出する場合、各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする付記１に記載の符号化方法。
【００７８】
（付記３）
前記第２バイト長の一致文字列を含む重複文字列を検出する場合、予め定めた上限回数の範囲内で各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする付記１に記載の符号化方法。
【００７９】
（付記４）
前記第１及び第２バイト長の文字列から取得した前記第２アドレスの情報のうち、前記第２バイト長の文字列から取得した第２アドレスの情報を優先的に選択して、第２アドレスの情報と一致文字列のバイト長とを関連付けたリストを生成し、
前記第２バイト長の一致文字列を含む文字列、及び前記第１バイト長の一致文字列と一致する文字列を検出する際、前記リストを参照する
ことを特徴とする付記１から付記３の何れか１つに記載の符号化方法。
【００８０】
（付記５）
前記第１バイト長は、ｎバイト（ｎは２以上の整数）であり、前記第２バイト長はｎ＋１バイト長であることを特徴とする付記１から付記４の何れか１つに記載の符号化方法。
【００８１】
（付記６）
前記第１バイト長は３バイトであり、前記第２バイト長は４バイトであることを特徴とする付記５に記載の符号化方法。
【００８２】
（付記７）
異なる長さの２種類以上の第１バイト長の文字列を抽出するようにしてあることを特徴とする付記１から付記４の何れか１つに記載の符号化方法。
【００８３】
（付記８）
前記第１バイト長は３バイト及び４バイトであり、前記第２バイト長は５バイトであることを特徴とする付記７に記載の符号化方法。
【００８４】
（付記９）
複数バイトからなる文字列データを、バイト単位にアドレスを指定して記憶する記憶部、
該記憶部に記憶した文字列データから、各アドレスを起点とする第１バイト長の文字列及び該第１バイト長よりも長い第２バイト長の文字列を、夫々アドレス順次に抽出する抽出部、
該抽出部により抽出した第１及び第２バイト長の文字列夫々について、抽出した文字列同士が一致する一致文字列夫々の先頭バイトのアドレスのうち、任意の第１アドレスよりも上位であり、該第１アドレスに最も近い第２アドレスの情報と、該第１アドレスとを関連付けて記憶したリストを生成するリスト生成部、
該リスト生成部が生成したリストに基づき、前記第２バイト長の一致文字列を含む重複文字列、及び前記第１バイト長の一致文字列と一致する文字列を、前記記憶部に記憶した文字列データから検出する検出部、及び
該検出部による検出結果に基づき、前記文字列データを符号化する符号化部
を備えることを特徴とする符号化装置。
【００８５】
（付記１０）
前記第２バイト長の一致文字列を含む重複文字列を検出する場合、各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする付記９に記載の符号化装置。
【００８６】
（付記１１）
前記第２バイト長の一致文字列を含む重複文字列を検出する場合、予め定めた上限回数の範囲内で各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする付記９に記載の符号化装置。
【００８７】
（付記１２）
前記第１及び第２バイト長の文字列から取得した前記第２アドレスの情報のうち、前記２バイト長の文字列から取得した第２アドレスの情報を優先的に選択して、第２アドレスの情報と一致文字列のバイト長とを関連付けたリストを生成する統合リスト生成部を備え、
前記第２バイト長の一致文字列を含む文字列、及び前記第１バイト長の一致文字列と一致する文字列を検出する際、前記統合リスト生成部が生成したリストを参照することを特徴とする付記９から付記１１の何れか１つに記載の符号化装置。
【００８８】
（付記１３）
前記第１バイト長は、ｎバイト（ｎは２以上の整数）であり、前記第２バイト長はｎ＋１バイト長であることを特徴とする付記９から付記１２の何れか１つに記載の符号化装置。
【００８９】
（付記１４）
前記第１バイト長は３バイトであり、前記第２バイト長は４バイトであることを特徴とする付記１３に記載の符号化装置。
【００９０】
（付記１５）
異なる長さの２種類以上の第１バイト長の文字列を抽出するようにしてあることを特徴とする付記９から付記１２の何れか１つに記載の符号化装置。
【００９１】
（付記１６）
前記第１バイト長は３バイト及び４バイトであり、前記第２バイト長は５バイトであることを特徴とする付記１５に記載の符号化装置。
【００９２】
（付記１７）
バイト単位にアドレスを指定して文字列データを記憶する記憶部を備えたコンピュータに、
該記憶部に記憶した文字列データから、各アドレスを起点とする第１バイト長の文字列及び該第１バイト長よりも長い第２バイト長の文字列を、夫々アドレス順次に抽出する抽出処理、
該抽出処理により抽出した第１及び第２バイト長の文字列夫々について、抽出した文字列同士が一致する一致文字列夫々の先頭バイトのアドレスのうち、任意の第１アドレスよりも上位であり、該第１アドレスに最も近い第２アドレスの情報と、該第１アドレスとを関連付けて記憶したリストを生成するリスト生成処理、
該リスト生成処理により生成したリストに基づき、前記第２バイト長の一致文字列を含む重複文字列、及び前記第１バイト長の一致文字列と一致する文字列を、前記記憶部に記憶した文字列データから検出する検出処理、及び
該検出処理による検出結果に基づき、前記文字列データを符号化する符号化処理
を実行させることを特徴とするコンピュータプログラム。
【００９３】
（付記１８）
前記検出処理にて、前記第２バイト長の一致文字列を含む重複文字列を検出する場合、各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする付記１７に記載のコンピュータプログラム。
【００９４】
（付記１９）
前記検出処理にて、前記第２バイト長の一致文字列を含む重複文字列を検出する場合、予め定めた上限回数の範囲内で各一致文字列の先頭バイトまで遡って検出し、前記第１バイト長の一致文字列を検出する場合、前記第２アドレスで検出を終了することを特徴とする付記１７に記載のコンピュータプログラム。
【００９５】
（付記２０）
コンピュータに、前記第１及び第２バイト長の文字列から取得した前記第２アドレスの情報のうち、前記２バイト長の文字列から取得した第２アドレスの情報を優先的に選択して、第２アドレスの情報と一致文字列のバイト長とを関連付けたリストを生成する統合リスト処理を実行させ、
前記検出処理にて、前記第２バイト長の一致文字列を含む文字列、及び前記第１バイト長の一致文字列と一致する文字列を検出する際、前記リストを参照することを特徴とする付記１７から付記１９の何れか１つに記載のコンピュータプログラム。
【００９６】
（付記２１）
前記第１バイト長は、ｎバイト（ｎは２以上の整数）であり、前記第２バイト長はｎ＋１バイト長であることを特徴とする付記１７から付記２０の何れか１つに記載のコンピュータプログラム。
【００９７】
（付記２２）
前記第１バイト長は３バイトであり、前記第２バイト長は４バイトであることを特徴とする付記２１に記載のコンピュータプログラム。
【００９８】
（付記２３）
異なる長さの２種類以上の第１バイト長の文字列を抽出するようにしてあることを特徴とする付記１７から付記２０の何れか１つに記載のコンピュータプログラム。
【００９９】
（付記２４）
前記第１バイト長は３バイト及び４バイトであり、前記第２バイト長は５バイトであることを特徴とする付記２３に記載のコンピュータプログラム。
【符号の説明】
【０１００】
１１  入力部
１２  記憶部
１３  抽出部
１４  リスト生成部
１５  リスト統合部
１６  検出部
１７  符号化部
１２１  入力バッファ
１２２ａ〜１２２ｃ  順位リスト保持部
１２３ａ〜１２３ｃ  最近出現位置リスト保持部
１２４  統合リスト保持部
【図１】
0005807592.tif 000002
【図２】
0005807592.tif 000003
【図３】
0005807592.tif 000004
【図４】
0005807592.tif 000005
【図５】
0005807592.tif 000006
【図６】
0005807592.tif 000007
【図７】
0005807592.tif 000008
【図８】
0005807592.tif 000009
【図９】
0005807592.tif 000010
【図１０】
0005807592.tif 000011
【図１１】
0005807592.tif 000012