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

データ圧縮装置及び方法

Info

Publication number
JPH07111460A
JPH07111460A JP6159042A JP15904294A JPH07111460A JP H07111460 A JPH07111460 A JP H07111460A JP 6159042 A JP6159042 A JP 6159042A JP 15904294 A JP15904294 A JP 15904294A JP H07111460 A JPH07111460 A JP H07111460A
Authority
JP
Japan
Prior art keywords
data
matching
character
indicator
string
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP6159042A
Other languages
English (en)
Inventor
Douglas L Whiting
エル. ホワイティング ダグラス
Glen A George
エー. ジョージ グレン
Glen E Ivey
イー. アイビー グレン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
STAC Inc
Original Assignee
STAC Inc
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 STAC Inc filed Critical STAC Inc
Publication of JPH07111460A publication Critical patent/JPH07111460A/ja
Pending 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)

Abstract

(57)【要約】 (修正有) 【目的】 入力データキャラクタストリームを可変長符
号化データストリームに変換し、高速かつ高圧縮率のデ
ータ圧縮装置及び方法を提供する。 【構成】 圧縮回路228は圧縮コントローラ及びシー
ケンスコントローラ230によって制御される。データ
圧縮方法は、データ格納手段内で入力データストリーム
にマッチする入力データキャラクタの最長データストリ
ングをサーチする。マッチングデータストリングが見つ
かった場合には、見つかったことを示す標識と、マッチ
ングデータストリングの長さの可変長指示子と、該格納
手段内での位置を示すポインタと、を割り当てて、マッ
チングデータストリングを符号化する。符号化により、
入力データストリームの2個のキャラクタのマッチング
ストリングは2個より少ないキャラクタに圧縮される。
マッチング入力データストリングが見つからなかった場
合には、「生」データ標識と、入力データストリームの
最初のキャラクタとを割り当てる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般的にはデータ格納
及び伝送システムに関し、より詳細には、データ格納及
び伝送の能力を改善する、データ圧縮システム及び方法
に関する。
【0002】
【従来の技術】データ格納システムとデータ伝送システ
ムとの間のデータ圧縮の重要でない違いによって、デー
タ格納システムのみが、特に、このようなシステムに格
納されたデータファイルに言及される。しかし、全ての
データ格納システムは、データ伝送システム及び他のア
プリケーションをカバーするように、容易に拡張され得
る。ファイルはバイト又はキャラクタの連続するストリ
ームであると考えられ、そこではバイトは幾つかの固定
された数のビットから成り、圧縮システムはこの入力バ
イトのストリームを、「圧縮された」バイトの出力スト
リームに変換し、これから伸張ユニットによって、オリ
ジナルファイルの内容が再構築され得る。コンピュータ
データファイルが典型的に膨大な量の冗長性を含むとい
うことは、定着している。これらのファイルがディスク
又はテープ記憶媒体上でより小さいスペースを占めるよ
うに、又は1200ボーのモデムラインのような伝送チ
ャネルに於いてより短い時間で移送され得るように、こ
れらのファイルを「圧縮」するために多くの技術が長年
用いられてきた。例えば、パーソナルコンピュータに使
用される幾つかの広く用いられている市販のプログラム
がある(例えば、System Enhancement Associates,In
c.,Wayne,NJ,1985のARCソフトウェア)。このプログ
ラムはファイル上で圧縮及び伸張の機能を果たす。減少
量はファイルの内容に大きく依存して変化するが、この
ようなプログラムにとって、与えられたファイルの大き
さを2:1の比(又はそれ以上)に減少させることは一
般的ではない。
【0003】データ圧縮のための従来技術に於ける多く
のアプローチがなされている。これらのアプローチの幾
つかは、ファイル又はファイル内のデータの一定のタイ
プについて、暗黙の前提を作り出している。例えば、ス
キャナを用いて生成されたページのビットイメージは、
殆どが空白の画素であり、この傾向は、このようなファ
イルの大きさを大きく減少させる圧縮アルゴリズムによ
って利用される。同様に、ワードプロセッシングファイ
ルは、関係する言語(即ち、英語)に最もよく現れるキ
ャラクタ(又はワード)の知識を用いて容易に圧縮され
る、多くのアスキーキャラクタを含んでいる。他の圧縮
方法はファイルのタイプから独立しており、そのデータ
に「適応」するようにされている。一般に、特定のタイ
プ用の圧縮技術は、その技術が最適化されるファイル上
では、一般用のアルゴリズムよりも高い圧縮性能を供給
する。しかし、もしファイルモデルが正しくないと、そ
れらは非常に低い圧縮性能を有する傾向にある。例え
ば、英語のテキストに最適化された圧縮方法は、フラン
ス語のテキストを含むファイル上では、不完全にしか機
能しないかも知れない。
【0004】典型的には、格納システムはどんなタイプ
のデータがその中に格納されているかを知らない。従っ
て、特定のデータ用の圧縮技術は避けられ、又はそれら
は可能な技術の集合の一つとして用いられるのみであ
る。例えば、ABCは多くの方法を用い、そして各ファ
イルに最適のそれを選択する。しかし、このアプローチ
は単一の圧縮方法を用いるのに比べて、非常なコンピュ
ータのオーバーヘッドを必要とすることに注意しなけれ
ばならない。
【0005】圧縮方法の他の重要な見地は、ファイルが
処理される速度である。もし圧縮(又は伸張)の速度が
非常に遅く、システムの性能を著しく低下させる場合に
は、たとえそれが競合する方法よりも高い圧縮比を達成
し得ても、その圧縮方法は受け入れられない。例えば、
ストリームテープシステムでは、もしテープ駆動に必要
な速度でデータを供給するのに十分速くファイルが圧縮
されなければ、テープは流れの速度を落し、圧縮による
性能及び/又は容量利得は無駄になる。
【0006】最も一般的な圧縮技術の一つは、ランレン
グス符号化として知られている。このアプローチは、ゼ
ロ又はスペースキャラクタのような同じバイト(キャラ
クタ)が繰り返されたストリングを、ファイルがしばし
ば有しているという事実を利用している。このようなス
トリングは「エスケープ」キャラクタを用いて符号化
(コード化)され、繰り返し数、繰り返されるキャラク
タが続く。ランの形式で現れなかった他の全てのキャラ
クタは、それらを「普通テキスト」として出力ストリー
ムに置くことによって符号化される。エスケープキャラ
クタは滅多に使用しないバイトとなるように選ばれ、入
力ストリームに於けるその出現は、キャラクタとしての
エスケープキャラクタそれ自身を有する長さ1のランと
して符号化される。ランレングス符号化はあるタイプの
ファイル上ではよく機能するが、もしファイルが繰り返
しのキャラクタを有していなければ(又はファイルにエ
スケープキャラクタがしばしば出現すれば)、低い圧縮
比率しか有し得ない。従って、一般に、エスケープキャ
ラクタの選択は、データ上で最も使用の少ないバイトを
捜すという余分な経路を必要としこのようなシステムの
効率を低下させる。
【0007】最も洗練されたアプローチは、ハフマンコ
ードとして知られている(Huffman,David A.,"A Method
for the Construction of Minimum Redundancy Code
s",Proceedings of the IRE,pp.1098-1110,September 1
952 を参照せよ)。この方法では、あるバイトはファイ
ル内で他のバイトよりしばしば多く現れると仮定され
る。例えば英語のテキストでは、文字「t」又は「T」
は文字「Q」より多く存在する。各バイトはビットスト
リングに割り当てられ、その長さは、逆にファイル内に
於けるそのバイトの相対的な頻度に関係する。これらの
ビットストリングは、もし1ビットがある時に処理され
ると、唯一の結果しか生じないように復号化(デコー
ド)されるように選択される。ハフマンはファイルに対
する相対的頻度の統計に基づく、ビットストリングの最
適割当てのためのアルゴリズムを導いている。
【0008】ハルマンアルゴリズムは、達成される圧縮
が漸近的にファイルの「エントロピー」に近づくことを
保証し、それは以下のように正確に定義される。
【0009】 H=SUM−[p(i)log2(p(i))] ここで、
【0010】
【数1】
【0011】Hの単位はビットであり、それはファイル
内のキャラクタを表現するのに(平均して)どれだけの
ビットが必要かを測定する。例えば、もしエントロピー
が8−ビットバイトを用いて4.0ビットであれば、ハ
フマン圧縮システムはファイル上で2:1の圧縮をなし
得る。エントロピーが高いほど、データはより「乱雑」
(従って、あまり圧縮できない)である。
【0012】ハフマンアプローチの多くの変形があり
(例えば、Jones, Douglas W.,"Application of Splay
Trees to Data Compression",Communications of the A
CM,pp.996-1007,Vol.31,No.8,August 1988)、通常、そ
れらは処理された入力バイトの最新の履歴に基づいた、
動的コード割当てを含んでいる。このようなスキームは
上で議論した問題点を回避する。他のアプローチは同時
に2バイトワード(バイグラム(bi-gram))を見ること
を含み、ハフマン符号化をそのワード上で行う。
【0013】近年のハフマン符号化の変形は、MacCrisk
enの米国特許第4,730,348号(及びその中で参照されて
いる他の特許)に現れている。MacCriskenの米国特許で
は、ハフマンコードは先のバイトのコンテキストに於け
るバイトに割り当てられる。言い換えれば、複数の符号
化テーブル(コードテーブル)が用いられ、各テーブル
は先のバイトに従って選択される。このアプローチは、
例えば、英語では文字「u」は頻繁には現れないが、
「q」の後には殆ど常に現れるという観察に基づいてい
る。従って、「u」に割り当てられるコードは、先の文
字が「q」(又は「Q」)であるかどうかに依存して異
なるであろう。多数のテーブルと動的コード割当てとを
用いる同様のスキームについては、Jones, Douglas
W.,"Application of Splay Trees to Data Compressio
n"を参照されたい。
【0014】圧縮のための全体的に異なるアプローチ
が、Ziv及びLempelによって開発され(Ziv,J.及びLempe
l, A. "Compression of Individual Sequence via Vari
able-Rate Coding", IEEE Transactions on Informatio
n Theory, Vol. IT-24, pp. 530-536. September 1978
を参照せよ)、Welchによって改良されている(Welch,T
erry A.,"A Technique for High-Performance Data Com
pression",IEEE Computer,pp.8-19,June 1984)。可変
長のコードを固定された大きさのバイトに割り当てる代
わりに、Ziv-Lempelアルゴリズム(「ZL」)は、固定
長のコードを可変の大きさのストリングに割り当てる。
ファイルからの入力バイトが処理されるにつれて、スト
リングのテーブルが作成され、各バイト又はバイトのス
トリングは、テーブル内のストリングのインデックスの
みを出力することにより、圧縮される。典型的にはこの
インデックスは11−14ビットの範囲であり、12ビ
ットが一般的である。なぜならこれは単純な手法に向い
ているからである。テーブルは先に符号化されたバイト
のみを用いて作成されるので、圧縮及び伸縮のシステム
の両方は、テーブル情報を移送するのに必要な余分なオ
ーバーヘッド無しに、同じテーブルを維持することがで
きる。ハッシングアルゴリズムがマッチングストリング
を効率的に捜すのに用いられる。ファイルの初めでは、
テーブルはアルファベットの各キャラクタに対して一つ
のストリングが初期化される。従って、たとえそのスト
リングが長さ1のみを有していても、全てのバイトは少
なくとも一つのストリングに見いだされるということを
確実にする。
【0015】Ziv-Lempelアルゴリズムは、それ自身をデ
ータに適合させ、ファイルの内容に根拠を置く予め設定
されたテーブルを必要としないので、魅力がある。更
に、ストリングを極端に長くし得るので、最適の場合の
圧縮比率は非常に高く、実際のZL出力は、ほとんどの
タイプのファイルでハフマンスキームに匹敵する。ま
た、それは装置にとっても非常に単純であり、この単純
さが高い効率に現れている。
【0016】また、同時に1より多くの方法を用いる圧
縮システムを設計することも可能である。このシステム
は、ファイル内でその方法が最も効率的になるように動
的に後ろ及び前にスイッチングする。装置の観点から
は、このようなスキームは非常に高価であるかも知れな
いが(即ち、遅く及び/又は高価である)、結果として
得られる圧縮比率を非常に高くすることができる。
【0017】動的に前後にスイッチするこのような一つ
の方法は、MacCriskenの特許に開示されている。上述の
ように、バイグラムハフマン法は主要な圧縮技術として
使用されている。典型的には、圧縮及び伸張システムは
予め定義された(即ち、統計的に)コードテーブルのセ
ットを用いてスタートする。おそらく、英語、フランス
語及びパスカルソースコードのためのこのようなテーブ
ルのセットがある。圧縮ユニット(送信機)は、使用さ
れるテーブルの短い記述を最初に移送又は格納する。伸
張ユニット(受信機)はこのコードを分析し、適切なテ
ーブルを選択する。圧縮の間に、もし現在のテーブルが
十分に機能しないことが決定されると、送信機は特別の
(「エスケープ」)ハフマンコードを移送する。このコ
ードは、他の特定の予め定義されたテーブルを選択する
か、又は伸張された先のデータに基づいて新たなテーブ
ルを計算するかどうかを受信機に伝える。送信機及び受
信機の両方は、同じアルゴリズムを用いてテーブルを計
算するので、テーブル全体を送る必要はないけれども計
算を行うのに幾らかの時間がかかる。ひとたび新たなテ
ーブルが計算されると、以前と同様に圧縮が行われる。
かなりのコンピュータのオーバーヘッドが存在するけれ
ども、この技術が更に動的ハフマンスキームに用いられ
得ないという理由は無いことに注意しなければならな
い。
【0018】ハフマン符号化に加えて、MacCriskenは第
2のストリングに基づく圧縮方法を用いている。送信機
及び受信機の両方が、最新の移送された入力バイトの履
歴バッファを保持する。それぞれの新たな入力バイト
(A)に対してバイグラムハフマンコードが生成される
が、ハッシングスキームを用いて履歴内の次の3つの入
力バイト(ABC)によって表現されるストリングを見
つける試みもまた行われる。ハッシュが3バイトストリ
ング上で行われ、ハッシュリスト内の古い入力の廃棄を
可能とするために、2重にリンクされたハッシュリスト
が維持される。もしストリングが見つかると、ストリン
グが続くことを示すために特別のハフマンエスケープコ
ードが生成され、履歴バッファ内のストリングの長さと
オフセットが送られる。オフセットは10ビットに符号
化され、長さは3−18バイトの長さを表現する4ビッ
トに符号化される。しかし、このようなストリングが送
られる前に、圧縮ユニットはストリング内の全てのバイ
トに対するハフマンコードを発生し、そのハフマンコー
ドの大きさをストリングビットの大きさと比較する。典
型的にはハフマンストリングエスケープコードは4ビッ
トであり、ストリングを表わすのに19ビットを要す
る。2つの量の小さい方が送られる。
【0019】
【発明が解決しようとする課題】ハフマン符号化は多く
のタイプのファイル上で非常によく機能する。しかし、
ビットストリングのバイトへの割当ては、多くの実際的
な困難を伴う。例えば、予め設定された符号化スキーム
が用いられる場合(例えば、英語に於ける文字の出現の
頻度に基づいて)、もしその予め設定されたスキーム
が、ファイル内の実際に存在するものとかなり異なる頻
度統計であると仮定すると、ハフマン符号化はファイル
を大きく拡張するかもしれない。これに加えて、ファイ
ルの内容に基づく符号化スキームの演算は、ハフマンア
ルゴリズムを頻度統計に適応するのと同様に、データ上
での2つのパスを必要とするのみならず(従って、シス
テムの効率を低下させる)、符号化テーブルがデータに
沿って格納されるということが必要とされ、これは圧縮
率の上での否定的な衝撃を有する。更に、バイトの相対
的頻度は、ファイル内で動的に容易に変えられ得る。そ
のため、どの点でも特定のコード割当てはうまく機能し
ない。
【0020】上述のハフマンタイプのアプローチは、コ
ンピュータによって強化される傾向にあり、例外的に高
い圧縮比率を達成するものではない。この観察に対する
一つの説明は、8ビットバイトに基づく純粋なハフマン
コードは最も良い場合には8:1の圧縮比率を達成し得
ること、そしてそれはファイルが同じバイトの繰り返し
(即ち、エントロピー=0)から成る最善の状況でのみ
達成され得ることである。同じ状況では、単純なランレ
ングス符号化スキームは50:1以上の圧縮率を達成し
得る。平均の性能は最善及び最悪の場合の数の同じ組合
せであろう。そして、最善の場合の限度は、その平均を
も制限する。理想的なハフマンコードはコード割当てを
最適化するために「断片的な」ビットを用いることを可
能にするが、しかし、各コード内のビットの総数の実際
的な制限は、ハフマンの符号化の性能を、その理論的な
限度よりもかなり低く制限する。
【0021】また、上述のZL圧縮法にも、幾つかの障
害が存在する。ZLストリング探索(ストリングサー
チ)は「どん欲な」アルゴリズムである。例えば、次の
ストリングを考える。
【0022】ABCDEFBCDEF ここで、A、B、C、D、E、Fは異なったバイトであ
る。ZLストリング探索は、AB、BC、CD、DE、
EF、BCD、DEFのストリングをストリングテーブ
ルに付け加え、このアルゴリズムを用いて出力され得る
長さ2又はそれ以上のストリングは、上で示した時点で
はBC及びDEのみであることに注意しなければならな
い。実際にはストリングBCDEFは既に入力に現れて
いる。従って、第2のBCDEFストリングは最初のB
CDEFに戻って参照されるのが理想であるが、実際に
はこれは行われない。
【0023】ZLアプローチにとって重大な欠点は、圧
縮されたデータを保持するためのストリングテーブル
が、長いファイルを満たしてしまう傾向にあることであ
る。しかし、テーブルの大きさは増大されることがで
き、このアプローチはストリングを表わすのにより多く
のビットを必要とし、従って、効率が低下するであろ
う。この欠点を扱うための一つのアプローチは、テーブ
ルがいっぱいになったときにそのテーブルの全部又は一
部を捨てることであろう。アルゴリズムの構造のため
に、最新に見いだされたストリングが最初に捨てられ
る。なぜなら、それらは先のストリングに戻って参照す
るからである。しかし、ローカルデータに動的に適合し
ているのは、最新のストリングであり、それらを捨てる
のもまた効率的ではない。基本的にはZLストリングは
無限の長さのメモリを有しているので、ファイル内のデ
ータのタイプの変更は、もしストリングテーブルがいっ
ぱいであれば、非常な符号化の効率の悪さを引き起こし
得る。
【0024】上述のMacCriskenストリング法は、古い入
力をハッシュリストから除いて廃棄することにより、Zi
v-Lempel法のストリングテーブルが決していっぱいにな
らないという問題点を避けていることに注意しなければ
ならない。従って、最新の(1キロバイト以内)のスト
リングのみがテーブルを占める。また、原理的には全て
のマッチングストリングが見いだされるので、それは
「どん欲」ではない。実際には、ストリング探索の長さ
の制限が課されている。これに加えて、MacCrisken法
は、2つの圧縮アルゴリズムを同時に実行するため、コ
ンピュータのオバーヘッドが非常に高くなるので、コン
ピュータで行うには非効率的である。
【0025】本発明は上記事情に鑑みてなされたもので
あり、その目的とするところは、磁気ディスク記憶装置
や磁気テープ記憶装置等のデジタル記憶装置の容量を増
大させる、圧縮/伸張システムを提供することにある。
本発明の目的はまた、予め初期化されたコード化テーブ
ルを必要とせず、バイトオリエンテッドなキャラクタス
トリーム(例えば、コンピュータファイルなど)に最適
化された、完全に適合性のある圧縮方法を用いることに
より、従来技術に見られる多くの困難を克服し、上述の
先行技術の何れよりも、より速い速度でより高い圧縮率
を達成することにある。
【0026】
【課題を解決するための手段】本発明のデータ圧縮装置
は、入力データストリームを格納する複数のエントリを
有する履歴アレイ手段と、該履歴アレイ手段内の該エン
トリの1つを示す履歴アレイポインタと、各々が該履歴
アレイ手段内の該エントリの1つを示すポインタを格納
する複数のエントリを有するハッシュテーブル手段と、
各々が該履歴アレイ手段内の該エントリの1つから該履
歴アレイ手段内の1個以上の他のエントリへのリンクが
存在する場合にそのリンクを供給する複数のエントリを
有するオフセットアレイ手段と、を備えており、そのこ
とにより上記目的が達成される。。
【0027】前記履歴アレイポインタを前記履歴アレイ
手段内の次のエントリにインクリメントする手段と、前
記入力データストリームの次のデータキャラクタをハッ
シングする手段と、を更に備えていてもよい。
【0028】前記ハッシュテーブルエントリの各々に格
納されている前記ポインタを周期的に調べて、該ハッシ
ュテーブルエントリにおける該ポインタが前記履歴アレ
イポインタよりも所定量だけ異なっているかどうかを決
定する手段を更に備えていてもよい。
【0029】前記決定する手段は、前記ハッシュテーブ
ル内の前記エントリを無効値と置き換えて、該エントリ
を再初期化する手段を更に備えていてもよい。
【0030】前記ハッシュテーブルの全エントリを無効
値と置き換えることによって該ハッシュテーブルを初期
化する手段を更に備えていてもよい。
【0031】本発明のデータ圧縮方法は、入力データキ
ャラクタストリームを可変長符号化データストリームに
変換する方法であり、予め処理された入力データキャラ
クタを参照用の格納手段に格納するステップと、該デー
タ格納手段内で該入力データストリームに適合(マッチ
ング)する該予め処理された入力データキャラクタの最
長データストリングのサーチを実行するステップと、を
包含している。該格納手段内でマッチングデータストリ
ングが見つかった場合には、該マッチングデータストリ
ングが見つかったことを示す標識と、該マッチングデー
タストリングの長さの可変長指示子と、該マッチングデ
ータストリングの該格納手段内での位置を示すポインタ
と、を割り当てることによって該マッチングデータスト
リングを符号化するステップを包含しており、このマッ
チングデータストリングを符号化するステップは、該入
力データストリームの2個のキャラクタのマッチングス
トリングを、2個より少ない該入力データストリームの
キャラクタに確実に圧縮する符号化体系によって該ポイ
ンタと該可変長指示子を表すステップを包含している。
該格納手段内でマッチング入力データストリングが見つ
からなかった場合には、該格納手段内でマッチングデー
タストリングが見つからなかったことを示す「生」デー
タ標識と、該入力データストリームの最初のキャラクタ
とを割り当てることによって該入力データストリームの
該最初のキャラクタを符号化するステップを包含してい
る。これらのことにより上記目的が達成される。
【0032】前記格納手段内で前記最長マッチングデー
タストリングのサーチを実行する前記ステップは、該格
納手段内における該最長マッチングデータストリングに
対する所定回数の照会に該サーチを制限するステップを
さらに包含していてもよい。更に、符号化された前記入
力データストリームの入力データキャラクタを放棄する
ステップと、該入力データストリームを更に符号化する
ために、前記方法の1つ以上のステップを実行するステ
ップと、を包含していてもよい。
【0033】前記ポインタおよび前記可変長指示子を付
加する前記ステップは、前記マッチングデータストリン
グの前記格納手段内での位置に従って長い形式または短
い形式のいずれかによって該ポインタを表すステップを
更に包含してもよい。
【0034】2個のキャラクタマッチングデータストリ
ングの前記可変長指示子を二進ワード「00」として定義
するステップを更に包含してもよい。
【0035】前記ポインタが前記長い形式または短い形
式のいずれであるかを示す1桁二進ワードを提供するス
テップを更に包含してもよい。
【0036】前記ポインタが前記格納手段内での127個
の異なる位置を示すように、前記短い形式を7桁二進ワ
ードとして符号化するステップを更に包含してもよい。
【0037】前記ポインタが前記格納手段内での2047個
の異なる位置を示すように、前記長い形式のポインタを
11桁二進ワードとして符号化するステップを更に包含
してもよい。
【0038】前記符号化体系によって前記可変長指示子
を表す前記ステップは、前記マッチングデータストリン
グが2個、3個、および4個のキャラクタ長である場合
の該マッチングデータストリングの長さを定義する第1
のワード群を定義するステップと、該マッチングデータ
ストリングが5個、6個、および7個のキャラクタ長で
ある場合の該マッチングデータストリングの長さを定義
する該第1のワード群および第2のワード群を定義する
ステップと、該マッチングデータストリングが8個から
22個のキャラクタ長である場合の該マッチングデータ
ストリングの長さを定義する該第1のワード群、該第2
のワード群、および第3のワード群を定義するステップ
と、該マッチングデータストリングが23個から37個
のキャラクタ長である該マッチングデータストリングの
長さを定義する該第1のワード群、該第2のワード群、
該第3のワード群、および第4のワード群を定義するス
テップと、を更に包含してもよい。
【0039】前記最長マッチングデータストリングのサ
ーチを前記格納手段内で実行する前記ステップは、ハッ
シュ関数を実行するステップを更に包含してもよい。
【0040】前記入力データストリームの前記可変長符
号化データストリームへの変換が行われるデータ圧縮シ
ステムは、該入力データストリームを格納する複数のエ
ントリを有する前記格納手段と、該格納手段内の最新エ
ントリを示す格納手段ポインタと、各々が該格納手段の
該エントリの1つを示すポインタを格納する複数のエン
トリを有するハッシュテーブル手段と、各々が該格納手
段内の該エントリの1個から該格納手段内の1個以上の
エントリまでのリンクを供給する複数のエントリを有す
るオフセットアレイ手段と、を有している。該格納手段
内での前記サーチを実行するステップは、更に、該ハッ
シュ関数が該ハッシュテーブル手段の該エントリの1つ
にポインタを提供するステップと、該ハッシュ関数の結
果によって示される該ハッシュテーブルエントリにおい
て格納されている該ポインタを得るステップと、該格納
手段ポインタと、該ハッシュテーブル手段から読み出さ
れた該ポインタとの差を計算するステップと、該格納手
段ポインタによって示された該オフセットアレイ手段に
該差を格納するステップと、該ハッシュ関数によって示
された該ハッシュテーブルエントリに該格納手段ポイン
タを格納するステップと、を包含してもよい。
【0041】前記格納手段ポインタを前記格納手段内の
次のエントリにインクリメントするステップと、該格納
手段の該次のエントリをハッシングするために、前記方
法の1つ以上の要素を実行するステップと、を包含して
もよい。
【0042】前記格納手段内のサーチを実行する前記ス
テップは、前記ハッシュテーブルエントリの各々におい
て格納された前記ポインタを周期的に調べて、該エント
リの各々の該ポインタと、前記格納手段ポインタとの前
記差が所定量よりも大きいかどうかを決定するステップ
をさらに包含してもよい。この決定するステップは、前
記差が前記所定量よりも大きい場合には、前記ハッシュ
テーブル内の前記エントリを無効値と置き換えて、該エ
ントリを再初期化するステップを更に包含してもよい。
【0043】前記可変長符号化データストリームの伸長
の間に検出された圧縮化データマーカーの終わりを該符
号化データに付加することによって、符号化する前記方
法を完了するステップを更に包含してもよい。
【0044】前記ハッシュテーブルのすべてのエントリ
を無効値と置き換えることによって前記ハッシュテーブ
ルを初期化するステップを更に包含してもよい。
【0045】前記可変長符号化データストリームを復号
化するステップを更に包含してもよく、該復号化するス
テップは、該可変長符号化データストリームを、各々が
前記標識の1個で始まっている独立した部分に分解する
ステップと、該標識が生データ標識であるのかまたは該
符号化マッチングデータストリングを示す前記標識であ
るのかを決定するために、該独立した部分の各々の該標
識を評価するステップと、包含している。
【0046】前記標識が前記符号化マッチングデータス
トリングを示す場合に、前記マッチングデータストリン
グを発生させるために、前記可変長指示子と前記ポイン
タとを解釈し、それによって元の入力データストリーム
の部分を再構築するステップを更に包含してもよい。
【0047】前記標識が前記生データ標識を示す場合
に、前記符号化入力データストリームの前記最初のキャ
ラクタを得て、それによって元の入力データストリーム
の部分を再構築するステップを更に包含してもよい。
【0048】本発明によるデータ伸張方法は、出力デー
タキャラクタストリームを格納する複数のエントリを有
する格納手段と、該格納手段内の最新のエントリを示す
格納手段ポインタとを有するデータ伸長システムにおい
て、可変長符号化入力データストリームを出力データキ
ャラクタストリームに変換する方法である。該方法は、
該可変長符号化入力データストリームを、各々が標識で
開始する独立した部分に分解するステップと、該標識が
生データの標識であるのか、または符号化マッチングデ
ータストリングを示す標識であるのかを決定するため
に、該独立した部分の各々の該標識を評価するステップ
と、を有している。該標識が生データの標識である場合
には、該独立した部分から生データバイトを分解するス
テップと、該生データバイトを出力するステップと、該
生データバイトを該格納手段に配置するステップと、を
包含する。該標識が符号化マッチングデータストリング
を示す該標識である場合には、該マッチングデータスト
リングの長さの可変長指示子と、該マッチングデータス
トリングの該格納手段内での位置を示すオフセットとを
分解し、該独立した部分が2個のキャラクタのマッチン
グデータストリングを示す場合には、該独立した部分は
該出力データキャラクタストリームの2個のキャラクタ
より小さくなるステップと、該格納手段内の該位置に該
マッチングデータストリングを該長さで出力するステッ
プと、該マッチングデータストリングを該格納手段内に
配置するステップと、を包含しており、そのことにより
上記目的が達成される。。
【0049】本発明のデータ圧縮方法は、複数のエント
リを有する履歴アレイ手段と、履歴アレイポインタと、
複数のエントリを有するハッシュテーブル手段と、複数
のエントリを有するオフセットアレイ手段と、を備えて
いるデータ圧縮システムにおいて、データを圧縮する方
法である。該方法は、該履歴アレイ手段の該エントリ内
の入力データストリームを格納するステップと、該履歴
アレイ手段内の該エントリの1つを該履歴アレイポイン
タによって示すステップと、該ハッシュテーブル手段の
各エントリ内に、該履歴アレイ手段の該エントリの1つ
を示すポインタを格納するステップと、該履歴アレイ手
段内の該エントリの1つから該履歴アレイ手段内の1個
以上の他のエントリへのリンクを該オフセットアレイ手
段の該エントリによって供給するステップと、を包含し
ており、そのことにより上記目的が達成される。。
【0050】前記履歴アレイポインタを、前記履歴アレ
イ手段内の次のエントリにインクリメントするステップ
と、前記入力データストリームの次のデータキャラクタ
をハッシングするステップと、を包含してもよい。
【0051】前記ハッシュテーブルエントリの各々に格
納されている前記ポインタを周期的に調べて、該ハッシ
ュテーブルエントリにおける該ポインタが前記履歴アレ
イポインタよりも所定量だけ異なっているかどうかを決
定するステップを更に包含してもよい。
【0052】前記ハッシュテーブル内の前記エントリを
無効値と置き換えて、該エントリを再初期化するステッ
プを更に包含してもよい。
【0053】前記ハッシュテーブルの全エントリを無効
値と置き換えることによって該ハッシュテーブルを初期
化するステップを更に包含してもよい。
【0054】本発明の装置は、入力データキャラクタス
トリームを可変長符号化データストリームに変換する装
置であって、予め処理された入力データキャラクタを参
照用に格納する格納手段と、該入力データストリームに
適合(マッチング)する該予め処理された入力データキ
ャラクタの最長データストリングのサーチを該格納手段
内で実行する手段と、該マッチングデータストリングが
見つかったことを示す標識と、該マッチングデータスト
リングの長さの可変長指示子と、該マッチングデータス
トリングの該格納手段内での位置を示すポインタと、を
割り当てることによって該マッチングデータストリング
を符号化する手段と、該入力データストリームの2個の
キャラクタのマッチングストリングを、2個より少ない
該入力データストリームのキャラクタに確実に圧縮する
所定の手法に従う符号化体系によって該ポインタと該可
変長指示子を表す手段と、該格納手段内でマッチングデ
ータストリングが見つからなかったことを示す「生」デ
ータ標識と、該入力データストリームの最初のキャラク
タとを割り当てることによって該入力データストリーム
の該最初のキャラクタを符号化する手段と、を備えてい
る。
【0055】前記格納手段内における前記最長マッチン
グデータストリングに対する所定回数の照会に前記サー
チを制限する手段をさらに備えていてもよい。
【0056】符号化された前記入力データストリームの
入力データキャラクタを放棄する手段を更に備えていて
もよい。
【0057】前記マッチングデータストリングの前記格
納手段内での位置に従って長い形式または短い形式のい
ずれかによって前記ポインタを表す手段を更に備えてい
てもよい。
【0058】2個のキャラクタマッチングデータストリ
ングの前記可変長指示子を二進ワード「00」として定義
する手段を更に備えていてもよい。
【0059】前記ポインタが前記長い形式または短い形
式のいずれであるかを示す1桁二進ワードを提供する手
段を更に備えていてもよい。
【0060】前記ポインタが前記格納手段内での127個
の異なる位置を示すように、前記短い形式を7桁二進ワ
ードとして符号化する手段を更に備えていてもよい。
【0061】前記ポインタが前記格納手段内での2047個
の異なる位置を示すように、前記長い形式のポインタを
11桁二進ワードとして符号化する手段を更に備えてい
てもよい。
【0062】前記マッチングデータストリングが2個、
3個、および4個のキャラクタ長である場合の該マッチ
ングデータストリングの長さを定義する第1のワード群
を定義する手段と、該マッチングデータストリングが5
個、6個、および7個のキャラクタ長である場合の該マ
ッチングデータストリングの長さを定義する該第1のワ
ード群および第2のワード群を定義する手段と、該マッ
チングデータストリングが8個から22個のキャラクタ
長である場合の該マッチングデータストリングの長さを
定義する該第1のワード群、該第2のワード群、および
第3のワード群を定義する手段と、該マッチングデータ
ストリングが23個から37個のキャラクタ長である該
マッチングデータストリングの長さを定義する該第1の
ワード群、該第2のワード群、該第3のワード群、およ
び第4のワード群を定義する手段と、をさらに備えてい
てもよい。
【0063】ハッシュ関数を実行する手段を更に備えて
いてもよい。
【0064】前記格納手段は前記入力データストリーム
を格納する複数のエントリを有し、該格納手段内の最新
エントリを示す格納手段ポインタと、各々が該格納手段
の該エントリの1つを示すポインタを格納する複数のエ
ントリを有するハッシュテーブル手段と、各々が格納手
段内の該エントリの1個から該格納手段内の1個以上の
エントリまでのリンクを供給する複数のエントリを有す
るオフセットアレイ手段と、該ハッシュテーブル手段の
該エントリの1つにポインタを供給するハッシュ関数を
実行する手段と、該ハッシュ関数の結果によって示され
る該ハッシュテーブルエントリにおいて格納されている
該ポインタを得る手段と、該格納手段ポインタと、該ハ
ッシュテーブル手段から読み出された該ポインタとの差
を計算する手段と、該格納手段ポインタによって示され
た該オフセットアレイ手段に該差を格納する手段と、該
ハッシュ関数によって示された該ハッシュテーブルエン
トリに該格納手段ポインタを格納する手段と、を備えて
いてもよい。
【0065】前記格納手段ポインタを前記格納手段内の
次のエントリにインクリメントする手段を更に備えてい
てもよい。
【0066】前記ハッシュテーブルエントリの各々にお
いて格納された前記ポインタを周期的に調べて、該エン
トリの各々の該ポインタと、前記格納手段ポインタとの
前記差が所定量よりも大きいかどうかを決定する手段を
更に備えていてもよい。
【0067】前記ハッシュテーブル内の前記エントリを
無効値と置き換えて、該エントリを再初期化する手段を
更に備えていてもよい。
【0068】前記可変長符号化データストリームの伸長
の間に検出された圧縮化データマーカーの終わりを該符
号化データに付加する手段を更に備えていてもよい。
【0069】前記ハッシュテーブルのすべてのエントリ
を無効値と置き換えることによって該ハッシュテーブル
を初期化する手段を更に備えていてもよい。
【0070】前記可変長符号化データストリームを復号
化する手段と、該可変長符号化データストリームを、各
々が前記標識の1個で始まっている独立した部分に分解
する手段と、該標識が生データ標識であるのかまたは該
符号化マッチングデータストリングを示す前記標識であ
るのかを決定するために、該別々の部分の各々の該標識
を評価する手段と、を備えていてもよい。
【0071】前記マッチングデータストリングを発生さ
せるために、前記可変長指示子と前記ポインタとを解釈
し、これによって元の入力データストリームの部分を再
構築する手段を更に備えていてもよい。
【0072】前記符号化入力データストリームの前記最
初のキャラクタを得て、これによって元の入力データス
トリームの部分を再構築する手段を更に備えていてもよ
い。本発明によるデータ伸長装置は、データ伸張システ
ムにおいて、可変長符号化入力データストリームを出力
データキャラクタストリームに変換する。この装置は、
該出力データキャラクタストリームを格納する前記複数
のエントリを有する格納手段と、該格納手段内の最新の
エントリを示す格納手段ポインタと、該可変長符号化入
力データストリームを、各々が標識で開始する独立した
部分に分解する手段と、該標識が生データの標識である
のか、または符号化マッチングデータストリングを示す
標識であるのかを決定するために、該独立した部分の各
々の該標識を評価する手段と、該独立した部分から生デ
ータバイトを分解する手段と、該生データバイトを出力
する手段と、該生データバイトを該格納手段に配置する
手段と、該マッチングデータストリングの長さの可変長
指示子と、該マッチングデータストリングの該格納手段
内での位置を示すオフセットとを分解し、該独立した部
分が2個のキャラクタのマッチングデータストリングを
示す場合に、該独立した部分は該出力データキャラクタ
ストリームの2個のキャラクタより小さくする手段と、
該格納手段内の該位置に該マッチングデータストリング
を該長さで出力する手段と、該マッチングデータストリ
ングを該格納手段内に配置する手段と、を備えており、
このことにより上記目的が達成される。。
【0073】本発明による入力データストリームを可変
長符号化データストリームに変換する装置は、該入力デ
ータストリームに適合(マッチング)する最長データス
トリームのサーチを履歴アレイ内で実行する手段と、該
履歴アレイ手段内に見いだされる該マッチングデータス
トリームを符号化する符号化手段と、該データ圧縮シス
テムと分離して備えられたRAMを備えている。該履歴
アレイは、各々が該入力データストリームを格納する複
数のエントリを有しており、該RAMは、該履歴アレイ
を備え、該データ圧縮システムへのまたは該データ圧縮
システムからのデータ転送をバッファするFIFOデー
タバッファを有している。これらのことにより上記目的
が達成される。。
【0074】本発明による入力データストリームを可変
長符号化データストリームに変換するデータ圧縮システ
ムを有する装置は、該入力データストリームを該可変長
符号化データストリームに変換する間に該データ圧縮シ
ステムによって参照される該入力データストリームを格
納するRAMを備えており、該RAMは、該圧縮システ
ムへのおよび該圧縮システムからの該入力データストリ
ームの転送をバッファするFIFOデータバッファを有
しており、このことにより上記目的が達成される。。
【0075】本発明の入力データキャラクタを複数のデ
ータキャラクタを含むデータストリームと比較する方法
は、該データストリームの該データキャラクタを、各々
が該データストリームの該データキャラクタの1つを格
納する複数のエントリを有するシフト手段に格納するス
テップと、該入力データキャラクタを該シフト手段の各
エントリに同時伝送するステップと、該シフト手段の各
エントリの該格納されたデータキャラクタの各々を該シ
フト手段の別のエントリに転送するステップと、該シフ
ト手段の各エントリに対して、該格納されたデータキャ
ラクタが該入力されたデータキャラクタにマッチングす
るかどうかを決定するために、該エントリの該格納され
たデータキャラクタを該入力データキャラクタと比較す
るステップと、該シフト手段の各エントリに対して、該
比較の結果を個別に蓄積するステップとを包含してお
り、そのことにより上記目的が達成される。。
【0076】前記シフト手段の各エントリに対して該結
果の蓄積を格納するステップをさらに包含してもよい。
【0077】前記格納されている前記比較の結果を、後
の入力データキャラクタに対する比較の結果と比較する
ステップをさらに包含してもよい。
【0078】1つ以上の前記入力データキャラクタのス
トリングを可変長符号化データストリームに変換するス
テップをさらに包含してもよい。該変換するステップ
は、マッチング入力データキャラクタが前記シフト手段
内に見つかった場合には、該マッチング入力データキャ
ラクタが見つかったことを示す標識と、該マッチング入
力データキャラクタの長さの可変長指示子および該マッ
チング入力データキャラクタの少なくとも1つのキャラ
クタを有する該シフト手段の該エントリを示すポインタ
を含む置換コードとを割り当てることによって、該マッ
チング入力データキャラクタを符号化する。該変換する
ステップは、マッチング入力データキャラクタが該シフ
ト手段内に見つからなかった場合には、「生の」データ
標識と該入力データキャラクタの最初のキャラクタとを
割り当てることによって、該入力データキャラクタの該
最初のキャラクタを符号化する。これにより、該データ
ストリームは該可変長符号化データストリームに変換さ
れる。
【0079】前記比較の結果の蓄積のどちらが前記マッ
チング入力データキャラクタの最長ストリングに対応す
るかを決定するために、該蓄積を評価するステップをさ
らに包含してもよい。
【0080】前記シフト手段の前記比較を所定量の入力
データキャラクタに制限するステップをさらに包含して
もよい。
【0081】前記比較の結果の蓄積のどちらが前記マッ
チング入力データキャラクタの最長ストリングに対応す
るかを決定するために、該蓄積を評価するステップ、お
よび、等しい長さの該最長ストリングが1つより多くあ
るとき、該最長ストリングに優先順位をつけるステップ
をさらに包含してもよい。
【0082】前記優先順位をつけるステップが、前記最
長ストリングのうち最も早いものを選択するステップを
さらに包含してもよい。
【0083】前記可変長符号化データストリームを復号
化するステップをさらに包含てもよい。該復号化するス
テップは、該符号化データストリームを、各々が前記標
識の1個で始まっているいくつかの独立した部分に分解
するステップと、該独立した部分の該標識が前記生のデ
ータ標識を示すのか、または該標識が前記符号化された
マッチング入力データキャラクタを示すのかを決定する
ために、該標識を評価するステップとを包含する。
【0084】前記標識が前記符号化されたマッチング入
力データキャラクタを示す場合に、該マッチング入力デ
ータキャラクタを生成するための前記置換コードの前記
長さ指示子と前記ポインタとを解釈するステップと、こ
れにより、前記オリジナルのデータストリームの一部を
再構築するステップとをさらに包含してもよい。
【0085】前記標識が前記生のデータ標識を示す場合
に、前記符号化データストリームの前記最初のキャラク
タを得て、これにより、前記オリジナルのデータストリ
ームの一部を再構築するステップをさらに包含してもよ
い。
【0086】本発明の方法は、データ伸張システムにお
いて可変長符号化データストリームを出力データキャラ
クタストリームに変換する方法である。該データ伸張シ
ステムは、複数のエントリを有するシフト手段を備えて
おり、該エントリの各々は該出力データキャラクタスト
リームのデータキャラクタを格納する。該方法は、該可
変長符号化入力データストリームを、各々が標識を先頭
とするいくつかの独立した部分に分解するステップと、
該独立した部分の各々の該標識が生のデータ標識である
か、または符号化されたマッチングデータストリングを
示す標識であるかを決定するために、該標識を評価する
ステップとを包含している。該標識が生のデータ標識で
ある場合には、該独立した部分から生のデータバイトを
分解するステップ、該生のデータバイトを出力するステ
ップ、および該生のデータバイトを該シフト手段内に配
置するステップを包含し、該標識が符号化されたマッチ
ングデータストリングを示す標識である場合には、該マ
ッチングデータストリングの長さの可変長指示子と、該
マッチングデータストリングの最初のキャラクタを含む
該シフト手段内のエントリを示すオフセットとを分解す
るステップ、該長さのための該シフト手段内の該エント
リでの該マッチングデータストリングを出力するステッ
プ、および該マッチングデータストリングを該シフト手
段内に配置するステップを包含する。これらのことによ
り、上記目的が達成される。。
【0087】本発明の装置は、データ圧縮システムにお
いて可変長符号化データストリームを出力データキャラ
クタストリームに変換する装置である。該データ伸張シ
ステムはシフト手段を備え、該シフト手段は複数のエン
トリを有し、該シフト手段の各エントリは該出力データ
キャラクタストリームのデータキャラクタを格納する。
該装置は、該可変長符号化入力データストリームを、各
々が標識を先頭とするいくつかの独立した部分に分解す
る手段と、該独立した部分の各々の該標識が生のデータ
標識であるか、または符号化されたマッチングデータス
トリングを示す標識であるかを決定するために、該標識
を評価する手段と、該独立した部分から生のデータバイ
トを分解する手段、該生のデータバイトを出力する手
段、および該生のデータバイトを該シフト手段内に配置
する手段と、該マッチングデータストリングの長さの可
変長指示子と、該マッチングデータストリングの最初の
キャラクタを含む該シフト手段内のエントリを示すオフ
セットとを分解する手段、該長さのための該シフト手段
内の該エントリでの該マッチングデータストリングを出
力する手段、および該マッチングデータストリングを該
シフト手段内に配置する手段とを備えており、そのこと
により上記目的が達成される。。
【0088】本発明による入力データキャラクタを複数
のデータキャラクタを含むデータストリームと比較する
装置は、該データストリームの該データキャラクタを格
納する手段であって、該格納手段は複数のエントリを有
し、該格納手段の各エントリは該データストリームの該
データキャラクタの1つを格納する手段と、該入力デー
タキャラクタを該格納手段の各エントリに同時伝送する
手段と、該格納手段の各エントリに対して、該格納され
たデータキャラクタが該入力されたデータキャラクタに
適合(マッチング)するかどうかを決定するために、該
エントリの該格納されたデータキャラクタを該入力デー
タキャラクタと比較する手段と、該格納手段の各エント
リに対して、該比較の結果を個別に蓄積する手段と、を
備えており、そのことにより上記目的が達成される。。
【0089】前記格納手段の各エントリに対して該結果
の蓄積を格納する手段をさらに備えていてもよい。
【0090】前記比較の前記格納された結果を、後の入
力データキャラクタに対する比較の結果と比較する手段
をさらに備えていてもよい。
【0091】1つ以上の前記入力データキャラクタより
なるストリングを可変長符号化データストリームに変換
する手段をさらに備えていてもよく、該手段は、マッチ
ング入力データキャラクタが見つかったことを示す標識
と、該マッチング入力データキャラクタの長さの可変長
指示子および該マッチング入力データキャラクタの少な
くとも1つのキャラクタを有する該格納手段の該エント
リを示すポインタを含む置換コードとを割り当てること
によって、該マッチング入力データキャラクタを符号化
する手段と、「生の」データ標識と該入力データキャラ
クタの最初のキャラクタとを割り当てることによって、
該入力データキャラクタの該最初のキャラクタを符号化
する手段と、を備えている。
【0092】前記比較の結果の蓄積のどちらが前記マッ
チング入力データキャラクタの最長ストリングに対応す
るかを決定するために、該蓄積を評価する手段をさらに
備えていてもよい。
【0093】前記格納手段の前記比較を所定数の入力デ
ータキャラクタに限定する手段をさらに備えていてもよ
い。
【0094】前記比較の結果の蓄積のどちらが前記マッ
チング入力データキャラクタの最長ストリングに対応す
るかを決定するために、該蓄積を評価する手段、およ
び、等しい長さの該最長ストリングが1つより多くある
とき、該最長ストリングに優先順位をつける手段をさら
に備えていてもよい。
【0095】前記優先順位をつける手段が、前記最長ス
トリングのうち最も早いものを選択する手段をさらに備
えいてもよい。
【0096】前記可変長符号化データストリームを復号
化する手段をさらに包含してもよく、該復号化手段は、
該符号化データストリームを、各々が前記標識の1つを
先頭とするいくつかの独立した部分に分解する手段と、
該独立した部分の該標識が前記生のデータ標識を示すの
か、または該標識が前記符号化されたマッチング入力デ
ータキャラクタを示すのかを決定するために、該標識を
評価する手段と、を備えている。
【0097】前記マッチング入力データキャラクタを生
成するための前記置換コードの前記長さ指示子と前記ポ
インタとを解釈する手段をさらに備えていてもよい。
【0098】前記符号化データストリームの前記最初の
キャラクタを得る手段をさらに備えていてもよい。
【0099】本発明の入力データキャラクタを複数のデ
ータキャラクタを含むデータストリームと比較する方法
は、該データストリームの該データキャラクタを、各々
が該データストリームの該データキャラクタの1つを格
納する複数のエントリを有する該格納手段に格納するス
テップと、該入力データキャラクタを該格納手段の各エ
ントリに同時伝送するステップと、該格納手段の各エン
トリに対して、該格納されたデータキャラクタが該入力
されたデータキャラクタに適合(マッチング)するかど
うかを決定するために、該エントリの該格納されたデー
タキャラクタを該入力データキャラクタと比較するステ
ップと、該格納手段の各エントリに対して該比較の結果
を個別に蓄積するステップと、を包含しており、そのこ
とにより上記目的が達成される。。
【0100】前記格納手段の各エントリに対して該結果
の蓄積を格納するステップをさらに包含してもよい。
【0101】前記比較の前記格納された結果を、後の入
力データキャラクタに対する比較の結果と比較するステ
ップをさらに包含してもよい。
【0102】1つ以上の前記入力データキャラクタより
なるストリングを可変長符号化データストリームに変換
するステップをさらに包含してもよい。該変換するステ
ップは、マッチング入力データキャラクタが前記格納手
段内に見つかった場合には、該マッチング入力データキ
ャラクタが見つかったことを示す標識と、該マッチング
入力データキャラクタの長さの可変長指示子および該マ
ッチング入力データキャラクタの少なくとも1つのキャ
ラクタを有する該格納手段の該エントリを示すポインタ
を含む置換コードとを割り当てることによって、該マッ
チング入力データキャラクタを符号化するステップと、
を包含する。該変換するステップは、マッチング入力デ
ータキャラクタが該格納手段内に見つからなかった場合
には、「生の」データ標識と該入力データキャラクタの
最初のキャラクタとを割り当てることによって、該入力
データキャラクタの該最初のキャラクタを符号化するス
テップを包含する。これにより、該データストリームは
該可変長符号化データストリームに変換される。
【0103】前記比較の結果の蓄積のどちらが前記マッ
チング入力データキャラクタの最長ストリングに対応す
るかを決定するために、該蓄積を評価するステップをさ
らに包含してもよい。
【0104】前記シフト手段の前記比較を所定数の入力
データキャラクタに限定するステップをさらに包含して
もよい。
【0105】前記比較の結果の蓄積のどちらが前記マッ
チング入力データキャラクタの最長ストリングに対応す
るかを決定するために、該蓄積を評価するステップ、お
よび、等しい長さの該最長ストリングが1つより多くあ
るとき、該最長ストリングに優先順位をつけるステップ
をさらに包含してもよい。
【0106】前記優先順位をつけるステップは、前記最
長ストリングのうち最も早いものを選択するステップを
さらに包含してもよい。
【0107】前記可変長符号化データストリームを復号
化するステップをさらに包含してもよい。該復号化ステ
ップは、該符号化データストリームを、各々が前記標識
の1つを先頭とするいくつかの独立した部分に分解する
ステップと、該独立した部分の該標識が前記生のデータ
標識を示すのか、または該標識が前記符号化されたマッ
チング入力データキャラクタを示すのかを決定するため
に、該標識を評価するステップと、を包含する。
【0108】前記標識が前記符号化されたマッチング入
力データキャラクタを示す場合に、該マッチング入力デ
ータキャラクタを生成するための前記置換コードの前記
長さ指示子と前記ポインタとを解釈するステップと、こ
れにより、前記オリジナルのデータストリームの一部を
再構築するステップと、をさらに包含してもよい。
【0109】前記標識が前記生のデータ標識を示す場合
に、前記符号化データストリームの前記最初のキャラク
タを得て、これにより、前記オリジナルのデータストリ
ームの一部を再構築するステップをさらに包含してもよ
い。
【0110】
【0111】
【作用】本発明は、磁気ディスク記憶装置や磁気テープ
記憶装置等のデジタル記憶装置の容量を増大させる、圧
縮/伸張システムである。圧縮方法は完全に適合性があ
り、予め初期化されたコード化テーブルを必要とせず、
バイトオリエンテッドなキャラクタストリーム(例え
ば、コンピュータファイルなど)に最適化される。本発
明のデータ圧縮装置においては、圧縮の間に、先に処理
されたバイトの履歴バッファ又はシフトレジスタアレイ
が、圧縮装置内に保持される。圧縮はバイトの繰り返し
のストリングをシフトレジスタに置くことにより達成さ
れる。もし現在検査されているバイトを含むマッチング
ストリングが見つからなければ、そのバイトは、そのバ
イトが「生の」(即ち、ストリングではない)ことを示
す特別の標識ビット(タグビット)の後で出力データス
トリームに付加される。もしこのようなストリングが見
つかると、その長さとシフトレジスタ内の相対的位置が
符号化され、(圧縮)データストリームの出力に付加さ
れる。ストリングの長さ及び位置は、たとえ2バイトの
繰り返しのストリングでも、1:1より良い圧縮比率を
生じるように符号化される。言い換えれば、単一の「生
の」バイトに於てのみ、データの「拡張」を生じる。
【0112】ストリングの長さの符号化は、可変長であ
り、ストリングの位置もまた可変長のフィールドとして
符号化される。従って、本発明は可変長のストリングを
可変長の出力コードにマップする。
【0113】本発明の履歴アレイの具体例に於ては、効
率的なストリング探索を行うために、ハッシュテーブル
が履歴バッファと組み合わせて使用され、ハッシュ「リ
フレッシュ」法が、ハッシュデータ構造の維持に必要と
されるコンピュータのオーバーヘッドを最小にするため
に使用される。これらの技術は、現在利用できる集積回
路技術を用いた数メガバイト/秒にものぼる入力速度で
も、入力データの高速圧縮を可能にする。
【0114】
【実施例】以下は本発明の二つの例のより詳細な記述で
あり、入力データキャラクタストリングを、可変長に符
号化されたデータストリングに変換するための方法及び
装置を含んでいる。データ圧縮システムはシフトレジス
タ手段又は履歴アレイ手段を有している。シフトレジス
タ手段又は履歴アレイ手段を組み込んだ方法は、以下の
ステップを有している。
【0115】第1のステップは、履歴アレイ手段又はシ
フトレジスタ内で、入力データストリームにマッチした
(マッチングした)最長のデータストリングを探索(サ
ーチ)することを含んでいる。もしこのようなマッチン
グデータストリングが履歴アレイ手段又はシフトレジス
タ手段内に見つかれば、第2のステップは、履歴アレイ
手段又はシフトレジスタ手段内で見つかったマッチング
データストリングを符号化することを含む。
【0116】これはマッチングデータストリングが見つ
かったことを示す標識とストリング置換コードとを、可
変長に符号化されたデータストリームに付加することに
より行われる。ストリング置換コードは、マッチングデ
ータストリングの長さの可変長指示子と、マッチングデ
ータストリングの履歴アレイ手段内の位置を指すポイン
タとを含んでいる。
【0117】もしマッチング入力データストリングが履
歴アレイ手段又はシフトレジスタ手段内に見つからなけ
れば、第2のステップは入力データストリームの最初の
キャラクタを符号化するステップを含み、これはマッチ
ングデータストリングが見つからなかったこと、及び入
力データストリームの最初のキャラクタが可変長に符号
化されたデータストリームに付加されていることを示す
「生の」データ標識を、可変長に符号化されたデータス
トリームに付加することにより行われる。このように、
入力データストリームは可変長に符号化されたデータス
トリームに変換される。
【0118】履歴アレイ手段又はシフトレジスタ手段内
で最長のマッチングデータストリングを探索するステッ
プは、更に、履歴アレイ手段への最長のマッチングデー
タストリングに対する予め決められた数の照会に探索を
制限するステップを含み、又はシフトレジスタ手段の場
合には、前記入力データストリームの入力データキャラ
クタの予め決められた量に、探索を制限するステップを
含む。
【0119】シフトレジスタを使用する具体例は非常に
反復的なので、VLSIの装置に非常に向いている。シ
フトレジスタアレイの比較の殆ど毎回の操作が、最大の
クロック速度にパイプライン化され得、従って、効率が
最大となる。例えば、優先順位符号化は、望まれる性能
を達成するのに必要な高次元までパイプライン化され得
る。パイプライン化のこの能力は重要である。なぜな
ら、装置アレイに要求される大きなトランジスタ数は、
そのアレイが数個の集積回路にわたらざるを得ないから
である。
【0120】ハッシュ関数を実行するために、履歴アレ
イ手段を用いるデータ圧縮システムは、履歴アレイポイ
ンタ、ハッシュテーブル手段、及びオフセットアレイ手
段を含む、あるハッシュデータ構造を含んでいる。履歴
アレイポインタは履歴アレイ手段の最後のエントリを示
している。ハッシュテーブル手段は複数のエントリを有
し、ハッシュテーブルの各エントリは、履歴アレイ手段
を指すポインタを格納する。オフセットアレイ手段は複
数のエントリを有し、各エントリは履歴アレイ手段のエ
ントリの一つへのリンクを供給する。ハッシュ関数を果
たすためのステップは、次のステップを含んでいる。
【0121】最初に、ハッシュテーブル手段のエントリ
の一つを指すポインタを供給するハッシュ関数の結果を
得ること。次に、ハッシュ関数の結果によって指示され
ているハッシュテーブルのエントリに格納されたポイン
タを得ること。次に、履歴アレイポインタとハッシュテ
ーブル手段から読み取られたポインタとの間の差を計算
し、その差を履歴アレイポインタによって指示されてい
るオフセットアレイのエントリに格納すること。最後
に、履歴アレイポインタをハッシュ関数によって指示さ
れているハッシュテーブルのエントリに格納すること。
【0122】履歴アレイ手段を用いた履歴アレイの具体例 また、履歴アレイ手段を用いた本発明の履歴アレイの具
体例は、リフレッシュ機能を含んでいる。リフレッシュ
機能は、各エントリのポインタが予め決められた量だけ
履歴ポインタと異なるかどうか決定するために、ハッシ
ュテーブルのエントリに格納されたポインタを周期的に
調べる。もしそのポインタと履歴アレイポインタとの差
が予め決められた量より大きければ、ハッシュテーブル
のエントリはそのエントリを再び初期化する無効な値に
置き換えられる。
【0123】これに加えて、この履歴アレイの具体例
は、ハッシュテーブルの全てのエントリを、そのテーブ
ルを効率的に初期化する無効値で効率的に置き換える初
期化ルーチンを供給する。
【0124】また、履歴アレイ手段を用いた本発明の履
歴アレイの具体例は、圧縮ユニットの出力である可変長
に符号化されたデータストリームを復号化するための方
法を含んでいる。分解のための方法は、以下のステップ
を含んでいる。
【0125】最初に、可変長に符号化されたデータスト
リームが独立した部分に分けて解析(パーズ)され、各
独立部分は標識の一つで始まる。次に、各独立部分の標
識が評価され、標識が生データ標識であるか符号化され
たマッチングデータストリングを示す標識であるかが決
定される。標識が符号化されたマッチングデータストリ
ングがあることを示す場合には、次のステップは、長さ
指示子と、マッチングデータストリングを生成するため
の置換コードのポインタとを解釈することを含む。この
ように、最初の入力データストリームの部分が再構築さ
れる。他方、標識が生データである場合には、符号化さ
れた入力データストリームの最初のキャラクタが得ら
れ、このようにして最初のデータストリームが再構築さ
れる。
【0126】シフトレジスタを用いる第2の具体例 シフトレジスタ手段を用いる第2の具体例は、ハッシュ
関数の具体例より高い効率を有し、回路のコストを最小
にするために集積回路技術を用いている。これに加え
て、この具体例は最長のマッチングストリングは常にシ
フトレジスタアレイに見いだされるということを保証す
る。この履歴アレイの具体例は、探索は高速のパイプラ
イン方式で行われることを可能にする。より詳細には、
入力データストリームの入力データキャラクタは、シフ
トレジスタの各エントリに同時伝送される。入力データ
キャラクタは、シフトレジスタの各エントリの格納され
たキャラクタと比較される。もし入力データキャラクタ
がシフトレジスタ内の格納されたデータキャラクタの何
れかにマッチすれば、マッチした結果が現れる。このプ
ロセスは各入力データキャラクタに対して、最長のマッ
チングデータストリングが見いだされるまで行われる。
シフトレジスタ手段の各エントリに対するマッチした結
果は蓄積され維持される。これに加えて、最長のマッチ
ングストリングの長さに沿った最長のマッチングストリ
ングのエントリの位置が格納される。次に、エントリの
位置及び長さが、それによって圧縮比率を得るために符
号化される。
【0127】また、シフトレジスタ手段を用いる第2の
具体例は、圧縮ユニットの出力である可変長に符号化さ
れたデータストリームを復号化するための方法を含んで
いる。分解の方法は以下のステップを含んでいる。最初
に、可変長に符号化されたデータストリームが独立した
部分に分解(パーズ)される。各独立部分は標識の一つ
で始まる。次に、各独立部分の標識が評価され、標識が
生データ標識であるか符号化されたマッチングデータス
トリングを示す標識であるかが決定される。標識が符号
化されたマッチングデータストリングがあることを示す
場合には、次のステップは、長さ指示子と、マッチング
データストリングを生成するための置換コードのポイン
タとを解釈することを含む。このように、最初の入力デ
ータストリームの部分が再構築される。他方、標識が生
データである場合には、符号化された入力データストリ
ームの最初のキャラクタが得られ、このようにして最初
のデータストリームが再構築される。
【0128】以下、本発明を、実施例について図面を参
照しながら説明する。
【0129】1.圧縮ユニットの構成 図1、図2、図3及び図4に本発明による圧縮ユニット
4及び伸張ユニット6を示す。ユニット4及び6は、ハ
ードウェアモジュールであっても、ソフトウェアサブル
ーチンであってもよい。しかし、履歴アレイを用いた第
1の実施例及びシフトレジスタ手段を包含する第2の実
施例に於いては、圧縮ユニット4及び伸張ユニット6は
1個の集積回路に組み入れられる。この集積回路は、マ
イクロプロセッサ5によって制御されるデータ記憶シス
テム又はデータ伝送システムの一部として用いられる。
図1及び図3に於いて、入力データストリーム8は、ホ
スト10と称されるデータ送信装置から圧縮ユニット4
に入力される。符号化され、圧縮されたデータストリー
ム12は装置(device)14と称されるデータ受
信装置へ伝送される。
【0130】同様に、履歴アレイを用いた第1の実施例
を示す図2及びシフトレジスタ手段を用いた第2の実施
例を示す図4に於いて、伸張ユニット6は、装置14
(ここではデータ送信装置)から圧縮されたデータスト
リームを受け取り、元の圧縮されていないデータストリ
ーム20を再構成し、そのデータストリームをホスト1
0(ここではデータ受信装置)へ出力する。履歴アレイ
を用いた第1の実施例及びシフトレジスタ手段を用いた
第2の実施例に於いて、伸張及び圧縮は同時には行われ
ない。しかし、他の実施態様に於いては伸張及び圧縮は
同時に行われ得る。
【0131】履歴アレイを用いた実施例に於ける全ての
データ構造(例えば、履歴アレイ102、ハッシュテー
ブル100、及びオフセットアレイ104(図7))
は、別の外部のRAMチップ16内に保持されている。
RAM16を圧縮及び伸張用チップに含めることも可能
であるが、現在の技術では、RAM16及び圧縮/伸張
ユニット4、6を共に包含するチップは非常に高くつく
であろう。履歴アレイを用いた実施例に於いては、RA
M16は少なくとも16Kバイトのデータ容量を有する
必要がある。RAM16の構成は、16K×8ビットで
あっても8K×16ビットであってもよい。
【0132】履歴アレイを用いた実施例では又、より大
きいハッシュテーブル(図7)を用いて能力を向上させ
ることを考慮すると、32Kバイト迄のRAM16を用
いることができる。履歴アレイを用いた実施例に於いて
具体化される好ましいデータ構造のより詳細な説明は、
そのようなデータ構造を構築し、保守する圧縮ユニット
についての以下での議論の中で与えられる、シフトレジ
スタ手段を用いた実施例の構成では、外部RAMは使用
されない。
【0133】以下で議論される全ての数値パラメータ
(例えば、MEMSIZE、16ビットHPTPサイズ
等)の値が本発明の圧縮、伸張技術に於ける基本的な概
念に影響を及ぼすことなく変更可能であることは、当業
者には理解されるであろう。
【0134】 2.履歴アレイを用いた実施例に於けるコード構成 図5に本発明の履歴アレイを用いた実施例のコード構成
を示す。本実施例に於ける符号化方法は、出力データス
トリームが「生(raw)」又は非圧縮であるか、ある
いは圧縮されたものであるかを示すための標識ビットを
用いる。非圧縮であることは1個の「0」ビットで示さ
れ、図5に参照符号19で示されるように、0BBBB
BBBBは符号化された「生」の8ビットのバイトであ
る。圧縮が行われたことは1個の「1」ビットで示さ
れ、図5に参照符号21で示されるように、「1(オフ
セット)(長さ)」は履歴バッファ内で「オフセット」
だけ戻った位置にあるストリングである。本実施例で
は、履歴バッファ内でのオフセットの符号化又は戻りの
バイト数は、図5に参照符号23で示すように、2通り
の形式の一方をとる。7ビットを有する短い形式では、
1〜127バイトのオフセットが発生される。他方、1
1ビットを有する長い形式では、1〜2047バイトの
オフセットが発生される。
【0135】短いオフセット形式と長いオフセット形式
とは、1個のビットで区別される。即ち、「1」は短い
形式を示し、「0」は長い形式を示す。本発明で特別に
用いられている長さのコード構成を、図5のテーブル2
5に示す。テーブル25の先頭から見ていくと、2バイ
トの長さは、図5に参照符号22で示すように、値「0
0」を有する2ビットに符号化される。同様の手法で、
3バイト及び4バイトの長さの符号化の結果は、値「0
1」を有する2ビット(図5の参照符号24)及び値
「10」を有する2ビット(図5の参照符号26)でそ
れぞれ表される。5バイトから7バイトまでの長さは
「11 00」から「11 10」までの値を有する4
ビットで表される(図5の参照符号28〜32)。8バ
イトから22バイトまでの長さは、「11 11 00
00」から「11 11 1110」までの値を有する
8ビットで表される。22バイト超の長さについては、
次の23バイトから37バイトまでの長さは12ビット
で表され(図5の参照符号64〜70)、以後、同様に
してビット数が増大してゆく。テーブル25に示される
長さのコード構成の利点は、以下で議論する圧縮方法の
中でビットストリングの長さの符号化を行うための効率
的な手続きを可能にすることにある。
【0136】長さ及びオフセットの符号化のために様々
な符号化方式が用いられてきたが、このようなアプロー
チによって得られる圧縮比は、本実施例によるものに非
常に近い。
【0137】図6に、図5の圧縮機構を用いた場合の単
純な結果のテーブルを示す。このテーブルは3個の列に
分割されている。第1列75は入力バイトストリームを
示している。第2列77は符号化された出力ストリーム
である。最後の第3列79はコメントを与えている。符
号化された出力ビットストリームの各行には、参照符号
76〜86が付加されている。入力バイトストリーム7
5(ABAAAAAACABA)を圧縮するための基本
的な操作は次の通りである。圧縮は、入力バイトストリ
ーム75の中でマッチするバイトストリングを見つけ出
すことによって達成される。この機構は、シフトレジス
タを用いた実施例に於いても用いられる。本実施例に於
いては、効率的なハッシュ探索を行うために、図7に示
すハッシュ構造が用いられている。図7に示す構造及び
ハッシュ探索のより詳細な議論は、後に行う。
【0138】本実施例に於いては、2バイト以上の長さ
を有するバイトストリームに対して圧縮が生じる。第1
の入力バイトが圧縮ユニット4によって受け取られる
と、該第1の入力バイトにマッチする他の2バイトスト
リングが過去の履歴中に存在したか否かを判定するため
の探索が行われる。第1の入力バイトは以前の履歴を有
していないキャラクタ「A」(図6の参照符号76)で
あり、従って、この第1のバイトについては、図6に参
照符号76で示すように、8ビットのバイトが、「生」
(又は非圧縮)であることを示す標識ビット「0」の後
で符号化された出力ストリームに追加される。
【0139】入力バイトストリーム中の次の入力バイト
はキャラクタ「B」である。この時点では、バイトスト
リーム中の他の唯一のバイトはマッチしない(履歴はキ
ャラクタ「A」を有している)ため、図6に参照符号7
8で示すように、キャラクタ「B」のためのバイト及び
「生」バイト標識(ダグビット)が出力される。入力ス
トリーム75中の次の入力バイトはキャラクタ「A」で
ある。本実施例に於いては2バイト以上のバイトストリ
ングのみが圧縮されるため、図6に参照符号80で示す
ように、キャラクタ「A」のためのバイトは非圧縮のま
ま、生のデータバイトとして出力される。しかし、次の
入力バイト(キャラクタ「A」)が出現すると、2バイ
トのストリングが見いだされる。圧縮ユニット4は長さ
2のマッチを与え、入力バイトストリームの引き続くバ
イトを比較する。次の入力バイトは以前のバイト(例え
ば、キャラクタ「A」)にマッチするので、マッチの長
さがインクリメントされ、ストリングマッチが「拡張」
される。この手順はキャラクタ「A」を有する次の4個
の入力バイトについて継続される。
【0140】図6の行82に示すように、キャラクタ列
「AAAAAA」の符号化されたビットストリングは、
「11 0000001 1100」である。符号化さ
れたストリングの第1ビットは圧縮符号化モードを示す
「1」である。符号化されたビットストリング中の次の
ビットはオフセットの短い形式(図5の参照符号23)
が用いられていることを示す。オフセットは1バイトの
オフセットを示す「0000001」であり、長さ「1
100」は、図5のテーブル25に示すように、5バイ
トを示す。入力バイトストリーム75中の残りのバイト
は、上述したものと同様の戦略(手法)を用いて符号化
される。
【0141】上述の例では、あるバイトについてマッチ
がとれなかった場合には、圧縮ユニット4は、入力バイ
トストリームの履歴を遡って、現在の入力バイトまでマ
ッチし、その入力バイトを含むストリングを探索する。
そのような新たなストリングが見いだされた場合には、
マッチの長さがインクリメントされ、新たなマッチする
ストリングの位置が定められ、記憶される。このストリ
ングマッチは従って、「拡張」されている。そのような
新たなストリングが見いだされない場合、又は余りに多
くの先行する入力バイトエントリを探索する必要がある
場合には、現在のマッチするストリングが最大のストリ
ングであると仮定され、そのマッチするストリングが、
符号化された形式又は生のバイト形式で出力される。符
号化された形式では、そのストリングの長さ及び入力バ
イトストリームを保持している履歴中のそのストリング
の相対位置が、出力される(圧縮された)データストリ
ームに追加される。オフセットは、そのストリングの開
始位置からバッファ内のマッチしたバイトまでのバイト
数として計算される。このバイト数は、履歴アレイを用
いた実施例では、1からメモリサイズ(「MEMSIZ
E」)−1迄の範囲にある。上述したように、長さ及び
オフセットは図5に示したように符号化される。「従来
の技術」の章で論じたアプローチとは対照的に、本実施
例に於ける圧縮の手法では、異なる長さのストリングが
異なる長さの出力コードにマッピングされることに注意
されたい。
【0142】入力バイトストリームに対するストリング
探索操作に多くの実現方法が存在することが当業者には
理解されるであろう。特に、マッチするストリングを見
いだすために用いることができるハッシング技法及び探
索手法には多くのものが存在する。様々なハッシング技
術についても完全な背景に関しては、Knuthの「S
orting and Searching,The
Art of Computer Programmi
ng(Vol.3)、pp.506−549(197
3)を参照されたい。以下に、本実施例によって用いら
れる特別なハッシュ構造の詳細を述べる。ここで論じら
れるデータ構造及びアプローチが選択されたのは、それ
らによって、圧縮機能のために要求されるRAMサイク
ルの数が最小化され、従ってシステムのスループットが
最大化されるからである。
【0143】 3.履歴アレイ手段を用いた実施例のデータ構造 図7を参照して、本実施例のハッシュ構造について述べ
る。既に処理された(圧縮された、又は生のデータとし
て圧縮されなかった)入力データの最後の2048キャ
ラクタを包含する履歴アレイ102がRAM16に格納
されている。新たな入力データが圧縮ユニット4(図
1)によって受け取られると、本発明のシステムは、新
たな入力データ中の少なくとも2バイトの「ストリン
グ」が履歴アレイ102中のストリングにマッチするか
否かをチェックする。マッチすれば、この入力データの
ストリングは符号化され、マッチしなければ、該入力デ
ータのストリングは上述したように生のデータとして表
される。
【0144】ハッシュテーブル100は履歴アレイ10
2中の特定のストリングを素早く見いだすために用いら
れる。ハッシュテーブル100は、履歴アレイへの履歴
アレイポインタを含む一連のビン(bin)エントリ1
06で構成されている。オフセットアレイ104と称さ
れるいま一つのデータ構造はハッシュリンクテーブルで
ある。オフセットアレイ104中の各リンクリストの第
1の要素は、特定のハッシュ値に対応する履歴アレイ中
の前のエントリを指し示している。該リンクリスト中の
最後の要素(この要素は無効なポインタであってもよ
い)はこのハッシュ値に関連付けられた最も古いエント
リを指し示している。
【0145】圧縮ユニット4は、各入力バイトが処理さ
れた後にインクリメントされる16ビットの履歴ポイン
タHPTR108を維持している。HPTRは0に初期
化され、圧縮ユニットによって64Kバイトが処理され
た後に0に戻る。オフセットアレイ104は実際には単
純リンクリスト(singly linked lis
t)から構成された2次履歴である。ある特定のオフセ
ットがMEMSIZE−MAXSTR(ここでMAXS
TRは探索されている最大のストリングである)よりも
大きいか、又はリストの最近のエントリからの全てのリ
ンクの合計がMEMSIZE−MAXSTRよりも大き
い場合には、特定のハッシュビン(値)中に有効なエン
トリはもはや存在しない。
【0146】このようにして、MEMSIZE−MAX
STRよりも古いエントリはハッシュテーブル100の
終わりから効果的に「離れ落ちる(fall of
f)」。本発明のこの点により、オフセットアレイ10
4中の単純リンクテストの使用を可能にする。単純リン
クリストの維持は、二重リンクリストに比べて半分以下
のメモリアクセスによって行うことができる。しかし、
単純リンクリストの使用は、以下で述べるリフレッシュ
ハッシュ操作を必要とする。
【0147】4.履歴アレイを用いた実施例の圧縮操作 図8、図9及び図10に、本発明の圧縮操作の詳細なフ
ローチャートを示す。フローチャート(図8、図9及び
図10)の特別なデータパスを示すハードワイヤード版
を図12に示す。
【0148】より詳細には、図8に於いて圧縮操作ルー
チンはブロック108から出発する。次に、ブロック1
10に於いて、初期化ルーチン(図9)が呼び出され、
図7に示すハッシュ構造が初期化される。この操作は典
型的にはシステムの初期化に於いて行われ、1回の「圧
縮」が完了し、新たな圧縮が開始される場合にも繰り返
し行われる必要はない。
【0149】図9のブロック112に於いて、ハッシュ
ポインタ(HPTR)108が0に設定される。ブロッ
ク114(図9)に於いて、符号化されているビットス
トリングの現在の長さを追跡するためのマッチ長変数
(「MATCHLEM」)が0に設定される。次に、ブ
ロック116に於いて、後述するリフレッシュカウント
変数(「RFSHCNT」)が12に設定される。ブロ
ック118に於いて、後述するリフレッシュポインタ変
数(「RFSHPTR」)が0に設定される。次に、ブ
ロック120に於いて、ハッシュテーブル100が値H
PTR−MEMSIZEで埋められる。このステップに
より、ハッシュテーブル100の以前の有効な値は効果
的に空にされる。ハッシュテーブルは非常に大きいの
で、新たなデータストリームが与えられる度にこのよう
な初期化プロセス(図9)が必要とされるならば、たい
ていのシステムに於いて受け入れ難い待ち時間が生じ
る。このため、リフレッシュハッシュルーチン(図1
0)が用いられ、これにより初期化のコストが圧縮の全
期間に分配され、従って、圧縮操作間の町時間が最小化
される。
【0150】図8を再び参照すると、初期化ルーチン
(図9)の終了後、圧縮ユニット4(図1)は入力され
るデータストリームからのバイトの受け入れを開始する
ことができる。ブロック124に於いて、変数RFSH
CNTが0であるか否かが調べられる。RFSHCNT
が0にデクリメントされている場合には、処理はブロッ
ク126へ進む。ブロック126に於いてはリフレッシ
ュハッシュルーチン(図10)が実行される。
【0151】リフレッシュハッシュルーチン(図10)
の目的は、ハッシュテーブル100の特定の場所に於い
てHPTRが古い値に折り返される(wrap bac
k)という万一の状況に対処することにある。このよう
な状況が生じた場合には、ハッシュテーブル100内の
実際には非常に古いハッシュビン106が突然に非常に
新しく見えるようになる。リフレッシュハッシュルーチ
ン(図10)は、ハッシュテーブル100の各エントリ
(HASHTABLE(j))を定期的に調べ、そのエ
ントリが余りに古くないか、例えばHPTR−HASH
TABLE(j)>OLDHASHが成り立つか否かを
定めることに責任を負っている。ここで、OLDHAS
Hは適切に選ばれた値(例えば16K)である。そのエ
ントリが余りに古い場合には、HASHTABLE
(j)はHPTR−MEMSIZEで置き換えられる。
この値は十分に古いので、無効又は「NIL」ポインタ
として扱われるが、このことにより、更に64K−ME
MSIZE迄のバイトを、HPTPの折り返しの問題無
しに処理することができる。
【0152】ハッシュテーブル100がリフレッシュさ
れる頻度は次のようにして計算される。目標は、全ての
ハッシュテーブルのビンが64K−OLDHASHバイ
ト毎に少なくとも1度調べられることを保証することで
ある。この目標は、(64K−OLDHASH)/HA
SHSIZEの入力バイト毎に1回のリフレッシュハッ
シュを行うことによって達成される。ここで、HASH
SIZEはハッシュテーブル100内のビンの数であ
る。本実施例に於いては、この値は48K/4K=12
であり、従って、各12回目のバイトの入力毎にハッシ
ュテーブル100の1個のハッシュエントリがリフレッ
シュされる。
【0153】1回のリフレッシュ操作は常に1個のメモ
リサイクルを含むが、ハッシュテーブル100のビンエ
ントリが更新される必要がある場合には第2の(書き込
み)サイクルが必要とされることに注意されたい。OL
DHASHを増大させると、リフレッシュの頻度も又増
大する。しかし、ビンエントリがストリングハッシング
によって既に更新されている可能性がより高くなるの
で、第2のサイクルの生じる可能性は低下する。OLD
HASH=16Kという値は経験的に得られたものであ
り、この値によれば、本実施例に於けるリフレッシュの
オーバーヘッドは適当なものになる。入力データのバイ
ト当りのリフレッシュオーバーヘッドは概ね1/12か
ら2/12メモリサイクルまでの間にある。これは、二
重リンクリストを維持するためのオーバーヘッドよりも
一桁以上小さい。
【0154】圧縮操作の終了又は新たな入力バイトスト
リームに対する新たな圧縮操作の開始のためには、圧縮
ユニットは単にHPTRをMEMSIZEだけインクリ
メントし、これによりハッシュテーブルのビンは自動的
に無効化される。これに加えて、リフレッシュユニット
は、MEMSIZE/12のリフレッシュサイクルを実
行し、実際には処理されなかったMEMSIZEバイト
の間に省略されたリフレッシュサイクルを埋め合わせな
ければならない。しかし、この操作は4096回ではな
く僅かに171回のリフレッシュ操作を含むだけであ
り、従って、非常に短時間に遂行される。他の圧縮方法
に於いては、新たな圧縮操作の開始に先立って通常全て
のテーブル及びバッファをクリアする必要があり、多大
な待ち時間が必要となる。
【0155】図10に於いて処理はブロック130へ進
み、HPTR−HASHTABLE(RFSHPTR)
>16Kであるか否かが調べられる。以前に述べたよう
に、この操作により現在のエントリが余りに古いか否か
が定められる。該エントリが余りに古い場合には、処理
はブロック132へ進み、ここでHASH(RFSHP
TR)がHPTR−MEMSIZEに設定される。これ
により、このエントリ位置に無効値が効果的に生成され
る。ブロック130に於いてエントリが余りに古くはな
いと判定された場合には、処理はブロック134へ進
む。エントリが余りに古いか否かに拘らず、処理はブロ
ック134に進み、RFSHPTRが1だけインクリメ
ントされる。次に、ブロック136に於いて、RFSH
CNTが12に設定され、処理は圧縮操作ルーチンのブ
ロック128(図8)へ戻る。
【0156】ブロック124に於いてRFSHCNTが
0に等しい(この場合にはリフレッシュハッシュルーチ
ン(図10)の呼出が必要である)と判定されたかそう
でないかに拘らず、処理はブロック128に進む。ブロ
ック128に於いては、圧縮ユニット4(図1)は操作
の初期化を行うために、履歴アレイ102の最初の2バ
イトを入力データで埋める。この2バイトはレジスタI
NREG0及びINREG1に保持される。新たな1バ
イトが処理される度に、第1バイト及び次の入力バイト
のハッシュ(「H])が計算される。本実施例では、I
NREG0を左へ4ビットシフトしたものとINREG
1との排他的論理和をとることによってハッシュが計算
される。上述したように、(以前に参照した)Knut
hによって議論されているいずれのハッシュ関数も適用
可能である。新たな1個の入力バイトが処理される度
に、INREG1の内容はINREG0へ移され、IN
REG1には新たなバイト値がロードされる。
【0157】ブロック128で処理される各バイトにつ
いて、ハッシュ値H(「H])が計算され、新たなハッ
シュ値に対応するハッシュ値のビン中の古いエントリが
読み出され、NEXTと称される変数に格納される。更
に、ブロック128に於いて、現在のハッシュ値に対応
するハッシュテーブルの場所の古いエントリはHPTR
の現在の値で置換される。ブロック140に於いて、H
PTR−NEXT≧MEMSIZE−MAXSTRであ
るか否かが判定される。変数MAXSTRは、履歴アレ
イ102中で見いだされるマッチするバイトストリング
が現在処理されているバイトによって上書きされないこ
とを保証する、探索されるストリングサイズの最大値で
ある。HPTR−NEXTがMEMSIZE−MAXS
TR以上であると判定された場合には、処理はブロック
142へ進み、変数NEXTはHPTR−MEMSIZ
Eに設定される。換言すれば、履歴の最後のMEMSI
ZEバイト中にはマッチするストリングが存在しなかっ
たため、ハッシュビンは空にされる。
【0158】HPTR−NEXTがMEMSIZE−M
AXSTR以上であると判定されたか否かに拘らず、処
理はブロック144へ進む。ブロック144では、値H
PTR−NEXTが、対応するオフセットアレイ104
のエントリOFFSET(HPTR)に書き込まれる。
又、ブロック144では、INREG1の値が履歴アレ
イ102のエントリHISTORY(HPTR)に置か
れる。上述したブロック124、126、128、14
0、142及び144で実行されるステップにより、現
在処理されているバイトについて必要とされるデータ構
造の保守は完了し、この時点で、履歴アレイ102の内
容のストリング探索を開始することができる。上述した
保守機能は、圧縮ユニットが現在ストリングマッチの処
理を行っているか否かに拘らず、処理される全ての入力
バイトについて実行されることに注意されたい。
【0159】ブロック146に於いて、マッチ長変数M
ATCHLENが0に等しいか否かが判定される。初期
化ルーチンのブロック114(図9)に於いてMATC
HLENは0に設定されたことを想起されたい。MAT
CHLENは現在のストリングマッチ長を包含してお
り、その値は処理の開始時に於いては0である。ここで
圧縮操作の開始時点での処理を行っており、MATCH
LENが0である場合には、内部ハッシュカウンタHA
SHCNTが0に設定される。HASHCNTは個々の
ストリング探索の繰り返しを制限するために用いられ
る。次に、ブロック150に於いて、HPTR−NEX
T≧MEMSIZE−MAXSTRであるか否かが判定
される。HPTR−NEXTがMEMSIZE−MAX
STRよりも小さいと判定された場合には、処理はブロ
ック152へ進む。ブロック152では、INREG1
の値が履歴アレイのHISTORY(NEXT)の値に
等しいか否かが判定される。このステップの目的は、履
歴アレイ内の先行するエントリに対してINREG0及
びINREG1内の2バイトにマッチする2バイトスト
リングを探索することにある。INREG1内の値のみ
がHISTORY(NEXT)の値と比較される。なぜ
ならば、ハッシュ関数はINREG0に関して1対1の
写影が行われるように選ばれており、そのためハッシュ
リスト中の各ストリングからの1バイトのみがINRE
G1と比較される必要があるからである。このステップ
により、2バイトの比較に代えて1バイトの比較を行う
だけでよいことから、本実施例の性能は向上する。ブロ
ック150に於いてHPTR−NEXTがMEMSIZ
E−MAXSTR以上であると判定された場合には、処
理はブロック158へ進む。ブロック158では、生デ
ータ標識及びINREG0内の生のデータが出力され、
処理はブロック125へ進む。ブロック125では、次
の入力バイトが得られ、処理全体が再び開始される。
【0160】ブロック152に於いてマッチが成功した
と判定された場合には、処理はブロック160へ進み、
変数MATCHPTRの値が変数NEXTの値に等しく
設定される。更に、2バイトのマッチを示すために変数
MATCHLENが2に設定され、処理はブロック12
5へ進み、次の入力バイトが得られる。しかし、HIS
TORY(NEXT)の値がマッチしない場合には、処
理はブロック154へ進み、HASHCNTの値がイン
クリメントされ、変数NEXTはNEXT−OFFSE
T(NEXT)に等しく設定される。このステップによ
り、オフセットアレイ104によってリンクされている
次のエントリが効果的に指し示される。処理はブロック
156へ進み、HASHCNTが既定の最大カウント値
MAXHCNT(典型的には8)に達したか否かが判定
される。HASHCNTがMAXHCNT以上である場
合には、処理はブロック158へ進み、生のバイトIN
REG0が出力され、処理はブロック125へ進む。し
かし、HASHCNTがMAXHCNT以上でなけれ
ば、HASHCNTがMAXHCNTに達するか、ハッ
シュリストにそれ以上の有効なエントリが存在しなくな
る(ブロック150に於いて判定される)か、又は(ブ
ロック152に於いて)マッチするストリングが見いだ
されるかの条件が発生するまで、ブロック150、15
2、154及び156の処理が継続される。
【0161】処理がブロック125へ進んだ場合には、
その時点で圧縮ユニット4(図1)は新たな入力バイト
を処理できる状態にある。ブロック125に於いて、H
PTRがインクリメントされ、変数RFSHCNTがデ
クリメントされる。ブロック124、126、128、
140、142、144、146、148、150、1
52、154、156、158、160及び125の処
理が、ブロック146に於いてMATCHLENが0よ
りも大きいと判定されるまで実行される。ブロック14
6を参照し、MATCHLENが0に等しくない場合に
は処理はブロック162へ進むことに注意されたい。ブ
ロック162に於いて、変数MATCHPTRが1だけ
インクリメントされる。
【0162】このようにして、新たな値INREG1は
履歴アレイ102中のMATCHPTRに於いて見いだ
されるMATCHLEN+1の長さのストリーム内の新
たなバイトと比較される。ブロック164では、バイト
のマッチが成功したか否かが判定される。マッチした場
合には、ブロック180に於いてMATCHLENがイ
ンクリメントされてストリングが拡張され、処理は次に
ブロック125へ進む。しかし、マッチがとれなかった
場合には、処理はブロック166へ進み、変数NEXT
はMATCHPTR−MATCHLEN+1に等しく設
定される。処理はブロック168へ進み、変数NEXT
はNEXT−OFFSET(NEXT)に設定される。
更に、ブロック168で、変数HASHCNTがインク
リメントされる。ステップ166及び168により、圧
縮ユニット4(図1)は、ハッシュビン中に残されてい
る連続するストリングエントリに於いて、マッチがとれ
るオリジナルのストリングを探索する。ブロック170
では、HPTR−NEXT≧MEMSIZE−MAXS
TRであるか否かが判定される。HPTR−NEXTが
MEMSIZE−MAXSTRよりも大きいと判定され
た場合には、有効なエントリはそれ以上存在せず、処理
はブロック182へ進む。ブロック184では、MAT
CHLENが0に設定され、ブロック125で新たなバ
イトについて処理が開始される。しかし、ブロック17
0に於いてHPTR−NEXTがMEMSIZE−MA
XSTRよりも小さいと判定された場合には、処理はブ
ロック172へ進み、MATCHLEN≧MAXSTR
であるか否かが判定される。MATCHLEN≧MAX
STRである場合には、無効な探索が生じており、処理
はブロック182へ進む。しかし、MATCHLEN≧
MAXSTRでなければ、処理はブロック174へ進
む。ブロック182に於いて圧縮ユニット4(図1)
は、マッチするストリングが見いだされたことを示す標
識ビット(「1」)、それに引き続く、履歴アレイ10
2中のマッチしたストリングの適切に符号化されたオフ
セット(OFFSET=HPTR−MATCHPT
R)、及び符号化された長さを出力する。
【0163】ブロック174では、位置HISTORY
(NEXT)に於ける長さMATCHLEN+1の現在
のストリングが内部マッチバッファの内容に等しいか否
かが判定される。内部マッチバッファは、現在マッチし
ているストリングのMATCHLEN個のバイトの全て
を包含している。このバッファにより、ストリングの最
初のマッチの試みが失敗した場合の新たなストリングの
探索が高速化される。マッチが実行される度にマッチを
とろうとするバイトを得るためにRAMにアクセスする
必要はなく、該バイトは圧縮ユニットが含まれるチップ
内で即座に利用できるため、効率がよい。換言すると、
マッチバッファは処理を効果的に向上させるためのルッ
クアサイド(look aside)バッファとして機
能する。マッチバッファの長さは有限である(本実施例
ではMAXSTR=8バイトである)。
【0164】HISTORY(NEXT)に於ける長さ
MATCHLEN+1のストリングがマッチバッファの
内容に等しい場合には、処理はブロック178へ進み、
変数MATCHPTRはNEXT+MATCHLENに
等しく設定される。処理はブロック180へ進み、MA
TCHLENがインクリメントされる。次に処理はブロ
ック125へ進み、入力データストリーム中の次の新た
なバイトが処理される。しかし、HISTORY(NE
XT)に於けるストリングがマッチバッファに等しくな
い場合には、処理はブロック176へ進み、変数HAS
HCNT≧MAXHCNTであるか否かが判定される。
HASHCNT≧MAXHCNTである場合には、処理
はブロック182及び184へ進み、標識ビット
「1」、履歴アレイ中のマッチしたストリングの適切に
符号化されたオフセット、及び符号化された長さを有す
る符号化されたストリングが出力され、変数MATCH
LENが0に設定される。処理はブロック125へ進
み、次の新たな入力データバイトが処理される。ブロッ
ク176に於いて、HASHCNT≧MAXHCNTで
ないと判定された場合には、MATCHLEN+1の長
さのマッチがとれるか、HASHCNTがMAXHCN
Tに達するか、又は有効なハッシュエントリが存在しな
くなる(HPTR−NEXT≧MEMSIZE−MAX
STR)かの条件が発生するまで、ブロック168、1
70、172、174および76の処理が実行される。
【0165】本実施例では、RAM16(図1)が全て
のクロックサイクルに於いて使用中であることを保証す
るために、上述の操作はパイプライン化される。なぜな
らば、RAMサイクルカウントは性能を制限する要因だ
からである。
【0166】記憶システムに於いては通常、データは固
定長のセクタ又はブロックにブロック化されなければな
らず、ある段階で圧縮を打ち切り、残りの入力ストリー
ムについて新たな操作を再開することが望ましい場合が
多い。本実施例では、出力された圧縮バイトのカウント
が実行される。このカウントが(ユーザが選択可能な)
既定値に達した場合、又は入力データストリームが終了
した場合には、圧縮ユニットは圧縮をフラッシュ(fl
ush)するように指示される。これは、入力FIFO
から新たなバイトを取り出すことなく、INREG0及
びINREG1内のバイトの圧縮を完了し、終了し、
(存在すれば)現在拡張されているストリングを出力
し、又は残りの未処理のバイトを生のバイトとして出力
することを意味する。
【0167】圧縮ユニットは次に、特別の「圧縮データ
の終わり」マーカを出力する。このマーカは0のオフセ
ットを有している。このオフセットは、MEMSIZE
のオフセットとして解釈され得るが、そうではなく、こ
のオフセットは今回の圧縮操作の終わりを示すものとし
て予約されている。実際には、本実施例では、MEMS
IZE−MAXSTR(MAXSTRは典型的には8で
ある)からMEMSIZE−1までの範囲のオフセット
は予約されている。従って、履歴に於いてこのオフセッ
トを越えたストリングは見いだされない。この特徴によ
り、将来に於けるフォーマットの拡張が可能となり、履
歴バッファに於ける折り返しを含む困難な問題を回避す
ることができる。フラッシュの後では、圧縮ユニットは
HPTRにMEMSIZEを加え、適切な数(MEMS
IZE/12)のリフレッシュハッシュサイクルを実行
し、新たな圧縮操作を開始する。
【0168】本発明がなされる過程に於いて圧縮方法の
広範なソフトウェアシミュレーションが行われた。MA
XHCNT、HASHSIZE、マッチバッファのサイ
ズ、MEMSIZEを含む全てのパラメータの値が変化
させられて、スループット及び圧縮比に対するそれらの
パラメータの影響が調べられた。本実施例の特別のフォ
ーマット及びパラメータの組は、これらの性能上の論点
に対して受け入れ可能なトレードオフが得られるように
選択された。しかし、多くの類似のパラメータの組及び
符号化は実質的に同様の性能に帰着する。
【0169】伸張ユニット6(図2)は、圧縮ユニット
4(図1)に比べれば非常に簡素である。伸張ユニット
6は符号化されたバイトストリームを受け取り、このス
トリームを、図5に示したコード構成に従って構成され
るビットストリームに変換する。各生のバイト又は符号
化されたバイトストリーム出力については、そのバイト
は伸張出力FIFOに転送され、同時に、RAM16
(図2)内に保持される伸張履歴アレイに追加される。
伸張履歴アレイは図7の履歴アレイ102と同様であ
る。伸張ユニット6(図2)はまた、カウント履歴ポイ
ンタ(「DPTR」)を有している。DPTRは、バイ
トの出力の度にインクリメントされ、MEMSIZEに
達した場合に0に戻される。符号化されたストリングが
解析された場合に、そのストリングからのオフセットは
DPTRから差し引かれ、伸張履歴アレイ中のオフセッ
ト位置から始まり、符号化された長さのバイトストリン
グが出力される。従って、伸張ユニット6(図2)は図
7に示しようなハッシュ構造(即ち、ハッシュテーブル
100及びオフセットアレイ104)を維持する必要は
なく、実際、MEMSIZEバイトのRAM16(図
2)を必要とするだけである。
【0170】通常は、RAM16(図2)には別個の圧
縮データ構造及び伸張データ構造を保持するスペースが
あり、圧縮及び伸張操作を同時に実行することができ
る。しかし、本実施例ではこの能力は具体化されていな
い。
【0171】5.履歴アレイを用いた実施例の伸張操作 図11に伸張を行うための伸張操作ルーチンの詳細なブ
ロック図を示す。伸張操作ルーチン(図11)への入力
は圧縮操作(即ち、図8、図9及び図10の圧縮操作)
によって出力された符号化されたバイトストリームであ
る。ブロック190に於いて操作が開始され、ブロック
192に於いてポインタDPTRが0に設定される。処
理はブロック194へ進み、入力された符号化データス
トリームから標識ビットが取り出される。次に、ブロッ
ク196に於いて、標識ビットが1に等しいか0に等し
いかが判定される。標識ビット「1」は符号化された圧
縮ビットストリングが続くことを示し、標識ビット
「0」は出力バイト圧縮されていない生のデータである
ことを示していることを想起されたい。標識ピットが0
に等しい場合には、処理はブロック198へ進む。ブロ
ック198では、「生」のバイトが入力された符号化デ
ータストリームから取り出される。次に、ブロック20
0で該生のデータバイトが出力され、ブロック202で
該生のデータバイトは伸張履歴アレイのHISTORY
(DPTR)に格納される。処理はブロック204へ進
み、DPTRは次の出力バイトへインクリメントされ
る。生のデータバイトの処理のためには、処理はブロッ
ク194、196、198、200、202及び204
へ戻る。
【0172】ブロック196に於いて、出力バイトが1
の標識ビットを有する場合には、処理はブロック206
へ進む。ブロック206に於いて、符号化されたビット
ストリングの解析が開始される。より詳細には、ブロッ
ク206では符号化されたストリング中のオフセット
(「P」)の値が、入力された符号化データストリーム
から取り出される。ブロック208では、オフセットの
値Pが0に等しいか否かが判定される。値0を有するオ
フセットは、上述したように、符号化された出力データ
ストリームの終わりを意味するエンドマーカを示してい
る。オフセットが0に等しい場合には処理はブロック2
12へ進み、処理は呼出元のプログラムへ戻る。しか
し、オフセットが0より大きい場合には、処理はブロッ
ク210へ進む。
【0173】ブロック210に於いて、入力された符号
化データストリームから長さのビットストリングが取り
出される。ブロック214では、伸張履歴アレイHIS
TORY(DPTR−P)の内容が定められる。次にブ
ロック216に於いて、その位置に格納されているデー
タが出力される。ブロック218では、そのデータがH
ISTORY(DPTR)に格納される。次に、ブロッ
ク220に於いてDPTRがインクリメントされ、ブロ
ック222でビットストリングな長さがデクリメントさ
れる。ブロック224に於いて、該長さが0までデクリ
メントされたか否かが判定される。該長さが0までデク
リメントされていない場合には、符号化されたバイトス
トリーム中の全てのバイトが出力されるまでブロック2
14、216、218、220、222及び224の処
理が行われる。
【0174】該長さが一旦0までデクリメントされる
と、処理はブロック194へ進み、入力された符号化デ
ータストリームから次の標識ビットが取り出される。従
って、値0のオフセットを有する符号化されたバイトス
トリングが出現する(ブロック208)まで処理は継続
され、そのようなバイトストリングが出現したときには
ブロック212に於いて処理は呼出元のプログラムへ戻
る。
【0175】 6.履歴アレイを用いた実施例の圧縮操作構成 図12に本実施例のデータ圧縮ユニット4(図1)を含
む回路図228を示す。回路228の要素はデジタル論
理によって実現される。回路228は、圧縮コントロー
ラ及びシーケンスユニット230によって制御される。
圧縮コントローラ及びシーケンスユニット230は、回
路228の要素のそれぞれに一連の制御ライン(図示せ
ず)によってリンクされている。本実施例では数MHz
で動作する内部クロック(図示せず)は、動作中の各ク
ロックサイクルに於いて1個以上の要素に働きかけるコ
ントローラ及びシーケンスユニット230の活性化レベ
ルを定める。実際の動作及びそれらの動作のシーケンス
は、既に論じた図8、図9及び図10に示されいる。
【0176】本実施例は、データの移動及びパッキング
を容易にするために、集積回路中のレジスタとして実現
される2個のFIFO232及び234を備えている。
一方のFIFO(ユーザによって選択され得る)につい
ては、RAM240(図13)の予約された領域に「追
い出す(spill over)」こともできる。この
予約された領域は典型的には8K又は16Kバイトであ
る。このように圧縮RAMの一部を用いることにより、
特に、複数のコンピュータ及び装置がコマンド及びデー
タについて単一のバスを共有するSCSI(Small
Computer System Interfac
e)を用いるシステムに於いて、明瞭な性能上の利点が
得られる。
【0177】SCSIに於いては、多のバス通信を妨げ
ないように、データを非常に高速で伝送しながら、バス
の獲得及び解放をできる限り素早く行うことが望まし
い。SCSIでは最大5Mバイト/秒の転送速度が得ら
れる。しかし、圧縮ユニットのスループットは通常この
数値よりもかなり低いため、SCSIバスに圧縮された
データを「圧縮しながら(on the fly)」送
出することは、性能の見地から受け入れ難い。
【0178】 7.履歴アレイを用いた実施例の外部RAMのFIFO この問題を避けるために、圧縮ユニット4(図1)の出
力側238(図12)には外部RAMFIFO240
(図13)が選択される。外部RAMFIFO240
は、圧縮ユニット(図1)内に設置されたRAMFIF
Oコントロール242によって制御される。FAMFI
FO240は、圧縮計算(履歴、ハッシュ等)のため、
及びFIFOとしての機能を提供するための両方に用い
られる。一旦RAMFIFO240にSCSIブロック
転送が許容されるに足る量のデータが蓄積されると、チ
ップ内のカウンタにより、SCSI転送を開始する制御
マイクロプロセッサに割込みがかけられる。バッファ
(引続きデータで埋められてよい)は低速で埋められた
にも拘らず、この転送はSCSIの全帯域で行われる。
【0179】RAMのこのような二重の使用により(圧
縮データ構造及びFIFOの両方を収容することができ
るサイズのRAMは通例入手可能である)、システムの
性能は飛躍的に向上する。RAMFIFO240(図1
3)をデータの流れの他方の側(典型的のには埋め込ま
れた駆動コントローラ内)に配置することもできる。又
は、同様の目標を達成するためにRAMFIFOを伸張
に於いて使用することもできる。一般に、RAMFIF
Oは動作のSCSI(又は最も高速の)側に置かれる。
【0180】回路228に於けるデータの流れのより詳
細な説明を行う。入力バイトストリームの圧縮されてい
ないバイトは、圧縮ユニット4に入力され、ライン24
4を介して入力FIFO232に与えられる。入力FI
FOに格納されたバイトは、2個の拡張FIFOレジス
タINREG1(参照符号233)及びINREG0
(参照符号235)に転送される。より詳細には,FI
FO232からのデータはライン246を介してINR
EG1レジスタ233に与えられる。INREG1レジ
スタ233に格納されたデータは、次に、ライン248
及び250を介してINREG0レジスタ235に転送
される。INREG1及びINREG0レジスタの目的
はハッシュ関数237への入力を発生することにあるこ
とを想起されたい。INREG1レジスタ233の内容
はライン248を介してライン252へ出力され、ハッ
シュ関数237に入力される。同様に、INREG0レ
ジスタ235の内容はライン251及び253を介して
ハッシュ関数237へ出力される。ハッシュ関数237
の出力はライン255を介してマルチプレクサ256へ
伝送される。
【0181】INREG1レジスタ233の内容は、マ
ッチするストリングが見いだされない場合には、ライン
248、254及び258を介して出力ビット管理部2
60へ送られる。出力ビット管理部260の目的は、生
のデータバイト及びストリングを適当な標識が付加され
たビットストリングに符号化すること等にある。出力管
理部260の出力は、ライン262を介してビット−バ
イト変換器264へ伝送される。次にこのデータはライ
ン268を介して出力FIFO234に入力される。圧
縮されたバイトは、出力FIFO234からライン27
0を介して出力装置(図1の参照符号14)へ出力され
る。
【0182】INREG1レジスタ233の内容は又、
ライン248、254及び272を介して内部マッチバ
ッファ274へ送られる。内部マッチバッファ274の
目的は、マッチングプロセスの能力を効果的に向上させ
るための「ルックアサイド(lookaside)」バ
ッファとして機能することにある。マッチバッファ27
4の内容はバイト比較レジスタ276の内容と比較され
る。マッチバッファの内容は、ライン278上に多重化
されてバイト比較レジスタ276へ送られる。バイト比
較レジスタ276の内容は外部のRAM238内に格納
されている履歴アレイ102(図7)から得られる。履
歴アレイのエントリの内容は、ライン280を介してラ
ッチ282に入力され、次に、ライン284及び286
を介してバイト比較レジスタ276へ送られる。ブロッ
ク276によって実行されるバイト比較の結果は、ライ
ン288を介して圧縮コントローラ及びシーケンスユニ
ット230に伝達される。圧縮コントローラ及びシーケ
ンスユニット230は比較結果を評価し、制御ライン
(図示せず)を介して回路228の様々な要素に適切な
制御信号を送出する。
【0183】INREG0レジスタ235の内容は又、
ライン251及び290を介してマルチプレクサ292
へ送られ得る。マルチプレクサ292は調停を行いIN
REG0の内容をライン294を介してラッチ296へ
送る。ラッチ296の内容は、ラン298を介してRA
M238内のデータ構造の履歴アレイ102(図7)へ
出力される。
【0184】ライン280を介してRAM238から入
力されるデータは又、ラッチ282並びにライン28
4、300及び302を介してレジスタ304へ送られ
る。このパス上のデータは、NEXTと称される変数に
格納された古いハッシュポインタを含んでいる。レジス
タ304の内容は、ライン305、306及び307を
介してマルチプレクサ256へ出力される。レジスタ3
04の内容は又、ライン305及び308を介してオフ
セットレジスタ310に与えられる。オフセットレジス
タ310の機能については後述する。レジスタ304の
内容は又、ライン305、306及び312を介して、
MATCHPTRのための変数内容を含むレジスタ31
4へ送られる。レジスタ314の出力(MATCHPT
R)は、ライン316を介してマルチプレクサ256へ
送られる。レジスタ318の目的は、ポインタHPTR
をインクリメントすることにある。レジスタ318の内
容は、ライン320及び322を介してマルチプレクサ
256へ送られる。他に、レジスタ318の出力は又、
ライン320及び324を介してオフセットレジスタ3
10へ送られる。オフセット関数(オフセットレジスタ
310)の目的は、履歴アレイ中の適切なオフセットを
計算すること、又はライン324及び308を介してレ
ジスタ318及び304から入力されるデータからHP
TR−NEXTを計算することにある。
【0185】修正スイッチ328はライン330を介し
てオフセットレジスタ310に与えられ、これによって
オフセット関数はライン324を介して入力される現在
のHPTRのみを出力するようになる。修正スイッチ3
28が、オフセット関数が定められるように設定された
場合には、オフセット関数310の出力は、マルチプレ
クサ292及び出力ビット管理部260の何れかに送ら
れる。該出力が出力ビット管理部260へ送られる場合
には、それはライン332及び336を介して送られ
る。オフセットは出力ビット管理部260に於いて、符
号化ストリングに符号化される。他方、該出力はライン
332及び334を介してマルチプレクサ292へ送ら
れ、次にライン294を介してラッチ296へ、そして
ライン298を介してRAM238へ出力される。しか
し、修正スイッチ328が、オフセットレジスタ310
の出力が現在のHPTRであるように設定された場合に
は、該出力は、ライン294上の出力を調停するマルチ
プレクサ292へライン332及び334を介して送ら
れる。
【0186】出力ビット管理部260への符号化のため
の長さ入力は、回路図228の最下部に示されているレ
ジスタ338によって維持されている。レジスタ338
の出力はライン340を介して出力ビット管理部260
に与えられる。回路図228の最上部には、リフレッシ
ュ操作が行われる前の現在のサイクルカウントを維持す
るリフレッシュカウンタ342が示されている。リフレ
ッシュカウンタ342の出力はライン344を介してマ
ルチプレクサ256へ送られる。マルチプレクサ256
の目的は、RAM238内の適切なデータ構造を選択す
るためにライン344、316、322、307及び2
55上のアドレスの何れかを出力するかを調停すること
にある。
【0187】8.シフトレジスタを用いた第2の実施例 図14を参照し、シフトレジスタ構造を用いた実施例の
説明を行う。シフトレジスタアレイ103は、最大20
48キャラクタの既に処理された入力データ(圧縮さ
れ、又は生のデータとして圧縮されていない)を包含す
ることができる。データキャラクタはシフトレジスタ1
5の各エントリに格納させる。圧縮ユニット4(図3)
によって新たな入力データ受け取られると、本発明の装
置は該新たな入力データ中の少なくとも2バイトの「ス
トリング」がシフトレジスタ103内のストリングにマ
ッチするか否かを判定する。マッチした場合には、入力
データのそのストリングは符号化され、マッチしない場
合には、上述したようにそのストリングは生のデータと
して提供される。
【0188】図14についてより詳細に説明する。図1
4にはシフトレジスタアレイ103のごく一部のみが示
されている。即ち、2個のエントリHISTORY
(J)及びHISTORY(J+1)が示されている。
任意の時間Tに於いて、シフトレジスタアレイ103の
j番目のエントリの内容をHISTORY(j,t)
(j=1,…,MEMSIZE)で表す。履歴アレイを
用いた実施例では、シフトレジスタアレイは、実際のシ
フトレジスタ回路を用いて、又は修正された連想メモリ
アレイ等を用いて実現される。シフトレジスタエントリ
105及び107の出力側には、比較回路MATCH
(j)109及びMATCH(j+l)111が設けら
れている。これらの比較回路(MATCH(j)(j=
1,…,MEMSIZE)は、シフトレジスタアレイの
各エントリの出力及び同時伝送(broadcast)
バイトライン115に接続されている。シフトレジスタ
アレイ中のマッチングストリングの有無をチェックされ
ている入力データストリームは、ライン115を介して
同時伝送される。MATCH(j)回路109は、シフ
トレジスタエントリ105の出力と、ライン115を介
して同時伝送される入力データキャラクタとを比較す
る。同時伝送されたデータキャラクタがシフトレジスタ
エントリ105に格納されているキャラクタに等しい場
合には、MATCH(j)回路109に於いてビットが
1に設定される。他方、同時伝送されたバイトとエント
リ105に格納されているキャラクタとがマッチしない
場合には、MATCH(j)回路109に於いてビット
が0に設定される。入力データキャラクタは、全ての比
較回路(MATCH(j)(j=1,…,MENSIZ
E))に同時に伝送される。換言すれば、シフトレジス
タアレイ103の全てのエントリについて、パイプライ
ンの様式で動作が同時に行われる。
【0189】1個のバイトが同時伝送され、各比較回路
(MATCH(j=1,…,MENSIZE))に於い
て比較された後、そのバイトはシフトレジスタ103の
第1のエントリにシフトインされ、アレイの各エレメン
トは下記のように1だけ移動する。 HISTORY
(j+1,T+1)=HISTORY(j,T) (j=1,…,MENSIZE−1) HISTORY(1,T+1)=上記バイト 処理は、各MATCH回路に於ける比較のためにライン
115を介して同時伝送される入力データストリームの
次のバイトについて継続して行われる。
【0190】各比較回路MATCH(j)(j=1,
…,MEMSIZE))は、ANDゲート及びフリップ
フロップに関連づけられている。MATCH回路10
9、ANDゲート119及びフリップフロット123
は、アレイ全体を代表する回路である。同時に、AND
ゲート119には、ANDゲート119の先の出力を表
すフリップフロップ123の出力が入力される。AND
ゲート119の出力が1である場合には、入力データに
ついての現在及び過去の比較に於いてマッチが得られて
いる。しかし、ANDゲート119の出力が0である場
合には、入力データはシフトレジスタエントリ105の
内容ともはやマッチしていない。ANDゲート119及
びフリップフロップ123の目的は、入力データストリ
ームがシフトレジスタエントリ105に格納されている
データキャラクタにもはや連続してマッチしていないこ
とを検出することにある。
【0191】アレイの各フリップフロップは、STRI
NG(j,T)と称されるビットを保持している。新た
なストリングが始まった場合には、STRINGビット
はアレイ全体の各フリップフロップに於いて入力117
によって1に設定される。即ち、STRING(j,
t)=1(j=1,…,MEMSIZE)。比較回路に
於いて新たな入力データバイトのそれぞれが比較される
度に、STRINGの値は次のように更新される。即
ち、STRING(j,T+1)=STRING(j,
T)×MATCH(j)。この操作はANDゲート11
9に於いて行われる。従って、フリップフロップ123
のSTRINGビットは、それが1に設定され、シフト
レジスタアレイ(HISTORY(j,T))のエント
リが入力バイトに等しく、MATCH(j)が1になる
場合、及びそのような場合のみに於いて、セットされた
状態で保たれる。
【0192】シフトレジスタアレイに2個の入力バイト
が与えられた後、全てのSTRINGビットがクリア
(又は0に設定)された場合には、アレイ中にはマッチ
するストリングが存在しない。他方、あるSTRING
ビットがセット(又は1に設定)されたままである場合
には、アレイ中の少なくとも1個のストリングがマッチ
している。入力されるバイトは、全てのSTRINGビ
ットが0にクリアされるまで同時伝送され、アレイにシ
フトインされる。他の実施態様では、無限のマッチング
ストリングが発生することを避けるために、予め定めら
れた最大数の入力バイトが同時に伝送されアレイシフト
インされる。
【0193】各フリップフロップ119、121の出力
(STRING(j)、(j=1,…,MEMSIZ
E))は、一連のORゲート129に入力される。全て
のORゲート(1〜13)が0になった場合には、シフ
トレジスタ103にはもはやマッチするストリングは存
在しない。ステートマシン(state machin
e)の形をとるコントローラ131は、アレイ中の各エ
ントリについてマッチの数を蓄積する。コントローラ
は、シフトレジスタアレイの各エントリのストリング長
を追跡し、適切に符号化された各ストリングの長さ及び
エントリ及び/又は生のデータバイトを出力する。
【0194】シフトレジスタアレイにN個のバイトが入
力されると、ストリングマッチの長さは、STRING
ビットがセットされたバイトの数(N−1)であり、ス
トリングマッチのオフセットは、シフトレジスタアレイ
中でのエントリの位置である。1個よりも多いマッチン
グストリングが存在する場合には、優先符号化ネットワ
ークが何れのマッチングストリングを採るかを決定す
る。履歴アレイを用いた実施例では、優先ネットワーク
は、STRING(j,T+N−1)が0でないような
最小のインデクスjを返す。
【0195】伸張を行うために、シフトレジスタアレイ
103が用いられる。このシナリオの下では、シフトレ
ジスタアレイの内容は、符号化されたストリングのオフ
セットフィールドを用いて、ランダムアクセス手法での
アクセスされる。入力された圧縮データストリームから
生のバイトが取り出された場合には、そのバイトは、出
力データストリームへ出力され、また、シフトレジスタ
アレイ103にシフト入力される。符号化されたストリ
ングが取り出された場合には、オフセットはシフトレジ
スタへの「アドレス」として使用され、そのバイトがシ
フトレジスタから読み出され、シフトレジスタアレイ1
03にシフト入力される。入力される符号化データスト
リームを前もって解析し、パイプラインアドレス先読み
回路を構築することにより、スループットを最大化する
ためにパイプライン技法を用いることができる。
【0196】図15に、図14のシフトレジスタを用い
た符号化操作による結果のテーブルの一例を示す。入力
データストリームABCDが、一度に1キャラクタずつ
シフトレジスタアレイ103に同時伝送される。シフト
レジスタエントリには、既に6キャラクタABFABC
が存在している。シフトレジスタアレイ103の第1の
エントリは、Cに等しい(HISTORY(1)=
C)。シフトレジスタアレイ103の第2のエントリは
Bである(HISTORY(2)=B)。シフトレジス
タアレイ103の第3のエントリはAである(HIST
ORY(3)=A)。シフトレジスタアレイ103の第
4のエントリはFである(HISTORY(4)=
F)。シフトレジスタアレイ103の第5のエントリは
Bである(HISTORY(5)=B)。そして、シフ
トレジスタアレイ103の第6のエントリはAである
(HISTORY(6)=A)。同時伝送される第1の
入力バイトはAである。MATCH回路によって実行さ
れる比較操作の結果、シフトレジスタエントリHIST
ORY(6)及びHISTORY(3)に於いて、2個
のマッチが得られる。HISTORY(3)及びHIS
TORY(6)での比較の結果、1に等しいMATCH
ビットが出力される。残りのエントリではマッチが得ら
れないため、HISTORY(1)、HISTORY
(2)、HISTORY(4)及びHISTORY
(5)から出力されるMATCHビットは0に等しい。
入力バイトAはシフトレジスタアレイにシフト入力さ
れ、残りのキャラクラはアレイの次のエントリへシフト
される。キャラクタAはここで、シフトレジスタアレイ
の第1のロケーション(HISTORY(1))を占有
している。同時伝送される次の入力バイトはBである。
再び、シフトレジスタエントリHISTORY(3)及
びHISTORY(6)に於いて2個のマッチが見いだ
される。他の比較ではマッチが成立しないため、それら
のエントリの出力するMATCHブットは0に等しい。
もっともながいマッチングストリングは、シフトレジス
タエントリHISTORY(3)及びシフトレジスタエ
ントリHISTORY(6)に於いて生じることに注意
されたい。この時点で、双方は等しい2バイトの長さの
等しいマッチングストリングを有している。当然に、シ
フトレジスタエントリHISTORY(3)及びHIS
TORY(6)についてのSTRINGビットは1のま
まである。従って、コントローラ131の出力によって
マッチが生じていることが示され、この例では探索に対
して制限が課されていないため、比較は継続される。
【0197】入力バイトBは次にシフトレジスタアレイ
の第1のロケーション(HISTORY(1))にシフ
ト入力され、残りのキャラクタは、アレイの次のエント
リシフトされる。同時伝送される次の入力バイトはCで
ある。Cはシフトレジスタアレイのただ1個のエントリ
(HISTORY(3))に於いてマッチする。シフト
レジスタエントリHISTORY(6)はFを包含して
おり、これは同時伝送されたバイトCにマッチしない。
従って、最も長いマッチングストリングはシフトレジス
タエントリHISTORY(3)に存在する。コントロ
ーラ131は、シフトレジスタエントリHISTORY
(3)に於けるマッチの結果1のストリング長を蓄積し
ている。同時伝送されたバイトCは次にシフトレジスタ
アレイの第1のロケーションに入力され、他の全てのバ
イトはアレイ中で次のエントリへシフトされる。
【0198】同時伝送される次の入力バイトはDであ
る。入力バイトDに対してはマッチが得られない。従っ
て、最も長いマッチングストリングはシフトレジスタエ
ントリHISTORY(3)に於いて長さ3のキャラク
タ列ABCとして見いだされている。エントリの位置及
び長さの符号化は、図5に示した履歴アレイを用いた実
施例によって定められる(11000001101)。
【0199】このように本発明は例を挙げて、特に履歴
アレイを用いた実施例について説明されたが、本発明は
それらに限定されるものではない。本発明の本質的な精
神及び範囲から逸脱することなく本発明に対して更に様
々な修正及び改良を加えることができることが、当業者
には理解されるであろう。
【0200】
【発明の効果】本発明の圧縮/伸張システムによれば、
磁気ディスク記憶装置や磁気テープ記憶装置等のデジタ
ル記憶装置の容量を増大させることができる。本発明の
圧縮方法は完全に適合性があり、予め初期化された符号
化テーブルを必要とせず、バイトオリエンテッドなキャ
ラクタストリーム(例えばコンピュータファイル等)に
最適化されているので、従来技術に見られる多くの困難
を克服し、上述した従来の技術の何れよりも、より速い
速度でより高い圧縮率を達成することができる。本発明
の圧縮/伸張システムによれば、履歴アレイに於て、効
率的なストリング探索を行うために、ハッシュテーブル
を履歴バッファと組み合わせて使用し、ハッシュ「リフ
レッシュ」法を用いることにより、ハッシュデータ構造
の維持に必要とされるコンピュータのオーバーヘッドを
最小にすることができる。本発明の技術によれば、現在
利用できる集積回路技術を用いた数メガバイト/秒にも
のぼる入力速度であっても、入力データを高速に圧縮す
ることが可能である。
【図面の簡単な説明】
【図1】本発明による履歴アレイを用いた実施例の、圧
縮されていないデータを受け取り、圧縮されたデータを
出力する圧縮ユニットのブロック図である。
【図2】本発明による履歴アレイを用いた実施例の、圧
縮されたデータを受け取り、伸張されたデータを出力す
る伸張ユニットのブロック図である。
【図3】本発明によるシフトレジスタを用いる実施例
の、圧縮されていないデータを受け取り、圧縮されたデ
ータを出力する圧縮ユニットのブロック図である。
【図4】本発明によるシフトレジスタを用いる実施例
の、圧縮されたデータを受け取り、伸張されたデータを
出力する伸張ユニットのブロック図である。
【図5】本発明の両方の実施例によって用いられる、圧
縮フォーマットを示す図である。
【図6】両方の実施例の図5に示された圧縮フォーマッ
トによる、圧縮符号化の単純化された例を示す図であ
る。
【図7】入力データストリームを探索するために、本発
明の両方の実施例によって提供されるデータ構造を示す
図である。
【図8】両方の実施例の入力データストリームを符号化
するために、圧縮ユニット(図1)によって行われる圧
縮操作ルーチンのブロック流れ図である。
【図9】図7に示されたデータ構造のハッシュテーブル
を初期化するために、圧縮操作ルーチン(図8)で参照
される初期化ルーチンのブロック流れ図である。
【図10】図7に示されたデータ構造のハッシュテーブ
ルを部分的に再び初期化するために、圧縮操作ルーチン
(図8)で参照されるリフレッシュハッシュルーチンの
ブロック流れ図である。
【図11】伸張操作ルーチンのブロック流れ図である。
【図12】圧縮操作ルーチン(図8)のハードワイヤー
ド表現の概略ブロック図である。
【図13】外部RAMのFIFOのブロック図である。
【図14】シフトレジスタアレイ内の2つのエントリを
表わす第2の実施例と、探索機能を実行するための関連
する回路のブロック図である。
【図15】第2の実施例のシフトレジスタ内の、特定の
入力データストリングの探索を示す結果の表である。
【符号の説明】
230 圧縮コントローラ及びシーケンスユニット 232 入力FIFO 233 FIFOレジスタ 234 出力FIFO 235 FIFOレジスタ 237 ハッシュ関数 256 マルチプレクサ 260 出力ビット管理部 270 マッチバッファ 276 バイト比較レジスタ 282 ラッチ 292 マルチプレクサ 296 ラッチ 304 レジスタ(NEXTハッシュポインタ) 310 オフセットレジスタ 314 レジスタ(MATCHPTR) 318 レジスタ(HPTRカウンタ) 342 リフレッシュカウンタ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 グレン エー. ジョージ アメリカ合衆国 カリフォルニア 91106 パサデナ,ピー.オー. ボックス 60545 (72)発明者 グレン イー. アイビー アメリカ合衆国 カリフォルニア 91106 パサデナ,サウス ミシガン #202 146

