(57)【特許請求の範囲】
【請求項１】
データ文字の入力ストリームを出力ストリームに変換する方法であって、前記入力ストリームは、同じデータ文字の少なくとも１つのランを含み、前記方法は、
前記入力ストリームにおける所定の数の隣接するデータ文字が同じであるときを検出することにより、前記入力ストリームでランが発生するときを検出するステップを含み、
ここで、同じデータ文字の検出されたランは、隣接するランセグメントの長さが１文字分異なるように文字長が増加する複数の連続するランセグメントを含み、さらに、前記方法は、
前記検出されたランにおけるデータ文字の数を表す数を決定するステップと、
前記表す数に数学的アルゴリズムを適用して、前記検出されたランの前記連続するセグメントにそれぞれ対応する、数値的に増大する数値コードのシーケンスを決定するステップと、
検出されたランごとに、前記検出されたランの前記連続するランセグメントに対応するコードを出力するステップと、
前記入力ストリームにおける所定の数の隣接するデータ文字が同じでないときを決定することにより、前記入力ストリームでランが発生しないときを検出するステップと、
検出されたランの一部でないデータ文字の表現を出力するステップと
を含み、
ここで、前記出力ストリームは、前記検出されたランのそれぞれの出力されたコードと、非ラン文字の出力された表現を含む、
ことを特徴とする方法。
【請求項２】
前記検出されたランは、前記連続するランセグメントの後に続くさらなるデータ文字を含み、前記さらなるデータ文字は、さらなる連続するランセグメントを含むランを形成し、前記方法は、さらに加えて、
前記さらなるデータ文字の数を決定するステップと、
前記さらなるデータ文字の数を使用した前記数学的アルゴリズムを再帰的に利用して、前記さらなる連続するランセグメントにそれぞれ対応する、前記シーケンスのさらなるコードを決定するステップと、
前記さらなるコードを出力するステップと、
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記数学的アルゴリズムを適用するステップ、および、前記コードを出力するステップは、
ランセグメントにおけるデータ文字の数を示すインデックスを初期化するステップと、
前記シーケンスの現存コードを出力し、前記シーケンスを、前記シーケンスの次に続くコードに進めるステップと、
前記表す数を、前記インデックスをそこから減算することによって、減少させるステップと、
前記インデックスを１だけ増分するステップと、
前記減少された表す数を、前記増分されたインデックスと比較するステップと、
前記現存コードを出力するステップから、前記減少された表す数を前記増分されたインデックスと比較するステップに至る上記ステップを、前記減少された表す数が前記増分されたインデックスより小さくなるまで、繰り返すステップと、
を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記数学的アルゴリズムを適用するステップ、および、前記コードを出力するステップは、
第１の式を利用して、前記表す数に関して前記検出されたランに含まれる前記連続するランセグメントの数を計算する、第１の計算を実行するステップと、
前記連続するランセグメントの数を前記シーケンスの現存コードに加算することを含む第２の式を使用して、限界を計算する第２の計算を実行するステップと、
前記シーケンスの現存コードを出力し、前記シーケンスを、前記シーケンスの次に続くコードに進め、前記次に続くコードが前記限界に等しくなるまでこれを行うステップと、
を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記第１の式は、
ｎ＝［（（８Ｔ＋１）１／２−１）／２］の整数部
を含み、
ここで、ｎは前記検出されたランに含まれる前記連続するセグメントの数、Ｔは前記表す数であり、
前記第２の式は、
Ｌ＝［(コード＋ｎ)−１］
を含み、
ここで、Ｌは前記限界、コードは前記限界が計算されたときの前記シーケンスの現存コードである、
ことを特徴とする請求項４に記載の方法。
【請求項６】
前記ランセグメントにおけるデータ文字の数を、それに対応する各コードと共に含む、ランセグメントデータを格納するステップと、
前記格納されたランセグメントデータにアクセスして、現在検出されたランが、格納されたランセグメントのデータ文字の数を含むか否かを決定するステップと、
前記格納されたランセグメントに対応する格納されたコードを出力するステップと、
をさらに含む、ことを特徴とする請求項１に記載の方法。
【請求項７】
検出されたランに対して、ランのデータ文字を出力するステップをさらに含み、前記出力ストリームはランの出力された文字を含む、ことを特徴とする請求項１に記載の方法。
【請求項８】
非ラン文字の出力された表現のそれぞれに対して、前記シーケンスを、前記シーケンスの次に続くコードに進めるステップをさらに含む、ことを特徴とする請求項１に記載の方法。
【請求項９】
データ文字の入力ストリームを出力ストリームに変換する装置であって、前記入力ストリームは、同じデータ文字の少なくとも１つのランを含み、前記装置は、
前記入力ストリームにおける所定の数の隣接するデータ文字が同じであるときを検出することにより、前記入力ストリームでランが発生するときを検出する手段を含み、
ここで、同じデータ文字の検出されたランは、隣接するランセグメントの長さが１文字分異なるように文字長が増加する複数の連続するランセグメントを含み、さらに、前記装置は、
前記検出されたランにおけるデータ文字の数を表す数を決定する手段と、
前記表す数に数学的アルゴリズムを適用して、前記検出されたランの前記連続するランセグメントにそれぞれ対応する、数値的に増大する数値コードのシーケンスを決定する手段と、
各検出されたランについて前記連続するランセグメントに対応するコードを出力する手段と、
前記入力ストリームにおける所定の数の隣接するデータ文字が同じでないときを検出することにより、前記入力ストリームでランが発生しないときを検出する手段と、
検出されたランの一部でないデータ文字の表現を出力する手段と
を含み、
ここで、前記出力ストリームは、前記検出されたランのそれぞれの出力されたコードと、前記非ラン文字の出力された表現を含む、
ことを特徴とする装置。
【請求項１０】
前記検出されたランは、前記連続するランセグメントの後に続くさらなるデータ文字を含み、前記さらなるデータ文字は、さらなる連続するランセグメントを含むランを形成し、前記装置は、さらに加えて、
前記さらなるデータ文字の数を決定する手段と、
前記さらなるデータ文字の数を使用した前記数学的アルゴリズムを再帰的に利用して、前記さらなる連続するランセグメントにそれぞれ対応する、前記シーケンスのさらなるコードを決定する手段と、
前記さらなるコードを出力する手段と、
を含むことを特徴とする請求項９に記載の装置。
【請求項１１】
前記数学的アルゴリズムを適用する手段、および、前記コードを出力する手段は、
ランセグメントにおけるデータ文字の数を示すインデックスを初期化する動作と、
前記シーケンスの現存コードを出力し、前記シーケンスを、前記シーケンスの次に続くコードに進める動作と、
前記表す数を、前記インデックスをそこから減算することによって、減少させる動作と、
前記インデックスを１だけ増分する動作と、
前記減少された表す数を、前記増分されたインデックスと比較する動作と、
前記現存コードを出力する前記動作から、前記減少された表す数を前記増分されたインデックスと比較する前記動作までを、前記減少された表す数が前記増分されたインデックスより小さくなるまで、繰り返す動作と、
を実行することを特徴とする請求項９に記載の装置。
【請求項１２】
前記数学的アルゴリズムを適用する手段、および、前記コードを出力する手段は、
第１の式を利用して、前記表す数に関して前記検出されたランに含まれる前記連続するランセグメントの数を計算する、第１の計算を実行する手段と、
前記連続するランセグメントの数を前記シーケンスの現存コードに加算することを含む第２の式を使用して、限界を計算する第２の計算を実行する手段と、
前記シーケンスの現存コードを出力し、前記シーケンスを、前記シーケンスの次に続くコードに進め、前記次に続くコードが前記限界に等しくなるまでこれを行う手段と、
を含むことを特徴とする請求項９に記載の装置。
【請求項１３】
前記第１の式は、
ｎ＝［（（８Ｔ＋１）１／２−１）／２］の整数部
を含み、
ここで、ｎは前記検出されたランに含まれる前記連続するセグメントの数、Ｔは前記表す数であり、
前記第２の式は、
Ｌ＝［(コード＋ｎ)−１］
を含み、
ここで、Ｌは前記限界、コードは前記限界が計算されたときの前記シーケンスの現存コードである、
ことを特徴とする請求項１２に記載の装置。
【請求項１４】
前記ランセグメントにおけるデータ文字の数を、それに対応する各コードと共に含む、ランセグメントデータを格納する手段と、
前記格納されたランセグメントデータにアクセスして、現在検出されたランが、格納されたランセグメントのデータ文字の数を含むか否かを決定する手段と、
前記格納されたランセグメントに対応する格納されたコードを出力する手段と、
をさらに含む、ことを特徴とする請求項９に記載の装置。
【請求項１５】
検出されたランのデータ文字を出力する手段をさらに含み、前記出力ストリームはランの出力された文字を含む、ことを特徴とする請求項９に記載の装置。
【請求項１６】
非ラン文字の出力された表現のそれぞれに対して、前記シーケンスを、前記シーケンスの次に続くコードに進める手段をさらに含む、ことを特徴とする請求項９に記載の装置。
【請求項１７】
数値的に増大する数値コードのシーケンスを生成するコードカウンタをさらに含み、
前記シーケンスの現存コードは、前記コードカウンタの既存コードにより提供され、
前記コードカウンタに１を加算することによって、前記シーケンスの次に続くコードに前記シーケンスが進められる、
ことを特徴とする請求項１１または１２に記載の装置。
【発明の詳細な説明】
【０００１】
（関連出願の相互参照）
１９９９年３月８日出願のＣｏｏｐｅｒの「Ｄａｔａ  Ｃｏｍｐｒｅｓｓｉｏｎ  Ｍｅｔｈｏｄ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｗｉｔｈ  Ｅｍｂｅｄｄｅｄ  Ｒｕｎ−Ｌｅｎｇｔｈ  Ｅｎｃｏｄｉｎｇ」という名称の米国特許出願第０９／２６４，２６９号を参照することにより、その出願が本明細書に組み込まれる。
【０００２】
（発明の背景）
（１．発明の分野）
本発明は、データ圧縮に関し、特に、今まで従来技術において開発されていない埋込み型ランレングス符号化（ｅｍｂｅｄｄｅｄ ｒｕｎ−ｌｅｎｇｔｈ ｅｎｃｏｄｉｎｇ）を用いたデータ圧縮実施形態を提供することに関する。
【０００３】
（２．従来技術の説明）
Ａｂｒａｈａｍ  Ｌｅｍｐｅｌ教授およびＪａｃｏｂ  Ｚｉｖ教授は、ＬＺデータ圧縮（ｄａｔａ ｃｏｍｐｒｅｓｓｉｏｎ）および圧縮解除（ｄｅｃｏｍｐｒｅｓｓｉｏｎ）システムのための理論的な基礎を提供しており、これが今日、幅広く使用されている。彼らの独創性に富んだ２点の論文は、「ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｈｅｏｒｙ」、ＩＴ−２３−３、１９７７年５月、３３７〜３４３ページ、および「ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｈｅｏｒｙ」、ＩＴ−２４−５、１９７８年９月、５３０〜５３６ページにおいて見られる。ユビキタスに使用されたデータ圧縮および圧縮解除システムはＬＺＷとして知られており、Ｖ．４２  ｂｉｓモデム圧縮および圧縮解除のための規格として採用され、これが、１９８５年１２月１０日発行のＷｅｌｃｈの米国特許第４，５５８，３０２号において記載されている。ＬＺＷは、ＧＩＦおよびＴＩＦＦ画像通信プロトコルにおいて使用される圧縮および圧縮解除の規格として採用されている。
【０００４】
別のタイプのデータ圧縮および圧縮解除は、ランレングス符号化（ＲＬＥ）と呼ばれ、繰り返し文字ラン（ｒｅｐｅａｔｉｎｇ ｃｈａｒａｃｔｅｒ ｒｕｎ）を、文字およびランの長さを示す圧縮コードを提供することによって、圧縮する。したがって、ＲＬＥは、同じ文字の長い文字列の符号化に効果的である。たとえば、ＲＬＥは、長い空白のシーケンスの圧縮に効果的であり、これはデータファイルの開始部分に含まれる可能性がある。ＲＬＥは、陸空画像（ｌａｎｄ−ｓｋｙ ｉｍａｇｅ）の空部分（ｓｋｙ ｐｏｒｔｉｏｎ）など、画像が、同じ値を有する連続ピクセルの長いランを含む場合の、画像圧縮にも効果的である。
【０００５】
従来技術では、ランレングス符号化がＬＺシステムと結合されており、これを、データをランレングス符号器に適用し、次いでランレングス符号化されたデータをＬＺベースのシステムに適用することによって行われていた。このようなアーキテクチャでは、ランレングス符号器が圧縮器（ｃｏｍｐｒｅｓｓｏｒ）のフロントエンドで利用され、ランレングス復号器が圧縮解除器（ｄｅｃｏｍｐｒｅｓｓｏｒ）の出力側で利用される。このようなシステムは、装置、費用、制御オーバーヘッドおよび処理時間の増大の欠点を被る。
【０００６】
ランレングス符号化は、１９９５年２月１４日発行のＳｅｒｏｕｓｓｉ他の米国特許第５，３８９，９２２号のＬＺＷベースのシステムにも含まれている。この特許のシステムでは、圧縮器からのある出力コードが、繰り返し入力データ文字のランの前で抑制される。特殊なラン拡張エンジンが、圧縮解除器の入力側で利用されて、損失コード（ｍｉｓｓｉｎｇ ｃｏｄｅ）が再生成（ｒｅｇｅｎａｒａｔｅ）される。
【０００７】
データ文字ランの符号化を含む、別のデータ圧縮および圧縮解除システムが、１９９９年１月１９日発行のＷｅｌｃｈ他の米国特許第５，８６１，８２７号において開示されている。このシステムの圧縮器では、部分文字列Ｗおよび文字Ｃが見つかったとき、新しい文字列が、Ｃを拡張文字として、文字列ＰＷ上に格納され、Ｐは、最後に伝送された出力圧縮コードにおいて搬送された文字列であった。この圧縮アルゴリズムでは、文字のランが、その長さに関わらず、２つの圧縮コードにおいて符号化される。このシステムの圧縮解除器は、特殊な、認識されないコード処理を使用して、圧縮器との同期を維持する。
【０００８】
データ文字ランの符号化を含む、別のデータ圧縮システムは、前記米国特許出願第０９／２６４，２６９号において開示されている。この特許出願の圧縮器では、順に入力をルックアヘッドして、隣接する数値的に増大するセグメントがランにおいて存在するかどうかを決定することによって、ランが処理される。
【０００９】
本発明の目的は、ランレングス符号化を利用したさらなるデータ圧縮実施形態を提供することにある。ランにおける文字数をカウントするのみで、そのための適切な出力コードを提供する実施形態を提供することが特に望ましい。
【００１０】
（発明の概要）
本発明に係る圧縮器（ｃｏｍｐｒｅｓｓｏｒ）は、入力データ文字（ｉｎｐｕｔ ｄａｔａ ｃｈａｒａｃｔｅｒｓ）のランにおける文字数（ｎｕｍｂｅｒ ｏｆ ｃｈａｒａｃｔｅｒｓ）を決定し、ランの数値的に増大する隣接したセグメントにそれぞれ対応する、数値的に増大する出力コードのシーケンスを数学的に生成する。複数の実施形態を開示しており、これらは反復的な数学的アルゴリズムおよび二次式アルゴリズムをそれぞれ利用して、ランを処理する。互いに異なる連続文字が、直接的に、かつ、圧縮器コードカウンタ（ｃｏｍｐｒｅｓｓｏｒ ｃｏｄｅ ｃｏｕｎｔｅｒ）の増分との同期において、伝送される。
【００１１】
（好適実施形態の説明）
図面を詳細に論ずる前に、図２に示した流れ図は、図１および図６の実施形態に汎用的に用い得ることを知ることが有用である。図１の実施形態では、図２のラン処理論理が図３の流れ図によって実施され、図６の実施形態では、図２のラン処理論理が図７の流れ図によって実施される。図１および図６の実施形態では、図２の残余ラン処理論理が、図４の流れ図によって実施される。図１および図６の実施形態は、非格納構成（ｎｏｎ−ｓｔｏｒａｇｅ ｃｏｎｆｉｇｕｒａｔｉｏｎ）である。
【００１２】
図９および図１０の実施形態は、格納構成（ｓｔｏｒａｇｅ ｃｏｎｆｉｇｕｒａｔｉｏｎ）を利用し、図１１の流れ図に従って制御される。この実施形態は、図３の反復的な数学的アルゴリズム（ｉｔｅｒａｔｉｖｅ ｍａｔｈｅｍａｔｉｃａｌ ａｌｇｏｒｉｔｈｍ）を利用する。
【００１３】
続く説明から、図１および図６の実施形態の原理構成において、ラン全体が入力から吸収（ａｂｓｏｒｂｅｄ）され、それに対応する適切なコードが、さらなる入力取り出し（ｉｎｐｕｔ ｆｅｔｃｈｉｎｇ）を行うことなく、ランにおける文字数が確立された後に出力されることが明らかになるであろう。ランは、図３および図７に詳述された数学的アルゴリズムによって「オフライン」で効果的に処理される。
【００１４】
以下に記載されたすべての実施形態は、可変長出力において予見され、各実施形態のコードサイズレジスタ（Ｃｏｄｅ Ｓｉｚｅ ｒｅｇｉｓｔｅｒ）が利用されて、これが実施される。よく知られているように、たとえば、８ビットのアルファベットを有するＡＳＣＩＩ実施において、コードサイズが９ビットで開始し、順次に１０、１１、１２などのビットへ、それぞれコード５１２、１０２４、２０４８などで、増大することができる。実施形態を、たとえば、よく知られているように、１２ビットの固定長コード出力において予見できることも、さらに理解されたい。
【００１５】
図１を参照すると、データ圧縮器（ｄａｔａ ｃｏｍｐｒｅｓｓｏｒ）１０が例示され、これは、入力１１で加えられた入力データ文字のストリームを、対応する圧縮コードのストリームに、出力１２で圧縮する。圧縮器１０は、現在文字（Ｃｕｒｒｅｎｔ Ｃｈａｒａｃｔｅｒ）レジスタ１３、コードサイズレジスタ１４、ルックアヘッド（Ｌｏｏｋ−Ａｈｅａｄ）バッファ１５、ランバッファ１６、Ｒ−レジスタ１７、Ｔ−レジスタ１８およびｎ−レジスタ１９として示された、作業レジスタ（ｗｏｒｋｉｎｇ ｒｅｇｉｓｔｅｒ）を含む。圧縮器１０はさらに、ランおよび非ラン文字（ｎｏｎ−ｒｕｎ ｃｈａｒａｃｔｅｒ）を、以下に記載される方法において処理するために使用されるコード値を順次生成するための、コードカウンタ（Ｃｏｄｅ Ｃｏｕｎｔｅｒ）２２を含む。
【００１６】
圧縮器１０はさらに、現在文字レジスタ１３における文字と、ルックアヘッドバッファ１５における文字の間の比較を実行して、さらに記載される方法においてランが開始直前であるか否かを決定する、ルックアヘッド比較論理（ｌｏｏｋ−ａｈｅａｄ ｃｏｍｐａｒｉｓｏｎ ｌｏｇｉｃ）２３を含む。圧縮器１０はさらに、ランの文字を、論理２３によって検出中のランに従って、獲得（ａｃｑｕｉｒｉｎｇ）かつカウント（ｃｏｕｎｔｉｎｇ）するためのラン獲得論理（ｒｕｎ ａｃｑｕｉｓｉｔｉｏｎ ｌｏｇｉｃ）２４を含む。ランにおける文字の数は、論理２４によってカウントされたとき、Ｒ−レジスタ１７に格納される。ランバッファ１６は、これらの機能の実行において必要とされた、いかなるバッファリングも提供する。
【００１７】
圧縮器１０はまた、Ｒ、Ｔおよびｎ計算論理２５も含み、これらが、以下で説明される方法における、獲得されたラン（ａｃｑｕｉｒｅｄ ｒｕｎ）の処理において利用される。圧縮器１０はさらに、処理されたランの文字を廃棄（ｄｉｓｃａｒｄｉｎｇ）するための文字廃棄論理（ｃｈａｒａｃｔｅｒ ｄｉｓｃａｒｄ ｌｏｇｉｃ）２６を含む。さらに、圧縮器１０に含まれたものは、圧縮器１０の動作を制御するための制御２７であり、これは、図２〜４の動作流れ図に従って、以下で記載される方法において行われる。
【００１８】
また、入力１１で受信された入力データ文字ストリームをバッファリングする、入力文字バッファ（Ｉｎｐｕｔ Ｃｈａｒａｃｔｅｒ Ｂｕｆｆｅｒ）３０も含まれる。個別の入力データ文字が、入力文字バッファ３０から、バス３１を介して、現在文字レジスタ１３、ルックアヘッドバッファ１５およびラン獲得論理２４へ、以下で記載される動作に従って加えられる。圧縮器１０は、入力データ文字を、入力文字バッファ３０から制御バス３２を介して獲得することを制御する。
【００１９】
簡単に述べると、圧縮器１０の動作は以下の通りである。入力データ文字が、入力文字バッファ３０から現在文字レジスタ１３へ、かつ、ルックアヘッドバッファ１５へ取り込まれ、論理２３が現在文字（Ｃｕｒｒｅｎｔ Ｃｈａｒａｃｔｅｒ）と次の２つのルックアヘッド文字（ｎｅｘｔ ｔｗｏ ｌｏｏｋ−ａｈｅａｄ ｃｈａｒａｃｔｅｒｓ）の間の比較を実行することが可能となる。３つの文字が同じである場合、ラン処理が実行される。そうでない場合、現在文字レジスタ１３における文字が出力され、現在文字の後に続く次の文字が、現在文字レジスタ１３に取り込まれる。
【００２０】
文字ランが検出された場合、ランにおける文字の数が決定され、ランを開始して現在文字レジスタ１３に存在する文字が出力される。次いで、ラン処理論理が呼び出されて、ランにおいて存在する、数値的に増大するランセグメントが数学的に決定される。具体的には、現在文字レジスタ１３における文字の後に続く、２文字、４文字、５文字などの隣接したランセグメントが、ランにおいて存在するかどうかが決定される。このような検出された各ランセグメントについて、コードカウンタ２２におけるコードが出力され、コードカウンタ２２が１だけ増分される。この処理は、各隣接したセグメントにおける文字の数を、ランにおける文字の数から、シーケンスにおける次のランセグメントを入れるために不十分な文字が残るまで、反復的に減算することによって実施される。
【００２１】
これが起こり、３文字以上が処理されるために残ったとき、現在文字レジスタ１３において存在する文字が出力され、コードカウンタ２２が再度１だけ進められる。反復処理が、２文字のランセグメントにリセットされ、処理が、３つより少ないラン文字が残るまで、継続される。これが起こったとき、残余ラン処理論理（ｒｅｓｉｄｕａｌ ｒｕｎ ｐｒｏｃｅｓｓｉｎｇ ｌｏｇｉｃ）が呼び出される。
【００２２】
残余ラン処理（ｒｅｓｉｄｕａｌ ｒｕｎ ｐｒｏｃｅｓｓｉｎｇ）では、すべての検出されたラン文字が処理されるまで、残余ラン文字（ｒｅｓｉｄｕａｌ ｒｕｎ ｃｈａｒａｃｔｅｒ）が非ラン文字（ｎｏｎ−ｒｕｎ ｃｈａｒａｃｔｅｒ）として処理される。
【００２３】
現在文字レジスタ１３、バッファ１５および１６、レジスタ１７〜１９、コードカウンタ２２および論理２３〜２６は、文字ラン処理を実行することにおいて利用され、これは図２〜４に関して以下で説明されるように行われる。図２〜４の制御流れ図は、圧縮器１０によって、本発明によるデータ圧縮を実行するために実行される、詳述された動作を例示する。制御２７は、状態機械など、動作の実行を制御するための適切な回路を含むものとみなされる。
【００２４】
図２を参照し、図１を引き続き参照すると、ブロック４０で、コードカウンタ２２が、最初の使用可能コード、たとえば、ＡＳＣＩＩ環境においては２５８に初期化される。ブロック４１で、コードサイズレジスタ１４が、開始コードサイズ、たとえば、ＡＳＣＩＩ実施形態においては９ビットに初期化される。
【００２５】
ブロック４２で、最初の入力文字が現在文字レジスタ１３に取り込まれ、ブロック４３で、現在文字レジスタ１３における文字が出力１２に提供される。この文字が出力されていても、これがなお現在文字レジスタ１３において存在することを理解されたい。
【００２６】
処理がブロック４４に進行し、レジスタ１３における現在文字が、現在文字の後に続く次の２つのルックアヘッド文字に対して検査されて、これらが同じかどうかが決定される。この処理は、論理２３によって、ルックアヘッドバッファ１５に取り込まれた適切な文字を利用して行われる。
【００２７】
ブロック４４が、現在文字を、現在文字の後に続く次の２つのルックアヘッド文字と比較して、同じ文字のランが開始直前であるかどうかを決定する。現在文字が、次の２つのルックアヘッド文字と同じである場合、ブロック４４のＹＥＳ分岐を取ることによって、ラン処理が開始する。２つのルックアヘッド文字のうち１つが現在文字と合致しなかった場合、ブロック４４のＮＯ分岐が取られて、非ラン処理が実行される。
【００２８】
図２の論理において、ブロック４４が、文字ランが発生する直前であると決定したとき（ＹＥＳ分岐）、現在文字レジスタ１３における文字が出力されるべきであることを理解されたい。同様に、ブロック４４が、ランが発生する直前でないと決定したとき（ＮＯ分岐）、再度、現在文字が出力されるべきである。節約のため、現在文字が、どの分岐が取られるかに関係なく、出力されるので、ブロック４３が、ブロック４４の判断の前にアクションを実行する。
【００２９】
ブロック４４から非ラン処理のＮＯ分岐が取られた場合、現在文字がすでにブロック４３で出力されている。ブロック４５で、コードカウンタ２２におけるコードが検査されて、コードサイズにおける増大が必要とされるかどうかが決定される。そうであった場合、処理がブロック４６に進行し、コードサイズレジスタ１４が１だけ増分される。コードサイズにおける増大が必要とされなかった場合、ブロック４６が迂回されて、処理がブロック４７に進行する。ブロック４７で、コードカウンタ２２が１だけ増分されて、ブロック４３の現在文字出力との同期が維持される。
【００３０】
処理がブロック４８に進行し、現在文字の後に続く文字が現在文字レジスタ１３に取り込まれる。次いで、制御がブロック４３に戻り、入力データの処理が継続される。
【００３１】
ブロック４４の判断が、同じ文字のランが開始することを示したとき、ＹＥＳ分岐が取られてブロック５０へ進行する。ブロック５０で、Ｒ−レジスタ１７が、１に、現在文字の後に続いて現在文字と同じである一連の文字の数を加えたものに、設定される。ラン獲得論理２４が利用されて、この動作が実行される。ラン獲得処理において必要とされるいかなるバッファリングも、ランバッファ１６によって提供される。ランの文字が、ラン獲得論理２４によって、入力文字バッファ３０から、バス３１を介して、圧縮器１０の制御下で、制御バス３２を利用して、獲得されることを理解されたい。したがって、ブロック５０は、Ｒ−レジスタ１７に、ブロック４４で検出されたランにおける文字の数を入れる。現在文字レジスタ１３は、ラン文字の値を保持する。
【００３２】
制御がブロック５４に進行し、これは、ランを表現する圧縮コードのシーケンスを計算するためのラン処理論理を、概略的に表現する。図１の実施形態では、ラン処理論理５４が、図３の制御流れ図を利用して実施される。多くともランの２文字を除いてすべてを処理した後、残余ラン処理論理ブロック５８に、これらの残余の１文字または２文字が、収容されるように入れられる。ブロック５８の残余ラン処理論理は、図４の制御流れ図を利用して実施される。
【００３３】
ランが処理された後、制御がブロック６０に進行し、現在文字の後に続くランのＲ−１個の文字が廃棄される。文字廃棄論理２６が利用されて、これが実施される。これらの文字がランバッファ１６において保持された場合、論理２４がバッファをクリアする。ラン文字自体がブロック５４および５８内で利用されないので、ブロック６０の機能を単に、次に処理された文字がランの後に続く文字であるようにフラグ（図示せず）をセットすることのみにすることができる。その後、上でブロック４５および４６に関して記載されたコードサイズ検査が、ブロック６１および６２で実行される。ブロック６３で、コードカウンタ２２が１だけ増分される。ブロック６４で、論理２６の制御下で、ブロック６０で廃棄された文字の後に続く次の文字が、現在文字レジスタ１３に取り込まれて、処理が継続される。したがって、次いで、制御がブロック４３に戻る。
【００３４】
図３および図４に関して記載された方法において、ラン処理論理５４および残余ラン処理論理５８が、ラン全体の処理を提供することを理解されたい。図２のブロック６０および６４に従って、すべてのラン文字がその後廃棄され、処理が、ランの後に続く現在文字により継続されることを、さらに理解されたい。
【００３５】
要約すると、判断ブロック４４がランの発生を検出し、ランが、ブロック５０、５４および５８で処理されることを理解されたい。非ランデータの処理は、ブロック４５〜４８によって実行される。ブロック６０〜６４は、ランが吸収され処理された後に続く処理を実行する。
【００３６】
図３を参照し、図１および図２を引き続き参照すると、図１の実施形態において利用されたラン処理論理５４の詳細を例示する、制御流れ図が例示される。上で論じたように、図２のブロック４４で検出されたランは、論理２４によって、ブロック５０でＲ−レジスタ１７に設定された文字の数Ｒにより獲得された、Ｒ個の文字からなる。上で、かつ、前記第０９／２６４，２６９号でさらに論じられたように、ランは、現在文字レジスタ１３において保持されたその最初の文字と、その後に続く、隣接する数値的に増大する同じ文字のセグメントからなると見なされる。ブロック７０で、Ｔ−レジスタ１８における変数ＴがＲ−１に設定される。ブロック７１で、ｎ−レジスタ１９におけるインデックスｎが２に設定される。
【００３７】
記載された論理において、インデックスｎが反復的に１ずつ増分され、Ｔ（ランにおいて残っている、処理される文字の数）がｎ（次に続く隣接したランセグメントにおいて必要とされた文字の数）より小さくなるまで、反復的にＴから減算される。ランにおいて存在することが数学的に判明したこのような各ランセグメントについて、コードカウンタ２２におけるコードが出力され、コードカウンタ２２が１ずつ増分される。
【００３８】
したがって、処理がブロック７２に進行し、Ｔがｎより小さいか否かが決定される。そうでなかった場合、制御がブロック７３に進行し、コードカウンタ２２におけるコードが出力される。ブロック７４および７５で、ブロック４５および４６に関して上で論じられたコードサイズ論理が実行される。ブロック７６で、コードカウンタ２２が１だけ増分されて、Ｔがセグメントに入れるために依然として十分大きい状態であるべきであった場合、コードカウンタ２２が、ランの次のセグメントの処理のために準備される。
【００３９】
したがって、ブロック７７において、ＴがＴ−ｎに設定され、ブロック７８では、インデックスｎがｎ＋１に設定される。これらのアクションは、レジスタ１８および１９に関して、それぞれ実行される。制御がブロック７２に戻り、減少されたＴの値を、増分されたｎの値に対して検査する。Ｒ、Ｔおよびｎに関して、ブロック７０〜７２、ブロック７７および７８で実行された計算および比較が、図１の論理２５によって実行されることを理解されたい。
【００４０】
Ｔが減少され、ｎが増加されて、Ｔがｎより小さいポイントになったとき、ブロック７２からＹＥＳ分岐が取られて、ブロック８０へ進行する。ブロック８０が、Ｔが３より小さいかどうかを決定する。Ｔが３以上であった場合、ブロック７１〜７８によって表されたループをリセットして、ランのこれらの残りのＴ個の文字を処理するために、十分な文字がランにおいて残っている。
【００４１】
したがって、Ｔが３以上であったとき、ブロック８０からＮＯ分岐が取られて、ブロック８１および８２へ進行し、上でブロック４５および４６に関して論じられたコードサイズ論理が実行される。ブロック８３で、コードカウンタ２２が１だけ増分されて、圧縮コード出力の同期が維持される。
【００４２】
ランの残りのＴ個の文字を処理するための準備において、ブロック８４で、現在文字レジスタ１３における文字が出力され、したがって、ブロック８５で、Ｔ−レジスタ１８におけるＴの値がＴ−１に設定される。次いで、制御がブロック７１に戻り、ｎ−レジスタ１９におけるインデックスｎが２にリセットされる。
【００４３】
ブロック７１〜７８からなるループの１つまたは複数の反復の後、Ｔは、３より小さい値に減少する。制御がブロック８０に入り、Ｔが３より小さいとき、ブロック８０のＹＥＳ分岐が取られて、ラン処理論理５４が終了する。次いで、処理が、図４において詳述された残余ラン処理論理５８に進行する。
【００４４】
図４を参照し、図１〜３を引き続き参照すると、図２の残余ラン処理論理５８の詳細が例示される。ブロック９０において、Ｔがゼロと比較され、Ｔがゼロと等しくなかった（Ｔが１または２となる）場合、ブロック９０からＮＯ分岐が取られる。残余ラン文字は、それらが非ラン文字であるかのように、効果的に処理される。
【００４５】
したがって、ブロック９１および９２において、上でブロック４５および４６に関して論じられたコードサイズ論理が実行される。ブロック９３で、コードカウンタ２２が１だけ増分され、ブロック９４において、現在文字レジスタ１３における文字が出力される。
【００４６】
ブロック９５では、Ｔ−レジスタ１８におけるＴの値がＴ−１に設定され、処理がブロック９０に戻る。この方法において、ランの１つまたは複数の残余文字が処理され、圧縮器１０の出力１２で提供される。
【００４７】
ブロック９０において、Ｔがゼロに等しいとき、ランのすべての文字が処理される。これが起こったとき、ブロック９０からＹＥＳ分岐が取られて、処理が図２のブロック６０に進行する。
【００４８】
図３および図４において、Ｒ、Ｔおよびｎに関して、ブロック７０〜７２，７７，７８，８０，８５，９０および９５で実行された計算および比較が、図１の論理２５によって実行されることを理解されたい。
【００４９】
上記のことから、ランは、図２〜４によって表された動作によって完全に処理されることを理解されたい。あるいは他の実施形態として、ブロック８０〜８５および９０〜９５を、ブロック７２からのＹＥＳ分岐が図２のブロック６０に直接戻された場合、なくすことができる。さらに別の代替実施形態を、ブロック９０〜９５をなくすこと、およびブロック８０のＹＥＳ分岐を図２のブロック６０に直接戻すことによって、実施することができる。これらの代替実施形態では、ブロック６０および６４において廃棄された文字がＲ−１ではなくＲ−（Ｔ＋１）となる。
【００５０】
図５を参照し、図１〜４を引き続き参照すると、図２〜４の流れ図に従った、圧縮器１０の動作の一例が例示される。図の上部では、入力データ文字ストリームが示され、各文字ランの文字が文字シーケンス番号（ｃｈａｒａｃｔｅｒ ｓｅｑｕｅｎｃｅ ｎｕｍｂｅｒ）によって識別される。これが行われることにより、例のステップを通じて文字の進行をたどることが容易になる。これらのシーケンス番号は、文字識別（ｃｈａｒａｃｔｅｒ ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）のために示されており、実際のデータ文字ストリーム中には現れないことを理解されたい。
【００５１】
この例は、主として自明のものであり、実行されたアクションが左側の列において示され、アクションにおいて関与する図２〜４のブロックが、右側の列において示される。文字「ｂ」のランが９０文字の長さであることに留意されたい。
【００５２】
アクション１において、図２のブロック４０および４１では、コードカウンタおよびコードサイズが初期化され、ブロック４２では、最初の文字「ａ（１）」が現在文字に取り込まれ、ブロック４３で出力される。ブロック４４において、文字「ａ」のランが、次の２つのルックアヘッド文字「ａ（２）」および「ａ（３）」が現在文字と同じであることを決定することによって、検出される。ブロック５０において、パラメータＲが１３に設定され、これは、ランにおける文字の数であり、ブロック７０および７１において、変数Ｔおよびｎが設定される。
【００５３】
アクション２〜４において、図３のブロック７２〜７８からなるループが、ランを、文字「ａ（１０）」まで処理する。アクション５および６において、ランの残りが、図３のブロック８０〜８５を含むループを利用して処理される。アクション６において、文字「ａ（２）」〜「ａ（１３）」が廃棄される。
【００５４】
アクション７〜１１において、図２のブロック４３〜４８からなるループを主として利用して、非ラン処理が実行される。
【００５５】
アクション１２〜２３において、文字「ｂ」からなる９０文字のランが、示されたように処理される。アクション１２〜１７では、図３のブロック７２〜７８からなるループを利用して、ランの７７文字を吸収することに留意されたい。アクション１８〜２１は、ブロック８０〜８５によりリセットされたときの、ブロック７２〜７８からなるループの再帰的な利用を例示する。アクション２２および２３は、図４のブロック９０〜９５の残余ラン処理を利用した、９０文字のランの残りの処理を例示する。
【００５６】
図２〜４のブロックに対する、図５のアクションのより詳細な説明は、容易に分かり、簡潔にするため、以下では提供されない。
【００５７】
図６を参照し、図１を引き続き参照すると、本発明の好ましい代替実施形態の概略的ブロック図が例示される。図６は、データ圧縮器１００であり、図１に関して上で記載されたものと同じである、いくつかの構成要素を有し、これらには図１と同じ参照番号が与えられる。図１に関して上で提供されたこの説明が、図６に適用可能である。
【００５８】
圧縮器１００は、Ｌ−レジスタ１０１およびＤ−レジスタ１０２として示された作業レジスタも含み、これは、図７に関して記載される方法における圧縮器１００の動作において使用される変数を保持するためのものである。圧縮器１００はさらに、ｎ−計算論理１０３、Ｔ−計算論理１０４、Ｌ−計算論理１０５およびＤ−計算論理１０６を含み、これらは、図７に関して記載される方法においてランを処理するためのものである。圧縮器１００は、圧縮器１００の動作を、図２、図４および図７の動作流れ図に従って、以下で記載される方法において制御するための制御装置１０７も含む。
【００５９】
簡単に述べると、圧縮器１００の動作は、圧縮器１０に関して上に記載された動作と同じであるが、ラン処理が実行される方法において異なる。上述のように、図２の動作流れ図は、図７の動作流れ図によって実施されるラン処理論理５４を有する圧縮器１００にも適用される。ランは、ランにおける文字の数に式を適用して、ランにおいて存在するセグメントの数を決定することによって、処理される。さらなる式が利用されて、コードカウンタ２２のためのカウントが、これらのセグメントを表現するためのコードを提供するように到達するように決定される。さらなる式は二次タイプであり、これが適用されて、処理かつしたがって廃棄される文字の数が決定される。コードカウンタ２２が順次増分され、コードカウンタ２２が、式によって決定されたカウントに到達するまで、その中のコードが出力される。
【００６０】
この処理を実行した後、計算された、廃棄される文字の数が、ランの文字の数から減算され、処理される文字が３つ以上残っていた場合、現在文字レジスタ１３において存在する文字が出力され、コードカウンタ２２が再度１だけ進められる。ランにおいて残っている文字の数を、３つより少ないラン文字が残るまで、式に適用することによって、計算的な処理がリセットされる。これが起こったとき、図４に関して上で記載された残存ラン処理論理が呼び出される。
【００６１】
現在文字レジスタ１３、バッファ１５および１６、レジスタ１７〜１９、１０１、１０２、コードカウンタ２２および論理２３、２４、２６および１０３〜１０６が、図２、図４および図７に関して以下で説明されるような文字ラン処理を実行することにおいて、利用される。図２、図４および図７の制御流れ図は、圧縮器１００によって、本発明によるデータ圧縮を実行するために実行される、詳述された動作を例示する。図２および図４に関して上記の記載は、圧縮器１００にも適用されるが、ラン処理論理５４が図７の動作流れ図によって実行されることが異なる。制御装置１０７は、状態機械など、動作の実行を制御するための適切な回路を含むものとみなされる。
【００６２】
図７を参照し、図２、図４および図６を引き続き参照すると、図６の実施形態において利用されたラン処理論理５４の詳細を例示する制御流れ図が例示される。図７の詳細を記載する前に、例示された計算が、以下のような最初のｎ個の数の合計についての式に基づくことを理解されたい。
【００６３】
Ｓ（ｎ）＝１＋２＋３＋４＋．．．＋ｎ＝［（ｎ（ｎ＋１））／２］
【００６４】
上述のように、ランを、隣接する数値的に増大するランセグメントからなるものと見なすことができ、単一の文字の最初のセグメントが現在文字レジスタ１３において保持される。後に続く現在文字は、２文字、３文字、４文字、．．．、ｎ文字の隣接したランセグメントである。さらなる文字がランにおいて存在することができるが、さらなる文字の数はｎ＋１より小さくなることを理解されたい。したがって、Ｒはランにおける文字の数であり、これがＳ（ｎ）にさらなる文字の数を加えたものに等しくなることを理解されたい。さらに、ｎにおける上記の所与の二次式を、ｎについて、Ｓに関して、その根を得るための二次式の解法を利用して解くことができることを理解されたい。式の１つの根は、以下の通りである。
【００６５】
ｎ＝［（（８Ｓ＋１）１／２−１）／２］
【００６６】
ｎについてのこの式が、ランにおける文字の数に適用されるとき、式の右側の整数部が、ランにおいて存在する隣接したセグメントのシーケンスにおける最長のランセグメントを生じることが認められた。以下に記載される方法において、この数が使用されて、コードのシーケンスがコードカウンタから得られて、ランの隣接した各セグメントが表現される。この数が、以下で記載される方法においてランの残りの文字を処理することにおいても、使用される。
【００６７】
図７を引き続き参照すると、ブロック１２０で、Ｔ−レジスタ１８における変数ＴがＲに設定される。したがって、この時点で、変数Ｔは、図２のブロック４４で検出されたランにおける文字の数を表す。
【００６８】
処理がブロック１２１に進行し、図６の論理１０３を使用して、Ｔが、上のｎについての式において利用されて、以下のようになる。
【００６９】
ｎ＝［（（８Ｔ＋１）１／２−１）／２］の整数部
【００７０】
よって、ブロック１２１が、ランの隣接したセグメントシーケンスにおいて存在する、文字の最長セグメントにおける文字の数を提供する変数ｎを生成し、ランを含むこのようなセグメントの数の指示も提供する。
【００７１】
したがって、ブロック１２２においては、ｎが利用されて、コードカウンタ２２におけるコードを表す変数Ｌが導出され、これは、コードがコードカウンタ２２からランの隣接した各セグメントに、以下で記載される方法において割り当てられた後で、次に使用可能である。図６の論理１０５が利用されて、以下のようにＬが導出される。
【００７２】
Ｌ＝［（コード＋ｎ）−１］
【００７３】
ここで、コードは、制御がブロック１２２に入るときに、コードカウンタ２２において存在するコードである。
【００７４】
処理がブロック１２３に進行し、変数Ｄが、図６の論理１０６を利用して導出される。変数Ｄは、現在処理中であるランにおける文字の数を表す。したがって、Ｄは、１文字、２文字、３文字、４文字、．．．、ｎ文字を含む隣接したランセグメントにおけるランの文字の和を表す。論理１０６は、Ｄを以下のように提供する。
【００７５】
Ｄ＝［（ｎ（ｎ＋１））／２］
【００７６】
変数Ｄが、以下に記載される方法において利用されて、ランにおけるさらなる文字が処理される。
【００７７】
処理がブロック１２４に進行し、コードカウンタ２２におけるコードが出力される。このコードは、処理中のランにおけるセグメントの１つを表す。その後、上でブロック４５および４６に関して記載されたコードサイズ検査が、ブロック１２５および１２６で実行される。ブロック１２７で、コードカウンタ２２が１だけ増分される。
【００７８】
ブロック１２８において、コードカウンタ２２におけるコードがＬと比較されて、すべてのコードがランの各セグメントに割り当てられたか否かが決定される。コードカウンタ２２におけるコードがＬに等しくなかった場合、ＮＯ分岐がブロック１２４へ戻り、処理を継続する。
【００７９】
ブロック１２４〜１２８からなるループは、ブロック１２１〜１２３において、検出されたランにおいて存在すると数学的に決定されたセグメントのシーケンスをそれぞれ表す、コードのシーケンスを出力することを理解されたい。コードカウンタ２２におけるコードが値Ｌに到達したとき、ブロック１２８からＹＥＳ分岐が取られて、ブロック１４０へ進行する。
【００８０】
ブロック１４０において、Ｔ−レジスタ１８における変数ＴがＴ−Ｄに設定される。したがって、変数Ｔがリセットされて、ランにおいて残っている文字が数学的に処理されるようにする。
【００８１】
したがって、ブロック１４１では、Ｔが３と比較される。Ｔが３以上であった場合、検出されたランのさらなる処理を、ブロック１２１〜１２８を利用して実行することができる。したがって、Ｔが３以上であった場合、ブロック１４１からＮＯ分岐が取られてブロック１４２および１４３に進行し、上でブロック４５および４６に関して論じられたコードサイズ論理が実行される。ブロック１４４で、コードカウンタ２２が１だけ増分され、ブロック１４５において、現在文字レジスタ１３における文字が出力される。次いで、制御がブロック１２１に戻り、ブロック１４０で導出されたＴの値が、上でブロック１２１〜１２８に関して記載されたように利用されて、ランにおけるセグメントに対応するさらなるコードが生成される。しかし、制御がブロック１４５からブロック１２１〜１２８に戻ったとき、これらのブロックの数学的処理が、長さＴ−Ｄのランに適用されることを理解されたい。
【００８２】
ブロック１４１〜１４５は、上で図３のブロック８０〜８４に関して記載されたものと類似の機能を実行することを理解されたい。
【００８３】
ブロック１４０において、変数Ｔは、３より小さい値に減少されたとき、ブロック１４１からＹＥＳ分岐が取られて、図４の残余ラン処理論理５８に進行する。残余ラン処理は、上で図２〜４に関して記載されたように実行される。
【００８４】
上記図１〜４の実施形態に関して述べたものと類似の手法において、図２、図４、図６および図７の実施形態は、図７のブロック１４０〜１４５および図４のブロック９０〜９５をなくし、ブロック１２８のＹＥＳ分岐を図２のブロック６０に戻すことによって、さらなる実施形態を提供することができる。この実施形態では、ブロック６０および６４の廃棄された文字が、Ｒ−１ではなくＤ−１となる。
【００８５】
再度、上述と類似の手法において、図４のブロック９０〜９５をなくし、ブロック１４１のＹＥＳ分岐を図２のブロック６０に戻すことによって、なおさらなる実施形態を実現することができる。この実施形態では、ブロック６０および６４の廃棄された文字が、Ｒ−１ではなくＲ−（Ｔ＋１）となる。
【００８６】
図８を参照し、図２、図４、図６および図７を引き続き参照すると、図２、図４および図７の流れ図に従った、圧縮器１００の動作の一例が例示される。図８のフォーマットは、図５のものと類似しており、上で図５に関して与えられた記載が適用可能である。図５において例示された同じデータ文字ストリームが、図８において利用される。
【００８７】
アクション１において、初期化が一般的に、図５に関して記載されたように起こり、ブロック５０において、ランレングスパラメータＲが設定される。ブロック１２０において、パラメータＴがＲに設定され、パラメータｎ、ＬおよびＤが、ブロック１２１〜１２３の式を利用して設定される。
【００８８】
アクション２〜４において、「ａ」ランが文字「ａ（１０）」まで処理される。処理は、ブロック１２４〜１２８からなるループの反復によって実施される。アクション４において、コードカウンタ２２が値Ｌに到達し、ブロック１２８が制御をブロック１４０に移す。アクション５および６において、「ａ」ランの残りが、例示されたように処理される。アクション７〜１１は、上で図５に関して記載されたような非ラン処理を示す。
【００８９】
アクション１２〜２３において、文字「ｂ」からなる９０文字のランが、図示されたように処理される。アクション１２において、処理のための最初のパラメータが、示されたように数学的に確立される。アクション１２〜１６は、ブロック１２４〜１２８からなるループを反復的に利用することによって、ランの７７文字を吸収することに留意されたい。ループの動作は基本的に、コードカウンタがＬに等しくなるまで、コードカウンタを増分かつ出力することである。アクション１７は、ランをアクション１８および１９においてさらに処理するために、ループを再初期化する。アクション２１および２２は、図４のブロック９０〜９５の残余ラン処理を利用した、９０文字のランの残りの処理を例示する。
【００９０】
図２、図４および図７のブロックに対する、図８のアクションのより詳細な説明は、容易に分かり、簡潔にするため、以下では提供されない。
【００９１】
上で適用可能な動作流れ図と共に記載された図１および図６の実施形態は、２つの明確に異なるアルゴリズムを利用する。図１の実施形態は、記載された反復処理を利用するのに対し、図６の実施形態は、上述の二次式の実施形態を利用する。図５および図８に関して、同じ入力データ文字ストリームが、両方の実施形態において、同じ圧縮コード出力ストリームの結果となることに留意されたい。
【００９２】
図９を参照し、図１〜４を引き続き参照すると、本発明の好ましい代替実施形態の概略的ブロック図が例示される。図９は、データ圧縮器２００であり、上で図１に関して記載されたものと同じである、いくつかの構成要素を有し、これらには図１と同じ参照番号が与えられる。上で図１に関して提供されたその記載が、図９に適用可能である。
【００９３】
圧縮器２００は、ルックアヘッドバッファ２０１、ランバッファ２０２、ルックアヘッド比較論理２０３、ラン獲得論理２０４および文字廃棄論理２０５を含む。構成要素２０１〜２０５は、上で図１に関して記載されたような各構成要素１５、１６、２３、２４および２６に類似している。これらの構成要素のための追加の機能性が、図９の圧縮器２００において必要とされ、これが、以下で図１１に関して記載される。圧縮器２００はさらに、Ｄ−レジスタ２０６およびＭ−レジスタ２０７およびＴ−レジスタ２０８として示された作業レジスタを含み、これは、図１１に関して記載される方法における圧縮器２００の動作において使用される変数を保持するためのものである。
【００９４】
圧縮器２００はまた、Ｒ、Ｔ、Ｄ、ｎ、およびＭ計算論理２１０を含み、これらは、図１１に関して記載される計算を実行するためのものである。圧縮器２００は、圧縮器の動作を、図１１の動作流れ図に従って、以下で記載される方法において制御するための制御２１５も含む。
【００９５】
圧縮器２００は、ラン処理アルゴリズムを利用し、これは、上で図１に関して記載され、図３において例示された、反復的な数学的アルゴリズムに類似している。図１の圧縮器１０とは異なり、図９の圧縮器２００はテーブルおよびフラグ２２０を含み、これは、ランセグメントカウントおよびコードを格納し、以下で記載される方法において第１遭遇フラグを提供するためのものである。テーブルおよびフラグ２２０とのデータ通信は、双方向バス２２１によって実施される。データ転送の制御は、制御バス２２２によって実施される。テーブルおよびフラグ２２０の詳細は、図１０において提供される。
【００９６】
図１０を参照すると、テーブルおよびフラグ２２０が、ランセグメントテーブル２２５および第１遭遇フラグ２２６を、圧縮が発生中のアルファベットの各文字について含む。たとえば、「文字１」用のランセグメントテーブル２２５が、データ文字入力において遭遇する「文字１」のランのランセグメントのカウントおよびコードを格納する。最初に、すべての第１遭遇フラグ２２６がセットされる。「文字１」のランに最初に遭遇したとき、「文字１」のための第１遭遇フラグ２２６がリセットされる。図１０のテーブルおよびフラグ２２０の使用の詳細は、以下で図１１に関して記載される。
【００９７】
簡単に述べると、圧縮器２００の動作は、以下の通りである。圧縮器２００は一般に、上で圧縮器１０に関して記載されたものと同じラン処理アルゴリズムを利用するが、圧縮器２００においては、ランのセグメントが数学的に決定されたとき、ランセグメントデータがテーブル２２５に格納されることが異なる。後に、同じ文字のランに遭遇（ｅｎｃｏｕｎｔｅｒ）したとき、格納されたデータが利用されて、圧縮が拡張される。格納されたデータの使用を最適化するため、図３の再帰的制御ブロック（ｒｅｃｕｒｓｉｖｅ ｃｏｎｔｒｏｌ ｂｌｏｃｋ）８０〜８５および図４の残余ラン処理論理が、図１１では利用されない。代わりに、ランに最初に遭遇したとき、図３のブロック７１〜７８に類似した論理が利用されて、ランセグメントデータが、ランの残りを有するランの大部分について、図１１に関して説明される方法において、格納されたデータを利用して、処理かつ格納される。
【００９８】
動作における違いに起因して、圧縮器２００のラン検出論理は、圧縮器１０のラン検出論理とは幾分異なるように動作する。圧縮器２００では、現在文字が、次に続く文字と同じでなかった場合、非ラン処理が、圧縮器１０の非ラン動作と実質的に同じ方法において実行される。次の文字が現在文字と同じである場合、現在文字のための第１遭遇フラグ（Ｆｉｒｓｔ Ｅｎｃｏｕｎｔｅｒ Ｆｌａｇ）が検査される。圧縮器２００が、現在文字のランに初めて遭遇している場合、圧縮器１０のものに類似したラン処理が実行されるが、ランセグメントデータの格納およびアルゴリズムの非再帰的使用を含む。この場合、現在文字および次の２つの文字が同じとなる。しかし、この現在文字の遭遇したランが、最初のそのようなランでなかった場合、現在文字のためのランセグメントテーブル２２５が、ランの処理において調べられる。
【００９９】
現在文字レジスタ１３、コードカウンタ２２、バッファ２０１および２０２、Ｒ−レジスタ１７、Ｄ−レジスタ２０６、ｎ−レジスタ１９、Ｍ−レジスタ２０７、Ｔ−レジスタ２０８、および論理２０３〜２０５および２１０が、図１１に関して以下で記載されるような文字ラン処理を実行することにおいて、利用される。
【０１００】
図１１を参照し、図９および図１０を引き続き参照すると、制御流れ図が例示され、圧縮器２００によって実行される、詳述された動作が示される。制御２１５は、動作の実行を制御するための適切な回路を含むものと見なされる。上で記載された方法において、図１１の流れ図は、可変長出力において予見される。図１１のブロックの多数は図２および図３のブロックと同じであり、同じ参照番号によって示される。上で図２および図３のこれらのブロックに関して与えられた記載は、図１１の同様に付番されたブロックにも適用可能である。図１１のブロックのうち、図２および図３のブロックとは異なるもののみが、後に続く図１１の記載において強調される。
【０１０１】
図１１のブロック４０〜４２において、コードカウンタ２２およびコードサイズレジスタ２３が初期化され、最初の文字が現在文字レジスタ１３に取り込まれる。ブロック２３０で、第１遭遇フラグ２２６のすべてが、文字のランに第１遭遇ための準備においてセットされる。
【０１０２】
処理がブロック２３１に進行し、現在文字レジスタ１３における文字が、次に続く文字と比較されて、これらが同じであるか否かが決定される。ルックアヘッドバッファ２０１および論理２０３が使用されて、この機能が実行される。文字が同じでなかった場合、ブロック２３１からＮＯ分岐が取られて、非ラン処理が実行される。２つの文字が同じである場合、ブロック２３１からＹＥＳ分岐が取られてブロック２３２に進行し、現在文字レジスタ１３における文字のための第１遭遇フラグ（Ｆｉｒｓｔ Ｅｎｃｏｕｎｔｅｒ Ｆｌａｇ）２２６の状態が検査される。第１遭遇フラグがリセットされていた場合、ブロック２３２からＹＥＳ分岐が取られて、現在文字のラン処理が実行され、ただし、この文字のランに先に遭遇しており、ランデータがこの文字のためのランセグメントテーブル２２５に格納されている。
【０１０３】
現在文字のための第１遭遇フラグ２２６がなおセットされていた場合、ブロック２３２からＮＯ分岐が取られてブロック４４に進行する。ブロック４４は、現在文字および次の２つのルックアヘッド文字が同じであるか否かを決定する。ルックアヘッドバッファ２０１および論理２０３が利用されて、この機能が実行される。現在文字のための第１遭遇フラグがなおセットされているので、この文字のためのランデータがまだ格納されていない。これらの状態において、ブロック４４からＹＥＳ分岐が取られた場合、図３のものに類似したラン処理が実行される。ブロック４４からＮＯ分岐が取られた場合、非ラン処理が実行される。
【０１０４】
したがって、ブロック４４、２３１および２３２は、以下の方法においてランを検出するように機能することを理解されたい。現在文字が、後に続く文字と異なった場合、非ラン処理が実行される。現在文字が、後に続く文字と同じであり、この文字のためのランが先に処理されていた場合、ラン処理は、先に格納されたデータを利用して実行される。文字のランにまだ遭遇しておらず、処理されていなかった場合、ラン処理が、現在文字が次の２つの文字と同じである場合に実行され、そうでなかった場合、非ラン処理が実行される。
【０１０５】
ブロック４４またはブロック２３１からＮＯ分岐が取られた場合、非ラン処理が実行される。ブロック２３３において、現在文字レジスタ１３における文字が出力される。その後、ブロック４５〜４８の非ラン処理が、上で図２に関して記載された方法において実行される。ブロック４８において、処理はブロック２３１に戻る。
【０１０６】
現在文字の３文字のランが最初に検出されたとき、ブロック４４からＹＥＳ分岐が取られる。処理がブロック２３４に進行し、現在文字のための第１遭遇フラグがリセットされる。ブロック２３５において、Ｔ−レジスタ２０８が、現在文字の後に続いて現在文字と同じである一連の文字の数に設定される。ラン獲得論理２０４およびランバッファ２０２が利用され、この機能が実行される。処理がブロック２３６および２３７に進行し、それぞれ、現在文字レジスタ１３における文字が出力され、Ｄ−レジスタ２０６における変数Ｄがゼロに設定される。Ｄ−レジスタ２０６における変数Ｄは、以下で記載される方法において廃棄される文字のカウントを維持する。
【０１０７】
次いで、制御は、ランのセグメントを数学的に処理するためのループに入り、これは、上で図３のブロック７１〜７８に関して記載された方法において行われるが、２つの違いがある。図１１では、ブロック２４０がブロック７３および７４の間に挿入され、ブロック２４１がブロック７６および７７の間に挿入される。ブロック２４０において、コードカウンタ２２からのコードおよびｎに等しいカウントは、現在文字のためのランセグメントテーブル２２５に格納される。ブロック２４１において、変数ＤがＤ＋ｎに設定される。
【０１０８】
したがって、ブロック７２〜７８、２４０および２４１からなるループの反復によって、ランの、隣接した、数値的に増大するセグメントが処理される。ブロック７３において、各セグメントを表すコードが出力され、ブロック２４０において、各セグメントのコードおよび文字カウントがランセグメントテーブルに格納される。ブロック２４１において、処理された各セグメントにおける文字の数がＤに加算され、ループの処理が終了したとき、処理されたセグメントの文字が廃棄されるようにする。ループの処理は、ブロック７２で検出されたとき、Ｔがｎより小さいときに終了される。
【０１０９】
したがって、ブロック７２からのＹＥＳ分岐が、処理をブロック２４５に向けて送り、現在文字の後に続くＤ個の文字が廃棄される。処理がブロック２４６および２４７に進行し、コードサイズの検査が、上でブロック４５および４６に関して論じられたように実行される。ブロック２４８において、コードカウンタ２２が１だけ増分されて、非ラン処理との同期が維持される。ブロック２４９において、ブロック２４５で廃棄されたＤ個の文字の後に続く文字が、現在文字レジスタ１３に取り込まれる。ブロック２４５の文字廃棄処理、およびブロック２４９の現在文字取り込みが、論理２０５および図９のバッファ２０２によって実行され、Ｄ−レジスタ２０６におけるＤの値を使用して適切な文字を廃棄し、指示されたように適切な文字を取り込む。その後、制御がブロック２３１に戻り、入力データ文字ストリームの処理が継続される。
【０１１０】
図１０を参照し、図１１を引き続き参照すると、図１１のブロック７１〜７３、２４０および２４１を、図１０において示されたような「文字１」のランによって例証することができる。「文字１」は、現在文字レジスタ１３にあり、これが「文字１」の３文字のランの第１遭遇ものである。ブロック７２〜７８、２４０および２４１を含む図１１のループの連続の反復は、「文字１」のためのランセグメントテーブル２２５における、コード２５８〜２６７のエントリの結果となる。したがって、ブロック７８でｎが進められたとき、「文字１」のランの数値的に増大するセグメントが、テーブル２２５において例示されたように格納されたランセグメントデータにより、数学的に処理される。上述のように、ブロック７３で、ランの各セグメントを表すコードが出力されることを理解されたい。
【０１１１】
したがって、この例証された「文字１」のランが、現在文字レジスタ１３における現在文字と、その後に続く、コード２５８によって表された２文字のランセグメントと、その後に続く、コード２５９によって表された３文字のランセグメントなど、最大でコード２６７によって表された１１文字のセグメントからなることがわかる。したがって、このランは、６６文字と７７文字の間からなる。
【０１１２】
ブロック２３１において、２文字のランに遭遇し、この文字のための第１遭遇フラグがリセットされていたとき、ブロック２３２からＹＥＳ分岐が取られてブロック２６０に進行し、文字のランのラン処理を開始し、ただし、この文字のための先のランデータが格納されている。パラメータＲが、１に、現在文字の後に続いて現在文字と同じである一連の文字の数を加えたものに、設定される。したがって、Ｒが、遭遇したばかりの現在文字のランにおける文字の数に等しい。ラン獲得論理２０４が、ランバッファ２０２と共に、ブロック２６０の機能性を実行することにおいて利用され、Ｒの値がＲ−レジスタ１７において保持される。
【０１１３】
処理はブロック２６１に進行し、パラメータＭが、現在文字レジスタ１３における文字のためのランセグメントテーブルにおける最大カウントに設定される。Ｍは、図１０の適切なランセグメントテーブル２２５から、テーブルの底部にスクロールしてＭのこの最大カウントを決定することによって、決定される。次いで、Ｍ−レジスタ２０７においてＭが保持される。
【０１１４】
処理がブロック２６２に進行し、Ｒ−レジスタ１７における値は、Ｍ−レジスタ２０７における値と比較される。ＲがＭより大きかった場合、ブロック２６２からＹＥＳ分岐が取られ、ＲがＭ以下であった場合、ブロック２６２からＮＯ分岐が取られる。ＹＥＳ分岐が取られた場合、現在遭遇している現在文字のランは、関連付けられたランセグメントテーブル２２５に格納された最大ランセグメントより大きい。ＮＯ分岐が取られた場合、現在遭遇している現在文字のランは、関連付けられたランセグメントテーブルに格納された最大ランセグメント以下である。
【０１１５】
ブロック２６２からＮＯ分岐が取られた場合、処理はブロック２６３に進行し、関連付けられたランセグメントテーブルから、Ｒに等しいカウントのためのコードが、圧縮器２００によって出力される。ブロック２６３の機能は、Ｒ−レジスタ１７における値を、関連付けられたランセグメントテーブルにおけるカウントと関連して比較することによって実行される。Ｒがテーブルに位置したとき、対応するコードが位置付けられており、出力される。別法として、テーブルに格納されたカウントの簡単な順序付けを利用して、カウントがＲに等しい適切な場所を見つけることができる。
【０１１６】
次いで、処理はブロック２６４に進行し、Ｄ−レジスタ２０６における変数Ｄの値がＲ−１に設定される。その後、制御はブロック２４５に進行し、Ｄ個の文字が、先に記載されたように廃棄される。
【０１１７】
現在遭遇している現在文字のランが、関連付けられたランセグメントテーブル２２５に格納された最長ランセグメントより大きかった場合、ブロック２６２からＹＥＳ分岐が取られる。処理はブロック２６５に進行し、Ｍに対応するコードが、関連付けられたランセグメントテーブルから出力される。Ｍは、Ｍ−レジスタ２０７に格納された値である。関連付けられたランセグメントテーブルには、このＭの値によりアクセスされるか、たとえば、関連して、あるいは、Ｍのカウントについて対応するコードを位置付けて出力するために走査することによって、アクセスされる。
【０１１８】
処理はブロック２６６に進行し、Ｄ−レジスタ２０６における変数ＤがＭ−１に設定され、これらの文字を、処理がブロック２４５に入ったときに上述のように廃棄できるようにする。現在文字レジスタ１３における文字と共に廃棄されたＭ−１個の文字は、現在遭遇している現在文字のランのセグメントを含む。これらのＭ文字を表すコードは、ブロック２６５で出力されている。
【０１１９】
ランの残りは、ブロック２６７においてＴ−レジスタ２０８におけるＴをＲ−Ｍに設定することによって、かつ、ブロック２６８においてｎ−レジスタ１９におけるｎをＭ＋１に設定することによって、処理される。ブロック２６７の機能は、Ｍ−レジスタ２０７におけるＭをＲ−レジスタ１７におけるＲから減算し、この値をＴ−レジスタ２０８に転送することによって実行される。ブロック２６８の機能は、レジスタ２０７におけるＭの値を１だけ増分し、この値をｎ−レジスタ１９に転送することによって実行される。次いで、制御がブロック７２に移り、ランの処理が、先に記載されたように継続される。
【０１２０】
図１１を引き続き参照すると、ブロック２３３は、非ラン処理の入口であり、ブロック２３４は、最初に遭遇した文字のランの処理の入口であることを理解されたい。ブロック２６０は、文字のランの処理の入口であり、ただし、先の文字のランが処理され、格納されている。このようなランについて、ブロック２６２は、格納された最大ランセグメントより大きいか、あるいは、格納された最大ランセグメント以下である、ランの処理のための、分岐点である。
【０１２１】
図１１において、図３のブロック８０〜８５によってリセットされたときの、ブロック７２〜７８からなるループの再帰的再エントリが利用されないことを理解されたい。これが行われることにより、残りの文字が、次の数値的に増大するランセグメントに入れるために不十分であった場合、最初に遭遇したランの格納されたデータが、ランの残りの文字について有利に利用される。圧縮における拡張が、この手法によって実現されるべきである。
【０１２２】
図１１は、ブロック２３１、２３２および４４からなるラン検出論理に関して記載されている。ブロック２３１をなくすことができ、ブロック４４および２３２の処理順序を逆にして、格納された長さ２のランセグメントがランセグメントテーブル２２５においてアクセスされない結果にすることができることを理解されたい。
【０１２３】
図９〜１１に関して説明された本発明の実施形態は、ランセグメントデータの格納を利用し、図３の反復的な数学的アルゴリズムに関して記載されている。類似の格納実施形態を、図７の二次式実施形態を利用して実現できることを理解されたい。このような実施形態では、ランセグメントテーブルが、所与の式を利用して数学的に生成される。
【０１２４】
図１２を参照し、図９〜１１を引き続き参照すると、図１１の流れ図に従った圧縮器２００の動作の一例が例示される。図１２のフォーマットは、図５のものと類似しており、上で図５に関して与えられた記載が適用可能である。図１２では、示された入力データ文字ストリームが文字「ａ」のランを利用して、格納動作を例示する。図１２が図５と主として異なるところは、ランセグメントテーブルに格納され、後にランを処理するために使用されるランセグメントデータが例示されており、パラメータＤおよびＭ、ならびに、第１遭遇フラグのセットおよびリセットが図示されていることである。加えて、上述のように、図１１のブロック７２〜７８の処理ループが、図３におけるように再帰的に使用されない。
【０１２５】
アクション１において、初期化は、セットされた第１遭遇フラグ、および現在文字に取り込まれた最初の文字「ａ（１）」で起こる。文字「ａ」のランに最初に遭遇したので、アクション２は、第１遭遇フラグがリセットされ、現在文字が出力され、パラメータＴ、Ｄおよびｎが、上で図１１のブロック２３４〜２３７および７１に関して記載されたように設定された状態を例示する。アクション３〜５で、ランが文字「ａ（１０）」まで処理され、これは、ブロック７２〜７８、２４０および２４１からなるループを反復的に利用して行われる。アクション３〜５は、ランセグメントデータの格納を例示する。
【０１２６】
アクション６は、ランの残りの文字「ａ（１１）」および「ａ（１２）」の処理を例示し、これは、対応するコードの２５８を有する２カウントセグメントのためのランセグメントテーブルにアクセスすることによって行われる。
【０１２７】
図１２のアクション７〜１０における非ラン処理は、図５のアクション７〜１１と実質的に同じものであるが、図１２では、非ラン判断が１つのルックアヘッド文字に基づいて行われるのに対し、図５では、この判断が２つのルックアヘッド文字に基づいて行われる。
【０１２８】
図１２のアクション１１および１２は、文字「ａ」のランに第２に遭遇するときの検出および処理を例示する。このランは、文字「ａ（１３）」から「ａ（２１）」として例示され、したがって、９文字からなる。アクション５で、「ａ」文字のランの最大セグメントが、４のランセグメントカウントにより、格納された。アクション１１で、格納されたセグメントのためのコード２６０が出力され、図１１のブロック２６０〜２６８で、パラメータＲ、Ｔ、Ｄ、ｎおよびＭが、示されたような値で設定される。アクション１２は、図１１のブロック７２〜７８、２４０、２４１および２４５の処理を例示し、適切なコードが出力され、ランセグメントデータが格納され、文字「ａ（１４）」から「ａ（２１）」が廃棄されて、ランの処理が完了される。
【０１２９】
図１２のアクションと図１１のブロックとの相関は、図１２の右側の列において示されたように、上記の記載に類似しており、図１２の特定の例と図１１のブロックの機能性との比較によって、容易に分かる。
【０１３０】
同じ入力について、上で記載された非格納実施形態が同じ出力を提供することを理解されたい。これは、先に図５および図８に関して論じられている。同じ観察を、上述のように構成された格納実施形態に関して行うことができる。さらに、同じ入力について、前記第０９／２６４，２６９号の格納および非格納実施形態も、それぞれ同じ出力を提供することを理解されたい。これは、本出願の図１２と前記第０９／２６４，２６９号の図７との比較によって、理解される。
【０１３１】
互換性のある圧縮解除器を容易に提供することができ、これは、圧縮器１０、１００または２００の圧縮出力を受信し、それらとの同期において、それに対応する入力データ文字を回復するように動作するものであることを理解されたい。
【０１３２】
図５、図８および図１２の「出力」列において示されたような、出力コードのシーケンスが、圧縮解除器によって処理された場合、図面において例示された入力データ文字ストリームが回復される。圧縮解除器のプロトコルが、圧縮器のものと互換性を持つべきであることを理解されたい。図５、図８および図１２の例では、８ビットによってサポートされたＡＳＣＩＩアルファベットが仮定された。ＡＳＣＩＩアルファベットは、２５６文字からなる。図２および図１１のブロック４０で、コードカウンタ２２がコード２５８に初期化される。コード２５７を、たとえば、制御コードとして予約することができ、これは当技術分野においてよく理解されている。圧縮解除器は、初期コードカウンタ値および初期コードサイズなど、圧縮器と同じアルファベットサイズおよび初期状態を有するべきである。さらに、当技術分野においてよく理解されるように、本発明の圧縮器の実施形態のコードサイズおよび圧縮解除器のコードサイズは、たとえば、上で図２〜４に関して記載されたように、互いに関する同期において進められるべきである。
【０１３３】
よく知られているように、圧縮器および圧縮解除器を、単一文字列のすべてにより初期化することができ、あるいは、単一文字を、その各値によって圧縮コードから区別することができる。ＡＳＣＩＩ文字が、２５６以下である値を有するのに対し、図５、図８および図１２のＡＳＣＩＩの例では、圧縮コードが２５８以上の値を有する。さらに、他の単一文字コードプロトコルも利用できることは、よく知られている。
【０１３４】
本発明に係る圧縮器の実施形態において使用される単一文字コードプロトコルは、圧縮解除器においても利用されるべきである。
【０１３５】
コードカウンタ２２が、上述のように増分されて、ランおよび非ラン処理の間の同期が維持されることを理解されたい。これは特に、上述の図のブロック４７、６３、７６、８３、９３、１２７、１４４および２４８でわかる。たとえば、図２において、ブロック４７で、コードカウンタ２２が１だけ増分されて、ブロック４３の現在文字出力との同期が維持される。
【０１３６】
上記の実施形態は、入力データ文字のストリームを圧縮する。入力データ文字は、対応するいかなる文字ビットサイズを有するいかなるサイズのアルファベットを介することもできる。たとえば、データ文字を、８ビット文字の２５６文字ＡＳＣＩＩアルファベットなどのアルファベットを介して、ＡＳＣＩＩ文字などのテキストにすることができる。入力データを、１ビットサイズの文字を有する２文字の２進アルファベット１および０を介して、２進文字にすることもできる。テキストデータを、その下にある２進データの２文字のアルファベットを介して圧縮することもできることを理解されたい。
【０１３７】
本発明に係る上述の実施形態は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの組合せで実施できることを理解されたい。個別回路構成要素（ｄｉｓｃｒｅｔｅ ｃｉｒｃｕｉｔ ｃｏｍｐｏｎｅｎｔ）は、記載された様々な機能を実行するために容易に使用することができる。ソフトウェアの実施形態では、上述の流れ図から容易に生成されたコーディングによりプログラムされた、適切なモジュールを利用することができる。
【０１３８】
本発明を、その好ましい実施形態において記載したが、使用された言葉は、限定するためのものではなく説明の言葉であり、付属の特許請求の範囲の範囲内で、その幅広い態様において、本発明の範囲および精神から逸脱することなく、変更を行うことができることを理解されたい。
【図面の簡単な説明】
【図１】本発明の好ましい実施形態を提供するデータ圧縮器の概略的ブロック図であり、図１の実施形態は、反復的な数学的アルゴリズムを利用して、文字ランに遭遇するたびに文字ランが新たに処理される非格納構成である。
【図２】本発明によるデータ圧縮を実行するための、図１の圧縮器によって実行される動作を例示する制御流れ図である。
【図３】本発明の反復的な数学的アルゴリズムによる、データ圧縮を実施するための、図２の流れ図において利用されるラン処理論理を例示する、制御流れ図である。
【図４】残余ラン処理を実行するための、図２の流れ図において利用される制御流れ図である。
【図５】図２、図３および図４の制御流れ図による、図１の圧縮器の動作を例示する図である。
【図６】本発明のさらに好ましい実施形態を提供するデータ圧縮器の概略的ブロック図であり、図６の実施形態は、二次式アルゴリズムを利用して、文字ランに遭遇するたびに文字ランが新たに処理される非格納構成であり、図２も、図６の圧縮器によって実行される動作を例示するが、ただし、図２のラン処理論理部分が図７において詳述された論理を利用する。
【図７】本発明の二次式の数学的アルゴリズムによるデータ圧縮を実行するための、図６の実施形態において利用されたときの、図２のラン処理論理を例示する制御流れ図であり、図４の残余ラン処理論理も、ラン処理が図７に従って実行されたときに図２の制御流れ図において利用される。
【図８】図２、図４および図７の制御流れ図による、図６の圧縮器の動作を例証する図である。
【図９】本発明の別の好ましい実施形態を提供するデータ圧縮器の概略的ブロック図であり、図９の実施形態は、格納を使用して文字ランデータを保存し、これを、文字ランに再度遭遇したときに再利用することができ、図９の実施形態は、図１〜４によって開示された実施形態において利用された反復的な数学的アルゴリズムに基づく。
【図１０】図９のテーブルおよびフラグの詳細を例示するデータ構造図である。
【図１１】本発明によるデータ圧縮を実行するための、図９および図１０の圧縮器によって実行される動作を例示する制御流れ図である。
【図１２】図１１の制御流れ図による、図９および図１０の圧縮器の動作を例証する図である。
【図１】
0003631144.tif 000002
【図２】
0003631144.tif 000003
【図３】
0003631144.tif 000004
【図４】
0003631144.tif 000005
【図５】
0003631144.tif 000006
【図６】
0003631144.tif 000007
【図７】
0003631144.tif 000008
【図８】
0003631144.tif 000009
【図９】
0003631144.tif 000010
【図１０】
0003631144.tif 000011
【図１１】
0003631144.tif 000012
0003631144.tif 000013
【図１２】
0003631144.tif 000014