"入力ストリングを適応して圧縮するための方法であって、記号のストリングを受け取り、入力ストリング中に含まれて受け取られた各記号を求めてエンコーダ辞書を探索するステップを備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、記号がエンコーダ辞書に記憶されていないことを検出すると、記号を次のシーケンシャルインデックスでエンコーダ辞書に記憶することにより記号を学習するステップと、記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送するステップを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、記号がエンコーダ辞書に記憶されていることを検出すると、先に学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するステップと、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡するステップを備える、方法。一連の記号が辞書に記憶されていないことを検出すると、一連の記号に対して一致する最長接頭語が辞書に記憶されているインデックスを伝送するステップをさらに備え、識別子の状態はコードワードがインデックスを含むことを示す、請求項1に記載の方法。インデックスは可変幅である、請求項1に記載の方法。インデックスの幅は、辞書に記憶されている、学習された記号の数に依存する、請求項3に記載の方法。探索するステップは、一連の記号を求めて探索し、学習するステップは、一連の記号を辞書に記憶することにより一連の記号を学習し、先に学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップは、一連の記号に対する最長接頭語一致が記憶されているインデックスをコードワードで伝送する、請求項1に記載の方法。入力ストリングを適応して圧縮するための装置であって、記号のストリング中に含まれて受け取られた各記号を記憶するためのエンコーダ辞書を備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、制御ロジックを備え、この制御ロジックは、各記号を求めて辞書を探索し、記号が辞書に記憶されていないことを検出すると、記号をコードワードでデコーダに伝送し、記号を次のシーケンシャルインデックスで辞書に記憶することにより記号を学習し、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、記号がエンコーダ辞書に記憶されていることを検出すると、学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送し、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較し、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡する、装置。制御ロジックは、一連の記号が辞書に記憶されていないことを検出すると、一連の記号の最長接頭語が記憶されているインデックスをコードワードで伝送する、請求項6に記載の装置。インデックスは可変幅である、請求項6に記載の装置。インデックスの幅は、辞書に記憶されている、学習された記号の数に依存する、請求項8に記載の装置。制御ロジックは、一連の記号を求めて辞書を探索し、一連の記号に対する最長接頭語一致が記憶されているインデックスをコードワードで伝送し、一連の記号を辞書に記憶することにより一連の記号を学習する、請求項6に記載の装置。入力ストリングを適応して圧縮するための装置であって、記号のストリング中に含まれて受け取られた各記号を記憶するためのエンコーダ辞書を備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、各記号を求めて辞書を探索するための手段と、記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送するための手段とを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、記号を次のシーケンシャルインデックスで辞書に記憶することにより記号を学習するための手段と、記号がエンコーダ辞書に記憶されていることを検出すると、記憶された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送する手段とを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するための手段と、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡する手段を備える、装置。インデックスは可変幅である、請求項11に記載の装置。インデックスの幅は、辞書に記憶されている、学習された記号の数に依存する、請求項12に記載の装置。入力ストリングを適応して圧縮するための方法であって、記号のストリング中に含まれて受け取られた一連の記号に対する最長接頭語一致を求めて辞書を探索するステップを備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、記号のストリングにおける記号がエンコーダ辞書に記憶されていないことを検出するとと、コードワードで記号を伝送し、コードワードは識別子を含み、識別子の状態は、コードワードが、学習されるべき普通記号であるかまたはインデックスであるかを識別し、記号を次のシーケンシャルインデックスでエンコーダ辞書に記憶することにより記号を学習するステップと、一連の記号が辞書に記憶されていることを検出すると、一連の記号が辞書に記憶されているインデックスをコードワードで伝送するステップとを備え、インデックスの幅は、辞書に記憶されている複数の学習された項目に依存し、記号がエンコーダ辞書に記憶されていることを検出すると、記憶された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するステップと、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡するステップを含む、方法。一連のコードワードを適応して圧縮および復号するための方法であって、記号のストリングを受け取り、入力ストリング中に含まれて受け取られた各記号を求めてエンコーダ辞書を探索するステップを備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、記号がエンコーダ辞書に記憶されていないことを検出すると、記号を次のシーケンシャルインデックスでエンコーダ辞書に記憶することにより記号を学習するステップと、記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送するステップを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、記号がエンコーダ辞書に記憶されていることを検出すると、先に学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送するステップを備え、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較するステップと、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡するステップと、デコーダにおいて、コードワードを受取るステップを備え、コードワードの幅は、入力ストリングにおけるデータの種類に依存して選択される記号の幅に依存し、識別子の状態から、コードワードに記号が記憶されていることを検出すると、記号を次のシーケンシャルインデックスでデコーダ辞書に記憶することにより記号を学習するステップと、デコードされたデータとして記号を与えるステップとを備える、方法。学習するステップはさらに、先に学習された記号を記号と連結することにより一連の記号を学習するステップと、一連の記号を次のシーケンシャルインデックスでデコーダ辞書に記憶するステップとを備える、請求項15に記載の方法。コードワードに記憶されている辞書インデックスを検出すると、インデックスを変換するステップをさらに含む、請求項15に記載の方法。インデックスを記号へ変換する、請求項17に記載の方法。インデックスは可変幅である、請求項17に記載の方法。一連のコードワードを適応して圧縮および復号するための装置であって、入力ストリング中に含まれて受け取られた各記号を記憶するためのエンコーダ辞書を備え、記号の幅は入力ストリングにおけるデータの種類に依存して選択され、各記号を求めてエンコーダ辞書を探索し、記号がエンコーダ辞書に記憶されていないことを検出すると、コードワードで記号をデコーダに伝送し、記号がエンコーダ辞書に記憶されていないことを検出すると、エンコーダ辞書内の次のシーケンシャルインデックスにおいて記号を記憶することにより記号を学習する制御ロジックを備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、制御ロジックは、記号がエンコーダ辞書に記憶されていることを検出すると、学習された記号がエンコーダ辞書に記憶されている単一のインデックスを、コードワードで伝送し、識別子の状態は、コードワードが単一のインデックスを含むことを示し、制御ロジックは、現在の記号の幅に基づいて検出された圧縮率をしきい値と比較し、現在の記号の幅に基づく圧縮率が前記しきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡し、コードワード中に含まれて受け取られた普通記号を次のシーケンシャルインデックスで記憶するためのデコーダ辞書を備え、コードワードは識別子を含み、識別子の状態は、コードワードが学習されるべき記号を含むことを示し、ロジックを備え、このロジックは、コードワードを受取り、コードワードに記憶されている普通記号を検出し、記号を辞書に記憶し、デコードされたデータとして記号を与え、記号がエンコーダ辞書に記憶されていることを検出すると、記憶された記号がエンコーダ辞書およびデコーダ辞書の両方に記憶されている単一のインデックスを、コードワードで伝送し、識別子の状態は、コードワードが単一のインデックスを含むことを示し、現在の記号の幅に基づいて検出された圧縮率を前記しきい値と比較し、現在の記号の幅に基づく圧縮率がしきい値よりも小さいことを検出すると、記号の幅を修正し、新しい記号の幅をデコーダに連絡する、装置。ロジックは、先に学習された記号を、コードワードに記憶されている普通記号と連結することにより一連の記号を学習し、一連の記号を次のシーケンシャルインデックスで辞書に記憶する、請求項20に記載の装置。コードワードに記憶されているインデックスを検出すると、ロジックはインデックスを変換する、請求項20に記載の装置。インデックスを記号へ変換する、請求項22に記載の装置。インデックスを一連の記号へ変換する、請求項22に記載の装置。インデックスは可変幅である、請求項20に記載の装置。コーディングテーブルに記憶されている一連の記号が長ければ長いほど、より良好な圧縮が得られる。というのも、伝送されるインデックスの数が減るからである。圧縮は、記号幅を増すことによっても改善され得る。しかしながら、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つの項目、すなわち、ストリングの終わりEOS316およびフラッシュコード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に関して記載される。代替的な実施例では、エンコーダ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を求めて探索する。第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を初期設定しないよう決定することができる。圧縮率を監視するための方法は、全体が引用によりこの明細書中に援用される、クエイサKQuaissa、アブダトMAbdatおよびプルメPPlumeによる、LZWデータ圧縮における辞書サイズの適応制限AdaptiveLimitationoftheDictionarySizeinLZWDataCompression情報理論とその応用シンポジウムIEEEInternationalSymposiumonInformationTheoryISIT95、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.特殊コード.98ビット上.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の記号9041wを抽出する。入力ストリング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の記号9041wを記憶する。ステップ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における次の記号9042edを、空であるストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500は、ストリングレジスタ512図5の内容、すなわち、入力ストリング502における次の記号9042edを、探索キー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に続き、入力ストリングポインタは入力ストリングにおける次の記号9043wを指し、ストリングレジスタは記号9042edを記憶する。ステップ601図6では、制御ロジック500図5が、ストリングレジスタ512図5に記憶されている記号9042を、入力ストリング502における次の記号9043と連結する。ステップ602図6では、制御ロジック500図5は、一連の記号edwを探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号edwを求めて辞書308を探索する。ステップ604図6では、一連の記号edwは見つけられない。ステップ606図6では、一連の記号edwが、インデックス5で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号edwはその接頭語を指すインデックス4とともに記憶される。というのも、記号edがインデックス4で記憶されているからである。一連の記号edwは、インデックス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における次の記号9043wを、ストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500は、ストリングレジスタ512図5の内容、すなわち、入力ストリング502における次の記号9043wを探索キー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は入力ストリングにおける次の記号9044eを指し、ストリングレジスタ512図5は記号9043wを記憶する。ステップ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の内容は記号9044eを指す。ストリングレジスタ512図5は空である。ステップ601図6では、制御ロジックは、入力ストリング502図5における次の記号9044を、空であるストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500は、ストリングレジスタ512図5の内容、すなわち、入力ストリング502における次の記号9044eを探索キー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を空にセットする。ステップ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に続き、入力ストリングポインタは入力ストリングにおける次の記号9045weを指し、ストリングレジスタは記号9044eを記憶する。ステップ601図6では、制御ロジック500図5は、記号9044を、入力ストリング502における次の記号9045と連結する。ステップ602図6では、制御ロジック500図5は、一連の記号eweを探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号eweを求めて辞書308を探索する。ステップ604図6では、一連の記号eweは見つけられない。ステップ606図6では、一連の記号eweが、インデックス8で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号eweがその接頭語を指すインデックス7とともに記憶される。というのも、記号eがインデックス7で記憶されているからである。一連の記号eweは、インデックス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における次の記号9045weを、空であるストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500は、ストリングレジスタ512図5の内容、すなわち入力ストリング502における次の記号9045weを探索キー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に続き、入力ストリングポインタは入力ストリングにおける次の記号9046eを指し、ストリングレジスタは記号9045weを記憶する。ステップ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における次の記号9046eを探索キー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に続き、入力ストリングポインタは、入力ストリングにおける次の記号9047weを指し、ストリングレジスタは記号9046eを記憶する。ステップ601図6では、制御ロジック500図5は、記号9046を、入力ストリング502における次の記号9047と連結する。ステップ602図6では、制御ロジック500図5は、一連の記号eweを探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号eweを求めて辞書308を探索する。ステップ604図6では、一連の記号eweがインデックス8で見つけられる。ステップ620図6では、制御ロジック500図5が入力ストリングポインタ514を増分して、入力ストリング502図5における次の記号9048を指す。ステップ621図6では、制御ロジック500図5が、記号の数を3に増分する。ステップ622図6では、制御ロジック500図5は、エンコードすべきさらなる記号があることを、入力ストリング502図5から判断する。処理がステップ601図6に続き、入力ストリングポインタ514図5は入力ストリングにおける次の記号9048bを指し、ストリングレジスタ512図5は記号eweを記憶する。ステップ601では、制御ロジック500図5は、記号9048を、ストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500図5は、ストリングレジスタ512図5の内容ewebを探索キー504として、コーディングテーブル300に送る。コーディングテーブルは、一連の記号ewebを求めて辞書308を探索する。ステップ604図6では、一連の記号ewebは見つけられない。ステップ606図6では、一連の記号ewebは、インデックス11で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号ewebが、その接頭語を指すインデックス8とともに記憶される。というのも、記号eweがインデックス8で記憶されているからである。一連の記号ewebは、インデックス8として既に記憶されたeweおよび普通に記憶されているbを含む8,bとして、インデックス11で記憶される。ストリングレジスタ512図5における記号の数は3である。こうして、ステップ612図6では、制御ロジック500図5は、最後に加えられたストリングにおける記号の最後の数が1ではないことを判断し、ステップ614図6では、制御ロジック500図5は、エンコードされたストリング314図3上でコードワード9066を送る。コードワード9066は、記号のストリングeweが記憶されているインデックス8を含み、図4Bに関連して記載されるように1が前に付される。ステップ622図6では、制御ロジック500図5は、入力ストリング502にEOSではない別の有効な記号があることを判断し、処理がステップ601図6に続く。ストリングポインタレジスタ514図5の内容は記号9048を指す。ストリングレジスタ512図5は空である。ステップ601図6では、制御ロジックは、入力ストリング502図5における次の記号9048bを、空であるストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500は、ストリングレジスタ512図5の内容、すなわち入力ストリング502における次の記号9048bを探索キー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を指し、ストリングレジスタは記号9048bを記憶する。ステップ601図6では、制御ロジック500図5が、記号9048を、ストリングレジスタ512図5に記憶されている次の記号9049と連結する。ステップ602図6では、制御ロジック500図5は、一連の記号bweを探索キー504として、コーディングテーブル300に送る。コーディングテーブル300は、一連の記号bweを求めて辞書308を探索する。ステップ604図6では、一連の記号bweは見つけられない。ステップ606図6では、一連の記号bweは、インデックス13で一連の記号を辞書308に記憶することにより学習される。一連の記号は普通には記憶されない。代わりに、一連の記号bweは、その接頭語を指すインデックス12とともに記憶される。というのも、記号bがインデックス12で記憶されているからである。一連の記号bweは、インデックス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にEOSではない別の有効な記号があることを判断し、処理がステップ601に続く。入力ストリングポインタ514図5の内容は記号9049を指す。ストリングレジスタ512は空である。ステップ601図6では、制御ロジックは、入力ストリング502図5における次の記号9049weを、空であるストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500は、ストリングレジスタ512図5の内容、すなわち入力ストリング502における次の記号9049weを探索キー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に続き、入力ストリングポインタは、入力ストリングにおける次の記号90410tを指し、ストリングレジスタは記号9049weを記憶する。ステップ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における次の記号90410tを、空であるストリングレジスタ512図5の内容と連結する。ステップ602図6では、制御ロジック500は、ストリングレジスタ512図5の内容、すなわち入力ストリング502における次の記号90410tを探索キー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により行なわれる。この発明は、その好ましい実施例に関連して特に例示および記載されてきたが、添付の特許請求の範囲により包含されるこの発明の範囲から逸脱することなく、形状および詳細をこの明細書中でさまざまに変更し得ることを、当業者は理解するであろう。"