Claims (95)

    【特許請求の範囲】
  1. 【請求項1】 入力データストリームを格納する複数の
    エントリを有する履歴アレイ手段と、 該履歴アレイ手段内の該エントリの1つを示す履歴アレ
    イポインタと、 複数のエントリを有するハッシュテーブル手段であっ
    て、該ハッシュテーブル手段の各エントリは該履歴アレ
    イ手段内の該エントリの1つを示すポインタを格納す
    る、ハッシュテーブル手段と、 複数のエントリを有するオフセットアレイ手段であっ
    て、該オフセットアレイ手段の各エントリは、該履歴ア
    レイ手段内の該エントリの1つから該履歴アレイ手段内
    の1個以上の他のエントリへのリンクが存在するならそ
    のリンクを供給する、オフセットアレイ手段と、 を備えているデータ圧縮装置。
  2. 【請求項2】 前記履歴アレイポインタを、前記履歴ア
    レイ手段内の次のエントリにインクリメントする手段
    と、前記入力データストリームの次のデータキャラクタ
    をハッシングする手段と、を更に備えている、請求項1
    に記載の装置。
  3. 【請求項3】 前記ハッシュテーブルエントリの各々に
    格納されている前記ポインタを周期的に調べて、該ハッ
    シュテーブルエントリにおける該ポインタが前記履歴ア
    レイポインタよりも所定量だけ異なっているかどうかを
    決定する手段を更に備えている、請求項1及び2のいず
    れかに記載の装置。
  4. 【請求項4】 前記手段は、前記ハッシュテーブル内の
    前記エントリを無効値と置き換えて、該エントリを再初
    期化する手段を更に備えている、請求項3に記載の装
    置。
  5. 【請求項5】 前記ハッシュテーブルの全エントリを無
    効値と置き換えることによって該ハッシュテーブルを初
    期化する手段を更に備えている、請求項4に記載の装
    置。
  6. 【請求項6】 入力データキャラクタストリームを可変
    長符号化データストリームに変換する方法であって、 予め処理された入力データキャラクタを参照用の格納手
    段に格納するステップと、 該データ格納手段内で該入力データストリームに適合
    (マッチング)する該予め処理された入力データキャラ
    クタの最長データストリングのサーチを実行するステッ
    プと、 該格納手段内でマッチングデータストリングが見つかっ
    た場合には、該マッチングデータストリングが見つかっ
    たことを示す標識と、該マッチングデータストリングの
    長さの可変長指示子と、該マッチングデータストリング
    の該格納手段内での位置を示すポインタと、を割り当て
    ることによって該マッチングデータストリングを符号化
    するステップであって、該マッチングデータストリング
    を符号化するステップは、所定の手法に従う符号化体系
    によって該ポインタと該可変長指示子を表すステップを
    包含しており、該所定の手法は、該入力データストリー
    ムの2個のキャラクタのマッチングストリングを、2個
    より少ない該入力データストリームのキャラクタに確実
    に圧縮する手法である、マッチングデータストリングを
    符号化するステップと、 該格納手段内でマッチング入力データストリングが見つ
    からなかった場合には、該格納手段内でマッチングデー
    タストリングが見つからなかったことを示す「生」デー
    タ標識と、該入力データストリームの最初のキャラクタ
    とを割り当てることによって該入力データストリームの
    該最初のキャラクタを符号化するステップと、を包含し
    ており、 このことにより、該入力データストリームが可変長符号
    化データストリームに変換される方法。
  7. 【請求項7】 前記格納手段内で前記最長マッチングデ
    ータストリングのサーチを実行する前記ステップは、該
    格納手段内における該最長マッチングデータストリング
    に対する所定回数の照会に該サーチを制限するステップ
    をさらに包含する、請求項6に記載の方法。
  8. 【請求項8】 符号化された前記入力データストリーム
    の入力データキャラクタを放棄するステップと、 該入力データストリームを更に符号化するために、前記
    方法の1つ以上のステップを実行するステップと、 を更に包含する、請求項6に記載の方法。
  9. 【請求項9】 前記ポインタおよび前記可変長指示子を
    付加する前記ステップは、前記マッチングデータストリ
    ングの前記格納手段内での位置に従って長い形式または
    短い形式のいずれかによって該ポインタを表すステップ
    を更に包含する、請求項6に記載の方法。
  10. 【請求項10】 2個のキャラクタマッチングデータス
    トリングの前記可変長指示子を二進ワード「00」として
    定義するステップを更に包含する、請求項6に記載の方
    法。
  11. 【請求項11】 前記ポインタが前記長い形式または短
    い形式のいずれであるかを示す1桁二進ワードを提供す
    るステップを更に包含する、請求項9に記載の方法。
  12. 【請求項12】 前記ポインタが前記格納手段内での12
    7個の異なる位置を示すように、前記短い形式を7桁二
    進ワードとして符号化するステップを更に包含する、請
    求項11に記載の方法。
  13. 【請求項13】 前記ポインタが前記格納手段内での20
    47個の異なる位置を示すように、前記長い形式のポイン
    タを11桁二進ワードとして符号化するステップを更に
    包含する、請求項11に記載の方法。
  14. 【請求項14】 以下の表に従って前記可変長指示子を
    符号化するステップを更に包含する、請求項6、12、
    及び13のいずれかに記載の方法: 【表1】
  15. 【請求項15】 前記符号化体系によって前記可変長指
    示子を表す前記ステップは、前記マッチングデータスト
    リングが2個、3個、および4個のキャラクタ長である
    場合の該マッチングデータストリングの長さを定義する
    第1のワード群を定義するステップと、 該マッチングデータストリングが5個、6個、および7
    個のキャラクタ長である場合の該マッチングデータスト
    リングの長さを定義する該第1のワード群および第2の
    ワード群を定義するステップと、 該マッチングデータストリングが8個から22個のキャ
    ラクタ長である場合の該マッチングデータストリングの
    長さを定義する該第1のワード群、該第2のワード群、
    および第3のワード群を定義するステップと、 該マッチングデータストリングが23個から37個のキ
    ャラクタ長である該マッチングデータストリングの長さ
    を定義する該第1のワード群、該第2のワード群、該第
    3のワード群、および第4のワード群を定義するステッ
    プと、 を更に包含する、請求項6に記載の方法。
  16. 【請求項16】 前記第1のワード群を定義する前記ス
    テップは、以下の表によって前記2個、3個、および4
    個のキャラクタ長を表すステップを更に包含する、請求
    項15に記載の方法: 00 2個のキャラクタ 01 3個のキャラクタ 10 4個のキャラクタ
  17. 【請求項17】 前記第1および第2のワード群を定義
    する前記ステップは、以下の表によって前記5個、6
    個、および7個のキャラクタ長を表すステップを更に包
    含する、請求項50に記載の方法: 11 00 5個のキャラクタ 11 01 6個のキャラクタ 11 10 7個のキャラクタ
  18. 【請求項18】 前記第1、第2、および第3のワード
    群を定義する前記ステップは、以下の表によって前記8
    個から22個のキャラクタ長を表すステップを更に包含
    する、請求項15に記載の方法: 11 11 0000 8個のキャラクタ 11 11 0001 9個のキャラクタ 11 11 0010 10個のキャラクタ 11 11 0011 11個のキャラクタ 11 11 0100 12個のキャラクタ 11 11 0101 13個のキャラクタ 11 11 0110 14個のキャラクタ 11 11 0111 15個のキャラクタ 11 11 1000 16個のキャラクタ 11 11 1001 17個のキャラクタ 11 11 1010 18個のキャラクタ 11 11 1011 19個のキャラクタ 11 11 1100 20個のキャラクタ 11 11 1101 21個のキャラクタ 11 11 1110 22個のキャラクタ
  19. 【請求項19】 前記最長マッチングデータストリング
    のサーチを前記格納手段内で実行する前記ステップは、
    ハッシュ関数を実行するステップを更に包含する、請求
    項6に記載の方法。
  20. 【請求項20】 前記入力データストリームの前記可変
    長符号化データストリームへの変換はデータ圧縮システ
    ム内で起こり、 該データ圧縮システムは、該入力データストリームを格
    納する複数のエントリを有する前記格納手段と、該格納
    手段内の最新エントリを示す格納手段ポインタと、複数
    のエントリを有するハッシュテーブル手段であって、該
    ハッシュテーブル手段の各エントリは該格納手段の該エ
    ントリの1つを示すポインタを格納する、ハッシュテー
    ブル手段と、複数のエントリを有するオフセットアレイ
    手段であって、該オフセットアレイ手段の各エントリ
    は、該格納手段内の該エントリの1個から該格納手段内
    の1個以上のエントリまでのリンクを供給する、オフセ
    ットアレイ手段と、を有し、 該格納手段内での前記サーチを実行するステップは、更
    に、 該ハッシュ関数が該ハッシュテーブル手段の該エントリ
    の1つにポインタを提供するステップと、 該ハッシュ関数の結果によって示される該ハッシュテー
    ブルエントリにおいて格納されている該ポインタを得る
    ステップと、 該格納手段ポインタと、該ハッシュテーブル手段から読
    み出された該ポインタとの差を計算するステップと、 該格納手段ポインタによって示された該オフセットアレ
    イ手段に該差を格納するステップと、 該ハッシュ関数によって示された該ハッシュテーブルエ
    ントリに該格納手段ポインタを格納するステップと、 を包含する、請求項19に記載の方法。
  21. 【請求項21】 前記格納手段ポインタを前記格納手段
    内の次のエントリにインクリメントするステップと、 該格納手段の該次のエントリをハッシングするために、
    前記方法の1つ以上の要素を実行するステップと、 を包含する、請求項20に記載の方法。
  22. 【請求項22】 前記格納手段内のサーチを実行する前
    記ステップは、前記ハッシュテーブルエントリの各々に
    おいて格納された前記ポインタを周期的に調べて、該エ
    ントリの各々の該ポインタと、前記格納手段ポインタと
    の前記差が所定量よりも大きいかどうかを決定するステ
    ップをさらに包含する、請求項55に記載の方法。
  23. 【請求項23】 前記ステップは、前記差が前記所定量
    よりも大きい場合には、前記ハッシュテーブル内の前記
    エントリを無効値と置き換えて、該エントリを再初期化
    するステップを更に包含する、請求項22に記載の方
    法。
  24. 【請求項24】 前記可変長符号化データストリームの
    伸長の間に検出された圧縮化データマーカーの終わりを
    該符号化データに付加することによって、符号化する前
    記方法を完了するステップを更に包含する、請求項23
    に記載の方法。
  25. 【請求項25】 前記ハッシュテーブルのすべてのエン
    トリを無効値と置き換えることによって前記ハッシュテ
    ーブルを初期化するステップを更に包含する、請求項2
    4に記載の方法。
  26. 【請求項26】 前記可変長符号化データストリームを
    復号化するステップであって、該ステップは、 該可変長符号化データストリームを、各々が前記標識の
    1個で始まっている独立した部分に分解するステップ
    と、 該標識が生データ標識であるのかまたは該符号化マッチ
    ングデータストリングを示す前記標識であるのかを決定
    するために、該独立した部分の各々の該標識を評価する
    ステップと、 を更に包含する、請求項6に記載の方法。
  27. 【請求項27】 前記標識が前記符号化マッチングデー
    タストリングを示す場合に、前記マッチングデータスト
    リングを発生させるために、前記可変長指示子と前記ポ
    インタとを解釈し、それによって元の入力データストリ
    ームの部分を再構築するステップを更に包含する、請求
    項26に記載の方法。
  28. 【請求項28】 前記標識が前記生データ標識を示す場
    合に、前記符号化入力データストリームの前記最初のキ
    ャラクタを得て、それによって元の入力データストリー
    ムの部分を再構築するステップを更に包含する、請求項
    26に記載の方法。
  29. 【請求項29】 出力データキャラクタストリームを格
    納する複数のエントリを有する格納手段と、該格納手段
    内の最新のエントリを示す格納手段ポインタとを有する
    データ伸長システムにおいて、可変長符号化入力データ
    ストリームを出力データキャラクタストリームに変換す
    る方法であって、該方法は、 該可変長符号化入力データストリームを、各々が標識で
    開始する独立した部分に分解するステップと、 該標識が生データの標識であるのか、または符号化マッ
    チングデータストリングを示す標識であるのかを決定す
    るために、該独立した部分の各々の該標識を評価するス
    テップと、 を有しており、 該標識が生データの標識である場合には、 該独立した部分から生データバイトを分解するステップ
    と、該生データバイトを出力するステップと、該生デー
    タバイトを該格納手段に配置するステップと、を包含
    し、 該標識が符号化マッチングデータストリングを示す該標
    識である場合には、該マッチングデータストリングの長
    さの可変長指示子と、該マッチングデータストリングの
    該格納手段内での位置を示すオフセットとを分解するス
    テップであって、該独立した部分が2個のキャラクタの
    マッチングデータストリングを示す場合に、該独立した
    部分は該出力データキャラクタストリームの2個のキャ
    ラクタより小さい、ステップと、該格納手段内の該位置
    に該マッチングデータストリングを該長さで出力するス
    テップと、該マッチングデータストリングを該格納手段
    内に配置するステップと、 を包含する、方法。
  30. 【請求項30】 複数のエントリを有する履歴アレイ手
    段と、履歴アレイポインタと、複数のエントリを有する
    ハッシュテーブル手段と、複数のエントリを有するオフ
    セットアレイ手段と、を備えているデータ圧縮システム
    において、データを圧縮する方法であって、該方法は、 該履歴アレイ手段の該エントリ内の入力データストリー
    ムを格納するステップと、 該履歴アレイ手段内の該エントリの1つを該履歴アレイ
    ポインタによって示すステップと、 該ハッシュテーブル手段の各エントリ内に、該履歴アレ
    イ手段の該エントリの1つを示すポインタを格納するス
    テップと、 該履歴アレイ手段内の該エントリの1つから該履歴アレ
    イ手段内の1個以上の他のエントリへのリンクを該オフ
    セットアレイ手段の該エントリによって供給するステッ
    プと、 を包含する方法。
  31. 【請求項31】 前記履歴アレイポインタを、前記履歴
    アレイ手段内の次のエントリにインクリメントするステ
    ップと、 前記入力データストリームの次のデータキャラクタをハ
    ッシングするステップと、 を包含する、請求項30に記載の方法。
  32. 【請求項32】 前記ハッシュテーブルエントリの各々
    に格納されている前記ポインタを周期的に調べて、該ハ
    ッシュテーブルエントリにおける該ポインタが前記履歴
    アレイポインタよりも所定量だけ異なっているかどうか
    を決定するステップを更に包含する、請求項30及び3
    1のいずれかに記載の方法。
  33. 【請求項33】 前記ハッシュテーブル内の前記エント
    リを無効値と置き換えて、該エントリを再初期化するス
    テップを更に包含する、請求項32に記載の方法。
  34. 【請求項34】 前記ハッシュテーブルの全エントリを
    無効値と置き換えることによって該ハッシュテーブルを
    初期化するステップを更に包含する、請求項33に記載
    の装置。
  35. 【請求項35】 入力データキャラクタストリームを可
    変長符号化データストリームに変換する装置であって、 予め処理された入力データキャラクタを参照用に格納す
    る格納手段と、 該入力データストリームに適合(マッチング)する該予
    め処理された入力データキャラクタの最長データストリ
    ングのサーチを該格納手段内で実行する手段と、 該マッチングデータストリングが見つかったことを示す
    標識と、該マッチングデータストリングの長さの可変長
    指示子と、該マッチングデータストリングの該格納手段
    内での位置を示すポインタと、を割り当てることによっ
    て該マッチングデータストリングを符号化する手段と、
    所定の手法に従う符号化体系によって該ポインタと該可
    変長指示子を表す手段であって、該所定の手法は、該入
    力データストリームの2個のキャラクタのマッチングス
    トリングを、2個より少ない該入力データストリームの
    キャラクタに確実に圧縮する手法である、手段と、 該格納手段内でマッチングデータストリングが見つから
    なかったことを示す「生」データ標識と、該入力データ
    ストリームの最初のキャラクタとを割り当てることによ
    って該入力データストリームの該最初のキャラクタを符
    号化する手段と、を備えており、 このことにより、該入力データストリームが可変長符号
    化データストリームに変換される装置。
  36. 【請求項36】 前記格納手段内における前記最長マッ
    チングデータストリングに対する所定回数の照会に前記
    サーチを制限する手段をさらに備えている、請求項35
    に記載の装置。
  37. 【請求項37】 符号化された前記入力データストリー
    ムの入力データキャラクタを放棄する手段を更に備えて
    いる、請求項35に記載の装置。
  38. 【請求項38】 前記マッチングデータストリングの前
    記格納手段内での位置に従って長い形式または短い形式
    のいずれかによって前記ポインタを表す手段を更に備え
    ている、請求項35に記載の装置。
  39. 【請求項39】 2個のキャラクタマッチングデータス
    トリングの前記可変長指示子を二進ワード「00」として
    定義する手段を更に備えている、請求項35に記載の装
    置。
  40. 【請求項40】 前記ポインタが前記長い形式または短
    い形式のいずれであるかを示す1桁二進ワードを提供す
    る手段を更に備えている、請求項38に記載の装置。
  41. 【請求項41】 前記ポインタが前記格納手段内での12
    7個の異なる位置を示すように、前記短い形式を7桁二
    進ワードとして符号化する手段を更に備えている、請求
    項40に記載の装置。
  42. 【請求項42】 前記ポインタが前記格納手段内での20
    47個の異なる位置を示すように、前記長い形式のポイン
    タを11桁二進ワードとして符号化する手段を更に備え
    ている、請求項40に記載の装置。
  43. 【請求項43】 以下の表に従って前記可変長指示子を
    符号化する手段を更に備えている、請求項35、41、
    及び42のいずれかに記載の装置: 【表2】
  44. 【請求項44】 前記マッチングデータストリングが2
    個、3個、および4個のキャラクタ長である場合の該マ
    ッチングデータストリングの長さを定義する第1のワー
    ド群を定義する手段と、 該マッチングデータストリングが5個、6個、および7
    個のキャラクタ長である場合の該マッチングデータスト
    リングの長さを定義する該第1のワード群および第2の
    ワード群を定義する手段と、 該マッチングデータストリングが8個から22個のキャ
    ラクタ長である場合の該マッチングデータストリングの
    長さを定義する該第1のワード群、該第2のワード群、
    および第3のワード群を定義する手段と、 該マッチングデータストリングが23個から37個のキ
    ャラクタ長である該マッチングデータストリングの長さ
    を定義する該第1のワード群、該第2のワード群、該第
    3のワード群、および第4のワード群を定義する手段
    と、 をさらに備えている、請求項35に記載の装置。
  45. 【請求項45】 以下の表によって前記2個、3個、お
    よび4個のキャラクタ長を表す手段を更に備えている、
    請求項44に記載の装置: 00 2個のキャラクタ 01 3個のキャラクタ 10 4個のキャラクタ
  46. 【請求項46】 以下の表によって前記5個、6個、お
    よび7個のキャラクタ長を表す手段を更に備えている、
    請求項44に記載の装置: 11 00 5個のキャラクタ 11 01 6個のキャラクタ 11 10 7個のキャラクタ
  47. 【請求項47】 以下の表によって前記8個から22個
    のキャラクタ長を表す手段を更に備えている、請求項4
    4に記載の装置: 11 11 0000 8個のキャラクタ 11 11 0001 9個のキャラクタ 11 11 0010 10個のキャラクタ 11 11 0011 11個のキャラクタ 11 11 0100 12個のキャラクタ 11 11 0101 13個のキャラクタ 11 11 0110 14個のキャラクタ 11 11 0111 15個のキャラクタ 11 11 1000 16個のキャラクタ 11 11 1001 17個のキャラクタ 11 11 1010 18個のキャラクタ 11 11 1011 19個のキャラクタ 11 11 1100 20個のキャラクタ 11 11 1101 21個のキャラクタ 11 11 1110 22個のキャラクタ
  48. 【請求項48】 ハッシュ関数を実行する手段を更に備
    えている、請求項35に記載の装置。
  49. 【請求項49】 前記格納手段は前記入力データストリ
    ームを格納する複数のエントリを有し、 該格納手段内の最新エントリを示す格納手段ポインタ
    と、 複数のエントリを有するハッシュテーブル手段であっ
    て、該ハッシュテーブル手段の各エントリは該格納手段
    の該エントリの1つを示すポインタを格納する、ハッシ
    ュテーブル手段と、 複数のエントリを有するオフセットアレイ手段であっ
    て、該オフセットアレイ手段の各エントリは該格納手段
    内の該エントリの1個から該格納手段内の1個以上のエ
    ントリまでのリンクを供給する、オフセットアレイ手段
    と、 該ハッシュテーブル手段の該エントリの1つにポインタ
    を供給するハッシュ関数を実行する手段と、 該ハッシュ関数の結果によって示される該ハッシュテー
    ブルエントリにおいて格納されている該ポインタを得る
    手段と、 該格納手段ポインタと、該ハッシュテーブル手段から読
    み出された該ポインタとの差を計算する手段と、 該格納手段ポインタによって示された該オフセットアレ
    イ手段に該差を格納する手段と、 該ハッシュ関数によって示された該ハッシュテーブルエ
    ントリに該格納手段ポインタを格納する手段と、 を備えている、請求項48に記載の装置。
  50. 【請求項50】 前記格納手段ポインタを前記格納手段
    内の次のエントリにインクリメントする手段を更に備え
    ている、請求項49に記載の装置。
  51. 【請求項51】 前記ハッシュテーブルエントリの各々
    において格納された前記ポインタを周期的に調べて、該
    エントリの各々の該ポインタと、前記格納手段ポインタ
    との前記差が所定量よりも大きいかどうかを決定する手
    段を更に備えている、請求項49に記載の装置。
  52. 【請求項52】 前記ハッシュテーブル内の前記エント
    リを無効値と置き換えて、該エントリを再初期化する手
    段を更に備えている、請求項51に記載の装置。
  53. 【請求項53】 前記可変長符号化データストリームの
    伸長の間に検出された圧縮化データマーカーの終わりを
    該符号化データに付加する手段を更に備えている、請求
    項52に記載の装置。
  54. 【請求項54】 前記ハッシュテーブルのすべてのエン
    トリを無効値と置き換えることによって該ハッシュテー
    ブルを初期化する手段を更に備えている、請求項53に
    記載の方法。
  55. 【請求項55】 前記可変長符号化データストリームを
    復号化する手段と、 該可変長符号化データストリームを、各々が前記標識の
    1個で始まっている独立した部分に分解する手段と、 該標識が生データ標識であるのかまたは該符号化マッチ
    ングデータストリングを示す前記標識であるのかを決定
    するために、該別々の部分の各々の該標識を評価する手
    段と、 を備えている、請求項35に記載の装置。
  56. 【請求項56】 前記マッチングデータストリングを発
    生させるために、前記可変長指示子と前記ポインタとを
    解釈し、これによって元の入力データストリームの部分
    を再構築する手段を更に備えている、請求項55に記載
    の装置。
  57. 【請求項57】 前記符号化入力データストリームの前
    記最初のキャラクタを得て、これによって元の入力デー
    タストリームの部分を再構築する手段を更に備えてい
    る、請求項55に記載の装置。
  58. 【請求項58】 データ伸長システムにおいて、可変長
    符号化入力データストリームを出力データキャラクタス
    トリームに変換する装置であって、 該出力データキャラクタストリームを格納する前記複数
    のエントリを有する格納手段と、 該格納手段内の最新のエントリを示す格納手段ポインタ
    と、 該可変長符号化入力データストリームを、各々が標識で
    開始する独立した部分に分解する手段と、 該標識が生データの標識であるのか、または符号化マッ
    チングデータストリングを示す標識であるのかを決定す
    るために、該独立した部分の各々の該標識を評価する手
    段と、 該独立した部分から生データバイトを分解する手段と、
    該生データバイトを出力する手段と、該生データバイト
    を該格納手段に配置する手段と、 該マッチングデータストリングの長さの可変長指示子
    と、該マッチングデータストリングの該格納手段内での
    位置を示すオフセットとを分解する手段であって、該独
    立した部分が2個のキャラクタのマッチングデータスト
    リングを示す場合に、該独立した部分は該出力データキ
    ャラクタストリームの2個のキャラクタより小さい、手
    段と、該格納手段内の該位置に該マッチングデータスト
    リングを該長さで出力する手段と、該マッチングデータ
    ストリングを該格納手段内に配置する手段と、 を備えている、装置。
  59. 【請求項59】 入力データストリームを可変長符号化
    データストリームに変換する装置であって、 該入力データストリームに適合(マッチング)する最長
    データストリームのサーチを履歴アレイ内で実行する手
    段であって、該履歴アレイは複数のエントリを有し、該
    履歴アレイの各エントリは該入力データストリームを格
    納する、手段と、 該履歴アレイ手段内に見いだされる該マッチングデータ
    ストリームを符号化する符号化手段と、 該データ圧縮システムとは分離したRAMであって、該
    履歴アレイを有し、該データ圧縮システムへのまたは該
    データ圧縮システムからのデータ転送をバッファするF
    IFOデータバッファを有する、RAMと、 を備えている、装置。
  60. 【請求項60】 入力データストリームを可変長符号化
    データストリームに変換するデータ圧縮システムを有す
    る装置であって、該装置は、 該入力データストリームを該可変長符号化データストリ
    ームに変換する間に該データ圧縮システムによって参照
    される該入力データストリームを格納するRAMを備え
    ており、該RAMは、該圧縮システムへのおよび該圧縮
    システムからの該入力データストリームの転送をバッフ
    ァするFIFOデータバッファを有する、装置。
  61. 【請求項61】 入力データキャラクタを複数のデータ
    キャラクタを含むデータストリームと比較する方法であ
    って、 該データストリームの該データキャラクタをシフト手段
    に格納するステップであって、該シフト手段は複数のエ
    ントリを有し、該シフト手段の各エントリは該データス
    トリームの該データキャラクタの1つを格納する、ステ
    ップと、 該入力データキャラクタを該シフト手段の各エントリに
    同時伝送するステップと、 該シフト手段の各エントリの該格納されたデータキャラ
    クタの各々を該シフト手段の別のエントリに転送するス
    テップと、 該シフト手段の各エントリに対して、該格納されたデー
    タキャラクタが該入力されたデータキャラクタにマッチ
    ングするかどうかを決定するために、該エントリの該格
    納されたデータキャラクタを該入力データキャラクタと
    比較するステップと、 該シフト手段の各エントリに対して、該比較の結果を個
    別に蓄積するステップとを包含する方法。
  62. 【請求項62】 前記シフト手段の各エントリに対して
    該結果の蓄積を格納するステップをさらに包含する、請
    求項61に記載の方法。
  63. 【請求項63】 前記格納されている前記比較の結果
    を、後の入力データキャラクタに対する比較の結果と比
    較するステップをさらに包含する、請求項62に記載の
    方法。
  64. 【請求項64】 1つ以上の前記入力データキャラクタ
    のストリングを可変長符号化データストリームに変換す
    るステップをさらに包含し、該変換するステップは、 マッチング入力データキャラクタが前記シフト手段内に
    見つかった場合に、該マッチング入力データキャラクタ
    が見つかったことを示す標識と、該マッチング入力デー
    タキャラクタの長さの可変長指示子および該マッチング
    入力データキャラクタの少なくとも1つのキャラクタを
    有する該シフト手段の該エントリを示すポインタを含む
    置換コードとを割り当てることによって、該マッチング
    入力データキャラクタを符号化するステップと、 マッチング入力データキャラクタが該シフト手段内に見
    つからなかった場合に、「生の」データ標識と該入力デ
    ータキャラクタの最初のキャラクタとを割り当てること
    によって、該入力データキャラクタの該最初のキャラク
    タを符号化するステップとを包含し、これにより、該デ
    ータストリームは該可変長符号化データストリームに変
    換される、請求項61に記載の方法。
  65. 【請求項65】 前記比較の結果の蓄積のどちらが前記
    マッチング入力データキャラクタの最長ストリングに対
    応するかを決定するために、該蓄積を評価するステップ
    をさらに包含する、請求項64に記載の方法。
  66. 【請求項66】 前記シフト手段の前記比較を所定量の
    入力データキャラクタに制限するステップをさらに包含
    する、請求項64に記載の方法。
  67. 【請求項67】 前記比較の結果の蓄積のどちらが前記
    マッチング入力データキャラクタの最長ストリングに対
    応するかを決定するために、該蓄積を評価するステッ
    プ、および、等しい長さの該最長ストリングが1つより
    多くあるとき、該最長ストリングに優先順位をつけるス
    テップをさらに包含する、請求項66に記載の方法。
  68. 【請求項68】 前記優先順位をつけるステップが、前
    記最長ストリングのうち最も早いものを選択するステッ
    プをさらに包含する、請求項67に記載の方法。
  69. 【請求項69】 前記可変長符号化データストリームを
    復号化するステップをさらに包含し、該ステップは、 該符号化データストリームを、各々が前記標識の1個で
    始まっているいくつかの独立した部分に分解する、ステ
    ップと、 該独立した部分の該標識が前記生のデータ標識を示すの
    か、または該標識が前記符号化されたマッチング入力デ
    ータキャラクタを示すのかを決定するために、該標識を
    評価するステップとを包含する、請求項64に記載の方
    法。
  70. 【請求項70】 前記標識が前記符号化されたマッチン
    グ入力データキャラクタを示す場合に、該マッチング入
    力データキャラクタを生成するための前記置換コードの
    前記長さ指示子と前記ポインタとを解釈するステップ
    と、 これにより、前記オリジナルのデータストリームの一部
    を再構築するステップとをさらに包含する、請求項69
    に記載の方法。
  71. 【請求項71】 前記標識が前記生のデータ標識を示す
    場合に、前記符号化データストリームの前記最初のキャ
    ラクタを得て、これにより、前記オリジナルのデータス
    トリームの一部を再構築するステップをさらに包含す
    る、請求項69に記載の方法。
  72. 【請求項72】 データ伸張システムにおいて可変長符
    号化データストリームを出力データキャラクタストリー
    ムに変換する方法であって、該データ伸張システムはシ
    フト手段を備え、該シフト手段は複数のエントリを有
    し、該シフト手段の各エントリは該出力データキャラク
    タストリームのデータキャラクタを格納するものであっ
    て、該方法は、 該可変長符号化入力データストリームを、各々が標識を
    先頭とするいくつかの独立した部分に分解するステップ
    と、 該独立した部分の各々の該標識が生のデータ標識である
    か、または符号化されたマッチングデータストリングを
    示す標識であるかを決定するために、該標識を評価する
    ステップと、 該標識が生のデータ標識である場合に、該独立した部分
    から生のデータバイトを分解するステップ、該生のデー
    タバイトを出力するステップ、および該生のデータバイ
    トを該シフト手段内に配置するステップと、 該標識が符号化されたマッチングデータストリングを示
    す標識である場合に、該マッチングデータストリングの
    長さの可変長指示子と、該マッチングデータストリング
    の最初のキャラクタを含む該シフト手段内のエントリを
    示すオフセットとを分解するステップ、該長さのための
    該シフト手段内の該エントリでの該マッチングデータス
    トリングを出力するステップ、および該マッチングデー
    タストリングを該シフト手段内に配置するステップとを
    包含する方法。
  73. 【請求項73】 データ伸張システムにおいて可変長符
    号化データストリームを出力データキャラクタストリー
    ムに変換する装置であって、該データ伸張システムはシ
    フト手段を備え、該シフト手段は複数のエントリを有
    し、該シフト手段の各エントリは該出力データキャラク
    タストリームのデータキャラクタを格納するものであっ
    て、該装置は、 該可変長符号化入力データストリームを、各々が標識を
    先頭とするいくつかの独立した部分に分解する手段と、 該独立した部分の各々の該標識が生のデータ標識である
    か、または符号化されたマッチングデータストリングを
    示す標識であるかを決定するために、該標識を評価する
    手段と、 該独立した部分から生のデータバイトを分解する手段、
    該生のデータバイトを出力する手段、および該生のデー
    タバイトを該シフト手段内に配置する手段と、 該マッチングデータストリングの長さの可変長指示子
    と、該マッチングデータストリングの最初のキャラクタ
    を含む該シフト手段内のエントリを示すオフセットとを
    分解する手段、該長さのための該シフト手段内の該エン
    トリでの該マッチングデータストリングを出力する手
    段、および該マッチングデータストリングを該シフト手
    段内に配置する手段とを備えた装置。
  74. 【請求項74】 入力データキャラクタを複数のデータ
    キャラクタを含むデータストリームと比較する装置であ
    って、 該データストリームの該データキャラクタを格納する手
    段であって、該格納手段は複数のエントリを有し、該格
    納手段の各エントリは該データストリームの該データキ
    ャラクタの1つを格納する、手段と、 該入力データキャラクタを該格納手段の各エントリに同
    時伝送する手段と、 該格納手段の各エントリに対して、該格納されたデータ
    キャラクタが該入力されたデータキャラクタに適合(マ
    ッチング)するかどうかを決定するために、該エントリ
    の該格納されたデータキャラクタを該入力データキャラ
    クタと比較する手段と、 該格納手段の各エントリに対して、該比較の結果を個別
    に蓄積する手段とを備えた装置。
  75. 【請求項75】 前記格納手段の各エントリに対して該
    結果の蓄積を格納する手段をさらに備えた、請求項74
    に記載の装置。
  76. 【請求項76】 前記比較の前記格納された結果を、後
    の入力データキャラクタに対する比較の結果と比較する
    手段をさらに備えた、請求項75に記載の装置。
  77. 【請求項77】 1つ以上の前記入力データキャラクタ
    よりなるストリングを可変長符号化データストリームに
    変換する手段をさらに備え、該手段は、 マッチング入力データキャラクタが見つかったことを示
    す標識と、該マッチング入力データキャラクタの長さの
    可変長指示子および該マッチング入力データキャラクタ
    の少なくとも1つのキャラクタを有する該格納手段の該
    エントリを示すポインタを含む置換コードとを割り当て
    ることによって、該マッチング入力データキャラクタを
    符号化する手段と、 「生の」データ標識と該入力データキャラクタの最初の
    キャラクタとを割り当てることによって、該入力データ
    キャラクタの該最初のキャラクタを符号化する手段とを
    備えた、請求項74に記載の装置。
  78. 【請求項78】 前記比較の結果の蓄積のどちらが前記
    マッチング入力データキャラクタの最長ストリングに対
    応するかを決定するために、該蓄積を評価する手段をさ
    らに備えた、請求項77に記載の装置。
  79. 【請求項79】 前記格納手段の前記比較を所定数の入
    力データキャラクタに限定する手段をさらに備えた、請
    求項77に記載の装置。
  80. 【請求項80】 前記比較の結果の蓄積のどちらが前記
    マッチング入力データキャラクタの最長ストリングに対
    応するかを決定するために、該蓄積を評価する手段、お
    よび、等しい長さの該最長ストリングが1つより多くあ
    るとき、該最長ストリングに優先順位をつける手段をさ
    らに備えた、請求項79に記載の装置。
  81. 【請求項81】 前記優先順位をつける手段が、前記最
    長ストリングのうち最も早いものを選択する手段をさら
    に備えた、請求項80に記載の装置。
  82. 【請求項82】 前記可変長符号化データストリームを
    復号化する手段をさらに包含し、該手段が、 該符号化データストリームを、各々が前記標識の1つを
    先頭とするいくつかの独立した部分に分解する手段と、 該独立した部分の該標識が前記生のデータ標識を示すの
    か、または該標識が前記符号化されたマッチング入力デ
    ータキャラクタを示すのかを決定するために、該標識を
    評価する手段とを備えた、請求項77に記載の装置。
  83. 【請求項83】 前記マッチング入力データキャラクタ
    を生成するための前記置換コードの前記長さ指示子と前
    記ポインタとを解釈する手段をさらに備えた、請求項7
    7に記載の装置。
  84. 【請求項84】 前記符号化データストリームの前記最
    初のキャラクタを得る手段をさらに備えた、請求項82
    に記載の装置。
  85. 【請求項85】 入力データキャラクタを複数のデータ
    キャラクタを含むデータストリームと比較する方法であ
    って、 該データストリームの該データキャラクタを格納手段に
    格納するステップであって、該格納手段は複数のエント
    リを有し、該格納手段の各エントリは該データストリー
    ムの該データキャラクタの1つを格納するステップと、 該入力データキャラクタを該格納手段の各エントリに同
    時伝送するステップと、 該格納手段の各エントリに対して、該格納されたデータ
    キャラクタが該入力されたデータキャラクタに適合(マ
    ッチング)するかどうかを決定するために、該エントリ
    の該格納されたデータキャラクタを該入力データキャラ
    クタと比較するステップと、 該格納手段の各エントリに対して該比較の結果を個別に
    蓄積するステップとを包含する方法。
  86. 【請求項86】 前記格納手段の各エントリに対して該
    結果の蓄積を格納するステップをさらに包含する、請求
    項85に記載の方法。
  87. 【請求項87】 前記比較の前記格納された結果を、後
    の入力データキャラクタに対する比較の結果と比較する
    ステップをさらに包含する、請求項86に記載の方法。
  88. 【請求項88】 1つ以上の前記入力データキャラクタ
    よりなるストリングを可変長符号化データストリームに
    変換するステップをさらに包含し、該変換するステップ
    は、 マッチング入力データキャラクタが前記格納手段内に見
    つかった場合に、該マッチング入力データキャラクタが
    見つかったことを示す標識と、該マッチング入力データ
    キャラクタの長さの可変長指示子および該マッチング入
    力データキャラクタの少なくとも1つのキャラクタを有
    する該格納手段の該エントリを示すポインタを含む置換
    コードとを割り当てることによって、該マッチング入力
    データキャラクタを符号化するステップと、 マッチング入力データキャラクタが該格納手段内に見つ
    からなかった場合に、「生の」データ標識と該入力デー
    タキャラクタの最初のキャラクタとを割り当てることに
    よって、該入力データキャラクタの該最初のキャラクタ
    を符号化するステップとを包含し、これにより、該デー
    タストリームは該可変長符号化データストリームに変換
    される、請求項85に記載の方法。
  89. 【請求項89】 前記比較の結果の蓄積のどちらが前記
    マッチング入力データキャラクタの最長ストリングに対
    応するかを決定するために、該蓄積を評価するステップ
    をさらに包含する、請求項88に記載の方法。
  90. 【請求項90】 前記シフト手段の前記比較を所定数の
    入力データキャラクタに限定するステップをさらに包含
    する、請求項88に記載の方法。
  91. 【請求項91】 前記比較の結果の蓄積のどちらが前記
    マッチング入力データキャラクタの最長ストリングに対
    応するかを決定するために、該蓄積を評価するステッ
    プ、および、等しい長さの該最長ストリングが1つより
    多くあるとき、該最長ストリングに優先順位をつけるス
    テップをさらに包含する、請求項90に記載の方法。
  92. 【請求項92】 前記優先順位をつけるステップが、前
    記最長ストリングのうち最も早いものを選択するステッ
    プをさらに包含する、請求項91に記載の方法。
  93. 【請求項93】 前記可変長符号化データストリームを
    復号化するステップをさらに包含し、該ステップが、 該符号化データストリームを、各々が前記標識の1つを
    先頭とするいくつかの独立した部分に分解するステップ
    と、 該独立した部分の該標識が前記生のデータ標識を示すの
    か、または該標識が前記符号化されたマッチング入力デ
    ータキャラクタを示すのかを決定するために、該標識を
    評価するステップとを包含する、請求項88に記載の方
    法。
  94. 【請求項94】 前記標識が前記符号化されたマッチン
    グ入力データキャラクタを示す場合に、該マッチング入
    力データキャラクタを生成するための前記置換コードの
    前記長さ指示子と前記ポインタとを解釈するステップ
    と、 これにより、前記オリジナルのデータストリームの一部
    を再構築するステップとをさらに包含する、請求項93
    に記載の方法。
  95. 【請求項95】 前記標識が前記生のデータ標識を示す
    場合に、前記符号化データストリームの前記最初のキャ
    ラクタを得て、これにより、前記オリジナルのデータス
    トリームの一部を再構築するステップをさらに包含す
    る、請求項93に記載の方法。
