(57)【特許請求の範囲】
【請求項１】
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮方法において、
前記サンプルデータ内の文字列を、先頭ｎ文字が同じである文字列同士のグループに分類し、
該各グループから最頻出文字列を検出し、該最頻出文字列を該辞書に該初期値として登録する、
ことを含み、
前記最頻出文字列を検出する際、前記先頭ｎ文字に後続する各文字の前記各先頭ｎ文字を有する文字列のサンプルデータ中の先頭ｎ文字に続く各後続位置での文字の出現頻度を求め、それらの出現頻度に基づいて前記最頻出文字列を決定し、
前記決定は、前記先頭ｎ文字に後続する各文字が全て異なるまでの前記出現頻度の総和が最も大きい文字列を最頻出文字列として決定することであり、
ｎは２以上の自然数である
ことを特徴とするデータ圧縮方法。
【請求項２】
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮方法において、
前記サンプルデータ内の文字列を、先頭ｎ文字のハッシュ値が同じ文字列同士のグループに分類し、
該各グループから最頻出文字列のうち最長文字列を検出して、該最頻出文字列のうち前記検出した最長文字列を該辞書に初期値としてそれぞれ登録する
ことを特徴とするデータ圧縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スライド辞書を利用したデータ圧縮方法に係り、特にテキスト文書やプログラムなどの圧縮に好適なデータ圧縮方法及び圧縮データ送信方法に関する。
【背景技術】
【０００２】
データ圧縮方式には、ロスレスとロッシーがある。ロスレスは圧縮したデータを完全に復元可能な可逆圧縮方式であり、主にテキスト文書やプログラムなどの圧縮に利用されている。ロッシーは圧縮したデータを完全に復元できない非可逆圧縮方式であり、画像、音声、動画等の圧縮に利用されている。データ圧縮は、データ通信において送信するデータ量を削減する目的で使用される。
【０００３】
ロスレス圧縮手法の一つとして、スライド辞書を用いたデータ圧縮方法が知られている。このデータ圧縮手法は、過去に出現したデータ系列の中から一致する最大長の部分列を検索して、その部分列の位置と一致長を符号として出力するものであり、過去に出現したデータ系列は辞書に格納されている。この辞書の検出範囲は、圧縮中に遷移（スライド）するため、一般にスライド辞書と呼ばれている。
【０００４】
近年、モバイル端末の普及は目覚しい。モバイル端末のサービスでは、容量が小さいデータの通信が頻繁になされる。例えば、モバイル端末からサーバへのＨＴＴＰリクエスト（上りデータ）のデータ量は僅か１ＫＢ（キロバイト）程度である。また、モバイル端末とサーバとの間でやりとりされるデータや、ＲＦＩＤタグなどによる無線通信においては、例えばヘッダ情報など、同じような内容のデータが一連のデータ送受信の間に何度もやり取りされる傾向が強い。
従来のスライド辞書を利用したデータ圧縮方法では、過去に出現した部分列を辞書に登録（学習）する。一般的に、辞書が完成するには８ＫＢ程度のデータ読み込みが必要とされている。そのため、データ量が小さいと圧縮するのに十分な登録（学習）ができないため、十分な圧縮率が得られない。
【０００５】
この問題を解決するために、本出願人は、以前、圧縮前に頻出文字を初期値として事前に辞書に登録しておき、辞書内の初期値と圧縮対象のデータの一致を取ることで圧縮効率を向上させるデータ圧縮方式を提案した（特開平５−２４１７７号公報）。このデータ圧縮方式では、辞書に初期値として登録されている文字列については、初出でも圧縮できるので、圧縮効率が良くなる。
【０００６】
図２２は、上記特開平５−２４１７７号公報に開示されている辞書への初期値登録方法を説明する図である。
図２２（ａ）は、初期値作成用のサンプルデータに存在する文字列の種類を木構造(tree structure)で示したものである。同図（ａ）に示す木構造の各ノードの文字“ａ”、“ｂ”、“ｃ”、“ｄ”はサンプルデータ内の文字を示し、その下の矩形内の数字はそれらの文字の各文字列内での出現頻度を示す。
【０００７】
同図（ａ）の木構造を参照して、出現頻度が所定の閾値２以上の文字列を抽出すると同図（ｂ）に示す“ａａａ”、“ａｂｃ”、“ａｃ”、“ｂｂ”、“ｃｃ”、“ｄ”の５個となる。そして、これら５個の文字列を初期値として、辞書１００１に登録する（同図（ｃ）参照）。
【０００８】
このように、サンプルデータを基に出現頻度の高い文字列を事前に辞書に登録することによってデータの圧縮効率を向上させることが可能となる。
また、本出願人は、図２１に示すようなＳＬＣ(Super Lossless Data Compression)方式のデータ圧縮方式を提案している（日本特許第３５４１９３０号、米国特許６，３２０，５２２  Ｂ１）。
【０００９】
ＳＬＣ方式では、辞書２００１としてハッシュ表を使用しており、被圧縮データ２０００における既出文字列の先頭の任意数の文字（この例では３文字）をハッシュ関数２００２によりハッシュ値に変換し、そのハッシュ値と既出文字列の長さ（文字列長）を辞書２００１に登録する。被圧縮データ２０００の文字列には先頭から１で始まるシリアル番号が出現位置として割り振られる。スライディングウィンドウ２００５をスライディングして繰り返し出現する文字列を調べ、既出文字列と一致する文字列については、（出現位置、長さ）という符号に符号化する。ここで、出現位置は、辞書２００１に登録されている既出文字列の出現位置であり、ハッシュ値をキーとして辞書２００１から読み出す。
【００１０】
図２１では、被圧縮データ２０００が“compression&decompression…”となっており、この文字列中で２回目に出現する“compression”という文字列が（１、１１）という符号に符号化される例が示されている。“compression”の先頭３文字“com”のハッシュ値はｉであり、辞書２００１からハッシュ値ｉに対応する出現位置（＝１）が読み出される。
【特許文献１】特開平５−２４１７７号公報
【特許文献２】日本特許第３５４１９３０号（米国特許６，３２０，５２２  Ｂ１）
【発明の開示】
【発明が解決しようとする課題】
【００１１】
図２２に示す従来技術は、データを圧縮する前に辞書に頻出する文字列を初期値として登録してデータ圧縮効率の向上を図っているが、単純に、出現頻度が所定の閾値以上の出現文字列（短文）を辞書に登録するため、初期値のサイズが大きくなってしまうという問題があった。
【００１２】
図２１に示す従来技術は、辞書に登録された既出文字列を高速に検出するために、その先頭の任意数の文字をハッシュ値に変換し、そのハッシュ値を既出文字列の出現位置と共に辞書に登録するようにしている。しかしながら、辞書（ハッシュ表）は、同一ハッシュ値については１つの出現位置情報しか登録できない構成となっている。初期値文字列の中には、異なる文字列であるにもかかわらず偶然に同じハッシュ値を取るものも存在しうる。このため、このようなハッシュ値の衝突が発生すると、辞書に登録されていた初期値は後から出現した同じハッシュ値を有する初期値によって上書きされてしまい、先に登録した初期値が生かされないという問題があった。
【００１３】
本発明の目的は、圧縮効率の高いスライド型辞書登録用の初期値を生成することである。本発明の他の目的は、スライド型辞書として使用するハッシュ表に初期値を登録する際に、ハッシュ値の衝突が生じない初期値を抽出できるようにすることである。
【００１４】
また本発明の他の目的は、上記により生成した辞書を用いた圧縮データの送信方法を提供することである。
【課題を解決するための手段】
【００１５】
本発明のデータ圧縮方法は、サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮方法を前提とする。
本発明のデータ圧縮方法の第1態様は、サンプルデータ内の文字列を、先頭ｎ文字が同じである文字列同士のグループに分類し、該各グループから最頻出文字列を検出し、該最頻出文字列を辞書に初期値として登録することを特徴とする。
【００１６】
本発明のデータ圧縮方法の第１態様によれば、適切なサンプルデータを用意することにより、出現頻度が高く、より長い文字列を、辞書に初期値として登録できる。これにより、限られた初期値サイズの中で、圧縮効率のよい初期値を登録することができる。  本発明のデータ圧縮方法の第２態様は、サンプルデータ内の文字列を、先頭ｎ文字のハッシュ値が同じ文字列同士のグループに分類し、該各グループから最頻出文字列を検出し、該最頻出文字列を辞書に登録することを特徴とする。
【００１７】
本発明のデータ圧縮方法の第２態様によれば、例えば、ハッシュ表を辞書内の文字列位置情報の検索に使用した形態の辞書に初期値を登録する際等に、先に登録した初期値が後に登録される初期値によって削除されてしまう事態を防止できる。
【００１８】
本発明の圧縮データ送信方法は、サーバが前記第1態様または第２態様のデータ圧縮方法により生成された辞書情報を保有し、該サーバはクライアントに上記辞書情報を送信し、前記サーバと前記クライアント間でデータの送受信を行う際には、該データを前記辞書情報により圧縮してから送受信することを特徴とする。
【００１９】
前記辞書情報は、例えば、辞書に登録する初期値、または該初期値と該初期値の辞書内での位置情報を格納する手段（例えば、ハッシュ表）である。
上記本発明の圧縮データ送信方法において、例えば、前記サーバは、提供するサービスの種別毎に辞書情報を保有し、クライアントにサービスを提供する際には、そのサービスに対応した辞書を用いて、クライアントに送信するデータを圧縮するようにしてもよい。
また、上記本発明の圧縮データ送信方法において、例えば、前記サーバは、請求項１または２記載のデータ圧縮方法によって生成された辞書情報を複数保有し、前記クライアントにデータを送信する際には、該データの圧縮効率が最も良い辞書情報を用いて前記データを圧縮するようにしてもよい。
【００２０】
本発明の圧縮データ送信方法によれば、サーバとクライアント間で、比較的小容量のデータを効率良く圧縮して送受信できる。
【発明の効果】
【００２１】
本発明によれば、サンプルデータ中に出現する文字列を先頭のｎ文字が等しい文字列のグループに分類した後、各グループから最頻出文字列を検出し、該検出した最頻出文字列を辞書に登録する初期値として選択するので、限られた初期値サイズの中で、圧縮効率のよい初期値を登録することができる。また、圧縮率を高める一致長が長い文字列を、より多く辞書に初期値として登録できるようになる。
【００２２】
また、サンプルデータ中に出現する文字列を先頭ｎ文字のハッシュ値が等しい文字列のグループに分類した後、各グループから最頻出文字列を検出し、該検出した最頻出文字列を辞書（ハッシュ表）に登録する初期値とするので、辞書に登録した初期値が別の初期値によって上書きされること防止できる。また、辞書の限られたサイズの領域に、より多くの初期値を効率良く登録できるようになる。
【００２３】
ひいては、上記により予め初期値を登録した辞書を利用することで、比較的小さな圧縮対象データであっても、効率よく圧縮することが可能になる。
また、上記により生成した複数の辞書のうち適切な辞書を用いて送信データを圧縮することができるようになる。
【発明を実施するための最良の形態】
【００２４】
以下、図面を参照しながら本発明の実施の形態について説明する。
［本発明の原理（その１）］
図１は、本発明の被圧縮データの符号化方法を説明する図である。
【００２５】
本発明においては、サンプルデータ中に頻出する長い文字列を初期値として事前に用意しておく。そして、該初期値が仮想的に圧縮対象文字列（被圧縮データ）の前に出現するものとみなして、該初期値を参照して被圧縮データの圧縮、復元を行う。
【００２６】
ところで、本明細書では、簡略化のために、スライド辞書を単に辞書と記載する場合もある。
図１に示す例では“compression”という文字列（初期値）が、圧縮対象の文字列“compression&decomptession…”の前に仮想的に出現したものとみなしている。被圧縮データの先頭位置は「１」に設定されている。また、図１では、学習済みのハッシュ表１４を示している。
【００２７】
ハッシュ表１４には、前述したＳＬＣ方式と同様に、初期値の先頭ｎ文字（図１の例では、先頭３文字）の出現位置を登録する。図中ハッシュ表１４には説明の都合上、ハッシュ値がデータと対応付けて記されているが、ハッシュ値はハッシュ表においてアクセスすべき行目を示すデータであるので、実際のハッシュ表にはハッシュ値を登録する必要はない。
【００２８】
図１に示す例では、最初の初期値が“compression”となっている。“compression”の先頭３文字“com”のハッシュ値は「ｉ」であるので、“compression”の開始位置は、ハッシュ表１４の「ｉ＋１」行目に登録される。この登録において、ハッシュ表１４の「ｉ＋１」行目には、 “compression”の出現位置（先頭文字の位置）である「−３２」が登録される。
【００２９】
図１に示す例では、圧縮対象文字列“compression&decomptession…”の先頭１１文字が初期値“compression”と同じ文字列となっている。このため、圧縮対象文字列は、最初の１１文字“compression”が、直ちに、（−３２，１１）の符号に符号化される。
【００３０】
このように、スライド辞書を用いた圧縮は、長い繰り返しを１つの符号で符号化できるため、出現頻度の高い文字列（頻出文字列）を初期値としてスライド辞書に事前に登録しておくことで、被圧縮データを高圧縮率で符号化する可能性は高くなる。
【００３１】
ハッシュ表を用いたスライド辞書は、初期値及び被圧縮データを符号化する際に出現する新たな文字列を登録するメモリ（以後、便宜上、辞書バッファと記載）と、該メモリに登録された文字列の開始位置を保持するハッシュ表とで構成される。ハッシュ表を用いたスライド辞書の学習は、辞書バッファへの文字列の登録とハッシュ表への辞書バッファに登録された文字列の開始位置の登録という２つの処理によってなされる。
【００３２】
スライド辞書に初期値を登録する際には、図２に模式的に示すように、複数のサンプルデータ２１−１〜２１−ｎの中から圧縮効率の良い文字列（長い頻出文字列）を初期値として生成し、それらの文字列を出現頻度順に辞書２４に登録する必要がある。
【００３３】
スライド辞書では、通常、ハッシュ表に先頭文字列の出現位置のみを保持している。これは、メモリ使用量を節約するためである。本発明においても、スライド辞書のハッシュ表には初期値の先頭のｎ文字（ｎは正の整数）の出現位置のみを保持するようにする。
【００３４】
次に、本発明における初期値の生成・登録方法の手順を説明する。
１．複数のサンプルデータを用意し、それらのサンプルデータに出現する文字列を、先頭ｎ文字が等しい文字列同士のグループに分類する。
２．手順１で分類した各グループから最頻出文字列（最も出現頻度が高い文字列）を検出する。
３．手順２で求めた各グループの最頻出文字列を、頻度の高い順にスライド辞書にその初期値として登録する。
【００３５】
以上の手順１〜３により、スライド辞書には先頭ｎ文字が同じ文字列中の最頻出文字列が、各グループ毎にひとつずつ、頻度順に一列に並べられた初期値文字列が登録される。上記手順１〜３において、スライド辞書の初期値サイズに制限が設けられている場合には、そのサイズの上限に達するまで、スライド辞書に最頻出文字列を登録し続ける。
【００３６】
ところで、本明細書においては、スライド辞書を使用して被圧縮データの圧縮を開始する前に、スライド辞書に予め登録される１または複数の最頻出文字列の連なりを、便宜上、「初期値文字列」ではなく「初期値」と記載する場合もある。したがって、初期値が初期値文字列を指す場合もある。
【００３７】
図３は、本発明の初期値生成方法を先頭３文字が同じ文字列同士に適用した例である。
同図では、手順１によって作成される、先頭３文字が“ＡＢＣ”である文字列の分類を木構造で示している。この例では、先頭３文字が“ＡＢＣ”である文字列として、“ＡＢＣ”に続く後続文字列が“BＢＢＣ”、“ＢＣＤC”、・・・、“ＣＤＥＦ”である文字列が示されている。木構造において、その各ノードに配置された文字の下の数字はその文字の出現頻度である。この例では、“ＡＢＣ”の後続文字列が“ＢＣＤＣ”となっている文字列、すなわち、“ＡＢＣＢＣＤＣ”という文字列が８回出現し、最も出現頻度が高くなっている。したがって、先頭３文字が“ＡＢＣ”である文字列群の中から、“ＡＢＣＢＣＤＣ”という文字列が最頻出文字列のうち最長文字列として検出される。同様にして、先頭３文字が“ＡＢＣ”以外の文字列についても、最頻出文字列のうち最長の文字列を検出することができる。
【００３８】
このように、本発明では、同じ先頭文字列（文字数ｎ）で始まる文字列の中から最頻出文字列のうち最長の文字列を抽出し、それら抽出した最頻出文字列を出現頻度順に辞書に初期値として事前登録する。
［本発明の原理（その２）］
辞書としてハッシュ表を使用する際、図４に示すように、ハッシュ値の位置情報を順次学習して行く過程で、既に、位置情報がハッシュ表に登録された文字列が後続する文字列中に存在すると、即ち、偶然に同じハッシュ値をとる異なる文字列が存在すると、新たに出現した文字列の位置情報により既存の位置情報が上書きされてしまう。図４の例では、“compression”の位置情報が「１」から「ｋ」に上書きされている。
【００３９】
このため、本発明では、ハッシュ表に初期値を登録する段階で、あるハッシュ値に該当する文字列を登録したら、そのハッシュ値に該当する文字列を二度とハッシュ表に登録しないようにする。
【００４０】
また、本発明で利用するハッシュ表ではハッシュ値をハッシュ表内での行を示す値として利用しているので、即ち、ハッシュ表では１つのハッシュ値に対して１つの位置情報を登録するように構成されているため、各ハッシュ値について最頻出文字列を検出する必要がある。
【００４１】
ハッシュ値は、初期値として登録する先頭ｎ文字を基に算出される。このため、本発明では、先頭ｎ文字が同じ文字列の中から最頻出文字列を検出し、その最頻出文字列を初期値とする。
【００４２】
図５は、上記方法により先頭３文字が同じ文字列の中から初期値（最頻出文字列）を生成する方法を示す図である。
同図に示す木構造においては、先頭３文字が“ＡＢＣ”と“ＸＹＺ”のハッシュ値が同じ値（＝１００）となっている。このため、先頭３文字が“ＡＢＣ”または“ＸＹＺ”となっている文字列の中から最頻出文字列を検出し、それを初期値としてハッシュ表に登録する。図５に示す例では、“ＸＹＺＣＤＥＦ”が８回出現しており最頻出文字列かつ最長文字列となっている。
【００４３】
同様にして、ハッシュ値が１００以外となる先頭３文字を有する文字列についても、最頻出文字列かつ最長文字列を検出し、それを初期値としてハッシュ値に登録する。
以上のようにしてハッシュ表に初期値を順次登録していくことにより、ハッシュ表に登録された初期値の位置情報の上書きが防止される。ハッシュ表には一つのハッシュ値に対して１つの位置情報のみしか登録されないからである。
【００４４】
同様な方法を用いて、初期値の先頭ｎ文字をハッシュ表に登録する場合についても、初期値の位置情報の上書きを防止できる。
［第１の実施例］
本発明の第１実施例は、初期値作成用の情報処理装置、データ圧縮側の情報処理装置及びデータ復元側の情報処理装置を備えたシステムである。
【００４５】
図６は、本発明のデータ圧縮方法により初期値を作成する情報処理装置のシステム構成を示すブロック図である。
初期値作成用の情報処理装置１００は、圧縮プログラム１１０、サンプルデータ１２０及び初期値作成プログラム１３０を備えている。これらは、情報処理装置１００が備えるメモリや外部記憶装置（ストレージ）に格納される。
【００４６】
圧縮プログラム１１０は、データを圧縮・復元するプログラムであり、内部にハッシュ表１１１、初期値（初期値文字列）１１２及びハッシュ関数１１３を備えている。ハッシュ表１１１は初期値として登録される文字列の先頭ｎ文字のハッシュ値で表される表内の位置にその位置情報を格納する辞書である。ハッシュ表１１１のデータ構造は図１のハッシュ表１４と同様である。初期値１１２はデータの圧縮、復元に使用される文字列であり、初期値作成プログラム１３０によって作成されたものである。ハッシュ関数１１３は初期値１１２の先頭３文字に対応するハッシュ値を算出する。
【００４７】
圧縮プログラム１１０は、初期値作成プログラム１３０から初期値１１２を入力・保持する。そして、その初期値１１２の先頭ｎ文字のハッシュ値をハッシュ関数１１３により算出し、ハッシュ表１１１において，そのハッシュ値と同じ行に初期値１１２の位置情報を登録する。また、ハッシュ表１１１に登録されたハッシュ値を有する初期値１１２の位置情報を、該ハッシュ値が格納されている行に登録する。
【００４８】
サンプルデータ１２０は、Ｎｏ．１〜Ｎｏ．４の４つのサンプルデータから構成されている。Ｎｏ．１のサンプルデータ（以後、便宜上、サンプルデータ１と記載）は文字列“COMPRESS ”である。Ｎｏ．２のサンプルデータ（以後、便宜上、サンプルデータ２と記載）は文字列“DECOMPRESS ”である。Ｎｏ．３のサンプルデータ（以後、便宜上、サンプルデータ３と記載）は文字列“COMPRESSION ”である。Ｎｏ．４のサンプルデータ（以後、便宜上、サンプルデータ４と記載）は文字列“COMPARE”である。
【００４９】
初期値作成プログラム１３０は、頻度カウンタ１３１、後続最頻出文字保持部１３２及び登録チェック部１３３を備えている。
頻度カウンタ１３１は、サンプルデータ１〜４に出現する全ての文字列を、その先頭３文字が同じ文字列同士に分類し、先頭３文字が同じ文字列の中から最頻出文字列を検出するために使用される。頻度カウンタ１３１は、先頭３文字と頻度を格納する領域を備えており、この領域に先頭３文字が同じ文字列がポインタで連結されるような構成となっている。上記構成は、個々の先頭３文字毎に設けられる。上記リストの要素は、サンプルデータＮｏ、文字列の開始位置及び終了位置から構成される。
【００５０】
後続最頻出文字保持部１３２は、初期値作成プログラム１３０が初期値１１２を作成する処理の過程で先頭３文字に続く後続文字を保持する。後続最頻出文字保持部１３２は、最終的には最頻出文字列の終了文字を格納する。
【００５１】
登録チェック部１３３は、頻度カウンタ１３１のリストに保持されている最頻出文字列がハッシュ表に初期値として登録されたか否かを示すステイタス情報を保持する。該ステイタス情報は、初期値として登録された場合には“ＴＲＵＥ”、登録されなかった場合には“ＦＡＬＳＥ”となる。ステイタス情報は、初期値作成処理の開始前には“ＦＡＬＳＥ”に初期設定される。
【００５２】
図７は、データ圧縮側の情報処理装置のシステム構成を示すブロック図である。
データ圧縮側の情報処理装置１４０は、圧縮プログラム１５０をメモリまたは外部記憶装置等に保持している。圧縮プログラム１５０は、データを圧縮、復元するプログラムであり、内部に、ハッシュ表１５１、初期値(初期値文字列)１５２及びハッシュ関数１５３を保持している。辞書１５１、初期値１５２、及びハッシュ関数１５３は、図６の情報処理装置１３０の圧縮プログラム１１０が保有するハッシュ表１１１、初期値１１２及びハッシュ関数１１３と同様な構成・機能を有するので、それらの詳しい説明は省略する。
【００５３】
図８は、データ復元側の情報処理装置のシステム構成を示すブロック図である。
データ復元側の情報処理装置１６０は、圧縮プログラム１７０をメモリまたは外部記憶装置等に保持している。圧縮プログラム１７０は、データを圧縮、復元するプログラムであり、内部に、辞書（ハッシュ表）１７１、初期値（初期値文字列）１７２及びハッシュ関数１７３を保持している。辞書１７１、初期値１７２、及びハッシュ関数１７３は、図６の情報処理装置１３０の圧縮プログラム１１０が保有するハッシュ表１１１、初期値１１２及びハッシュ関数１１３と同様な構成・機能を有するので、それらの詳しい説明は省略する。
【００５４】
上記３つの情報処理装置１００、１４０、１６０はネットワークを介して接続されており、互いにデータの送受信が可能となっている。
図９を参照しながら、第１実施例の処理の概要を説明する。｛事前処理｝
データの圧縮、復元をする前に、事前処理として、初期値の生成と辞書（ハッシュ表）の学習を行う。辞書の学習とは、辞書に初期値とその位置情報を登録する処理のことである。
【００５５】
この後、初期値と辞書を、圧縮側の情報処理装置１４０と復元側の情報処理装置１６０にネットワークを介して配布する。情報処理装置１４０と情報処理装置１６０は、情報処理装置１００から配布された初期値と辞書を外部記憶装置に格納する。
【００５６】
図９（ａ）を参照しながら、情報処理装置１００により行われる上記事前処理の手順を説明する。
（１）サンプルデータから初期値を生成する（ステップＳ１）。
（２）生成された初期値の位置情報を辞書に学習させ、辞書を完成させる（ステップＳ２）。
｛圧縮処理｝
図９（ｂ）を参照しながら、データ圧縮処理の手順を説明する。このデータ圧縮処理は、情報処理装置１４０が圧縮プログラム１５０を実行することによって行われる。
（１）外部記憶装置に格納されている初期値と辞書をメモリ上にロードする（ステップＳ３）。
（２）初期値と辞書を基に被圧縮データを圧縮して圧縮データを生成する（ステップＳ４）。
【００５７】
情報処理装置１４０は、圧縮データを情報処理装置１６０に送信する。
｛復元処理｝
図９（ｂ）を参照しながら、圧縮データの復元処理を説明する。このデータ復元処理は、情報処理装置１６０が圧縮プログラム１７０を実行することによって行われる。
（１）外部記憶装置に格納されている初期値と辞書をメモリ上にロードする（ステップＳ５）。
（２）初期値と辞書を基に圧縮データから被圧縮データを復元する（ステップＳ６）。
｛初期値生成処理と辞書の生成処理の詳細｝
図１０は、情報処理装置１００が初期値作成プログラム１３０を実行することによって行う初期値生成処理と辞書の生成処理（辞書に学習処理）の詳細を説明するフローチャートである。図１１〜図１４は、図１０のフローチャートに示す処理の理解を容易にするための図である。
【００５８】
図１０〜図１４を参照しながら、情報処理装置１００によって行われる初期値生成処理の詳細を説明する。なおこの例は、先頭３文字が同じ文字列をグルーピングして処理を行う例となっている。
【００５９】
情報処理装置１００は、サンプルデータ１２０（サンプルデータ１〜４）に存在する３文字の文字列を全て抽出する（ステップＳ１１）。
この結果、図１１に示すように“ＣＯＭ”、“ＯＭＰ”、“ＭＰＲ”、・・・、“ＡＲＥ”の文字列が抽出される。
【００６０】
次に、頻度カウンタ１３１に、ステップＳ１１で抽出した文字列（以後、便宜上、抽出文字列と記載する）を、全て、「文字列」、「頻度」、「開始位置」、「終了位置」を格納する（ステップＳ１２）。
【００６１】
この結果、頻度カウンタ１３１の内容は図１２に示すようになり、「頻度」に連結されたリストの各要素に、「サンプルデータのＮｏ．」、「開始位置」、「終了位置」が格納される。“ＣＯＭ”は「頻度」が４となっており、サンプルデータ１〜４の全てに“ＣＯＭ”という文字列が出現している。
【００６２】
続いて、抽出文字列を１つづつ順次選択しながら、全ての抽出文字列についてステップＳ１３〜Ｓ１８の処理を実行する。
最初に、“ＣＯＭ”が選択される。
ステップＳ１３においては、後続文字（終了位置の次の文字）の中で最頻出する文字を検出し、その最頻出文字を後続最頻出文字保持部１３２に格納する。
【００６３】
この結果、“ＣＯＭ”の場合には“Ｐ”が最頻出文字として後続最頻出文字保持部１３２に格納される（図１３（ａ）参照）。
次に、ステップＳ１３で検出した最頻出文字の出現数（サンプルデータ１〜４での出現数）を頻度カウンタ１３１の「頻度」に加算する（ステップＳ１４）。
【００６４】
この結果、“ＣＯＭ”の場合には、“Ｐ”がサンプルデータ１〜４の全てで後続文字となっているので、「頻度」に４が加算され、「頻度」は８となる（図１３（ｂ）参照）。
次に、頻度カウンタ１３１に格納されている「終了位置」の次の位置の文字（後続文字）が最頻出文字であるか判別する（ステップＳ１５）。そして、最頻出文字である場合にはステップＳ１６に進み、そうでない場合にはステップＳ１７に進む。
【００６５】
ステップＳ１６では、ステップＳ１５で最頻出文字と判別された文字の出現位置を新たな終了位置として頻度カウンタ１３１に保存（設定）する。
この結果、“ＣＯＭ”の場合には、頻度カウンタ１３１に保持された４つの文字列の「終了位置」が１文字分後方に移動する（図１３（ｃ）参照）。
【００６６】
ステップＳ１７では、頻度カウンタ１３１のリストから後続文字が最頻出文字となっていない要素を削除する。この処理は最頻出文字列の候補外となった文字列を頻度カウンタ１３１から削除する処理である。
【００６７】
頻度カウンタ１３１に先頭３文字が同じ文字列が複数保持されている場合には、個々の文字列について、ステップＳ１５での判別結果に応じて、ステップＳ１６またはステップＳ１７の処理のいずれかが行われる。
【００６８】
ステップＳ１６またはステップＳ１７の処理に続いて、頻度カウンタ１３１に保持されている文字列の後続文字が全て異なるか判別する（ステップＳ１８）。
この判別において、後続文字が全て異なると判別された場合にはステップＳ１９に進み、そうでない場合には更に後続の最頻出文字を探索するためにステップＳ１３に戻る。
【００６９】
このように、ステップＳ１３〜Ｓ１８の処理は、ステップＳ１８で先頭３文字が同じ文字列の後続文字が全て異なると判別されるまで繰り返し行われる。
“ＣＯＭ”の場合、２回目のステップＳ１５の判別処理で、サンプルデータ４の後続文字のみが“Ａ”であり、サンプルデータ１〜３の後続文字は全て“Ｒ”（最頻出文字）であると判別される。この結果、ステップＳ１７で、頻度カウンタ１３１からサンプルデータ４の文字列“ＣＯＭＰＡ” に該当するポインタが削除されると共に、ステップＳ１６で頻度カウンタ１３１の後続最頻出文字保持部１３２に“Ｒ”が格納される（図１３（ｄ）参照）。
【００７０】
以上のようにして、“ＣＯＭ”に関しては、ステップＳ１３〜Ｓ１８の処理が６回繰り返され、ステップＳ１９で後続文字が無いと判別され、ステップＳ１９に進む。
ステップＳ１９に進む直前において、“ＣＯＭ”に関する頻度カウンタ１３１と後続最頻出文字保持部１３２の内容は図１３（ｅ）に示すようになっている。すなわち、後続最頻出文字保持部１３２には“ ”が格納され、頻度カウンタ１３１には、サンプルデータ１とサンプルデータ２内の文字列“ＣＯＭＰＰＲＥＳＳ＿”に関する開始位置と終了位置が格納され、頻度には２２が格納されている。
【００７１】
以上のようにして、“ＣＯＭ”に関するステップＳ１３〜Ｓ１９の処理が終了すると、
頻度カウンタ１３１に保持されている次の先頭３文字“OＭＰ”について、“ＣOＭ”と同様にステップＳ１３〜Ｓ１９の処理が行われる。
【００７２】
このようにして、頻度カウンタ１３１に保持された最終の先頭３文字“ＡＲＥ”の処理が終了するまで、ステップＳ１３〜Ｓ１９の処理が繰り返し行われる。
“ＡＲＥ”に関してステップＳ１３〜Ｓ１９の処理が終了し、ステップＳ１１で抽出した全ての先頭３文字についてステップＳ１３〜Ｓ１９の処理が完了すると、ステップＳ２０に進む。
【００７３】
図１４は、ステップＳ１３〜Ｓ１９の処理が、ステップＳ１１で抽出された先頭３文字が異なる全種類の文字列について、ステップＳ１３〜Ｓ１９の処理が完了した時点での頻度カウンタ１３１と後続最頻出文字保持部１３２の内容を示す図である。
【００７４】
同図に示すように、頻度カウンタ１３１には、“ＣＯＭ”、“ＯＭＰ”、“ＭＰＲ”、・・・、“ＡＰＲ”の各先頭３文字を有する文字列のサンプルデータ１２０における最頻出文字列の「開始位置」と「終了位置」が格納されている。また、頻度カウンタ１３１の「頻度」には、サンプルデータ１２０中の先頭３文字に続く各後続位置での最頻出文字の出現数（頻度）の総和が格納されている。
【００７５】
頻度カウンタ１３１に保持されている（「サンプルデータＮｏ．」、「開始位置」及び「終了位置」）の組を参照することにより、“ＣＯＭ”を先頭３文字とする最頻出文字列として、サンプルデータ１とサンプルデータ２に存在する“ＣＯＭＰＲＥＳＳ ”を取得することができる。また、“ＯＭＰ”を先頭３文字とする最頻出文字列として、サンプルデータ１とサンプルデータ２に存在する“ＯＭＰＲＥＳＳ ”を取得することができる。同様に、“ＭＰＲ”、・・・、“ＡＲＥ”を先頭３文字とする文字列についても最頻出文字列を取得することができる。
【００７６】
ステップＳ２０においては、ステップＳ１９で取得した各先頭３文字の最頻出文字列について、頻度順に初期値として登録する。すなわち、頻度カウンタ１３１に保持されている各先頭３文字の「頻度」を参照し、その値が高い最頻出文字列から順に初期値として登録する。初期値として登録された最頻出文字列の各３文字に対応する登録チェック部１３３は“ＴＲＵＥ”に設定する。
【００７７】
この結果、初期値作成プログラム１３０の頻度カウンタ１３１、後続最頻出文字保持部１３２及び登録チェック部１３３の内容は図１５に示すようになる。図１５に示すように、第１実施例の場合には、サンプルデータ１２０に出現する全種類の先頭３文字について、その最頻出文字列が初期値として登録される。
【００７８】
以上のようにして登録された初期値は圧縮プログラム１５０に出力される。圧縮プログラム１５０は、初期値作成プログラム１３０から受け取る初期値を初期値１１２として保持すると共に、初期値１１２を基にハッシュ表１１１を作成する。
｛初期値作成プログラムの変形例｝
図１６は、初期値作成プログラムの変形例の構成を示すブロック図である。
【００７９】
同図に示す初期値作成プログラム１３０は、図５に示す原理に基づいて、先頭３文字のハッシュ値が同じ文字列同士のグループに分類して、各グループの中の最頻出文字列を初期値として取得・登録する。
【００８０】
初期値作成プログラム１４０は、頻度カウンタ１４１、後続最頻出ハッシュ値保持部１４２及び登録チェック部１４３を備えている。
頻度カウンタ１４１は、「ハッシュ値」、「頻度」、及び｛「サンプルデータＮｏ．」、「開始位置」、「終了位置」｝の組で構成される要素のリストを備えている。このリストは、初期値作成プログラム１３０のリストと同様な構成である。
【００８１】
後続最頻出ハッシュ値保持部１４２は、初期値作成プログラム１３０の後続最頻出文字保持部１３２と同様な機能を有するもので、先頭３文字に続く後続文字のハッシュ値を格納する。この後続最頻出ハッシュ値保持部１４２には、最終的には、各ハッシュ値のグループにおける最頻出文字列の終了文字のハッシュ値が格納される。
【００８２】
登録チェック部１４３は、初期値作成プログラム１３０の登録チェック部１３３と同等の構成・機能を有する。
初期値作成プログラム１４０が初期値を登録する処理は、図１０のフローチャートと略同様のアルゴリズムによって実現できる。すなわち、「文字」の代わりに「ハッシュ値」を処理対象とするように図１０のフローチャートを変更することにより、初期値作成プログラム１４０の初期値登録処理のアルゴリズムを実現できる。
［第２の実施例］
図１７は、本発明のデータ圧縮方法を適用した第２の実施例のシステム構成図である。
【００８３】
同図に示すコンピュータシステムは、ＡＰサーバ２００（ＡＰサーバ１）、ＡＰサーバ２１０（ＡＰサーバ２）、フロントエンドサーバ３００、クライアント３３０を備えており、フロントエンドサーバ３００とクラインアト３３０は、ネットワーク３２１により接続されている。尚、図１７には示されていないが、本システムは、例えばＷＥＢサービスやメールサービスなどのようなアプリケーションサービスを提供するサーバマシンであるＡＰサーバをｎ台備えている。以後の説明では、ＡＰサーバを説明する際に、ＡＰサーバ２００、２１０を中心にして説明する。
【００８４】
ＡＰサーバ２００、ＡＰサーバ２１０及びフロントエンドサーバ３００は、ＬＡＮ(Local Area Network)等の通信回線によって接続されており、例えば、サービス提供業者のデータセンター等を構成している。ＡＰサーバ２００及びＡＰサーバ２１０は提供するサービスに関する処理を行うサーバマシンであり、フロントエンドサーバ３００は、それらＡＰサーバとクライアント３３０との通信を仲介するサーバマシンである。
【００８５】
ＡＰサーバ２００には「１．１．１．１．」というアドレスが割り当てられており、ＡＰサーバ２１０には「１．２．３．４」というアドレスが割り当てられている。これらのアドレスは、ＡＰサーバ２００、２１０のサーバＩＤ（サーバ識別子）として、フロントエンドサーバ３００及びクライアント３３０に利用される。サーバＩＤとしては、例えば、ＩＰ(Internet Protocol)アドレス、ＵＲＬ(Uniform Resource Locator)、ドメイン名などが使用される。
【００８６】
ＡＰサーバ２００は、ＸＭＬ（Extensible Markup Language）形式のデータ２５１をフロントエンドサーバ３００経由でクライアント３３０に送信するアプリケーション・サーバである。ＡＰサーバ２１０は、ＨＴＭＬ(Hyper Text Markup Language)形式のデータ２５２をフロントエンドサーバ３００経由でクライアント３３０に送信するアプリケーション・サーバである。
【００８７】
ＡＰサーバ２００は、クライアント３３０にＸＭＬデータ２５１を送信する前のいずれかのタイミングに初期値作成プログラム２２０を実行し、サンプルデータであるＸＭＬ用サンプルデータ２０１を基にハッシュ表２３１と初期値（初期値文字列）２３２を作成する。そして、ハッシュ表２３１と初期値２３２をフロントエンドサーバ３００経由でクライアント３３０に送信する。
【００８８】
ＡＰサーバ２１０は、クライアント３３０にＨＴＭＬデータ２５２を送信する前のいずれかのタイミングに初期値作成プログラム２２０を実行してサンプルデータであるＨＴＭＬデータ２１１を基にハッシュ表２４１と初期値（初期値文字列）２４２を作成する。そして、ハッシュ表２４１と初期値２４２をフロントエンドサーバ３００経由でクライアント３３０に送信する。
【００８９】
初期値作成プログラム２２０は、第１実施例の初期値作成プログラム１３０と略同様のプログラムであり、不図示のストレージ等に格納され、ＡＰサーバ２００とＡＰサーバ２１０に共有されている。
【００９０】
フロントエンドサーバ３００は、クライアント３３０とＡＰサーバ２００、２１０間の通信を仲介するサーバであり、ＡＰサーバ２００、２１０から受信するＸＭＬデータまたはＨＴＭＬデータを圧縮してクライアント３３０に送信する。フロントエンドサーバ３００は、例えば、Ｗｅｂサーバであり、ＨＴＴＰ(Hyper Text Transfer Protocol)等のプロトコルによりクライアント３３０と通信する。
【００９１】
フロントエンドサーバ３００は圧縮プログラム３１０を保有しており、この圧縮プログラム３１０を実行して、ＡＰサーバ２００、２１０から受信するＸＭＬデータ２５１、ＨＴＭＬデータ２５２を圧縮する。
【００９２】
圧縮プログラム３１０は、ハッシュ表３１１、初期値（初期値文字列）３１２及び管理テーブル３１３を備えている。ハッシュ表３１１と初期値３１２は、ＡＰサーバ２００から受信するハッシュ表２３１と初期値２３２またはＡＰサーバ２１０から受信するハッシュ表２４１と初期値２４２である。フロントエンドサーバ３００は、ＡＰサーバ２００、２１０からハッシュ表と初期値を受信するたびに、ハッシュ表３１１と初期値３１２をその受信したハッシュ表と初期値に書き換える。
【００９３】
登録テーブル３１３は、フロントエンドサーバ３００がＡＰサーバから受信するハッシュ表と初期値の管理情報を登録しているテーブルである。登録テーブル３１３はｎ行で構成されるテーブルであり、各行には「サーバＩＤ」、「ハッシュ表名」及び「初期値名」の３項目が格納される。サーバＩＤは、ＡＰサーバのアドレスである。ハッシュ表名は、各ハッシュ表の名称である。初期値名は、初期値の名称である。登録テーブル３１３はこのような構成により、各ＡＰサーバから受け取るＸＭＬデータまたはＨＴＭＬデータを圧縮するために使用されるハッシュ表と初期値を管理している。
【００９４】
クライアント３３０は、ネットワーク３２１を介してフロントエンドサーバ３００と通信可能に接続されているコンピュータであれば、携帯型端末、携帯電話、パーソナルコンピュータ、ＲＦＩＤタグ、車載端末など、どのようなコンピュータであっても構わない。クライアント３３０は圧縮プログラム３４０を保有しており、この圧縮プログラム３４０を実行して、フロントエンドサーバから受信する圧縮されたＸＭＬデータ２５１、ＨＴＭＬデータ２５２を復元する。
【００９５】
圧縮プログラム３４０は、上述したフロントエンドサーバ３００が保有する圧縮プログラム３１０と同様な構成をしており、ハッシュ表３４１、初期値３４２及び登録テーブル３４３を備えている。
【００９６】
登録テーブル３４３は、の構成はフロントエンドサーバ３００が保有する登録テーブル３１３と同様なので、その詳しい説明は省略する。
クライアント３３０は、フロントエンドサーバ３００からＸＭＬデータ２５１またはＨＴＭＬデータ２５２を受信する際、初期値識別情報３２０をフロントエンドサーバ３００から受信する。
【００９７】
この初期値識別情報３２０は、フロントエンドサーバ３００から受信するデータ（ＸＭＬデータ２５１またはＨＴＭＬデータ２５２）を復元する際に使用する初期値とハッシュ表を、登録テーブル３４３を参照して取得する際に必要となる情報である。初期値識別情報３２０は、例えば、サーバＩＤ、初期値名もしくはハッシュ表名、またはそれらの組み合わせで構成される。
【００９８】
次に、上記構成の第２実施例の動作を説明する。
図１８は、ＡＰサーバ（ＡＰサーバ２００、２１０）が初期値とハッシュ表を生成する処理を説明するフローチャートである。
【００９９】
ＡＰサーバは、初期値作成プログラム２２０を実行し、ＸＭＬ用サンプルデータ２０１またはＨＴＭＬ用サンプルデータ２１１を基に初期値（初期値２３２または初期値２４２）を生成する（ステップＳ１０１）。続いて、該生成した初期値のハッシュ値と出現位置をハッシュ表に登録して、ハッシュ値を生成する（ステップＳ１０２）。
【０１００】
図１９は、フロントエンドサーバ３００の登録テーブルに関する処理を説明するフローチャートである。
フロントエンドサーバ３００は、登録テーブル３１３に、受信したハッシュ表の名称（ハッシュ表名）と初期値の名前（初期値名）を登録する（ステップＳ２０１）。
【０１０１】
次に、クライアント３３０にネットワーク３２１経由で上記ハッシュ表と上記初期値を送信する（ステップＳ２０２）。
続いて、上記ハッシュ表と上記初期値に関する情報（サーバＩＤ、ハッシュ表名、初期値名）を登録テーブル３１３に登録する（ステップＳ２０３）。
【０１０２】
以上の処理により、ＡＰサーバから受信したハッシュ表と初期値がクライアント３３０に送信されると共に、該受信したハッシュ表と初期値に関する情報が登録テーブル３１３に登録される。
【０１０３】
図２０は、フロントエンドサーバ３００とクライアント３３０間で行われるデータの圧縮・復元処理を説明するフローチャートである。
同図のフローチャートにおいて、ステップＳ３０１〜３０３がフロントエンドサーバ３００の処理であり、ステップＳ３０４、３９５がクライアント３３０の処理である。
【０１０４】
フロントエンドサーバ３００は、データ（ＸＭＬデータまたはＨＴＭＬデータ）の送信元のＡＰサーバに従って、該データを圧縮するために使用する初期値とハッシュ表を、登録テーブル３１３のサーバＩＤを基に選択する（ステップＳ３０１）。
【０１０５】
次に、上記選択した初期値とハッシュ表を基に、ＡＰサーバから受信した上記データを圧縮する（ステップＳ３０２）。
そして、上記圧縮されたデータと上記データ圧縮で使用された初期値に対応する初期値識別情報３２０を、ネットワーク３２１を介してクライアント３３０に送信する（ステップＳ３０３）。
【０１０６】
クライアント３３０は、フロントエンドサーバ３００から受信した初期値識別情報３２０を基に登録テーブル３４３を検索して、フロントエンドサーバ３００から受信した圧縮データを復元するために必要な初期値とハッシュ表を選択する（ステップＳ３０４）。
【０１０７】
そして、上記選択された初期値とハッシュ表を基に、上記圧縮データを復元する（ステップＳ３０５）。
このように、第２の実施例では、ＡＰサーバ側で、提供するアプリケーション（サービス）でクライアント３３０に送信するデータを圧縮・復元するための初期値と辞書（ハッシュ表）を作成し、それらをフロントエンドサーバ３００に送信する。フロントエンドサーバ３００は、ＡＰサーバから受信した初期値と辞書を登録テーブル３１３により管理すると共に、それらを初期値識別情報３２０と共にネットワーク３２１を介してクライアント３３０に送信する。
【０１０８】
クライアント３３０は、フロントエンドサーバ３００から受信する初期値と辞書を登録テーブル３４３により管理する。そして、フロントエンドサーバ３００から圧縮データと初期値識別情報３２０を受信すると、初期値識別情報３２０を基に登録テーブル３４３を参照して、圧縮データを復元するために必要となる初期値とハッシュ表を取得し、それらを用いて圧縮データを復元する。
【０１０９】
ところで、圧縮データの復元は初期値のみからでも可能である。初期値を基に辞書（ハッシュ表）を生成できるからである。したがって、フロントエンドサーバ３００及びクライアント３３０がＡＰサーバから初期値のみを受信するようなシステムであっても、本発明のデータ圧縮方法を用いて、データの圧縮・復元が可能である。
【０１１０】
本発明においては、サーバまたはクライアントが複数の辞書（初期値または初期値並びにハッシュ表）を、例えばサービス毎に予め生成して保持しておき、該サービスに関しサーバとクライアントとの間で送受信される一連のデータ群については、クライアントから処理依頼を受けたサービス（アプリケーション）またはサーバが提供しようとしているサービスに応じていずれの辞書を利用するか、該サービスに関し、一番最初にデータを送信する側であるコンピュータ（サーバまたはクライアント）が決定するような構成にしてもよい。また、クライアントからサービス提供依頼を受けたサーバが、該サービス提供の一連のデータ送受信に対して適用する辞書を決定し、クライアントへの返信時にサービスに関するデータと辞書を特定するための情報または辞書情報を送信し、該サービスにおけるデータの送受信では、該決定された辞書を用いてデータ圧縮及び復元を行うような構成にしても良い。
【０１１１】
また、サーバまたはクライアントが保持する複数の辞書は、クライアントの端末種別に応じて生成されるものでもよい。
この場合、例えば、実際に送受信されるデータである被圧縮データを、サーバまたはクライアントのいずれかが上記複数の辞書で実際に圧縮してみて、最も圧縮効率の良い辞書を圧縮用の辞書として採用し、該採用した辞書に関する情報を通信相手へ通知する構成にしてもよい。
また、クライアントがサーバにデータを送信する際に、該データを保有している辞書を用いて圧縮してからサーバに送信するような構成にしてもよい。
上記実施例の説明においては、被圧縮データとしてテキストデータを圧縮する例について説明したが、本発明は、これに限定されることなく、例えば、ソースプログラムや実行形式のプログラム（バイナリデータ）の圧縮などにも適用可能である。
【０１１２】
(付記１)
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮方法において、
サンプルデータ内の文字列を、先頭ｎ文字が同じである文字列同士のグループに分類し、  
該各グループから最頻出文字列を検出し、該最頻出文字列を該辞書に該初期値として登録する、
ことを特徴とするデータ圧縮方法。
（付記２）
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮方法において、
サンプルデータ内の文字列を、先頭ｎ文字のハッシュ値が同じ文字列同士のグループに分類し、
該各グループから最頻出文字列を検出し、該最頻出文字列を該辞書に登録する、
ことを特徴とするデータ圧縮方法。
（付記３）
付記１または２記載のデータ圧縮方法であって、
前記最頻出文字列を検出する際、前記先頭ｎ文字に後続する各文字の出現頻度を求め、
それらの出現頻度に基づいて最頻出文字列として決定することを特徴とするデータ圧縮方法。
（付記４）
付記３記載のデータ圧縮方法であって、
前記先頭ｎ文字に後続する各文字の出現頻度の総和が最も大きい文字列を最頻出文字列として決定することを特徴とするデータ圧縮方法。
（付記５）
サーバが付記１または２記載のデータ圧縮方法により生成された辞書情報を保有し、
該サーバはクライアントに前記辞書情報を送信し、
前記サーバと前記クライアント間でデータの送受信を行う際には、該データを前記辞書情報により圧縮してから送受信する、
ことを特徴とする圧縮データ送信方法。
（付記６）
付記５記載の圧縮データ送信方法であって、
前記サーバは、提供するサービス毎に前記辞書情報を保有することを特徴とすることを特徴とする圧縮データ送信方法。
（付記７）
付記５記載の圧縮データ送信方法であって、
前記サーバは、前記クライアントとデータの送受信を行う前に、前記辞書情報を前記クライアントに配信する。
（付記８）
付記５記載の圧縮データ送信方法であって、
前記サーバは、提供するサービスの種別毎に前記辞書情報を保有し、クライアントにサービスを提供する際には、そのサービスに対応した前記辞書情報を用いて、クライアントに送信するデータを圧縮することを特徴とする圧縮データ送信方法。
（付記９）
付記５記載の圧縮データ送信方法であって、
前記クライアントは、サーバから提供されるサービスの種別毎に前記辞書情報を保有し、サーバにデータを送信する際には、そのサービスに対応した前記辞書情報を用いて前記データを圧縮することを特徴とする圧縮データ送信方法。
（付記１０）
付記５記載の圧縮データ送信方法であって、
前記サーバは、付記１または２記載のデータ圧縮方法によって生成された前記辞書情報を複数保有し、前記クライアントにデータを送信する際には、該データの圧縮効率が最も良い前記辞書情報を用いて前記データを圧縮することを特徴とする圧縮データ送信方法。
（付記１１）
付記５記載の圧縮データ送信方法であって、
前記クライアントは、付記１または２記載のデータ圧縮方法によって生成された前記辞書情報を複数保有し、前記サーバにデータを送信する際には、該データの圧縮効率が最も良い辞書を用いて前記データを圧縮することを特徴とする圧縮データ送信方法。
(付記１２)
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮処理をコンピュータに実行させるプログラムであって、
サンプルデータ内の文字列を、先頭ｎ文字が同じである文字列同士のグループに分類するステップと、  
該各グループから最頻出文字列を検出し、該最頻出文字列を該辞書に該初期値として登録するステップと、
を備える処理をコンピュータに実行させるプログラム。
（付記１３）
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮処理をコンピュータに実行させるプログラムであって、
サンプルデータ内の文字列を、先頭ｎ文字のハッシュ値が同じ文字列同士のグループに分類するステップと、
該各グループから最頻出文字列を検出し、該最頻出文字列を該辞書に登録するステップと、
を備える処理をコンピュータに実行させることを特徴とするプログラム。
（付記１４）
付記１２または１３項記載のプログラムであって、
前記最頻出文字列を検出する際、前記先頭ｎ文字に後続する各文字の出現頻度を求め、
それらの出現頻度に基づいて最頻出文字列として決定するステップを備える処理をコンピュータに実行させることを特徴とするプログラム。
(付記１５)
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮装置において、
サンプルデータ内の文字列を、先頭ｎ文字が同じである文字列同士のグループに分類する手段と、  
該各グループから最頻出文字列を検出し、該最頻出文字列を該辞書に該初期値として登録する手段と、
を備えることを特徴とするデータ圧縮装置。
（付記１６）
サンプルデータから初期値を生成し、該初期値を予め辞書に登録してから該辞書を用いてデータを符号化するデータ圧縮装置において、
サンプルデータ内の文字列を、先頭ｎ文字のハッシュ値が同じ文字列同士のグループに分類する手段と、
該各グループから最頻出文字列を検出し、該最頻出文字列を該辞書に登録する手段と、
を備えることを特徴とするデータ圧縮装置。
（付記１７）
付記１５または１６記載のデータ圧縮装置であって、
前記登録手段は、前記最頻出文字列を検出する際、前記先頭ｎ文字に後続する各文字の出現頻度を求め、それらの出現頻度に基づいて最頻出文字列として決定する手段を備えることを特徴とするデータ圧縮装置。
（付記１８）
付記１７記載のデータ圧縮方法であって、
前記登録手段は、前記先頭ｎ文字に後続する各文字の出現頻度の総和が最も大きい文字列を最頻出文字列として決定する手段を備えることを特徴とするデータ圧縮装置。
【産業上の利用可能性】
【０１１３】
本発明は、モバイル端末の通信、ＲＦＩＤ(Radio Frequency Identification)の通信、ＩＴＳ(Intelligent Transportation Systems)における車間での通信等のように、比較的小容量なデータを通信するシステムにおいて送受信されるデータの圧縮に好適である。
【図面の簡単な説明】
【０１１４】
【図１】本発明の被圧縮データの符号化方法を説明する図である。
【図２】本発明の初期値生成方法を概念的に示す図である。
【図３】本発明の初期値生成方法を、先頭３文字が同じ文字列同士に適用した例を示す図である。
【図４】辞書としてハッシュ表を使用した際に発生する初期値の位置情報の上書きを説明する図である。
【図５】ハッシュ表において上記位置情報の上書きが発生しないような初期値の生成方法を説明する図である。
【図６】第１実施例における初期値作成用の情報処理装置のシステム構成を示すブロック図である。
【図７】第１実施例におけるデータ圧縮側の情報処理装置のシステム構成を示すブロック図である。
【図８】第１実施例におけるデータ復元側の情報処理装置のシステム構成を示すブロック図である。
【図９】第１実施例における全体の処理の流れを説明する図である。
【図１０】第１実施例における初期値作成・登録処理を示すフローチャートである。
【図１１】図１０のフローチャートの処理を説明する図（その１）である。
【図１２】図１０のフローチャートの処理を説明する図（その２）である。
【図１３】図１０のフローチャートの処理を説明する図（その３）である。
【図１４】図１０のフローチャートの処理を説明する図（その４）である。
【図１５】図１０のフローチャートの処理を説明する図（その５）である。
【図１６】先頭３文字をハッシュ値で管理する頻度カウンタの構成例を示す図である。
【図１７】本発明の第２実施例のシステム構成を示すブロック図である。
【図１８】ＡＰサーバによる初期値生成処理とハッシュ表の生成処理を説明するフローチャートである。
【図１９】フロントエンドサーバの処理を説明するフローチャートである。
【図２０】フロントエンドサーバとクライアント間で行われる圧縮データの復元処理を説明するフローチャートである。
【図２１】スライド辞書を用いたデータ圧縮方法を説明する図である。
【図２２】従来の辞書作成方式を説明する図である。
【符号の説明】
【０１１５】
１４  ハッシュ表（学習済み）
２１−１〜２１−４  サンプルデータ
２４    初期値
１００  初期値作成用の情報処理装置
１１０  圧縮プログラム
１１１  ハッシュ表
１１２  初期値（初期値文字列）
１１３  ハッシュ関数
１２０  サンプルデータ
１３０  初期値作成プログラム
１３１  頻度カウンタ
１３２  後続最頻出ハッシュ値保持部
１３３  登録チェック部
１４０  圧縮側の情報処理装置
１５０  圧縮プログラム
１５１  ハッシュ表
１５２  初期値（初期値文字列）
１５３  ハッシュ関数
１６０  復元側のプログラム
１７０  圧縮プログラム
１７１  ハッシュ表
１７２  初期値（初期値文字列）
１７３  ハッシュ関数
２００  ＡＰサーバ１
２０１  ＸＭＬ用サンプルデータ
２１０  ＡＰサーバ２
２１１  ＨＴＭＬ用サンプルデータ
２２０  初期値作成プログラム
２３１、２４１  ハッシュ表
２５１  ＸＭＬデータ
２５２  ＨＴＭＬデータ
３００  フロントエンドサーバ
３１０  圧縮プログラム
３１１  ハッシュ表
３１２  初期値（初期値文字列）
３１３  登録テーブル
３２１  ネットワーク
３３０  クライアント
３４０  圧縮プログラム
３４１  ハッシュ表
３４２  初期値（初期値文字列）
３４３  登録テーブル
【図１】
0004456554.tif 000002
【図２】
0004456554.tif 000003
【図３】
0004456554.tif 000004
【図４】
0004456554.tif 000005
【図５】
0004456554.tif 000006
【図６】
0004456554.tif 000007
【図７】
0004456554.tif 000008
【図８】
0004456554.tif 000009
【図９】
0004456554.tif 000010
【図１０】
0004456554.tif 000011
【図１１】
0004456554.tif 000012
【図１２】
0004456554.tif 000013
【図１３】
0004456554.tif 000014
【図１４】
0004456554.tif 000015
【図１５】
0004456554.tif 000016
【図１６】
0004456554.tif 000017
【図１７】
0004456554.tif 000018
【図１８】
0004456554.tif 000019
【図１９】
0004456554.tif 000020
【図２０】
0004456554.tif 000021
【図２１】
0004456554.tif 000022
【図２２】
0004456554.tif 000023