JP2012100275A - 適応データ圧縮のための方法および装置 - Google Patents
適応データ圧縮のための方法および装置 Download PDFInfo
- Publication number
- JP2012100275A JP2012100275A JP2011252669A JP2011252669A JP2012100275A JP 2012100275 A JP2012100275 A JP 2012100275A JP 2011252669 A JP2011252669 A JP 2011252669A JP 2011252669 A JP2011252669 A JP 2011252669A JP 2012100275 A JP2012100275 A JP 2012100275A
- Authority
- JP
- Japan
- Prior art keywords
- symbol
- dictionary
- index
- symbols
- stored
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
Abstract
【課題】適応データ圧縮を実行するための方法および装置を提供する。
【解決手段】未知の記号がエンコーダによりエンコードされるたびに、エンコーダは辞書に記号を加え、これをエンコードされたストリングで普通に伝送する。コードワードの前にある接頭語ビットの状態は、コードワードが、辞書に記憶される普通記号であるか、または記号もしくは記号のストリングのインデックスであるかを示す。デコーダはコードワードが普通に記号を記憶する場合、先にデコードされた記号と現在デコードされた記号の第1の記号との連結により生じる一連の記号を加えることにより、かつ、この記号をその辞書に加えることにより、記号を学習する。コードワードがインデックスを記憶する場合、デコーダは辞書においてそれぞれのインデックスで、辞書に記憶される記号または一連の記号を抽出することにより、コードワードをデコードする。
【選択図】図6
【解決手段】未知の記号がエンコーダによりエンコードされるたびに、エンコーダは辞書に記号を加え、これをエンコードされたストリングで普通に伝送する。コードワードの前にある接頭語ビットの状態は、コードワードが、辞書に記憶される普通記号であるか、または記号もしくは記号のストリングのインデックスであるかを示す。デコーダはコードワードが普通に記号を記憶する場合、先にデコードされた記号と現在デコードされた記号の第1の記号との連結により生じる一連の記号を加えることにより、かつ、この記号をその辞書に加えることにより、記号を学習する。コードワードがインデックスを記憶する場合、デコーダは辞書においてそれぞれのインデックスで、辞書に記憶される記号または一連の記号を抽出することにより、コードワードをデコードする。
【選択図】図6
Description
発明の背景
データ圧縮は、所与の情報を表わすのに必要なデータの量を減らすプロセスを指す。削減プロセスの根本的原則は、冗長または不必要なデータの除去である。データ圧縮技術は、情報記憶および伝送のための費用を削減する。データ圧縮技術は、簡単なファイルサイズの削減から音声および映像のエンコードの範囲にわたる多くの応用例において用いられる。
データ圧縮は、所与の情報を表わすのに必要なデータの量を減らすプロセスを指す。削減プロセスの根本的原則は、冗長または不必要なデータの除去である。データ圧縮技術は、情報記憶および伝送のための費用を削減する。データ圧縮技術は、簡単なファイルサイズの削減から音声および映像のエンコードの範囲にわたる多くの応用例において用いられる。
圧縮には、無損失なものと損失のあるものとの2つの異なる種類がある。無損失の圧縮では、エンコーダ入力でのソースメッセージは、デコーダの出力で正確に検索される。損失のある圧縮では、メッセージは正確には検索されないが、情報損失は、圧縮方式により対象とされるアプリケーションの種類にとっては許容できるものである。損失のある圧縮は、主に、音声、音響、画像および映像信号のために用いられる。圧縮アルゴリズムの目的は、信号了解度および知覚品質を維持しつつ、最低限のビット数で信号を表わすことである。人の感知によって知覚できないすべての情報を除去することができる。
無損失圧縮技術は、実行可能なソースコードファイルの圧縮、衛星画像化および医療用画像化等の、情報損失が許容されない応用例において用いられる。この技術はまた、損失のある圧縮方式の一部として、より高い圧縮率を得るために用いられる。
無損失圧縮を行なうための1つ周知の技術は、LZW(Lempel-Ziv-Welch)(「LZW」)アルゴリズムである。LZWアルゴリズムは、一定の規則に従ったストリング構文解析に基づく汎用アルゴリズムである。これは、よく用いられるシーケンスが、シーケンス全体を1文字ずつ綴るのに必要とされるよりも少ないビット数でエンコードされ得るという概念に基づく。LZWアルゴリズムは、ソースのアルファベットを含むテーブルの初期設定を必要とする。記号幅が選択され、ソースアルファベットが、記号のために作成され、エンコードプロセスの開始前にエンコーダおよびデコーダにおけるコーディングテーブルに記憶されている。LZWアルゴリズムは、受取られた一連の記号をエンコードするとき、選択された一連の記号(語彙)を辞書に加える。辞書に含まれるシーケンスは、記号を含むシーケンス全体を1文字ずつ綴るのに必要とされるより少ないビット数でエンコードされ得る。ソースアルファベットのサイズは記号の幅に依存する。たとえば、1バイト(8ビット)の記号幅は28(256)項目のソースアルファベットを必要とし、2バイト(16ビット)の記号幅は216(64K)項目のソースアルファベットを必要とする。典型的には、LZWアルゴリズムは、1バイト(8ビット)の記号幅で実現される。LZWアルゴリズムは、受取られた一連の記号における最長一致を求めてコーディングテーブルを探索し、辞書に記憶されている最長一致のインデックスを伝送する。
図1には、無損失データ圧縮を実行するための、エンコーダおよびデコーダにおける先行技術のLZWコーディングテーブル100が示される。LZWコーディングテーブル100は、3進連想記憶装置(Contents Addressable Memory)(「CAM」)であり得る。記号の入力シーケンス102は、LZWコーディングテーブル100に記憶されているソースアルファベット106および辞書108を用いて、エンコーダにより、一連のインデックスに変換される。エンコーダ110におけるコーディングテーブル100、およびデコーダ112におけるデコーディングテーブル120は、ソースアルファベット106および辞書108を含む。一連のインデックス114は、エンコーダ110によって伝送され、デコーダ112によってデコードされる。デコーダ112は、出力ストリング104に、記号の入力シーケンス102と同じ記号を与える。エンコーダ110が記号の入力シーケンス102をエンコードし始める前に、ソースアルファベット106は、エンコーダ110およびデコーダ112におけるLZWコーディングテーブル100に記憶されている。エンコーダ110からデコーダ112に伝送される一連のインデックス114は、ソースアルファベット106に記憶されている普通テキスト記号のインデックスか、または辞書108に記憶されている記号のストリングのインデックスである。エンコーダ110およびデコーダ112は、独立して、最初のソースアルファベットに応じて新しい一連の記号を学習することにより、それぞれの辞書に項目を作成する。エンコーダ110は、辞書に新しい一連の記号を加えるが、先に学習された記号のインデックス、または一連の記号を、一連のインデックス114でデコーダ112に伝送する。デコーダはまた、新しい一連の記号を学習し、LZWデコーディングテーブル120における新しいインデックスで新しい一連の記号を辞書108に記憶する。
図2には、図1に示されるエンコーダ110における入力ストリングの先行技術のLZW圧縮が示される。ソースアルファベット106(図1)は、エンコーダ110(図1)が記号の入力シーケンス102を構文解析し始める前に、またはデコーダがデコードし始める前に、LZWコーディングテーブル100(図1)に記憶されている。8ビット記号のためのソースアルファベット106(図1)は、インデックス0〜255で、コーディングテーブル100(図1)およびデコーディングテーブル120(図1)に記憶されている。ソースアルファベット106(図1)における256の位置のうち5つの内容が示される。記号「/」はインデックス47で記憶され、記号「b」はインデックス98で記憶され、記号「d」はインデックス100で記憶され、記号「e」はインデックス101で記憶され、記号「t」はインデックス116で記憶され、記号「w」はインデックス119で記憶されている。LZWコーディングテーブル100のソースアルファベット106におけるインデックス256での追加項目256は、ストリングの終わり(End Of String)(「EOS」)を記憶し、LZWコーディングテーブル100の辞書108におけるインデックス257での項目257は、フラッシュコードを記憶する。
記号の入力シーケンス102は、エンコーダ110(図1)によって受取られる。エンコーダ110(図1)は、記号の入力シーケンス102を構文解析し、一連のインデックス114(図1)を伝送する。記号の入力シーケンス102は、記号の入力シーケンス102を構文解析し、かつ記号に対する最長一致を求めてLZWコーディングテーブル100を探索することにより、エンコーダ110(図1)によってエンコードされ、LZWコーディングテーブル100における項目のために一連のインデックス(コードワード)として伝送される。インデックスは、ソースアルファベット106または辞書108における項目へのポインタであってもよい。
LZWコーディングテーブル100に示されるように、ソースアルファベット106における項目に対する、記号「/」を記憶するインデックスは47である。初めに、コーディングテーブル100はソースアルファベット106だけを記憶する。エンコーダ110(図1)は、一連の記号102を受取ると、一連の記号102を、記号幅に応じて構文解析する。エンコーダ110(図1)は、一連の記号102(図1)において記号を選択し、この記号を求めてLZWコーディングテーブル100を探索する。エンコーダは、既知の記号および一連の記号を連結することにより、語彙を学習する。記号が見つかった場合、この記号は次の記号と連結され、2つの記号により形成される一連の記号を求めてLZWコーディングテーブル100が探索される。一連の記号がLZWコーディングテーブル100に記憶されていない場合、先に識別された記号または一連の記号のインデックスが伝送され、新しい一連の記号がLZWコーディングテーブル100に加えられる。
LZWアルゴリズムを用いるエンコーダの動作が、記号の入力シーケンス102を用いて示される。これはすなわち、図2に示されるように、/wed/we/wee/web/wet/であり、かつ1文字(8ビット)の記号幅である。コーディングテーブル100は、「/」、「w」、「e」、「d」、「b」、および「t」を含む各8ビット記号に対する項目を含む最初のアルファベットを記憶する。
記号の入力シーケンス102の構文解析は、記号「/」から始まる。記号「/」は、インデックス47でLZWコーディングテーブル100に記憶され、「/」は次の記号「w」と連結され、コーディングテーブルが一連の記号「/w」を求めて探索される。「/w」は、そのときにLZWコーディングテーブル100に記憶されていないので、次のシーケンシャルインデックス258で「/w」を記憶することにより学習される。先に識別された記号である「/」に対するインデックス、すなわち47が一連のインデックス104において伝送される。
構文解析が、記号の入力シーケンス102における記号「w」で再開する。LZWコーディングテーブル100が、記号「w」を求めて探索される。記号「w」は、インデックス119でLZWコーディングテーブル100に記憶され、記号「w」は記号の入力シーケンス102における次の記号「e」と連結され、コーディングテーブルは一連の記号「we」を求めて探索される。「we」は、そのときにコーディングテーブル100に記憶されていないので、次のシーケンシャルインデックス259でコーディングテーブルに「we」を記憶することにより学習される。先に識別された記号である「w」に対するインデックス、すなわち119が一連のインデックス104において伝送される。
構文解析が、記号の入力シーケンス102における記号「e」で再開する。記号「e」は、インデックス101でLZWコーディングテーブル100に記憶されている。記号「e」は記号の入力シーケンスにおける次の記号「d」と連結され、LZWコーディングテーブル100は一連の記号「ed」を求めて探索される。「ed」は、LZWコーディングテーブル100に記憶されていないので、インデックス260で、次のシーケンシャル項目における「ed」をコーディングテーブルに記憶することにより学習される。先に識別された記号である「e」に対するインデックス、すなわち101が一連のインデックス104において伝送される。
構文解析が、記号の入力シーケンス102における記号「d」で再開する。記号「d」は、インデックス100でコーディングテーブル100に記憶されている。記号「d」は記号の入力シーケンス102における次の記号「/」と連結され、LZWコーディングテーブル100が、一連の記号「d/」を求めて探索される。「d/」は、LZWコーディングテーブル100に記憶されていないので、インデックス261で、次のシーケンシャル項目における「d/」をコーディングテーブルに記憶することにより学習される。先に識別された記号、「d」に対するインデックス、すなわち100が一連のインデックス104において伝送される。
構文解析が、記号の入力シーケンス102における記号「/」から再開する。記号「/」は、インデックス47でLZWコーディングテーブル100に記憶されている。記号「/」は記号の入力シーケンス102における次の記号「w」と連結され、LZWコーディングテーブル100は一連の記号「/w」を求めて探索される。「/w」は、インデックス258でコーディングテーブル100に記憶され、記号の入力シーケンス102における「e」と連結され、コーディングテーブルが一連の記号「/we」を求めて探索される。「/we」は、コーディングテーブル100に記憶されていないので、インデックス262で、次のシーケンシャル項目における「/we」をLZWコーディングテーブルに記憶することにより学習される。先に識別された一連の記号「/w」に対するインデックス、すなわち258が一連のインデックス104において伝送される。
たとえば、8ビットの記号幅については、文字「/we」の1バイトストリングにつき2
4ビット(3バイト×8ビット)に対する一致を見つけると、9ビットインデックス(辞書に記憶されている記号のストリング「/we」のアドレス)が、エンコーダからデコーダに伝送される。これにより、伝送されるビットの数が24から9に減じられる。9ビットインデックスを受取ると、デコーダは、9ビットインデックスで辞書のそのコピーに記憶されている文字のストリング「/we」を再生成する。対応するシーケンス(接頭語)が辞書に見つからなかった場合、個々の記号、「/」、「w」および「e」に対するインデックスが伝送されるだろう。
4ビット(3バイト×8ビット)に対する一致を見つけると、9ビットインデックス(辞書に記憶されている記号のストリング「/we」のアドレス)が、エンコーダからデコーダに伝送される。これにより、伝送されるビットの数が24から9に減じられる。9ビットインデックスを受取ると、デコーダは、9ビットインデックスで辞書のそのコピーに記憶されている文字のストリング「/we」を再生成する。対応するシーケンス(接頭語)が辞書に見つからなかった場合、個々の記号、「/」、「w」および「e」に対するインデックスが伝送されるだろう。
20個の記号の入力シーケンス102の伝送には、160ビット(1記号につき20記号×8ビット)必要である。LZWアルゴリズムは、伝送されるビットの数を126ビット(14インデックス×9ビット)に減ずる。記号の入力シーケンス102が構文解析されると、コーディングテーブル100における辞書108に記憶されている語彙が増し、コーディングテーブルに記憶されている一連の記号が長くなる。たとえば、インデックス264は一連の4つの記号「/wee」を表わす。
コーディングテーブルに記憶されている一連の記号が長ければ長いほど、より良好な圧縮が得られる。というのも、伝送されるインデックスの数が減るからである。圧縮は、記号幅を増すことによっても改善され得る。しかしながら、LZWアルゴリズムで必要とされる最初のソースアルファベットは、記号幅に加えられる各ビットに対して2だけ増え、したがって、複数のバイトの記号幅に対して、最初のソースアルファベットをエンコードするために非実用的なテーブルサイズを必要としてしまう。
発明の概要
この発明は、辞書におけるソースアルファベットの初期設定を必要としない。代わりに、アルファベットおよび語彙がともに、記号の入力ストリングのエンコード中に、学習され、かつ辞書に記憶される。
この発明は、辞書におけるソースアルファベットの初期設定を必要としない。代わりに、アルファベットおよび語彙がともに、記号の入力ストリングのエンコード中に、学習され、かつ辞書に記憶される。
さらに、先行技術のLZWでは、大きなアルファベットは大きな記号幅インデックスを必要とする。1バイト記号で256通りのアルファベットでは、インデックスが9ビットから始まる必要があり、2バイト記号で16384通りのアルファベットは17ビットの初期インデックスを必要とする。インデックスの幅は、圧縮率に直接影響を及ぼす。この発明においては、アルファベットのサイズは、インデックス幅に直接影響を及ぼさない。さらに、ソースによって用いられる記号だけが、辞書に学習される。このように、この発明は、ソースが乏しい場合に好適である。
辞書が、記号のストリングにおいて受取られた記号または一連の記号を求めて探索される。記号が辞書に記憶されていないことを検出すると、この記号は、辞書に記憶することにより学習され、普通記号がコードワードで伝送される。
記号または一連の記号が辞書に記憶されていることを検出すると、記号または一連の記号が辞書に記憶されているインデックスがコードワードで伝送される。コードワードにおける接頭語フィールドの状態は、コードワードの内容を、学習されるべき普通記号またはインデックスのいずれかとして識別し得る。辞書のインデックスは、学習された記号および一連の記号の数に応じた可変幅であり得る。
記号幅はデータの種類に応じて選択され得る。たとえば、テキストの伝送については、単一バイトは個々の文字を容易に規定することができる。しかしながら、オーディオまたは映像データについては、データのストリームが構文解析されるより長い記号幅によって、より良好に圧縮され得る。すべての記号は、最初に記憶されず、それらが発生したときに辞書に記憶されるだけなので、初めにメモリをオーバーロードするおそれなしに、広い記号幅を用いることができる。
この発明の上述および他の目的、特徴および利点は、同様の参照符号が異なる図を通じて同じ部分を指す添付の図面に示されるように、この発明の好ましい実施例のより詳細な以下の記載から明らかとなるであろう。図面は変倍する必要がなく、代わりに、この発明の原理を例示することにより強調される。
発明の詳細な説明
この発明の好ましい実施例の説明は以下のとおりである。
この発明の好ましい実施例の説明は以下のとおりである。
図3には、この発明の原理に従って無損失圧縮を行なうための、コーディングテーブル300を含むエンコーダ310およびデコーディングテーブル320を含むデコーダ312が示される。最初のソースアルファベットを辞書308に記憶せずに、エンコーダ310がエンコードし始め、デコーダ312がデコードし始める。アルファベットは、エンコーダが記号の入力ストリング302を構文解析する間に学習される。記号は、入力ストリング302が構文解析される単位である。記号は任意の幅、たとえば複数の文字であり得る。エンコーダによって出力される各コードワードは、1ビットだけ接頭語を付されて、デコーダ312がアルファベットを学習することを可能にする。記号がエンコーダ310により学習されると、エンコーダ310は「0」にセットされたビットが前にあるコードワードで、普通に記号を伝送する。記号が既知の場合、エンコーダ310は、「1」にセットされたビットが前にあるインデックスを伝送する。メモリサイズによって制限されるおそれのある初期テーブルがないので、記号の幅に制限はない。アルファベットは動的に学習される。コードワードをデコードするために、デコーダ312は、最初に、データの種類を示すビットを識別する。ビット値が「0」である場合、デコーダ312は記号を直接出力する。ビット値が「1」である場合、辞書を用いてインデックスを変換する。
普通記号がデコーダ312に伝送されるたびに、デコーダ312はその辞書308に記号を加える。したがって、ソースアルファベット全体が記憶されている必要はない。代わりに、デコーダが受取る記号のみが、辞書308に記憶される。
エンコーダ310は、入力ストリング302を取得し、コーディングテーブル300における辞書308に記憶されている記号および一連の記号を用いて入力ストリングを圧縮し、エンコードされたストリング314を伝送する。一実施例では、エンコードされたストリング314は、データパケットでネットワーク全体に伝送され、受信ノードにおいてデコーダでデコードされ得る。代替の実施例では、エンコードされたデータは記憶装置に伝送され得る。
先行技術のLZWアルゴリズムとは違って、記号のためのソースアルファベットは、エンコーダ310が入力ストリング302を構文解析し始める前には、コーディングテーブル300には記憶されていない。代わりに、エンコーダ310は、入力ストリング302を構文解析すると、ソースアルファベットおよび語彙を学習する。エンコーダ310は、デコーダがソースアルファベットを学習できるように、普通に、エンコードされたストリング314上で、新しく学習された記号を送る。
エンコーダ310により受取られた記号のストリング302をエンコードして、冗長または不必要なデータを除去する。エンコーダ310は、選択された記号幅、およびコーディングテーブル300に記憶されている辞書308に応じて、記号のストリングをエンコードする。エンコードされたストリング314はデコーダ312に伝送される。エンコードされたストリング314は一連のコードワードである。各コードワードは、辞書308に記憶されている記号、または記号もしくは記号シーケンスに対するインデックスを含む。
デコーダ312は、エンコードされたストリング314で伝送され、エンコーダ310から受取られるアルファベットおよび語彙を学習し、これらをデコーディングテーブル320における辞書308に記憶する。デコーダ312は、デコーディングテーブル320における辞書308で学習されるソースアルファベットおよび語彙に応じて、受取られたエンコードされたストリング314をデコードして、もともとの記号のストリングを与える。
一実施例では、エンコーダ310におけるコーディングテーブル300およびデコーダ312におけるデコーディングテーブル320は、2進または3進連想記憶装置(「CAM」)で実現される。CAMは探索および学習機能を有する。探索および学習機能により、CAMは、探索キーがCAMにおいて見つからない場合探索キーを学習することができる。探索キーがCAMにおける項目に記憶されている場合、CAMは探索キーに対する一致アドレスを戻す。探索キーがCAMにおける項目に記憶されていない場合、CAMは、CAM項目に新しい探索キーを記憶することにより、新しい探索キーを学習する。
コーディングテーブル300およびデコーディングテーブル320は、2つの項目、すなわち、ストリングの終わり(「EOS」)316およびフラッシュコード318で初期設定される。フラッシュコード318のインデックスが伝送されて、コーディングテーブル300がいっぱいであることを示す。コーディングテーブル300がいっぱいであるとき、EOSおよびフラッシュコードを除く項目がすべてクリアされ、記号のストリングが受取られると記号および語彙が再び学習される。フラッシュコードがデコーダに伝送され、これにより、デコーダ312はそのデコーディングテーブル320を初期設定し得る。コーディングテーブル300の初期設定は、図6に関連して後に記載される。EOS項目のインデックスは、エンコードプロセスの終わりに伝送される。
最初のソースアルファベットが不要であるので、記号の幅は、最初のソースアルファベットを記憶するのに必要とされるメモリによってもはや制限されない。さらに、初期インデックス幅は、ソースのアルファベットサイズによってもはや影響を受けない。エンコードされたストリング314上で記号を伝送するので、エンコードプロセス中に記号の幅を修正することができ、これにより、デコーダ312が新しいアルファベットを学習することが可能となる。圧縮率を上げるために、エンコードプロセス中に圧縮率を監視し、記号幅を適切に修正することができる。たとえば、インターネットを通じてユーザにより要求されるデータの種類が変わると、圧縮されるべきデータの種類は変わり得る。たとえば、要求されるデータの種類は、オーディオファイルから画像ファイルへ、次いでテキストファイルへと変わり得る。伝送されるデータの種類が変わると記号幅を修正する能力を備えることにより、特定の種類の受取られた記号のストリングに対して最適な記号幅を選択し得る。同様に、大きなメモリが記号のために最初のソースアルファベットを記憶する必要なしに、画像における4×4画素ブロック(16バイト)等の大きな記号を圧縮し得る。
最大の記号幅は、コーディングテーブル300およびデコーディングテーブル320の物理的な幅に依存する。たとえば、7バイト(56ビット)の記号は72ビット幅のCAMに記憶され得る。72ビット幅のCAMは56ビット(7バイト)を与えて、別のCAM項目へのインデックスを記憶するために記号および14個のビットを記憶する。144
ビットのCAMはより幅の広い記号を記憶することができる。エンコーダ310からエンコードされたストリング314としてデコーダ312に伝送されるコードワードのフォーマットが、図4A〜図4Bに関して記載される。
ビットのCAMはより幅の広い記号を記憶することができる。エンコーダ310からエンコードされたストリング314としてデコーダ312に伝送されるコードワードのフォーマットが、図4A〜図4Bに関して記載される。
代替的な実施例では、エンコーダ310およびデコーダ312は、メモリに記憶され、かつプロセッサによって実行される命令として実現され得る。
図4Aには、図3に示されるエンコーダ310により学習される普通記号を伝送するために、エンコーダ310により、エンコードされたストリング314上で伝送されるコードワードが示される。エンコーダ310(図3)が、普通記号をコーディングテーブル300(図3)に記憶することにより新しい記号を学習すると、エンコーダ310(図3)は、エンコードされたストリング314(図3)として、普通に、記号をデコーダ312(図3)に伝送する。記号は普通に伝送され、普通記号フィールド406に記憶される。普通記号フィールド406の前には接頭語ビット404がある。接頭語ビット404は「0」にセットされて、普通記号が後に続くことを示す。たとえば、記号幅が2バイトであり、学習されるべき記号が「/w」である場合、「/w」は普通記号フィールド406に記憶され、「0」は接頭語ビット404に記憶される。
図4Bには、既知であり、かつ図3に示されるコーディングテーブル300に記憶されている記号または一連の記号のための、エンコードされたストリング314(図3)の上で伝送されるコードワードが示される。コードワードには、接頭語ビット404が前にあるテーブルインデックスフィールド408が含まれる。テーブルインデックスは、「1」にセットされた接頭語ビット404が前にあるテーブルインデックスフィールド408に記憶される。テーブルインデックスフィールド408は、コーディングテーブル300およびデコーディングテーブル320に記号または一連の記号を記憶する項目のインデックスを記憶する。
テーブルインデックスフィールド408の幅は、コーディングテーブル300およびデコーディングテーブル320に記憶されている項目の数に応じて可変である。たとえば、コーディングテーブル300およびデコーディングテーブル320に記憶されている4未満の項目がある場合、テーブルインデックスフィールド408は2ビット幅である。コーディングテーブル300およびデコーディングテーブル320に記憶されている128から255の項目がある場合、テーブルインデックスフィールド408は8ビット幅である。
図5には、入力ストリング502をエンコードされたストリング314(図3)にエンコードするための、制御ロジック500と、図3に示されるエンコーダ310におけるコーディングテーブル300とが示される。制御ロジック500は入力ストリング502を構文解析して、エンコードされたストリング314(図3)を与える。制御ロジックにより伝送されるエンコードされたストリング314(図3)は、コードワードを含む。このコードワードは、「0」にセットされた接頭語ビット404(図4A)が前にある普通記号フィールド406(図4A)に記憶されている普通記号、または「1」にセットされた接頭語ビット404(図4B)が前にあるテーブルインデックスフィールド408(図4B)に記憶されているテーブルインデックスを含む。
入力ストリング502は複数の記号を含む。記号の幅は可変であり、単一の文字もしくはバイト(8ビット)または複数のバイトであり得る。記号の幅は、入力ストリング502におけるデータの種類に応じて動的に修正され得る。たとえば、テキストファイルが処理されている場合、記号幅は文字幅(8ビット)となるよう選択され得る。画像ファイルが処理されている場合、記号幅は16バイトであり得る。制御ロジック500は、選択された記号幅に応じて入力ストリング502を構文解析する。
記号幅は動的に変更され得る。エンコーダ310(図3)をセットして、圧縮率(ビットの入力数/ビットの出力数)を監視することができ、この圧縮率が低かったり突然下がったりする場合、制御ロジック500(図5)で実現される圧縮アルゴリズムは、自動的に、異なる記号幅を試み、最良の圧縮率をもたらす幅を選択し得る。いくつかのしきい値をセットする必要がある。たとえば、どの圧縮率で幅を変更するか、どの幅を最初に試みるかである。記号幅変更、およびエンコーダ310(図3)とデコーダ312(図3)との間で一致した取決めに対してコードを予約するので、デコーダ312(図3)は新しい記号幅を認識するだろう。
さらに、エンコーダ310(図3)は、記号幅を変更するたびに、新しい記号幅が後に続く(辞書におけるストリングによって用いられない)特別な予約コードを送る。
記号幅変更を実現するための1つの方法は、コーディングテーブル300(図5)全体をフラッシュし、新しい幅の記号の学習を再開することである。この方法では、新しい記号幅が直ちに高い圧縮率をもたらす場合、効率的である得るが、新しい幅が入力ストリング502(図5)におけるデータの種類に適さない場合、不利な状態に置かれるおそれがある。
用いることのできる別の方法は、辞書308(図3)の一部をフラッシュすることである。たとえば、新しい記号幅の倍数ではないすべてのストリングが除去される。これは中間解である。というのも、新しい記号幅が、辞書308(図3)におけるいくつかの学習されたストリングから始まるからである。
制御ロジック500には、ストリングレジスタ512、入力ストリングポインタ514、インデックス精度レジスタ516、現在のストリングの長さレジスタ518、項目の数レジスタ520、および、最後に加えられた長さレジスタ522が含まれる。制御ロジック500は、ストリングレジスタ512および入力ストリングポインタ514を用いて、入力ストリング502およびインデックス精度レジスタ516を構文解析し、エンコードされたストリング314(図3)上で伝送されるコードワードにおけるテーブルインデックスフィールド408(図4B)で伝送するビットの数を常に把握するようにする。ストリングレジスタ512(図5)は探索キーを記憶するために用いられ、入力ストリングポインタ514(図5)は、制御ロジック500(図5)により現在処理されている入力ストリング502(図5)における記号に対するポインタを記憶するために用いられる。
項目の数レジスタ520は、記号または一連の記号が辞書308(図3)に加えられるたびに増分される。項目の数レジスタ520の内容をエンコーダ310(図3)により監視して、辞書308(図3)がいっぱいであるかどうかを判断する。辞書308がいっぱいであると判断すると、エンコーダ310(図3)はその辞書308(図3)をフラッシュし、フラッシュコードをデコーダ312(図3)に送り、このため、デコーダ312(図3)もまた、その辞書308(図3)をフラッシュすることができる。
最後に加えられた長さレジスタ522の内容を用いて、辞書308に最後に加えられたストリングの長さを常に把握する。レジスタが「1」にセットされる場合、記号は辞書308に最後に加えられた。現在のストリングの長さレジスタ518の内容は、入力ストリング502から抽出される、探索キーとして現在用いられている記号の数である。
コーディングテーブル300における辞書308は、2つの項目、すなわち、インデックス「0」ではEOSおよびインデックス「1」ではフラッシュコード、ならびにインデックス「3」では記号幅変更で初期設定されて、動的な幅の変更が必要とされる場合これ
を可能とする。EOSおよびフラッシュコードは、図3に関連して既に記載されている。制御ロジック500は、入力ストリング502における第1の記号を選択し、命令バス506上で「探索および学習」命令とともに、記号を探索キー504としてコーディングテーブル300に送る。コーディングテーブル300は、コーディング300における辞書308の項目に記憶されている探索キー504を求めて探索する。
を可能とする。EOSおよびフラッシュコードは、図3に関連して既に記載されている。制御ロジック500は、入力ストリング502における第1の記号を選択し、命令バス506上で「探索および学習」命令とともに、記号を探索キー504としてコーディングテーブル300に送る。コーディングテーブル300は、コーディング300における辞書308の項目に記憶されている探索キー504を求めて探索する。
第1の記号が辞書308に記憶されていない場合、コーディングテーブル300は、それが、辞書308に探索キー504を記憶することにより探索キー504を学習していることを、学習508を介して示す。制御ロジック500は学習508を監視し、コーディングテーブル300が探索キー504を学習していることを検出すると、制御ロジック500は、普通記号フィールド406(図4A)における普通記号としてコードワードで記号を送る。普通記号フィールド406の前には、図4Aに関連して先に記載されたように、「0」にセットされた接頭語ビット404(図4A)がある。デコーダ312(図3)は、「0」にセットされた接頭語ビット404(図4A)を検出し、デコーディングテーブル320(図3)に対する次のシーケンシャルインデックスにおいて、普通記号フィールド406に記憶されている普通記号を辞書308(図3)に記憶することにより、記号を学習する。コーディングテーブル300が探索キー504に対する一致を見つける場合、一致インデックス510は制御ロジック500に送られる。探索キー504に対して一致を見つける場合、エンコーダ310は、辞書308に記憶されたより長く一致する一連の記号を求めて、辞書308を探索する。制御ロジック500は、入力ストリング502における現在の記号と次の記号とを連結して、次の探索キー504を与える。探索キーは、見つからない場合、コーディングテーブル300に一連の記号(現在の記号、次の記号)を記憶することにより学習される。
これにより、一連の記号の学習が可能となる。これは、アルファベットの文字を組合せることによって言語の語彙を学習することに似ている。最長接頭語一致に対する一致インデックス510は、エンコードされたストリング314(図3)上で送られ、テーブルインデックスフィールド408(図4B)に記憶される。テーブルインデックスフィールド408の前には、「1」にセットされた接頭語ビット404(図4B)がある。一連の記号を学習するための方法が、図9に関連して後に記載される。
制御ロジック500(図5)は、選択された記号の幅に応じて入力ストリング502を構文解析する。最初に、コーディングテーブル300(図5)は3つの項目、すなわち、EOS、フラッシュコードおよび随意には記号幅変更コードを記憶する。制御ロジック500(図5)は入力ストリングにおける次の記号を選択し、記号を求めてコーディングテーブル300(図5)を探索する。記号が見つかった場合、制御ロジック500(図5)は、この記号を入力ストリング502(図5)における次の記号と連結する。制御ロジック500(図5)は、コーディングテーブル300に現在記憶されていない一連の記号を見つけるまで、入力ストリングにおける記号を連結し続ける。制御ロジック500(図5)は、「1」にセットされた接頭語ビットが前に付された一連の記号と一致する最長接頭語のインデックスを送る。
記号がコーディングテーブル300(図5)に記憶されていない場合、制御ロジック500(図5)は「0」が頭に付された記号のために普通記号を送り、このため、デコーダ312(図5)はこの記号を学習することができる。
記号および一連の記号がコーディングテーブル300(図5)に記憶されると、制御ロジック500(図5)は項目の数を監視する。項目の数が2の累乗の境界を超えるたびに、制御ロジック500(図5)はインデックス幅を増分する。制御ロジック500(図5)はまた、コーディングテーブル300(図5)において用いられる項目の数を監視して、コーディングテーブル300(図5)がいっぱいであるかどうかを判断する。コーディングテーブル300(図5)がいっぱいであることを検出すると、制御ロジック500(図5)は、記号および一連の記号を記憶する項目のすべてをクリアすることにより、コーディングテーブル300(図5)を初期設定し、デコーダ312(図3)にフラッシュコードを伝送し、このため、デコーダ312(図3)はそのデコーディングテーブル320(図3)を初期設定することができる。
代わりに、制御ロジック500(図5)は、圧縮率を監視し、圧縮が効率的である場合、コーディングテーブル300(図5)を初期設定しないよう決定することができる。圧縮率を監視するための方法は、全体が引用によりこの明細書中に援用される、クエイサ(K. Quaissa)、アブダト(M. Abdat)およびプルメ(P. Plume)による、「LZWデータ圧縮における辞書サイズの適応制限」(“Adaptive Limitation of the Dictionary Size in LZW Data Compression”)(情報理論とその応用シンポジウム(IEEE International Symposium on Information Theory(ISIT'95))、1995年9月、カナダ、ウィスラー)に記載される。
図6は、図5に示される制御ロジック500において実現される、入力ストリング502をエンコードするための方法を示すフロー図である。図6は図5に関連して記載される。
ステップ600では、コーディングテーブル300(図5)および制御ロジック500(図5)の初期設定が行なわれる。辞書は、インデックス「0」で第1の項目におけるEOSコード「0」、インデックス「1」で第2の項目におけるフラッシュコード「1」、および、随意には、インデックス「2」で幅変更コードを記憶することにより初期設定される。説明を簡単にするために、図6に関連して記載される実施例は、幅変更コードを実現しない。この実施例は固定された記号幅を有する。インデックス精度レジスタ516(図5)は「1」にセットされ、現在のストリングの長さ518(図5)は「1」にセットされ、辞書に記憶されている項目の数520(図5)は、記号幅変更コードなしに2にセットされ、最後に加えられた長さ522(図5)は「1」にセットされ、入力ストリングポインタ514(図5)は、入力ストリング502(図5)における第1の記号を指し示す「0」にセットされ、ストリングレジスタ512は空ストリング(NULL)にセットされる。処理はステップ601に続く。
ステップ601では、制御ロジック500(図5)は、入力ストリング502(図5)における次の記号を選択し、この記号を、ストリングレジスタ512(図5)に記憶されている記号と連結するか、またはこの記号を空ストリングレジスタ512(図5)に加える。処理はステップ602に続く。
ステップ602では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)としてコーディングテーブル300に送ることにより、ストリングレジスタ512(図5)の内容に対する項目一致を求めて辞書を探索する。制御ロジック500(図5)はまた、命令バス506(図5)上で「探索および学習」命令を送る。処理はステップ604に続く。
ステップ604では、制御ロジック500(図5)は、学習508(図5)の状態を監視して、探索キー504(図5)が学習されているかどうかを判断する。というのも、探索キー504がコーディングテーブル300(図5)に記憶されていないからである。学習508(図5)の状態が、探索キー504(図5)が学習されていることを示す場合、処理はステップ606に続く。探索キー504(図5)が見つかった場合、処理はステップ620に続く。
ステップ606では、探索キー504(図5)はコーディングテーブル300に見つけられない。探索キー504(図5)は、次のシーケンシャルインデックスでコーディングテーブル300(図5)に記憶されている。処理はステップ608に続く。
ステップ608では、制御ロジック500(図5)が、現在のストリングの長さ518(図5)に記憶されている値から、ストリングレジスタ512(図5)に記憶されている記号の数をチェックする。現在のストリングの長さ518(図5)が「1」にセットされる場合、処理がステップ610に続いて、普通に記号を伝送する。現在のストリングの長さ518(図5)の内容が1より大きく、2以上の記号がストリングレジスタ512(図5)に記憶されていることを示している場合、処理はステップ612に続く。
ステップ610では、制御ロジック500(図5)が、ストリングレジスタ512(図5)に記憶されている普通記号を伝送する。このストリングレジスタ512の前には、図4Aに関連して記載されるように「0」にセットされた接頭語ビット404(図4A)がある。処理はステップ616に続く。
ステップ612では、制御ロジック500(図5)が、最後に加えられた長さ522(図5)をチェックして、辞書308に対する、最後に加えられたストリングの長さを判断する。記憶されている最後のストリングの長さが「1」、すなわち1つの記号である場合、処理はステップ616に続く。そうでない場合、処理はステップ614に続く。
ステップ614では、制御ロジック500(図5)が、コードワードのテーブルインデックスフィールド408における先に一致したストリングのインデックスを伝送する。コードワードのテーブルインデックスフィールド408の前には、図4Bに関連して記載されるように「1」にセットされた接頭語ビット404(図4B)がある。ストリングは既知である。したがって、先に識別された記号のストリングのインデックスが伝送される。処理はステップ616に続く。
ステップ616では、制御ロジック500(図5)が、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットする。現在のストリングの長さ518(図5)は「1」にセットされる。処理はステップ617に続く。
ステップ617では、制御ロジック500(図5)はストリングレジスタを空にセットする。処理はステップ618に続く。
ステップ618では、制御ロジック500(図5)が、コーディングテーブル300(図5)における辞書308(図5)がいっぱいであるかどうかをチェックする。制御ロジック500(図5)はまた、インデックス精度レジスタ516が増分されるべきかどうかをチェックする。ステップ618は図7に関連して後に記載される。
ステップ620では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号を指す。処理はステップ621に続く。
ステップ621では、制御ロジック500(図5)が、現在のストリングの長さ518に記憶されている記号の数を増分する。処理はステップ622に続く。
ステップ622では、制御ロジック500が、エンコードすべきさらなる記号があるかどうかを、入力ストリング502(図5)から判断する。ストリングポインタがEOSを指していない場合、デコードすべきさらなる記号が存在する。有効な記号がある場合、処理はステップ601に続く。ポインタがEOSを指す場合、処理はステップ624に続く。
ステップ624では、制御ロジック500(図5)が入力ストリング502(図5)のエンコードを完了した。ストリングが辞書308(図3)に存在する場合、制御ロジックは、エンコードされたストリング314(図5)上で、「1」にセットされた接頭語ビット404(図4B)が前にあるストリングのインデックスを伝送する。処理が完了する。制御ロジック500(図5)は、ストリングがストリングの終り(EOS)を記憶する場合、EOSのための、「1」にセットされた接頭語ビット404(図4B)が前にあるコード「1」を、エンコードされたストリング314(図5)上で伝送する。
圧縮すべき入力ストリング502(図5)が記号幅の倍数でない場合、特殊コードが、エンコーダ310(図3)によりデコーダ312(図3)に伝送され、その後に、記号に残ったビットの数、次いで普通記号が続く。たとえば、入力ストリング502(図5)が「123456789」であり、記号幅が2文字分である場合、構文解析境界は、12.34.56.78.9.である。こうして、最後の文字>9=は、部分的な記号となる。したがって、「9」は、1.特殊コード.9(8ビット上).8(構文解析すべきビットの数)として伝送される。
図7は、インデックス精度レジスタ516(図5)に記憶されている現在のインデックス幅が増分されるべきかどうかを判断するために図6におけるステップ618で実行されるステップと、辞書308(図5)がいっぱいである場合コーディングテーブル300(図5)を再初期設定するためのステップとを示すフロー図である。
辞書300(図5)がいっぱいである場合、フラッシュコードがデコーダ312(図3)に伝送されて、フラッシュ動作を実行すべきであることを示す。フラッシュ動作は、コーディングテーブル300(図5)におけるすべての項目をクリアし、インデックス「0」でEOS、およびインデックス「1」でフラッシュコードを記憶し、かつインデックス幅を「1」に初期設定することにより、コーディングテーブル300(図5)を再初期設定する。インデックス幅は、コーディングテーブル300(図5)に記憶されている項目の数が2の累乗の境界を超えるたびに、1ビットだけ増分される。
ステップ700では、制御ロジック500(図5)が、辞書308(図5)がいっぱいであるかどうかを、項目の数520(図5)の内容から判断する。辞書308(図5)がいっぱいである場合、処理はステップ706に続く。そうでない場合、処理はステップ702に続く。
ステップ702では、制御ロジック500(図5)が、コーディングテーブル300(図5)における項目の数520(図5)の内容を判断し、かつ、コーディングテーブル300(図5)における項目の数が2の累乗の境界に達したかどうかを判断する。インデックスの幅は、1ビットで始まり、コーディングテーブル300(図5)における最後に記憶された項目のインデックスが2の累乗の境界に達するたびに、1だけ増分される。たとえば、インデックス精度レジスタ516(図5)は、辞書が23未満の項目、すなわち8未満の項目を記憶する一方で、3ビット幅のインデックスのために3を記憶し、8項目が記憶されているとき4に増分される。コーディングテーブル300が2の累乗の境界に達した場合、処理はステップ704に続く。そうでない場合、処理はステップ622(図6)に続く。
ステップ704では、コーディングテーブル300(図5)が2の累乗の境界に達し、インデックス精度レジスタ516(図5)が増分される。インデックス精度レジスタ516(図5)は、ビットがいくつテーブルインデックスフィールド408(図4B)で伝送されるかを示す。処理はステップ622(図6)に続く。
ステップ706では、辞書308(図5)はいっぱいである。制御ロジック500(図5)は、辞書308(図5)の第2の項目に記憶されているフラッシュコードを伝送する。フラッシュコードが、エンコードされたストリング314(図3)上で伝送され、このため、デコーダ312(図3)は、コーディングテーブル300(図5)がフラッシュされていることを知り、その辞書308をまたフラッシュすることができる。処理はステップ708に続く。
ステップ708では、コーディングテーブル300(図5)におけるテーブル項目のすべてがフラッシュされる。処理はステップ710に続く。
ステップ710では、コーディングテーブル300(図5)が初期設定される。記号幅変更が選択されない場合、辞書308(図5)は、インデックス「0」で第1の項目における「0」およびインデックス「1」で第2の項目における「1」を記憶することにより、初期設定される。インデックス精度レジスタ516(図5)を1にセットし、ストリングレジスタ512(図5)に記憶されている記号の数を「1」にセットし、辞書308(図5)に記憶されている項目の数520(図5)を2にセットし、最後に加えられた長さ522(図5)を「1」にセットし、入力ストリングポインタ514(図5)を現在の記号における位置のインデックスにセットする。処理はステップ622(図6)に続く。
図8A〜図8Bは、受取られたエンコードされたストリング314(図3)をデコードするための、図3に示されるデコーダ312において実現される方法を示すフロー図である。受取られたコードワードをデコードするために、デコーダ312(図3)は複数のレジスタを含む。これらレジスタは、最後にデコードされたストリングのインデックスを記憶するためのold_indexレジスタと、インデックスを記憶するためのnew_indexレジスタと、現在のデコーダされたストリングを(普通に)記憶するためのデコードされたストリングレジスタと、現在のデコードされたストリングの第1の記号に等しい記号とを含む。
デコーダ312(図3)は、受取られる第1のビットを参照して、記号またはインデックスが受取られているかを判断する。デコーダ312(図3)は、デコーディングテーブル320(図3)に記憶されている一連の学習された記号とインデックスを置換えることにより、受取られたインデックスをデコードする。デコーダ312(図3)は、次のシーケンシャルインデックスで普通記号をデコーディングテーブル320(図3)に記憶することにより、受取られた普通記号を学習する。
ステップ800では、デコーダ312(図3)が、エンコードされたストリング314(図3)から第1のビットを抽出する。初めに、デコーダにおける辞書308(図3)は、記号幅変更が選択されない場合、2つの項目を記憶する。デコーダ312(図3)は記号を学習し、エンコードされたストリング314(図3)において受取られた記号から辞書308(図3)に登録する。第1のエンコードされたストリング314(図3)における、デコーダ312(図3)により受取られる第1のビットは、第1のコードワードが、デコーダ312(図3)によって学習されるべき普通記号を記憶する普通記号フィールド406(図4A)を含むことを示す。処理はステップ802に続く。
ステップ802では、受取られる第1のビットが「0」にセットされ、接頭語ビット404が、普通記号フィールド406に記憶され、デコーダによって学習されるべき記号の前にあることを示す。デコーダ312(図3)は、エンコードされたストリング314(図3)から普通記号を抽出する。抽出されるビットの数は、選択された記号の幅に依存する。たとえば、選択された記号幅が16ビットである場合、デコーダ312(図3)は、エンコードされた入力ストリング314(図3)における次の16ビットを得る。処理はステップ804に続く。
ステップ804では、普通記号が、辞書308(図3)における次のシーケンシャルインデックスで、デコーディングテーブル320(図3)における辞書308(図3)に加えられる。処理はステップ806に続く。
ステップ806では、old_indexレジスタが、辞書308(図3)における加えられた記号のインデックスにセットされる。処理はステップ808に続く。
ステップ808では、エンコードされたストリング314(図3)に受取られる記号が、デコードされた出力ストリング304(図3)として、デコーダにより出力される。処理はステップ810に続く。
ステップ810では、デコーダ312(図3)は、エンコードされたストリング314(図3)から次のビットを得て、コードワードが普通記号またはインデックスを含むかどうか判断する。処理はステップ812に続く。
ステップ812では、デコーダ312(図3)が、エンコードされたストリング314(図3)に受取られる次のビットを調べて、テーブルインデックス408(図4B)に対して「1」、または普通記号406(図4A)に対して「0」にセットされるかどうかを判断する。次のビットが「0」にセットされる場合、処理がステップ813に続き、普通記号406(図4A)を処理する。次のビットが「1」にセットされる場合、処理がステップ830に続いて、テーブルインデックス408(図4B)を処理する。
ステップ813では、デコーダ312(図3)が、エンコードされたストリング314(図3)から次のビットを得る。次のビットの数は記号の幅に依存する。デコーダ312(図3)は、これらビットをデコードされたストリングレジスタに記憶する。処理はステップ814に続く。
ステップ814では、デコーダ312(図3)が、デコードされたストリングの第1の記号(記号自体)を記号レジスタに記憶する。処理はステップ815に続く。
ステップ815では、デコーダ312(図3)が、old_indexでのストリングの連結により得られるストリングと、次のシーケンシャルインデックスにおけるデコードされた記号とを辞書308(図3)に記憶する。ストリングまたは記号が辞書308(図3)に加えられるたびに、デコーダ312(図3)は、辞書308(図3)における項目の数が2の累乗に達していないことをチェックする。辞書308(図3)における項目の数が2の累乗に達した場合、デコーダ312(図3)は、図7に関連してエンコーダのために既に記載されているように、インデックス精度を増分する。エンコーダ310(図3)とは違って、デコーダ312(図3)は辞書308(図3)がいっぱいであるかどうかをチェックする必要はない。というのも、いっぱいな状態は、エンコーダ310(図3)によって送られるフラッシュコードにより示されるからである。処理はステップ816に続く。
ステップ816では、デコーダ312(図3)が、次のシーケンシャルインデックスにおけるデコードされた記号を辞書308(図3)に記憶する。処理はステップ818に続く。
ステップ818では、デコードされた記号または記号のストリングのインデックスが、old_indexレジスタに記憶される。処理はステップ820に続く。
ステップ820では、ストリングレジスタに記憶されているデコードされたストリングが、デコーダ312(図3)によって出力される。処理はステップ822に続く。
ステップ822では、デコーダ312(図3)は、エンコードされたストリング314(図3)にデコードされるべきさらなるビットがあるかどうかを判断する。そうである場合、処理はステップ810に続く。そうでない場合、処理が完了する。
ステップ830では、new_indexレジスタが、テーブルインデックスフィールド408(図4B)における次のインデックスの内容にセットされる。新しいインデックスレジスタに記憶されているビットの数は、エンコーダによって選択されるインデックス精度に依存する。処理はステップ832に続く。ステップ832では、デコーダ312(図3)が新しいインデックスレジスタの内容を調べる。デコーダ312(図3)は、受取られたインデックスがEOSであるか、またはフラッシュコードであるかをチェックする。受取られたインデックスがフラッシュコードである場合、テーブルは、エンコーダ310(図3)のために図7に関連して先に記載されているように初期設定される。受取られたインデックスがEOSである場合、処理は完了する。受取られたインデックスがEOSまたはフラッシュコードでない場合、デコーダは、新しいインデックスが有効であるかどうか判断する。新しいインデックスが有効である場合、処理はステップ834に続く。そうでない場合、処理はステップ836に続く。
ステップ834では、デコーダ312(図3)は、デコードされたストリングレジスタにおける新しいインデックスの辞書からの変換を記憶する。処理はステップ840に続く。
ステップ836では、新しいインデックスは有効ではない。デコーダ312(図3)は、古いインデックスの変換を、デコードされたストリングレジスタに記憶する。処理はステップ838に続く。
ステップ838では、デコーダ312(図3)が、デコードされたストリングと記号との連結と等しくなるように、デコードされたストリングをセットする。処理はステップ840に続く。
ステップ840では、デコーダ312(図3)が、記号レジスタの内容を、デコードされたストリングの第1の記号にセットする。処理はステップ842に続く。
ステップ842では、old_indexで辞書308(図5)に記憶されている記号のストリングが記号と連結され、結果として生じるストリングが、次のシーケンシャルインデックスで辞書に記憶される。処理はステップ818に続く。
図9には、入力ストリング、入力ストリング502の処理後のエンコーダにおける辞書308の内容、およびエンコードされたストリングが示される。図9は、図5および図6に関連して記載される。
ステップ600(図6)では、辞書308が、インデックス0でEOSを、かつインデックス1でフラッシュコードを記憶することにより初期設定される。図示される実施例では、記号幅は2文字(16ビット)に固定される。しかしながら、記号幅は16ビットに制限されず、既に記載されたように動的に修正可能である。入力ストリング502は、複数の記号9041〜90410を含む。入力ストリング502における最初の16ビット幅の記号9041は「/w」であり、入力ストリングにおける最後の16ビット幅の記号90410は「t/」である。
ステップ601(図6)では、制御ロジック500(図5)が入力ストリング502を構文解析し、入力ストリング502から第1の記号9041「/w」を抽出する。入力スト
リング502から抽出されるべき記号は、ストリングポインタレジスタ514(図5)の内容に依存する。初めには、ストリングポインタレジスタ514(図5)の内容は、入力ストリング502における第1の記号9041を指し、ストリングレジスタ512(図5
)は空である。制御ロジック500(図5)は、空であるストリングレジスタ512(図5)の内容と記号9041を連結する。
リング502から抽出されるべき記号は、ストリングポインタレジスタ514(図5)の内容に依存する。初めには、ストリングポインタレジスタ514(図5)の内容は、入力ストリング502における第1の記号9041を指し、ストリングレジスタ512(図5
)は空である。制御ロジック500(図5)は、空であるストリングレジスタ512(図5)の内容と記号9041を連結する。
ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)としてコーディングテーブル300(図5)に送る。コーディングテーブル300(図5)は、記号9041を求めて辞書308を探索する。ステップ604(図6)では、記号9041は辞書308(図5)に見つけられない。ステップ606(図6)では、コーディングテーブル300(図5)は、次のシーケンシャルインデックス、すなわちインデックス2で、記号9041を辞書308に記憶することにより、記号9041を学習し、記号9041が学習508を通じて学習されることを示す。ステップ608(図6)では、ストリングレジスタ502(図5)に記憶されている記号の数は「1」であり、こうして、処理はステップ610(図6)に続く。ステップ610(図6)では、制御ロジック500(図5)が、エンコードされたストリング314(図3)上でコードワード9061を送り、このため、デコーダ312(図3)は記号9041を学習することができる。コードワード9061は、図4Aに関連して記載されるように「0」にセットされた接頭語ビット404(図4A)が前にある普通記号9041を含む。
普通記号9041が送られた後、制御ロジック500(図5)は、ステップ616(図6)、617(図6)および618(図6)においてさまざまなレジスタを修正する。ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)を「1」にセットする。ステップ617(図6)では、制御ロジック500(図5)がストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)が、入力ストリング502において(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続いて、入力ストリング502を構文解析し続ける。
ステップ601(図6)では、入力ストリングポインタレジスタ514(図5)の内容は、依然として、入力ストリング502(図5)における第1の記号9041を指す。制御ロジック500(図5)は再び第1の記号9041を抽出し、これを、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)としてコーディングテーブル300(図5)に送る。コーディングテーブル300(図5)は、記号9041を求めて辞書308を探索する。ステップ604(図6)では、記号9041が辞書308(図5)に見つけられる。というのも、記号9041が、ステップ601〜622(図6)を経る先の繰返しにおいて、辞書308(図5)に記憶されたからである。
記号9041を見つけると、ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9042を指す。ステップ621(図6)では、制御ロジック500(図5)が、ストリングレジスタ512(図5)に記憶されている記号の数を増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタが入力ストリング502における第2の記号9042を指し、ストリングレジスタ512(図5)が第1の記号9041「/w」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)が、記号9041を入力ストリング502における次の記号9042と連結する。ステップ602(図6)では、制御ロジック500(図5)が、連結されたストリング「/wed」を探索キー504としてコーディングテーブル300に送る。ステップ604(図6)では、一連の記号「/wed」はコーディングテーブル300には見つけられない。ステップ606(図6)では、一連の記号「/wed」が、次のシーケンシャルインデックス、すなわちインデックス3で、辞書308に「/wed」を記憶することにより学習される。一連の記号「/wed」は普通には記憶されていない。代わりに、一連の記号「/wed」は、その接頭語を指すインデックスとともに記憶されている。一連の記号「/wed」に対する接頭語は、インデックス2で記憶されている「/w」である。一連の記号「/wed」は、テーブルインデックス2として記憶されている「/w」および普通に記憶されている「ed」を含む(2,ed)として、インデックス3で記憶されている。ステップ608(図6)では、ストリングレジスタ512(図5)における記号の数は2である。こうして、ステップ612(図6)では、制御ロジック500(図5)が、最後に加えられたストリングにおける記号の最後の数が1であることを判断し、ステップ616(図6)では、制御ロジック500(図5)が、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)を「1」にセットする。ステップ617(図6)では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ストリングポインタレジスタ514(図5)の内容は記号9042を指す。ストリングレジスタ512(図5)は空である。ステップ601(図6)では、制御ロジックは、入力ストリング502(図5)における次の記号9042「ed」を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち、入力ストリング502における次の記号9042「ed」を、探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号9042を求めて辞書308を探索する。ステップ604(図6)では、記号9042は見つけられない。ステップ606(図6)では、コーディングテーブル300(図5)は、インデックス4で記号9042を辞書308に記憶することにより記号9042を学習し、記号9042が学習508を通じて学習されていることを示す。ステップ608(図6)では、記憶されている記号の数は「1」であり、こうして、処理はステップ610(図6)に続く。ステップ610(図6)では、制御ロジック500(図5)は、エンコードされたストリング314(図3)上でコードワード9062を送り、このため、デコーダは記号を学習することができる。コードワード9062は、図4Aに関連して記載されるように「0」にセットされた接頭語ビット404(図4A)が前にある普通記号9042を含む。
普通記号9042が送られた後、制御ロジック500(図5)はさまざまなレジスタを修正する。ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)は「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)が、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ステップ601(図6)では、入力ストリングポインタレジスタ514(図5)の内容は、依然として、入力ストリング502(図5)における記号9042を指す。制御ロジック500は、記号9042を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)として、コーディングテーブル300(図5)に送る。コーディングテーブル300(図5)は、記号9042を求めて辞書308を探索する。ステップ604(図6)では、記号9042が辞書308(図5)に見つけられる。というのも、記号9042が、ステップ601〜622(図6)を経る先の繰返しにおいて辞書308(図5)に記憶されたからである。
ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9043を指す。ステップ621(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)に記憶されている記号の数を増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタは入力ストリングにおける次の記号9043「/w」を指し、ストリングレジスタは記号9042「ed」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)が、ストリングレジスタ512(図5)に記憶されている記号9042を、入力ストリング502における次の記号9043と連結する。ステップ602(図6)では、制御ロジック500(図5)は、一連の記号「ed/w」を探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号「ed/w」を求めて辞書308を探索する。
ステップ604(図6)では、一連の記号「ed/w」は見つけられない。ステップ606(図6)では、一連の記号「ed/w」が、インデックス5で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号「ed/w」はその接頭語を指すインデックス4とともに記憶される。というのも、記号「ed」がインデックス4で記憶されているからである。一連の記号「ed/w」は、インデックス4として記憶されている「ed」および普通に記憶されている「/w」を含む(4,/w)として、インデックス5で記憶される。ストリングレジスタ512(図5)における記号の数は2である。こうして、ステップ612(図6)では、制御ロジック500(図5)は、最後に加えられたストリングにおける記号の最後の数が1であることを判断し、ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を、現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)は「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ストリングポインタレジスタ514(図5)の内容は記号9043を指す。ストリングレジスタ512(図5)は空である。ステップ601(図6)では、制御ロジック500(図5)は、入力ストリング502(図5)における次の記号9043「/w」を、ストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち、入力ストリング502における次の記号9043「/w」を探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号9043を求めて辞書308を探索する。ステップ604(図6)では、記号9043は、インデックス2で辞書308(図5)に見つけられる。というのも、記号9043が、ステップ601〜622(図6)を経る先の繰返しにおいて辞書308(図5)に記憶されたからである。
ステップ620(図6)では、制御ロジック500(図5)が、入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9044を指す。
ステップ621(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)に記憶されている記号の数を2に増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタ514(図5)は入力ストリングにおける次の記号9044「e/」を指し、ストリングレジスタ512(図5)は記号9043「/w」を記憶する。
ステップ621(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)に記憶されている記号の数を2に増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタ514(図5)は入力ストリングにおける次の記号9044「e/」を指し、ストリングレジスタ512(図5)は記号9043「/w」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)が、記号9043を入力ストリング502における次の記号9044と連結する。ステップ602(図6)では、制御ロジック500(図5)は、一連の記号「/we/」を探索キー504としてコーディングテーブル300に送る。コーディングテーブル300は、一連の記号「/we/」を求めて辞書308を探索する。ステップ604(図6)では、一連の記号「/we/」は見つけられない。ステップ606(図6)では、一連の記号「/we/」は、インデックス6で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号「/we/」は、その接頭語を指すインデックス1とともに記憶される。というのも、記号「/w」がインデックス2で記憶されているからである。一連の記号「/we/」は、インデックス2として記憶されている「/w」および普通に記憶されている「e/」を含む(2,e/)として、インデックス6で記憶される。ストリングレジスタ512(図5)における記号の数は2である。こうして、ステップ612(図6)で、制御ロジック500(図5)が、最後に加えられたストリングにおける記号の最後の数が2であることを判断し、ステップ614(図6)で、制御ロジック500(図5)が、エンコードされたストリング314(図3)上でコードワード9063を送る。コードワード9063は、図4Bに関連して記載されるように「1」が前にあるインデックス2を含む。
ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)が、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ストリングポインタレジスタ514(図5)の内容は記号9044「e/」を指す。ストリングレジスタ512(図5)は空である。ステップ601(図6)では、制御ロジックは、入力ストリング502(図5)における次の記号9044を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち、入力ストリング502における次の記号9044「e/」を探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号9044を求めて辞書308を探索する。ステップ604(図6)では、記号9044は見つけられない。ステップ606(図6)では、コーディングテーブル300(図5)は、インデックス7で記号9044を辞書308に記憶することにより記号9044を学習し、記号9044が学習508を通じて学習されていることを示す。ステップ608(図6)では、記憶されている記号の数は「1」であり、こうして、処理がステップ610(図6)に続く。ステップ610(図6)では、制御ロジック500(図5)は、エンコードされたストリング314(図3)上でコードワード9064を送り、このため、デコーダは記号を学習することができる。コードワード9064は、図4Aに関連して記載されるように「0」にセットされた接頭語ビット404(図4A)が前にある普通記号9044を含む。
普通記号9044が送られた後、制御ロジック500(図5)はさまざまなレジスタを
修正する。ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
修正する。ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSのない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ステップ601(図6)では、入力ストリングポインタレジスタ514の内容は、依然として、入力ストリング502(図5)における記号9044を指す。制御ロジック500は、記号9044を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)として、コーディングテーブル300(図5)に送る。コーディングテーブル300(図5)は、記号9044を求めて辞書308を探索する。ステップ604(図6)では、記号9044が辞書308(図5)に見つけられる。というのも、記号9044が、ステップ601〜622(図6)を経る先の繰返しにおいて、辞書308(図5)に記憶されたからである。
ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9045を指す。ステップ621(図6)では、制御ロジック500(図5)は記号の数を2に増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタは入力ストリングにおける次の記号9045「we」を指し、ストリングレジスタは記号9044「e/」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)は、記号9044を、入力ストリング502における次の記号9045と連結する。ステップ602(図6)では、制御ロジック500(図5)は、一連の記号「e/we」を探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号「e/we」を求めて辞書308を探索する。ステップ604(図6)では、一連の記号「e/we」は見つけられない。ステップ606(図6)では、一連の記号「e/we」が、インデックス8で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号「e/we」がその接頭語を指すインデックス7とともに記憶される。というのも、記号「e/」がインデックス7で記憶されているからである。一連の記号「e/we」は、インデックス7として記憶されている「e/」および普通に記憶されている「we」を含む(7,we)として、インデックス8で記憶される。ストリングレジスタ512(図5)における記号の数は2である。こうして、ステップ612(図6)では、制御ロジック500(図5)が、最後に加えられたストリングにおける記号の最後の数が1であることを判断し、ステップ616(図6)では、制御ロジック500(図5)が、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ストリングポインタレジスタ514(図5)の内容は記号9045を指す。ストリングレジスタ512(図5)は空である。ステップ601(図6)では、制御ロジックは、入力ストリング502(図5)における次の記号9045「we」を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち入力ストリング502における次の記号9045「we」を探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号9045を求めて辞書308を探索する。ステップ604(図6)では、記号9045は見つけられない。ステップ606(図6)では、コーディングテーブル300(図5)は、インデックス9で記号9045を辞書308に記憶することにより記号9045を学習し、記号9045が学習508を通じて学習されていることを示す。ステップ608(図6)では、記憶されている記号の数は「1」であり、こうして、処理はステップ610(図6)に続く。ステップ610(図6)では、制御ロジック500(図5)が、エンコードされたストリング314(図3)上でコードワード9065を送り、このため、デコーダは記号を学習することができる。コードワード9065は、図4Aに関連して記載されるように「0」にセットされた接頭語ビット404(図4A)が前にある普通記号9045を含む。
普通記号9045が送られた後、制御ロジック500(図5)はさまざまなレジスタを修正する。ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を、現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ステップ601(図6)では、入力ストリングポインタレジスタ514の内容は、依然として、入力ストリング502(図5)における記号9045を指す。制御ロジック500は、記号9045を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)として、コーディングテーブル300(図5)に送る。コーディングテーブル300(図5)は、記号9045を求めて辞書308を探索する。ステップ604(図6)では、記号9045が辞書308(図5)に見つけられる。というのも、記号9045が、ステップ601〜622を経る先の繰返しにおいて、辞書308(図5)に記憶されたからである。
ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9046を指す。ステップ621(図6)では、制御ロジック500(図5)が記号の数を2に増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタは入力ストリングにおける次の記号9046「/e」を指し、ストリングレジスタは記号9045「we」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)は、記号9045を、入力ストリング502における次の記号9046と連結する。ステップ602(図6)では、制御ロジック500(図5)は、一連の記号「wee/」を探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号「wee/」を求めて辞書308を探索する。ステップ604(図6)では、一連の記号「wee/」は見つけられない。ステップ606(図6)では、一連の記号「wee/」は、インデックス10で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号「wee/」が、その接頭語を指すインデックス9とともに記憶される。というのも、記号「we」がインデックス9で記憶されているからである。一連の記号「wee/」は、インデックス9として記憶されている「we」および普通に記憶されている「e/」を含む(9,e/)として、インデックス10で記憶される。ストリングレジスタ512(図5)における記号の数は2である。こうして、ステップ612(図6)では、制御ロジック500(図5)は、最後に加えられたストリングにおける記号の最後の数が1であることを判断し、ステップ616では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を、現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ストリングポインタレジスタ514(図5)の内容は、記号9046を指す。ストリングレジスタ512(図5)は空である。ステップ601(図6)では、制御ロジックは、入力ストリング502(図5)における次の記号9046を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち入力ストリング502における次の記号9046「e/」を探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号9046を求めて辞書308を探索する。ステップ604(図6)では、記号9046がインデックス7で見つけられる。
ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9047を指す。ステップ621(図6)では、制御ロジック500(図5)が記号の数を増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタは、入力ストリングにおける次の記号9047「we」を指し、ストリングレジスタは記号9046「e/」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)は、記号9046を、入力ストリング502における次の記号9047と連結する。ステップ602(図6)では、制御ロジック500(図5)は、一連の記号「e/we」を探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号「e/we」を求めて辞書308を探索する。ステップ604(図6)では、一連の記号「e/we」がインデックス8で見つけられる。ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9048を指す。ステップ621(図6)では、制御ロジック500(図5)が、記号の数を3に増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタ514(図5)は入力ストリングにおける次の記号9048「b/」を指し、ストリングレジスタ512(図5)は記号「e/we」を記憶する。
ステップ601では、制御ロジック500(図5)は、記号9048を、ストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容「e/web/」を探索キー504として、コーディングテーブル300に送る。コーディングテーブルは、一連の記号「e/web/」を求めて辞書308を探索する。ステップ604(図6)では、一連の記号「e/web/」は見つけられない。ステップ606(図6)では、一連の記号「e/web/」は、インデックス11で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号「e/web/」が、その接頭語を指すインデックス8とともに記憶される。というのも、記号「e/we」がインデックス8で記憶されているからである。一連の記号「e/web/」は、インデックス8として既に記憶された「e/we」および普通に記憶されている「b/」を含む(8,b/)として、インデックス11で記憶される。ストリングレジスタ512(図5)における記号の数は3である。こうして、ステップ612(図6)では、制御ロジック500(図5)は、最後に加えられたストリングにおける記号の最後の数が1ではないことを判断し、ステップ614(図6)では、制御ロジック500(図5)は、エンコードされたストリング314(図3)上でコードワード9066を送る。コードワード9066は、記号のストリング「e/we」が記憶されているインデックス8を含み、図4Bに関連して記載されるように「1」が前に付される。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ストリングポインタレジスタ514(図5)の内容は記号9048を指す。ストリングレジスタ512(図5)は空である。ステップ601(図6)では、制御ロジックは、入力ストリング502(図5)における次の記号9048「b/」を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち入力ストリング502における次の記号9048「b/」を探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号9048を求めて辞書308を探索する。ステップ604(図6)では、記号9048は見つけられない。ステップ606(図6)では、コーディングテーブル300(図5)は、インデックス12で記号9048を辞書308に記憶することにより記号9048を学習し、記号9048が学習508を通じて学習されていることを示す。ステップ608(図6)では、記憶されている記号の数は「1」であり、こうして、処理がステップ610(図6)に続く。ステップ610(図6)では、制御ロジック500(図5)が、エンコードされたストリング314(図3)上でコードワード9067を送り、このため、デコーダは記号を学習することができる。コードワード9067は、図4Aに関連して記載されるように「0」にセットされた接頭語ビット404(図4A)が前にある普通記号9048を含む。
普通記号9048が送られた後、制御ロジック500(図5)はさまざまなレジスタを修正する。ステップ616(図6)では、制御ロジック500(図5)が、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)がストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601(図6)に続く。
ストリングレジスタ512(図5)は空である。ステップ601(図6)では、入力ストリングポインタレジスタ514の内容は、依然として、入力ストリング502(図5)における記号9048を指す。制御ロジック500は、記号9048をストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)として、コーディングテーブル300(図5)に送る。コーディングテーブル300(図5)は、記号9048を求めて辞書308を探索する。ステップ604(図6)では、記号9048が辞書308(図5)に見つけられる。というのも、記号9048が、ステップ601〜622(図6)を経る先の繰返しにおいて、辞書308(図5)に記憶されたからである。
ステップ620(図6)では、制御ロジック500(図5)が、入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号9049を指す。ステップ621(図6)では、制御ロジック500(図5)が記号の数を増分する。ステップ622(図6)では、制御ロジック500(図5)が、エンコードすべきさらなる記号があることを入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタは、入力ストリングにおける次の記号9049を指し、ストリングレジスタは記号9048「b/」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)が、記号9048を、ストリングレジスタ512(図5)に記憶されている次の記号9049と連結する。ステップ602(図6)では、制御ロジック500(図5)は、一連の記号「b/we」を探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号「b/we」を求めて辞書308を探索する。ステップ604(図6)では、一連の記号「b/we」は見つけられない。ステップ606(図6)では、一連の記号「b/we」は、インデックス13で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号「b/we」は、その接頭語を指すインデックス12とともに記憶される。というのも、記号「b/」がインデックス12で記憶されているからである。一連の記号「b/we」は、インデックス12として記憶されている「b/」および普通に記憶されている「we」を含む(12,we)として、インデックス13で記憶される。ストリングレジスタ512(図5)における記号の数は2である。こうして、ステップ612(図6)では、制御ロジック500(図5)は、最後に加えられたストリングにおける、記憶されている記号の最後の数が1であることを判断し、ステップ616(図6)では、制御ロジック500(図5)が、最後に加えられた長さ522(図5)を現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)は、ストリングレジスタ512を空にセットする。
ステップ622では、制御ロジック500(図5)は、入力ストリング502に(EO
Sではない)別の有効な記号があることを判断し、処理がステップ601に続く。
Sではない)別の有効な記号があることを判断し、処理がステップ601に続く。
入力ストリングポインタ514(図5)の内容は記号9049を指す。ストリングレジスタ512は空である。ステップ601(図6)では、制御ロジックは、入力ストリング502(図5)における次の記号9049「we」を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち入力ストリング502における次の記号9049「we」を探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号9049を求めて辞書308を探索する。ステップ604(図6)では、記号9049が見つけられる。
ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514(図5)を増分して、入力ストリング502(図5)における次の記号90410を指す。ステップ621(図6)では、制御ロジック500(図5)は記号の数を増分する。ステップ622(図6)では、制御ロジック500(図5)は、エンコードすべきさらなる記号があることを、入力ストリング502(図5)から判断する。処理がステップ601(図6)に続き、入力ストリングポインタは、入力ストリングにおける次の記号90410「t/」を指し、ストリングレジスタは記号9049「we」を記憶する。
ステップ601(図6)では、制御ロジック500(図5)が、記号9049を、入力ストリング502における次の記号90410と連結する。ステップ602(図6)では、制御ロジック500(図5)は、一連の記号「wet/」を探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号「wet/」を求めて辞書308を探索する。ステップ604(図6)では、一連の記号「wet/」は見つけられない。ステップ606(図6)では、一連の記号「wet/」は、インデックス14で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号「wet/」は、その接頭語を指すインデックス9とともに記憶される。というのも、記号「we」がインデックス9で記憶されているからである。一連の記号「wet/」は、インデックス9として既に記憶された「we」および普通に記憶されている「t/」を含む(9,t/)として、インデックス14で記憶される。ストリングレジスタ512(図5)における記号の数は2である。こうして、ステップ612(図6)では、制御ロジック500(図5)は、最後に加えられたストリングにおける記号の最後の数が1ではないことを判断し、ステップ614(図6)では、制御ロジック500(図5)は、エンコードされたストリング314(図3)上でコードワード9068を送る。コードワード9068は、図4Bに関連して記載されるように「1」が前にあるインデックス9を含む。ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を、現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)がストリングレジスタ512を空にセットする。
ステップ622では、制御ロジック500(図5)が、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601に続く。
ストリングポインタレジスタ514(図5)の内容は記号90410を指す。ストリングレジスタ512(図5)は空である。ステップ601(図6)では、制御ロジックは、入力ストリング502(図5)における次の記号90410「t/」を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500は、ストリングレジスタ512(図5)の内容、すなわち入力ストリング502における次の記号90410「t/」を探索キー504(図5)として、コーディングテーブル300に送る。コーディングテーブル300(図5)は、記号90410を求めて辞書308を探索する。ステップ604(図6)では、記号90410は見つけられない。ステップ606(図6)では、コーディングテーブル300(図5)が、インデックス15で記号90410を辞書308に記憶することにより、記号90410を学習し、記号90410が学習508を通じて学習されていることを示す。ステップ608(図6)では、記憶されている記号の数は「1」であり、こうして、処理がステップ610(図6)に続く。ステップ610(図6)では、制御ロジック500(図5)は、エンコードされたストリング314(図3)上でコードワード9069を送り、このためデコーダは記号を学習することができる。コードワード9069は、図4Aに関連して記載されるように「0」にセットされた接頭語ビット404(図4A)が前にある普通記号9049を含む。
普通記号90410が送られた後、制御ロジック500(図5)はさまざまなレジスタを修正する。ステップ616(図6)では、制御ロジック500(図5)は、最後に加えられた長さ522(図5)を、現在のストリングの長さ518(図5)の内容にセットし、現在のストリングの長さ518(図5)が「1」にセットされる。ステップ617(図6)では、制御ロジック500(図5)はストリングレジスタ512を空にセットする。
ステップ622(図6)では、制御ロジック500(図5)は、入力ストリング502に(EOSではない)別の有効な記号があることを判断し、処理がステップ601に続く。
ストリングレジスタ512(図5)は空である。ステップ601(図6)では、入力ストリングポインタレジスタ514の内容は、依然として、入力ストリング502(図5)における記号90410を指す。制御ロジック500は、記号90410を、空であるストリングレジスタ512(図5)の内容と連結する。ステップ602(図6)では、制御ロジック500(図5)は、ストリングレジスタ512(図5)の内容を探索キー504(図5)として、コーディングテーブル300(図5)に送る。コーディングテーブル300(図5)は、記号90410を求めて辞書308(図5)を探索する。ステップ604(図6)では、記号90410が辞書308(図5)に見つけられる。というのも、記号90410が、ステップ601〜622(図6)を経る先の繰返しにおいて、辞書308(図5)に記憶されたからである。
ステップ620(図6)では、制御ロジック500(図5)が入力ストリングポインタ514を増分して、入力ストリング502(図5)における次の記号を指す。ステップ621(図6)では、制御ロジック500(図5)が記号の数を増分する。
ステップ622(図6)では、制御ロジックがストリングの終わりを検出する。処理はステップ624(図6)に続く。
ステップ624(図6)では、制御ロジック500(図5)が、コードワード90610におけるストリングの終わりのためにインデックスを送る。
ストリングの終わりを除く10個の記号を含む入力ストリングは、各記号9041〜90410が16ビット幅であると仮定すると、160ビット(10×16)を必要とする。一連のコードワード9061〜90610は、伝送されるビットの数を120ビットに減らす。120ビットは次のように算出される。すなわち、コードワード9061、9062、9064、9065、9067および9069に対して(6×17)の普通記号、コードワード9063におけるインデックス2に対して3ビット、ならびにコードワード9066、9068および90610におけるインデックス8、9および10に対して5ビットである。この方法では、アルファベットを記憶するのにより少ない初期メモリですみ、かつ、エンコードされたストリング314(図3)を伝送するのにLZWアルゴリズムより少ないビットですむ。記号が学習され、反復または既知のストリングが受取られると、達成される圧縮が向上する。
エンコードされたデータ314の処理は、図8A〜図8Bに関連して記載される方法を用いて、デコーダ312により行なわれる。
この発明は、その好ましい実施例に関連して特に例示および記載されてきたが、添付の特許請求の範囲により包含されるこの発明の範囲から逸脱することなく、形状および詳細をこの明細書中でさまざまに変更し得ることを、当業者は理解するであろう。
Claims (25)
- 入力ストリングを適応して圧縮するための方法であって、
記号のストリングを受け取り、入力ストリング中に含まれて受け取られた各記号を求めてエンコーダ辞書を探索するステップを備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、
記号がエンコーダ辞書に記憶されていないことを検出すると、記号を次のシーケンシャルインデックスでエンコーダ辞書に記憶することにより記号を学習するステップと、
記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送するステップを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、
記号がエンコーダ辞書に記憶されていることを検出すると、先に学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、
現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するステップと、
現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡するステップを備える、方法。 - 一連の記号が辞書に記憶されていないことを検出すると、一連の記号に対して一致する最長接頭語が辞書に記憶されているインデックスを伝送するステップをさらに備え、識別子の状態はコードワードがインデックスを含むことを示す、請求項1に記載の方法。
- インデックスは可変幅である、請求項1に記載の方法。
- インデックスの幅は、辞書に記憶されている、学習された記号の数に依存する、請求項3に記載の方法。
- 探索するステップは、一連の記号を求めて探索し、学習するステップは、一連の記号を辞書に記憶することにより一連の記号を学習し、先に学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップは、一連の記号に対する最長接頭語一致が記憶されているインデックスをコードワードで伝送する、請求項1に記載の方法。
- 入力ストリングを適応して圧縮するための装置であって、
記号のストリング中に含まれて受け取られた各記号を記憶するためのエンコーダ辞書を備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、
制御ロジックを備え、この制御ロジックは、各記号を求めて辞書を探索し、記号が辞書に記憶されていないことを検出すると、記号をコードワードでデコーダに伝送し、記号を次のシーケンシャルインデックスで辞書に記憶することにより記号を学習し、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、記号がエンコーダ辞書に記憶されていることを検出すると、学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送し、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較し、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡する、装置。 - 制御ロジックは、一連の記号が辞書に記憶されていないことを検出すると、一連の記号の最長接頭語が記憶されているインデックスをコードワードで伝送する、請求項6に記載の装置。
- インデックスは可変幅である、請求項6に記載の装置。
- インデックスの幅は、辞書に記憶されている、学習された記号の数に依存する、請求項8に記載の装置。
- 制御ロジックは、一連の記号を求めて辞書を探索し、一連の記号に対する最長接頭語一致が記憶されているインデックスをコードワードで伝送し、一連の記号を辞書に記憶することにより一連の記号を学習する、請求項6に記載の装置。
- 入力ストリングを適応して圧縮するための装置であって、
記号のストリング中に含まれて受け取られた各記号を記憶するためのエンコーダ辞書を備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、
各記号を求めて辞書を探索するための手段と、
記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送するための手段とを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、
記号を次のシーケンシャルインデックスで辞書に記憶することにより記号を学習するための手段と、
記号がエンコーダ辞書に記憶されていることを検出すると、記憶された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送する手段とを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、
現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するための手段と、
現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡する手段を備える、装置。 - インデックスは可変幅である、請求項11に記載の装置。
- インデックスの幅は、辞書に記憶されている、学習された記号の数に依存する、請求項12に記載の装置。
- 入力ストリングを適応して圧縮するための方法であって、
記号のストリング中に含まれて受け取られた一連の記号に対する最長接頭語一致を求めて辞書を探索するステップを備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、
記号のストリングにおける記号がエンコーダ辞書に記憶されていないことを検出するとと、コードワードで記号を伝送し、コードワードは識別子を含み、識別子の状態は、コードワードが、学習されるべき普通記号であるかまたはインデックスであるかを識別し、記号を次のシーケンシャルインデックスでエンコーダ辞書に記憶することにより記号を学習するステップと、
一連の記号が辞書に記憶されていることを検出すると、一連の記号が辞書に記憶されているインデックスをコードワードで伝送するステップとを備え、インデックスの幅は、辞書に記憶されている複数の学習された項目に依存し、
記号がエンコーダ辞書に記憶されていることを検出すると、記憶された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、
現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するステップと、
現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡するステップを含む、方法。 - 一連のコードワードを適応して圧縮および復号するための方法であって、
記号のストリングを受け取り、入力ストリング中に含まれて受け取られた各記号を求めてエンコーダ辞書を探索するステップを備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、
記号がエンコーダ辞書に記憶されていないことを検出すると、記号を次のシーケンシャルインデックスでエンコーダ辞書に記憶することにより記号を学習するステップと、
記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送するステップを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、
記号がエンコーダ辞書に記憶されていることを検出すると、先に学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、
現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するステップと、
現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡するステップと、
デコーダにおいて、コードワードを受取るステップを備え、コードワードの幅は、入力ストリングにおけるデータの種類に依存して選択される記号の幅に依存し、
識別子の状態から、コードワードに記号が記憶されていることを検出すると、記号を次のシーケンシャルインデックスでデコーダ辞書に記憶することにより記号を学習するステップと、
デコードされたデータとして記号を与えるステップとを備える、方法。 - 学習するステップはさらに、
先に学習された記号を記号と連結することにより一連の記号を学習するステップと、
一連の記号を次のシーケンシャルインデックスでデコーダ辞書に記憶するステップとを備える、請求項15に記載の方法。 - コードワードに記憶されている辞書インデックスを検出すると、インデックスを変換するステップをさらに含む、請求項15に記載の方法。
- インデックスを記号へ変換する、請求項17に記載の方法。
- インデックスは可変幅である、請求項17に記載の方法。
- 一連のコードワードを適応して圧縮および復号するための装置であって、
入力ストリング中に含まれて受け取られた各記号を記憶するためのエンコーダ辞書を備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、
各記号を求めてエンコーダ辞書を探索し、記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送し、記号がエンコーダ辞書に記憶されていないことを検出すると、エンコーダ辞書内の次のシーケンシャルインデックスにおいて記号を記憶することにより記号を学習する制御ロジックを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、制御ロジックは、記号がエンコーダ辞書に記憶されていることを検出すると、学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送し、識別子の状態は、コードワードが単一のインデックスを含むことを示し、制御ロジックは、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較し、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡し、
コードワード中に含まれて受け取られた普通記号を次のシーケンシャルインデックスで記憶するためのデコーダ辞書を備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、
ロジックを備え、このロジックは、コードワードを受取り、コードワードに記憶されている普通記号を検出し、記号を辞書に記憶し、デコードされたデータとして記号を与え、記号がエンコーダ辞書に記憶されていることを検出すると、記憶された記号がエンコーダ辞書およびデコーダ辞書の両方に記憶されている単一のインデックスを、コードワードで伝送し、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率を前記しきい値と比較し、現在の記号の幅に基づく圧縮率がしきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡する、装置。 - ロジックは、先に学習された記号を、コードワードに記憶されている普通記号と連結することにより一連の記号を学習し、一連の記号を次のシーケンシャルインデックスで辞書に記憶する、請求項20に記載の装置。
- コードワードに記憶されているインデックスを検出すると、ロジックはインデックスを変換する、請求項20に記載の装置。
- インデックスを記号へ変換する、請求項22に記載の装置。
- インデックスを一連の記号へ変換する、請求項22に記載の装置。
- インデックスは可変幅である、請求項20に記載の装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/782,614 US6606040B2 (en) | 2001-02-13 | 2001-02-13 | Method and apparatus for adaptive data compression |
US09/782,614 | 2001-02-13 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007266759A Division JP2008092582A (ja) | 2001-02-13 | 2007-10-12 | 適応データ圧縮のための方法および装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2012100275A true JP2012100275A (ja) | 2012-05-24 |
Family
ID=25126614
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002564842A Withdrawn JP2004526357A (ja) | 2001-02-13 | 2002-02-11 | 適応データ圧縮のための方法および装置 |
JP2007266759A Pending JP2008092582A (ja) | 2001-02-13 | 2007-10-12 | 適応データ圧縮のための方法および装置 |
JP2011252669A Pending JP2012100275A (ja) | 2001-02-13 | 2011-11-18 | 適応データ圧縮のための方法および装置 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002564842A Withdrawn JP2004526357A (ja) | 2001-02-13 | 2002-02-11 | 適応データ圧縮のための方法および装置 |
JP2007266759A Pending JP2008092582A (ja) | 2001-02-13 | 2007-10-12 | 適応データ圧縮のための方法および装置 |
Country Status (7)
Country | Link |
---|---|
US (5) | US6606040B2 (ja) |
EP (1) | EP1397866B1 (ja) |
JP (3) | JP2004526357A (ja) |
CN (2) | CN1593011B (ja) |
CA (1) | CA2438309C (ja) |
DK (1) | DK1397866T3 (ja) |
WO (1) | WO2002065646A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020226105A1 (ja) * | 2019-05-07 | 2020-11-12 | 国立大学法人筑波大学 | データの圧縮及び解凍方法、データ圧縮装置、及びデータ解凍装置 |
Families Citing this family (60)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6624761B2 (en) * | 1998-12-11 | 2003-09-23 | Realtime Data, Llc | Content independent data compression method and system |
US6604158B1 (en) | 1999-03-11 | 2003-08-05 | Realtime Data, Llc | System and methods for accelerated data storage and retrieval |
US6601104B1 (en) | 1999-03-11 | 2003-07-29 | Realtime Data Llc | System and methods for accelerated data storage and retrieval |
US20030191876A1 (en) * | 2000-02-03 | 2003-10-09 | Fallon James J. | Data storewidth accelerator |
US20010047473A1 (en) | 2000-02-03 | 2001-11-29 | Realtime Data, Llc | Systems and methods for computer initialization |
DE10021286B4 (de) * | 2000-05-02 | 2005-03-10 | Kara Can | Verfahren und Vorrichtung zur Kompression und/oder Dekompression von Daten |
DE10037004B4 (de) * | 2000-07-29 | 2004-01-15 | Sms Demag Ag | Walzgerüst für bandkantenorientiertes Verschieben der Zwischenwalzen in einem 6-Walzen-Gerüst |
US9143546B2 (en) | 2000-10-03 | 2015-09-22 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US8692695B2 (en) | 2000-10-03 | 2014-04-08 | Realtime Data, Llc | Methods for encoding and decoding data |
US7417568B2 (en) * | 2000-10-03 | 2008-08-26 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US6606040B2 (en) * | 2001-02-13 | 2003-08-12 | Mosaid Technologies, Inc. | Method and apparatus for adaptive data compression |
US7386046B2 (en) | 2001-02-13 | 2008-06-10 | Realtime Data Llc | Bandwidth sensitive data compression and decompression |
US20030088537A1 (en) * | 2001-08-08 | 2003-05-08 | Nec Eluminant Technologies, Inc. | High speed data compression and decompression apparatus and method |
US7301961B1 (en) | 2001-12-27 | 2007-11-27 | Cypress Semiconductor Corportion | Method and apparatus for configuring signal lines according to idle codes |
US7293284B1 (en) * | 2002-12-31 | 2007-11-06 | Colligo Networks, Inc. | Codeword-enhanced peer-to-peer authentication |
US7451267B1 (en) | 2003-09-23 | 2008-11-11 | Netlogic Microsystems, Inc. | Method and apparatus for learn and related operations in network search engine |
US8266373B1 (en) * | 2003-12-23 | 2012-09-11 | Netlogic Microsystems, Inc. | Content addressable memory (CAM) device and method for updating data by multiplexing between key register and mask value input |
US7577784B1 (en) | 2003-12-24 | 2009-08-18 | Netlogic Microsystems, Inc. | Full-ternary content addressable memory (CAM) configurable for pseudo-ternary operation |
US7522516B1 (en) * | 2004-03-30 | 2009-04-21 | Extreme Networks, Inc. | Exception handling system for packet processing system |
CN101432981A (zh) * | 2004-10-27 | 2009-05-13 | Eg技术有限公司 | 用于信道组的最优速率分配 |
US7053803B1 (en) * | 2005-01-31 | 2006-05-30 | Hewlett Packard Development Company, L.P. | Data compression |
GB0511797D0 (en) * | 2005-06-10 | 2005-07-20 | Isis Innovation | Computer grid |
US7167115B1 (en) | 2005-08-26 | 2007-01-23 | American Megatrends, Inc. | Method, apparatus, and computer-readable medium for data compression and decompression utilizing multiple dictionaries |
US20070104212A1 (en) * | 2005-11-10 | 2007-05-10 | Michael Gutman | Cache-based compression of structured network traffic |
US20080017227A1 (en) * | 2006-07-19 | 2008-01-24 | Ward Barry D | Walking aid apparatus |
US7667624B2 (en) * | 2007-01-22 | 2010-02-23 | General Electric Company | Methods and apparatus for clinical data compression |
US7439887B2 (en) * | 2007-02-13 | 2008-10-21 | Seiko Epson Corporation | Method and apparatus for GIF decompression using fixed-size codeword table |
US20110010465A1 (en) * | 2007-07-18 | 2011-01-13 | Andrea G Forte | Methods and Systems for Providing Template Based Compression |
US9109928B2 (en) * | 2007-08-16 | 2015-08-18 | International Business Machines Corporation | Methods and apparatus for efficient and adaptive transmission of data in data collection networks |
US8078454B2 (en) * | 2007-09-28 | 2011-12-13 | Microsoft Corporation | Two-pass hash extraction of text strings |
US7953881B1 (en) * | 2008-06-12 | 2011-05-31 | Juniper Networks, Inc. | Network characteristic-based compression of network traffic |
US7750826B2 (en) * | 2008-11-26 | 2010-07-06 | Red Hat, Inc. | Data structure management for lossless data compression |
US7764202B2 (en) * | 2008-11-26 | 2010-07-27 | Red Hat, Inc. | Lossless data compression with separated index values and literal values in output stream |
CN101520771A (zh) * | 2009-03-27 | 2009-09-02 | 广东国笔科技股份有限公司 | 一种对词库压缩编码及解码的方法和系统 |
US9160611B2 (en) * | 2009-04-22 | 2015-10-13 | Webroot Inc. | System and method for performing longest common prefix strings searches |
US8355585B2 (en) * | 2009-05-12 | 2013-01-15 | Red Hat Israel, Ltd. | Data compression of images using a shared dictionary |
US7868789B1 (en) * | 2009-06-28 | 2011-01-11 | Sap Ag | Dictionary-based order-preserving string compression for main memory column stores |
US9298722B2 (en) * | 2009-07-16 | 2016-03-29 | Novell, Inc. | Optimal sequential (de)compression of digital data |
US8159373B2 (en) | 2009-07-28 | 2012-04-17 | Ecole Polytechnique Federale De Lausanne (Epfl) | Encoding and decoding information |
US8228213B2 (en) * | 2009-09-23 | 2012-07-24 | International Business Machines Corporation | Data compression system and associated methods |
KR200454414Y1 (ko) * | 2009-10-07 | 2011-07-01 | 주식회사 대웅제약 | 약품 주사기 |
JP5523144B2 (ja) * | 2010-02-25 | 2014-06-18 | キヤノン株式会社 | 情報処理装置及びその制御方法及びプログラム及び記憶媒体 |
US8782734B2 (en) * | 2010-03-10 | 2014-07-15 | Novell, Inc. | Semantic controls on data storage and access |
US8832103B2 (en) | 2010-04-13 | 2014-09-09 | Novell, Inc. | Relevancy filter for new data based on underlying files |
CN102122960B (zh) * | 2011-01-18 | 2013-11-06 | 西安理工大学 | 一种针对二进制数据的多字符组合无损数据压缩方法 |
US8605732B2 (en) | 2011-02-15 | 2013-12-10 | Extreme Networks, Inc. | Method of providing virtual router functionality |
US10140621B2 (en) | 2012-09-20 | 2018-11-27 | Ebay Inc. | Determining and using brand information in electronic commerce |
US8786471B1 (en) | 2013-03-15 | 2014-07-22 | Oracle International Corporation | Lossless data compression with variable width codes |
US9753983B2 (en) | 2013-09-19 | 2017-09-05 | International Business Machines Corporation | Data access using decompression maps |
US9385748B2 (en) * | 2014-10-21 | 2016-07-05 | Huawei Technologies Co., Ltd. | Parallel dictionary-based compression encoder |
US9780805B2 (en) * | 2014-10-22 | 2017-10-03 | International Business Machines Corporation | Predicate application through partial compression dictionary match |
JP6531398B2 (ja) * | 2015-01-19 | 2019-06-19 | 富士通株式会社 | プログラム |
WO2016131554A1 (en) | 2015-02-17 | 2016-08-25 | Parstream Gmbh | Method and apparatus for adaptive data compression |
AU2015398151B2 (en) * | 2015-06-10 | 2019-07-18 | Fujitsu Limited | Information processing device, information processing method, and information processing program |
US9496894B1 (en) * | 2015-10-21 | 2016-11-15 | GE Lighting Solutions, LLC | System and method for data compression over a communication network |
JP6735469B2 (ja) | 2016-03-22 | 2020-08-05 | パナソニックIpマネジメント株式会社 | ログ収集装置、監視カメラ、およびログ収集方法 |
US9971800B2 (en) * | 2016-04-12 | 2018-05-15 | Cisco Technology, Inc. | Compressing indices in a video stream |
US10432217B2 (en) | 2016-06-28 | 2019-10-01 | International Business Machines Corporation | Page filtering via compression dictionary filtering |
CN108768403B (zh) * | 2018-05-30 | 2021-08-20 | 中国人民解放军战略支援部队信息工程大学 | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 |
CN115630065B (zh) * | 2022-10-18 | 2023-08-22 | 天津神舟通用数据技术有限公司 | 一种基于多压缩模式子分区表的存储和查询方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03209923A (ja) * | 1990-01-12 | 1991-09-12 | Fujitsu Ltd | データ圧縮方式 |
JPH06161705A (ja) * | 1992-11-19 | 1994-06-10 | Fujitsu Ltd | データ符号化方式及びデータ復元方式 |
JPH09214352A (ja) * | 1996-01-31 | 1997-08-15 | Hitachi Ltd | データ圧縮方法および装置 |
JPH09234909A (ja) * | 1996-02-28 | 1997-09-09 | Fuji Xerox Co Ltd | 記録装置、記録システム、画像転送システム |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4558302A (en) * | 1983-06-20 | 1985-12-10 | Sperry Corporation | High speed data compression and decompression apparatus and method |
WO1991010999A1 (en) * | 1990-01-19 | 1991-07-25 | Hewlett-Packard Limited | Compressed data access |
US5049881A (en) * | 1990-06-18 | 1991-09-17 | Intersecting Concepts, Inc. | Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique |
US5373290A (en) * | 1991-09-25 | 1994-12-13 | Hewlett-Packard Corporation | Apparatus and method for managing multiple dictionaries in content addressable memory based data compression |
US5469161A (en) | 1992-08-13 | 1995-11-21 | International Business Machines Corporation | Algorithm for the implementation of Ziv-Lempel data compression using content addressable memory |
JP3350118B2 (ja) * | 1992-11-30 | 2002-11-25 | 富士通株式会社 | データ符号化方式及びデータ復元方式 |
US5455576A (en) * | 1992-12-23 | 1995-10-03 | Hewlett Packard Corporation | Apparatus and methods for Lempel Ziv data compression with improved management of multiple dictionaries in content addressable memory |
US5389922A (en) * | 1993-04-13 | 1995-02-14 | Hewlett-Packard Company | Compression using small dictionaries with applications to network packets |
US5771010A (en) | 1995-03-22 | 1998-06-23 | Ibm Corporation | Apparatus for compressing data using a Lempel-Ziv-type algorithm |
US5703581A (en) * | 1996-06-14 | 1997-12-30 | Lucent Technologies Inc. | Method and apparatus for data compression and decompression |
WO2001001667A2 (de) * | 1999-06-25 | 2001-01-04 | Infineon Technologies Ag | Kodec-schaltung und verfahren zur erhöhung der datenübertragungsrate bei einer modem-übertragung |
US6606040B2 (en) * | 2001-02-13 | 2003-08-12 | Mosaid Technologies, Inc. | Method and apparatus for adaptive data compression |
-
2001
- 2001-02-13 US US09/782,614 patent/US6606040B2/en not_active Expired - Lifetime
-
2002
- 2002-02-11 CN CN02806626XA patent/CN1593011B/zh not_active Expired - Lifetime
- 2002-02-11 DK DK02700074T patent/DK1397866T3/da active
- 2002-02-11 WO PCT/CA2002/000143 patent/WO2002065646A2/en active Application Filing
- 2002-02-11 JP JP2002564842A patent/JP2004526357A/ja not_active Withdrawn
- 2002-02-11 CA CA2438309A patent/CA2438309C/en not_active Expired - Lifetime
- 2002-02-11 CN CN2010101438424A patent/CN101800556B/zh not_active Expired - Lifetime
- 2002-02-11 EP EP02700074.4A patent/EP1397866B1/en not_active Expired - Lifetime
-
2003
- 2003-04-18 US US10/420,018 patent/US6700512B2/en not_active Expired - Lifetime
-
2004
- 2004-02-27 US US10/788,003 patent/US6879271B2/en not_active Expired - Lifetime
-
2005
- 2005-03-09 US US11/077,183 patent/US20060071822A1/en not_active Abandoned
-
2006
- 2006-07-19 US US11/488,965 patent/US20070030179A1/en not_active Abandoned
-
2007
- 2007-10-12 JP JP2007266759A patent/JP2008092582A/ja active Pending
-
2011
- 2011-11-18 JP JP2011252669A patent/JP2012100275A/ja active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03209923A (ja) * | 1990-01-12 | 1991-09-12 | Fujitsu Ltd | データ圧縮方式 |
JPH06161705A (ja) * | 1992-11-19 | 1994-06-10 | Fujitsu Ltd | データ符号化方式及びデータ復元方式 |
JPH09214352A (ja) * | 1996-01-31 | 1997-08-15 | Hitachi Ltd | データ圧縮方法および装置 |
JPH09234909A (ja) * | 1996-02-28 | 1997-09-09 | Fuji Xerox Co Ltd | 記録装置、記録システム、画像転送システム |
Non-Patent Citations (1)
Title |
---|
JPN6010038963; 植松 友彦: 文書データ圧縮アルゴリズム入門 , 19941015, p.145-148,174-203, CQ出版株式会社 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020226105A1 (ja) * | 2019-05-07 | 2020-11-12 | 国立大学法人筑波大学 | データの圧縮及び解凍方法、データ圧縮装置、及びデータ解凍装置 |
JP2020184672A (ja) * | 2019-05-07 | 2020-11-12 | 国立大学法人 筑波大学 | データの圧縮及び解凍方法、データ圧縮方法、データ圧縮装置、データ圧縮プログラム、データ解凍方法、データ解凍装置、データ解凍プログラム |
US11876542B2 (en) | 2019-05-07 | 2024-01-16 | University Of Tsukuba | Data compression and decompression methods, data compression device, and data decompression device |
Also Published As
Publication number | Publication date |
---|---|
WO2002065646A2 (en) | 2002-08-22 |
CN101800556B (zh) | 2013-11-13 |
EP1397866B1 (en) | 2019-08-28 |
US20070030179A1 (en) | 2007-02-08 |
EP1397866A2 (en) | 2004-03-17 |
WO2002065646A3 (en) | 2003-03-13 |
CN1593011A (zh) | 2005-03-09 |
CA2438309A1 (en) | 2002-08-22 |
US20050030208A1 (en) | 2005-02-10 |
CA2438309C (en) | 2011-01-25 |
US20060071822A1 (en) | 2006-04-06 |
JP2008092582A (ja) | 2008-04-17 |
US20020109615A1 (en) | 2002-08-15 |
US6606040B2 (en) | 2003-08-12 |
CN1593011B (zh) | 2010-05-12 |
CN101800556A (zh) | 2010-08-11 |
DK1397866T3 (da) | 2019-12-02 |
US20030206125A1 (en) | 2003-11-06 |
JP2004526357A (ja) | 2004-08-26 |
US6700512B2 (en) | 2004-03-02 |
US6879271B2 (en) | 2005-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6700512B2 (en) | Method and apparatus for adaptive data compression | |
CN108880556B (zh) | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 | |
US5389922A (en) | Compression using small dictionaries with applications to network packets | |
JP3541930B2 (ja) | 符号化装置及び復号化装置 | |
EP1024600B1 (en) | Data compression method and data decompressing method, and data compressing apparatus and data decompressing apparatus therefor | |
US6100824A (en) | System and method for data compression | |
US5703581A (en) | Method and apparatus for data compression and decompression | |
US5877711A (en) | Method and apparatus for performing adaptive data compression | |
JP2001285075A (ja) | パケットごとのハッシュテーブルを使用してネットワークパケットのデータを圧縮するための方法および装置 | |
US5424732A (en) | Transmission compatibility using custom compression method and hardware | |
JPH09214353A (ja) | データ圧縮装置及びデータ復元装置 | |
JPS6356726B2 (ja) | ||
KR100732664B1 (ko) | 텍스트 데이터 압축을 위한 방법 및 장치 | |
JP3960629B2 (ja) | 可変長符号器を使用する伝送システム | |
US7324022B2 (en) | Data encoding apparatus, data decoding apparatus and data encoding/decoding system | |
Fenwick | Improvements to the block sorting text compression algorithm | |
KR100462060B1 (ko) | 유니버셜 가변 길이 코드 부호어 다중 추출 방법 및 그를위한 룩-업 테이블 구성 방법 | |
Brisaboa et al. | Dv2v: A Dynamic Variable-to-Variable Compressor | |
JPS62209948A (ja) | デ−タ圧縮伝送方法 | |
JP3001519B1 (ja) | データ圧縮方法およびデータ圧縮方式 | |
Salomon et al. | Dictionary methods | |
KR20020065211A (ko) | 고속 허프만 디코딩 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121016 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20130115 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20130118 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20130226 |