(57)【要約】【課題】入力データのシーケンスをコード化データのシーケンスに符号化するための方法および装置を提供する。【解決手段】コード化データは、リテラルデータとして、最近の入力データへの単一文字参照として、および１つ以上の過去の入力データへの参照として表わされる。参照は長さが固定される場合もあれば、長さが可変である場合もある。参照は、一致オフセットの表示および／または一致長の表示を含み得る。【選択図】図１２
2007037115.tif 000002
【特許請求の範囲】
【請求項１】
デジタルデータを符号化する方法であって、
データの現在の１つ以上のセグメントと、データの対応する１つ以上の過去のセグメントとの間の一致を検索することと、
一致が存在しない場合に、データの前記現在のセグメントをリテラルとしてコード化することと、
前記一致が存在し、一致長が１よりも大きい場合に、前記一致を参照としてコード化することと、
前記一致が存在し、一致長が１である場合に、
一致オフセットが閾値未満であるかどうかを判断することと、
前記一致オフセットが前記閾値未満である場合に、前記一致を単一文字参照としてコード化することと、
前記一致オフセットが前記閾値よりも大きい場合に、前記一致をリテラルとしてコード化することとを含む、方法。
【請求項２】
前記検索することは、
データの新しいセグメントを読取ることと、
データの前記新しいセグメントが以前に出現したかどうかを判断することと、
データの前記新しいセグメントが以前に出現した場合に、
一致が存在することを判断することと、
一致の終わりに到達するまでデータの新しいセグメントを読取り続けることと、
一致オフセットおよび一致長を判断することと、
データの前記新しいセグメントが以前に出現しなかった場合に、一致が存在しないことを判断することとを含む、請求項１に記載の方法。
【請求項３】
データの前記現在のセグメントを前記リテラルとして前記コード化することは、
リテラルデータ符号化を示すフラグを書込むことと、
データの前記現在のセグメントを書込むこととを含む、請求項１に記載の方法。
【請求項４】
前記一致を前記参照として前記コード化することは、
非リテラルデータを示すフラグを書込むことと、
非リテラルデータ符号化を示す符号化タイプフラグをセットすることと、
前記符号化タイプフラグを書込むことと、
前記一致オフセットの表示を書込むことと、
前記一致長の表示を書込むこととを含む、請求項１に記載の方法。
【請求項５】
前記一致オフセットの前記表示は、前記一致オフセットを含む、請求項４に記載の方法。
【請求項６】
前記一致オフセットの前記表示は、前記一致オフセットの可変長符号化を含む、請求項４に記載の方法。
【請求項７】
可変長の値はグループ標識を含む、請求項６に記載の方法。
【請求項８】
前記一致長の前記表示は、前記一致長を含む、請求項４に記載の方法。
【請求項９】
前記一致長の前記表示は、前記一致長の可変長符号化を含む、請求項４に記載の方法。
【請求項１０】
前記可変長符号化はグループ標識を含む、請求項９に記載の方法。
【請求項１１】
前記一致を前記単一文字参照として前記コード化することは、
非リテラルデータを示すフラグを書込むことと、
単一文字参照符号化を示す符号化タイプフラグをセットすることと、
前記符号化タイプフラグを書込むことと、
前記一致オフセットを書込むこととを含む、請求項１に記載の方法。
【請求項１２】
前記一致を前記リテラルとして前記コード化することは、
リテラルデータ符号化を示すフラグを書込むことと、
データの前記現在のセグメントを書込むこととを含む、請求項１に記載の方法。
【請求項１３】
データセグメントのストリームを符号化する方法であって、
データのセグメントをデータセグメントの前記ストリームからロードすることと、
データの前記セグメントがデータの過去のセグメントと一致するかどうかを判断することと、
データの前記セグメントが過去のデータと一致しない場合に、
待ち状態の一致が存在するかどうかを判断することと、
前記待ち状態の一致が存在し、一致オフセットが閾値未満である場合に、前記待ち状態の一致を単一文字一致として符号化することと、
前記待ち状態の一致が存在し、前記一致オフセットが前記閾値よりも大きい場合に、前記待ち状態の一致をリテラルとして符号化することと、
データの前記セグメントをリテラルデータとして符号化することと、
データの前記セグメントが過去のデータと一致する場合に、
継続一致が存在する場合に、一致長をインクリメントすることと、
前記待ち状態の一致が存在し、継続一致が存在せず、前記一致オフセットが閾値未満である場合に、前記待ち状態の一致を単一文字一致として符号化することと、
前記待ち状態の一致が存在し、継続一致が存在せず、前記一致オフセットが前記閾値よりも大きい場合に、前記待ち状態の一致をリテラルとして符号化することとを含む、方法。
【請求項１４】
データの前記セグメントがデータの前記過去のセグメントと一致するかどうかを前記判断することは、
データの前記セグメントに対応する、位置付メモリからの値をロードすることと、
前記値がゼロでない場合に、データの前記セグメントが過去のデータと一致することを判断することと、
前記値がゼロである場合に、データの前記セグメントが過去のデータと一致しないことを判断することとを含む、請求項１３に記載の方法。
【請求項１５】
位置付メモリを更新することをさらに含む、請求項１３に記載の方法。
【請求項１６】
マッチレジスタを更新することをさらに含む、請求項１３に記載の方法。
【請求項１７】
マッチレジスタを前記更新することは、
データの前記セグメントに対応する、位置付メモリからの値をロードすることを含み、前記位置付メモリは過去のデータセグメントの繰返される出現の位置を識別し、前記更新することは、さらに、
前記ロードされた値からのビットと、前記マッチレジスタから１つだけシフトされたビットとの間の論理ＡＮＤ演算の結果を判断することと、
前記論理ＡＮＤの結果の前記ビットのうちのいずれかがゼロでない場合に、前記マッチレジスタを前記論理ＡＮＤの結果で更新することと、
前記結果の前記ビットのすべてがゼロである場合に、前記マッチレジスタを前記位置付メモリからの前記ロードされた値で更新することとを含む、請求項１６に記載の方法。
【請求項１８】
マッチレジスタから前記一致オフセットを判断することをさらに含む、請求項１３に記載の方法。
【請求項１９】
前記マッチレジスタから前記一致オフセットを前記判断することは、現在の位置から、１にセットされる第１のビットまでのビット位置の数を数えることを含む、請求項１８に記載の方法。
【請求項２０】
エンコーダであって、
符号化論理を含み、前記符号化論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、前記エンコーダは、さらに、
前記符号化論理に結合されるストリングマッチング論理を含み、前記ストリングマッチング論理は、過去のデータセグメントの繰返される出現の位置を識別するように動作可能な位置付メモリと、前記位置付メモリに結合されるマッチレジスタとを含む、エンコーダ。
【請求項２１】
前記符号化論理は、一致長のテーブルをさらに含む、請求項２０に記載のエンコーダ。
【請求項２２】
ストリングマッチング論理は、過去のデータセグメントを保持するように動作可能な履歴バッファをさらに含む、請求項２０に記載のエンコーダ。
【請求項２３】
データのソースを符号化するためのパラレルエンコーダであって、
複数のシリアルエンコーダを含み、各々のシリアルエンコーダは、
入力および出力を有する符号化論理を含み、前記符号化論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、前記シリアルエンコーダは、さらに、
前記符号化論理に結合されるストリングマッチング論理を含み、前記ストリングマッチング論理は、過去のデータセグメントを保持するように動作可能な履歴バッファと、前記過去のデータセグメントの繰返される出現の位置を識別するように動作可能な位置付メモリと、前記位置付メモリに結合されるマッチレジスタとを含み、前記パラレルエンコーダは、さらに、
ヘッド制御を含み、前記ヘッド制御は、
データの前記ソースに結合される入力と、
複数の出力とを含み、各々の出力は前記複数のシリアルエンコーダのうちの対応する１つの前記入力に結合され、前記パラレルエンコーダは、さらに、
末尾制御を含み、前記末尾制御は、
複数の入力を含み、各々の入力は前記複数のシリアルエンコーダのうちの対応する１つの前記出力に結合され、前記末尾制御は、さらに、
コード化データストリームを与える出力を含む、パラレルエンコーダ。
【請求項２４】
符号化データのソースを復号するためのパラレルデコーダであって、
複数のシリアルデコーダを含み、各々のシリアルデコーダは、
復号論理を含み、前記復号論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、前記シリアルデコーダは、さらに、
復号されたデータセグメントを保持するように動作可能な履歴バッファを含み、前記パラレルデコーダは、さらに、
ヘッド制御を含み、前記ヘッド制御は、
符号化データの前記ソースに結合される入力と、
複数の出力とを含み、各々の出力は前記複数のシリアルデコーダのうちの対応する１つの入力に結合され、前記パラレルデコーダは、さらに、
末尾制御を含み、前記末尾制御は、
複数の入力を含み、各々の入力は前記複数のシリアルデコーダのうちの対応する1つの出力に結合され、前記末尾制御は、さらに、
復号されたデータストリームを与える出力を含む、パラレルデコーダ。
【請求項２５】
コード化データを復号する方法であって、
コード化データの始めを判断することと、
前記コード化データがリテラルデータを含むか、または符号化表現を含むかを示すフラグを読取ることと、
前記フラグがリテラルデータを示す場合に、データのリテラル長を抽出し、それによって復号されたデータのセグメントを形成することと、
前記フラグが前記符号化表現を示す場合に、
前記符号化表現が単一文字一致オフセットを含むか、または長い長さの一致オフセットを含むかを示す符号化タイプフラグを読取ることと、
前記符号化タイプフラグが前記単一文字一致オフセットを示す場合に、
前記単一文字一致オフセットを判断することと、
前記単一文字一致オフセットに対応する、履歴バッファからの値を判断し、それによって復号されたデータの前記セグメントを形成することと、
前記符号化タイプフラグが前記長い長さの一致オフセットを示す場合に、
前記長い長さの一致オフセットを判断することと、
一致長を判断することと、
前記長い長さの一致オフセットおよび前記一致長に対応する、前記履歴バッファからの１つ以上の値を読取り、それによって復号されたデータの対応する１つ以上のセグメントを形成することとを含む、方法。
【請求項２６】
前記長い長さの一致オフセットを判断することは、
前記長い長さの一致オフセットの長さを判断することと、
前記判断された長さに対応するビットの数を読取ることと、
前記読取られたビットに基づいて、前記長い長さの一致オフセットをセットすることとを含む、請求項２５に記載の方法。
【請求項２７】
前記長い長さの一致オフセットを判断することは、
グループ標識を読取ることと、
前記グループ標識に対応するビットの数を読取ることと、
前記読取られたビットに基づいて、前記長い長さの一致オフセットをセットすることとを含む、請求項２５に記載の方法。
【請求項２８】
前記一致長を判断することは、
前記一致長の長さを判断することと、
前記判断された長さに対応するビットの数を読取ることと、
前記読取られたビットに基づいて、前記一致長をセットすることとを含む、請求項２５に記載の方法。
【請求項２９】
前記一致長を判断することは、
グループ標識を読取ることと、
前記グループ標識に対応するビットの数を読取ることと、
前記読取られたビットに基づいて、前記一致長をセットすることとを含む、請求項２５に記載の方法。
【請求項３０】
磁気テープドライブであって、
エンコーダを含み、前記エンコーダは、
符号化論理を含み、前記符号化論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、前記エンコーダは、さらに、
前記符号化論理に結合されるストリングマッチング論理を含み、前記ストリングマッチング論理は、過去のデータセグメントの繰返される出現の位置を識別するように動作可能な位置付メモリと、前記位置付メモリに結合されるマッチレジスタとを含み、前記磁気テープドライブは、さらに、
デコーダを含み、前記デコーダは、
復号論理を含み、前記復号論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、前記デコーダは、さらに、
復号されたデータセグメントを保持するように動作可能な履歴バッファを含む、磁気テープドライブ。
【請求項３１】
データのストリームを符号化する方法であって、
データの前記ストリームのセグメントを符号化するために３つのフォーマットからフォーマットを選択することを含み、
第１のフォーマットは、前記セグメントを含むリテラルとして前記セグメントを表わし、
第２のフォーマットは、以前のセグメントとの単一文字一致までのオフセットを含む参照として前記セグメントを表わし、前記以前のセグメントは閾値オフセット内であるように判断され、
第３のフォーマットは、一致オフセットの表示および一致長の表示を含む参照として前記セグメントを表わす、方法。
【請求項３２】
前記第１のフォーマットは、前記セグメントのすぐ直前のクリアされたビットをさらに含み、
前記第２のフォーマットは、前記単一文字一致までの前記オフセットのすぐ直前の、セットビットおよびクリアされたビットの対をさらに含み、
前記第３のフォーマットは、前記一致オフセットの前記表示および前記一致長の前記表示のすぐ直前のセットビットの対をさらに含む、請求項３１に記載の方法。
【請求項３３】
選択されたフォーマットでビットパターンを形成することと、
前記ビットパターンを書込むこととをさらに含む、請求項３１に記載の方法。
【請求項３４】
データのストリームを符号化する方法であって、
データの前記ストリームのセグメントを符号化するために４つのフォーマットからフォーマットを選択することを含み、
第１のフォーマットは、前記セグメントを含むリテラルとして前記セグメントを表わし、
第２のフォーマットは、以前のセグメントとの単一文字一致までのオフセットを含む参照として前記セグメントを表わし、前記以前のセグメントは閾値オフセット内であるように判断され、
第３のフォーマットは、以前のセグメントとの倍長文字一致までのオフセットを含む参照として前記セグメントを表わし、
第４のフォーマットは、一致オフセットの表示および一致長の表示を含む参照として前記セグメントを表わす、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
この出願は、２００５年６月３日に出願された特許出願連続番号第１１／１４４，２５３号の一部継続出願であり、その開示は引用によって全文が本明細書に援用される。
【０００２】
発明の背景
１．発明の分野
この発明は概して、高速データ圧縮ならびに高速データ圧縮装置およびシステムに関する。
【背景技術】
【０００３】
２．関連技術の説明
データ格納の前に、未加工データは、記憶媒体をより効率的に使用するためにより少ない数のビットに符号化され得る。検索の際、符号化データは元の未加工データをもたらすために復号され得る。同様に、データ伝送の前に、未加工データは、伝送チャネルをより効率的に使用するために圧縮され得る。受取の際、圧縮されたデータは復号プロセスを用いて伸張され得る。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
いくつかの圧縮技術が開発されてきた。圧縮技術の中には損失のない圧縮アルゴリズムを使用するものもあれば、損失の大きい圧縮アルゴリズムを使用するものもある。格納または伝送中にエラーが発生しなかった場合、損失のない圧縮−伸張スキームは元のデータをもたらすが、損失の大きいスキームは元のデータに似ているが必ずしも同一ではないデータをもたらす可能性がある。圧縮技術の中にはデータを固定長セグメントに符号化するものもあれば、データを可変長セグメントに符号化するものもある。圧縮技術の中にはハッシュ法の使用を伴うものもあり、これはマッチングストリングを見付けるために読取られ、比較される必要のある位置の数を最小限にする。圧縮技術の中には同報通信機能を有するシフトレジスタの使用を伴うものもあり、入力文字は単一サイクルの中でシフトレジスタにおけるあらゆる位置と比較される。圧縮技術の中にはコンテントアドレッサブルメモリ（Content-Addressable memory）（ＣＡＭ）の使用を伴うものもあり、これは単一サイクルの中でメモリにおけるあらゆる位置と入力文字を比較する。
【課題を解決するための手段】
【０００５】
発明の簡単な概要
入力データのシーケンスをコード化データのシーケンスに符号化するための方法および装置であって、コード化データは、リテラルデータとして、最近の入力データへの単一文字参照として、および１つ以上の過去の入力データへの参照として表わされる。参照は長さが固定される場合もあれば、長さが可変である場合もある。参照は、一致オフセットの表示および／または一致長の表示を含み得る。
【０００６】
この発明のいくつかの実施例は、デジタルデータを符号化する方法を提供し、上記方法は、データの現在の１つ以上のセグメントと、データの対応する１つ以上の過去のセグメントとの間の一致を検索することと、一致が存在しない場合にデータの現在のセグメント
をリテラルとしてコード化することと、一致が存在し、一致長が１よりも大きい場合に一致を参照としてコード化することと、一致が存在し、一致長が１である場合に、一致オフセットが閾値未満であるかどうかを判断することと、一致オフセットが閾値未満である場合に一致を単一文字参照としてコード化することと、一致オフセットが閾値よりも大きい場合に一致をリテラルとしてコード化することとを含む。
【０００７】
この発明のいくつかの実施例は、データセグメントのストリームを符号化する方法を提供し、上記方法は、データのセグメントをデータセグメントのストリームからロードすることと、データのセグメントがデータの過去のセグメントと一致するかどうかを判断することと、データのセグメントが過去のデータと一致しない場合に、待ち状態の一致が存在するかどうかを判断することと、待ち状態の一致が存在し、一致オフセットが閾値未満である場合に待ち状態の一致を単一文字一致として符号化することと、待ち状態の一致が存在し、一致オフセットが閾値よりも大きい場合に待ち状態の一致をリテラルとして符号化することと、データのセグメントをリテラルデータとして符号化することと、データのセグメントが過去のデータと一致する場合に、継続一致が存在する場合に一致長をインクリメントすることと、待ち状態の一致が存在し、継続一致が存在せず、一致オフセットが閾値未満である場合に待ち状態の一致を単一文字一致として符号化することと、待ち状態の一致が存在し、継続一致が存在せず、一致オフセットが閾値よりも大きい場合に待ち状態の一致をリテラルとして符号化することとを含む。
【０００８】
この発明のいくつかの実施例はエンコーダを提供し、エンコーダは符号化論理を含み、符号化論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、上記エンコーダは、さらに、符号化論理に結合されるストリングマッチング論理を含み、ストリングマッチング論理は、過去のデータセグメントの繰返される出現の位置を識別するように動作可能な位置付メモリと、位置付メモリに結合されるマッチレジスタとを含む。
【０００９】
この発明のいくつかの実施例はデータのソースを符号化するためのパラレルエンコーダを提供し、パラレルエンコーダは複数のシリアルエンコーダを含み、各々のシリアルエンコーダは入力および出力を有する符号化論理を含み、符号化論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、上記シリアルエンコーダは、さらに、符号化論理に結合されるストリングマッチング論理を含み、ストリングマッチング論理は、過去のデータセグメントを保持するように動作可能な履歴バッファと、過去のデータセグメントの繰返される出現の位置を識別するように動作可能な位置付メモリと、位置付メモリに結合されるマッチレジスタとを含み、上記パラレルエンコーダは、さらに、ヘッド制御を含み、ヘッド制御はデータのソースに結合される入力と複数の出力とを含み、各々の出力は複数のシリアルエンコーダのうちの対応する１つの入力に結合され、上記パラレルエンコーダは、さらに、末尾制御を含み、末尾制御は複数の入力を含み、各々の入力は複数のシリアルエンコーダのうちの対応する１つの出力に結合され、上記末尾制御は、さらに、コード化データストリームを与える出力を含む。
【００１０】
この発明のいくつかの実施例は符号化データのソースを復号するためのパラレルデコーダを提供し、パラレルデコーダは複数のシリアルデコーダを含み、各々のシリアルデコーダは復号論理を含み、復号論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、上記シリアルデコーダは、さらに、復号されたデータセグメントを保持するように動作可能な履歴バッファを含み、上記パラレルデコーダは、さらに、ヘッド制御を含み、ヘッド制御は符号化データのソースに結合される入力と複数の出力とを含み、各々の出力は複数のシリアルデコーダのうちの対応する１つの入力に結合され、上記パラレルデコーダは、さらに、末尾制御を含み、末尾制御は複数の入力を含み、各々の入力は複数のシリアルデコーダのうちの対応する１つの出力に結合され、
上記末尾制御は、さらに、復号されたデータストリームを与える出力を含む。
【００１１】
この発明のいくつかの実施例はコード化データを復号する方法を提供し、上記方法は、コード化データの始めを判断することと、コード化データがリテラルデータを含むかまたは符号化表現を含むかを示すフラグを読取ることと、フラグがリテラルデータを示す場合にデータのリテラル長を抽出し、それによって復号されたデータのセグメントを形成することと、フラグが符号化表現を示す場合に、符号化表現が単一文字一致オフセットを含むかまたは長い長さの一致オフセットを含むかを示す符号化タイプフラグを読取ることと、符号化タイプフラグが単一文字一致オフセットを示す場合に、単一文字一致オフセットを判断することと、単一文字一致オフセットに対応する、履歴バッファからの値を判断し、それによって復号されたデータのセグメントを形成することと、符号化タイプフラグが長い長さの一致オフセットを示す場合に、長い長さの一致オフセットを判断することと、一致長を判断することと、長い長さの一致オフセットおよび一致長に対応する、履歴バッファからの１つ以上の値を読取り、それによって復号されたデータの対応する１つ以上のセグメントを形成することとを含む。
【００１２】
この発明のいくつかの実施例は磁気テープドライブを提供し、磁気テープドライブはエンコーダを含み、エンコーダは符号化論理を含み、符号化論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、上記エンコーダは、さらに、符号化論理に結合されるストリングマッチング論理を含み、ストリングマッチング論理は過去のデータセグメントの繰返される出現の位置を識別するように動作可能な位置付メモリと、位置付メモリに結合されるマッチレジスタとを含み、上記磁気テープドライブは、さらに、デコーダを含み、デコーダは復号論理を含み、復号論理は単一文字までの一致オフセットのテーブルおよび長い長さの一致オフセットのテーブルを含み、上記デコーダは、さらに、復号されたデータセグメントを保持するように動作可能な履歴バッファを含む。
【００１３】
この発明のいくつかの実施例はデータのストリームを符号化する方法を提供し、上記方法は、データのストリームのセグメントを符号化するために３つのフォーマットからフォーマットを選択することを含み、第１のフォーマットはセグメントを含むリテラルとしてセグメントを表わし、第２のフォーマットは以前のセグメントとの単一文字一致までのオフセットを含む参照としてセグメントを表わし、以前のセグメントは閾値オフセット内であるように判断され、第３のフォーマットは一致オフセットの表示および一致長の表示を含む参照としてセグメントを表わす。
【００１４】
この発明のいくつかの実施例はデータのストリームを符号化する方法を提供し、上記方法は、データのストリームのセグメントを符号化するために４つのフォーマットからフォーマットを選択することを含み、第１のフォーマットはセグメントを含むリテラルとしてセグメントを表わし、第２のフォーマットは以前のセグメントとの単一文字一致までのオフセットを含む参照としてセグメントを表わし、以前のセグメントは閾値オフセット内であるように判断され、第３のフォーマットは以前のセグメントとの倍長文字一致までのオフセットを含む参照としてセグメントを表わし、第４のフォーマットは一致オフセットの表示および一致長の表示を含む参照としてセグメントを表わす。
【００１５】
この発明の他の特徴および局面は、この発明の実施例に従う特徴を例証として示す添付の図面に関連して取入れられる際に、以下の詳細な説明から明らかになる。概要はこの発明の範囲を制限するように意図されるものではなく、この発明の範囲は特許請求の範囲によってのみ規定される。
【発明を実施するための最良の形態】
【００１６】
発明の詳細な説明
以下の説明では、この発明のいくつかの実施例を示す添付の図面を参照する。この開示の精神および範囲から逸脱することなく他の実施例が利用されることができ、機械的、組成的、構造的、電気的および動作の変更がなされ得ることが理解される。以下の詳細な説明は限定的な意味で取られるべきではなく、この発明の実施例の範囲は発行された特許の特許請求の範囲によってのみ規定される。
【００１７】
詳細な説明のいくつかの部分は、手順、ステップ、論理ブロック、処理およびコンピュータメモリで実行され得る、データビットでの動作の他の象徴的な表現に関して提示される。手順、コンピュータが実行するステップ、論理ブロック、プロセスなどは本明細書では、所望の結果に繋がるステップまたは命令の自己矛盾のないシーケンスであるように考えられる。ステップは物理的な量の物理的な操作を利用するものである。これらの量は、コンピュータシステムにおいて格納され、転送され、組合せられ、比較され、その他の場合には操作されることができる電気信号、磁気信号、または無線信号の形を取り得る。これらの信号は、時には、ビット、値、素子、記号、文字、語、数などと称されてもよい。各々のステップは、ハードウェア、ソフトウェア、ファームウェアまたはそれらの組合せによって実行されてもよい。
【００１８】
図１は、この発明の実施例に従うエンコーダ／デコーダシステムを示す。エンコーダ／デコーダシステムは、ソースデータのストリーム１０をコード化データのストリーム２０に変換するためにエンコーダ１０１を使用する。コード化データストリーム２０は記憶装置１０２に書込まれ得る。記憶装置１０２はハードディスクドライブまたは磁気テープなどの磁気記憶媒体を含んでもよい。代替的には、コード化データのストリーム２０はデータチャネルを介して受信機に伝送されてもよい。コード化データのストリーム２０Ａは、ソースデータの再構築されたストリーム１０Ａを生成するために、記憶装置１０２から読取られ、デコーダ１０３によって復号され得る。エンコーダ／デコーダシステムは、高速圧縮を必要とするデータ、たとえば、テープドライブで使用する磁気テープ、ハードディスクドライブの磁気媒体、または光学ディスクドライブを使用する光学ディスクなどの記憶装置へ格納されるデータで、高速データ圧縮のために使用されてもよい。
【００１９】
図２は、この発明の実施例に従うシリアルエンコーダ２００を示す。エンコーダ１０１の符号化プロセスは、符号化論理２０１およびストリングマッチング論理２０２を含むシリアルエンコーダ２００によって実行されてもよい。ストリングマッチング論理２０２は、ソースデータのストリーム１０を受入れ、ソースデータの１つ以上の最近のセグメントがソースデータの対応する数の過去のセグメントと一致するかどうかを判断する。
【００２０】
ストリングマッチング論理２０２は、一致オフセット２０３のシーケンスを生成し得る。一致オフセットは、ソースデータの以前のマッチングシーケンスが発見され得る、ソースデータの現在のシーケンスから隔たったセグメントの数を表す。
【００２１】
ストリングマッチング論理２０２は、さらに、一致長２０４の対応するシーケンスを生成し得る。一致長は一致の際のセグメントの数を示す。いくつかの実施例に従って、１という一致長は単一文字一致が検出されることを意味する。他の実施例に従って、０という一致長は単一文字一致が検出されることを意味する。
【００２２】
ストリングマッチング論理２０２は、さらに、ソースデータストリーム１０の現在の部分とソースデータストリーム１０の以前の部分との間に一致が存在するか、または一致が存在しないかを示す制御信号２０５を生成してもよい。一致が存在する場合、符号化論理２０１は一致オフセットおよび一致長に関して一致を符号化し得る。一致が存在しない場合、符号化論理２０１はソースデータストリーム１０の現在のセグメントをリテラルデー
タとして符号化することになる。
【００２３】
図３は、この発明の実施例に従うパラレルエンコーダ３００を示す。パラレルエンコーダ３００は、複数の圧縮エンジンまたはシリアルエンコーダ２００を含み、個々のシリアルエンコーダ２００−１から２００−ｎ全体で符号化の作業を自動的に分散させ、それによって全体的な性能を高める。
【００２４】
エンコーダ１０１の符号化プロセスは、ヘッド制御３０１、複数のシリアルエンコーダ２００−１から２００−ｎ、および末尾制御３０２を含むパラレルエンコーダ３００によって実行されてもよい。ヘッド制御３０１はソースデータのストリーム１０を受入れる入力を有する。ヘッド制御３０１はソースデータのストリーム１０を複数のサブストリームに分割する。サブストリームの各々はソースデータのストリーム１０のオーバーラップしない部分を表わし、それぞれのシリアルエンコーダ２００−１から２００−ｎに与えられる。シリアルエンコーダ２００−１から２００−ｎの各々はコード化データサブストリームを生成し、コード化データサブストリームは末尾制御３０２に与えられる。末尾制御３０２は、コード化データのストリーム２０を生成するために、コード化データサブストリームを多重化する。
【００２５】
パラレルエンコーダ３００のヘッド制御３０１は入力データをデータのブロックに分割またはフォーマットしてもよく、データの各々のブロックは他のすべてのブロックから独立して圧縮される。ヘッド制御３０１は、さらに、各々のブロックが符号化のためにどのシリアルエンコーダに送られるかを選択してもよい。各々のブロックは異なるシリアルエンコーダにルーティングされてもよい。ヘッド制御３０１は、データの所与のブロックのためにどのシリアルエンコーダが使用されるべきであるかを判断するためのいくつかの異なるアルゴリズム、たとえばラウンドロビンおよび最も空いているノードスキームを使用してもよい。各々のシリアルエンコーダ３００−１から３００−ｎは、入力データをステージするためにその独自のヘッドＦＩＦＯを有してもよい。各々のシリアルエンコーダ３００−１から３００−ｎは、さらに、圧縮されたデータストリームが装置に出力されるときに、圧縮されたセグメントの組立順序が確実に維持されるのを助けるようにその独自の末尾ＦＩＦＯを有してもよい。ヘッド制御３０１は、任意のヘッドＦＩＦＯまたは末尾ＦＩＦＯを含むシリアルエンコーダ３００−１から３００−ｎを通されるデータの各々のブロック上にあるセグメント制御フィールドを変更されないまま維持してもよい。セグメント制御フィールドは、シリアルエンコーダからのいずれの圧縮されたデータストリームの前にも、末尾ＦＩＦＯに書込まれてもよい。セグメント制御フィールドは、シーケンシャル番号付または主なＣＲＣの使用を含むいくつかの異なるフォーマットを有してもよい。ヘッド制御３０１は、渡されるデータレコードサイズを使用してもよく、符号化データのブロック内のどこに第１のデータレコードが位置するかを判断するために復号中に使用され得る第１のレコードポインタを生成してもよい。
【００２６】
パラレルエンコーダの末尾制御３０２は、各々のシリアルエンコーダ３００−１から３００−ｎの末尾ＦＩＦＯを監視してもよい。末尾制御３０２は、各々のシリアルエンコーダの末尾ＦＩＦＯに存在するセグメント制御フィールドを調べることによって、どのシリアルエンコーダが次のシーケンシャルセグメントを含むかを判断し得る。末尾制御３０２は、データの対応するブロックがシリアルエンコーダ３００−１から３００−ｎに入ったのと同じ順序で、符号化データのブロックが送出されることを確実にすることができる。末尾制御３０２は、コード化データのストリームとしてデータを出力する前に、符号化データのブロックからセグメント制御フィールドを取除いてもよい。
【００２７】
図４は、この発明の実施例に従うストリングマッチ論理２０２を示す。ストリングマッチング論理２０２は、履歴バッファ４００、位置付メモリ５００、およびマッチレジスタ
６００を含む。履歴バッファ４００は、ソースデータのストリーム１０の少なくとも一部を保持する。ストリングマッチング論理２０２は、データの新しいセグメントがソースデータのストリーム１０から受取られるときにデータの新しいセグメントを書込む。履歴バッファ４００は、ＲＡＭなどのメモリまたはハードディスクドライブなどの記憶装置に形成されてもよい。ストリングマッチング論理２０２は、データの新しいセグメントを履歴バッファ４００に書込む。
【００２８】
履歴バッファ４００は、一旦いっぱいになると、新しいデータが古いデータに上書きされる循環バッファとして機能し得る。代替的には、ストリングマッチング論理２０２は、履歴バッファ４００がいっぱいになった後に履歴バッファ４００をリセットしてもよい。履歴バッファ４００をリセットすることによって、ストリングマッチング論理２０２は効果的に初期状態にリセットし、それによって、符号化と復号化との間に導入されるエラーの永続化を制限する。
【００２９】
位置付メモリ５００はビットマップメモリと考えられてもよい。メモリの深さは、データの入力セグメントの可能な値の数に少なくとも等しい。位置付メモリ５００のビット幅は、履歴バッファ４００に保持される値の最大数に等しくてもよい。ストリングマッチング論理２０２は、ビット単位で、位置付メモリ５００で機能し得る。
【００３０】
マッチレジスタ６００は一致オフセットを判断するために使用され得る。マッチレジスタ６００のビット幅も、履歴バッファ４００に保持され得る値の数に少なくとも等しい。ストリングマッチング論理２０２は、ビット単位で、マッチレジスタ６００でも機能し得る。
【００３１】
図５は、この発明の実施例に従う、履歴バッファ４００と位置付メモリ５００との間の関係を示す。示される履歴バッファ４００は、２０４８個のデータのセグメントのための位置を含む。各々のセグメントは１つが８ビットのバイトであるように示される。データの新しいバイトが受取られるとき、ストリングマッチング論理２０２は新しいバイトを次の利用可能な位置７００に置く。
【００３２】
位置付メモリ５００は２５６個のアドレス指定可能な記憶場所を含み、受取られる新しいバイトの各々の可能な値ごとに１つのアドレスが存在する。各々の記憶場所は、履歴バッファ４００におけるユニークな値および位置に対応するユニークなビットを含む。示される例では、位置付メモリ５００は２０４８ビット幅である。これは位置付メモリ５００が疎らに存在することになることを意味し、各々のビット位置は、ビットが１にセットされる唯一のアドレスを有することになる。有利に、０ｘ５５（１０進数で８５）という値を有する履歴バッファ４００での位置を見付けるために、ストリングマッチング論理２０２は位置付メモリ５００においてアドレス８５とだけ読取ることが必要であり、０ｘ５５を有する履歴バッファ４００での位置に対応する、アドレス指定された記憶場所の中のすべての位置は、１にセットされるビットを有することになる。
【００３３】
履歴バッファ４００は、アドレス０から５において６バイトのデータで満たされるように示される。直近に受取られたバイトは、１６進数で０ｘ５５すなわち１０進数で８５と表わされ、現在の位置７００と表示される位置に置かれる。この例では、現在の位置７００はアドレス５である。アドレス６からアドレス２０４７におけるメモリの終わりまでの空白の位置は０で満たされるように示される。
【００３４】
履歴バッファ４００におけるバイトの値および位置の各々の組合せは、位置付メモリ５００におけるビット位置に対応する。たとえば、履歴バッファ４００は、アドレス０において、１６進数の値０ｘ５１すなわち１０進数の値８１を含む。ビット位置０の中のアド
レス８１における位置付メモリ５００は、アドレス０において値８１を有する履歴バッファ４００に対応するのだが、このような位置付メモリ５００で、ビットは１にセットされる。位置付メモリ５００のその列（ビット位置０）にある他のすべてのビットは、ビットを０にリセットさせる。
【００３５】
同様に、履歴バッファ４００は、アドレス５において、１６進数の値０ｘ５５すなわち１０進数の値８５を含む。ビット位置５の中のアドレス８５における位置付メモリ５００は、アドレス５において値８５を有する履歴バッファ４００に対応するのだが、このような位置付メモリ５００で、ビットは１にセットされる。位置付メモリ５００のその列にある他のすべてのビットは、ビットを０にリセットさせる。
【００３６】
履歴バッファ４００に置かれる各々の新しいバイトごとに、対応するビットが位置付メモリ５００においてセットされる。結果として生じる位置付メモリ５００は、いずれか１つの値が履歴バッファ４００の中のどこに位置するかをすばやく判断するために使用されてもよい。たとえば、０ｘ５５という１６進数の値すなわち８５という１０進数の値が履歴バッファ４００の中のどこに位置するかを判断するために、ストリングマッチング論理２００は位置付メモリ５００のアドレス８５にアクセスしてもよい。アドレス８５を有するメモリにおいて１にセットされる各々のビットは、１０進数の値８５を含む履歴バッファ４００での位置を表わす。
【００３７】
図６Ａおよび図６Ｂは、履歴バッファ４００および位置付メモリ５００をデータの新しいセグメントで更新するプロセスを示す。受取られる新しいバイトのために、ストリングマッチング論理２０２は最初に、以前にセットされたビットをリセットすることによって、新しいバイトのために位置付メモリ５００を準備する。
【００３８】
図６Ａでは、次の新しいバイトが位置７００に書込まれることになり、位置７００は履歴バッファ４００においてアドレス７を示す。履歴バッファ４００における現在の値が読取られ、読取られた値および位置７００に対応する位置付メモリ５００の中のビットがリセットされる。今回の場合、値０ｘ００がアドレス７において履歴バッファ４００から読取られる。ストリングマッチング論理２０２は位置付メモリ５００における位置０にアクセスし、位置０は読取られた値０ｘ００に対応する。履歴バッファ４００におけるアドレス７に対応するビット位置７で、以前に１にセットされたビットは０にリセットされる。
【００３９】
図６Ｂでは、位置付メモリ５００におけるアドレス０のビット位置７は０にリセットされている。０ｘ５１（１０進数で８１）という値を有する新しいバイト１０が、履歴バッファ４００の位置７００に書込まれる。履歴バッファ４００においてアドレス７における値８１に対応するアドレス８１のビット位置７は、１にセットされる。位置付メモリ５００のアドレス８１における値は、履歴バッファ４００において２つの位置、つまりビット位置０のセットビットに対応するアドレス０、および位置７のセットビットに対応するアドレス７に、値０ｘ５１が位置することを示す。
【００４０】
特定の値を有する新しいバイト１０が到着するとき、ストリングマッチング論理２０２は、位置付メモリ５００における対応するアドレスを調べることによって、その特定の値がいつ最後に受取られたかを判断してもよい。示される例では、０ｘ５１という値は７バイト前に受取られた。したがって、エンコーダは、７位置前に受取られたバイトへの参照として新しいバイト１０をコード化してもよい。つまり、エンコーダは、０ｘ５１というリテラル値ではなく７という一致オフセットを符号化してもよい。
【００４１】
図７は、この発明の実施例に従うマッチレジスタ６００の使用を示す。マッチレジスタ６００は、一致が存在するかどうかおよびその一致までのオフセットを判断するために使
用され得る。マッチレジスタ６００は０に初期化されてもよい。以下に記載されるように、処理後、マッチレジスタ６００は０ではない値を有してもよい。マッチレジスタ６００における０ではない値は、以前の１つ以上の文字との一致が検出されたことを示す。示される例では、現在の位置７００はビット７にあり、これはアドレス７において履歴バッファ４００の中に置かれる新しいバイトに対応する。現在の位置７００から、最も近いセットビット７０１までのビットの数は一致オフセットを示す。ここでは、現在の位置７００からビット位置０にある第１のセットビット７００までに７ビット存在する。したがって、一致が存在し、一致オフセットは７である。
【００４２】
図８および図９Ａ〜図９Ｂは、この発明の実施例に従う、マッチレジスタおよび位置付メモリのハードウェアの実現例を示す。図８は、マッチレジスタ６００において値を更新するために使用され得るハードウェアを示す。図９Ａおよび図９Ｂは、受信データのシーケンスならびに一致オフセットおよび一致長の結果として生じる対の例を示す。
【００４３】
マッチレジスタ６００は、新しいバイトが受取られるたびにハードウェアによって繰返し更新される。結果として生じるマッチレジスタ（次のマッチレジスタ６０７）は、最初のマッチレジスタ（以前のマッチレジスタ６０１）として次の繰返しの間使用される。最初に、マッチレジスタ（以前のマッチレジスタ６０１）は０に初期化される。
【００４４】
概して、ハードウェアは、マッチレジスタ６０１のシフトされたバージョンと、受取られたバイトによって索引付けされる位置付メモリ５００における値５０１との間で論理ビットのようなＡＮＤを実行する。マルチプレクサ６０４は、後続の計算で使用されるようにマッチレジスタ（次のマッチレジスタ６０７）を更新するために２つの値のうちのどちらが使用されることになるかを選択するために使用される。
【００４５】
具体的には、以前のマッチレジスタの値６０１（たとえば、２０４８ビットを有する）は１ビットだけシフトされ６０２、論理ＡＮＤゲート６０３の組への入力の第１の組に与えられる。シフト動作６０２は、マッチレジスタ６０１のビット０、１、２...を、論理ＡＮＤゲート６０３のビット１、２、３...におけるそれぞれの入力に接続することによって実行され得る。シフト動作６０２はバレルシフトであってもよく、それによってマッチレジスタ６０１の最後のビットが論理ＡＮＤゲート６０３のビット０に接続されることになる。論理ＡＮＤゲート６０３への入力の第２の組は、受取られた新しいバイトの値によって索引付けされる、位置付メモリ５００からの値５０１によって与えられる。
【００４６】
マルチプレクサ６０４（すなわちスイッチの組）は２つの値のための入力を有する。第１の値は、新しいバイトによって索引付けされる、位置付メモリ５００からの値５０１によって与えられる。第２の値は、論理ＡＮＤ演算６０３の出力によって与えられる。論理ＡＮＤ演算６０３の出力は、さらに、論理ＯＲ演算６０５に与えられる。論理ＯＲ演算６０５は、論理ＡＮＤ６０３からのすべてのビットが０である場合に０に等しく、論理ＡＮＤ６０３からの１つ以上のビットのいずれかが１である場合に１に等しい出力（一致継続６０６）を有する。一致継続ビット６０６はマルチプレクサ６０４への選択ビットとして使用される。一致継続ビット６０６が０である場合、次のマッチレジスタ６０７は値５０１でクロック制御される。一致継続ビット６０６が１である場合、次のマッチレジスタ６０７は論理ＡＮＤ演算６０３からの値でクロック制御される。
【００４７】
図９Ａは、「ＡＢＡＣＢＡＣＡＤ」というバイトの入力シーケンスのための、図８のハードウェアから結果として生じる値を示す。
【００４８】
第１の繰返しのために、新しいバイト「Ａ」が受取られる。任意のデータが到着する前に、マッチレジスタ６０１は０に初期化される（前回のマッチレジスタＭＲ＝「００００
００００」）。ＭＲ６０１はシフトされ（「００００  ００００」）、論理ＡＮＤゲート６０３への入力の第１の組に与えられる。位置付メモリ５００は、新しいバイト「Ａ」によって索引付けされ、値５０１（「００００  ００００」）をもたらし、値５０１は論理ＡＮＤゲート６０３への入力の第２の組に与えられる。論理ＡＮＤ演算６０３は「００００  ００００」という結果になり、これは論理ＯＲゲート６０５およびマルチプレクサ６０４への入力の第１の組に与えられる。論理ＯＲ演算６０５は、０という一致継続ビット６０６をもたらす。したがって、次のマッチレジスタ６０７は値５０１をロードされる。値５０１が０であり、一致カウントが０であるので、新しいバイト「Ａ」はリテラルとしてコード化される。
【００４９】
第２の繰返しでは、上記からの次のマッチレジスタ６０７が前回のマッチレジスタ６０１になり、マッチレジスタ６００を更新するプロセスは「Ｂ」という新しいバイトとともに繰返す。この繰返しの終わりにおいて、一致継続ビット６０６は０であり、値５０１は０であり、一致カウントも０であり、したがって新しいバイト「Ｂ」はリテラルとしてコード化され、次のマッチレジスタ６０７は値５０１にセットされる。
【００５０】
第３の繰返しでは、「Ａ」という新しいバイトは０に等しい論理ＯＲ６０５の出力（一致継続６０６）をもたらす。したがって、値５０１（「１０００  ００００」）が次のマッチレジスタ６０７を満たすために使用される。位置付メモリからの値５０１は０ではなく、これはこの新しいバイトが新しい一致の始めであることを示す。したがって、一致カウントは１にセットされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００５１】
第４の繰返しでは、「Ｃ」という新しいバイトが受取られる。この繰返しの終わりにおいて、値５０１は０であるが、一致カウントは０ではなく、したがって前回の一致は終了し、オフセットが２に等しく、長さが１に等しい参照としてコード化される。さらに、新しいバイト「Ｃ」はリテラルとしてコード化される。
【００５２】
第５の繰返しでは、「Ｂ」という新しいバイトは０に等しい論理ＯＲ６０５の出力（一致継続６０６）をもたらす。したがって、値５０１（「０１００  ００００」）が次のマッチレジスタ６０７を満たすために使用される。位置付メモリからの値５０１は０ではなく、これはこの新しいバイトが新しい一致の始めであることを示す。したがって、一致カウントは１にセットされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００５３】
第６の繰返しでは、「Ａ」という新しいバイトは１に等しい論理ＯＲ６０５の出力（一致継続６０６）をもたらす。したがって、論理ＡＮＤ演算６０３の出力（「００１０  ００００」）が次のマッチレジスタ６０７を満たすために使用される。論理ＡＮＤの出力は０ではなく、これはこの新しいバイトが前回の一致を継続させることを示す。したがって、一致カウントがインクリメントされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００５４】
第７の繰返しでは、「Ｃ」という新しいバイトは１に等しい論理ＯＲ６０５の出力（一致継続６０６）をもたらす。したがって、したがって、論理ＡＮＤ演算６０３の出力（「０００１  ００００」）が次のマッチレジスタ６０７を満たすために使用される。論理ＡＮＤの出力は０ではなく、これはこの新しいバイトが前回の一致を継続させることを示す。したがって、一致カウントがインクリメントされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００５５】
第８の繰返しでは、「Ａ」という新しいバイトは０に等しい論理ＯＲ６０５の出力（一
致継続６０６）をもたらす。したがって、値５０１（「１０１０  ００００」）が次のマッチレジスタ６０７を満たすために使用される。値６０６は０であるが、前回の一致カウントが０ではなく、したがって前回の一致が終了し、オフセットが３に等しく、長さが３に等しい参照としてコード化される。さらに、位置付メモリからの値５０１は０ではなく、これはこの新しいバイトが新しい一致の始めであることを示す。したがって、一致カウントは１にセットされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりに前回の終了一致のみが書込まれる。
【００５６】
第９の繰返しでは、「Ｄ」という新しいバイトが受取られる。この繰返しの終わりにおいて、値５０１は０であるが、一致カウントは０ではなく、したがって前回の一致が終了し、オフセットが２に等しく、長さが１に等しい参照としてコード化される。さらに、新しいバイト「Ｄ」はリテラルとしてコード化される。
【００５７】
図９Ｂは、「ＡＡＡＡＡＢ」というバイトの入力シーケンスのための、図８のハードウェアから結果として生じる値を示す。
【００５８】
第１の繰返しのために、新しいバイト「Ａ」が受取られる。任意のデータが到着する前に、マッチレジスタ６０１は０に初期化される（前回のマッチレジスタＭＲ＝「００００
００００」）。ＭＲ６０１はシフトされ（「００００  ００００」）、論理ＡＮＤゲート６０３への入力の第１の組に与えられる。位置付メモリ５００は、新しいバイト「Ａ」によって索引付けされ、値５０１（「００００  ００００」）をもたらし、値５０１は論理ＡＮＤゲート６０３への入力の第２の組に与えられる。論理ＡＮＤ演算６０３は「００００  ００００」という結果になり、これは論理ＯＲゲート６０５およびマルチプレクサ６０４への入力の第１の組に与えられる。論理ＯＲ演算６０５は、０という一致継続ビット６０６をもたらす。したがって、次のマッチレジスタ６０７は値５０１をロードされる。値５０１が０であり、一致カウントが０であるので、新しいバイト「Ａ」はリテラルとしてコード化される。
【００５９】
第２の繰返しでは、「Ａ」という新しいバイトは０に等しい論理ＯＲ６０５の出力（一致継続６０６）をもたらす。したがって、値５０１（「１０００  ００００」）が次のマッチレジスタ６０７を満たすために使用される。位置付メモリからの値５０１は０ではなく、これはこの新しいバイトが新しい一致の始めであることを示す。したがって、一致カウントは１にセットされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００６０】
第３の繰返しでは、「Ａ」という新しいバイトは１に等しい論理ＯＲ６０５の出力（一致継続６０６）をもたらす。したがって、論理ＡＮＤ演算６０３の出力（「０１００  ００００」）が次のマッチレジスタ６０７を満たすために使用される。論理ＡＮＤの出力は０ではなく、これはこの新しいバイトが前回の一致を継続させることを示す。したがって、一致カウントがインクリメントされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００６１】
第４の繰返しでは、「Ａ」という新しいバイトは１に等しい論理ＯＲ６０５の出力（一致継続６０６）をもたらす。したがって、論理ＡＮＤ演算６０３の出力（「００１０  ００００」）が次のマッチレジスタ６０７を満たすために使用される。論理ＡＮＤの出力は０ではなく、これはこの新しいバイトが前回の一致を継続させることを示す。したがって、一致カウントがインクリメントされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００６２】
第５の繰返しでは、「Ａ」という新しいバイトは１に等しい論理ＯＲ６０５の出力（一
致継続６０６）をもたらす。したがって、論理ＡＮＤ演算６０３の出力（「０００１  ００００」）が次のマッチレジスタ６０７を満たすために使用される。論理ＡＮＤの出力は０ではなく、これはこの新しいバイトが前回の一致を継続させることを示す。したがって、一致カウントがインクリメントされる。次の新しいバイトが現在の一致を拡張し得るので、この繰返しの終わりにコードは書込まれない。
【００６３】
第６の繰返しでは、「Ｂ」という新しいバイトが受取られる。この繰返しの終わりに、値５０１は０であるが、一致カウントは０ではなく、したがって前回の一致が終了し、オフセットが１に等しく、長さが４に等しい参照としてコード化される。さらに、新しいバイト「Ｂ」はリテラルとしてコード化される。
【００６４】
図１０Ａおよび図１０Ｂは、この発明の実施例に従う、リテラルデータを含むソースデータのストリーム１０およびコード化データのストリーム２０をそれぞれに示す。リテラルデータは、エンコーダによって受取られるときのデータである。入力ソースデータのストリーム１０は、決定可能な数のビットを占める。たとえば、８ビットのソースデータの３つのセグメントは２４ビットを占める。対照的に、出力コード化データのストリーム２０は、不確定な数のビットを占める。いくつかの実施例に従って、入力データの８ビットセグメントは、たとえば、９ビットコードとしてまたは６ビットコードとしてコード化されてもよい。入力データの２つの８ビットセグメントは、１２から１８ビットを有するビットシーケンスとしてコード化されてもよい。入力データの３つの８ビットセグメントは、１２から２７ビットを有するビットシーケンスとしてコード化されてもよい。
【００６５】
ソースデータのストリーム１０が、より少ないビットを占めるコード化データのストリーム２０としてコード化される場合、ソースデータのストリーム１０は圧縮されている。データが、繰返される単一文字および複数文字のパターンを有するので、ストリームは圧縮され得る。データがデータのＡＳＣＩＩパラグラフである場合、スペースは一旦文字通りコード化されてもよく、それ以降参照としてコード化されてもよい。繰返される語も一旦文字通りコード化されてもよく、各々がさらに出現するごとに参照されてもよい。
【００６６】
図１１は、この発明の実施例に従う、コード化データ２０の構造を示す。コード化データ２０は、後続のビットがリテラルデータ４０を表わすか、または符号化データ５０を表わすかを示すフラグ３０を含み得る。リテラルデータを示すようにフラグ３０がセットされる（たとえば、フラグ＝０）場合、ビットの次の固定される数は入力リテラルデータビットを表わす。入力リテラルデータ１０の各々の値の最初の出現は、リテラルデータ４０として符号化され得る。
【００６７】
符号化データが続くことを示すようにフラグ３０がセットされる（たとえば、フラグ＝１）場合、後続の符号化表現５０は可変長であり、リテラルデータ１０の１つ以上のセグメントを表わしてもよい。たとえば、符号化表現５０は以前に出現した文字のシーケンスを参照してもよい。
【００６８】
可変長の符号化表現５０は、符号化タイプフラグ６０および参照情報７０を含む。符号化タイプフラグ６０は、参照情報７０を符号化するときに使用される符号化のタイプを示す。いくつかの実施例では、符号化タイプフラグ６０の長さは固定される。他の実施例では、符号化タイプフラグ６０の長さは可変である。符号化表現５０、符号化タイプフラグ６０、および参照情報７０の例示的な実現例は、以下の図１４から図１９を参照して詳細に記載される。
【００６９】
図１２および図１３は、この発明の実施例に従う、ソースデータのストリーム１０をコード化するプロセスを示す。１２００において、入力リテラルデータの新しいセグメント
がシリアルエンコーダ２００によってソースデータのストリーム１０から受取られ、ストリングマッチング論理２０２に与えられる。１２０１において、ストリングマッチング論理２０２は、データの入力セグメントを履歴バッファ４００に追加し、位置付メモリ５００を更新する。ストリングマッチング論理２０２は、マッチレジスタ６００を使用して位置付メモリ５００を処理し、それによって一致が存在するかどうかを判断し、一致が存在する場合、ストリングマッチング論理２０２はマッチレジスタ６００から一致オフセットを判断する。
【００７０】
１２０２において、符号化論理２０１は、一致が存在しなかった場合にはリテラルデータ４０として、または一致が存在する場合には符号化表現５０として、入力データ１０を符号化するかを判断する。１２０３において、一致が存在しない場合、コード化データはリテラルデータ符号化を示すフラグ３０を含むように、さらに、リテラルデータ４０としてリテラルデータ１０のコピーを含むようにセットされる。１２０４において、コード化データ２０が書込まれる。
【００７１】
一致が存在する場合、１２０５において、符号化論理２０１は複数の可変長表現の中でどの符号化表現５０が使用されるべきであるかを判断する。この判断の一例は、以下の図１３を参照して記載される。表現の方法が一旦選択されると、１２０６において、符号化論理２０１は、符号化された（非リテラル）データの符号化を表わすフラグ３０を含むように、さらに、符号化表現５０を含むように、コード化データ２０をセットする。符号化表現５０のために、符号化論理２０１は符号化タイプフラグ６０および参照情報７０をセットする。
【００７２】
１２０７において、符号化表現５０は一時的なバッファに書込まれてもよく、一時的なバッファは繰返しパターンの終わりが見付けられたことが判断されるまで保持されてもよい。さらなる新しいデータのセグメントが一致長を増加させる場合、一時的なバッファに格納された以前の符号化表現５０は上書きされてもよい。つまり、データの新しいセグメント１０が前回の一致から一致長を増加させる場合、新しい表現５０は前回のより短い一致長の表現５０を置き換えてもよい。この点で、繰返しパターンは単一の符号化表現５０を用いて参照されてもよい。コード化データ２０は、次の新しいデータセグメント１０が一致長を増加させないことが判断された後に書込まれてもよい。
【００７３】
図１３では、１２０５の符号化表現を判断する一例が示される。１３０１において、ストリングマッチング論理２０２は一致オフセットおよび一致長を判断する。１３０２において、符号化論理２０１は、参照が単一一致までの単一文字オフセットとして符号化され得るかどうかを判断する。一致オフセットは閾値の長さと比較される。たとえば、単一文字までのオフセットを表わすために４ビットのみを必要とするオフセットは、単一文字オフセットと考えられてもよい。この場合、一致オフセットが１６未満であるか、または１６に等しい（つまり、一致が１６個前の入力データセグメント内にある）場合、符号化論理２０１は一致長が単一文字一致を表わすかどうかを判断する。
【００７４】
１３０３において、一致オフセットが短距離一致であり、一致長が単一文字一致を表わす場合、符号化論理２０１は、単一文字一致オフセット符号化を示すようにセットされる符号化タイプフラグ６０、および単一文字一致までの短い距離を示す参照情報７０を含むように、符号化表現５０をセットする。
【００７５】
１３０４において、一致オフセットが閾値よりも大きいか、または単一文字一致以上にわたる場合、符号化論理２０１は、長いオフセットの符号化を示すようにセットされる符号化タイプフラグ６０を含むように、および単一文字または複数文字の一致までの距離を示す参照情報７０を含むように、符号化表現５０をセットする。１３０５において、符号
化論理２０１は処理を継続させる。
【００７６】
図１４Ａから図１４Ｄ、図１５Ａから図１５Ｈおよび図１６は、この発明の実施例に従う、コード化データのさまざまな構造を示す。
【００７７】
図１４Ａから図１４Ｄは、単一文字一致オフセット符号化が使用されるか、または長いオフセットの符号化が使用されるかを示す符号化タイプフラグ６０の実現例を示す。
【００７８】
図１４Ａの実現例では、符号化タイプフラグ６０Ａの後に参照情報７０Ａが続き、符号化タイプフラグ６０Ａは、参照情報７０Ａが単一文字一致オフセット８０を含むか、または固定長の長い一致オフセット９１および固定長の一致長９５の対を含むかを表わす。
【００７９】
図１４Ｂの実現例では、符号化タイプフラグ６０Ｂの後に参照情報７０Ｂが続き、符号化タイプフラグ６０Ｂは、参照情報７０Ｂが単一文字一致オフセット８０を含むか、または固定長の長い一致オフセット９１および可変長の一致長９６の対を含むかを表わす。
【００８０】
図１４Ｃの実現例では、符号化タイプフラグ６０Ｃの後に参照情報７０Ｃが続き、符号化タイプフラグ６０Ｃは、参照情報７０Ｃが単一文字一致オフセット８０を含むか、または可変長の長い一致オフセット９２および固定長の一致長９５の対を含むかを表わす。
【００８１】
図１４Ｄの実現例では、符号化タイプフラグ６０Ｄの後に参照情報７０Ｄが続き、符号化タイプフラグ６０Ｄは、参照情報７０Ｄが単一文字一致オフセット８０を含むか、または可変長の長い一致オフセット９２および可変長の一致長９６の対を含むかを表わす。
【００８２】
図１５Ａから図１５Ｈは、単一文字一致オフセット符号化が使用されるか、または２つの長い符号化スキームのうちの１つが使用されるかを示す符号化タイプフラグ６０の実現例を示す。
【００８３】
図１５Ａの実現例では、符号化タイプフラグ６０Ｅの後に参照情報７０Ｅが続き、符号化タイプフラグ６０Ｅは、参照情報７０Ｅが単一文字一致オフセット８０を含むか、固定長の長い一致オフセット９１および固定長の一致長９５の対を含むか、または固定長の長い一致オフセット９１および可変長の一致長９６の対を含むかを表わす。
【００８４】
図１５Ｂの実現例では、符号化タイプフラグ６０Ｆの後に参照情報７０Ｆが続き、符号化タイプフラグ６０Ｆは、参照情報７０Ｆが単一文字一致オフセット８０を含むか、固定長の長い一致オフセット９１および固定長の一致長９５の対を含むか、または可変長の長い一致オフセット９２および固定長の一致長９５の対を含むかを表わす。
【００８５】
図１５Ｃの実現例では、符号化タイプフラグ６０Ｇの後に参照情報７０Ｇが続き、符号化タイプフラグ６０Ｇは、参照情報７０Ｇが単一文字一致オフセット８０を含むか、固定長の長い一致オフセット９１および固定長の一致長９５の対を含むか、または可変長の長い一致オフセット９２および可変長の一致長９６の対を含むかを表わす。
【００８６】
図１５Ｄの実現例では、符号化タイプフラグ６０Ｈの後に参照情報７０Ｈが続き、符号化タイプフラグ６０Ｈは、参照情報７０Ｈが単一文字一致オフセット８０を含むか、固定長の長い一致オフセット９１および可変長の一致長９６の対を含むか、または可変長の長い一致オフセット９２および固定長の一致長９５の対を含むかを表わす。
【００８７】
図１５Ｅの実現例では、符号化タイプフラグ６０Ｉの後に参照情報７０Ｉが続き、符号化タイプフラグ６０Ｉは、参照情報７０Ｉが単一文字一致オフセット８０を含むか、固定
長の長い一致オフセット９１および可変長の一致長９６の対を含むか、または可変長の長い一致オフセット９２および可変長の一致長９６の対を含むかを表わす。
【００８８】
図１５Ｆの実現例では、符号化タイプフラグ６０Ｊの後に参照情報７０Ｊが続き、符号化タイプフラグ６０Ｊは、参照情報７０Ｊが単一文字一致オフセット８０を含むか、可変長の長い一致オフセット９２および固定長の一致長９５の対を含むか、または可変長の長い一致オフセット９２および可変長の一致長９６の対を含むかを表わす。
【００８９】
図１５Ｇの実現例では、符号化タイプフラグ６０Ｋの後に参照情報７０Ｋが続き、符号化タイプフラグ６０Ｋは、参照情報７０Ｋが単一文字一致オフセット８０を含むか、固定長の一致オフセット９１を含む倍長文字一致を含むか、または可変長の一致長９６および可変長の一致オフセット９２の対を含むかを表わす。
【００９０】
図１５Ｈの実現例では、符号化タイプフラグ６０Ｌの後に参照情報７０Ｌが続き、符号化タイプフラグ６０Ｌは、参照情報７０Ｌが単一文字一致オフセット８０を含むか、可変長の一致オフセット９２を含む倍長文字一致を含むか、または可変長の一致長９６および固定長の長い一致オフセット９１の対を含むかを表わす。
【００９１】
図１６は、符号化タイプフラグ６０Ｍの後に参照情報７０Ｍが続く実現例を示し、符号化タイプフラグ６０Ｍは、参照情報７０Ｍが単一文字一致オフセット符号化を含むか、または４つの長い符号化のうちの１つを含むかを示す。符号化タイプフラグ６０Ｍの第１の値は、単一文字一致オフセット８０がコード化されるかどうかを表わす。符号化タイプフラグ６０Ｍの第２の値は、固定長の長い一致オフセット９１および固定長の一致長９５の対がコード化されるかどうかを表わす。符号化タイプフラグ６０Ｍの第３の値は、固定長の長い一致オフセット９１および可変長の一致長９６の対がコード化されるかどうかを表わす。符号化タイプフラグ６０Ｍの第４の値は、可変長の長い一致オフセット９２および固定長の一致長９５の対がコード化されるかどうかを表わす。符号化タイプフラグ６０Ｍの第５の値は、可変長の長い一致オフセット９２および可変長の一致長９６の対がコード化されるかどうかを表わす。
【００９２】
図１７Ａおよび図１７Ｂは、この発明の実施例に従う、単一文字までの一致オフセットのテーブルを示す。単一文字一致オフセット８０は、長い長さの一致オフセット９１または９２に満たないビットの数にセットされてもよい。たとえば、単一文字一致オフセットは４ビット（ビット．０から．３）で構成されてもよい。一致オフセットテーブルの増分値は、一致オフセットの増分値を表わし得る。たとえば、１０１１というビットパターンは、示されるように１２という一致オフセットを表わし得る。
【００９３】
図１８Ａから図１８Ｃは、この発明の実施例に従う、長い長さの一致オフセットのテーブルを示す。符号化論理２０１は、一致までの距離を表わすために固定長の長い一致オフセット９１を使用してもよい。固定長の長い一致オフセット９１は、８ビット、９ビット、示される１０ビット、１１ビット、１２ビットなどのセットされた数のビットを含んでもよい。
【００９４】
代替的には、符号化論理２０１は、一致までの距離を表わすために可変長の長い一致オフセット９２を使用してもよい。可変長の一致オフセット９２はグループ標識９３を含む。グループ標識９３は、示されるように、可変長である場合もあれば、固定長である場合もある。グループ標識９３は、オフセットをコード化するために使用されるビットの数およびそれらのビットがどのように符号化されるかを示す。たとえば、「０」というグループ標識９３（グループＡ）は、次の６ビットが１から６４までのオフセットを表わすことを示すために使用されてもよい。「１０」というグループ標識９３（グループＢ）は、次
の６ビットが６５から１９２までのオフセットを表わすことを示すために使用されてもよい。「１１」というグループ標識９３（グループＣ）は、次の９ビットが１９３から２０４７までのオフセットを表わすことを示すために使用されてもよい。
【００９５】
図１９Ａから図１９Ｃは、この発明の実施例に従う、一致長のテーブルを示す。一致長は一致オフセットと同様の方法で形成されてもよい。一致長は固定長のビットシーケンス９５として符号化されてもよい。固定長の一致長９５は、８ビット、９ビット、示される１０ビット、１１ビット、１２ビットなどのセットされた数のビットを含んでもよい。
【００９６】
代替的には、一致長は、可変長のビットシーケンス９６として符号化されてもよい。可変長の一致長はグループ標識９７を含み、グループ標識９７は後に続くビットの数およびビットがどの一致長を表わすかを示した。グループ標識９７は、示されるように、固定長である場合もあれば、可変長である場合もある。
【００９７】
示されるグループ標識９７は、符号化一致長が属する４つのグループのうちの１つを識別する。値「００」というグループ標識９７は、２から３までの一致長をコード化するために単一のビットが続くことを示す。値「０１」というグループ標識９７は、４から７までの一致長をコード化するために２つのビットが続くことを示す。値「１０」というグループ標識９７は、８から１５までの一致長をコード化するために３つのビットが続くことを示す。値「１１」というグループ標識９７は、１６から２７１までの一致長をコード化するために８つのビットが続くことを示す。
【００９８】
上述の符号化変数およびパラメータは例として提供される。符号化タイプフラグ６０の特定の値、単一文字一致オフセット８０のビット長、固定長または可変長の一致オフセット９１、９２および一致長９５、９６の使用、グループ標識９３、９７の特定の値、ならびにグループ標識９３、９７に続くビットの数は、ソースデータの予想されるストリーム１０の特徴に基づいて選択され得る。
【００９９】
符号化のプロセスはデコーダ１０３を用いて逆にされ得る。デコーダ１０３はシリアルデコーダまたはパラレルデコーダを含んでもよい。
【０１００】
図２０および図２１は、この発明の実施例に従うデコーダ１０３を示す。図２０は、コード化データのストリーム２０Ａを受入れる復号論理８０１と履歴バッファ８０２とを含むシリアルデコーダ８００を示す。履歴バッファ８０２は、直近に復号されたデータ１０Ａを保持する。復号論理８０１は、コード化されたセグメント２０Ａを読取り、コード化されたセグメント２０Ａを復号し、１つ以上の復号されたリテラルデータセグメントを履歴バッファ８０２に書込む。復号論理は、符号化表現（非リテラル）が受取られるときに履歴バッファ８０２を使用する。復号論理８０１は、繰返しデータのコピーを抽出するために履歴バッファに戻る。リテラルが受取られるとき、復号論理８０１はコード化されたセグメント２０Ａからリテラル値を抽出し、このリテラル値を履歴バッファ８０２に書込む。シリアルデコーダ８００は、シリアルエンコーダ２００またはパラレルエンコーダ３００でコード化されたデータ２０Ａとともに使用されてもよい。
【０１０１】
図２１は、複数のシリアルデコーダ８００−１から８００−ｎを含むパラレルデコーダ９００を示す。パラレルデコーダ９００はさらにヘッド制御９０１を含み、ヘッド制御９０１はコード化データのストリーム２０Ａをサブストリームに分け、そのサブストリームをブロックとしてそれぞれのデコーダ８００−１から８００−ｎに与える。つまり、ヘッド制御９０１は、パラレルシリアルエンコーダ２００−１から２００−ｎの組のうちの１つによって元々作られたサブストリームを与える。パラレルデコーダ９００のヘッド制御９０１は、符号化データの各々の入力ブロックのためにどのシリアルデコーダ８００−１
から８００−ｎが使用されるべきであるかを選択してもよい。
【０１０２】
パラレルデコーダ９００は、さらに、連続的に復号されたブロックを連結し、ソースデータの再構築されたストリーム１０Ａを与える末尾制御９０２を含む。パラレルデコーダ９００の末尾制御９０２は、ソースデータの再構築されたストリームを、復号されたデータのブロックから組立て直すことができる。
【０１０３】
図２２は、この発明の実施例に従う、コード化データのセグメントを復号するプロセスを示す。２０００において、復号論理はコード化データのセグメント２０Ａを受取る。２００１において、復号論理はフラグ３０を読取る。２００２において、復号論理は、後続のビットがリテラルデータ４０であるか、または可変長の符号化表現５０であるかを判断する。
【０１０４】
２００３において、フラグ３０がリテラルデータ４０を示す場合、復号論理はデータのリテラル長を、復号されたデータのセグメント１０Ａとして抽出する。２００４において、フラグ３０が符号化表現５０を示す場合、復号論理は符号化タイプフラグ６０を読取る。２００５において、復号論理は、符号化タイプフラグ６０が単一文字一致オフセットを示すか、または長い長さの一致オフセットを示すかを判断する。２００６において、単一文字一致オフセットが続く場合、復号論理は後続のビットから一致オフセットを判断する。２００７において、復号論理は、一致オフセットによって示されるオフセットにおいて履歴バッファからの単一の値を読取る。２００８において、長い長さの一致オフセットが続く場合、復号論理は再び、後続のビットから一致オフセットを判断し、さらに、一致長を判断する。２００９において、復号論理は、一致オフセットによって示されるオフセットにおいて履歴バッファからの、一致長によって示される１つ以上の値を読取る。値が履歴バッファから読取られるので、値は現在の位置で履歴バッファに書き戻され得る。２０１０において、復号論理は１つ以上の復号されたセグメントをソースデータの再構築されたストリーム１０Ａとして書込む。
【０１０５】
この発明は特定の実施例および例示的な図面に関して記載されてきたが、この発明は記載される実施例または図面に限定されないことを当業者は認識するだろう。
【０１０６】
与えられる図面は単に代表的なものであり、一定の比例に応じて描かれているわけではないであろう。その特定の比率は誇張されている場合もあり、最小化されている場合もある。図面は、当業者によって理解され、適切に実施され得るこの発明のさまざまな実現例を示すように意図される。したがって、この発明は特許請求の範囲の精神および範囲内で修正および変更を伴って実施され得ることが理解されるべきである。記載は網羅的であるように意図されるものではなく、または開示される厳密な形態にこの発明を限定するように意図されるものではない。この発明は修正および変更を伴って実施され得ることが理解されるべきであり、この発明は特許請求の範囲およびその等価物によってのみ限定されることが理解されるべきである。
【図面の簡単な説明】
【０１０７】
【図１】この発明の実施例に従うエンコーダ／デコーダシステムを示す図である。
【図２】この発明の実施例に従うシリアルエンコーダを示す図である。
【図３】この発明の実施例に従うパラレルエンコーダを示す図である。
【図４】この発明の実施例に従うストリングマッチ論理を示す図である。
【図５】この発明の実施例に従う、履歴バッファと位置付メモリとの間の関係を示す図である。
【図６Ａ】履歴バッファおよび位置付メモリをデータの新しいセグメントで更新するプロセスを示す図である。
【図６Ｂ】履歴バッファおよび位置付メモリをデータの新しいセグメントで更新するプロセスを示す図である。
【図７】この発明の実施例に従うマッチレジスタ６００の使用を示す図である。
【図８】この発明の実施例に従う、マッチレジスタおよび位置付メモリのハードウェアの実現例を示す図である。
【図９Ａ】この発明の実施例に従う、マッチレジスタおよび位置付メモリのハードウェアの実現例を示す図である。
【図９Ｂ】この発明の実施例に従う、マッチレジスタおよび位置付メモリのハードウェアの実現例を示す図である。
【図１０Ａ】この発明の実施例に従う、リテラルデータのシーケンスおよびコード化データのシーケンスをそれぞれに示す図である。
【図１０Ｂ】この発明の実施例に従う、リテラルデータのシーケンスおよびコード化データのシーケンスをそれぞれに示す図である。
【図１１】この発明の実施例に従う、コード化データの構造を示す図である。
【図１２】この発明の実施例に従う、データのセグメントをコード化するプロセスを示す図である。
【図１３】この発明の実施例に従う、データのセグメントをコード化するプロセスを示す図である。
【図１４Ａ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１４Ｂ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１４Ｃ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１４Ｄ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ａ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ｂ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ｃ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ｄ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ｅ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ｆ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ｇ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１５Ｈ】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１６】この発明の実施例に従う、コード化データのさまざまな構造を示す図である。
【図１７Ａ】この発明の実施例に従う、単一文字までの一致オフセットのテーブルを示す図である。
【図１７Ｂ】この発明の実施例に従う、単一文字までの一致オフセットのテーブルを示す図である。
【図１８Ａ】この発明の実施例に従う、長い長さの一致オフセットのテーブルを示す図である。
【図１８Ｂ】この発明の実施例に従う、長い長さの一致オフセットのテーブルを示す図である。
【図１８Ｃ】この発明の実施例に従う、長い長さの一致オフセットのテーブルを示す図である。
【図１９Ａ】この発明の実施例に従う、一致長のテーブルを示す図である。
【図１９Ｂ】この発明の実施例に従う、一致長のテーブルを示す図である。
【図１９Ｃ】この発明の実施例に従う、一致長のテーブルを示す図である。
【図２０】この発明の実施例に従うデコーダを示す図である。
【図２１】この発明の実施例に従うデコーダを示す図である。
【図２２】この発明の実施例に従う、コード化データのセグメントを復号するプロセスを示す図である。
【符号の説明】
【０１０８】
２０３  一致オフセット
２０４  一致長
【図１】
2007037115.tif 000003
【図２】
2007037115.tif 000004
【図３】
2007037115.tif 000005
【図４】
2007037115.tif 000006
【図５】
2007037115.tif 000007
【図６Ａ】
2007037115.tif 000008
【図６Ｂ】
2007037115.tif 000009
【図７】
2007037115.tif 000010
【図８】
2007037115.tif 000011
【図９Ａ】
2007037115.tif 000012
【図９Ｂ】
2007037115.tif 000013
【図１０Ａ】
2007037115.tif 000014
【図１０Ｂ】
2007037115.tif 000015
【図１１】
2007037115.tif 000016
【図１２】
2007037115.tif 000017
【図１３】
2007037115.tif 000018
【図１４Ａ】
2007037115.tif 000019
【図１４Ｂ】
2007037115.tif 000020
【図１４Ｃ】
2007037115.tif 000021
【図１４Ｄ】
2007037115.tif 000022
【図１５Ａ】
2007037115.tif 000023
【図１５Ｂ】
2007037115.tif 000024
【図１５Ｃ】
2007037115.tif 000025
【図１５Ｄ】
2007037115.tif 000026
【図１５Ｅ】
2007037115.tif 000027
【図１５Ｆ】
2007037115.tif 000028
【図１５Ｇ】
2007037115.tif 000029
【図１５Ｈ】
2007037115.tif 000030
【図１６】
2007037115.tif 000031
【図１７Ａ】
2007037115.tif 000032
【図１７Ｂ】
2007037115.tif 000033
【図１８Ａ】
2007037115.tif 000034
【図１８Ｂ】
2007037115.tif 000035
【図１８Ｃ】
2007037115.tif 000036
【図１９Ａ】
2007037115.tif 000037
【図１９Ｂ】
2007037115.tif 000038
【図１９Ｃ】
2007037115.tif 000039
【図２０】
2007037115.tif 000040
【図２１】
2007037115.tif 000041
【図２２】
2007037115.tif 000042
【外国語明細書】
2007037115000001.pdf