JP2713369B2 - データ圧縮装置及び方法 - Google Patents

データ圧縮装置及び方法

Info

Publication number
JP2713369B2
JP2713369B2 JP2006057A JP605790A JP2713369B2 JP 2713369 B2 JP2713369 B2 JP 2713369B2 JP 2006057 A JP2006057 A JP 2006057A JP 605790 A JP605790 A JP 605790A JP 2713369 B2 JP2713369 B2 JP 2713369B2
Authority
JP
Japan
Prior art keywords
data
string
character
stream
input data
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.)
Expired - Lifetime
Application number
JP2006057A
Other languages
English (en)
Other versions
JPH0368219A (ja
Inventor
エル.ホワイティング ダグラス
エー.ジョージ グレン
イー.アイビー グレン
Original Assignee
スタック,インコーポレイテッド
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US07/297,152 external-priority patent/US5016009A/en
Application filed by スタック,インコーポレイテッド filed Critical スタック,インコーポレイテッド
Publication of JPH0368219A publication Critical patent/JPH0368219A/ja
Application granted granted Critical
Publication of JP2713369B2 publication Critical patent/JP2713369B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/005Statistical coding, e.g. Huffman, run length coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Dc Digital Transmission (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)

Description

【発明の詳細な説明】 (産業上の利用分野) 本発明は、一般的にはデータ格納及び伝送システムに
関し、より詳細には、データ格納及び伝送の能力を改善
する、データ圧縮システム及び方法に関する。
(従来の技術及び発明が解決しようとする課題) データ格納システムとデータ伝送システムとの間のデ
ータ圧縮の重要でない違いによって、データ格納システ
ムのみが、特に、このようなシステムに格納されたデー
タファイルに言及される。しかし、全てのデータ格納シ
ステムは、データ伝送システム及び他のアプリケーショ
ンをカバーするように、容易に拡張され得る。ファイル
はバイト又はキャラクタの連続するストリームであると
考えられ、そこではバイトは幾つかの固定された数のビ
ットから成り、圧縮システムはこの入力バイトのストリ
ームを、「圧縮された」バイトの出力ストリームに変換
し、これから伸張ユニットによって、オリジナルファイ
ルの内容が再構築され得る。
コンピュータデータファイルが典型的に膨大な量の冗
長性を含むということは、定着している。これらのファ
イルがディスク又はテープ記憶媒体上でより小さいスペ
ースを占めるように、又は1200ボーのモデムラインのよ
うな伝送チャネルに於いてより短い時間で移送され得る
ように、これらのファイルを「圧縮」するために多くの
技術が長年用いられてきた。例えば、パーソナルコンピ
ュータに使用される幾つかの広く用いられている市販の
プログラムがある(例えば、System Enhancement Assoc
iates,Inc.,Wayne,NJ,1985のARCソフトウェア)。この
プログラムはファイル上で圧縮及び伸張の機能を果た
す。減少量はファイルの内容に大きく依存して変化する
が、このようなプログラムにとって、与えられたファイ
ルの大きさを2:1の比(又はそれ以上)に減少させるこ
とは一般的ではない。
4 データ圧縮のための従来技術に於ける多くのアプロ
ーチがなされている。これらのアプローチの幾つかは、
ファイル又はファイル内のデータの一定のタイプについ
て、暗黙の前提を作り出している。例えば、スキャナを
用いて生成されたページのビットイメージは、殆どが空
白の画素であり、この傾向は、このようなファイルの大
きさを大きく減少させる圧縮アルゴリズムによって利用
される。同様に、ワードプロセッシングファイルは、関
係する言語(即ち、英語)に最もよく現れるキャラクタ
(又はワード)の知識を用いて容易に圧縮される、多く
のアスキーキャラクタを含んでいる。他の圧縮方法はフ
ァイルのタイプから独立しており、そのデータに「適
応」するようにされている。一般に、特定のタイプ用の
圧縮技術は、その技術が最適化されるファイル上では、
一般用のアルゴリズムよりも高い圧縮性能を供給する。
しかし、もしファイルモデルが正しくないと、それらは
非常に低い圧縮性能を有する傾向にある。例えば、英語
のテキストに最適化された圧縮方法は、フランス語のテ
キストを含むファイル上では、不完全にしか機能しない
かも知れない。
典型的には、格納システムはどんなタイプのデータが
その中に格納されているか知らない。従って、特定のデ
ータ用の圧縮技術は避けられ、又はそれらは可能な技術
の集合の一つとして用いられるのみである。例えば、AR
Cは多くの方法を用い、そして各ファイルに最適のそれ
を選択する。しかし、このアプローチは単一の圧縮方法
を用いるのに比べて、非常なコンピュータのオーバーヘ
ッドを必要とすることに注意しなければならない。
圧縮方法の他の重要な見地は、ファイルが処理される
速度である。もし圧縮(又は伸張)の速度が非常に遅
く、システムの性能を著しく低下させる場合には、たと
えそれが競合する方法よりも高い圧縮比を達成し得て
も、その圧縮方法は受け入れられない。例えば、ストリ
ームテープシステムでは、もしテープ駆動に必要な速度
でデータを供給するのに十分速くファイルが圧縮されな
ければ、テープは流れの速度を落し、圧縮による性能及
び/又は容量利得は無駄になる。
最も一般的な圧縮技術の一つは、ランレングスコード
化として知られている。このアプローチは、ゼロ又はス
ペースキャラクタのような同じバイト(キャラクタ)が
繰り返されたストリングを、ファイルがしばしば有して
いるという事実を利用している。このようなストリング
は「エスケープ」キャラクタを用いてコード化され、繰
り返し数、繰り返されるキャラクタが続く。ランの形式
で現れなかった他の全てのキャラクタは、それらを「普
通テキスト」として出力ストリームに置くことによって
コード化される。エスケープキャラクタは滅多に使用し
ないバイトとなるように選ばれ、入力ストリームに於け
るその出現は、キャラクタとしてのエスケープキャラク
タそれ自身を有する長さ1のランとしてコード化され
る。ランレングスコード化はあるタイプのファイル上で
はよく機能するが、もしファイルが繰り返しのキャラク
タを有していなければ(又はファイルにエスケープキャ
ラクタがしばしば出現すれば)、低い圧縮比率しか有し
得ない。従って、一般に、エスケープキャラクタの選択
は、データ上で最も使用の少ないバイトを捜すという余
分な経路を必要とし、このようなシステムの効率を低下
させる。
最も洗練されたアプローチは、ハフマンコードとして
知られている(Huffman,Davd A.,“A Method for the C
onstruction of Minimum Redundancy Codes",Proceedin
gs of the IRE,pp,1098−1110,September 1952を参照せ
よ)。この方法では、あるバイトはファイル内で他のバ
イトよりしばしば多く現れると仮定される。例えば英語
のテキストでは、文字「t」又は「T」は文字「Q」よ
り多く存在する。各バイトはビットストリングに割り当
てられ、その長さは、逆にファイル内に於けるそのバイ
トの相当的な頻度に関係する。これらのビットストリン
グは、もし1ビットがある時に処理されると、唯一の結
果しか生じないようにデコードされるように選択され
る。ハフマンはファイルに対する相対的頻度の統計に基
づく、ビットストリングの最適割当てのためのアルゴリ
ズムを導いている。
ハフマンアルゴリズムは、達成される圧縮が漸近的に
ファイルの「エントロピー」に近づくことを保証し、そ
れは以下のように正確に定義される。
H=SUM−[p(i)log2(p(i))] ここで、 Hの単位はビットであり、それはファイル内のキャラ
クタを表現するのに(平均して)どれだけのビットが必
要がを測定する。例えば、もしエントロピーが8−ビッ
トバイトを用いて4.0ビットであれば、ハフマン圧縮シ
スムはファイル上で2:1の圧縮をなし得る。エントロピ
ーが高いほど、データはより「乱雑」(従って、あまり
圧縮できない)である。
ハフマンのコード化は多くのタイプのファイル上で非
常によく機能する。しかし、ビットストリングのバイト
への割当ては、多くの実際的な困難を伴う。例えば、予
め設定されたコード化スキームが用いられる場合(例え
ば、英語に於ける文字の出現の頻度に基づいて)、もし
その予め設定されたスキームが、ファイル内の実際に存
在するものとかなり異なる頻度統計であると仮定する
と、ハフマンのコード化はファイルを大きく拡張するか
もしれない。これに加えて、ファイルの内容に基づくコ
ード化スキームの演算は、ハフマンアルゴリズムを頻度
統計に適応するのと同様に、データ上での2つのパスを
必要とするのみならず(従って、システムの効率を低下
させる)、コード化テーブルがデータに沿って格納され
るということが必要とされ、これは圧縮率の上での否定
的な衝撃を有る。更に、バイトの相対的頻度は、ファイ
ル内で動的に容易に変えられ得る。そのため、どの点で
も特定のコード化割当てはうまく機能しない。
ハフマンアプローチの多くの変形があり(例えば、Jo
nes,Douglas W.,“Application of Splay Trees to Dat
a Compression",Communications of the ACM,pp.996−1
007,Vol.31,No.8,August 1988)、通常、それらは処理
された入力バイトの最新の履歴に基づいた、動的コード
割当てを含んでいる。このようなスキームは上で議論し
た問題点を回避する。他のアプローチは同時に2バイト
ワード(バイグラム(bi−gram))を見ることを含み、
ハフマンのコード化をそのワード上で行う。
近年のハフマンのコード化の変形は、MacCriskenの米
国特許第4,730,348号(及びその中で参照されている他
の特許)に現れている。MacCriskenの米国特許では、ハ
フマンコードは先のバイトのコンテキストに於けるバイ
トに割り当てられる。言い換えれば、複数のコード化テ
ーブルが用いられ、各テーブルは先のバイトに従って選
択される。このアプローチは、例えば、英語では文字
「u」は頻繁には現れないが、「q」の後には殆ど常に
現れるという観察に基づいている。従って、「u」に割
り当てられるコードは、先の文字が「q」(又は
「Q」)であるかどうかに依存して異なるであろう。多
数のテーブルと動的コード割当てとを用いる同様のスキ
ームについては、Jones,Douglas W.,“Application of
Splay Trees to Data Compression"を参照されたい。
上述のハフマンタイプのアプローチは、コンピュータ
によって強化される傾向にあり、例外的に高い圧縮比率
を達成するものではない。この観察に対する一つの説明
は、8ビットバイトに基づく純粋なハフマンコードは最
も良い場合には8:1の圧縮比率を達成し得ること、そし
てそれはファイルが同じバイトの繰り返し(即ち、エン
トロピー=0)から成る最善の状況でのみ達成され得る
ことである。同じ状況では、単純なランレングスコード
化スキームは50:1以上の圧縮率を達成し得る。平均の性
能は最善及び最悪の場合の数の同じ組合せであろう。そ
して、最善の場合の限度は、その平均をも制限する。理
想的なハフマンコードはコード割当てを最適化するため
に「断片的な」ビットを用いることを可能にするが、し
かし、各コード内のビットの総数の実際的な制限は、ハ
フマンのコード化の性能を、その理論的な限度よりもか
なり低く制限する。
圧縮のための全体的に異なるアプローチが、Ziv及びL
empelによって開発され(Ziv,J.及びLempel,A.“Compre
ssion of Individual Sequence via Variable−Rete Co
ding",IEEE Transactions on Information Theory,Vol.
IT−24,pp.530−536.September 1978を参照せよ)、Wel
chによって改良されている(Welch,Terry A.,“A Tchni
que for High−Performance Data Compression",IEEE C
omputer,pp.8−19,June 1984)。可変長のコードを固定
された大きさのバイトに割り当てる代わりに、Ziv−Lem
pelアルゴリズム(「ZL」)は、固定長のコードを可変
の大きさのストリングに割り当てる。ファイルからの入
力バイト処理されるにつれて、ストリングのテーブルが
作成され、各バイト又はバイトのストリングは、テーブ
ル内のストリングのインデックスのみを出力することに
より、圧縮される。典型的にはこのインデックスは11−
14ビットの範囲であり、12ビットが一般的である。なぜ
ならこれは単純な手法に向いているからである。テーブ
ルは先にコード化されたバイトのみを用いて作成される
ので、圧縮及び伸張のシステムの両方は、テーブル情報
を移送するのに必要な余分なオーバーヘッド無しに、同
じテーブルを維持することができる。ハッシングアルゴ
リズムがマッチングストリングを効率的に捜すのに用い
られる。ファイルの初めでは、テーブルはアルファベッ
トの各キャラクタに対して一つのストリングが初期化さ
れる。従って、たとえそのストリングが長さ1のみを有
していても、全てのバイトは少なくとも一つのストリン
グに見いだされるということを確実にする。
Ziv−Lempelアルゴリズムは、それ自身をデータに適
合させ、ファイルの内容に根拠を置く予め設定されたテ
ーブルを必要としないので、魅力がある。更に、ストリ
ングを極端に長くし得るので、最適の場合の圧縮比率は
非常に高く、実際のZL出力は、ほとんどのタイプのファ
イルでハフマンスキームに匹敵する。また、それは装置
にとっても非常に単純であり、この単純さが高い効率に
現れている。
しかし、幾つかの障害もまた、ZL圧縮法に存在する。
ZLストリング探索は「どん欲な」アルゴリズムである。
例えば、次のストリングを考える。
ABCDEFBCDEF ここで、A、B、C、D、E、Fは異なったバイトで
ある。ZLストリング探索は、AB、BC、CD、DE、EF、BC
D、DEFのストリングをストリングテーブルに付け加え、
このアルゴリズムを用いて出力され得る長さ2又はそれ
以上のストリングは、上で示した時点ではBC及びDEのみ
であることに注意しなければならない。。実際にはスト
リングBCDEFは既に入力に現れている。従って、第2のB
CDEFストリングは最初のBCDEFに戻って参照されるのが
理想であるが、実際にはこれは行われない。
ZLアプローチにとって重大な欠点は、圧縮されたデー
タを保持するためのストリングテーブルが、長いファイ
ルを満たしてしまう傾向にあることである。しかし、テ
ーブルの大きさは増大されることができ、このアプロー
チはストリングを表わすのにより多くのビットを必要と
し、従って、効率が低下するであろう。この欠点を扱う
ための一つのアプローチは、テーブルがいっぱいになっ
たときにそのテーブルの全部又は一部を捨てることであ
ろう。アルゴリズムの構造のために、最新に見いだされ
たストリングが最初に捨てられる。なぜなら、それらの
先のストリングに戻って参照するからである。しかし、
ローカルデータに動的に適合しているのは、最新のスト
リングであり、それらを捨てるのもまた効率的ではな
い。基本的にはZLストリングは無限の長さのメモリを有
しているので、ファイル内のデータのタイプの変更は、
もしストリングテーブルがいっぱいであれば、非常なコ
ード化の効率の悪さを引き起こし得る。
同時に1より多くの方法を用いる圧縮システムを設計
することも可能である。このシステムは、ファイル内で
その方法が最も効率的になるように動的に後ろ及び前に
スイッチングする。装置の観点からは、このようなスキ
ームは非常に高価であるかも知れないが(即ち、遅く及
び/又は高価である)、結果として得られる圧縮比率を
非常に高くすることができる。
動的に前後にスイッチするこのような一つの方法は、
MacCriskenの特許に開示されている。上述のように、バ
ウグラムハフマン法は主要な圧縮技術として使用されて
いる。典型的には、圧縮及び伸張システムは予め定義さ
れた(即ち、統計的に)コードテーブルのセットを用い
てスタートする。おそらく、英語、フランス語及びパス
カルソースコードのためのこのようなテーブルのセット
がる。圧縮ユニット(送信機)は、使用されるテーブル
の短い記述を最初に移送又は格納する。伸張ユニット
(受信機)はこのコードを分析し、適切なテーブルを選
択する。圧縮の間に、もし現在のテーブルが十分に機能
しないことが決定されると、送信機は特別の(「エスケ
ープ」)ハフマンコードを移送する。このコードは、他
の特定の予め定義されたテーブルを選択するか、又は伸
張された先のデータに基づいて新たなテーブルを計算す
るかどうかを受信機に伝える。送信機及び受信機の両方
は、同じアルゴリズムを用いてテーブルを決算するの
で、テーブル全体を送る必要はないけれども計算を行う
のに幾らかの時間がかかる。ひとたび新たなテーブルが
計算されると、以前と同様に圧縮が行われる。かなりの
コンピュータのオーバーヘッドが存在するけれども、こ
の技術が更に動的ハフマンスキームに用いられ得ないと
いう理由は無いことに注意しなければならない。
ハフマンのコード化に加えて、MacCriskenは第2のス
トリングに基づく圧縮方法を用いている。送信機及び受
信機の両方が、最新の移送された入力バイトの履歴バッ
ファを保持する。それぞれの新たな入力バイト(A)に
対してバイグラムハフマンコードが生成されるが、ハッ
シングスキームを用いて履歴内の次の3つの入力バイト
(ABC)によって表現されるストリングを見つける試み
もまた行われる。ハッシュが3バイトストリング上で行
われ、ハッシュリスト内の古い入力の廃棄を可能とする
ために、2重にリンクされたハッシュリストが維持され
る。もしストリングが見つかると、ストリングが続くこ
とを示すために特別のハフマンエスケープコードが生成
され、履歴バッファ内のストリングの長さとオフセット
が送られる。オフセットは10ビットにコードされ、長さ
は318バイトの長さを表現する4ビットにコードされ
る。しかし、このようなストリングが送られる前に、圧
縮ユニットはストリング内の全てのバイトに対するハフ
マンコードを発生し、そのハフマンコードの大きさをス
トリングビットの大きさと比較する。典型的にはハフマ
ンストリングエスケープコードは4ビットであり、スト
リングを表わすのに19ビットを要する。2つの量の小さ
い方が送られる。
MacCriskenストリング法は、Ziv−Lempel法のストリ
ングテーブルは決していっぱいにならないという問題点
を避けているということに注意しなければならない。な
ぜなら、古い入力はハッシュリストから除くことによっ
て廃棄されるからである。従って、最新の(1キロバイ
ト以内)のストリングのみがテーブルを占める。また、
原理的には全てのマッチングストリングが見いだされる
ので、それは「どん欲」ではない。実際には、ストリン
グ探索の長さの制限が課されている。これに加えて、Ma
cCrisken法は2つの圧縮アルゴリズムを同時に効率的に
行い、従って、コンピュータのオバーヘッドが非常に高
くなるので、コンピュータで行うにぱ非効率的である。
(課題を解決するための手段) 本発明は、磁気ディスク又はテープ記憶装置のような
デジタル記憶装置の容量を増大させる、圧縮/伸張シス
テムである。圧縮方法は完全に適合性があり、予め初期
化されたコード化テーブルを必要とせず、コンピュータ
ファイルのようなバイトに適応したキャラクタストリー
ムを最適化する。それは従来技術に見られる多くの困難
を克服し、上述で議論した先行する技術の何れよりも、
より速い速度でより高い圧縮率を達成する。
圧縮の間に、先に処理されたバイトの履歴バッファ又
はシフトレジスタアレイが、圧縮装置内に保持される。
圧縮はバイトの繰り返しのストリングをシフトレジスタ
に置くことにより達成される。もし現在検査されている
バイトを含むマッチングストリングが見つからなけれ
ば、そのバイトは、そのバイトが「生の」(即ち、スト
リングではない)ことを示す特別の標識ビットの後で出
力データストリームに付加される。もしこのようなスト
リングが見つかると、その長さとシフトレジスタ内の相
対的位置がコード化され、(圧縮)データストリームの
出力に付加される。ストリングの長さ及び位置は、たと
え2バイトの繰り返しのストリングでも、1:1より良い
圧縮比率を生じるようにコード化される。言い換えれ
ば、単一の「生の」バイトに於てのみ、データの「拡
張」を生じる。
ストリングの長さコード化は、可変長であり、ストリ
ングの位置もまた可変長のフィールドとしてコード化さ
れる。従って、本発明は可変長のストリングを可変長の
出力コードにマップする。
本発明の履歴アレイの具体例に於ては、効率的なスト
リング探索を行うために、ハッシュテーブルが履歴バッ
ファと組み合わせて使用され、ハッシュ「リフレッシ
ュ」法が、ハッシュデータ構造の維持に必要とされるコ
ンピュータのオーバーヘッドを最小にするために使用さ
れる。これらの技術は、現在利用できる集積回路技術を
用いた数メガバイト/秒にものぼる入力速度でも、入力
データの高速圧縮を可能にしている。
以下は本発明の二つの例により詳細な記述であり、入
力データキャラクタストリングを、可変長にコード化さ
れたデータストリングに変換するための方法及び装置を
含んでいる。データ圧縮システムはシフトレジスタ手段
又は履歴アレイ手段を有している。シフトレジスタ手段
又は履歴アレイ手段を組み込んだ方法は、以下のステッ
プを有している。
第1のステップは、履歴アレイ手段又はシフトレジス
タ内で、入力データストリームにマッチした最長のデー
タストリングを探索することを含んでいる。もしこのよ
うなマッチングデータストリングが履歴アレイ手段又は
シフトレジスタ手段内に見つかれば、第2のステップ
は、履歴アレイ手段又はシフトレジスタ手段内で見つか
ったマッチングデータストリングをコード化することを
含む。これはマッチングデータストリングが見つかった
とを示す標識とストリング置換コートとを、可変長にコ
ード化されたデータストリームに付加することにより行
われる。ストリング置換コードは、マッチングデータス
トリングの長さの可変長指示子と、マッチングデータス
トリングの履歴アレイ手段内の位置を指すポインタとを
含んでいる。
もしマッチング入力データストリングが履歴アレイ手
段又はシフトレジスタ手段内に見つからなければ、第2
のステップは入力データストリームの最初のキャラクタ
をコード化するステップを含み、これはマッチングデー
タストリングが見つからなかったこと、及び入力データ
ストリームの最初のキャラクタが可変長にコード化され
たデータストリームに付加されていることを示す「生
の」データ標識を、可変長にコード化されたデータスト
リームに付加することにより行われる。このように、入
力データストリームは可変長にコード化されたデータス
トリームに変換される。
履歴アレイ手段又はシフトレジスタ手段内で最長のマ
ッチングデータストリングを探索するステップは、更
に、履歴アレイ手段への最長のマッチングデータストリ
ングに対する予め決められた数の照会に探索を制限する
ステップを含み、又はシフトレジスタ手段の場合には、
前記入力データストリームの入力データキャラクタの予
め決められた量に、探索を制限するステップを含む。
シフトレジスタを使用する具体例は非常に反復的なの
で、VLSIの装置に非常に向いている。シフトレジスタア
レイの比較の殆ど毎回の操作が、最大のクロック速度に
パイプライン化され得、従って、効率が最大となる。例
えば、優先順位コード化は、望まれる性能を達成するの
に必要な高次元までパイプライン化され得る。パイプラ
イン化のこの能力は重要である。なぜなら、装置アレイ
に要求される大きなトランジスタ数は、そのアレイが数
個の集積回路にわたらざるを得ないからである。
ハッシング関数を実行するために、履歴アレイ手段を
用いるデータ圧縮システムは、履歴アレイポインタ、ハ
ッシュテーブル手段、及びオフセットアレイ手段を含
む、あるハッシュデータ構造を含んでいる。履歴アレイ
ポインタは履歴アレイ手段の最後のエントリを示してい
る。ハッシュテーブル手段は複数のエントリを有し、ハ
ッシュテーブルの各エントリは、履歴アレイ手段を指す
ポインタを格納する。オフセットアレイ手段は複数のエ
ントリを有し、各エントリは履歴アレイ手段のエントリ
の一つへのリンクを供給する。ハッシュ関数を果たすた
めのステップは、次のステップを含んでいる。
最初に、ハッシュテーブル手段のエントリの一つを指
すポインタを供給するハッシング関数の結果を得るこ
と。次に、ハッシング関数の結果によって指示されてい
るハッシュテーブルのエントリに格納されたポインタを
得ること。次に、履歴アレイポインタとハッシュテーブ
ル手段から読み取られたポインタとの間の差を計算し、
その差を履歴アレイポインタによって指示されているオ
フセットアレイのエントリに格納すること。最後に、履
歴アレイポインタをハッシュ関数によて指示されている
ハッシュテーブルのエントリに格納すること。
履歴アレイ手段を用いた履歴アレイの具体例 また、履歴アレイ手段を用いた本発明の履歴アレイの
具体例は、リフレッシュ機能を含んでいる。リフレッシ
ュ機能は、各エントリのポインタが予め決められた量だ
け履歴ポインタと異なるかどうか決定するために、ハッ
シュテーブルのエントリに格納されたポインタを周期的
に調べる。もしそのポインタと履歴アレイポインタとの
差が予め決められた量より大きければ、ハッシュテーブ
ルのエントリはそのエントリを再び初期化する無効な値
に置き換えられる。
これに加えて、この履歴アレイの具体例は、ハッシュ
テーブルの全てのエントリを、そのテーブルを効率的に
初期化する無効値で効率的に置き換える初期化ルーチン
を供給する。
また、履歴アレイ手段を用いた本発明の履歴アレイの
具体例は、圧縮ユニットの出力である可変長にコード化
されたデータストリームをデコードするための方法を含
んでいる。分解のための方法は、以下のステップを含ん
でいる。
最初に、可変長にコード化されたデータストリームが
独立した部分に分けて解析(パーズ)され、各独立部分
は標識の一つで始まる。次に、各独立部分の標識が評価
され、標識が生データ標識であるかコード化されマッチ
ングデータストリングを示す標識であるかが決定され
る。標識がコード化されたマッチングデータストリング
があることを示す場合には、次のステップは、長さ指示
子と、マッチングデータストリングを生成するための置
換コードのポインタとを解釈することを含む。このよう
に、最初の入力データストリームの部分が再構築され
る。他方、標識が生データである場合には、コード化さ
れた入力データストリームの最初のキャラクタが得ら
れ、このようにして最初のデータストリームが再構築さ
れる。
シフトレジスタを用いる第2の具体例 シフトレジスタ手段を用いる第2の具体例は、ハッシ
ング関数の具体例より高い効率を有し、回路のコストを
最小にするために集積回路技術を用いている。これに加
えて、この具体例は最長のマッチングストリングは常に
シフトレジスタアレイに見いだされるということを保証
する。この履歴アレイの具体例は、探索が高速のパイプ
ライン方式で行われることを可能にする。より詳細に
は、入力データストリームの入力データキャラクタは、
シフトレジスタの各エントリに同時伝送される。入力デ
ータキャラクタは、シフトレジスタの各エントリの格納
されたキャラクタと比較される。もし入力データキャラ
クタがシフトレジスタ内の格納されたデータキャラクタ
の何れかにマッチすれば、マッチした結果が現れる。こ
のプロセスは各入力データキャラクタに対して、最長の
マッチングデータストリングが見いだされるまで行われ
る。シフトレジスタ手段の各エントリに対するマッチし
た結果は蓄積され維持される。これに加えて、最長のマ
ッチングストリングの長さに沿った最長のマッチングス
トリングのエントリの位置が格納される。次に、エント
リの位置及び長さが、それによって圧縮比率を得るため
にコード化される。
また、シフトレジスタ手段を用いる第2の具体例は、
圧縮ユニットの出力である可変長にコード化されたデー
タストリームをデコードするための方法を含んでいる。
分解の方法は以下のステップを含んでいる。最初に、可
変長にコード化されたデータストリームが独立した部分
に分けて解析(パーズ)され、各独立部分は標識の一つ
で始まる。次に、各独立部分の標識が評価され、標識が
生データ標識であるかコード化されたマッチングデータ
ストリングを示す標識であるかが決定される。標識がコ
ード化されたマッチングデータストリングがあることを
示す場合には、次のステップは、長さ指示子と、マッチ
ングデータストリングを生成するための置換コードのポ
インタとを解釈することを含む。このように、最初の入
力データストリームの部分が再構築される。他方、標識
が生データである場合には、コード化された入力データ
ストリームの最初のキャラクタが得られ、このようにし
て最初のデータストリームが再構築される。
(実施例) 本発明を実施例について以下に説明する。
1.圧縮ユニットの構成 第1a図、第1b図、第1c図及び第1d図に本発明による圧
縮ユニット4及び伸張ユニット6を示す。ユニット4及
び6は、ハードウェアモジュールであっても、ソフトウ
ェアサブルーチンであってもよい。しかし、履歴アレイ
を用いた第1の実施例及びシフトレジスタ手段を包含す
る第2の実施例に於いては、圧縮ユニット4及び伸張ユ
ニット6は1個の集積回路に組み入れられる。この集積
回路は、マイクロプロセッサ5によって制御されるデー
タ記憶システム又はデータ伝送システムの一部として用
いられる。第1a図及び第1c図に於いて、入力データスト
リーム8は、ホスト10と称されるデータ送信装置から圧
縮ユニット4に入力される。コード化され、圧縮された
データストリーム12は装置(device)14と称されるデー
タ受信装置へ伝送される。
同様に、履歴アレイを用いた第1の実施例を示す第1b
図及びシフトレジスタ手段を用いた第2の実施例を示す
第1d図に於いて、伸張ユニット6は、装置14(ここでは
データ送信装置)から圧縮されたデータストリームを受
け取り、元の圧縮されていないデータストリーム20を再
構成し、そのデータストリームをホスト10(ここではデ
ータ受信装置)へ出力する。履歴アレイを用いた第1の
実施例及びシフトレジスタ手段を用いた第2の実施例に
於いて、伸張及び圧縮は同時には行われない。しかし、
他の実施例態様に於いては伸張及び圧縮は同時に行われ
得る。
履歴アレイを用いた実施例に於ける全てのデータ構造
(例えば、履歴アレイ102、ハッシュテーブル100、及び
オフセットアレイ104(第4図))は、別の外部のRAMチ
ップ16内に保持されている。RAM16を圧縮及び伸張用チ
ップに含めることも可能であるが、現在の技術では、RA
M16及び圧縮/伸張ユニット4、6を共に包含するチッ
プは非常に高くつくであろう。履歴アレイを用いた実施
例に於いては、RAM16は少なくとも16Kバイトのデータ容
量を有する必要がある。RAM16の構成は、16K×8ビット
であっても8K×16ビットであってもよい。履歴アレイを
用いた実施例では又、より大きいハッシュテーブル(第
4図)を用いて能力を向上させることを考慮すると、32
Kバイト迄のRAM16を用いることができる。履歴アレイを
用いた実施例に於いて具体化される好ましいデータ構造
のより詳細な説明は、そのようなデータ構造を構築し、
保守する圧縮ユニットについての以下での議論の中で与
えられる。シフトレジスタ手段を用いた実施例の構成で
は、外部RAMは使用されない。
以下で議論される全ての数値パラメータ(例えば、ME
MSIZE、16ビットHPTPサイズ等)の値が本発明の圧縮、
伸張技術に於ける基本的な概念に影響を及ぼすことなく
変更可能であることは、当業者には理解されるであろ
う。
2.履歴アレイを用いた実施例に於けるコード構成 第2図に本発明の履歴アレイを用いた実施例のコード
構成を示す。本実施例に於けるコード化方法は、出力デ
ータストリームが「生(raw)」又は非圧縮であるか、
あるいは圧縮されたものであるかを示すためのタグビッ
トを用いる。非圧縮であることは1個の「0」ビットで
示され、第2図に参照符号19で示されるように、0BBBBB
BBBはコード化された「生」の8ビットのバイトであ
る。圧縮が行われたことは1個の「1」ビットで示さ
れ、第2図に参照符号21で示されるように、「1(オフ
セット)(長さ)」は履歴バッファ内で「オフセット」
だけ戻った位置にあるストリングである。本実施例で
は、履歴バッファ内でのオフセットのコード化又は戻り
のバイト数は、第2図に参照符号23で示すように、2通
りの形式の一方をとる。7ビットを有する短い形式で
は、1〜127バイトのオフセットが発生される。他方、1
1ビットを有する長い形式では、1〜2047バイトのオフ
セットが発生される。短いオフセット形式と長いオフセ
ット形式とは、1個のビットで区別される。即ち、
「1」は短い形式を示し、「0」は長い形式を示す。本
発明で特別に用いされている長さのコード構成を、第2
図のテーブル25に示す。テーブル25の先頭から見ていく
と、2バイトの長さは、第2図に参照符号22で示すよう
に、値「00」を有する2ビットにコード化される。同様
の手法で、3バイト及び4バイトの長さのコード化の結
果は、値「01」を有する2ビット(第2図の参照符号2
4)及び値「10」を有する2ビット(第2図の参照符号2
6)でそれぞれ表される。5バイトから7バイトまでの
長さは「11 00」から「11 10」までの値を有する4ビ
ットで表される(第2図の参照符号28〜32)。8バイト
から22バイトまでの長さは、「11 11 0000」から「11
11 1110」までの値を有する8ビットで表される。22
バイト超の長さについては、次の23バイトから37バイト
までの長さは12ビットで表され(第2図の参照符号64〜
70)、以後、同様にしてビット数が増大してゆく。テー
ブル25に示される長さのコード構成の利点は、以下で議
論する圧縮方法の中でビットストリングの長さのコード
化を行うための効率的な手続きを可能にすることにあ
る。長さ及びオフセットのコード化のために、様々なコ
ード化方式が用いられてきたが、このようなアプローチ
によって得られる圧縮比は、本実施例によるものに非常
に近い。
第3図に、第2図の圧縮機能を用いた場合の単純な結
果のテーブルを示す。このテーブルは3個の列に分割さ
れている。第1列75は入力バイトストリームを示してい
る。第2列77はコード化された出力ストリームである。
最後の第3列79はコメントを与えている。コード化され
た出力ビットストリームの各行には、参照符号76〜86か
付加されている。入力バイトストリーム75(ABAAAAAACA
BA)を圧縮するための基本的な操作は次の通りである。
圧縮は、入力バイトストリーム75の中でマッチするバイ
トストリングを見つけ出すことによって達成される。こ
の機構は、シフトレジスタを用いた実施例に於いても用
いられる。本実施例に於いては、効率的なハッシュ探索
を行うために、第4図に示すハッシュ構造が用いられて
いる。第4図に示す構造及びハッシュ探索のより詳細な
議論は、後に行う。本実施例に於いては、2バイト以上
の長さを有するバイトストリームに対して圧縮が生じ
る。第1の入力バイトが圧縮ユニット4によって受け取
られると、該第1の入力バイトにマッチする他の2バイ
トストリングが過去の履歴中に存在したが否かを判定す
るための探索が行われる。第1の入力バイトは以前の履
歴を有していないキャラクタ「A」(第3図の参照符号
76)であり、従って、この第1のバイトについては、第
3図に参照符号76及び77で示すように、8ビットのバイ
トが、「生」(又は非圧縮)であることを示すうタグビ
ット「0」の後でコード化された出力ストリームに追加
される。
入力バイトストリーム中の次の入力バイトはキャラク
タ「B」である。この時点では、バイトストリーム中の
他の唯一のバイトはマッチしない(履歴はキャラクタ
「A」を有している)ため、第3図に参照符号78で示す
ように、キャラクタ「B」のためのバイト及び「生」バ
イト標識(タグビット)が出力される。入力ストリーム
75中の次の入バイトはキャラクタ「A」である。本実施
例に於いては2バイト以上のバイトストリングのみが圧
縮されるため、第3図に参照符号80で示すように、キャ
ラクタ「A」のためのバイトは非圧縮のまま、生のデー
タバイトとして出力される。しかし、次の入力バイト
(キャラクタ「A」)が出現すると、2バイトのストリ
ングが見いだされる。圧縮ユニット4は長さ2のマッチ
を与え、入力バイトストリームの引き続くバイトを比較
する。次の入力バイトは以前のバイト(例えば、キャラ
クタ「A」)にマッチするので、マッチの長さがインク
リメントされ、ストリングマッチが「拡張」される。こ
の手順はキャラクタ「A」を有する次の4個の入力バイ
トについて継続される。第3図の行82に示すように、キ
ャラクタ列「AAAAAA」のコード化されたビットストリン
グは、「11 0000001 1100」である。コード化された
ストリングの第1ビットは圧縮コード化モードを示す
「1」である。コード化されたビットストリング中の次
のビットはオフセットの短い形式(第2図の参照符号2
3)が用いられていることを示す。オフセットは1バイ
トのオフセットを示す「0000001」であり、長さ「110
0」は、第2図のテーブル25に示すように、5バイトを
示す。入力バイトストリーム75中の残りのバイトは、上
述したものと同様の戦略を用いてコード化される。
上述の例では、あるバイトについてマッチがとれなか
った場合には、圧縮ユニット4は、入力バイトストリー
ムの履歴を遡って、現在の入力バイトまでマッチし、そ
の入力バイトを含むストリングを探索する。そのような
新たなストリングが見いだされた場合には、マッチの長
さがインクリメントされ、新たなマッチするストリング
の位置が定められ、記憶される。このストリングマッチ
は従って、「拡張」されている。そのような新たなスト
リングが見いだされない場合、又は余りに多くの先行す
る入力バイトエントリを探索する必要がある場合には、
現在のマッチするストリングが最大のストリングである
と仮定され、そのマッチするストリングが、コード化さ
れた形式又は生のバイト形式で出力される。コード化さ
れた形式では、そのストリングの長さ及び入力バイトス
トリームを保持している履歴中のそのストリングの相対
位置が、出力される(圧縮された)データストリームに
追加される。オフセットは、そのストリング開始位置か
らバッファ内のマッチしたバイトまでのバイト数として
計算される。このバイト数は、履歴アレイを用いた実施
例では、1からメモリサイズ(「MEMSIZE」)−1迄の
範囲にある。上述したように、長さ及びオフセットは第
2図に示したようにコード化される。「従来の技術」の
章で論じたアプローチとは対照的に、本実施例に於ける
圧縮の手法では、異なる長さのストリングが異なる長さ
の出力コードにマッピングされることに注意されたい。
入力バイトストリームに対するストリング探索操作に
多くの実現方法が存在することが当業者には理解される
であろう。特に、マッチするストリングを見いだすため
に用いることができるハッシング技法及び探索手法には
多くのものが存在する。様々なハッシング技術について
の完全な背景に関しては、Knuthの「Sorting and Searc
hig、The Art of Computer Programming(Vol.3)、pp.
506−549(1987)」を参照されたい。以下に、本実施例
によって用いられる特別なハッシュ構造の詳細を述べ
る、ここで論じられるデータ構造及びアプローチが選択
されたのは、それらによって、圧縮機能のために要求さ
れるRAMサイクルの数が最小化され、従ってシステムの
スループットが最大化されるからである。
3.履歴アレイ手段を用いた実施例のデータ構造 第4図を参照して、本実施例のハッシュ構造について
述べる。既に処理された(圧縮された、又は生のデータ
として圧縮されなかった)入力データの最後の2048キャ
ラクタを包含する履歴アレイ102がRAM16に格納されてい
る。新たな入力データが圧縮ユニット4(第1a図)によ
って受け取られると、本発明のシステムは、新たな入力
データ中の少なくとも2バイトの「ストリング」が履歴
アレイ102中のストリングにマッチするか否かをチェッ
クする。マッチすれば、この入力データのストリングは
コード化され、マッチしなければ、該入力データのスト
リングは上述したように生のデータとして表される。
ハッシュテーブル100は履歴アレイ102中の特定のスト
リングを素早く見いだすために用いられる。ハッシュテ
ーブル100は、履歴アレイへの履歴アレイポインタを含
む一連のビン(bin)エントリ106で構成されている。オ
フセットアレイ104と称されるいま一つのデータ構造は
ハッシュテーブルである。オフセットアレイ104中の各
リンクリストの第1の要素は、特定のハッシュ値に対応
する履歴アレイ中の前のエントリを指し示している。該
リンクリスト中の最後の要素(この要素は無効なポイン
タであってもよい)はこのハッシュ値に関連付けられた
最も古いエントリを指し示している。圧縮ユニット4
は、各入力バイトが処理された後にインクリメントされ
る16ビットの履歴ポインタHPTR108を維持している。HPT
Rは0に初期化され、圧縮ユニットによって64Kバイトが
処理された後に0に戻る。オフセットアレイ104は実際
には単純リンクリスト(singly linked list)から構成
された2次履歴である。ある特定のオフセットがMEMSIZ
E−MAXSTR(ここでMAXSTRは探索されている最大のスト
リングである)よりも大きいか、又はリストの最近のエ
ントリからの全てのリンクの合計がMEMSIZE−MAXSTRよ
りも大きい場合には、特定のハッシュビン(値)中に有
効なエントリはもはや存在しない。このようにして、ME
MSIZE−MAXSTRよりも古いエントリはハッシュテーブル1
00の終わりから効果的に「離れ落ちる(fall off)」。
本発明のこの点により、オフセットアレイ104中の単純
リンクリストの使用を可能にする。単純リンクリストの
維持は、二重リンクリストに比べて半分以下のメモリア
クセスによって行うことができる。しかし、単純リンク
リストの使用は、以下で述べるリフレッシュハッシュ操
作を必要とする。
4.履歴アレイを用いた実施例の圧縮操作 第5a図、第5b図及び第5c図に、本発明の圧縮操作の詳
細なフローチャートを示す。フローチャート(第5a図、
第5b図及び第5c図)の特別なデータパスを示すハードワ
イヤード版を第7図に示す。
より詳細には、第5a図に於いて圧縮操作ルーチンはブ
ロック108から出発する。次に、ブロック110に於いて、
初期化ルーチン(第5b図)が呼び出され、第4図に示す
ハッシュ構造が初期化される。この操作は典型的にはシ
ステムの初期化に於いて行われ、1回の「圧縮」が完了
し、新たな圧縮が開始される場合にも繰り返し行われる
必要はない。
第5b図のブロック112に於いて、ハッシュポインタ(H
PTR)108が0に設定される。ブロック114(第5b図)に
於いて、コード化されているビットストリングの現在の
長さを追跡するためのマッチ長変数(「MATCHLEM」)が
0に設定される。次に、ブロック116に於いて、後述す
るリフレッシュカウント変数(「RFSHCNT」)が12に設
定される。ブロック118に於いて、後述するリフレッシ
ュポインタ変数(「RFSHPTR」)が0に設定される。次
に、ブロック120に於いて、ハッシュテーブル100が値HP
TR−MEMSIZEで埋められる。このステップにより、ハッ
シュテーブル100の以前の有効な値は効果的に空にされ
る。ハッシュテーブルは非常に大きいので、新たなデー
タストリームが与えられる度にこのような初期化プロセ
ス(第5b図)が必要とされるならば、たいていのシステ
ムに於いて受け入れ難い待ち時間が生じる。このため、
リフレッシュハッシュルーチン(第5c図)が用いられ、
これにより初期化のコストが圧縮の全期間に分配され、
従って、圧縮操作間の待ち時間が最小化される。
第5a図を再び参照すると、初期化ルーチン(第5b図)
の終了後、圧縮ユニット4(第1a図)は入力されるデー
タストリームからのバイトの受け入れを開始することが
できる。ブロック124に於いて、変数RFSHCNTが0である
か否かが調べられる。RFSHCNTが0にデクリメントされ
ている場合には、処理はブロック126へ進む。ブロック1
26に於いてはリフレッシュハッシュルーチン(第5c図)
が実行される。
リフレッシュハッシュルーチン(第5c図)の目的は、
ハッシュテーブル100の特定の場所に於いてHPTRが古い
値に折り返される(wrap back)という万一の状況に対
処することにある。このような状況が生じた場合には、
ハッシュテーブル100内の実際には非常に古いハッシュ
ビン106が突然に非常に新しく見えるようになる。リフ
レッシュハッシュルーチン(第5c図)は、ハッシュテー
ブル100の各エントリ(HASHTABLE(j))を定期的に調
べ、そのエントリが余りに古くないか、例えばHPTR−HA
SHTABLE(j)>OLDHASHが成り立つか否かを定めること
に責任を負っている。ここで、OLDHASHは適切に選ばれ
た値(例えば16K)である。そのエントリが余りに古い
場合には、HPSHTABLE(j)はHPTR−MEMSIZEで置き換え
られる。この値は充分に古いので、無効又は「NIL」ポ
インタとして扱われるが、このことにより、更に64K−M
EUMSIZE迄のバイトを、HPTPの折り返しの問題無しに処
理することができる。ハッシュテーブル100がリフレッ
シュされる頻度は次のようにして計算される。目標は、
全てのハッシュテーブルのビンが64K−OLDHASHバイト毎
に少なくとも1度調べられることを保証することであ
る。この目標は、(64K−OLDHASH)/HASHSIZEの入力バ
イト毎に1回のリフレッシュハッシュを行うことによっ
て達成される。ここで、HASHSIZEはハッシュテーブル10
0内のビンの数である。本実施例に於いては、この値は4
8K/4K=12であり、従って、各12回目のバイトの入力毎
にハッシュテーブル100の1個のハッシュエントリがリ
フレッシュされる。
1回のリフレッシュ操作は常に1個のメモリサイクル
を含むが、ハッシュテーブル100のビンエントリが更新
される必要がある場合には第2の(書き込み)サイクル
が必要とされることに注意されたい。OLDHASHを増大さ
せると、リフレッシュの頻度も又増大する、しかし、ビ
ンエントリがストリングハッシングによって既に更新さ
れている可能性がより高くなるので、第2のサイクルの
生じる可能性は低下する。OLDHASH=16Kという値は経験
的に得られたものであり、この値によれば、本実施例に
於けるリフレッシュのオーバーヘッドは適当はものにな
る。入力データのバイト当りのリフレッシュオーバーヘ
ッドは概ね1/12から2/12メモリサイクルまでの間にあ
る。これは、二重リンクリストを維持するためのオーバ
ーヘッドよりも1桁以上小さい。
圧縮操作の終了又は新たな入力バイトストリームに対
する新たな圧縮操作の開始のためには、圧縮ユニットは
単にHPTRをMEMSIZEだけインクリメントし、これにより
ハッシュテーブルのビンは自動的に無効化される。これ
に加えて、リフレッシュユニットは、MEMSIZE/12のリフ
レッシュサイクルを実行し、実際には処理されなかった
MEMSIZEバイトの間に省略されたリフレッシュサイクル
を埋め合わせなければならない。しかし、この操作は40
96回ではなく僅かに171回のリフレッシュ操作を含むだ
けであり、従って、非常に短時間に遂行される。他の圧
縮方法に於いては、新たな圧縮操作の開始に先立って通
常全てのテーブル及びバッファをクリアする必要があ
り、多大な待ち時間が必要となる。
第5c図に於いて処理はブロック130へ進み、HPTR−HAS
HTABLE(RFSHPTR)>16Kであるか否かが調べられる。以
前に延べたように、この操作により現在のエントリが余
りに古いか否かが定められる。該エントリが余りに古い
場合には、処理はブロック132へ進み、ここでHASH(RFS
HPTR)がHPTR−MEMSIZEに設定される。これにより、こ
のエントリ位置に無効値が効果的に生成される。ブロッ
ク130に於いてエントリが余りに古くはないと判定され
た場合には、処理はブロック134へ進む。エントリが余
りに古いか否かに拘らず、処理はブロック134に進み、R
FSHPTRが1だけインクリメントされる。次に、ブロック
136に於いて、RFSHCNTが12に設定され、処理は圧縮操作
ルーチンのブロック128(第5a図)へ戻る。
ブロック124に於いてRFSHCNTが0に等しい(この場合
にはリフレッシュハッシュルーチン(第5c図)の呼出が
必要である)と判定されたかそうでないかに拘らず、処
理はブロック128に進む。ブロック128に於いては、圧縮
ユニット4(第1a図)は操作の初期化を行うために、履
歴アレイ102の最初の2バイトを入力データで埋める。
この2バイトはレジスタINREG0及びINREG1に保持され
る。新たな1バイトが処理される度に、第1バイト及び
次の入力バイトのハッシュ(「H」)が計算される。本
実施例では、INREG0を左へ4ビットシフトしたものとIN
REG1との排他的論理和をとることによってハッシュが計
算される。上述したように、(以前に参照した)Knuth
によって議論されているいずれのハッシュ関数も適用可
能である。新たな1個の入力バイトが処理される度に、
INREG1の内容はINREG0へ移され、INREG1には新たなバイ
ト値がロードされる。
ブロック128で処理される各バイトについて、ハッシ
ュ値H(「H」)が計算され、新たなハッシュ値に対応
するハッシュ値のビン中の古いエントリが読み出され、
NEXTと称される変数に格納される。更に、ブロック128
に於いて、現在のハッシュ値に対応するハッシュテーブ
ルの場所の古いエントリはHPTRの現在の値で置換され
る。ブロック140に於いて、HPTR−NEXT≧MEMSIZE−MAXS
TRであるか否かが判定される。変数MAXSTRは、履歴アレ
イ102中で見いだされるマッチするバイトストリングが
現在処理されているバイトによって上書きされないこと
を保証する、探索されるストリングサイズの最大値であ
る。HPTR−NEXTがMEMSIZE−MAXSTR以上であると判定さ
れた場合には、処理はブロック142へ進み、変数NEXTはH
PTR−MEMSIZEに設定される。換言すれば、履歴の最後の
MEMSIZEバイト中にはマッチするストリングが存在しな
かったため、ハッシュビンは空にされる。
HPTR−NEXTがMEMSIZE−MAXSTR以上であると判定され
たか否かに拘らず、処理にはブロック144へ進む。ブロ
ック144では、値HPTR−NEXTが、対応するオフセットア
レイ104のエントリOFFSET(HPTR)に書き込まれる。
又、ブロック144では、INREG1の値が履歴アレイ102のエ
ントリHISTORY(HPTR)に置かれる。上述したブロック1
24、126、128、140、142及び144で実行されるステップ
により、現在処理されているバイトについて必要とされ
るデータ構造の保守は完了し、この時点で、履歴アレイ
102の内容のストリング探索を開始することができる。
上述した保守機能は、圧縮ユニットが現在ストリングマ
ッチの処理を行っているか否かに拘らず、処理される全
ての入力バイトについて実行させることに注意された
い。
ブロック146に於いて、マッチ長変数MATCHLENが0に
等しいか否かが判定される。初期化ルーチンのブロック
114(第5b図)に於いてMATCHLENは0に設定されたこと
を想起されたい。MATCHLENは現在のストリングマッチ長
を包含しており、その値は処理の開始時に於いては0で
ある。ここで圧縮操作の開始時点での処理を行ってお
り、MATCHLENが0である場合には、内部ハッシュカウン
タPASHCNTが0に設定される。HASHCNTは個々のストリン
グ探索の繰り返しを制限するために用いられる。次に、
ブロック150に於いて、HPTR−NEXT≧MEMSIZE−MAXSTRで
あるか否かが判定される。HPTR−NEXTがMEMSIZE−MAXST
Rよりも小さいと判定された場合には、処理はブロック1
52へ進む。ブロック152では、INREG1の値が履歴アレイ
のHISTORY(NEXT)の値に等しいか否かが判定される。
このステップの目的は、履歴アレイ内の先行するエント
リに対してINREG0及びINREG1内の2バイトにマッチする
2バイトストリングを探索することにある。INREG1内の
値のみがHISTORY(NEXT)の値と比較される、なぜなら
ば、ハッシュ関数はINREG0に関して1対1の写影が行わ
れるように選ばれており、そのためハッシュリスト中の
各ストリングからの1バイトのみがINREG1と比較される
必要があるからである。このステップにより、2バイト
の比較に代えて1バイトの比較を行うだけでよいことか
ら、本実施例の性能は向上する。ブロック150に於いてH
PTR−NEXTがMEMSIZE−MAXSTR以上であると判定された場
合には、処理はブロック158へ進む。ブロック158では、
生データタグ及びINREG0内の生データが出力され、処理
はブロック125へ進む。ブロック125では、次の入力バイ
トが得られ、処理全体が再び開始される。
ブロック152に於いてマッチが成功したと判定された
場合には、処理はブロック160へ進み、変数MATCHPTRの
値が変数NEXTの値に等しく設定される。更に、2バイト
のマッチを示すために変数MATCHLENが2に設定され、処
理はブロック125へ進み、次の入力バイトが得られる。
しかし、HISTORY(NEXT)の値がマッチしない場合に
は、処理はブロック154へ進み、HASHCNTの値がインクリ
メントされ、変数NEXTはNEXT−OFFSET(NEXT)に等しく
設定される。このステップにより、オフセットアレイ10
4によってリンクされている次のエントリが効果的に指
し示される。処理はブロック156へ進み、HASHCNTが既定
の最大カウント値MAXHCNT(典型的には8)に達したか
否かが判定される。HASHCNTがMAXHCNT以上でる場合に
は、処理はブロック158へ進み、生のバイトINREG0が出
力され、処理はブロック125へ進む。しかし、HASHCNTが
MAXHCNT以上でなければ、HASHCNTがMAXHCNTに達する
か、ハッシュリストにそれ以上の有効なエントリが存在
しなくなる(ブロック150に於いて判定される)か、又
は(ブロック152に於いて)マッチするストリングが見
いだされるかの条件が発生するまで、ブロック150、15
2、154及び156の処理が継続される。
処理がブロック125へ進んだ場合には、その時点で圧
縮ユニト4(第1a図)は新たな入力バイトを処理できる
状態にある。ブロック125に於いて、HPTRがインクリメ
ントされ、変数RFSHCNTがデクリメントされる。ブロッ
ク124、126、128、140、142、144、146、148、150、15
2、154、156、158、160及び125の処理が、ブロック146
に於いてMATCHLENが0より大きいと判定されるまで実行
される。ブロック146を参照し、MATCHLENが0に等しく
ない場合には処理はブロック162へ進むことに注意され
たい。ブロック162に於いて、変数MATCHPTRが1だけイ
ンクリメントされる。このようにして、新た値INREG1は
履歴アレイ102中のMATCHPTRに於いて見いだされるMATCH
LEN+1の長さのストリーム内の新たなバイトと比較さ
れる。ブロック164では、バイトのマッチが成功したか
否かが判定される。マッチした場合には、ブロック180
に於いてMATCHLENがインクリメントされてストリングが
拡張され、処理は次にブロック125へ進む。しかし、マ
ッチがとれなかった場合には、処理はブロック166へ進
み、変数NEXTはMATCHPTR−MATCLEN+1に等しく設定さ
れる。処理はブロック168へ進み、変数NEXTはNEXT−OFF
SET(NEXT)に設定される。更に、ブロック168で、変数
HASHCNTがインクリメントされる。ステップ166及び168
により、圧縮ユニット4(第1a図)は、ハッシュビン中
に残されている連続するストリングエントリに於いて、
マッチがとれるオリジナルのストリングを探索する。ブ
ロック170では、HPTR−NEXT≧MEMSIZE−MAXSTRであるか
否かが判定される。HPTR−NEXTがMEMSIZE−MAXSTRより
も大きいと判定された場合には、有効なエントリはそれ
以上存在せず、処理はブロック182へ進む。ブロック184
では、MATCHLENが0に設定され、ブロック125で新たな
バイトについて処理が開始される。しかし、ブロック17
0に於いてHPTR−NEXTがMEMSIZE−MAXSTRよりも小さいと
判定された場合には、処理はブロック172へ進み、MATCH
LEN≧MAXSTRであるか否かが判定される。MATCHLEN≧MAX
STRである場合には、無効な探索が生じており、処理は
ブロック182へ進む。しかし、MATCHEN≧MAXSTRでなけれ
ば、処理はブロック174へ進む。ブロック182に於いて圧
縮ユニット4(第1a図)は、マッチするストリングが見
いだされたことを示すタグビット(「1」)、それに引
き続く、履歴アレイ102中のマッチしたストリングの適
切にコード化されたオフセット(OFFSET=HPTR−MATCHP
TR)、及びコード化された長さを出力する。
ブロック174では、位置HISTORY(NEXT)に於ける長さ
MATCHLEN+1の現在のストリングが内部マッチバッファ
の内容に等しいか否かが判定される。内部マッチバッフ
ァは、現在マッチしているストリングのMATCHLEN個のバ
イトの全てを包含している。このバッファにより、スト
リングの最初のマッチに試みが失敗した場合の新たなス
トリングの探索が高速化される。マッチが実行される度
にマッチをとろうとするバイトを得るためにRAMにアク
セスする必要はなく、該バイトは圧縮ユニットが含まれ
るチップ内で即座に利用できるため、効率がよい。換言
すると、マッチバッファは処理を効果的に向上させるた
めのルックアサイド(look aside)バッファとして機能
する。マッチバッファの長さは有限である(本実施例で
はMAXSTR=8バイトである)。
HISTRORY(NEXT)に於ける長さMATCHLEN+1のストリ
ングがマッチバッファの内容に等しい場合には、処理は
ブロック178へ進み、変数MATCHPTRはNEXT+MATCHLENに
等しく設定される。処理はブロック180へ進み、MATCHLE
Nがインクリメントされる。次に処理はブロック125へ進
み、入力データストリーム中の次の新たなバイトが処理
される。しかし、HISTORY(NEXT)に於けるストリング
がマッチバッファに等しくない場合には、処理はブロッ
ク176へ進み、変数HASHCNT≧MAXHCNTであるか否かが判
定される。HASHCNT≧MAXHCNTである場合には、処理はブ
ロック182及び184へ進み、タグビット「1」、履歴アレ
イ中のマッチしたストリングの適切にコード化されたオ
フセット、及びコード化された長さを有するコード化さ
れたストリングが出力され、変数MATCHLENが0に設定さ
れる。処理はブロック125へ進み、次の新たな入力デー
タバイトが処理される。ブロック176に於いて、HASHCNT
≧MAXHCNTでないと判定された場合には、MATCHLEN+1
の長さのマッチがとれるか、HASHCNTがMAXHCNTに達する
か、又は有効なハッシュエントリが存在しなくなる(HP
TR−NEXT≧MEMSIZE−MAXSTR)かの条件が発生するま
で、ブロック168、170、172、174および176の処理が実
行される。
本実施例では、RAM16(第1a図)が全てのクロックサ
イクルに於いて使用中であることを保証するための、上
述の操作はパイプライン化される。なぜならば、RAMサ
イクルカウントは性能を制限する要因だからである。
記憶システムに於いては通常、データは固定長のセク
タ又はブロックにブロック化されなければならず、ある
段階で圧縮を打ち切り、残りの入力ストリームについて
新たな操作を再開すること望ましい場合が多い。本実施
例では、出力された圧縮バイトのカウントが実行され
る。このカウントが(ユーザが選択可能な)既定値に達
した場合、又は入力データストリームが終了した場合に
は、圧縮ユニットは圧縮をフラッシュ(flush)するよ
うに指示される。これは、入力FIFOから新たなバイトを
取り出すことなく、INREG0及びINREG1内のバイトの圧縮
を完了し、終了し、(存在すれば)現在拡張されている
ストリングを出力し、又は残りの未処理のバイトを生の
バイトとして出力することを意味する。
圧縮ユニットは次に、特別の「圧縮データの終わり」
マーカを出力する。このマーカは0のオフセットを有し
ている。このオフセットは、MEMSIZEのオフセットとし
て解釈され得るが、そうではなく、このオフセットは今
回の圧縮操作の終わりを示すものとして予約されてい
る。実際には、本実施例では、MEMSIZE−MAXSTR(MAXST
Rは典型的には8である)からMEMSIZE−1までの範囲の
オフセットは予約されている。従って、履歴に於いてこ
のオフセットを越えたストリングは見いだされない。こ
の特徴により、将来に於けるフォーマットの拡張が可能
となり、履歴バッファに於ける折り返しを含む困難な問
題を回避することができる。フラッシュの後では、圧縮
ユニットはHPTRにMEMSIZEを加え、適切な数(MEMSIZE/1
2)のリフレッシュハッシュサイクルを実行し、新たな
圧縮操作を開始する。
本発明がなされる過程に於いて圧縮方法の広範囲なソ
フトウェアシミュレーションが行われた。MAXHCNT、MAS
HSIZE、マッチバッファのサイズ、MEMSIZEを含む全ての
パラメータの値が変化させられて、スループット及び圧
縮比に対するそれらのパラメータの影響が調べられた。
本実施例の特別のフォーマット及びパラメータの組は、
これらの性能上の論点に対して受け入れ可能なトレード
オフが得られるように選択された。しかし、多くの類似
のパラメータの組及びコード化は実質的に同様の性能に
帰着する。
伸張ユニット6(第1b図)は、圧縮ユニット4(第1a
図)に比べれば非常に簡素である。伸張ユニット6はコ
ード化されたバイトストリームを受け取り、このストリ
ームを、第2a図に示したコード化構成に従って構成され
るビットストリームに変換する。各生のバイト又はコー
ド化されたバイトストリーム出力については、そのバイ
トは伸張出力FIFOに転送され、同時に、RAM16(第1b
図)内に保持される伸張履歴アレイに追加される。伸張
履歴アレイは第4図の履歴アレイ102と同様である。伸
張ユニット6(第1b図)はまた、カレント履歴ポインタ
(「DPTR」)を有している。DPTRは、バイトの出力の度
にインクリメントされ、MEMSIZEに達した場合に0に戻
される。コード化されたストリングが解析された場合
に、そのストリングからのオフセットはDPTRから差し引
かれ、伸張履歴アレイ中のオフセット位置から始まり、
コード化された長さのバイトストリングが出力される。
従って、伸張ユニット6(第1b図)は第4図に示しよう
なハッシュ構造(即ち、ハッシュテーブル100及びオフ
セットアレイ104)を維持する必要はなく、実際、MEMSI
ZEバイトのRAM16(第1b図)を必要とするだけである。
通常は、RAM16(第1b図)には別個の圧縮データ構造
及び伸張データ構造を保持するスペースがあり、圧縮及
び伸張操作を同時に実行することができる。しかし、本
実施例ではこの能力は具体化されていない。
5.履歴アレイを用いた実施例の伸張操作 第6図に伸張を行うための伸張操作ルーチンの詳細な
ブロック図を示す。伸張操作ルーチン(第6図)への入
力は圧縮操作(即ち、第5a図、第5b図及び第5c図の圧縮
操作)によって出力されたコード化されたバイトストリ
ームである。ブロック190に於いて操作が開始され、ブ
ロック192に於いてポインタDPTRが0に設定される。処
理はブロック194へ進み、入力されたコード化データス
トリームからタグビットが取り出される。次に、ブロッ
ク196に於いて、タグビットが1に等しいか0に等しい
かが判定される。タグビット1はコード化された圧縮ビ
ットストリングが続くことを示し、タグビット「0」は
出力バイトが圧縮されていない生のデータであることを
示していることを想起されたい。タグビットが0に等し
い場合には、処理はブロック198へ進む。ブロック198で
は、「生」のバイトが入力されたコード化データストリ
ームから取り出される。次に、ブロック200で該生のデ
ータバイトが出力され、ブロック202で該生のデータバ
イトは伸張履歴アレイのHISTORY(DPTR)に格納され
る。処理はブロック204へ進み、DPTRは次の出力バイト
へインクリメントされる。生のデータバイトの処理のた
めには、処理はブロック194、196、198、200、202及び2
04へ戻る。
ブロック196に於いて、出力バイトが1のタグビット
を有する場合には、処理はブロック206へ進む。ブロッ
ク206に於いて、コード化されたビットストリングの解
析が開始される。より詳細には、ブロック206ではコー
ド化されたストリング中のオフセット(「P」)の値
が、入力されたコード化データストリームから取り出さ
れる。ブロック208では、オフセットの値Pが0に等し
いか否かが判定される。値0を有するオフセットは、上
述したように、コード化された出力データストリームの
終わりを意味するエンドマーカを示している。オフセッ
トが0に等しい場合には処理はブロック212へ進み、処
理は呼出元のプログラムへ戻る。しかし、オフセットが
0より大きい場合には、処理はブロック210へ進む。
ブロック210に於いて、入力されたコード化データス
トリームから長さのビットストリングが取り出される。
ブロック214では、伸張履歴アレイのHISTORY(DPTR−
P)の内容が定められる。次にブロック216に於いて、
その位置に格納されているデータが出力される。ブロッ
ク218では、そのデータがHISTORY(DPTR)に格納され
る。次に、ブロック220に於いてDPTRがインクリメント
され、ブロック222でビットストリングの長さがデクリ
メントされる。ブロック224に於いて、該長さが0まで
デクリメントされたか否かが判定される。該長さが0ま
でデクリメントされていない場合には、コード化された
バイトストリーム中の全てのバイトが出力されるまでブ
ロック214、216、218、220、222及び224の処理が行われ
る。
該長さが一旦0までデクリメントされると、処理はブ
ロック194へ進み、入力されたコード化データストリー
ムから次のタグビットが取り出される。従って、値0の
オフセットを有するコード化されたバイトストリングが
出現する(ブロック208)まで処理は継続され、そのよ
うなバイトストリングが出現したときにはブロック212
に於いて処理は呼出元のプログラムへ戻る。
6.履歴アレイを用いた実施例の圧縮操作構成 第7図に本実施例のデータ圧縮ユニット4(第1a図)
を含む回路図228を示す。回路228の要素はデジタル論理
によって実現される。回路228は、圧縮コントローラ及
びシーケンスユニット230によって制御される。圧縮コ
ントローラ及びシーケンスユニット230は、回路228の要
素のそれぞれに一連の制御ライン(図示せず)によって
リンクされている。本実施例では数MHzで動作する内部
クロック(図示せず)は、動作中の各クロックサイクル
に於いて1個以上の要素に働きかけるコントローラ及び
シーケンスユニット230の活性化レベルを定める。実際
の動作及びそれらの動作のシーケンスは、既に論じた第
5a図、第5b図及び第5c図に示されている。
本実施例は、データの移動及びパッキングを容易にす
るために、集積回路中のレジスタとして実現される2個
のFIFO232及び234を備えている。一方のFIFO(ユーザに
よって選択され得る)については、RAM240(第8図)の
予約された領域に「追い出す(spill over)」こともで
きる。この予約された領域は典型的には8K又は16Kバイ
トである。このように圧縮RAMの一部を用いることによ
り、特に、複数のコンピュータ及び装置がコマンド及び
データについて単一のバスを共有するSCSI(Small Comp
uter System Interface)を用いるシステムに於いて、
明瞭な性能上の利点が得られる。
SCSIに於いては、他のバス通信を妨げないように、デ
ータを非常に高速で伝送しながら、バスの獲得及び解放
をできる限り素早く行うことが望ましい。SCSIでは最大
5Mバイト/秒の転送速度が得られる。しかし、圧縮ユニ
ットのスループットは通常この数値よりもかなり低いた
め、SCSIバスに圧縮されたデータを「圧縮しながら(on
the fly)」送出することは、性能の見地から受け入れ
難い。
7.履歴アレイを用いた実施例の外部RAMのFIFO この問題を避けるために、圧縮ユニット4(第1a図)
の出力側238(第7図)には外部RAMFIFO240(第8図)
が選択される。外部RAMFIFO240は、圧縮ユニット(第1a
図)内に設置されたRAMFIFOコントロール242によって制
御される。RAMFIFO240は、圧縮計算(履歴、ハッシュ
等)のため、及びFIFOとしての機能を提供するための両
方に用いられる。一旦RAMFIFO240にSCSIブロック転送が
許容されるに足る量のデータが蓄積されると、チップ内
のカウンタにより、SCSI転送を開始する制御マイクロプ
ロセッサに割込みがかけられる。バッファ(引続きデー
タで埋められてよい)は低速で埋められたにも拘らず、
この転送はSCSIの全帯域で行われる。
RAMのこのような二重の使用により(圧縮データ構造
及びFIFOの両方を収容することができるサイズのRAMは
通例入手可能である)、システムの性能は飛躍的に向上
する。RAMFIFO240(第8図)をデータの流れに他方の側
(典型的には埋め込まれた駆動コントローラ内)に配置
することもできる。又は、同様の目標を達成するために
RAMFIFOを伸張に於いて使用することもできる。一般
に、RAMFIFOは動作のSCSI(又は最も高速の)側に置か
れる。
回路228に於けるデータの流れのより詳細な説明を行
う。入力バイトストリームの圧縮されていないバイト
は、圧縮ユニット4に入力され、ライン244を介して入
力FIFO232に与えられる。入力FIFOに格納されたバイト
は、2個の拡張FIFOレジスタINRGE1(参照符号233)及
びINREG0(参照符号235)に転送される。より詳細に
は、FIFO232からのデータはライン246を介してINREG1レ
ジスタ233に与えられる。INREG1レジスタ233に格納され
たデータは、次に、ライン248及び250を介してINREG0レ
ジスタ235に転送される。INREG1及びINREG0レジスタの
目的はハッシュ関数237への入力を発生することにある
ことを想起されたい。INREG1レジスタ233の内容はライ
ン248を介してライン252へ出力され、ハッシュ関数237
に入力される。同様に、INREG0レジスタ235の内容はラ
イン251及び253を介してハッシュ関数237へ出力され
る。ハッシュ関数237の出力はライン255を介してマルチ
プレクサ256へ伝送される。
INREG1レジスタ233の内容は、マッチするストリング
が見いだされない場合には、ライン248、254及び258を
介して出力ビット管理部260へ送られる。出力ビット管
理部260の目的は、生のデータバイト及びストリングを
適当なタグが付加されたビットストリングにコード化す
ること等にある。出力管理部260の出力は、ライン262に
を介してビット−バイト変換器264へ伝送される。次の
このデータはライン268を介して出力FIFO234に入力され
る。圧縮されたバイトは、出力FIFO234からライン270を
介して出力装置(第1a図の参照符号14)へ出力される。
INREG1レジスタ233の内容は又、ライン248、254及び2
72を介して内部マッチバッファ274へ送られる。内部マ
ッチバッファ274の目的は、マッチングプロセスの能力
を効果的に向上させるための「ルックアサイド(lookas
ide)」バッファとして機能することにある。マッチバ
ッファ274の内容はバイト比較レジスタ276の内容と比較
される。マッチバッファの内容は、ライン278上に多重
化されてバイト比較レジスタ276へ送られる。バイト比
較レジスタ276の内容は外部のRAM238内に格納されてい
る履歴アレイ102(第4図)から得られる。履歴アレイ
のエントリの内容は、ライン208を介してラッチ282に入
力され、次に、ライン284及び286を介してバイト比較レ
ジスタ276へ送られる。ブロック276によって実行される
バイト比較の結果は、ライン288を介して圧縮コントロ
ーラ及びシーケンスユニット230に伝達される。圧縮コ
ントローラ及びシーケンスユニット230は比較結果を評
価し、制御ライン(図示せず)を介して回路228の様々
な要素に適切な制御信号を送出する。
INREG0レジスタ235の内容は又、ライン251及び290を
介してマルチプレクサ292へ送られ得る。マルチプレク
サ292は調停を行いINREG0の内容をライン294を介してラ
ッチ296へ送る。ラッチ296の内容は、ライン298を介し
てRAM238内のデータ構造の履歴アレイ102(第4図)へ
出力される。
ライン280を介してRAM238から入力されるデータは
又、ラッチ282並びにライン284、300及び302を介してレ
ジスタ304へ送られる。このパス上のデータは、NEXTと
称される変数に格納された古いハッシュポインタを含ん
でいる。レジスタ304の内容は、ライン305、306及び307
を介してマルチプレクサ256へ出力される。レジスタ304
の内容は又、ライン305及び308を介してオフセットレジ
スタ310に与えられる。オフセットレジスタ310の機能に
ついては後述する。レジスタ304の内容は又、ライン30
5、306及び312を介して、MATCHPTRのための変数内容を
含むレジスタ314へ送られる。レジスタ314の出力(MATC
HPTR)は、ライン316を介してマルチプレクサ256へ送ら
れる。レジスタ318の目的は、ポインタHPTRをインクリ
メントすることにある。レジスタ318の内容は、ライン3
20及び322を介してマルチプレクサ256へ送られる。他
に、レジスタ318の出力は又、ライン320及び324を介し
てオフセットレシスタ310へ送られる。オフセット関数
(アフセットレジスタ310)の目的は、履歴アレイ中の
適切なオフセットを計算すること、又はライン324及び3
08を介してレジスタ318及び304から入力されるデータか
らHPTR−NEXTを計算すことにある。
修正スイッチ328はライン330を介してオフセットレジ
スタ310に与えられ、これによってオフセット関数はラ
イン324を介して入力される現在のHPTRのみを出力する
ようになる。修正スイッチ328が、オフセット関数が定
められるように設定された場合には、オフセット関数31
0の出力は、マルチプレクサ292及び出力ビット管理部26
0の何れかに送られる。該出力が出力ビット管理部260へ
送られる場合には、それはライン332及び336を介して送
られる。オフセット出力ビット管理部260に於いて、コ
ード化ストリングにコード化される。他方、該出力はラ
イン332及び334を介してマルチプレクサ292へ送られ、
次にライン294を介してラッチ296へ、そしてライン298
を介してRAM238へ出力される。しかし、修正スイッチ32
8が、オフセットレジスタ310の出力が現在のHPTRである
ように設定された場合には、該出力は、ライン294上の
出力を調停するマルチプレクサ292へライン332及び334
を介して送られる。
出力ビット管理部260へのコード化のための長さ入力
は、回路図228の最下部に示されているレジスタ338によ
って維持されている。レジスタ338の出力はライン340を
介して出力ビット管理部260に与えられる。回路図228の
最上部には、リフレッシュ操作が行われる前の現在のサ
イクルカウントを維持するリフレッシュカウンタ342が
示されている。リフレッシュカウンタ342の出力はライ
ン344を介してマルチプレクサ256へ送られる。マルチプ
レクサ256の目的は、RAM238内の適切なデータ構造を選
択するためにライン344、316、322、307及び255上のア
ドレスの内の何れを出力するかを調停することにある。
8.シフトレジスタを用いた第2の実施例 第9図を参照し、シフトレジスタ構造を用いた実施例
の説明を行う。シフトレジスタアレイ103は、最大2048
キャラクタの既に処理された入力データ(圧縮され、又
は生のデータとして圧縮されていない)を包含すること
ができる。データキャラクタはシフトレジスタ15の各エ
ントリに格納される。圧縮ユニット4(第1c図)によっ
て新たな入力データ受け取られると、本発明の装置は該
新たな入力データ中の少なくとも2バイトの「ストリン
グ」がシフトレジスタ103内のストリングにマッチする
か否かを判定する。マッチした場合には、入力データの
そのストリングはコード化され、マッチしない場合に
は、上述したようにそのストリングは生のデータとして
提供される。
第9図についてより詳細に説明する。第9図にはシフ
トレジスタアレイ103のごく一部のみが示されている。
即ち、2個のエントリHISTORY(J)及びHISTORY(J+
1)が示されている。任意の時間Tに於いて、シフトレ
ジスタアレイ103のj番目のエントリの内容をHISTORY
(j,T)(j=1,…,MEMSIZE)で表す。履歴アレイを用
いた実施例では、シフトレジスタアレイは、実際のシフ
トレジスタ回路を用いて、又は修正された連想メモリア
レイ等を用いて実現される。シフトレジスタエントリ10
5及び107の出力側には、比較回路MATCH(j)109多びMA
TCH(j+1)111が設けられている。これらの比較回路
(MATCH(j)(j=1,…,MEMSIZE)は、シフトレジス
タアレイの各エントリの出力及び同時伝送(broadcas
t)バイトライン115に接続されている。シフトレジスタ
アレイ中のマッチングストリングの有無をチェックされ
ている入力データストリームは、ライン115を介して同
時伝送される。MATCH(j)回路109は、シフトレジスタ
エントリ105を出力と、ライン115を介して同時伝送され
る入力データキャラクタとを比較する。同時伝送された
データキャラクタがシフトレジスタエントリ105に格納
されているキャラクタに等しい場合には、MATCH(j)
回路109に於いてビットが1に設定される。他方、同時
伝送されたバイトとエントリ105に格納されているキャ
ラクタとがマッチしない場合には、MATCH(j)回路109
に於いてビットが0に設定される。入力データキャラク
タは、全ての比較回路(MATCH(j)(j=1,…,MEMSIZ
E))に同時に伝送される。換言すれば、シフトレジス
タアレイ103の全てのエントリについて、パイプライン
の様式で動作が同時に行われる。
1個のバイトが同時伝送され、各比較回路(MATCH
(j=1,…,MEMSIZE))に於いて比較された後、そのバ
イトはシフトレジスタ103の第1のエントリにシフトイ
ンされ、アレイの各エレメントは下記のように1だけ移
動する。
HISTORY(j+1,T+1)= HISTORY(j,T) (j=1,…,MEMSIZE−1) HISTORY(1,T+1)=上記バイト 処理は、各MATCH回路に於ける比較のためにライン115
を介して同時伝送される入力データストリームの次のバ
イトについて継続して行われる。
各比較回路MATCH(j)(j=1,…,MEMSIZE))は、A
NDゲート及びフリップフロップに関連付けられている。
MATCH回路109、ANDゲート119及びフリップフロップ123
は、アレイ全体を代表する回路である。同時に、ANDゲ
ート119には、ANDゲート119の先の出力を表すフリップ
フロップ123の出力が入力される。ANDゲート119の出力
が1である場合には、入力データについての現在及び過
去の比較に於いてマッチが得られている。しかし、AND
ゲート119の出力が0である場合には、入力データはシ
フトレジスタエントリ105の内容ともはやマッチしてい
ない。ANDゲート119及びフリップフロップ123の目的
は、入力データストリームがシフトレジスタエントリ10
5に格納されているデータキャラクタにもはや連続して
マッチしていないことを検出することにある。
アレイの各フリップフロップは、STRING(j,T)と称
されるビットを保持している。新たなストリングが始ま
った場合には、STRINGビットはアレイ全体の各フリップ
フロップに於いて入力117によって1に設定される。即
ち、STRING(j,T)=1(j=1,…,MEMSIZE)。比較回
路に於いて新たな入力データバイトのそれぞれが比較さ
れる度に、STRINGの値は次のように更新される。即ち、
STRING(j,T+1)=STRING(j,T)×MATCH(j)。こ
の操作はANDゲート119に於いて行われる。従って、フリ
ップフロップ123のSTRINGビットは、それが1に設定さ
れ、シフトレジスタアレイ(HISTORY(j,T))のエント
リが入力バイトに等しく、MATCH(j)が1になる場
合、及びそのような場合のみに於いて、セットされた状
態で保たれる。
シフトレジスタアレイに2個の入力バイトが与えられ
た後、全てのSTRINGビットがクリア(又は0に設定)さ
れた場合には、アレイ中にはマッチするストリングが存
在しない。他方、あるSTRINGビットがセット(又は1に
設定)されたままである場合には、アレイ中の少なくと
も1個のストリングがマッチしている。入力されるバイ
トは、全てのSTRINGビットが0にクリアされるまで同時
伝送され、アレイにシフトインされる。他の実施態様で
は、無限のマッチングストリングが発生することを避け
るために、予め定められた最大数の入力バイトが同時伝
送され、アレイにシフトインされる。
各フリップフロップ119、121の出力(STRING(j)、
(j=1,…,MEMSIZE))は、一連のORゲート129に入力
される。全てのORゲート(1〜13)が0になった場合に
は、シフトレジスタ103にはもはやマッチするストリン
グは存在しない。ステートマシン(state machine)の
形をとるコントローラ131は、アレイ中の各エントリに
ついてマッチの数を蓄積する。コントローラは、シフト
レジスタアレイの各エントリのストリング長を追跡し、
適切にコード化された各ストリングの長さ及びエントリ
及び/又は生のデータバイトを出力する。
シフトレジスタアレイにN個のバイトが入力される
と、ストリングマッチの長さは、STRINGビットがセット
されたバイトの数(N−1)えあり、ストリングマッチ
のオフセットは、シフトレジスタアレイ中のエントリの
位置である。1個よりも多いマッチングストリングが存
在する場合には、優先コード化ネットワークが何れのマ
ッチングストリングを採るかを決定する。履歴アレイを
用いた実施例では、優先ネットワークは、STRING(j,T
+N−1)が0でないような最小のインデクスjを返
す。
伸張を行うために、シフトレジスタアレイ103が用い
られる。このシナリオの下では、シフトレジスタアレイ
の内容は、コード化されたストリングのオフセットフィ
ールドを用いて、ランダムアクセスの手法でアクセスさ
れる。入力された圧縮データストリームから生のバイト
が取り出された場合には、そのバイトは、出力データス
トリームへ出力され、また、シフトレジスタアレイ103
にシフト入力される。コード化されたストリングが取り
出された場合には、オフセットはシフトレジスタへの
「アドレス」とし使用され、そのバイトがシフトレジス
タから読み出され、シフトレジスタアレイ103にシフト
入力される。入力されるコード化データストリームを前
もって解析し、パイプラインアドレス先読み回路を構築
することにより、スループットを最大化するためにパイ
プライン技法を用いることができる。
第10図に、第9図のシフトレジスタを用いたコード化
操作による結果のテーブルの一例を示す。入力データス
トリームABCDが、一度に1キャラクタずつシフトレジス
タアレイ103に同時伝送される。シフトレジスタエント
リには、既に6キャラクタABFABCが存在している。シフ
トレジスタアレイ103の第1のエントリは、Cに等しい
(HISTORY(1)=C)。シフトレジスタアレイ103の第
2のエントリはBである(HISTORY(2)=B)。シフ
トレジスタアレイ103の第3のエントリはAである(HIS
TORY(3)=A)。シフトレジスタアレイ103の第4の
エントリはFである(HISTORY(4)=F)。シフトレ
ジスタアレイ103の第5のエントリはBである(HISTORY
(5)=B)。そして、シフトレジスタアレイ103の第
6のエントリはAである(HISTORY(6)=A)。同時
に伝送される第1の入力バイトはAである。MATCH回路
によって実行される比較操作の結果、シフトレジスタエ
ントリHISTORY(6)及びHISTORY(3)に於いて、2個
のマッチが得られる。HISTORY(3)及びHISTORY(6)
での比較の結果、1に等しいMATCHビットが出力され
る。残りのエントリではマッチが得られないため、HIST
ORY(1)、HISTORY(2)、HISTORY(4)及びHISTORY
(5)から出力されるMATCHビットは0に等しい。入力
バイトAはシフトレジスタアレイにシフト入力され、残
りのキャラクタはアレイの次のエントリへシフトされ
る。キャラクタAはここで、シフトレジスタアレイの第
1のロケーション(HISTORY(1))を占有している。
同時伝送される次の入力バイトはBである。再び、シフ
トレジスタエントリHISTORY(3)及びHISTORY(6)に
於いて2個のマッチが見いだされる。他の比較ではマッ
チが成立しないため、それらのエントリの出力するMATC
Hビットは0に等しい。もっともながいマッチングスト
リングは、シフトレジスタエントリHISTORY(3)及び
シフトレジスタエントリHISTORY(6)に於いて生じる
ことに注意されたい。この時点で、双方は等しい2バイ
トの長さの等しいマッチングストリングを有している。
当然に、シフトレジスタエントリHISTORY(3)及びHIS
TORY(6)についてのSTRINGビットは1のままである。
従って、コントローラ131の出力によってマッチが生じ
ていることが示され、この例では探索に対して制限が課
されていないため、比較は継続される。
入力バイトBは次にシフトレジスタアレイの第1のロ
ケーション(HISTORY(1))にシフト入力され、残り
のキャラクタは、アレイの次のエントリへシフトされ
る。同時伝送される次の入力バイトはCである。Cはシ
フトレジスタアレイのただ1個のエントリ(HISTORY
(3))に於いてマッチする。シフトレジスタエントリ
HISTORY(6)はFを包含しており、これは同時伝送さ
れたバイトCにマッチしない。従って、最も長いマッチ
ングストリングはシフトレジスタエントリHISTORY
(3)に存在する。コントローラ131は、シフトレジス
タエントリHISTORY(3)に於けるマッチの結果1のス
トリング長を蓄積している。同時伝送されたバイトCは
次にシフトレジスタアレイの第1のロケーションに入力
され、他の全てのバイトはアレイ中で次のエントリへシ
フトされる。
同時伝送される次の入力バイトはDである。入力バイ
トDに対してはマッチが得られない。従って、最も長い
マッチングストリングはシフトレジスタエントリHISTOR
Y(3)に於いて長さ3のキャラクタ列ABCとして見いだ
されている。エントリの位置及び長さのコード化は、第
2図に示した履歴アレイを用いた実施例によって定めら
れる(11000001101)。
このように本発明は例を挙げて、特に履歴アレイを用
いた実施例について説明されたが、本発明はそれらに限
定されるものではない。本発明の本質的な精神及び範囲
から逸脱することなく本発明に対して更に様々な修正及
び改良を加えることができることが、当業者には理解さ
れるであろう。
【図面の簡単な説明】
第1a図は、本発明による履歴アレイを用いた実施例の、
圧縮されていないデータを受け取り、圧縮されたデータ
を出力する圧縮ユニットのブロック図である。 第1b図は、本発明による履歴アレイを用いた実施例の、
圧縮されたデータを受け取り、伸張されたデータを出力
する伸張ユニットのブロック図である。 第1c図は、本発明によるシフトレジスタを用いる実施例
の、圧縮されていないデータを受け取り、圧縮されたデ
ータを出力する圧縮ユニットのブロック図である。 第1d図は、本発明によるシフトレジスタを用いる実施例
の、圧縮されたデータを受け取り、伸張されたデータを
出力する伸張ユニットのブロック図である。 第2図は、本発明の両方の実施例によって用いられる、
圧縮フォーマットを示す図である。 第3図は、両方の実施例の第2図に示された圧縮フォー
マットによる、圧縮コード化の単純化された例を示す図
である。 第4図は、入力データストリームを探索するために、本
発明の両方の実施例によって提供されるデータ構造を示
す図である。 第5a図は、両方の実施例の入力データストリームをコー
ド化するために、圧縮ユニット(第1a図)によって行わ
れる圧縮操作ルーチンのブロック流れ図である。 第5b図は、第4図に示されたデータ構造のハッシュテー
ブルを初期化するために、圧縮操作ルーチン(第5a図)
で参照される初期化ルーチンのブロック流れ図である。 第5c図は、第4図に示されたデータ構造のハッシュテー
ブルを部分的に再び初期化するために、圧縮操作ルーチ
ン(第5a図)で参照されるリフレッシュハッシュルーチ
ンのブロック流れ図である。 第6図は伸張操作ルーチンのブロック流れ図である。 第7図は、圧縮操作ルーチン(第5a図)のハードワイヤ
ード表現の概略ブロック図である。 第8図は、外部RAMのFIFOのブロック図である。 第9図は、シフトレジスタアレイ内の2つのエントリを
表わす第2の実施例と、探索機能を実行するための関連
する回路のブロック図である。 第10図は、第2の実施例のシフトレジスタ内の、特定の
入力データストリングの探索を示す結果の表である。 4……圧縮ユニット、6……伸張ユニット、16……RA
M、100……ハッシュテーブル、102……履歴アレイ、103
……シフトレジスタアレイ、104……オフセットアレ
イ、109,111……比較回路。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 グレン エー.ジョージ アメリカ合衆国 カリフォルニア 91106 パサデナ,ピー.オー.ボック ス 60545 (72)発明者 グレン イー.アイビー アメリカ合衆国 カリフォルニア 91106 パサデナ,サウス ミシガン #202 146

Claims (107)

    (57)【特許請求の範囲】
  1. 【請求項1】入力されたデータキャラクタストリームを
    格納するための複数のエントリを有する履歴アレイと、
    該履歴アレイ内の最新のエントリを示す履歴アレイポイ
    ンタと、各々が該履歴アレイポインタ内の該エントリの
    1つを示すポインタを格納するための複数のエントリを
    有するハッシュテーブルと、各々が該履歴アレイ内の1
    個のエントリと他の1つ以上のエントリとのリンクを与
    える複数のエントリを有するオフセットアレイと、を用
    いて、該入力されたデータキャラクタストリームを可変
    長符号化データストリームに変換する方法であって、該
    方法は、 該履歴アレイ内で、該入力されたデータキャラクタスト
    リームに含まれるデータストリングに一致する最長の一
    致データストリングのサーチを実行するステップであっ
    て、該サーチを実行するステップは、 該ハッシュテーブルのエントリの1個に対するポインタ
    を与えるハッシュ関数を実行するステップ、 該ハッシュ関数により示されている該ハッシュテーブル
    のエントリに格納されている該ポインタを得るステッ
    プ、 該履歴アレイポインタと、該ハッシュテーブルから読み
    出された該ポインタとの間の差を計算するステップ、 該履歴アレイポインタにより示されている該オフセット
    アレイのエントリ内に該差を格納するステップ、及び 該ハッシュ関数により示されている該ハッシュテーブル
    の該エントリ内に該履歴アレイポインタを格納するステ
    ップ、 を包含しているステップと、 該履歴アレイ内で一致データストリングが見つかった場
    合に、該一致データストリングが見つかったことを示す
    標識と、該一致データストリングの長さの可変長指示子
    及び該一致データストリングの該履歴アレイ内での位置
    を示すポインタを含むストリング置換コードと、を割り
    当てることによって該一致データストリングを符号化す
    るステップと、 該履歴アレイ内で一致データストリングが見つからなか
    った場合に、該履歴アレイ内で一致データストリングが
    見つからなかったことを示す「生」データ標識と、該入
    力データキャラクタストリームの最初のデータキャラク
    タとを割り当てることによって、該入力データキャラク
    タストリームの該最初のデータキャラクタを符号化する
    ステップと、 を包含し、 それにより、該入力データキャラクタストリームを可変
    長符号化データストリームに変換する方法。
  2. 【請求項2】前記サーチを実行するステップは、該サー
    チを、前記履歴アレイ内の前記最長一致データストリン
    グに対する所定の数の照会に限定するステップを更に包
    含している、請求項1に記載の方法。
  3. 【請求項3】前記入力データキャラクタストリームのす
    でに符号化された入力データキャラクタを放棄するステ
    ップと、 該入力データキャラクタストリームを更に符号化するた
    めに前記方法の1つ以上のステップを実行するステップ
    と、 を更に包含している、請求項2に記載の方法。
  4. 【請求項4】前記履歴アレイ内で一致データストリング
    が見つかった場合において、該一致データストリングが
    2個のキャラクタであるときに、該一致データストリン
    グが見つかったことを示す前記標識のビット数と前記ス
    トリング置換コードのビット数との和が、前記入力デー
    タキャラクタストリームにおける該一致データストリン
    グのビット数を越えない、請求項1又は3に記載の方
    法。
  5. 【請求項5】前記履歴アレイポインタを前記履歴アレイ
    内の次のエントリまで増加させ、前記履歴アレイの該次
    のエントリをハッシュするために、前記最長の一致デー
    タストリングのサーチを該履歴アレイ内で実行するステ
    ップに含まれる1個以上のステップを実行するステップ
    を更に包含している、請求項1に記載の方法。
  6. 【請求項6】前記サーチを実行するステップは、前記ハ
    ッシュテーブルエントリの各々に於いて格納されている
    ポインタを周期的に調べて、該エントリのポインタと前
    記履歴アレイポインタとの間の差が所定量より大きいか
    どうかを決定するためのステップを更に包含している、
    請求項1に記載の方法。
  7. 【請求項7】前記サーチを実行するステップは、前記差
    が前記所定量よりも大きい場合、前記ハッシュテーブル
    内の該エントリを無効値と置き換えて、該エントリを再
    初期化するステップを更に包含している、請求項6に記
    載の方法。
  8. 【請求項8】前記可変長符号化データストリームを伸長
    する間に検出される圧縮データ終了マーカを、前記符号
    化するステップによって符号化されたデータに付加して
    前記方法を完了するステップを更に包含している、請求
    項1に記載の方法。
  9. 【請求項9】前記ハッシュテーブルの全てのエントリを
    無効値と置き換えることによって該ハッシュテーブルを
    初期化するステップを更に包含している、請求項1に記
    載の方法。
  10. 【請求項10】請求項1に記載の方法を用いて符号化さ
    れた入力可変長符号化データストリームを、元の入力デ
    ータキャラクタストリームに復号化する方法であって、
    該方法は、 該入力可変長符号化データストリームを、各々が前記標
    識の1個で始まっている別々の部分に分解するステップ
    と、 該別々の部分における各標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致データストリングを示す標識(すなわち、一致データ
    ストリングが見つかったことを示す前記標識)であるの
    かを決定するステップと、 該標識に従って該別々の部分を処理し、該処理によって
    該元の入力データキャラクタストリームの一部を再構築
    するステップと、 を包含している、可変長符号化データストリーム復号化
    方法。
  11. 【請求項11】前記再構築するステップは、前記標識が
    前記符号化された一致データストリングを示す標識であ
    る場合、前記置換コードにおける前記一致データストリ
    ングの長さの可変長指示子と前記ポインタとを解釈し
    て、前記一致データストリングを生成するステップを包
    含している、請求項10に記載の方法。
  12. 【請求項12】前記再構築するステップは、前記標識が
    前記「生」データ標識である場合、前記入力可変長符号
    化データストリームから前記最初のデータキャラクタを
    得るステップを更に包含している、請求項10に記載の方
    法。
  13. 【請求項13】入力データキャラクタストリームを格納
    するための複数のエントリを有する履歴アレイ手段と、
    該履歴アレイ手段内の最新のエントリを示す履歴アレイ
    ポインタと、各々が該履歴アレイポインタ内へのポイン
    タを格納するための複数のエントリを有するハッシュテ
    ーブル手段と、各々が該履歴アレイ手段内の1個のエン
    トリと他の1個以上のエントリとのリンクを与える複数
    のエントリを有するオフセットアレイ手段と、を備えた
    データ圧縮システムに於いて、該入力されたデータキャ
    ラクタストリームを可変長符号化データストリームに変
    換するための装置であって、該装置は、 該履歴アレイ手段内で、該入力されたデータキャラクタ
    ストリームに含まれるデータストリングに一致する最長
    の一致データストリングのサーチを実行する手段であっ
    て、該サーチを実行する手段は、 該ハッシュテーブル手段のエントリの1個に対するポイ
    ンタを与えるハッシュ関数を実行する手段、 該ハッシュ関数により示されている該ハッシュテーブル
    エントリに格納されている該ポインタを得る手段、 該履歴アレイポインタと、該ハッシュテーブル手段から
    読み出された該ポインタとの間の差を計算する手段、 該履歴アレイポインタにより示されているオフセットア
    レイエントリ内に誤差を格納する手段、及び 該ハッシュ関数により示されている該ハッシュテーブル
    エントリ内に該履歴アレイポインタを格納する手段、 を包含している、サーチを実行する手段と、 該一致データストリングが見つかったことを示す標識
    と、該一致データストリングの長さの可変長指示子及び
    該一致データストリングの該履歴アレイ手段内での位置
    を示すポインタを含むストリング置換コードとを割り当
    てることによって該一致データストリングを符号化する
    手段と、 該履歴アレイ手段内で一致データストリングが見つから
    なかったことを示す「生」データ標識と、該入力データ
    キャラクタストリームの最初のデータキャラクタとを割
    り当てることによって該入力データキャラクタストリー
    ムの該最初のデータキャラクタを符号化する手段と、 を備えており、 それにより、該入力データキャラクタストリームを可変
    長符号化データストリームに変換する装置。
  14. 【請求項14】前記サーチを実行する手段は、該サーチ
    を、前記履歴アレイ手段内で前記最長の一致データスト
    リングに対する所定の数の照会に限定する手段を更に包
    含している、請求項13に記載の装置。
  15. 【請求項15】前記入力データキャラクタストリームの
    符号化された入力データキャラクタを放棄する手段を更
    に備えている、請求項14に記載の装置。
  16. 【請求項16】前記一致データストリングを符号化する
    手段は、該一致データストリングが2個のキャラクタで
    あるときに、前記一致データストリングが見つかったこ
    とを示す標識のビット数と前記ストリング置換コードの
    ビット数との和が、前記入力データキャラクタストリー
    ムにおける該一致データストリングのビット数を越えな
    いように、該一致データストリングの長さの可変長指示
    子及び該一致データストリングの前記履歴アレイ手段内
    での位置を示すポインタを表現する手段を更に包含して
    いる、請求項13又は15に記載の装置。
  17. 【請求項17】前記履歴アレイポインタを前記履歴アレ
    イ手段内の次のエントリまで増加させる手段を更に備え
    ている請求項13に記載の装置。
  18. 【請求項18】前記サーチを実行する手段は、前記ハッ
    シュテーブルのエントリの各々に格納されているポイン
    タを周期的に調べて、該ハッシュテーブルのエントリの
    ポインタと前記履歴アレイポインタとの差が所定量より
    も大きいかどうかを決定する手段を更に備えている、請
    求項13に記載の装置。
  19. 【請求項19】前記サーチを実行する手段は、前記差が
    前記所定量よりも大きい場合、前記ハッシュテーブル内
    の前記エントリを無効値と置き換えて、該エントリを再
    初期化する手段を更に備えている、請求項18に記載の装
    置。
  20. 【請求項20】前記可変長符号化データストリームを伸
    長する間に検出される圧縮データ終了マーカを、符号化
    されたデータに付加する手段を更に備えている、請求項
    13に記載の装置。
  21. 【請求項21】前記ハッシュテーブル手段の全てのエン
    トリを無効値と置き換えることによって該ハッシュテー
    ブル手段を初期化する手段を更に備えている、請求項13
    に記載の装置。
  22. 【請求項22】請求項13に記載の装置を用いて符号化さ
    れた入力可変長符号化データストリームを、元の入力デ
    ータキャラクタストリームに復号化する装置であって、 該入力可変長符号化データストリームを、各々が前記標
    識の1個で始まっている別々の部分に分解する手段と、 該別々の部分における各標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致データストリングを示す標識(すなわち、一致データ
    ストリングが見つかったことを示す前記標識)であるの
    かを決定する手段と、 該標識に従って該別々の部分を処理し、該処理により該
    元の入力データキャラクタストリームの一部を再構築す
    る手段と、 を包含している可変長符号化データストリーム復号化装
    置。
  23. 【請求項23】前記再構築する手段は、前記標識が前記
    符号化された一致データストリングを示す標識である場
    合、前記置換コードの前記一致データストリングの長さ
    の可変長指示子と前記ポインタとを解釈して、前記一致
    データストリングを生成する手段を包含している、請求
    項22に記載の装置。
  24. 【請求項24】前記再構築する手段は、前記標識が前記
    「生」データ標識である場合、前記入力可変長符号化デ
    ータストリームから前記最初のデータキャラクタを得る
    手段を更に包含している、請求項22に記載の装置。
  25. 【請求項25】前記履歴アレイ手段、前記ハッシュテー
    ブル手段、及び前記オフセットアレイ手段を含み、1個
    以上のFIFOバッファの一部を含むRAMを更に備え、前記
    符号化されたデータストリーム又は復号化されたデータ
    ストリームは該1個以上のFIFOバッファに一時的に格納
    され、それによってデータ転送能力が向上した、請求項
    24に記載の装置。
  26. 【請求項26】1個の入力データキャラクタを、複数の
    データキャラクタを有するデータ最初のデータキャラク
    タストリームと比較する装置であって、該装置は、 該データキャラクタストリームの該複数のデータキャラ
    クタを格納するための複数のエントリを有するシフト手
    段であって、各エントリは該データキャラクタストリー
    ムの該複数のデータキャラクタの1個を格納する、シフ
    ト手段と、 該1個の入力データキャラクタを、該シフト手段の各エ
    ントリに同時伝送する手段と、 該シフト手段の各エントリに格納されたデータキャラク
    タを、該シフト手段の他のエントリに転送する手段と、 該シフト手段の各エントリについて、該エントリに格納
    されたデータキャラクタを該1個の入力データキャラク
    タと比較して、該格納されたデータキャラクタが該1個
    の入力データキャラクタと一致するかどうかを決定する
    手段と、 該シフト手段の各エントリについて、該比較の結果を個
    別に蓄積する手段と、 を備えている装置。
  27. 【請求項27】前記シフト手段の各エントリについて蓄
    積した前記比較の結果を格納する手段を更に備えてい
    る、請求項26に記載の装置。
  28. 【請求項28】格納された前記比較の結果を、後の入力
    データキャラクタについての比較の結果と比較する手段
    を更に備えている、請求項27に記載の装置。
  29. 【請求項29】前記入力データキャラクタを1個以上含
    むストリングを可変長符号化データストリームに変換す
    る手段を更に備えており、該変換する手段は、 該ストリング中の一致入力データキャラクタ(複数個)
    を、一致入力データキャラクタ(複数個)が見つかった
    ことを示す標識と、該一致入力データキャラクタ(複数
    個)の長さの可変長指示子及び該一致入力データキャラ
    クタの少なくとも1個のキャラクタを有する前記シフト
    手段の前記エントリを示すポインタ含む置換コードと、
    を割り当てることによって符号化する手段と、 該ストリングの最初のデータキャラクタを、「生」デー
    タ標識と、該入力データキャラクタ(複数個)の最初の
    データキャラクタとを割り当てることによって符号化す
    る手段と、 を備えている、請求項26に記載の装置。
  30. 【請求項30】前記比較の結果の蓄積を評価して、該蓄
    積のどれが前記一致入力データキャラクタの最長ストリ
    ングに対応しているかを判断する手段を更に備えてい
    る、請求項26に記載の装置。
  31. 【請求項31】前記シフト手段による前記比較を、入力
    データキャラクタの所定量に限定する手段を更に備えて
    いる、請求項26に記載の装置。
  32. 【請求項32】前記比較結果の蓄積を評価して、該蓄積
    のどれが前記一致入力データキャラクタの最長ストリン
    グに対応しているのかを判断する手段と、 同じ長さの最長ストリングが2個以上存在する場合に、
    該2個以上の最長ストリングに優先順位をつける手段
    と、 を更に備えている、請求項31に記載の装置。
  33. 【請求項33】前記優先順位をつける手段は、前記2個
    以上の最長ストリングのうちの最先のものを選択する手
    段を更に備えている、請求項32に記載の装置。
  34. 【請求項34】請求項29に記載の装置によって符号化さ
    れた入力可変長符号化データストリームを、元の入力デ
    ータキャラクタのストリングに復号化する装置であっ
    て、該装置は、 該入力可変長符号化データストリームを、各々が前記標
    識の1個で始まっている別々の部分に分解する手段と、 該別々の部分における各標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致入力データキャラクタを示す標識(すなわち、一致入
    力データキャラクタが見つかったことを示す前記標識)
    であるのかを決定する手段と、 を備えている、復号化する装置。
  35. 【請求項35】前記置換コードの前記一致入力データキ
    ャラクタの長さの可変長指示子と前記ポインタとを解釈
    して、前記一致入力データキャラクタを生成する手段を
    更に備えている、請求項34に記載の装置。
  36. 【請求項36】前記入力可変長符号化データストリーム
    から前記ストリングの前記最初のデータキャラクタを得
    る手段を更に備えている、請求項34に記載の装置。
  37. 【請求項37】複数のエントリを有し、各エントリが入
    力データキャラクタストリームの1個の入力データキャ
    ラクタを格納するシフトレジスタを用いて、該入力デー
    タキャラクタストリームを可変長符号化データストリー
    ムに変換する方法であって、該方法は、 該シフトレジスタ内で、該入力データキャラクタストリ
    ームに一致する最長の一致データストリングのサーチを
    実行するステップであって、 該入力データキャラクタストリームの各入力データキャ
    ラクタを該シフトレジスタの各エントリに同時に伝送す
    るステップ、 各入力データキャラクタを同時に該シフトレジスタの各
    エントリと比較するステップ、及び 各入力データキャラクタを該シフトレジスタに入力する
    ステップ を含んでいる、サーチを実行するステップと、 該シフトレジスタ内で一致データストリングが見つかっ
    た場合に、該一致データストリングが見つかったことを
    示す標識と、該一致データストリングの長さの可変長指
    示子及び該一致データストリングの該シフトレジスタに
    おける該エントリを示すポインタを含むストリング置換
    コードと、を割り当てることによって、該一致データス
    トリングを符号化するステップと、 該シフトレジスタ内で該一致入力データストリングが見
    つからなかった場合に、「生」データ標識と、該入力デ
    ータキャラクタストリームの最初のデータキャラクタと
    を割り当てることによって、該入力データキャラクタス
    トリームの該最初のデータキャラクタを符号化するステ
    ップと、 を包含し、 それにより、該入力データキャラクタストリームを可変
    長符号化データストリームに変換する方法。
  38. 【請求項38】前記最長の一致データストリングのサー
    チを前記シフトレジスタ内で実行するステップは、該サ
    ーチを前記入力データキャラクタストリームの入力デー
    タキャラクタの所定量に限定するステップを包含してい
    る、請求項37に記載の方法。
  39. 【請求項39】前記入力データキャラクタストリームの
    すでに符号化された入力データキャラクタを放棄するス
    テップと、該入力データキャラクタストリームを更に符
    号化するステップと、を更に包含している、請求項37に
    記載の方法。
  40. 【請求項40】前記シフトレジスタ内で一致データスト
    リングが見つかった場合に、該一致データストリングが
    2個のキャラクタであるときに、該一致データストリン
    グが見つかったことを示す標識のビット数と前記ストリ
    ング置換コードのビット数との和が、前記入力データキ
    ャラクタストリームにおける該一致データストリングの
    ビット数を越えないように、前記一致データストリング
    の長さの可変長指示子及び前記ポインタを表現するステ
    ップを更に包含している、請求項37に記載の方法。
  41. 【請求項41】請求項37に記載の方法を用いて符号化さ
    れた入力可変長符号化データストリームを、元の入力デ
    ータキャラクタストリームに複号化する方法であって、
    該方法は、 該入力可変長符号化データストリームを、各々が前記標
    識の1個で始まっている別々の部分に分解するステップ
    と、 該別々の部分における各標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致データストリングを示す標識(すなわち、一致データ
    ストリングが見つかったことを示す前記標識)であるの
    かを決定するステップと、 該標識に従って該別々の部分を処理し、該処理により該
    元の入力データキャラクタストリームの一部を再構築す
    るステップと、 を包含している可変長符号化データストリーム複号化方
    法。
  42. 【請求項42】前記再構築するステップは、前記標識が
    前記符号化された一致データストリングを示す標識であ
    る場合、前記ストリング置換コードの前記一致データス
    トリングの長さの可変長指示子と前記ポインタとを解釈
    して、該一致データストリングを発生させるステップを
    更に包含している、請求項41に記載の方法。
  43. 【請求項43】前記再構築するステップは、前記標識が
    前記「生」データ標識である場合、前記入力可変長符号
    化データストリームから前記最初のデータキャラクタを
    得るステップを更に包含している、請求項41に記載の方
    法。
  44. 【請求項44】複数のエントリを有し、各エントリが入
    力データキャラクタストリームの1個のデータキャラク
    タを格納するシフト手段を用いて、該入力データキャラ
    クタストリームを可変長符号化データストリームに変換
    する装置であって、該装置は、 該シフト手段内で、該入力データキャラクタストリーム
    に一致する最長の一致データストリングのサーチを実行
    する手段であって、 該入力データキャラクタストリームの各入力データキャ
    ラクタを該シフト手段の各エントリに同時に伝送する手
    段と、各入力データキャラクタストリームを同時に該シ
    フト手段の各エントリと比較する手段とを有する、サー
    チを実行する手段と、 該一致データストリングが見つかったことを示す標識
    と、該一致データストリングの長さの可変長指示子及び
    該一致データストリングの該シフト手段における該エン
    トリを示すポインタを含むストリング置換コードとを割
    り当てることによって、該一致データストリングを符号
    化する手段と、 「生」データ標識と、該入力データキャラクタストリー
    ムの最初のデータキャラクタとを割り当てることによっ
    て、該入力データキャラクタストリームの最初のデータ
    キャラクタを符号化する手段と、 を備え、 それにより、該入力データキャラクタストリームを可変
    長符号化データストリームに変換する装置。
  45. 【請求項45】前記シフト手段内で前記最長一致データ
    ストリングのサーチを実行する手段は、該サーチを前記
    入力データキャラクタストリームの入力データキャラク
    タの所定量に限定する手段を更に備えている、請求項44
    に記載の装置。
  46. 【請求項46】前記入力データキャラクタストリームの
    符号化された入力データキャラクタを放棄する手段を更
    に備えている、請求項44に記載の装置。
  47. 【請求項47】前記一致データストリングを符号化する
    手段は、前記シフト手段内で一致データストリングが見
    つかった場合に、該一致データストリングが2個のキャ
    ラクタであるときに、該一致データストリングが見つか
    ったことを示す標識のビット数と前記ストリング置換コ
    ードのビット数との和が、前記入力データキャラクタス
    トリームにおける該一致データストリングのビット数を
    越えないように、前記一致データストリングの長さの可
    変長指示子及び前記ポインタを表す手段を更に備えてい
    る、請求項44に記載の装置。
  48. 【請求項48】請求項44に記載の装置を用いて符号化さ
    れた入力可変長符号化データストリームを元のデータキ
    ャラクタストリームに復号化する装置であって、該装置
    は、 該入力可変長符号化データストリームを、各々が前記標
    識の1個で始まっている別々の部分に分解する手段と、 該別々の部分における標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも前記符号化され
    た一致データストリングを示す標識(すなわち、一致デ
    ータストリングが見つかったことを示す前記標識)であ
    るかを決定する手段と、 決定された該標識に従って該別々の部分を処理し、該処
    理により該元の入力データキャラクタストリームの一部
    を再構築する手段と、 を備えている、可変長符号化データストリーム復号化装
    置。
  49. 【請求項49】前記再構築する手段は、前記ストリング
    置換コードの前記一致データストリングの長さの可変長
    指示子と前記ポインタとを解釈して、前記一致データス
    トリングを生成する手段に更に包含している、請求項48
    に記載の装置。
  50. 【請求項50】前記再構築する手段は、前記入力可変長
    符号化データストリームから前記最初のデータキャラク
    タを得る手段を更に備えている、請求項48に記載の装
    置。
  51. 【請求項51】入力データキャラクタストリームを格納
    する複数のエントリを有する履歴アレイ手段と、 該履歴アレイ手段内の該エントリの1つを示す履歴アレ
    イポインタと、 複数のエントリを有するハッシュテーブル手段であっ
    て、該ハッシュテーブル手段の各エントリは該履歴アレ
    イ手段内の該エントリの1つを示すポインタを格納す
    る、ハッシュテーブル手段と、 複数のエントリを有するオフセットアレイ手段であっ
    て、該オフセットアレイ手段の各エントリは、該履歴ア
    レイ手段内の該エントリの1つから該履歴アレイ手段内
    の1個以上の他のエントリへのリンクが存在する場合
    に、そのリンクを供給する、オフセットアレイ手段と、 を備えているデータ圧縮装置。
  52. 【請求項52】前記履歴アレイポインタを、前記履歴ア
    レイ手段内の次のエントリにインクリメントする手段
    と、前記入力データキャラクタストリームの次のデータ
    キャラクタをハッシングする手段と、を更に備えてい
    る、請求項51に記載の装置。
  53. 【請求項53】前記ハッシュテーブルエントリの各々に
    格納されている前記ポインタを周期的に調べて、該ハッ
    シュテーブルエントリにおける該ポインタが前記履歴ア
    レイポインタよりも所定量だけ異なっているかどうかを
    決定する手段を更に備えている、請求項51及び52のいず
    れかに記載の装置。
  54. 【請求項54】前記ハッシュテーブル内の前記エントリ
    を無効値と置き換えて、該エントリを再初期化する手段
    を更に備えている、請求項53に記載の装置。
  55. 【請求項55】前記ハッシュテーブルの全エントリを無
    効値と置き換えることによって該ハッシュテーブルを初
    期化する手段を更に備えている、請求項54に記載の装
    置。
  56. 【請求項56】格納部を備えたデータ圧縮システム内で
    実行される、入力データキャラクタストリームを可変長
    符号化データストリームに変換する方法であって、該方
    法は、 該入力データキャラクタストリームの既に処理された入
    力データキャラクタを参照用の格納部に格納するステッ
    プと、 該格納部内で該入力データキャラクタストリームに一致
    する該既に処理された入力データキャラクタの最長の一
    致データストリングのサーチを実行するステップと、 該格納部内で一致データストリングが見つかった場合に
    は、該一致データストリングが見つかったことを示す標
    識と、該一致データストリングの長さの可変長指示子
    と、該一致データストリングの該格納部内での位置を示
    すポインタと、を割り当てることによって該一致データ
    ストリングを符号化するステップであって、該符号化す
    るステップは、該一致データストリングが2個のキャラ
    クタであるときに、該一致データストリングが見つかっ
    たことを示す標識のビット数と該一致データストリング
    の長さの可変長指示子のビット数と該ポインタのビット
    数との和が、該入力データキャラクタストリームにおけ
    る該一致データストリングのビット数を越えないように
    該ポインタと該可変長指示子とを表現するステップを含
    む、該一致データストリングを符号化するステップと、 該格納部内で一致データストリングが見つからなかった
    場合には、該格納部内で一致データストリングが見つか
    らなかったことを示す「生」データ標識と、該入力デー
    タキャラクタストリームの最初のキャラクタとを割り当
    てることによって該入力データキャラクタストリームの
    該最初のキャラクタを符号化するステップと、を包含し
    ており、 該格納部は、該入力データキャラクタストリームを格納
    する複数のエントリと、該格納部内の最新エントリを示
    す格納部ポインタと、複数のエントリを有するハッシュ
    テーブルであって、該ハッシュテーブルの各エントリは
    該格納部の該エントリの1つを示すポインタを格納す
    る、ハッシュテーブルと、複数のエントリを有するオフ
    セットアレイであって、該オフセットアレイの各エント
    リは、該格納部内の該エントリの1個から該格納部内の
    1個以上のエントリまでのリンクを供給する、オフセッ
    トアレイと、を有しており、 該サーチを実行するステップはハッシュ関数を実行する
    ステップを含み、更に、 該ハッシュ関数が該ハッシュテーブルの該エントリの1
    つにポインタを提供するステップと、 該ハッシュ関数の結果によって示される該ハッシュテー
    ブルエントリに格納されている該ポインタを得るステッ
    プと、 該格納部ポインタと、該ハッシュテーブルから読み出さ
    れた該ポインタとの差を計算するステップと、 該格納部ポインタによって示された該オフセットアレイ
    に該差を格納するステップと、 該ハッシュ関数によって示された該ハッシュテーブルエ
    ントリに該格納部ポインタを格納するステップと、 を包含し、このことにより、該入力データキャラクタス
    トリームが可変長符号化データストリームに変換される
    方法。
  57. 【請求項57】前記格納部ポインタを前記格納部内の次
    のエントリにインクリメントするステップと、 該格納部の該次のエントリをハッシングするために、前
    記方法の1つ以上のステップを実行するステップと、 を包含する、請求項56に記載の方法。
  58. 【請求項58】前記格納部内において前記最長の一致デ
    ータストリングのサーチを実行するステップは、前記ハ
    ッシュテーブルエントリの各々において格納された前記
    ポインタを周期的に調べて、該エントリの各々の該ポイ
    ンタと、前記格納部ポインタとの前記差が所定量よりも
    大きいかどうかを決定するステップをさらに包含する、
    請求項56に記載の方法。
  59. 【請求項59】前記格納部内において前記最長の一致デ
    ータストリングのサーチを実行するステップは、前記差
    が前記所定量よりも大きい場合には、前記ハッシュテー
    ブル内の前記エントリを無効値と置き換えて、該エント
    リを再初期化するステップを更に包含する、請求項58に
    記載の方法。
  60. 【請求項60】前記可変長符号化データストリームを伸
    長する間に検出される圧縮データ終了マーカを、該符号
    化されたデータに付加することによって前記符号化する
    ステップを完了するステップを更に包含する、請求項59
    に記載の方法。
  61. 【請求項61】前記ハッシュテーブルのすべてのエント
    リを無効値と置き換えることによって前記ハッシュテー
    ブルを初期化するステップを更に包含する、請求項60に
    記載の方法。
  62. 【請求項62】複数のエントリを有する履歴アレイと、
    履歴アレイポインタと、複数のエントリを有するハッシ
    ュテーブルと、複数のエントリを有するオフセットアレ
    イと、を用いてデータを圧縮する方法であって、該方法
    は、 該履歴アレイの該エントリ内の入力データキャラクタス
    トリームを格納するステップと、 該履歴アレイ内の該エントリの1つを該履歴アレイポイ
    ンタによって示すステップと、 該ハッシュテーブルの各エントリ内に、該履歴アレイの
    該エントリの1つを示すポインタを格納するステップ
    と、 該履歴アレイ内の該エントリの1つから該履歴アレイ内
    の1個以上の他のエントリへのリンクを該オフセットア
    レイの該エントリによって供給するステップと、 を包含する方法。
  63. 【請求項63】前記履歴アレイポインタを、前記履歴ア
    レイ内の次のエントリにインクリメントするステップ
    と、 前記入力データキャラクタストリームの次のデータキャ
    ラクタをハッシングするステップと、 を包含する、請求項62に記載の方法。
  64. 【請求項64】前記ハッシュテーブルエントリの各々に
    格納されている前記ポインタを周期的に調べて、該ハッ
    シュテーブルエントリにおける該ポインタが前記履歴ア
    レイポインタよりも所定量だけ異なっているかどうかを
    決定するステップを更に包含する、請求項62及び63のい
    ずれかに記載の方法。
  65. 【請求項65】前記ハッシュテーブル内の前記エントリ
    を無効値と置き換えて、該エントリを再初期化するステ
    ップを更に包含する、請求項64に記載の方法。
  66. 【請求項66】前記ハッシュテーブルの全エントリを無
    効値と置き換えることによって該ハッシュテーブルを初
    期化するステップを更に包含する、請求項65に記載の方
    法。
  67. 【請求項67】入力データキャラクタストリームを可変
    長符号化データストリームに変換する装置であって、 該入力データキャラクタストリームの既に処理された入
    力データキャラクタを参照用に格納する格納手段と、 該入力データキャラクタストリームに一致する該既に処
    理された入力データキャラクタの最長の一致データスト
    リングのサーチを該格納手段内で実行する手段と、 該一致データストリングが見つかったことを示す標識
    と、該一致データストリングの長さの可変長指示子と、
    該一致データストリングの該格納手段内での位置を示す
    ポインタと、を割り当てることによって該一致データス
    トリングを符号化する手段であって、該一致データスト
    リングが2個のキャラクタであるときに、該一致データ
    ストリングが見つかったことを示す標識のビット数と該
    一致データストリングの長さの可変長指示子のビット数
    と該ポインタのビット数との和が、前記入力データキャ
    ラクタストリームにおける該一致データストリングのビ
    ット数を越えないように、該一致データストリングの長
    さの可変長指示子及び該ポインタを表現する手段を含
    む、該一致データストリングを符号化する手段と、 該格納手段内で一致データストリングが見つからなかっ
    たことを示す「生」データ標識と、該入力データキャラ
    クタストリームの最初のキャラクタとを割り当てること
    によって該入力データキャラクタストリームの該最初の
    キャラクタを符号化する手段と、を備えており、 該格納手段は該入力データキャラクタストリームを格納
    する複数のエントリを有しており、更に、 該格納手段内の最新エントリを示す格納手段ポインタ
    と、 複数のエントリを有するハッシュテーブル手段であっ
    て、該ハッシュテーブル手段の各エントリは該格納手段
    の該エントリの1つを示すポインタを格納する、ハッシ
    ュテーブル手段と、 複数のエントリを有するオフセットアレイ手段であっ
    て、該オフセットアレイ手段の各エントリは該格納手段
    内の該エントリの1個から該格納手段内の1個以上のエ
    ントリまでのリンクを供給する、オフセットアレイ手段
    と、 該ハッシュテーブル手段の該エントリの1つにポインタ
    を供給するハッシュ関数を実行する手段と、 該ハッシュ関数の結果によって示される該ハッシュテー
    ブルエントリにおいて格納されている該ポインタを得る
    手段と、 該格納手段ポインタと、該ハッシュテーブル手段から読
    み出された該ポインタとの差を計算する手段と、 該格納手段ポインタによって示された該オフセットアレ
    イ手段に誤差を格納する手段と、 該ハッシュ関数によって示された該ハッシュテーブルエ
    ントリに該格納手段ポインタを格納する手段と、 を備えており、 このことにより、該入力データキャラクタストリームが
    可変長符号化データストリームに変換される、装置。
  68. 【請求項68】前記格納手段ポインタを前記格納手段内
    の次のエントリにインクリメントする手段を更に備えて
    いる、請求項67に記載の装置。
  69. 【請求項69】前記ハッシュテーブルエントリの各々に
    格納された前記ポインタを周期的に調べて、該エントリ
    の各々の該ポインタと、前記格納手段ポインタとの前記
    差が所定量よりも大きいかどうかを決定する手段を更に
    備えている、請求項67に記載の装置。
  70. 【請求項70】前記ハッシュテーブル内の前記エントリ
    を無効値と置き換えて、該エントリを再初期化する手段
    を更に備えている、請求項69に記載の装置。
  71. 【請求項71】前記可変長符号化データストリームを伸
    長する間に検出される圧縮データ終了マーカを、前記符
    号化するステップによって符号化されたデータに付加す
    る手段を更に備えている、請求項70に記載の装置。
  72. 【請求項72】前記ハッシュテーブルのすべてのエント
    リを無効値と置き換えることによって該ハッシュテーブ
    ルを初期化する手段を更に備えている、請求項71に記載
    の装置。
  73. 【請求項73】1個の入力データキャラクタを、これま
    でに入力されたデータキャラクタである複数のデータキ
    ャラクタを含むデータキャラクタストリームと比較する
    方法であって、該方法は、 該データキャラクタストリームの該複数のデータキャラ
    クタを、該データキャラクタが入力された順に、複数の
    エントリを有するシフトレジスタに格納するステップで
    あって、該シフトレジスタの各エントリに該データキャ
    ラクタストリームの該データキャラクタの1つを格納す
    る、ステップと、 該1個の入力データキャラクタを該シフトレジスタの各
    エントリに同時伝送するステップと、 該シフトレジスタの各エントリに格納されたデータキャ
    ラクタを、該シフトレジスタの他のエントリに転送する
    ステップと、 該シフトレジスタの各エントリについて、該エントリに
    格納されたデータキャラクタを該1個の入力データキャ
    ラクタと比較して、該格納されたデータキャラクタが該
    1個の入力データキャラクタと一致するかどうかを決定
    するステップと、 該シフトレジスタの各エントリに対して、該比較の結果
    を個別に蓄積するステップと、 比較の終わった該1個の入力データキャラクタを該シフ
    トレジスタに入力するステップと、 を包含する方法。
  74. 【請求項74】前記シフトレジスタの各エントリについ
    て蓄積した前記比較の結果を格納するステップをさらに
    包含する、請求項73に記載の方法。
  75. 【請求項75】格納された前記比較の結果を、後の入力
    データキャラクタについての比較の結果と比較するステ
    ップをさらに包含する、請求項74に記載の方法。
  76. 【請求項76】前記入力データキャラクタを1個以上含
    むストリングを可変長符号化データストリームに変換す
    るステップを更に包含し、該変換するステップは、 一致入力データキャラクタ(複数個)が前記シフトレジ
    スタ内に見つかった場合に、該一致入力データキャラク
    タ(複数個)が見つかったことを示す標識と、該一致入
    力データキャラクタの長さの可変長指示子及び該一致入
    力データキャラクタの少なくとも1個のキャラクタを有
    する該シフトレジスタの該エントリを示すポインタを含
    む置換コードとを割り当てることによって、該一致入力
    データキャラクタを符号化するステップと、 一致入力データキャラクタ(複数個)が該シフトレジス
    タ内に見つからなかった場合に、「生」データ標識と該
    入力データキャラクタ(複数個)の最初のキャラクタと
    を割り当てることによって、該ストリングの最初のキャ
    ラクタを符号化するステップと、 を包含し、これにより、該データキャラクタストリーム
    が該可変長符号化データストリームに変換される、請求
    項73に記載の方法。
  77. 【請求項77】前記比較の結果の蓄積を評価して、該蓄
    積のどれが前記一致入力データキャラクタの最長ストリ
    ングに対応しているかを判断するステップを更に包含す
    る、請求項76に記載の方法。
  78. 【請求項78】前記シフトレジスタによる前記比較を、
    所定量の入力データキャラクタに限定するステップをさ
    らに包含する、請求項76に記載の方法。
  79. 【請求項79】前記比較結果の蓄積を評価して、該蓄積
    のどれが前記一致入力データキャラクタの最長ストリン
    グに対応しているのかを判断するステップと、 同じ長さの最長ストリングが2個以上存在する場合に、
    該2個以上の最長ストリングに優先順位をつけるステッ
    プと、 を更に包含する、請求項78に記載の方法。
  80. 【請求項80】前記優先順位をつけるステップは、前記
    2個以上の最長ストリングのうちの最先のものを選択す
    るステップを更に包含する、請求項79に記載の方法。
  81. 【請求項81】請求項76に記載の方法によって符号化さ
    れた入力可変長符号化データストリームを、元の入力デ
    ータキャラクタストリームに復号化する方法であって、
    該方法は、 該入力可変長符号化データストリームを、各々が前記標
    識の1個を先頭とする個別の部分に分解するステップ
    と、 該個別の部分における各標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致入力データキャラクタを示す標識(すなわち、一致入
    力データキャラクタが見つかったことを示す前記標識)
    であるのかを決定するステップと、 該標識に従って該個別の部分を処理し、該処理により該
    元の入力データキャラクタストリームの一部を再構築す
    るステップと、 を包含する、可変長符号化データストリーム復号化方
    法。
  82. 【請求項82】前記再構築するステップは、前記標識が
    前記符号化された一致入力データキャラクタを示す標識
    である場合に、前記置換コードにおける前記一致入力デ
    ータキャラクタの長さの可変長指示子と前記ポインタと
    を解釈して、該一致入力データキャラクタを生成し、こ
    れにより、前記元のデータキャラクタストリームの一部
    の再構築するステップを更に包含する、 請求項81に記載の方法。
  83. 【請求項83】前記再構築するステップは、前記標識が
    前記「生」データ標識である場合に、前記入力可変長符
    号化データストリームから前記最初のキャラクタを得
    て、これにより、前記元のデータキャラクタストリーム
    の一部を再構築するステップを更に包含する、 請求項81に記載の方法。
  84. 【請求項84】各エントリが出力データキャラクタスト
    リームの1個のデータキャラクタを格納する複数のエン
    トリを有するシフトレジスタを用いて、請求項76に記載
    の方法によって符号化された可変長符号化データストリ
    ームを出力データキャラクタストリームに変換する方法
    であって、該方法は、 入力される該可変長符号化データストリームを、標識を
    先頭とする個別の部分に分解するステップと、 該個別の部分における該標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致データストリングを示す標識であるのか決定するステ
    ップと、 該標識が前記「生」データ標識である場合に、該個別の
    部分から生データバイトを分解し、該生データバイトを
    出力し、該生データバイトを該シフトレジスタに配置す
    るステップと、 該標識が前記符号化された一致データストリングを示す
    標識である場合に、該一致データストリングの長さの可
    変長指示子と該一致データストリングの最初のキャラク
    タを格納している該シフトレジスタ内のエントリを示す
    オフセットとを分解し、該シフトレジスタ内の該エント
    リに該一致データストリングを該長さで出力し、該一致
    データストリングを該シフトレジスタ内に配置するステ
    ップと、 を包含する方法。
  85. 【請求項85】1個の入力データキャラクタを、これま
    でに入力されたデータキャラクタである複数のデータキ
    ャラクタを含むデータキャラクタストリームと比較する
    装置であって、該装置は、 該データキャラクタストリームの該複数のデータキャラ
    クタを、該データキャラクタが入力された順に入力シフ
    トしながら格納する複数のエントリを有する格納手段で
    あって、該格納手段の各エントリは該データキャラクタ
    ストリームの該データキャラクタの1つを格納する、格
    納手段と、 該1個の入力データキャラクタを該格納手段の各エント
    リに同時伝送する手段と、 該格納手段の各エントリについて、該エントリに格納さ
    れた該データキャラクタを該1個の入力データキャラク
    タと比較して、該格納された該データキャラクタが該1
    個の入力されたデータキャラクタに一致するかどうかを
    決定する手段と、 該格納手段の各エントリに対して、該比較の結果を個別
    に蓄積する手段と、 比較の終わった該1個の入力データキャラクタを該格納
    手段に入力する手段とを備えた装置。
  86. 【請求項86】前記格納手段の各エントリについて蓄積
    した前記比較の結果を格納する手段をさらに備えた、請
    求項85に記載の装置。
  87. 【請求項87】格納された前記比較の結果を、後の入力
    データキャラクタについての比較の結果と比較する手段
    をさらに備えた、請求項86に記載の装置。
  88. 【請求項88】前記入力データキャラクタを1個以上含
    むストリングを可変長符号化データストリームに変換す
    る手段を更に備えており、該変換する手段は、 一致入力データキャラクタ(複数個)が見つかったこと
    を示す標識と、該一致入力データキャラクタの長さの可
    変長指示子及び該一致入力データキャラクタの少なくと
    も1個のキャラクタを有する該格納手段の該エントリを
    示すポインタを含む置換コードとを割り当てることによ
    って、該一致入力データキャラクタを符号化する手段
    と、 「生」データ標識と該入力データキャラクタ(複数個)
    の最初のキャラクタとを割り当てることによって、該ス
    トリングの該最初のキャラクタを符号化する手段と、 を備えた、請求項85に記載の装置。
  89. 【請求項89】各エントリが出力データキャラクタスト
    リームの1個のデータキャラクタを格納する複数のエン
    トリを有するシフト手段を備えたデータ伸張システムに
    おいて、請求項88に記載の装置によって符号化された可
    変長符号化データストリームを出力データキャラクタス
    トリームに変換する装置であって、該装置は、 入力される該可変長符号化データストリームを、標識を
    先頭とする個別の部分に分解する手段と、 該個別の部分における該標識を評価して、該標識が
    「生」データ標識であるのか、それとも符号化された一
    致データストリングを示す標識であるのか決定する手段
    と、 該個別の部分から生データバイトを分解する手段、該生
    データバイトを出力する手段、及び該生データバイトを
    該シフト手段内に配置する手段と、 該一致データストリングの長さの可変長指示子と該一致
    データストリングの最初のキャラクタを格納している該
    シフト手段内のエントリを示すオフセットとを分解する
    手段、該シフト手段内の該エントリに該一致データスト
    リングを該長さで出力する手段、及び該一致データスト
    リングを該シフト手段内に配置する手段と、 を備えた装置。
  90. 【請求項90】前記比較の結果の蓄積を評価して、該蓄
    積のどれが前記一致入力データキャラクタの最長ストリ
    ングに対応しているかを判断する手段をさらに備えた、
    請求項88に記載の装置。
  91. 【請求項91】前記格納手段による前記比較を、所定量
    の入力データキャラクタに限定する手段をさらに備え
    た、請求項88に記載の装置。
  92. 【請求項92】前記比較結果の蓄積を評価して、該蓄積
    のどれが前記一致入力データキャラクタの最長ストリン
    グに対応しているのかを判断する手段と、 同じ長さの最長ストリングが2個以上存在する場合に、
    該2個以上の最長ストリングに優先順位をつける手段
    と、 をさらに備えた、請求項91に記載の装置。
  93. 【請求項93】前記優先順位をつける手段は、前記2個
    以上の最長ストリングのうちの最先のものを選択する手
    段をさらに備えた、請求項92に記載の装置。
  94. 【請求項94】請求項88に記載の装置によって符号化さ
    れた入力可変長符号化データストリームを、元の入力デ
    ータキャラクタストリームに復号化する装置であって、
    該装置は、 該入力可変長符号化データストリームを、各々が前記標
    識の1個を先頭とする個別の部分に分解する手段と、 該個別の部分における各標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致入力データキャラクタを示す標識(すなわち、一致入
    力データキャラクタが見つかったことを示す前記標識)
    であるのかを決定する手段と、 該標識に従って該個別の部分を処理し、該処理により該
    元の入力データキャラクタストリームの一部を再構築す
    る手段と、 を備えている、可変長符号化データストリームを復号化
    する装置。
  95. 【請求項95】前記再構築する手段は、前記置換コード
    における前記一致入力データキャラクタの長さの可変長
    指示子と前記ポインタとを解釈して、前記一致入力デー
    タキャラクタを生成する、請求項94に記載の装置。
  96. 【請求項96】前記再構築する手段は、前記入力可変長
    符号化データストリームから前記ストリングの前記最初
    のキャラクタを得る、請求項94に記載の装置。
  97. 【請求項97】1個の入力データキャラクタを、これま
    でに入力されたデータキャラクタである複数のデータキ
    ャラクタを含むデータキャラクタストリームと比較する
    方法であって、該方法は、 該データキャラクタストリームの該複数のデータキャラ
    クタを、該データキャラクタが入力された順に複数のエ
    ントリを有する格納部にシフトしながら格納するステッ
    プであって、該格納部の各エントリに該データキャラク
    タストリームの該データキャラクタの1個を格納するス
    テップと、 該1個の入力データキャラクタを該格納部の各エントリ
    に同時伝送するステップと、 該格納部の各エントリについて、該エントリに格納され
    た該データキャラクタを該1個の入力データキャラクタ
    と比較して、該格納された該データキャラクタが該1個
    の入力されたデータキャラクタに一致するかどうかを決
    定するステップと、 該格納部の各エントリに対して、該比較の結果を個別に
    蓄積するステップと、 比較の終わった該1個の入力データキャラクタを該格納
    部に入力するステップと、 を包含する方法。
  98. 【請求項98】前記格納部の各エントリについて蓄積し
    た前記比較の結果を格納するステップをさらに包含す
    る、請求項97に記載の方法。
  99. 【請求項99】格納された前記比較の結果を、後の入力
    データキャラクタについての比較の結果と比較するステ
    ップをさらに包含する、請求項98に記載の方法。
  100. 【請求項100】前記入力データキャラクタを1個以上
    含むストリングを可変長符号化データストリームに変換
    するステップをさらに包含しており、該変換するステッ
    プは、 前記格納部内において一致入力データキャラクタ(複数
    個)が見つかった場合に、該一致入力データキャラクタ
    が見つかったことを示す標識と、該一致入力データキャ
    ラクタの長さの可変長指示子および該一致入力データキ
    ャラクタの少なくとも1個のキャラクタを有する該格納
    部の該エントリを示すポインタを含む置換コードとを割
    り当てることによって、該一致入力データキャラクタを
    符号化するステップと、 該格納部内において一致入力データキャラクタが見つか
    らなかった場合に、 「生」データ標識と該入力データキャラクタ(複数個)
    の最初のキャラクタとを割り当てることによって、該ス
    トリングの該最初のキャラクタを符号化するステップ
    と、 を包含し、これにより、該データキャラクタストリーム
    が該可変長符号化データストリームに変換される、請求
    項97に記載の方法。
  101. 【請求項101】前記比較の結果の蓄積を評価して、該
    蓄積のどれが前記一致入力データキャラクタの最長スト
    リングに対応しているかを判断するステップをさらに包
    含する、請求項100に記載の方法。
  102. 【請求項102】前記比較を、所定量の入力データキャ
    ラクタに限定するステップをさらに包含する、請求項10
    0に記載の方法。
  103. 【請求項103】前記比較結果の蓄積を評価して、該蓄
    積のどれが前記一致入力データキャラクタの最長ストリ
    ングに対応しているのかを判断するステップと、 同じ長さの最長ストリングが2個以上存在する場合に、
    該2個以上の最長ストリングに優先順位をつけるステッ
    プと、 をさらに包含する、請求項102に記載の方法。
  104. 【請求項104】前記優先順位をつけるステップは、前
    記2個以上の最長ストリングのうちの最先のものを選択
    するステップをさらに包含する、請求項103に記載の方
    法。
  105. 【請求項105】請求項100に記載の方法によって符号
    化された入力可変長符号化データストリームを、元の入
    力データキャラクタストリームに復号化する方法であっ
    て、該方法は、 該入力可変長符号化データストリームを、各々が前記標
    識の1個を先頭とする個別の部分に分解するステップ
    と、 該個別の部分における各標識を評価して、該標識が前記
    「生」データ標識であるのか、それとも符号化された一
    致入力データキャラクタを示す標識(すなわち、一致入
    力データキャラクタが見つかったことを示す前記標識)
    であるのかを決定するステップと、 該標識に従って該個別の部分を処理し、該処理により該
    元の入力データキャラクタストリームの一部を再構築す
    るステップと、 を包含する、方法。
  106. 【請求項106】前記再構築するステップは、前記標識
    が前記符号化された一致入力データキャラクタを示す標
    識である場合に、前記置換コードにおける前記一致入力
    データキャラクタの長さの可変長指示子と前記ポインタ
    とを解釈して、該一致入力データキャラクタを生成する
    ステップと、 これにより、前記元のデータキャラクタストリームの一
    部を再構築するステップと、 を更に包含する、請求項105に記載の方法。
  107. 【請求項107】前記再構築するステップは、前記標識
    が前記「生」データ標識である場合に、前記入力可変長
    符号化データストリームから前記最初のキャラクタを得
    て、これにより、前記元のデータキャラクタストリーム
    の一部を再構築するステップを更に包含する、 請求項105に記載の方法。
JP2006057A 1989-01-13 1990-01-12 データ圧縮装置及び方法 Expired - Lifetime JP2713369B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US07/297,152 US5016009A (en) 1989-01-13 1989-01-13 Data compression apparatus and method
US418,034 1989-10-06
US07/418,034 US5003307A (en) 1989-01-13 1989-10-06 Data compression apparatus with shift register search means
US297,152 1989-10-06

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP6159042A Division JPH07111460A (ja) 1989-01-13 1994-07-11 データ圧縮装置及び方法

Publications (2)

Publication Number Publication Date
JPH0368219A JPH0368219A (ja) 1991-03-25
JP2713369B2 true JP2713369B2 (ja) 1998-02-16

Family

ID=26970006

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2006057A Expired - Lifetime JP2713369B2 (ja) 1989-01-13 1990-01-12 データ圧縮装置及び方法
JP6159042A Pending JPH07111460A (ja) 1989-01-13 1994-07-11 データ圧縮装置及び方法
JP36352699A Expired - Fee Related JP3238143B2 (ja) 1989-01-13 1999-12-21 データ圧縮装置及び方法

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP6159042A Pending JPH07111460A (ja) 1989-01-13 1994-07-11 データ圧縮装置及び方法
JP36352699A Expired - Fee Related JP3238143B2 (ja) 1989-01-13 1999-12-21 データ圧縮装置及び方法

Country Status (2)

Country Link
US (1) US5003307A (ja)
JP (3) JP2713369B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8134483B2 (en) 2009-09-15 2012-03-13 Ricoh Company, Ltd. Data processing apparatus and method

Families Citing this family (155)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR930003416B1 (ko) * 1988-03-29 1993-04-29 주식회사 금성사 폰트의 함축방법
GB8815978D0 (en) * 1988-07-05 1988-08-10 British Telecomm Method & apparatus for encoding decoding & transmitting data in compressed form
US5146221A (en) * 1989-01-13 1992-09-08 Stac, Inc. Data compression apparatus and method
US5003307A (en) * 1989-01-13 1991-03-26 Stac, Inc. Data compression apparatus with shift register search means
US5532694A (en) * 1989-01-13 1996-07-02 Stac Electronics, Inc. Data compression apparatus and method using matching string searching and Huffman encoding
US5452451A (en) * 1989-06-15 1995-09-19 Hitachi, Ltd. System for plural-string search with a parallel collation of a first partition of each string followed by finite automata matching of second partitions
US5010345A (en) 1989-12-28 1991-04-23 International Business Machines Corporation Data compression method
US5184126A (en) 1989-12-28 1993-02-02 International Business Machines Corporation Method of decompressing compressed data
US5001478A (en) 1989-12-28 1991-03-19 International Business Machines Corporation Method of encoding compressed data
EP0471518B1 (en) * 1990-08-13 1996-12-18 Fujitsu Limited Data compression method and apparatus
US5237460A (en) * 1990-12-14 1993-08-17 Ceram, Inc. Storage of compressed data on random access storage devices
US5490260A (en) * 1990-12-14 1996-02-06 Ceram, Inc. Solid-state RAM data storage for virtual memory computer using fixed-sized swap pages with selective compressed/uncompressed data store according to each data size
US5414530A (en) * 1991-03-12 1995-05-09 Canon Kabushiki Kaisha Image recording method and apparatus
US5150430A (en) * 1991-03-15 1992-09-22 The Board Of Trustees Of The Leland Stanford Junior University Lossless data compression circuit and method
US5179378A (en) * 1991-07-30 1993-01-12 University Of South Florida Method and apparatus for the compression and decompression of data using Lempel-Ziv based techniques
US5159336A (en) * 1991-08-13 1992-10-27 Iomega Corporation Tape controller with data compression and error correction sharing a common buffer
US5243341A (en) * 1992-06-01 1993-09-07 Hewlett Packard Company Lempel-Ziv compression scheme with enhanced adapation
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
US5175543A (en) * 1991-09-25 1992-12-29 Hewlett-Packard Company Dictionary reset performance enhancement for data compression applications
CA2077271C (en) * 1991-12-13 1998-07-28 David J. Craft Method and apparatus for compressing data
US5396228A (en) * 1992-01-16 1995-03-07 Mobile Telecommunications Technologies Methods and apparatus for compressing and decompressing paging data
US5371499A (en) * 1992-02-28 1994-12-06 Intersecting Concepts, Inc. Data compression using hashing
US5406278A (en) * 1992-02-28 1995-04-11 Intersecting Concepts, Inc. Method and apparatus for data compression having an improved matching algorithm which utilizes a parallel hashing technique
US5339076A (en) * 1992-04-27 1994-08-16 Integrated Information Technology Data compression using content addressable memory
US5353024A (en) * 1992-05-01 1994-10-04 Intersecting Concepts, Inc. Method for data compression having an improved encoding algorithm which utilizes a token stacking technique
US5485526A (en) * 1992-06-02 1996-01-16 Hewlett-Packard Corporation Memory circuit for lossless data compression/decompression dictionary storage
US5649151A (en) * 1992-06-29 1997-07-15 Apple Computer, Inc. Efficient method and apparatus for access and storage of compressed data
US5734892A (en) * 1992-06-29 1998-03-31 Apple Computer, Inc. Efficient method and apparatus for access and storage of compressed data
EP0582907A3 (en) * 1992-08-10 1995-05-10 Stac Electronics Inc Device and method for data compression using search by comparison of strings and Huffman coding.
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
US5406279A (en) * 1992-09-02 1995-04-11 Cirrus Logic, Inc. General purpose, hash-based technique for single-pass lossless data compression
US5389922A (en) * 1993-04-13 1995-02-14 Hewlett-Packard Company Compression using small dictionaries with applications to network packets
US5384567A (en) 1993-07-08 1995-01-24 International Business Machines Corporation Combination parallel/serial execution of sequential algorithm for data compression/decompression
US5521597A (en) * 1993-08-02 1996-05-28 Mircosoft Corporation Data compression for network transport
US5406280A (en) * 1993-08-26 1995-04-11 Commerce Clearing House Data retrieval system using compression scheme especially for serial data stream
US5499382A (en) * 1993-09-20 1996-03-12 Nusinov; Eugene B. Circuit and method of bit-packing and bit-unpacking using a barrel shifter
DE69425209T2 (de) * 1993-09-20 2001-03-15 Codex Corp Verbindungsverfahren und -anordnung für inhaltsadressierbaren Speicher
US5384568A (en) * 1993-12-02 1995-01-24 Bell Communications Research, Inc. Data compression
US5602764A (en) * 1993-12-22 1997-02-11 Storage Technology Corporation Comparing prioritizing memory for string searching in a data compression system
US5563595A (en) * 1993-12-23 1996-10-08 International Business Machines Corporation Method and apparatus for compressing data
JP3397431B2 (ja) * 1994-03-16 2003-04-14 富士通株式会社 データ圧縮方法および装置ならびにデータ復元方法および装置
US5525982A (en) * 1994-04-15 1996-06-11 International Business Machines Corporation Method and means for character string pattern matching for compression and the like using minimal cycles per character
JP3522331B2 (ja) * 1994-04-22 2004-04-26 株式会社セタ データ圧縮方法
US5502439A (en) * 1994-05-16 1996-03-26 The United States Of America As Represented By The United States Department Of Energy Method for compression of binary data
US5532693A (en) * 1994-06-13 1996-07-02 Advanced Hardware Architectures Adaptive data compression system with systolic string matching logic
DE69524999T2 (de) * 1994-08-01 2002-07-18 Opentv Inc Verfahren zum Komprimieren und Dekomprimieren von Dateien
US5883975A (en) * 1994-09-12 1999-03-16 Nippon Steel Corporation Compression and decompression methods on two-dimensional image data
US5617517A (en) * 1994-09-20 1997-04-01 Seiko Epson Corporation Two-dimensional method and system for compressing bi-level images
US5883588A (en) * 1994-10-04 1999-03-16 Nec Corporation Data compression system and data compression device for improving data compression rate and coding speed
US7190284B1 (en) 1994-11-16 2007-03-13 Dye Thomas A Selective lossless, lossy, or no compression of data based on address range, data type, and/or requesting agent
US6571279B1 (en) * 1997-12-05 2003-05-27 Pinpoint Incorporated Location enhanced information delivery system
US5758257A (en) * 1994-11-29 1998-05-26 Herz; Frederick System and method for scheduling broadcast of and access to video programs and other data using customer profiles
US6460036B1 (en) * 1994-11-29 2002-10-01 Pinpoint Incorporated System and method for providing customized electronic newspapers and target advertisements
US5684478A (en) * 1994-12-06 1997-11-04 Cennoid Technologies, Inc. Method and apparatus for adaptive data compression
US5608396A (en) * 1995-02-28 1997-03-04 International Business Machines Corporation Efficient Ziv-Lempel LZI data compression system using variable code fields
US5771010A (en) * 1995-03-22 1998-06-23 Ibm Corporation Apparatus for compressing data using a Lempel-Ziv-type algorithm
US5627534A (en) * 1995-03-23 1997-05-06 International Business Machines Corporation Dual stage compression of bit mapped image data using refined run length and LZ compression
US5526363A (en) * 1995-05-16 1996-06-11 Telco Systems, Inc. Multicontext compression system with shared data structures
US5619591A (en) * 1995-08-23 1997-04-08 Vtech Electronics, Ltd. Encoding and decoding color image data based on mean luminance and an upper and a lower color value
JP3273119B2 (ja) * 1995-09-29 2002-04-08 京セラ株式会社 データ圧縮・伸長装置
US5659755A (en) * 1995-11-20 1997-08-19 International Business Machines Corporation Method and system in a data processing system for efficiently compressing data using a sorting network
US5933104A (en) * 1995-11-22 1999-08-03 Microsoft Corporation Method and system for compression and decompression using variable-sized offset and length fields
JP3566441B2 (ja) * 1996-01-30 2004-09-15 シャープ株式会社 テキスト圧縮用辞書作成装置
US5729223A (en) * 1996-03-20 1998-03-17 Motorola Inc. Method and apparatus for data compression and restoration
US6023558A (en) * 1996-06-27 2000-02-08 Apple Computer, Inc. Graphics compression for an emulation system
US5951623A (en) 1996-08-06 1999-09-14 Reynar; Jeffrey C. Lempel- Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases
US5760716A (en) * 1996-08-21 1998-06-02 Autodesk, Inc. Vector data compression
JP3540109B2 (ja) * 1996-12-24 2004-07-07 富士通株式会社 データ圧縮方法及び装置
US6374250B2 (en) * 1997-02-03 2002-04-16 International Business Machines Corporation System and method for differential compression of data from a plurality of binary sources
US5798718A (en) * 1997-05-12 1998-08-25 Lexmark International, Inc. Sliding window data compression method and apparatus
US6879266B1 (en) 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
US5930790A (en) * 1997-09-25 1999-07-27 Xerox Corporation String-match array for substitutional compression
JP3730385B2 (ja) 1997-12-05 2006-01-05 株式会社東芝 デ−タ圧縮装置
JP3327869B2 (ja) * 1998-07-28 2002-09-24 ゼロックス・コーポレーション 最小マッチ長が3のプリマッチストリングマッチアレイ
US6952823B2 (en) * 1998-09-01 2005-10-04 Pkware, Inc. Software patch generator using compression techniques
US6275588B1 (en) 1998-11-12 2001-08-14 I-Data International A/S Apparatus and method for performing and controlling encryption/decryption for data to be transmitted on local area network
US6624761B2 (en) * 1998-12-11 2003-09-23 Realtime Data, Llc Content independent data compression method and system
US6377930B1 (en) 1998-12-14 2002-04-23 Microsoft Corporation Variable to variable length entropy encoding
US6300888B1 (en) 1998-12-14 2001-10-09 Microsoft Corporation Entrophy code mode switching for frequency-domain audio coding
US6404931B1 (en) 1998-12-14 2002-06-11 Microsoft Corporation Code book construction for variable to variable length entropy encoding
US6208273B1 (en) 1999-01-29 2001-03-27 Interactive Silicon, Inc. System and method for performing scalable embedded parallel data compression
US7129860B2 (en) * 1999-01-29 2006-10-31 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
US7538694B2 (en) * 1999-01-29 2009-05-26 Mossman Holdings Llc Network device with improved storage density and access speed using compression techniques
US6885319B2 (en) * 1999-01-29 2005-04-26 Quickshift, Inc. System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms
US6145069A (en) * 1999-01-29 2000-11-07 Interactive Silicon, Inc. Parallel decompression and compression system and method for improving storage density and access speed for non-volatile memory and embedded memory devices
US6822589B1 (en) 1999-01-29 2004-11-23 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
US6819271B2 (en) 1999-01-29 2004-11-16 Quickshift, Inc. Parallel compression and decompression system and method having multiple parallel compression and decompression engines
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
US7630986B1 (en) * 1999-10-27 2009-12-08 Pinpoint, Incorporated Secure data interchange
US6318156B1 (en) * 1999-10-28 2001-11-20 Micro Motion, Inc. Multiphase flow measurement system
US20030191876A1 (en) * 2000-02-03 2003-10-09 Fallon James J. Data storewidth accelerator
US7181608B2 (en) 2000-02-03 2007-02-20 Realtime Data Llc Systems and methods for accelerated loading of operating systems and application programs
US6754852B2 (en) * 2000-03-02 2004-06-22 Texas Instruments Incorporated Debug trigger builder
US20060155788A1 (en) * 2000-03-09 2006-07-13 Pkware, Inc. System and method for manipulating and managing computer archive files
US20050015608A1 (en) * 2003-07-16 2005-01-20 Pkware, Inc. Method for strongly encrypting .ZIP files
US20060143249A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143253A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US8230482B2 (en) 2000-03-09 2012-07-24 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143237A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060173847A1 (en) * 2000-03-09 2006-08-03 Pkware, Inc. System and method for manipulating and managing computer archive files
US7844579B2 (en) * 2000-03-09 2010-11-30 Pkware, Inc. System and method for manipulating and managing computer archive files
US6879988B2 (en) * 2000-03-09 2005-04-12 Pkware System and method for manipulating and managing computer archive files
US20060143180A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143199A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US8959582B2 (en) 2000-03-09 2015-02-17 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060173848A1 (en) * 2000-03-09 2006-08-03 Pkware, Inc. System and method for manipulating and managing computer archive files
EP1148649A1 (en) * 2000-04-17 2001-10-24 I-Data International A/S Method and apparatus for data compression
WO2002007000A2 (en) 2000-07-13 2002-01-24 The Belo Company System and method for associating historical information with sensory data and distribution thereof
US6348881B1 (en) * 2000-08-29 2002-02-19 Philips Electronics No. America Corp. Efficient hardware implementation of a compression algorithm
US7417568B2 (en) * 2000-10-03 2008-08-26 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
US9143546B2 (en) 2000-10-03 2015-09-22 Realtime Data Llc System and method for data feed acceleration and encryption
US6515598B2 (en) 2000-12-22 2003-02-04 Cilys 53, Inc. System and method for compressing and decompressing data in real time
US7386046B2 (en) 2001-02-13 2008-06-10 Realtime Data Llc Bandwidth sensitive data compression and decompression
US6392571B1 (en) 2001-05-10 2002-05-21 International Business Machines Corporation String search apparatus and method for data compression
US7382878B2 (en) * 2001-06-22 2008-06-03 Uponus Technologies, Llc System and method for data encryption
CA2358048A1 (en) * 2001-09-25 2003-03-25 Luis Rueda A cryptosystem for data security
JP3906792B2 (ja) * 2002-01-22 2007-04-18 松下電器産業株式会社 高周波信号受信装置とその製造方法
US6624762B1 (en) 2002-04-11 2003-09-23 Unisys Corporation Hardware-based, LZW data compression co-processor
US8516588B1 (en) * 2002-05-02 2013-08-20 Verizon Patent And Licensing Inc. String detection system and method of detecting a string
US6714145B1 (en) 2002-09-26 2004-03-30 Richard Marques Method and apparatus for integer-based encoding and decoding of bits
US9614772B1 (en) 2003-10-20 2017-04-04 F5 Networks, Inc. System and method for directing network traffic in tunneling applications
US7079051B2 (en) * 2004-03-18 2006-07-18 James Andrew Storer In-place differential compression
US8024483B1 (en) 2004-10-01 2011-09-20 F5 Networks, Inc. Selective compression for network connections
US7634502B2 (en) * 2005-01-24 2009-12-15 Paul Colton System and method for improved content delivery
US7734686B2 (en) * 2005-01-25 2010-06-08 International Business Machines Corporation Markup method for managing rich client code and experiences using multi-component pages
US7937510B1 (en) 2005-02-01 2011-05-03 Altera Corporation Lempel Ziv compression architecture
US7109895B1 (en) * 2005-02-01 2006-09-19 Altera Corporation High performance Lempel Ziv compression architecture
US7215259B2 (en) * 2005-06-03 2007-05-08 Quantum Corporation Data compression with selective encoding of short matches
US7783781B1 (en) 2005-08-05 2010-08-24 F5 Networks, Inc. Adaptive compression
US8533308B1 (en) 2005-08-12 2013-09-10 F5 Networks, Inc. Network traffic management through protocol-configurable transaction processing
US8275909B1 (en) 2005-12-07 2012-09-25 F5 Networks, Inc. Adaptive compression
US7882084B1 (en) 2005-12-30 2011-02-01 F5 Networks, Inc. Compression of data transmitted over a network
US8565088B1 (en) 2006-02-01 2013-10-22 F5 Networks, Inc. Selectively enabling packet concatenation based on a transaction boundary
US7873065B1 (en) 2006-02-01 2011-01-18 F5 Networks, Inc. Selectively enabling network packet concatenation based on metrics
US7417570B2 (en) * 2006-07-31 2008-08-26 Sap Ag Lossless comparative compression and transmission method and system
US9356824B1 (en) 2006-09-29 2016-05-31 F5 Networks, Inc. Transparently cached network resources
US8417833B1 (en) 2006-11-29 2013-04-09 F5 Networks, Inc. Metacodec for optimizing network data compression based on comparison of write and read rates
FR2910998A1 (fr) * 2007-01-03 2008-07-04 St Microelectronics Sa Protection d'une donnee statique dans un circuit integre.
US9106606B1 (en) 2007-02-05 2015-08-11 F5 Networks, Inc. Method, intermediate device and computer program code for maintaining persistency
WO2009050766A1 (ja) 2007-10-18 2009-04-23 Fujitsu Limited 映像圧縮符号化・復元装置、映像圧縮符号化・復元プログラム、及び映像生成・出力装置
US8107754B2 (en) * 2007-12-07 2012-01-31 Mediatek Inc. Systems and methods for randomly accessing compressed images
JP5556809B2 (ja) 2009-03-30 2014-07-23 日本電気株式会社 情報処理システム、情報圧縮装置、情報復元装置、情報処理方法及びそのプログラム
US8750370B2 (en) * 2009-09-04 2014-06-10 Brocade Communications Systems, Inc. Congestion-adaptive compression
JP6003059B2 (ja) 2012-01-05 2016-10-05 株式会社リコー 画像処理装置および画像処理方法、ならびに、画像形成装置
US8868584B2 (en) 2012-01-13 2014-10-21 International Business Machines Corporation Compression pattern matching
KR101809923B1 (ko) * 2012-01-17 2017-12-20 엘지전자 주식회사 가전기기, 가전기기 진단장치 및 그 방법
US8775776B2 (en) 2012-01-18 2014-07-08 International Business Machines Corporation Hash table using hash table banks
US8779950B2 (en) 2012-03-05 2014-07-15 Dcba, Llc Command encoded data compression
US8766827B1 (en) * 2013-03-15 2014-07-01 Intel Corporation Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression
US9864536B2 (en) * 2013-10-24 2018-01-09 Qualcomm Incorporated System and method for conserving power consumption in a memory system
US9543980B2 (en) 2014-10-10 2017-01-10 Massachusettes Institute Of Technology Systems and methods for model-free compression and model-based decompression
US9450606B1 (en) 2015-10-01 2016-09-20 Seagate Technology Llc Data matching for hardware data compression
US10171103B1 (en) 2018-01-12 2019-01-01 Mellanox Technologies, Ltd. Hardware data compression architecture including shift register and method thereof

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4021782A (en) * 1974-01-07 1977-05-03 Hoerning John S Data compaction system and apparatus
US3976844A (en) * 1975-04-04 1976-08-24 Honeywell Information Systems, Inc. Data communication system for transmitting data in compressed form
US4054951A (en) * 1976-06-30 1977-10-18 International Business Machines Corporation Data expansion apparatus
US4464650A (en) * 1981-08-10 1984-08-07 Sperry Corporation Apparatus and method for compressing data signals and restoring the compressed data signals
US4412230A (en) * 1981-09-21 1983-10-25 Wavetek Indiana, Inc. Apparatus and method for producing images on a photosensitive media
US4491934A (en) * 1982-05-12 1985-01-01 Heinz Karl E Data compression process
US4463422A (en) * 1982-07-12 1984-07-31 Csp, Inc. Method of processing an iterative program loop
US4538240A (en) * 1982-12-30 1985-08-27 International Business Machines Corporation Method and apparatus for performing hashing operations using Galois field multiplication
US4814746A (en) * 1983-06-01 1989-03-21 International Business Machines Corporation Data compression method
US4558302A (en) * 1983-06-20 1985-12-10 Sperry Corporation High speed data compression and decompression apparatus and method
US4588985A (en) * 1983-12-30 1986-05-13 International Business Machines Corporation Polynomial hashing
US4612532A (en) * 1984-06-19 1986-09-16 Telebyte Corportion Data compression apparatus and method
GB2172127B (en) * 1985-03-06 1988-10-12 Ferranti Plc Data compression system
US4876541A (en) * 1987-10-15 1989-10-24 Data Compression Corporation Stem for dynamically compressing and decompressing electronic data
US5016009A (en) * 1989-01-13 1991-05-14 Stac, Inc. Data compression apparatus and method
US5003307A (en) * 1989-01-13 1991-03-26 Stac, Inc. Data compression apparatus with shift register search means

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8134483B2 (en) 2009-09-15 2012-03-13 Ricoh Company, Ltd. Data processing apparatus and method

Also Published As

Publication number Publication date
JP3238143B2 (ja) 2001-12-10
JPH07111460A (ja) 1995-04-25
JPH0368219A (ja) 1991-03-25
JP2000201081A (ja) 2000-07-18
US5003307A (en) 1991-03-26

Similar Documents

Publication Publication Date Title
JP2713369B2 (ja) データ圧縮装置及び方法
US5126739A (en) Data compression apparatus and method
US5414425A (en) Data compression apparatus and method
US5016009A (en) Data compression apparatus and method
EP0666651B1 (en) Apparatus and method for lempel ziv data compression with management of multiple dictionaries in content addressable memory
US6657565B2 (en) Method and system for improving lossless compression efficiency
US6597812B1 (en) System and method for lossless data compression and decompression
US5710562A (en) Method and apparatus for compressing arbitrary data
US5532694A (en) Data compression apparatus and method using matching string searching and Huffman encoding
CA2263453C (en) A lempel-ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases
JP2610084B2 (ja) データ伸長方法および装置ならびにデータ圧縮伸長方法および装置
JP2863065B2 (ja) マッチングストリング探索およびハフマン符号化を用いたデータ圧縮装置および方法ならびにデータ伸長装置および方法
WO1998006028A9 (en) A lempel-ziv data compression technique utilizing a dicionary pre-filled with fequent letter combinations, words and/or phrases
WO1995019662A1 (en) Data compression apparatus and method
JPH10341165A (ja) 少量データへの適応を加速するデータ圧縮方法
US20200228138A1 (en) Memory Compression Method and Apparatus
EP0742646B1 (en) Data compression method and apparatus with expansion protection
JP3061278B2 (ja) 可変ビット長コード語のビット長通信方法
JPH10341166A (ja) データ量に適応するデータ圧縮方法
US5745603A (en) Two dimensional context model obtained without a line buffer for arithmetic coding
EP1323122A2 (en) Index relational processor