(57)【特許請求の範囲】
【請求項１】
データストリームを圧縮し、圧縮データストリームを伸長するための方法であって、
複数のデータ記号を有するデータストリームを受信するステップと、
第１のデータ語と少なくとも第２のデータ語との組み合わせからなる第１のデータ語句が語句ライブラリ中の複数のライブラリ語句のうちの１つである第１のライブラリ語句に一致した場合、該第１のデータ語句を第１の反復語句として識別するステップと、
前記第１のデータ語句が前記第１の反復語句として識別された場合、該第１のデータ語句を前記第１のライブラリ語句に関連する第１のデータ語句識別子で置き換えて圧縮データストリームを生成するステップと、
前記第１のデータ語句が前記複数のライブラリ語句のいずれにも一致しない場合、前記第１のデータ語句を第２のライブラリ語句として記憶し、前記第１のデータ語句を前記第２のライブラリ語句に関連する第２のデータ語句識別子で置き換えて圧縮データストリームを生成するステップと、
前記識別、前記置き換え、及び前記記憶を行うステップを後続のデータ語句に対して反復するステップと、
前記データストリーム中のデータ記号をさらに受信しながら前記圧縮データストリームを送信するステップと、
からなり、
伸長アルゴリズムが、前記反復データ語句に対し前記圧縮方法により生成されたものと同じライブラリ語句を生成できるようにするために、前記反復語句のうちの最初の２つのインスタンスは、変更されることなく送信され、以後のインスタンスは全て、前記データ語句識別子として送信され、
前記データ語句の各々が固定数のデータ語を含み、
前記データ語の各々がデータ記号及びデータ語句識別子のうちの１つである、方法。
【請求項２】
前記ライブラリ語句の各々における前記データ語の固定数が２である、請求項１の方法。
【請求項３】
前記データストリームの値に関する情報が受信前に不明であり、前記圧縮データストリームがデータを何も失わず、前記圧縮方法が任意長のデータストリームを処理する、請求項１の方法。
【請求項４】
前記第１のデータ語句を第２のライブラリ語句として記憶するステップは、前記第１のデータ語句がデータストリームの第１の部分に固定回数現れた場合にのみ、前記第１のデータ語句を第２のライブラリ語句として記憶することを含み、
前記第１のデータ語句を前記第２のデータ語句識別子で置き換えるステップは、前記第１のデータ語句がデータストリームの第１の部分に固定回数現れた場合にのみ、前記第１のデータ語句を前記第２のデータ語句識別子で置き換えることを含む、請求項１の方法。
【請求項５】
まだ送信されていないライブラリ語句の第１の集合を識別するステップと、
前記第１の集合中の前記ライブラリ語句のうちのいずれかに関連するデータ語句識別子を前記圧縮データストリームの一部として送信する前に、前記ライブラリ語句の第１の集合を送信するステップと、
を含む、ライブラリ語句を送信するステップをさらに含む、請求項４の方法。
【請求項６】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するステップをさらに含む、請求項５の方法。
【請求項７】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項６の方法。
【請求項８】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合該第４のライブラリ語句を消去するステップ、をさらに含む請求項７の方法。
【請求項９】
前記圧縮データストリームを受信するステップと、
前記圧縮データストリームに基いて前記ライブラリ語句を判定するステップと、
をさらに含む、請求項４の方法。
【請求項１０】
まだ送信されていないライブラリ語句の第１の集合を識別するステップと、
前記第１の集合中の前記ライブラリ語句のうちのいずれかに関連するデータ語句識別子を前記圧縮データストリームの一部として送信する前に、前記ライブラリ語句の第１の集合を送信するステップと、
を含む、ライブラリ語句を送信するステップをさらに含む、請求項１の方法。
【請求項１１】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するステップをさらに含む、請求項１０の方法。
【請求項１２】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項１１の方法。
【請求項１３】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合該第４のライブラリ語句を消去するステップ、をさらに含む請求項１２の方法。
【請求項１４】
前記圧縮データストリームを受信するステップと、
前記圧縮データストリームに基いて前記ライブラリ語句を判定するステップと、
をさらに含む、請求項１の方法。
【請求項１５】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するステップをさらに含む、請求項１の方法。
【請求項１６】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項１５の方法。
【請求項１７】
データストリームを圧縮し、圧縮データストリームを伸長するためのシステムであって、
複数のデータ記号を有するデータストリームを受信するための受信手段と、
第１のデータ語と少なくとも第２のデータ語との組み合わせからなる第１のデータ語句が語句ライブラリ中の複数のライブラリ語句のうちの１つである第１のライブラリ語句に一致した場合、該第１のデータ語句を第１の反復語句として識別するための識別手段と、
前記第１のデータ語句が前記第１の反復語句として識別された場合、該第１のデータ語句を前記第１のライブラリ語句に関連する第１のデータ語句識別子で置き換えて圧縮データストリームを生成するための第１の置換手段と、
前記第１のデータ語句が前記複数のライブラリ語句のいずれにも一致しない場合、前記第１のデータ語句を第２のライブラリ語句として記憶するための第１の記憶手段と、
前記第１のデータ語句が前記複数のライブラリ語句のいずれにも一致しない場合、前記第１のデータ語句を前記第２のライブラリ語句に関連する第２のデータ語句識別子で置き換えて圧縮データストリームを生成するための第２の置換手段と、
前記識別手段、前記第１の置換手段、前記第１の記憶手段、及び前記第２の置換手段が、後続データ語句を反復的に識別し、記憶し、及び置き換えるように構成されることと、
前記データストリーム中のデータ記号をさらに受信しながら前記圧縮データストリームを送信するための送信手段と、
からなり、
伸長アルゴリズムが、前記反復データ語句に対し前記圧縮方法により生成されたものと同じライブラリ語句を生成できるようにするために、前記送信手段は、前記反復語句のうちの最初の２つのインスタンスを変更することなく送信し、以後のインスタンスを全て、前記データ語句識別子として送信し、
前記データ語句の各々が固定数のデータ語を含み、
前記データ語の各々がデータ記号及びデータ語句識別子のうちの１つである、システム。
【請求項１８】
前記ライブラリ語句の各々における前記データ語の固定数が２である、請求項１７のシステム。
【請求項１９】
前記データストリームの値に関する情報が受信前に不明であり、前記圧縮データストリームがデータを何も失わず、前記圧縮方法が任意長のデータストリームを処理する、請求項１７のシステム。
【請求項２０】
前記第１の記憶手段は、前記第１のデータ語句がデータストリームの第１の部分に固定回数現れた場合にのみ、前記第１のデータ語句を第２のライブラリ語句として記憶し、
前記第２の置換手段は、前記第１のデータ語句がデータストリームの第１の部分に固定回数現れた場合にのみ、前記第１のデータ語句を前記第２のデータ語句識別子で置き換える、請求項１７のシステム。
【請求項２１】
まだ送信されていないライブラリ語句の第１の集合を識別するための語句識別手段と、
前記第１の集合中の前記ライブラリ語句のうちのいずれかに関連するデータ語句識別子を前記圧縮データストリームの一部として送信する前に、前記ライブラリ語句の第１の集合を送信するための語句送信手段と、
をさらに含む、請求項２０のシステム。
【請求項２２】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するための語句消去手段をさらに含む、請求項２１のシステム。
【請求項２３】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項２２のシステム。
【請求項２４】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合、前記語句消去手段が前記第４のライブラリ語句を消去する、請求項２３のシステム。
【請求項２５】
前記圧縮データストリームを受信するための受信手段と、
前記圧縮データストリームに基いて前記ライブラリ語句を判定するためのライブラリ作成手段と、
をさらに含む、請求項２０のシステム。
【請求項２６】
まだ送信されていないライブラリ語句の第１の集合を識別するための語句識別手段と、
前記第１の集合中の前記ライブラリ語句のうちのいずれかに関連するデータ語句識別子を前記圧縮データストリームの一部として送信する前に、前記ライブラリ語句の第１の集合を送信するための語句送信手段と、
をさらに含む、請求項１７のシステム。
【請求項２７】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するための語句消去手段をさらに含む、請求項２６の方法。
【請求項２８】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項２７のシステム。
【請求項２９】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合、前記語句消去手段が前記第４のライブラリ語句を消去する、請求項２８のシステム。
【請求項３０】
前記圧縮データストリームを受信するための受信手段と、
前記圧縮データストリームに基いて前記ライブラリ語句を判定するためのライブラリ作成手段と、
をさらに含む、請求項１７のシステム。
【請求項３１】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するための語句消去手段をさらに含む、請求項１７のシステム。
【請求項３２】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項３１のシステム。
【請求項３３】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合、前記語句消去手段が前記第４のライブラリ語句を消去する、請求項３２のシステム。
【請求項３４】
データストリームを圧縮し、圧縮データストリームを伸長するためのシステムであって、
複数のデータ記号を有するデータストリームを受信するための受信機と、
複数のライブラリ語句を有する語句ライブラリと、
前記データ受信機に接続され、第１のデータ語と少なくとも第２のデータ語との組み合わせからなる第１のデータ語句が語句ライブラリ中の複数のライブラリ語句のうちの１つである第１のライブラリ語句に一致した場合、該第１のデータ語句を第１の反復語句として識別するための、識別装置と、
前記第１のデータ語句が前記複数のライブラリ語句のいずれにも一致しない場合、前記第１のデータ語句を第２のライブラリ語句として記憶するためのライブラリ構築装置と、
前記第１のデータ語句が前記第１の反復語句として識別された場合には該第１のデータ語句を前記第１のライブラリ語句に関連する第１のデータ語句識別子で置き換えて圧縮データストリームを生成し、前記第１のデータ語句が前記複数のライブラリ語句のいずれにも一致しない場合には該第１のデータ語句を前記第２のライブラリ語句に関連する第２のデータ語句識別子で置き換えるための、置換装置と、
前記識別装置、前記ライブラリ構築装置、及び前記置換装置が、後続データ語句を反復的に識別し、記憶し、及び置き換えるように構成されることと、
前記データストリーム中のデータ記号をさらに受信しながら前記圧縮データストリームを送信するための送信装置と、
からなり、
伸長装置が、前記反復データ語句に対し前記圧縮システムにより生成されたものと同じライブラリ語句を生成できるようにするために、前記反復語句のうちの最初の２つのインスタンスは、変更されることなく送信され、以後のインスタンスは全て、前記データ語句識別子として送信され、
前記データ語句の各々が固定数のデータ語を含み、
前記データ語の各々がデータ記号及びデータ語句識別子のうちの１つである、システム。
【請求項３５】
前記ライブラリ語句の各々における前記データ語の固定数が２である、請求項３４のシステム。
【請求項３６】
前記データストリームの値に関する情報が受信前に不明であり、前記圧縮データストリームがデータを何も失わず、前記圧縮方法が任意長のデータストリームを処理する、請求項３４のシステム。
【請求項３７】
前記ライブラリ構築装置は、前記第１のデータ語句がデータストリームの第１の部分に固定回数現れた場合にのみ、前記第１のデータ語句を第２のライブラリ語句として記憶し、
前記置換装置は、前記第１のデータ語句がデータストリームの第１の部分に固定回数現れた場合にのみ、前記第１のデータ語句を前記第２のデータ語句識別子で置き換える、請求項３４のシステム。
【請求項３８】
まだ送信されていないライブラリ語句の第１の集合を識別するためのライブラリ語句識別子と、
前記第１の集合中の前記ライブラリ語句のうちのいずれかに関連するデータ語句識別子を前記圧縮データストリームの一部として送信する前に、前記ライブラリ語句の第１の集合を送信するためのライブラリ送信機と、
をさらに含む、請求項３７のシステム。
【請求項３９】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するための消去装置をさらに含む、請求項３８のシステム。
【請求項４０】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項３９のシステム。
【請求項４１】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合、前記消去装置が前記第４のライブラリ語句を消去する、請求項４０のシステム。
【請求項４２】
前記圧縮データストリームを受信するための受信装置と、
前記圧縮データストリームに基いて前記ライブラリ語句を判定するためのライブラリ判定装置と、
をさらに含む、請求項３７のシステム。
【請求項４３】
まだ送信されていないライブラリ語句の第１の集合を識別するためのライブラリ語句識別子と、
前記第１の集合中の前記ライブラリ語句のうちのいずれかに関連するデータ語句識別子を前記圧縮データストリームの一部として送信する前に、前記ライブラリ語句の第１の集合を送信するためのライブラリ送信機と、
をさらに含む、請求項３４のシステム。
【請求項４４】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するための消去装置をさらに含む、請求項４３のシステム。
【請求項４５】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項４４のシステム。
【請求項４６】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合、前記消去装置が前記第４のライブラリ語句を消去する、請求項４５のシステム。
【請求項４７】
前記圧縮データストリームを受信するための受信装置と、
前記圧縮データストリームに基いて前記ライブラリ語句を判定するためのライブラリ判定装置と、
をさらに含む、請求項３４のシステム。
【請求項４８】
第１の基準に基いて前記複数のライブラリ語句のうちの第３のライブラリ語句を消去するための消去装置をさらに含む、請求項３４のシステム。
【請求項４９】
前記第１の基準は、前記第３のライブラリ語句が参照されない第１の時間の経過及び前記第３のデータ語句を参照しない記号の第１の数の受信のうちのいずれか一方である、請求項４８のシステム。
【請求項５０】
第４のライブラリ語句が前記第３のライブラリ語句を含む場合、前記消去装置が前記第４のライブラリ語句を消去する、請求項４９のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はデータ圧縮の分野に関するものであり、詳しくは、漸進的で連続的なデータ圧縮の分野に関する。
【０００２】
【従来の技術】
従来の通信システムの重要な目的は、データの帯域幅及びスループットを向上させることである。従来のシステムは、データビットをすべて送信するのではなく、圧縮アルゴリズムを利用することにより、発信元から宛先へ送信する必要があるデータ量を削減している。圧縮アルゴリズムの分類には、無損失圧縮アルゴリズムと有損失圧縮アルゴリズムとがある。無損失圧縮アルゴリズムは、データを情報が失われない形態で圧縮する。これに対して、有損失圧縮アルゴリズムは、データの細部がいくらか除去される可能性のある表現を生成する。
【０００３】
また、圧縮アルゴリズムは、特定目的と多目的とに大まかに分類することもできる。特定目的圧縮は、データ特性の先験的知識を利用できるデータに対して適用される。例えば、ビデオデータは個々のフレームから構成され、フレームの各々は直前のフレームまたは直後のフレームと少量だけ異なることが知られている。そのような場合、特定目的圧縮方法は、この先験的知識の利点を得ることができ、より特定的な、すなわちより効率的であろうと思われる圧縮アルゴリズム及び伸長アルゴリズムを設計することができる。多目的圧縮アルゴリズム（汎用圧縮アルゴリズムとも呼ばれる）は、情報源やデータ特性の先験的知識を何も利用しない。従って多目的圧縮は、効率が悪いことが多く、特定種類のデータ用の特定目的圧縮アルゴリズムよりも圧縮量が少ないことが多い。しかしながら、多目的圧縮アルゴリズムは、多種類のデータに対して有効に適用することができ、上記のようにデータに関する情報が前もって分からなくても適用することができるので、柔軟性が高い。
【０００４】
多目的圧縮アルゴリズムの一分類には、データの反復の識別及び除去に基くものがある。これらの方法は、反復用語や反復語句の辞書を見付ける試みをするので、辞書ベースの圧縮方法と呼ばれている。学習した辞書語句は、一連の目的データ中のそれらの語句の反復を除去するために用いられる。
【０００５】
他の２種類の圧縮アルゴリズムとして、漸進的圧縮アルゴリズムと連続的圧縮アルゴリズムがある。これら２種類の圧縮アルゴリズムは排他的なものではない。即ち、ある圧縮アルゴリズムが増分圧縮アルゴリズムと連続圧縮アルゴリズムの両方である場合もある。漸進的圧縮アルゴリズムは、その出力を生成するために、入力ストリーム全体や入力ストリームのブロック全体を必要としない。替わりに漸進的圧縮アルゴリズムは、入力を処理中であっても（つまり入力をすべて処理し終えた後ではなく）、入力を１記号づつ（即ち、漸進的に）処理して出力を生成する。テキストの中から母音の数を計算するアルゴリズムは、母音の総数を計算するためにその入力全体を処理する必要があるので、基本的には非漸進的アルゴリズムである。一方、小文字を大文字に変換するアルゴリズムは、各入力文字を処理する際に、各入力文字を個別に処理して出力を生成することができるので、漸進的であると言える。
【０００６】
連続的アルゴリズムは、メモリ、ディスク空間等のシステムリソースを使い果たすことなく、無限のストリームの入力データに対して無限に実施することができるアルゴリズムである。連続的アルゴリズムはストリーミングアルゴリズムとも呼ばれる。入力のすべてを処理し終えた後にのみ出力を生成する非漸進的アルゴリズムは、自明であるが、非連続的である（連続的アルゴリズムの場合、入力が無限長であるため）。
【０００７】
データの記憶及び伝送のコストは、対象データのサイズに直接関連する。従って、データから冗長性を取り除くことは、データの記憶及び伝送の効率を改善するために極めて有効な方法である。ほとんどの多目的無損失データ圧縮アルゴリズムは、次の２つの主な方法でデータから冗長性を除去しようと試みる。（１）反復用語及び反復語句の識別及び除去、及び、（２）より効率的な形態へのデータの圧縮、である。
【０００８】
反復用語または反復語句の識別は、様々な方法で実施することができる。一般的な原理は、一例として示すことができる。数１の文字のシーケンスを考える。
【数１】
Ｓ＝ａａｂｃａａｂｄａａｂｅａａｂｆ
辞書ベースの圧縮アルゴリズムは、このシーケンス中で４回反復されている語句「ａａｂ」を識別することができる。圧縮アルゴリズムが「ａａｂ」のインスタンスをすべて新たな記号、例えばＡで置き換えた場合、このシーケンスはより効率的に記憶または送信される。圧縮されたシーケンスは、数２のようなものになる。
【数２】
Ｓ＝ＡｃＡｄＡｅＡｆ
圧縮アルゴリズムは、上記の圧縮されたシーケンスに加えて、伸長の際にＡのインスタンスをすべて「ａｂｂ」で置き換える必要があることを示す付加的な命令も、記憶または送信しなければならない。従って、命令Ａ＝ａａｂは、圧縮が基礎にした辞書語句である。伸長を可能にするためには、圧縮文字列と共に、この辞書も記憶または送信しなければならない。この例では辞書が簡単に判定されたが、与えられた入力について最大限の圧縮が得られる辞書を見付けることの問題は、ＮＰ完全問題として、J.A.Storer著「Data compression via textual substitution」, Journal of Association for Computing Machinery, 29(4):928-951(1982)に記載されており、この記事はここで参照することによりその全体を本明細書に援用する。
【０００９】
データの符号化には、頻繁に現れる文字をより効率的に表現できるように（例えば少数のビットで）、１文字ごとのデータ表現の変更も必要である。数３の１４文字のシーケンスを考える。
【数３】
Ｓ＝ａｂａｃａｄａｅａｆａｇａｈ
この場合、文字「ｂ〜ｈ」の各々が一回しか現れないのに対して、文字「ａ」は７回現われている。アルファベット全体が「ａ〜ｈ」の８文字だけで構成されるものと仮定した場合、表１に示すように、それらは１文字当たり３ビットを用いて２進数形態で表現することができる。
【表１】
0004759214.tif 000002
その結果、シーケンス（Ｓ）には全部で１４×３＝４２ビットが必要になる。一方、データ中に文字「ａ」が比較的頻繁に現れることが分かっている場合、「ａ」をもっと少ないビットで表現し、アルファベットの残りの文字についてのビット数を増大させる方が効率的になる場合がある。例えば、これらの８文字は、表２に示すように表現を変更することができる。
【表２】
0004759214.tif 000003
その場合、文字列Ｓは、７個の文字「ａ」の各々を表現するために１ビットを、残りの文字の各々を表現するために４ビットを必要とする。従って、Ｓに必要な全空間は、７×１＋７×４＝３５ビットになる。この表現は、１６パーセント以上の節約になる。
【００１０】
このような統計的符号化方法には、ハフマン符号や算術符号など、様々な例が存在する。これらの方法の詳細については、D.A.Huffman著「A method for the construction of minimum-redundancy codes, Proceedings IRE, 40:1098-1101(1952)、並びに、Neal及びCleary著「Arithmetic coding for data compression」,Communications of the Association for Computing Machinery, 30(6):520-540(1987)に記載があり、これらはここで参照するすることによりその全体を本明細書に援用する。
【００１１】
多数のこうした統計的符号化方法によって提供される一般的な原理は、Shanon著「A Mathematical Theory of Communication」,Bell System Technical Journal, 27:389-403(1948)に記載されており、この記事はここで参照することによりその全体を本明細書に援用する。シャノン(Shanon)氏は、確率Ｐで出現する文字または文字列を符号化するために必要なビット数が−ｌｏｇ2Ｐであることを示している。従って、ａ〜ｈの８文字の各々が同じ確率で生じるものであればＰ＝１／８であるから、各文字は−ｌｏｇ2（１／８）＝３ビットに符号化することができる。しかしながら、上記の例では、文字「ａ」が確率７／１４で発生し、残りの文字が確率１／１４で発生することが分かっている。従って、「ａ」は−ｌｏｇ2（７／１４）＝１ビットで符号化し、残りの文字の各々は−ｌｏｇ2（１／１４）＝３．８ビットで符号化することができる。
【００１２】
他の符号化方法としてはランレングス符号化がある。この場合、同じ文字のシーケンスは、その文字の１つのインスタンス及びそれに続くその文字の反復回数で置き換えられる。一例を数４に示す。
【数４】
Ｓ＝ａａａａａｂｂｂｂｂ
この文字列は、ランレングス符号化を用いると、数５のように符号化される。
【数５】
Ｓ＝ａ５ｂ５
従来の辞書ベースの多目的無損失圧縮アルゴリズムの多くは上記２つの方法の組み合わせに基くものであり、例えば、まず反復語句の辞書ベースの圧縮を行い、続いてその圧縮ストリームの統計的符号化を行なう。
【００１３】
従来の圧縮方法の１つは、Ziv及びLempel著「A Universal Algorithm for Sequential Data Compression」, IEEE Transactions on Information Theory, IT-23(3):337-343(1977)に記載されており、この論文はここで参照することによりその全体を本明細書に援用する。この広く利用されている辞書ベースの多目的圧縮方法はＬＺ７７と呼ばれており、いくつかの他の圧縮アルゴリズムの基礎となっている。ＵＮＩＸ(R)ベースのオペレーティングシステムに広く配布されている「gzip」圧縮プログラムは、ＬＺ７７方法の変形である。ＬＺ７７は、固定サイズのウィンドウ内の語句の以前のインスタンスを指すポインタの利用に基くものである。ウィンドウを入力シーケンスに対してスライドさせることによってデータ内の反復語句を見つけ出し、ウィンドウ内の何らかの重複した文字列をサーチする。例えば、数６の入力シーケンスを考える。
【数６】
Ｓ＝ａｂｃｄｅｆｂｃｄｇｈ
ＬＺ７７方法は、語句「ｂｃｄ」が２回反復されていることを判定し、この情報を用いて入力シーケンスを圧縮する。「ｂｃｄ」の最初のインスタンスは変更しない。２番目のインスタンスは、Ｓの始まりから「ｂｃｄ」の最初のインスタンスまでの距離およびその反復の長さから成るポインタで置換される。従って、ＬＺ７７によって表現されるシーケンスＳは、数７のとおりになる。
【数７】
Ｓ＝ａｂｃｄｅｆ（１，３）ｇｈ
このポインタ（１，３）は、ウィンドウの始まりから距離１で始まり右に３文字分続く語句がそのポインタの現在位置で反復されていることを示している。この方法の変形として、現在位置から後方への距離をそのポインタの第１の要素として用いることもできる（ウィンドウの始まりから前方への距離に換えて）。この場合、Ｓは数８のように表現される。
【数８】
Ｓ＝ａｂｃｄｅｆ（５，３）ｇｈ
このポインタ（５，３）は、現在位置から後方に距離５の位置から右に３文字分続く語句が反復されていることを示している。
【００１４】
従来のＬＺ７７ベースの圧縮プログラムは、上記のポインタベースの方法を用いて、可変長の反復を固定長のポインタに変換している。そして、得られた記号及びポインタに対して統計的符号化方法を適用して圧縮する。これらのプログラムは、反復語句を見付けるための方法と最終的なデータストリームを符号化するための方法に、異なる方法を用いることができる。
【００１５】
ＬＺ７７方法の１つの問題は、この方法が固定サイズのウィンドウ内の反復だけしか検出できないことである。ウィンドウサイズが限られているので、ウィンドウサイズよりも長い距離離れた反復データを検出することはできない。例えば、上記の例でウィンドウサイズを５文字に縮小した場合、「ｂｃｄ」の最初のインスタンスの始まりから２番目の距離の終わりまでの全長は５よりも大きいので、「ｂｃｄ」の反復を検出することはできない。ＬＺ７７方法でウィンドウサイズが限られているのは、反復をサーチするのに要する時間を制限するためである。ＬＺ７７方法に用いられるサーチアルゴリズムの複雑性及び実行時間は通常、サーチする入力文字列のサイズの関数になる。そのため、従来のＬＺ７７圧縮方法は、たいていウィンドウサイズを数千文字までに制限している。例えば、「gzip」プログラムは３２キロバイトのウィンドウを用いている。ウィンドウサイズを増大させると、ＬＺ７７アルゴリズムの実行時間は著しく増大してしまう。
【００１６】
ＬＺ７７圧縮方法を用いる他のプログラムは、十分な圧縮率を得るために、第２ステージの統計的符号化が必要である。ＬＺ７７方法で用いられる統計的符号化方法は、非漸進的な、従って非連続的な方法である（例えばgzipはハフマン符号化を利用しており、この符号化は漸進的ではない）。非漸進的符号化方法は、ブロックデータの符号木を出力する前に、そのブロックデータを完全に処理しなければならない。また、非漸進的符号化方法で用いられるブロックサイズは、その符号化方法が十分な符号木を生成できるように、十分大きなものである必要がある。従ってＬＺ７７方法は、漸進的に処理する必要がある連続したデータストリームが存在するリアルタイム圧縮即ちオンライン圧縮は、扱うことができない。
【００１７】
ＬＺ７７方法のもう１つの問題は、ポインタがウィンドウ内のいずれの位置も指し示すことができるので、ポインタの数が極めて多くなる可能性があるということである。
【００１８】
ＺｉｖおよびＬｅｍｐｅｌｌは、１９７８年に、ＬＺ７７が有する問題のいくつかをＬＺ７８と呼ばれる新たな圧縮方法を提案することにより解決した。これについては、Ziv及びLempel著「Compression of Individual Sequences Via Variable Rate Coding」, IEEE Transaction on Information Theory, IT-24(5):530-536(1979)に記載されており、この論文はここで参照することによりその全部を本明細書に援用する。ＬＺ７８方法は、ウィンドウ内の位置を指し示すポインタを用いる代わりに、入力ストリーム内で遭遇したすべての辞書語句の明示的表現を用いている。この辞書は、以前の辞書語句の上に構築することにより、漸進的に構築される。新たな語句が見付かるたびに、その語句が将来使われるであろうという仮定の下で、その語句を辞書に追加する。数９の入力シーケンスを考える。
【数９】
Ｓ＝ｃｂａａｂａｃａｃｃａｃｃｃａｃｃｃｃ
ＬＺ７８は、０を空文字列、ｃを最初の文字として、語句（０，ｃ）を生成する。また、次の２文字によって、２つの新たな語句（０，ｂ）及び（０，ａ）が生成される。最終的な語句のシーケンスを表３に示す。
【表３】
0004759214.tif 000004
従って、シーケンスＳの最終的な符号化は、表３に示すような「出力語句」の列になる。この例から分かるように、辞書エントリ１，２及び４は、この符号化で全く使用されないので、この辞書の無駄なエントリである。例えば、「ａｃ」についての辞書エントリは再利用されて漸進的に「ａｃｃ」、「ａｃｃｃ」及び「ａｃｃｃｃ」を生成するのに対して、「ａｂ」についてのエントリは２度と使用されることがないので、無駄である。
【００１９】
ＬＺ７８方法が抱える１つの問題は、ＬＺ７８方法がきわめて積極的で推測的な辞書構築方法をとっているので、有用に用いられない語句を構築してしまうことがしばしばあるということである。そのため、辞書が極めて大きくなってストリームリソースを十分に利用できなくなり、圧縮効率が低下する可能性がある。また、ＬＺ７８方法は、辞書が低速度で成長するので、収束速度も遅い。また、ＬＺ７８ベースの圧縮プログラムは、非漸近的な統計的符号化方法を用いて圧縮効率及びプログラム速度を向上させているので、オンラインデータすなわち連続データには用いることができない。さらに、もはや使用されることのない語句または辞書語句を忘れさせる（消去する）ための用意もない。連続的で、無限に続く可能性があるストリームデータにおいて、ＬＺ７８アルゴリズムで使用されていないシステムリソースを再利用するためには、新たな辞書語句を動的に生成するだけでなく、頻繁に使用されない語句を忘れさせることも重要である。従って、ＬＺ７８アルゴリズムは連続的圧縮アルゴリズムではない。
【００２０】
第３の種類の圧縮アルゴリズムは、Nevill-Mannning著「Compression and Explanation Using Hierarchical Grammars」,Computer Journal, 40(2):103-116(1997)に記載されたSEQUITURアルゴリズムであり、この文献はここで参照することによりその全体を本明細書に援用する。SEQUITURアルゴリズムは、離散的記号のシーケンスから前後関係のない文法を推論する。この文法階層は、シーケンスの構造を表していて、そのシーケンスの構造の有用な視覚的説明の生成、及び、そのシーケンスの形態的単位の推論に用いることができる。この文法は入力シーケンス全体を完全に表現するので、SEQUITURアルゴリズムもデータ圧縮に用いることができる。
【００２１】
SEQUITURは、入力シーケンスに対して２つの制限を課すことにより、機能する。第１の制限は、隣接記号のペアが２回以上現れてはならないことである。第２の制限は、このアルゴリズムによって生成された各ルールが２回以上使用されなければならないことである。SEQUITURは、入力シーケンスを漸進的に検査することによってこれらの制限を適用し、シーケンス内の各位置で両方の制限が満たされていることを保証する。例えば、数１０に示す入力シーケンスの場合、
【数１０】
Ｓ＝ａｂｃｄｂｃａｂｃｄ
SEQUITURは、数１１の文法を生成する。
【数１１】
Ｓ＝ＢＡＢ
Ａ＝ｂｃ
Ｂ＝ａＡｄ
ここで、Ａ及びＢは、この文法のルールであり、辞書語句に類似したものである。上記の文法は、２回以上出現する記号対がないので、第１の制限を満たしている。また、ＡとＢが両方ともこの文法中で少なくとも２回使用されているので、第２の制限も満たしている。
【００２２】
SEQUITURは、入力シーケンス全体が文法で表現されているので、算術符号化を適用して全文法を符号化することにより、このアルゴリズムを用いて圧縮する。文法のルール（即ち辞書語句））が反復の以前のインスタンスを指すポインタで伝送されるという点は、ＬＺ７７で述べた上記の方法に似ている。この文法のルールに初めて遭遇したとき、その内容が送信される。ルールの第２のインスタンスは、そのルールを構築するのに使用されたシーケンスの領域（例えば、そのルールの第１のインスタンスの内容）を指すポインタとして送信される。デコーダ及びエンコーダが互いのルール番号の進み具合を見ることができるという仮定の下で、このルールのその後のインスタンスは、すべてルール番号として送信される。
【００２３】
SEQUITUR圧縮方法が抱える１つの問題は、暗示的な漸進ではないことである。文法が最少数の記号で送信されることを保証するため、SEQUITURは、送信前にその文法を完全に構築しなければならない。SEQUITURは、シーケンスＳの中の送信位置を余分な記号が送信される確率が低くなる位置に選択することにより、漸進的に見えるようにすることもできる。圧縮シーケンス中の特定位置がそのシーケンスを送信するのに安全な位置であるか否かを判定するためのこのアルゴリズムは、その位置の直前の記号の以前のインスタンスをすべて検査する必要がある。SEQUITURは、入力シーケンスの圧縮を通じてこれらの位置を動的に選択する必要があるので、このアルゴリズムは、著しい量の余分な処理をしてこれらの送信位置を探しつづける。この追加の処理（SEQUITURを漸進的にするために必要な処理）により、圧縮アルゴリズム全体が非線形になり、著しく非効率になる。
【００２４】
SEQUITURアルゴリズムが抱えるもう１つの問題は、連続的でないことである。このアルゴリズムは、あまり頻繁にアクセスされないルールや記号を消去しつつ圧縮された出力を漸進的に送信するための手段を何も備えていない。そのため、SEQUITURは、入力データの無限のストリームや極めて大きなストリームに対して適用し、圧縮された出力の連続ストリームを線形時間で生成することはできない。
【００２５】
また、SEQUITURアルゴリズムは、可変長ルールの頻繁な作成及び消去を可能にするために複雑なデータ構造を必要とするので、システムリソースの利用という点でも非効率である。さらにこのアルゴリズムは、反復語句内の記号対の各々についてルールの作成及び消去が必要になるので、長い反復を検出するときに計算が不十分である。従って、反復のインスタンスの各々の追加は、複数のルールの作成及び消去の計算オーバヘッドも招く。また、ルールの第２のインスタンスをポインタとして送信するためのSEQUITURの方法は、さらなる処理及びメモリオーバヘッドが必要になる。
【００２６】
第４の圧縮アルゴリズムは、Larsson及びMoffat著「Offline Dictionary-Based Compression」, Proceedings Data Compression Conference」,196-305(1999)に記載された再帰対合(Re-Pair)アルゴリズムであり、この論文はここで参照することによりその全体を本明細書に援用する。Re-Pairアルゴリズムは、入力シーケンス全体を再帰的に検査して最も頻繁に発生する記号対を識別することにより、圧縮に最適な辞書の計算を試みる。このアルゴリズムの各ステージでは、最も頻繁に発生する記号対が辞書に対する新たな追加を表す新たな記号に置き換えられる。次に、この修正されたシーケンス全体を再び検査して、現在最も頻繁に発生するペアを見付ける。この処理は、２回以上出現するペアが無くなるまで繰り返される。次いで、結果得られた圧縮シーケンス及び辞書を符号化し、最終的に圧縮された出力を生成する。
【００２７】
このアルゴリズムの主な欠点は、基本的に漸進的でなく、連続的でないことである。何らかの出力を生成するまでに、入力シーケンス全体を再帰的に処理する必要がある。著者自身、このアルゴリズムが「オフライン」の技術であると述べている。
【００２８】
データ圧縮システム及び方法は、（１）多目的圧縮アルゴリズムであり、（２）無損失圧縮アルゴリズムであり、（３）データの線形増加に対して実行時間の非線形増加が必要なく、（４）データウィンドウサイズに制限がなく、（５）漸進的圧縮アルゴリズムであり、（６）連続的圧縮アルゴリズムであることが必要とされている。
【００２９】
発明の概要
本発明は、仮想的な無制限サイズのウィンドウ内の可変長の反復語句を検出及び除去することが可能な効率的圧縮アルゴリズムである。このウィンドウサイズは、利用可能なシステムメモリの量だけにしか制限されず、アルゴリズムの速度には影響を与えない。本発明は、線形実行時間で動作する多目的の無損失圧縮アルゴリズムであり、無制限のウィンドウサイズを利用することができ、言うまでもなく暗示的に漸進的であり、連続入力ストリームに対して連続的に動作させることができる。
【００３０】
【発明の実施の形態】
次に、本発明の好ましい実施形態を図面を参照して説明する。図面において、似たような符号は、全く同じ要素または機能的に類似した要素を指している。また、図面において、各符号の一番左の桁は、その符号が最初に使用された図面に対応している。
【００３１】
図１は、本発明の一実施形態が動作するコンピュータシステムを示す図である。コンピュータシステム１００は、第１のシステム１０２Ａおよび第２のシステム１０２Ｂを含む。各システムは、スタンドアロンのコンピュータでもよいし、ソフトウェアプロセスでもよい。各システムは、従来のプロセッサ１１０、記憶装置１１２、入出力装置１１４、及び、オペレーティングシステム１１６を含む。また、各システムは、符号化・カプセル化（ＥＥ）ユニット１０６、及び、復号・分離（ＤＤ）ユニット１０８をさらに含む。ＥＥユニット及びＤＤユニットは、プロセッサ上で動作するソフトウェアとして実現することもできるし、専用に設計されたハードウェア（この場合、プロセッサは不要である）として実現することもできる。２つのシステム１０２Ａ及び１０２Ｂは、何らかの物理ネットワークリンクまたは論理ネットワークリンクを介して接続される。本発明は２つのシステムのうちのどちらでも完全に動作し、図１に示した実施形態は例示的なものであって、本発明の範囲を制限する意図はないものと考える。ＥＥユニット１０６及びＤＤユニット１０８の動作については、以下で詳しく説明する。例えば、他の実施形態では、ＥＥユニット１０６及びＤＤユニット１０８は、特定用途用集積回路（ＡＳＩＣ）の一部である場合がある。
【００３２】
ＥＥユニット１０６は、本発明の圧縮方法を実施するものである。ＥＥユニット１０６は、例えばコンピュータソフトウェアプログラム、ハードウェア及びファームウェア、又はこれらの組み合わせのうちのいずれとして実施することもできる。一実施形態では、本発明の圧縮方法は、ＥＥユニット１０６の従来の記憶モジュールに格納されたソフトウェアとして実現され、プロセッサ１１０によって実行される。本発明の圧縮方法は、線形時間の完全に漸進的な連続的データ圧縮アルゴリズムである。参照を容易にするため、本明細書では、このアルゴリズムを「ＩＺ」と呼ぶ。本発明の伸長態様は、ＤＤユニット１０８で実施され、例えばコンピュータソフトウェアプログラム、ハードウェア及びファームウェア、又はこれらの組み合わせのうちのいずれとして実施することもできる。
【００３３】
本発明には、同期して動作する３つの構成要素が含まれる。図２は、本発明の一実施形態による符号化・カプセル化（ＥＥ）ユニット１０６及び復号・分離（ＤＤ）ユニット１０８の構成要素を示す図である。第１の構成要素は検出器構成要素２０２であり、入力ストリーム中のどこかにある反復した語句／用語を線形時間で検出する。本発明の目的について、「語句」と「記号」は交換可能に用いられる。「語句」または「データ語句」には、固定数の連続したデータ語が含まれる。データ語は、データ記号及び／又はデータ語句識別子である。検出器構成要素２０２は、仮想的な無制限のウィンドウサイズを用いて反復した語句を識別及び除去することにより、入力ストリームを漸進的に圧縮する。これらの処理は、識別ユニット、圧縮ユニット及びライブラリ構築ユニット（ハッシュ構築ユニット）を検出器構成要素の一部として用いることにより行なうことができる。これらの要素の動作については、図３及び図４を参照して以下で詳しく説明する。第２の構成要素は伝送構成要素２０４であり、圧縮シーケンス及びそれに関連する辞書語句を明示的に漸進的な方法で送信する。また、伝送構成要素２０４は、圧縮アルゴリズムと伸長アルゴリズムとが常に完全に同期されていることも保証する。第３の構成要素は消去構成要素２０６であり、システムリソースを開放するため、ＩＺアルゴリズムがあまり頻繁に使用しない語句及び記号を効率的に「忘れる」させる。従って、消去構成要素２０６は、ＩＺが入力データの無限のストリームに対して連続的に動作できるようにする。ＤＤユニット１０８は、以下で説明する伸長ユニットを含む。
【００３４】
検出器構成要素２０２、伝送構成要素２０４、及び、消去構成要素２０６は、様々な方法で実現することができる。検出器構成要素の一実施形態を図３に示す。
【００３５】
語句検出アルゴリズムは、以下のステップを用いて入力シーケンスＳを圧縮シーケンスＳ’に漸進的に変換する。
【００３６】
反復記号対の検出は、検出器構成要素２０２で観測された一意の記号対をすべてハッシュテーブル（例えばライブラリ）に記録することにより、実施することができる。各ハッシュテーブルエントリは、一意の記号対の位置を指すポインタから成る。記号対が一回しか出現しなかった場合、その記号対のハッシュテーブルエントリは、Ｓ’の最初の記号の位置を指す。記号対が２回以上出現した場合、すなわち辞書語句で表現されている場合、その記号対のハッシュテーブルは対応する辞書語句を指す。すべての反復記号対を検出するため、このアルゴリズムは、Ｓ’に記号が追加または削除されるたびにハッシュテーブルが適当に更新されることを保証しなければならない。例えば、図３に示すアルゴリズムのステップ３１４では、テーブルに新たなエントリを追加する。同様に、ステップ３１４、３１８及び３３２では、ハッシュテーブルから１以上のエントリを消去する。
【００３７】
次に、図４の例を参照して、図３のフロー図について説明する。
【００３８】
図４の例は、入力シーケンスが「ａｂｃｄｃｄａｂｃｄ」である。ステップ３０２で「Ｙ」を次の入力記号「ａ」にセットし、ステップ３０４でＹをＳ’（前もって空に設定されている）に追加する。次いでＸを入力シーケンス内の「ａ」の前の記号（空）にセットする。ステップ３０８でＸＹの組み合わせはまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２に戻って処理を繰り返す。図４の１行目は、この時点での例の状態を示している。
【００３９】
次に、ステップ３０２でＹを次の記号「ｂ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号「ａ」にセットする。ステップ３０８でＸＹの組み合わせ（ａｂ）がまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２に戻って処理を繰り返す。図４の２行目は、この時点での例の状態を示している。
【００４０】
次に、ステップ３０２でＹを次の記号「ｃ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号「ｂ」にセットする。ステップ３０８でＸＹの組み合わせ（ｂｃ）がまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２に戻って処理を繰り返す。図４の３行目は、この時点での例の状態を示している。
【００４１】
次に、ステップ３０２でＹを次の記号「ｄ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号「ｃ」にセットする。ステップ３０８でＸＹの組み合わせ（ｃｄ）がまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２に戻って処理を繰り返す。図４の４行目は、この時点での例の状態を示している。
【００４２】
次に、ステップ３０２でＹを次の記号「ｃ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号「ｄ」にセットする。ステップ３０８でＸＹの組み合わせ（ｄｃ）がまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２に戻って処理を繰り返す。図４の５行目は、この時点での例の状態を示している。
【００４３】
次に、ステップ３０２でＹを次の記号「ｄ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号「ｃ」にセットする。ＸＹの組み合わせ（ｃｄ）が以前に出現しているので、処理は継続される。ステップ３１０で、ＸＹが以前出現したのはシーケンスＳ’の中であって辞書語句の右辺ではないので、これはＸＹが新たに作成して辞書に追加しなければならない語句であることを意味している。従って、ステップ３１２で新たな辞書語句Ｐ1を作成してそれをＸＹにセットすることにより、処理は継続される。この例の場合、Ｐ1を「ｃｄ」にセットする。次にステップ３１４で、Ｓ’中のＸＹの前のインスタンスをＰ1で置き換える。ステップ３１４の置き換えにより、ハッシュテーブルから２つのエントリが取り除かれ、新たな２つのエントリがハッシュテーブルに追加されることに注意して欲しい。これらのハッシュテーブルの更新には、Ｘの直前の記号（Ｘpと呼ぶ）とＹの直後の記号（Ｙnと呼ぶ）が必要である。Ｓ’からＸＹが取り除かれるので、記号対ＸpＸ及びＹＹnもハッシュテーブルから取り除かなければならない。ＸＹがＰiで置き換えられるので、記号対ＸpＰi及びＰiＹnもハッシュテーブルに追加しなければならない。この例では、ハッシュテーブルから「ｂｃ」及び「ｄｃ」が取り除かれ、「ｂＰ1」及び「Ｐ1ｃ」がハッシュテーブルに追加される。次に、ステップ３１６でＳ’の最後からＹを取り除き、ステップ３１８でＳ’の最後からＸを取り除き、その結果、ハッシュテーブルから記号対（Ｘの直前の記号及びＸに対応する）が取り除かれる。この例では、ハッシュテーブルから「Ｐ1ｃ」が取り除かれることになる。次に、ＹをＰ1にセットし、処理はステップ３０４に続く。この時点での例の状態は、Ｓ’＝ａｂＰ1で、Ｙ＝Ｐ1である。
【００４４】
次に、ステップ３０４でＹをＳ’追加し（Ｓ’＝ａｂＰ1Ｐ1になる）、ステップ３０６でＸをＳ’中のＹの直前の記号（Ｐ1）にセットする。ステップ３０８でシーケンス中にＸＹ（Ｐ1Ｐ1）がまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２から処理を繰り返す。図４の６行目は、この時点での例の状態をＳ’＝ａｂＰ1Ｐ1で示している。
【００４５】
次に、ステップ３０２でＹを次の記号「ａ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号（Ｐ1）にセットする。ステップ３０８でＸＹの組み合わせ（Ｐ1ａ）がまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２から処理を繰り返す。図４の７行目は、この時点での例の状態を示している。
【００４６】
次に、ステップ３０２でＹを次の記号「ｂ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号（「ａ」）にセットする。シーケンス中にＸＹの組み合わせ（ａｂ）が既に出現しているので、処理は継続される。ステップ３１０で、ＸＹが以前出現したのはシーケンスＳ’の中であって辞書語句の右辺ではないので、これはＸＹが新たに作成して辞書に追加しなければならない語句であることを意味している。従って、ステップ３１２で新たな辞書Ｐ2を作成し、それをＸＹにセットすることにより、処理は継続する。この例の場合、Ｐ2を「ａｂ」にセットする。次にステップ３１４で、Ｓ’中のＸＹの以前のインスタンスをＰ2で置き換える。前と同様に、このステップの結果、ハッシュテーブルから２つの記号対が取り除かれ、２つの新たな記号対が追加される。次にステップ３１６でＳ’の最後からＹを取り除き、ステップ３１８でＳ’の最後からＸを取り除く（その結果ハッシュテーブルから１つの記号対が除去される）。次にＹをＰ2にセットし、処理はステップ３０４に続く。この時点での例の状態は、Ｓ’＝Ｐ2Ｐ1Ｐ1で、Ｙ＝Ｐである。
【００４７】
次に、ステップ３０４でＹをＳ’に追加し（Ｓ’＝Ｐ2Ｐ1Ｐ1Ｐ2になる）、ステップ３０６でＸをＳ’中のＹの直前の記号または語句（この場合実際にはデータ語句識別子「Ｐ1」）にセットする。ステップ３０８でＸＹ（Ｐ1Ｐ2）がシーケンス中にまだ発生していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２から処理を繰り返す。図４の８行目は、この時点での例の状態をＳ’＝Ｐ2Ｐ1Ｐ1Ｐ2で示している。
【００４８】
次に、ステップ３０２でＹを次の記号「ｃ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号（Ｐ2）にセットする。ステップ３０８でＸＹの組み合わせ（Ｐ2ｃ）がまだ出現していないので、ＸＹをハッシュテーブルに追加し、ステップ３０２から処理を繰り返す。図４の９行目は、この時点での例の状態を示している。
【００４９】
次に、ステップ３０２でＹを次の記号「ｄ」にセットし、ステップ３０４でＹをＳ’に追加し、ステップ３０６でＸをＹの直前の記号（「ｃ」）にセットする。シーケンス中にＸＹの組み合わせ（ｃｄ）が既に出現しているので、処理は継続する。ステップ３１０でＸＹが辞書語句の右辺であるから、ステップ３３０でＳ’の最後からＹを取り除き、ステップ３３２でＳ’の最後からＸを取り除くことにより、処理が継続する。ステップ３３２でＳ’の最後からＸを取り除いた結果、ハッシュテーブルから記号対（Ｘの直前の記号及び記号Ｘに対応する）が取り除かれる。次に、ステップ３３４でＹを辞書語句ＸＹにセットする。この例では、ＹをＰ1にセットする。処理はステップ３０４に続く。この時点での例の状態は、Ｓ’＝Ｐ2Ｐ1Ｐ1Ｐ2で、Ｙ＝Ｐ1である。
【００５０】
次に、ステップ３０４でＹをＳ’に追加し（Ｓ’＝Ｐ2Ｐ1Ｐ1Ｐ2Ｐ1になる）、ステップ３０６でＸをＳ’中のＹの直前の記号（「Ｐ2」）にセットする。シーケンス中にＸＹの組み合わせ（Ｐ2Ｐ1）が既に出現しているので処理は継続し、ステップ３１０でＸＹが辞書語句の右辺ではないので、ステップ３１２で新たな辞書語句Ｐ3を作成してそれをＸＹにセットすることにより、処理は継続する。この例では、Ｐ3を「Ｐ2Ｐ1」にセットする。次にステップ３１４で、Ｓ’中のＸＹの以前のインスタンスをＰ3で置き換える。次にステップ３１６でＳ’の最後からＹを取り除き、ステップ３１８でＳ’の最後からＸを取り除く。次にＹをＰ3にセットし、処理はステップ３０４に続く。この時点での例の状態は、Ｓ’＝Ｐ3Ｐ1で、Ｙ＝Ｐ3である。
【００５１】
次に、ステップ３０４でＹをＳ’に追加し（Ｓ’＝Ｐ3Ｐ1Ｐ3になる）、ステップ３０６でＸをＳ’中のＹの直前の記号（「Ｐ1」）にセットする。ステップ３０８でシーケンス中にＸＹ（Ｐ1Ｐ3）がまだ出現していないので、ステップ３０９でＸＹをハッシュテーブルに追加し、ステップ３０２から処理を繰り返す。図４の１０行目は、この時点での例の状態をＳ’＝Ｐ3Ｐ1Ｐ3で示している。この処理は、任意数の入力について続けることができる。
【００５２】
本発明は、入力ストリーム中のどこにある反復でも検出することができる。本発明は、明示的なサーチウィンドウを必要としないので、反復がどんなに離れて発生してもそれらを検出することができる。本アルゴリズムを連続的にするため、下記のようにウィンドウ化を適用する場合もあるが、このウィンドウはシステムメモリのサイズに基いているので、アルゴリズムの速度に悪影響を与えることはない。上記のアルゴリズムは、時間及び空間について線形なものとして例示してきた。線形性の検査は、長さｎのシーケンスを処理するために必要な処理の総数の計算に基く。この数は、Ｏ（ｎ）として示している（例えば、ｎに比例する数による境界である）。従って本発明は、仮想的な無制限のウィンドウにわたる可変サイズの反復を線形時間で検出することができる。また、フレーズ内の各記号対についてＩＺがルールの不要な作成及び消去を何も必要としないので、SEQUITUR方法などの上記の他の方法に比べて反復した語句の検出も効率的である。
【００５３】
伝送構成要素２０４は、圧縮されたシーケンス（Ｓ’）とともに語句の辞書（Ｐi）も送信することにより、正しい伸長を保証する。従って、伝送構成要素は、圧縮ユニットが伸長ユニットに存在しない辞書語句を絶対に送信しないことを保証し、それらが伸長ユニットによって参照されないことを保証しなければならない。本アルゴリズムが完全に漸進的であることを保証するため、ＩＺは、図５に示す下記の処理を用いてＳ’及び語句辞書を送信する。
【００５４】
図５は、本発明の一実施形態による伝送手順を示すフロー図である。ステップ５０２で、ポインタ（Ｔ）は、圧縮シーケンス（Ｓ’）中の送信の完了した最後の記号を指し示すために用いられる。新たな語句を辞書に追加（例えば図３のステップ３１２）するのに先立って、Ｓ’のＴから最後までの全ての記号を送信する。次にステップ５０６で、反復語句の両方のインスタンスを、Ｓ’の最後のインスタンスを含む新たに作成した語句で置き換える（例えばステップ３１２〜３２０）。次にステップ５０８で、Ｓ’の最後に追加された新たな語句を指すようにポインタ（Ｔ）をセットする。
【００５５】
図５に示した実施形態の効果は、出現した反復語句の最初の２回は変更されることなく送信されることである（本発明の代替の実施形態では他の変形がなされる場合もあり、そのうちのいくつかは以下で説明する）。各反復が入れ子になった記号対から構成されるので、反復語句の２番目のインスタンスは、その内容（２つの記号しか含まれない）を直接送信することにより、処理オーバヘッドの追加を要するポインタを用いた送信よりも効率的に送信される。従って、伸長アルゴリズムは、反復語句の最初の２つのインスタンスを、圧縮アルゴリズムと全く同じ形態で受信する。これにより、伸長アルゴリズムは、圧縮アルゴリズムで生成された辞書語句と全く同じ辞書語句を生成することが可能になる。伸長アルゴリズムが圧縮アルゴリズムと同じ語句番号付け方法を使用するので、圧縮アルゴリズムは、その語句のその後のインスタンスをすべて一つの語句番号として送信することが可能になる。
【００５６】
ＤＤ１０８は伸長ユニット２０８を含み、伸長ユニット２０８は伸長アルゴリズムを例えばコンピュータプログラム、ファームウェア、またはハードウェアなどの形態で伸長構成要素２１０に含む。図６は、本発明の一実施形態による伸長アルゴリズムを示すフロー図である。伸長アルゴリズムは、圧縮アルゴリズムと完全に同期していることを確認しながら、元の入力ストリームを生成する。
【００５７】
ステップ６０２で、圧縮記号の各々を受信し、ステップ６０４で、伸長ユニット２０８はその記号が辞書語句番号、例えばＰiに対する参照であるか否かを判定する。その記号がそのような参照であった場合、伸長ユニット２０８はステップ６０６でその語句番号の内容を取り出して元の入力シーケンスを生成する。次いで伸長ユニットは、ステップ６０８で最後の送信ステップを除くすべての圧縮ステップを通してその語句の内容を渡すことにより、圧縮アルゴリズムと伸長アルゴリズムを同期させる。
【００５８】
その記号が辞書語句番号に対する参照ではなかった場合、伸長アルゴリズム２０８はすべての圧縮ステップを通して（最後の送信ステップを除く）その記号を渡すことにより、伸長アルゴリズムと圧縮アルゴリズムが同期することを保証する。ステップ６１２で、これらの処理は、受信したすべての記号について繰り返される。
【００５９】
本発明の一実施形態は語句を生成するために必要な内容をその語句を生成する直前に送信するので、伸長アルゴリズムが語句を生成し終わる前にその語句に対する参照を受信することは絶対にない。従って、圧縮アルゴリズムと伸長アルゴリズムとが同じ番号付け方法を保持し、それぞれの辞書が同じ情報を有していることが暗示的に保証される。この暗示的辞書同期方法は、圧縮アルゴリズムによって送信される圧縮データが、送信されたときと全く順番で伸長ユニットに受信されることを必要とする。例えば、伸長ユニットによって受信される圧縮データの一部が順番を誤ったり、圧縮データの一部が失われたりした場合、伸長アルゴリズムは圧縮アルゴリズムとは異なる辞書を生成してしまう場合があり、伸長を誤る場合がある。従って、ネットワーク条件として、圧縮ユニットと伸長ユニットとの間で伝送される圧縮データを信頼性の高い通信路で伝送する必要がある。
【００６０】
ＩＺアルゴリズムは、送信点が圧縮アルゴリズムによって自動的に定義され、特別なアルゴリズムの選択を必要としないので、暗示的に漸進的である。従って、送信点を計算したり、送信のためのポインタを計算したり（ＬＺ７７やSEQUITURの場合のように）するための計算オーバヘッドが追加されることもない。
【００６１】
図７は、本発明の一実施形態による伝送方法の一例を示す図である。
【００６２】
図７において、データのシーケンスは「ａｂａｂａｂｃａｂｃ」である。図４の例とは異なることに注意して欲しい。ステップ５０２で、まずポインタＴを最初に受信したデータの位置の直前の位置にセットする。図３を参照して上で説明した圧縮方法をこの例に用いる。この圧縮方法を用いると、最初の新たな辞書語句は４行目に追加される。しかしながら、伝送構成要素２０４は、新たな辞書語句を追加する前に、Ｓ’のＴから最後までにあるすべての記号を送信する。この例の場合、その送信には図７の４行目に示すように記号「ａｂａｂ」が含まれる。次にステップ５０６で、図３で説明した方法を用いて反復語句のすべてのインスタンスを置き換える。次に、ポインタ（Ｔ）を今追加したばかりの新たな語句にセットする。この例の場合、Ｔを４行目のＰ1の２番目の出現位置にセットする。
【００６３】
記号は受信され続け（即ち、送信されずに）、図７の１０行目にあるシーケンスが受信されるまで蓄積される。この時点で第２の語句を辞書に追加する（Ｐ2＝Ｐ1ｃ）。第２の語句を追加する前に、ステップ５０４で、伝送構成要素２０４はＳ’中のポインタ（Ｔ）からＳ’の最後までの記号をすべて送信する。この例の場合、記号「Ｐ1ｃＰ1ｃ」を送信する。ステップ５０６で、図３で説明した方法に従ってＳ’中の新たな語句のインスタンスを置き換え、ステップ５０８でポインタ（Ｔ）をその新たに追加した語句にセットする。この例の場合、ＴはＳ’中の第２のＰ2にセットされ、これが図７の１０行目に示されている。処理は任意量のデータにつて続けられる。
【００６４】
上記の伝送手順は、圧縮辞書と伸長辞書とを暗示的に同期させ、伸長ユニットが辞書語句を受信したときに、それを常に逆参照できるようにしている。本発明の他の実施形態では、明示的辞書伝送手順を用いることで、すべての語句の伸長可能性を保証している。この代替の伝送手順は、個別のパラレル通信路伝送で語句を伸長アルゴリズムに送信することに基く。圧縮アルゴリズムは、新たな辞書語句を見つけるたびに、その辞書語句がまだ伸長辞書にインストールされていないことを示す「インストール＝０」というフラグをその辞書語句にタグ付けする。この新たな語句番号とその内容は、信頼性の高い通信路を介して伸長アルゴリズムに送信される。伸長アルゴリズムは受信した各ルールについて受領応答を返送する。圧縮アルゴリズムは、ある語句について受領応答を受信すると、その語句に「インストール＝１」というフラグをセットして、その語句が伸長辞書に受信されインストールされていることを示す。圧縮アルゴリズムは、何らかの語句を送信する前に、この「インストール」フラグをチェックする。インストールフラグが０、即ち偽であった場合、その語句の内容は送信されない。ある語句の内容を送信する場合は、それらの内容に入れ子になったあらゆる語句についてインストールフラグを再帰的にチェックする必要があることに注意して欲しい。インストールフラグが１、即ち真であった場合、その語句そのものが送信される。この代替の明示的辞書伝送処理を用いることにより、圧縮アルゴリズムは２つの辞書を同期させることができ、伸長アルゴリズムが逆参照できない語句を受信することがなくなる。また、この方法は、伸長アルゴリズムの構造も大幅に変更する。この方法では、辞書語句が伸長アルゴリズムへ明示的に送信されるので、伸長アルゴリズムはデータストリームの中からそれらの語句を見つけ出す必要がない。従って伸長アルゴリズムは、受信したデータを逆参照（伸長）するだけでよく、圧縮アルゴリズムの語句検出器構成要素や消去構成要素（前述の暗示的辞書同期実施形態で必要だったような）を通して処理する必要がない。また、この明示的辞書伝送モデル辞書同期は、信頼性の高い通信路（即ち、すべてのデータパケットの配送順序が保証されるような通信路）を介して圧縮データを送信する必要もない。辞書を暗示的に同期させることに圧縮データを利用しないので、圧縮ユニットと伸長ユニットとの間のデータの損失やデータの配送順序誤りによって辞書の不一致が生じることがなく、伸長が不正確になることはない。
【００６５】
上記の明示的辞書同期方法は、様々な方法でさらに最適化することができる。例えば、圧縮アルゴリズムによって送信される語句として「Ｎ」回より多く遭遇した語句しか選択されないようにすることもできる。Ｎ＝１にするとすべての語句が送信され、最大の圧縮及び最速の収束が得られる。しかし、同時に、２つの辞書を同期させるために必要となる帯域外辞書伝送トラフィックの追加も最大になる。Ｎを減少させるのにつれて圧縮及び収束が減少するが、余分な帯域外辞書同期トラフィックも減少する。従って、遭遇したトラフィックの種類に基いて、総合出力トラフィックを最小にするように、動的にＮを選択することができる。また、個々の辞書語句更新の伝送に関する何らかのオーバヘッドがある場合、複数の語句をバッファリングし、まとめて１つのパッケージで送信することもできる。
【００６６】
上記の明示的辞書伝送モデルは、圧縮アルゴリズムによって伝送された辞書更新の各々についての、伸長アルゴリズムからの受領応答の要件を省略することにより、最適化することもできる。上記の実施形態では、圧縮ユニットは、その語句に関する「インストール」フラグを０（即ち、偽）から１（即ち、真）に変更するため、即ち、語句をその後の圧縮に利用するため、伸長ユニットから「語句受信」の受領応答を受信する必要がある。この処理は、圧縮ユニットによって圧縮データとして送信されたすべての語句参照が、伸長ユニットによって逆参照してその語句の元の内容を生成することができるものであることを保証している。この明示的辞書伝送モデルの代替の実施形態として、圧縮アルゴリズムは、新たに送信された語句についてのインストールフラグを、動的調節された所定時間後に０から１へ自動的に変更することもできる。圧縮ユニットから語句を送信する場合（信頼性の高い個別の辞書伝送路を介して）、その語句に、送信時刻を示すタイムスタンプ（ｔ0）をローカルに付加する。同時に、送信した語句についての「インストール」フラグを０に初期化する。所定時間（Ｔ）を経過した後、その語句の「インストール」フラグを０から１へ変更し、圧縮アルゴリズムがその語句をその後利用できるようにする。このモードの辞書伝送は、圧縮ユニットから伸長ユニットへ時刻ｔ0で語句更新が送信された場合、ｔ0＋Ｔより後は、その語句を用いて圧縮ユニットから送信されるいかなる圧縮データも、語句更新後に伸長ユニットに到達するであろうことを推測する。この時間Ｔは、圧縮ユニットと伸長ユニットとの間のデータ伝送の速度及び待ち時間のばらつきを考慮して調節することができる。この推測的辞書伝送モデルによると、圧縮ユニットは、伸長ユニットからの受領応答を待つ必要がなく、語句更新を送信してからＴ秒後には語句の利用を開始できるので、圧縮レベルが向上する。従って、語句がより迅速に利用できるようになり、高い圧縮率が得られる。
【００６７】
上記の推測的辞書伝送モデルは圧縮ユニットと伸長ユニットとの間の伝送時間のばらつきの推定に基づいているので、伸長ユニットは、圧縮データ中の特定の語句参照を、個別の辞書同期通信路を介したその語句の内容の受信が完了する前に、受信することができる。これを行なう場合、伸長ユニットは、辞書更新通信路を介して語句の内容を受信する前にデータ通信路を介して語句参照を受信したということを示す信号を、圧縮ユニットに送信する。圧縮ユニットは、伸長ユニットからのこれらのエラー信号を用いて、新たな語句を送信する時とその語句のインストールフラグを１に変更する時との間の時間を適当に調節する。
【００６８】
上記の推測的辞書伝送モデルの他の構成要素は、伸長アルゴリズムが正確に逆参照することのできない語句参照を受信した場合にそれを検出できなければならないということである。これは様々な方法で達成することができる。推測的辞書伝送モデルの一実施形態は、圧縮ユニットと伸長ユニットとの両方に送信及びインストールされた語句の総数に関するカウンタを保持する。すべての語句が正しい順番で送受信されるので（信頼性の高い通信路を介して送信されるため）、これらのカウンタを用いることにより、伸長ユニットが辞書同期通信路を介して語句の内容を受信し終わる前にデータ通信路を介して語句参照を受信した場合を検出することができる。圧縮ユニットの各語句には、インストールカウンタの現在値に基いて、「ローカルインストールカウンタ」が付けられる。圧縮ユニットから送信される圧縮データの各パケットには、その圧縮パケットで参照されるすべての語句についての「ローカルインストールカウンタ」の最大値が付けられる。
【００６９】
この「最大インストールカウンタ」は、圧縮パケットで用いられる最も最近「インストール」された語句を示している。伸長ユニットは、圧縮パケットを受信すると、「最大インストールカウンタ」が現在インストールされているカウンタよりも大きいか否かを判定することにより、そのパケットの内容に逆参照不能な語句が含まれる場合を判定することができる。その場合、圧縮パケット中には、伸長ユニットがまだ更新内容を受信していない語句が少なくとも１つ存在する。次いで、このイベントを用いて上記のフィードバック手段を始動させ、エラー信号を圧縮ユニットに送信することができる。これらのカウンタは、送信およびインストールされた語句の数をカウントするのに用いることができ、最終的にはそれらの最大値に達し、循環してゼロに戻る。この場合は、現在インストールされているカウンタを越えた何らかの「ローカルインストールカウンタ」が何らかの初期値（例えば０）にリセットされることを保証することにより、扱うことができる。また、このシステムは、送信カウンタがその最大値に達した場合も保証することができ、圧縮ユニットは、伸長ユニットによって最大カウンタ値に対応する語句の受領応答が返されるまで新たな語句を何も送信しない。従って、伸長ユニットは、最大受信カウンタに対応する語句更新以外は、受信した語句更新について受領応答を送信する必要がない。
【００７０】
上記のように、大きなシステムリソースを必要とすることなく、終わりのないデータストリームに対して連続的に圧縮方法を実施するため、圧縮システム及び方法は、辞書のサイズを低減するために、語句及び記号を効率的かつ効果的に消去しなければならない。本発明はこの目標を達成している。すなわち、語句辞書だけでなく圧縮シーケンスＳ’もシステムリソース（システムメモリなど）を用いて自分の状態を保持しているので、本発明が無限のデータストリームに対して連続的に実行可能であることを保証するためには、辞書から古い語句を効率的に消去する手段を設けるだけでなく、圧縮シーケンスＳ’の最も古い領域を効率的に消去するための手段も設ける必要がある。これらの「忘却」（消去）措置が利用できなければ、アルゴリズムは最終的にシステムリソースを使い果たし、終了しなければならなくなる。
【００７１】
語句が階層的であるので（即ち、語句は入力語（記号）を含む場合もあるし、他の語句に対する参照（データ語句識別子）を含む場合もある）、ある語句が何らかの上位語句によって参照されているか否かをチェックすることなく、その語句を消去することはできない。例えば、ＰiがＰjによって参照されている場合にＰiを消去すると、以後Ｐjの使用はすべてエラーになる。したがって、いずれの語句が消去できるかを判定するだけでなく、それらを参照している語句もすべて消去されることを保証しなければならない。本発明は、これらの問題を両方とも、すべての語句をＬＲＵ（Least Recently Used）データ構造で表現することにより、解決している。本発明の一実施形態では、ＬＲＵがリンクされたリストとして実施されるので、圧縮中にある語句が使用されるたびに、その語句がリストの先頭に効率的に移動される。従って、語句「Ｐi＝ａｂ」がＬＲＵの中程にあり、記号ａｂが入力ストリームに現れた場合、Ｐiはリスト内の現在位置から取り除かれ、リストの現在の前方（即ち、先頭）に付加される。作成された新たな語句もリストの現在の前（即ち、先頭）に配置される。アルゴリズムのいかなる時点でも、リストの最後（すなわち末尾）にある語句は、最も古くに使用された語句である。システムリソースを開放して再利用するために語句を消去する必要がある場合、この最も古くに使用された語句を一番最初に消去しなければならない。
【００７２】
ＬＲＵを用いると消去すべき語句を識別することができるが、ＬＲＵはその語句を参照している上位語句、即ち消去する必要のある上位語句を示していない。本発明は、各語句にその語句を参照した最後の時を常に追跡する「親ポインタ」を保持させることにより、この問題を解決している。例えば、語句ＰiがＰjによって最後に参照された語句であり、Ｐjが圧縮文字列Ｓ’によって最後に参照された語句である場合、ＰiはＰjを指す親ポインタを含み、ＰjはＳ’内で使用されている位置を指す親ポインタを含む。図８ａ及び図８ｂは、本発明の一実施形態による消去方法の例におけるＬＲＵ及び親ポインタを示す図である。
【００７３】
図８ａでは、語句ＬＲＵ及び親ポインタが入力記号「ａｂ」の到着直後に示されている。
【００７４】
図８ｂでは、語句ＬＲＵ及び親ポインタが入力記号「ｃ」の到着直後に示されている。
【００７５】
図８に示すデータ構造により、本アルゴリズムは、いずれの語句が他の上位語句によって参照されているかを正確に判定することが可能になっている。従って、語句の消去は、図９に従って実施することができる。図９は、本発明の一実施形態による消去方法を示すフロー図である。
【００７６】
図９に示す方法を用い、ステップ９０２でＸをＬＲＵの末尾の語句にセットする。次に、ステップ９０４でＹをＸの親ポインタにセットする。ステップ９０６でＹが図８ａのように語句を指している場合、ステップ９０８でそのＬＲＵ内の位置Ｘから位置Ｙまで（Ｘは含むがＹは含まない）の語句をすべて消去し、ステップ９１０でＸをＹにセットし、処理はステップ９０４で繰り返される。ステップ９０６でＹが記号を指している場合、ステップ９１９で消去ユニット２０８がＸを消去し、ステップ９２０でＳ’の末尾からＹまでの記号をすべて消去する。
【００７７】
このアルゴリズムは、何らかの語句を消去した場合、語句辞書及びＳ’内のその語句に対する参照をすべて消去することも再帰的に保証する。また、このアルゴリズムは、圧縮シーケンスＳ’からの記号の消去も行なう。従って、この方法によると、頻繁にアクセスされない語句に用いられるシステムリソースだけでなく、Ｓ’内の古い記号に用いられるシステムリソースも再利用することができる。さらにリソースを開放する必要がある場合、Ｓ’の末尾にある記号も、上記の語句消去アルゴリズムを適用することなく消去することができる。これは、Ｓ’の末尾から必要な数の記号を単に取り除くことによって達成することができる（それらの記号の送信が完了している限りは）。消去した記号が語句に対する参照であった場合、その語句の親ポインタがＳ’内の消去された符号の位置を指している場合をチェックする。その場合、その親ポインタを、Ｓ’内を指している記号の消去が完了したことを示すヌル値にセットする。あるいは、その語句及びその下位（即ち、それを指す他の語句）を消去することもできる。
【００７８】
上記の語句及び記号消去アルゴリズムを用いると、本発明のシステム及び方法で用いられるシステムメモリの量に固定の限界を設定することができる。これらの消去アルゴリズムはいずれも計算オーバヘッドを最小限にし、ＩＺアルゴリズムの線形性に悪影響を与えることがない。無限の入力ストリームを処理する際に、連続動作しているＩＺ処理は、消去すべき語句及び記号を動的に選択することにより、予め設定された限界または変動的限界を超えないことを保証する。
【００７９】
上記の本発明の実施形態の場合、２回反復された記号対の各々について新たな語句が辞書に作成される。これは、記号対が少なくともｋ回（ｋ＝３，４，５，等）反復された場合にしか新たな辞書語句が作成されないように変更することもできる。この変更は、辞書の語句数を削減し、圧縮効率を向上または低減させる。
【００８０】
本発明によって送信されるデータは、算術符号化等の漸進的符号化方法を用いて統計的に符号化することもできる。統計的符号化によるさらなる圧縮は大きな反復語句を取り除くことによって得られる圧縮に比べて限界に近いので、このステップは不要であることが多い。例えば、ＩＺは、長い距離を隔てた大きな反復を１つの語句番号に置き換えることができるので、反復語句の検出及び除去により高度の圧縮を得ることができる。このような場合、圧縮シーケンスを圧縮してもさらなる圧縮はほとんど得られない。従って、圧縮効率を大きく低下させることなく、統計的符号化及びそれに関連する計算オーバヘッドを回避することができる。これは、比較的小さなウィンドウ内の反復しか検出せず、圧縮の大部分を統計的符号化ステップによって得ている他の辞書ベースの方法とは、対照的である。これらの他の圧縮方法は、出力が統計的に符号化されなかった場合、圧縮効率が大幅に低下してしまう。
【００８１】
本発明によって生成された圧縮データを送信前にデータグラムにパッケージ化する場合、他の漸進的または非漸進的な統計的符号化方法すなわち圧縮方法（ハフマン符号化等）を適用することにより、それらのデータグラムをさらに処理することができる。これは、出力に対する事後処理ステップであるから、本発明の漸進的性質には影響を与えない。
【００８２】
本発明は、圧縮すべき通信路の各々についての２つの通信モジュールから論理的に構成される。圧縮モジュールは通信路の発信元でデータを圧縮し、伸長モジュールは通信路の宛先でデータを圧縮する。１つの発信元が複数の宛先と通信している場合、本発明は、各宛先について１つ個別の圧縮モジュールが存在するように、スケーリング及び複製することができる。これらの圧縮モジュールは、すべて同じ圧縮ユニット即ち装置に存在してもよい。同様に、複数の発信元が１つの宛先と通信している場合、本発明は、各発信元について１つ個別の伸長モジュールが存在するように、スケーリング及び複製することができる。同様に、これらの伸長モジュールは、すべて同じ伸長ユニット即ち装置に存在してもよい。さらに、複数の圧縮及び伸長モジュールを同じユニットまたは装置に存在させ、結合された圧縮・伸長ユニットにすることもできる。
【００８３】
本発明の現在の実施形態は、各圧縮及び伸長モジュールについて個別の辞書を利用している。本発明の他の実施形態は、複数の圧縮モジュール間で同じ発信元に共存する共有辞書を利用している。共有辞書実施形態の代替は、上記の明示的辞書同期方法を用いて、共有圧縮辞書が伸長辞書の各々に同期することを保証する。圧縮ユニットにある共有辞書は、１つの共有データ構造を作成して圧縮アルゴリズムが学習した語句の全てを記憶することにより、実施することができる。また、各語句が共有グローバルバージョン番号を保持し、このバージョン番号はその語句の内容が消去されたり新たに学習した語句で置き換えられたりするたびにインクリメントされる。従って、この共有辞書実施形態では、すべての圧縮ユニットの検出器構成要素及び消去構成要素を共有することができる。各圧縮ユニットは、個別のローカル語句バージョン番号及びステータスフラグを保持する個別の送信ユニットを有する。新たな語句参照を検出器構成要素から送信構成要素に渡して伸長ユニットへ送信する場合、共有グローバルバージョン番号を伝送構成要素固有のローカルバージョン番号と比較する。２つの番号が同じであった場合、伝送構成要素は、語句に関連するローカルステータスフラグをチェックして、その語句の送信及びインストールが完了しているか否かを判定する。番号が異なる場合、伝送構成要素は、その語句が共有検出器構成要素によって作成された新たな語句であることを認識する。この場合、伝送構成要素はステータスフラグをリセットしてその語句がまだ送信されていないことを示し、その語句を上記の明示的辞書伝送プロトコルに基いて処理する。この共有辞書伝送実施形態によると、同じ装置上に共存するすべての圧縮ユニットが１つの語句階層及び記号データ構造を共有するので、システムメモリリソースの利用がより効率的になる。すべての語句の内容は共有データ構造だけにしか記憶されない。装置に追加される圧縮ユニットの各々は事実上、各語句についてのローカルバージョン番号及びステータスを示す追加の語句テーブルだけしか必要としない。
【００８４】
各入力記号に用いられるワードサイズは可変である。本発明は１、２、及び４バイトのワードサイズで実施されており、異なる結果を生成する。ワードサイズは４バイトより大きくすることも可能である。アルゴリズムの速度は処理する記号の数に依存するので、ワードサイズを大きくするとスループットが大きくなる。各記号が４バイトに対応する場合（即ち、ワードサイズ＝４バイトの場合）、アルゴリズムは、各記号が１バイトに対応している場合の約４倍の量のデータを任意の時間で処理することになる。一方、４バイトのワードサイズを用いると、アルゴリズムが４バイト境界上に発生しない反復（即ち、４の倍数ではない数のバイト数にわたって広がる反復）を検出することを防止できる。
【００８５】
語句検出アルゴリズムに用いられるハッシュ関数及びハッシュテーブルは、柔軟性がある。これらは、圧縮されるデータの種類に最も適するように最適化することができる。
【００８６】
語句ＬＲＵ及び圧縮シーケンスＳ’に用いられるリンクされたリストは、単一リンクのリストでもよいし、２重リンクのリストでもよい。また、アレイ等の他のデータ構造を用いて、より優れたメモリ利用を提供することもできる。
【００８７】
上記のように、本発明は、仮想的な無制限サイズのウィンドウ内の可変長の反復語句を検出及び除去することが可能な、効率的な圧縮アルゴリズムである。ウィンドウサイズは利用可能なシステムメモリの量だけにしか制限されず、アルゴリズムの速度に影響を与えることはない。ＬＺ７７圧縮方法で一般的に用いられている数キロバイトのウィンドウサイズの利用に替えて、本発明は、プログラムの速度の大幅な変更を伴うことなく、１０メガバイト〜数千メガバイトのウィンドウサイズを利用することができる（システムリソースにしか制限されない）。本発明ではウィンドウが圧縮データだけから構成されるので、未圧縮の入力データに関するウィンドウの有効サイズは異なるものでよく、数千メガバイトを超えてもよい（圧縮の程度によってきまる）。このウィンドウサイズの大幅な拡大は、アルゴリズムが長い距離を隔てた反復を検出できるようになるので、大きな利点である。従って本発明は、単一のファイルまたはオブジェクトを圧縮するだけでなく、任意の複数のファイルまたはオブジェクトをまとめて圧縮することに用いることができ、高度の圧縮を達成している。従って本発明は、様々なオブジェクトまたはデータグラム間の反復が極めて大量のデータによって隔てられる場合がある集合的なクロスセッションなネットワークトラフィックの連続ストリームの圧縮に用いることができる。従って本発明は、オブジェクト内圧縮だけでなく、オブジェクト内（ローカル）圧縮とオブジェクト間（グローバルまたはクロスセッションな）圧縮との両方が可能である。
【００８８】
本発明の他の利点は、完全に漸進的および連続的なことである。従って本発明は、アルゴリズム故障または終了のリスクを伴うことなく、無限のデータストリームに適用することができる。本発明は、入力が到着するのに従って入力を漸進的に処理し、出力を線形時間で連続的に生成する。本発明は、固定サイズのシステムメモリ内に常に常駐し、このプリセット限界を超えないように構成することができる。本アルゴリズムは、新たな辞書語句を学習するため、語句および記号を動的に消去してそれらのリソースを再利用することにより、この連続的ストリーミング機能を達成している。また、本アルゴリズムは、入力データの変化に応じて、新たな辞書語句を学習する。このＩＺアルゴリズムの暗示的漸進的、連続的、および、線形の性質（仮想的な無制限のサーチウィンドウサイズに加えて）は、他の汎用無損失圧縮方法には存在しない独特の特徴である。
【００８９】
本発明の他の利点はその効率である。本発明は線形的に実行される。つまり、入力データ量が増えるのにつれて、実行時間が非線形的（例えば指数的に）に増大するようなことはない。本発明のこの線形性は、プログラムの漸進的伝送構成要素および連続的語句／記号消去構成要素によって損なわれることはない。また、この線形性は、反復を検出可能なウィンドウサイズにより影響を受けることもない。従って、本発明は、いかなる入力であっても、入力のサイズに比例した時間で圧縮することができる。加えて、本発明は語句の階層表現を用いているので、他の辞書ベースの方法（例えばＬＺ７７）よりも効率的に辞書全体を記憶することができる。本発明は、語句が２回以上現れたときに、それらの語句を辞書に追加するだけである。従って、積極的で予測的な辞書構築方法を利用するＬＺ７８よりも、辞書エントリがより良く利用される。また、本発明は、漸進的伝送点を選択するために追加処理を何も必要としないので、他の階層ルールベースの方法（伝送点を選択するためのSEQUITURの計算集中アルゴリズム）よりも効率的である。
【００９０】
また、本発明は各ポインタについて開始位置を計算および伝送するためにマーカーその他の手段を必要としないので、本発明による辞書語句の暗示的伝送は他のポインタベースの方法（ＬＺ７７やSEQUITUR等）よりも効率的である。また、語句および記号を表現するために本発明で用いられるデータ構造は、SEQUITURで用いられるものよりもメモリ効率がよい。さらに、本発明は反復語句が拡張されるのに従って語句を連続生成および消去する必要がないので、本発明の反復検出アルゴリズムは長い反復の消去の点で、SEQUITURよりも効率的である。
【００９１】
本発明は、上記の４つの利点、即ち線形速度、仮想の無制限ウィンドウサイズ、暗示的漸進性、および、完全な連続圧縮を結合させた唯一の多目的無損失圧縮アルゴリズムである。これらの利点により、本発明は、圧縮がすでに有効に適用されている広い分野に用いることが可能になる。例えば本発明は、同様または同一のオブジェクトまたはデータグラムの送信を検出および除去することにより、ネットワークのストリームを圧縮することにも用いることができる。本発明は、ネットワーク内の任意の２つの通信ノード間の帯域幅利用性を向上させることにも用いることができる。同様または同一のオブジェクトが送信される可能性のあるネットワークアーキテクチャは、本発明から大きな利点を得ることができる。例えば、コンテンツプロバイダから生じるワールドワイドウェブ・トラフィックは、異なるユーザに対して送信される同一または類似のオブジェクトを含むことが多い。この場合、本発明を用いると、異なるユーザに対して送信されるデータを収束および圧縮することができるので、インターネットを介して転送する必要がある帯域幅を大幅に削減することができる。伸長アルゴリズムは、圧縮ストリームをエンドユーザに比較的近いサイトで拾い上げ、ユーザにデータを送信する前にそれを元のサイズに引き伸ばすことができる。これにより、圧縮サイトと伸長サイトの間のバンド幅利用性が大幅に向上されるだけでなく、ユーザへのデータの配送も大幅に高速化される。専用線や仮想私設ネットワークを通るデータの圧縮等、本発明により大きな有用性が得られるような様々な他のネットワーク状況が存在する。さらに本発明は、より効率的な記憶および送信のため、データベース全体を効率的に圧縮することにも用いることができる。
【００９２】
これらのいずれ場合においても、本発明は、オブジェクト内圧縮とオブジェクト間（クロスセッションな）圧縮の両方を線形時間で達成することができるので、他の圧縮方法には無いさらなる有用性を提供する。これらの応用および利点はすべて、本発明が線形時間で動作し、仮想的な無制限のウィンドウサイズを利用し、暗示的に漸進的であり、無限の入力ストリームに対して連続的に実施することができるということに起因している。
【００９３】
好ましい実施形態および代替の実施形態を参照して本発明を具体的に図示および説明してきたが、当業者であれば、本発明の思想および範囲から外れることなく、形態や細部に様々な変更を施すことができるであろう。
【図面の簡単な説明】
【図１】  本発明の一実施形態が動作するコンピュータシステムを示す図である。
【図２】  本発明の一実施形態による符号化・カプセル化（ＥＥ）ユニットおよび復号・分離（ＤＤ）ユニットの構成要素を示す図である。
【図３】  本発明の検出器構成要素の一実施形態を示す図である。
【図４】  本発明の一実施形態による検出方法の一例を示す図である。
【図５】  本発明の一実施形態による伝送手順を示すフロー図である。
【図６】  本発明の一実施形態による伸長アルゴリズムを示すフロー図である。
【図７】  本発明の一実施形態による伝送方法の一例を示す図である。
【図８ａ】  本発明の一実施形態による消去方法のＬＲＵおよび親ポインタ例を示す図である。
【図８ｂ】  本発明の一実施形態による消去方法のＬＲＵおよび親ポインタ例を示す図である。
【図９】  本発明の一実施形態による消去方法のフロー図を示す図である。
【図１】
0004759214.tif 000005
【図２】
0004759214.tif 000006
【図３ａ】
0004759214.tif 000007
【図３ｂ】
0004759214.tif 000008
【図３ｃ】
0004759214.tif 000009
【図４】
0004759214.tif 000010
【図５】
0004759214.tif 000011
【図６】
0004759214.tif 000012
【図７】
0004759214.tif 000013
【図８ａ】
0004759214.tif 000014
【図８ｂ】
0004759214.tif 000015
【図９】
0004759214.tif 000016