JP6159042A 1989-01-13 1994-07-11 データ圧縮装置及び方法 Pending JPH07111460A (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
US297,152 1989-10-06
US07/418,034 US5003307A (en) 1989-01-13 1989-10-06 Data compression apparatus with shift register search means

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2006057A Division JP2713369B2 (ja) 1989-01-13 1990-01-12 データ圧縮装置及び方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP36352699A Division JP3238143B2 (ja) 1989-01-13 1999-12-21 データ圧縮装置及び方法

Publications (1)

Publication Number Publication Date
JPH07111460A true JPH07111460A (ja) 1995-04-25

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 Before (1)

Application Number Title Priority Date Filing Date
JP2006057A Expired - Lifetime JP2713369B2 (ja) 1989-01-13 1990-01-12 データ圧縮装置及び方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
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 (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212395A (ja) * 1996-01-30 1997-08-15 Sharp Corp テキスト圧縮用辞書作成装置およびテキスト圧縮装置
JPH11168389A (ja) * 1997-12-05 1999-06-22 Toshiba Corp データ圧縮装置
KR20140113604A (ko) * 2013-03-15 2014-09-24 인텔 코오퍼레이션 수축 압축을 위한 고속의 고도로 압축된 lz77 토큰화 및 허프만 인코딩을 위한 병렬 장치

Families Citing this family (153)

* 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
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
US5146221A (en) * 1989-01-13 1992-09-08 Stac, Inc. Data compression apparatus and method
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
US5001478A (en) 1989-12-28 1991-03-19 International Business Machines Corporation Method of encoding compressed data
US5184126A (en) 1989-12-28 1993-02-02 International Business Machines Corporation Method of decompressing compressed data
US5010345A (en) 1989-12-28 1991-04-23 International Business Machines Corporation Data compression method
EP0471518B1 (en) * 1990-08-13 1996-12-18 Fujitsu Limited Data compression method and apparatus
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
US5237460A (en) * 1990-12-14 1993-08-17 Ceram, Inc. Storage of compressed data on random access storage devices
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
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
US5371499A (en) * 1992-02-28 1994-12-06 Intersecting Concepts, Inc. Data compression using hashing
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
US5734892A (en) * 1992-06-29 1998-03-31 Apple Computer, Inc. Efficient method and apparatus for access and storage of compressed data
US5649151A (en) * 1992-06-29 1997-07-15 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
DE69425209T2 (de) * 1993-09-20 2001-03-15 Codex Corp., Mansfield Verbindungsverfahren und -anordnung für inhaltsadressierbaren Speicher
US5499382A (en) * 1993-09-20 1996-03-12 Nusinov; Eugene B. Circuit and method of bit-packing and bit-unpacking using a barrel shifter
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
EP0696107B1 (en) * 1994-08-01 2002-01-16 OpenTV, Inc. Method for compressing and decompressing data files
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
US6460036B1 (en) 1994-11-29 2002-10-01 Pinpoint Incorporated System and method for providing customized electronic newspapers and target advertisements
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
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
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
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
US6404931B1 (en) 1998-12-14 2002-06-11 Microsoft Corporation Code book construction for variable to variable length entropy encoding
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
US7538694B2 (en) * 1999-01-29 2009-05-26 Mossman Holdings Llc Network device with improved storage density and access speed using compression techniques
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
US6819271B2 (en) 1999-01-29 2004-11-16 Quickshift, Inc. Parallel compression and decompression system and method having multiple parallel compression and decompression engines
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
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
US6822589B1 (en) 1999-01-29 2004-11-23 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
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
US20010047473A1 (en) 2000-02-03 2001-11-29 Realtime Data, Llc Systems and methods for computer initialization
US20030191876A1 (en) * 2000-02-03 2003-10-09 Fallon James J. Data storewidth accelerator
US6985848B2 (en) * 2000-03-02 2006-01-10 Texas Instruments Incorporated Obtaining and exporting on-chip data processor trace and timing information
US20060173848A1 (en) * 2000-03-09 2006-08-03 Pkware, Inc. 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
US7844579B2 (en) * 2000-03-09 2010-11-30 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
US20060173847A1 (en) * 2000-03-09 2006-08-03 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
US8959582B2 (en) 2000-03-09 2015-02-17 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060155788A1 (en) * 2000-03-09 2006-07-13 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
US20060143199A1 (en) * 2000-03-09 2006-06-29 Pkware, Inc. System and method for manipulating and managing computer archive files
US20060143249A1 (en) * 2000-03-09 2006-06-29 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
MXPA03000418A (es) 2000-07-13 2003-07-14 Belo Company Sistema y metodo para asociar informacion historica con datos sensoriales y distribucion de los mismos.
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
US7109895B1 (en) * 2005-02-01 2006-09-19 Altera Corporation High performance Lempel Ziv compression architecture
US7937510B1 (en) * 2005-02-01 2011-05-03 Altera Corporation 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
US7873065B1 (en) 2006-02-01 2011-01-18 F5 Networks, Inc. Selectively enabling network packet concatenation based on metrics
US8565088B1 (en) 2006-02-01 2013-10-22 F5 Networks, Inc. Selectively enabling packet concatenation based on a transaction boundary
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
JP4801778B2 (ja) 2007-10-18 2011-10-26 富士通株式会社 映像圧縮符号化装置、映像復元装置、映像圧縮プログラム、及び、映像復元プログラム
US8107754B2 (en) * 2007-12-07 2012-01-31 Mediatek Inc. Systems and methods for randomly accessing compressed images
US9553604B2 (en) 2009-03-30 2017-01-24 Nec Corporation Information processing system, information compression device, information decompression device, information processing method, and program
US8750370B2 (en) * 2009-09-04 2014-06-10 Brocade Communications Systems, Inc. Congestion-adaptive compression
JP5251799B2 (ja) 2009-09-15 2013-07-31 株式会社リコー データ処理装置およびデータ処理方法
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
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

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4464650A (en) * 1981-08-10 1984-08-07 Sperry Corporation Apparatus and method for compressing data signals and restoring the compressed data signals
US4701745A (en) * 1985-03-06 1987-10-20 Ferranti, Plc Data compression system
JPH0368219A (ja) * 1989-01-13 1991-03-25 Stac Inc データ圧縮装置及び方法
US5016009A (en) * 1989-01-13 1991-05-14 Stac, Inc. Data compression apparatus and method

Family Cites Families (12)

* 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
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
US4876541A (en) * 1987-10-15 1989-10-24 Data Compression Corporation Stem for dynamically compressing and decompressing electronic data

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4464650A (en) * 1981-08-10 1984-08-07 Sperry Corporation Apparatus and method for compressing data signals and restoring the compressed data signals
US4701745A (en) * 1985-03-06 1987-10-20 Ferranti, Plc Data compression system
JPH0368219A (ja) * 1989-01-13 1991-03-25 Stac Inc データ圧縮装置及び方法
US5003307A (en) * 1989-01-13 1991-03-26 Stac, Inc. Data compression apparatus with shift register search means
US5016009A (en) * 1989-01-13 1991-05-14 Stac, Inc. Data compression apparatus and method

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212395A (ja) * 1996-01-30 1997-08-15 Sharp Corp テキスト圧縮用辞書作成装置およびテキスト圧縮装置
JPH11168389A (ja) * 1997-12-05 1999-06-22 Toshiba Corp データ圧縮装置
KR20140113604A (ko) * 2013-03-15 2014-09-24 인텔 코오퍼레이션 수축 압축을 위한 고속의 고도로 압축된 lz77 토큰화 및 허프만 인코딩을 위한 병렬 장치
JP2014182810A (ja) * 2013-03-15 2014-09-29 Intel Corp デフレート圧縮のために高速で高圧縮のlz77トークン化及びハフマンエンコーディングを行う並列装置

Also Published As

Publication number Publication date
JP2000201081A (ja) 2000-07-18
JP2713369B2 (ja) 1998-02-16
US5003307A (en) 1991-03-26
JP3238143B2 (ja) 2001-12-10
JPH0368219A (ja) 1991-03-25

Similar Documents

Publication Publication Date Title
JP3238143B2 (ja) データ圧縮装置及び方法
US5126739A (en) Data compression apparatus and method
US5016009A (en) Data compression apparatus and method
US5146221A (en) Data compression apparatus and method
US5532694A (en) Data compression apparatus and method using matching string searching and Huffman encoding
EP0666651B1 (en) Apparatus and method for lempel ziv data compression with management of multiple dictionaries in content addressable memory
JP2863065B2 (ja) マッチングストリング探索およびハフマン符号化を用いたデータ圧縮装置および方法ならびにデータ伸長装置および方法
US5373290A (en) Apparatus and method for managing multiple dictionaries in content addressable memory based data compression
US5710562A (en) Method and apparatus for compressing arbitrary data
US6657565B2 (en) Method and system for improving lossless compression efficiency
JP3342700B2 (ja) ストリングリバーサル機構を具備した単一クロックサイクルデータ圧縮装置/圧縮解除装置
CA2263453C (en) A lempel-ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases
US5406279A (en) General purpose, hash-based technique for single-pass lossless data compression
US5973626A (en) Byte-based prefix encoding
WO1998006028A9 (en) A lempel-ziv data compression technique utilizing a dicionary pre-filled with fequent letter combinations, words and/or phrases
JPH10341165A (ja) 少量データへの適応を加速するデータ圧縮方法
US6535150B1 (en) Method and apparatus for implementing run-length compression
EP0435802B1 (en) Method of decompressing compressed data
EP0438954A1 (en) Method of decoding compressed data
US5745603A (en) Two dimensional context model obtained without a line buffer for arithmetic coding
JP3171510B2 (ja) 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法
WO2002029643A1 (en) Enhanced boolean processor with parallel input
EP1323122A2 (en) Index relational processor

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19990823

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20031210

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050107

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050307