JP2863065B2 - マッチングストリング探索およびハフマン符号化を用いたデータ圧縮装置および方法ならびにデータ伸長装置および方法 - Google Patents

マッチングストリング探索およびハフマン符号化を用いたデータ圧縮装置および方法ならびにデータ伸長装置および方法

Info

Publication number
JP2863065B2
JP2863065B2 JP5198670A JP19867093A JP2863065B2 JP 2863065 B2 JP2863065 B2 JP 2863065B2 JP 5198670 A JP5198670 A JP 5198670A JP 19867093 A JP19867093 A JP 19867093A JP 2863065 B2 JP2863065 B2 JP 2863065B2
Authority
JP
Japan
Prior art keywords
code
length
string
bin
offset
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP5198670A
Other languages
English (en)
Other versions
JPH06224778A (ja
Inventor
メイヤーズ クレイ
エル. ホワイティング ダグラス
エイ. ジョージ グレン
イー. アイビー グレン
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.)
SUTATSUKU EREKUTORONIKUSU Inc
Original Assignee
SUTATSUKU EREKUTORONIKUSU 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
Application filed by SUTATSUKU EREKUTORONIKUSU Inc filed Critical SUTATSUKU EREKUTORONIKUSU Inc
Publication of JPH06224778A publication Critical patent/JPH06224778A/ja
Application granted granted Critical
Publication of JP2863065B2 publication Critical patent/JP2863065B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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
    • H03M7/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
    • 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)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般的にはデータ格納
及び伝送システムに関し、詳細には、データ格納及び伝
送の能力を改善する、データ圧縮システム及び方法に関
する。
【0002】
【従来の技術】データ格納システムとデータ伝送システ
ムとの間のデータ圧縮の重要でない違いによって、デー
タ格納システムのみが、特に、このようなシステムに格
納されたデータファイルに言及される。しかし、全ての
データ格納システムは、データ伝送システム及び他のア
プリケーションをカバーするように、容易に拡張され得
る。ファイルはバイト又はキャラクタの連続するストリ
ームであると考えられ、そこではバイトは幾つかの固定
された数のビットから成り、圧縮システムはこの入力バ
イトのストリームを、「圧縮された」バイトの出力スト
リームに変換し、これから伸張ユニットによって、オリ
ジナルファイルの内容が再構築され得る。
【0003】コンピュータデータファイルが典型的に膨
大な量の冗長性を含むということは、定着している。こ
れらのファイルがディスク又はテープ記憶媒体上でより
小さいスペースを占めるように、又は1200ボーのモ
デムラインのような伝送チャネルに於いてより短い時間
で移送され得るように、これらのファイルを「圧縮」す
るために多くの技術が長年用いられてきた。例えば、パ
ーソナルコンピュータに使用される幾つかの広く用いら
れている市販のプログラムがある(例えば、Systems En
hancement Associates, Inc., Wayne, NJ, 1985のAR
Cソフトウェア)。このプログラムはファイル上で圧縮
及び伸張の機能を果たす。減少量はファイルの内容に大
きく依存して変化するが、このようなプログラムにとっ
て、与えられたファイルの大きさを2:1の比(又はそ
れ以上)に減少させることは一般的ではない。
【0004】データ圧縮のための従来技術における多く
のアプローチがなされている。これらのアプローチの幾
つかは、ファイル又はファイル内のデータの一定のタイ
プについて、暗黙の前提を作り出している。例えば、ス
キャナを用いて生成されたページのビットイメージは、
殆どが空白の画素であり、この傾向は、このようなファ
イルの大きさを大きく減少させる圧縮アルゴリズムによ
って利用される。同様に、ワードプロセッシングファイ
ルは、関係する言語(即ち、英語)に最もよく現れるキ
ャラクタ(又はワード)の知識を用いて容易に圧縮され
る、多くのアスキーキャラクタを含んでいる。他の圧縮
方法はファイルのタイプから独立しており、そのデータ
に「適応」するようにされている。一般に、特定のタイ
プ用の圧縮技術は、その技術が最適化されるファイル上
では、一般用のアルゴリズムよりも高い圧縮性能を供給
する。しかし、もしファイルモデルが正しくないと、そ
れらは非常に低い圧縮性能を有する傾向にある。例え
ば、英語のテキストに最適化された圧縮方法は、フラン
ス語のテキストを含むファイル上では、不完全にしか機
能しないかも知れない。
【0005】典型的には、格納システムはどんなタイプ
のデータがその中に格納されているかを知らない。従っ
て、特定のデータ用の圧縮技術は避けられ、又はそれら
は可能な技術の集合の一つとして用いられるのみであ
る。例えば、ARCは多くの方法を用い、そして各ファ
イルに最適のそれを選択する。しかし、このアプローチ
は単一の圧縮方法を用いるのに比べて、非常なコンピュ
ータのオーバーヘッドを必要とする。
【0006】圧縮方法の他の重要な見地は、ファイルが
処理される速度である。もし圧縮(又は伸張)の速度が
非常に遅く、システムの性能を著しく低下させる場合に
は、たとえそれが競合する方法よりも高い圧縮比を達成
し得ても、その圧縮方法は受け入れられない。例えば、
ストリームテープシステムでは、もしテープ駆動に必要
な速度でデータを供給するのに十分速くファイルが圧縮
されなければ、テープは流れの速度を落し、圧縮による
性能及び/又は容量利得は無駄になる。
【0007】最も一般的な圧縮技術の一つは、ランレン
グスコード化として知られている。このアプローチは、
ゼロ又はスペースキャラクタのような同じバイト(キャ
ラクタ)が繰り返されたストリングを、ファイルがしば
しば有しているという事実を利用している。このような
ストリングは「エスケープ」キャラクタを用いてコード
化され、繰り返し数、繰り返されるキャラクタが続く。
ランの形式で現れなかった他の全てのキャラクタは、そ
れらを「普通テキスト」として出力ストリームに置くこ
とによってコード化される。エスケープキャラクタは滅
多に使用しないバイトとなるように選ばれ、入力ストリ
ームにおけるその出現は、キャラクタとしてのエスケー
プキャラクタそれ自身を有する長さ1のランとしてコー
ド化される。ランレングスコード化はあるタイプのファ
イル上ではよく機能するが、もしファイルが繰り返しの
キャラクタを有していなければ(又はファイルにエスケ
ープキャラクタがしばしば出現すれば)、低い圧縮比率
しか有し得ない。従って、一般に、エスケープキャラク
タの選択は、データ上で最も使用の少ないバイトを捜す
という余分な経路を必要とし、このようなシステムの効
率を低下させる。
【0008】最も洗練されたアプローチは、ハフマンコ
ードとして知られている(Huffman,David A., "A Metho
d for the Construction of Minimum Redundancy Code
s",Proceedings of the IRE, pp. 1098-1110, Septembe
r 1952を参照せよ)。この方法では、あるバイトはファ
イル内で他のバイトよりしばしば多く現れると仮定され
る。例えば英語のテキストでは、文字「t」又は「T」
は文字「Q」より多く存在する。各バイトはビットスト
リングに割り当てられ、その長さは、逆にファイル内に
おけるそのバイトの相対的な頻度に関係する。これらの
ビットストリングは、もし1ビットがある時に処理され
ると、唯一の結果しか生じないようにデコードされるよ
うに選択される。ハフマンはファイルに対する相対的頻
度の統計に基づく、ビットストリングの最適割当てのた
めのアルゴリズムを導いている。
【0009】ハフマンアルゴリズムは、達成される圧縮
が漸近的にファイルの「エントロピー」に近づくことを
保証し、それは以下のように正確に定義される。
【0010】 H=SUM−[p(i)log2(p(i))] ここで、 p(i)=ファイル内のキャラクタiの確率 =(iの出現数)/(ファイル内のキャラクタの総数) Hの単位はビットであり、それはファイル内のキャラク
タを表現するのに(平均して)どれだけのビットが必要
であるかを測定する。例えば、もしエントロピーが8ビ
ットバイトを用いて4.0ビットであれば、ハフマン圧
縮システムはファイル上で2:1の圧縮をなし得る。エ
ントロピーが高いほど、データはより「乱雑」(従っ
て、あまり圧縮できない)である。
【0011】ハフマンのコード化は多くのタイプのファ
イル上で非常によく機能する。しかし、ビットストリン
グのバイトへの割当ては、多くの実際的な困難を伴う。
例えば、予め設定されたコード化スキームが用いられる
場合(例えば、英語における文字の出現の頻度に基づい
て)、もしその予め設定されたスキームが、ファイル内
の実際に存在するものとかなり異なる頻度統計であると
仮定すると、ハフマンのコード化はファイルを大きく拡
張するかもしれない。これに加えて、ファイルの内容に
基づくコード化スキームの演算は、ハフマンアルゴリズ
ムを頻度統計に適応するのと同様に、データ上での2つ
のパスを必要とするのみならず(従って、システムの効
率を低下させる)、コード化テーブルがデータに沿って
格納されるということが必要とされ、これは圧縮率の上
での否定的な衝撃を有する。更に、バイトの相対的頻度
は、ファイル内で動的に容易に変えられ得る。そのた
め、どの点でも特定のコード化割当てはうまく機能しな
い。
【0012】ハフマンアプローチの多くの変形があり
(例えば、Jones, Douglas W., "Application of Splay
Trees to Data Compression", Communications of the
ACM,pp. 996-1007, Vol. 31, No. 8, August 1988)、
通常、それらは処理された入力バイトの最新の履歴に基
づいた、動的コード割当てを含んでいる。このようなス
キームは上で議論した問題点を回避する。他のアプロー
チは同時に2バイトワード(バイグラム(bi-gram))
を見ることを含み、ハフマンのコード化をそのワード上
で行う。
【0013】近年のハフマンのコード化の変形は、MacC
riskenの米国特許第4,730,348号(及びその中で参照さ
れている他の特許)に現れている。MacCriskenの米国特
許では、ハフマンコードは先のバイトのコンテキストに
おけるバイトに割り当てられる。言い換えれば、複数の
コード化テーブルが用いられ、各テーブルは先のバイト
に従って選択される。このアプローチは、例えば、英語
では文字「u」は頻繁には現れないが、「q」の後には
殆ど常に現れるという観察に基づいている。従って、
「u」に割り当てられるコードは、先の文字が「q」
(又は「Q」)であるかどうかに依存して異なるであろ
う。多数のテーブルと動的コード割当てとを用いる同様
のスキームについては、Jones, Douglas W., "Applicat
ion of SplayTrees to Data Compression"を参照された
い。
【0014】上述のハフマンタイプのアプローチは、コ
ンピュータによって強化される傾向にあり、例外的に高
い圧縮比率を達成するものではない。この観察に対する
一つの説明は、8ビットバイトに基づく純粋なハフマン
コードは最も良い場合には8:1の圧縮比率を達成し得
ること、そしてそれはファイルが同じバイトの繰り返し
(即ち、エントロピー=0)から成る最善の状況でのみ
達成され得ることである。同じ状況では、単純なランレ
ングスコード化スキームは50:1以上の圧縮率を達成
し得る。平均の性能は最善及び最悪の場合の数の同じ組
み合わせであろう。そして、最善の場合の限度は、その
平均をも制限する。ハフマンのコード化の公知の限度
は、確率が厳密に2の累乗でなければ、理論的な限度の
1ビットの範囲内となることは保証されるが、エントロ
ピーを達成し得ないことである。これは、全てのハフマ
ンコードが長さにおける正確なビット数であるという事
実のためである。一方、全ての場合においてエントロピ
ーを達成するためには、断片的なビット長が必要であ
る。言い換えると、ハフマンのアルゴリズムはまるめの
問題を有している。一般に、高い確率でトークンがある
場合に問題は悪化する。なぜなら、「エラー」のビット
の断片が、割り当てられたコードのサイズの大きなパー
センテージを占めるからである。
【0015】数学的コード化は、まるめの問題を実際に
克服することのできる公知の技術である。しかしなが
ら、数学的コード化に必要なテーブルは、ハフマンのテ
ーブルのように圧縮可能ではなく、またテーブルサイズ
の問題を克服するために数学的アルゴリズムを動的に行
うことは、可能ではあるが、計算上非常に集中的であ
る。最終的な結果として、数学的コード化を用いて実際
に達成される利得は、理論的見地から望まれるほど大き
くはない。
【0016】圧縮のための全体的に異なるアプローチ
が、Lempel及びZivによって開発され(Ziv, J.及びLemp
el, A., "Compression of Individual Sequences via V
ariable-Rate Coding", IEEE Transactions on Informa
tion Theory, Vol. IT-24, pp. 530-536, September 19
78を参照せよ)、Welchによって改良されている(Welc
h, Terry A., "A Technique for High-Performance Dat
a Compression", IEEE Computer, pp. 8-19, June 1984
を参照せよ)。可変長のコードを固定された大きさのバ
イトに割り当てる代わりに、Lempel-Zivアルゴリズム
(「LZ」)は、固定長のコードを可変の大きさのスト
リングに割り当てる。ファイルからの入力バイトが処理
されるにつれて、ストリングのテーブルが作成され、各
バイト又はバイトのストリングは、テーブル内のストリ
ングのインデックスのみを出力することにより、圧縮さ
れる。典型的にはこのインデックスは11〜14ビット
の範囲であり、12ビットが一般的である。なぜならこ
れは単純な手法に向いているからである。テーブルは先
にコード化されたバイトのみを用いて作成されるので、
圧縮及び伸張のシステムの両方は、テーブル情報を移送
するのに必要な余分なオーバーヘッド無しに、同じテー
ブルを維持することができる。ハッシングアルゴリズム
がマッチするストリングを効率的に捜すのに用いられ
る。ファイルの初めでは、テーブルはアルファベットの
各キャラクタに対して一つのストリングが初期化され
る。従って、たとえそのストリングが長さ1のみを有し
ていても、全てのバイトは少なくとも一つのストリング
に見いだされるということを確実にする。
【0017】Lempel-Zivアルゴリズムは、それ自身をデ
ータに適合させ、ファイルの内容に根拠を置く予め設定
されたテーブルを必要としないので、魅力がある。更
に、ストリングを極端に長くし得るので、最適の場合の
圧縮比率は非常に高く、実際のLZ出力は、ほとんどの
タイプのファイルでハフマンスキームに匹敵する。ま
た、それは装置にとっても非常に単純であり、この単純
さが高い効率に現れている。
【0018】しかし、幾つかの障害もまた、LZ圧縮法
に存在する。LZストリング探索は「どん欲な」アルゴ
リズムである。例えば、次のストリングを考える。
【0019】ABCDEFBCDEF ここで、A、B、C、D、E、Fは異なったバイトであ
る。LZストリング探索は、AB、BC、CD、DE、
EF、BCD、DEFのストリングをストリングテーブ
ルに付け加え、このアルゴリズムを用いて出力され得る
長さ2又はそれ以上のストリングは、上で示した時点で
はBC及びDEのみであることに注意しなければならな
い。実際にはストリングBCDEFは既に入力に現れて
いる。従って、第2のBCDEFストリングは最初のB
CDEFに戻って参照されるのが理想であるが、実際に
はこれは行われない。
【0020】LZアプローチにとって重大な欠点は、圧
縮されたデータを保持するためのストリングテーブル
が、長いファイルを満たしてしまう傾向にあることであ
る。しかし、テーブルの大きさは増大されることがで
き、このアプローチはストリングを表すのにより多くの
ビットを必要とし、従って、効率が低下するであろう。
この欠点を扱うための一つのアプローチは、テーブルが
いっぱいになったときにそのテーブルの全部又は一部を
捨てることであろう。アルゴリズムの構造のために、最
新に見いだされたストリングが最初に捨てられる。なぜ
なら、それらは先のストリングに戻って参照するからで
ある。しかし、ローカルデータに動的に適合しているの
は、最新のストリングであり、それらを捨てるのもまた
効率的ではない。基本的にはLZストリングは無限の長
さのメモリを有しているので、ファイル内のデータのタ
イプの変更は、もしストリングテーブルがいっぱいであ
れば、非常なコード化の効率の悪さを引き起こし得る。
【0021】同時に1より多くの方法を用いる圧縮シス
テムを設計することも可能である。このシステムは、フ
ァイル内でその方法が最も効率的になるように動的に後
ろ及び前にスイッチングする。装置の観点からは、この
ようなスキームは非常に高価であるかも知れないが(即
ち、遅く及び/又は高価である)、結果として得られる
圧縮比率を非常に高くすることができる。
【0022】動的に前後にスイッチするこのような一つ
の方法は、MacCriskenの特許に開示されている。上述の
ように、バイグラムハフマン法は主要な圧縮技術として
使用されている。典型的には、圧縮及び伸張システムは
予め定義された(即ち、統計的に)コードテーブルのセ
ットを用いてスタートする。おそらく、英語、フランス
語及びパスカルソースコードのためのこのようなテーブ
ルのセットがある。圧縮ユニット(送信機)は、使用さ
れるテーブルの短い記述を最初に移送又は格納する。伸
張ユニット(受信機)はこのコードを分析し、適切なテ
ーブルを選択する。圧縮の間に、もし現在のテーブルが
十分に機能しないことが決定されると、送信機は特別の
(「エスケープ」)ハフマンコードを移送する。このコ
ードは、他の特定の予め定義されたテーブルを選択する
か、又は伸張された先のデータに基づいて新たなテーブ
ルを計算するかどうかを受信機に伝える。送信機及び受
信機の両方は、同じアルゴリズムを用いてテーブルを計
算するので、テーブル全体を送る必要はないけれども計
算を行うのに幾らかの時間がかかる。ひとたび新たなテ
ーブルが計算されると、以前と同様に圧縮が行われる。
かなりのコンピュータのオーバーヘッドが存在するけれ
ども、この技術が更に動的ハフマンスキームに用いられ
得ないという理由は無いことに注意されなければならな
い。
【0023】ハフマンのコード化に加えて、MacCrisken
は第2のストリングに基づく圧縮方法を用いている。送
信機及び受信機の両方が、最新の移送された入力バイト
の履歴バッファを保持する。それぞれの新たな入力バイ
ト(A)に対してバイグラムハフマンコードが生成され
るが、ハッシングスキームを用いて履歴内の次の3つの
入力バイト(ABC)によって表現されるストリングを
見つける試みもまた行われる。ハッシュが3バイトスト
リング上で行われ、ハッシュリスト内の古い入力の廃棄
を可能とするために、2重にリンクされたハッシュリス
トが維持される。もしストリングが見つかると、ストリ
ングが続くことを示すために特別のハフマンエスケープ
コードが生成され、履歴バッファ内のストリングの長さ
とオフセットが送られる。オフセットは10ビットにコ
ードされ、長さは3〜18バイトの長さを表現する4ビ
ットにコードされる。しかし、このようなストリングが
送られる前に、圧縮ユニットはストリング内の全てのバ
イトに対するハフマンコードを発生し、そのハフマンコ
ードの大きさをストリングビットの大きさと比較する。
典型的にはハフマンストリングエスケープコードは4ビ
ットであり、ストリングを表すのに19ビットを要す
る。2つの量の小さい方が送られる。
【0024】MacCriskenストリング法は、Lempel-Ziv法
のストリングテーブルは決していっぱいにならないとい
う問題点を避けているということに注意しなければなら
ない。なぜなら、古い入力はハッシュリストから除くこ
とによって廃棄されるからである。従って、最新の(1
キロバイト以内)のストリングのみがテーブルを占め
る。また、原理的には全てのマッチするストリングが見
いだされるので、それは「どん欲」ではない。実際に
は、ストリング探索の長さの制限が課されている。これ
に加えて、MacCrisken法は2つの圧縮アルゴリズムを同
時に効率的に行い、従って、コンピュータのオーバーヘ
ッドが非常に高くなるので、コンピュータで行うには非
効率的である。
【0025】データの最新処理されたバイトの「スライ
ディングウインドウ」を維持し、マッするバイトのスト
リングに対するウインドウを走査するLempel-Ziv技術の
うちのMacCrisken法の変形を用いるアルゴリズムが他に
もいくつかある。ストリングが見いだされると、マッチ
するストリングの長さ及びウインドウ内のそのオフセッ
トが出力される。他の場合では、「生の」バイトが出力
される。圧縮エンジンのコード化部分は、ストリングと
生のバイトとの間の差異を示すタグを送り、ストリング
及び生のバイト自体は多くの方法でコード化され得る。
【0026】明らかに、データのタイプが異なると、ス
トリングの長さ及びオフセットの分布も異なるので、単
一の固定されたコード化が全ての可能なファイルに対し
て最適とはなり得ない。従って、見いだされたストリン
グに基づいてコード化を決定するための様々な技術が開
発されている。例えば、ハフマンコード化は、ストリン
グの長さ及びオフセットをコード化するために用いられ
ることができる。実際には、全ての長さ及びオフセット
が個々のハフマンコードを与えられるわけではない。そ
の代わりに、長さ及びオフセットの範囲が、単一のハフ
マンコードによって表されることができる。範囲内の値
を区別するために特別なビットがハフマンコードの後ろ
に続いている。これらの範囲、つまりビン(bin)は、
データにおいて典型的に観察される分布を近似するよう
に選択される。
【0027】そのようなアプローチの利点の一つは、選
択されるビンの制約内で、コード化が、圧縮されたイメ
ージのサイズを最小化するように処理されるているデー
タに対して最適化され得ることである。そのようなアプ
ローチの1つの欠点は、コード化フォーマットを記述す
るタイプのテーブルがデータと共に送られなければなら
ず、従って、可変コード化によって得られる余分な圧縮
をある程度打ち消すことになる。実際に、十分大きなデ
ータブロックに対して、このオーバーヘッドは、コード
化における利得によって補償されるよりも大きい。他の
欠点は、このタイプのアプローチは本質的に、ハードウ
エアであってもソフトウエアであっても、固定コード化
スキームよりも実行が困難であることである。ここで
も、補償率における利得が、複雑さの増大よりも重要と
なることがよくある。データの各バイトが処理される毎
にコード化を動的に修正してテーブルの必要性を除去す
ることはできるが、そのようなスキームは、さらに非常
に複雑であるので、典型的には、圧縮率の対応する劇的
利得を伴わずに圧縮及び伸張のスループットを劇的に低
速化させる。3番目の欠点は、多くの場合に重要ではな
いが、このタイプのアルゴリズムが本質的に2経路アプ
ローチであるので、いずれかのコード化トークンが出力
され得る前にストリング探索エンジンによって全てのデ
ータが処理されることが必要であることである。
【0028】ストリングをコード化することに加えて、
生バイトもまたコード化され得る。スライディングウイ
ンドウ法を用いて、各アイテム出力はストリング又は生
バイトのいずれかであるので、生バイト及びストリング
が共にコード化され得る。例えば、単一ハフマンコード
が、生バイト又はある長さのストリングのいずれかを表
すことができる。コード化に生バイトを含ませること
は、用いられる特定のコード化を特定するテーブルのサ
イズをさらに大きくする傾向があるが、このテーブルサ
イズの増大は、得られる圧縮の利得によって典型的には
克服される。
【0029】PKZIP version 2.0及びLHA version 2.13
は共通に、このタイプの圧縮方法を用いるMS−DOS
コンピュータに対して利用可能な圧縮ユーティリティで
ある。これらのプログラムによって用いられるストリン
グ探索技術は異なるが、得られる圧縮フォーマットは、
スタイルが極めて似ている。意外ではないが、非常に似
た圧縮率が得られる。各プログラムは、スライディング
ウインドウ及び最小のストリングの長さである3を用い
ており、圧縮データの一部として格納される2つのハフ
マンテーブルを発生させる。第1(及び大きい方)のハ
フマンテーブルは生バイト及びストリング長さをコード
化する。例えば、PKZIPは、各種サイズの29レングス
ビンの合計を用いて、ハフマンコード0〜255に生バ
イトを割当て、ハフマンコード257〜285に3〜2
58のストリング長を割当てる。
【0030】第2のハフマンテーブルは、PKZIP及びLHA
によって用いられて、ストリング長が特定されると、ス
トリングオフセットを表す。言い換えると、(生バイト
とは反対に)ストリング長に対応するハフマンコードの
後ろに、ストリングオフセットを特定するために異なる
ハフマンコードが用いられる。PKZIPは、1から327
68の範囲の30個のオフセットビンに対するハフマン
コードを有しているが、LHAは、1から8191の範囲
の13個のオフセットビンを有している。これらのアル
ゴリズムは、サイズが8Kバイト又はそれ以上のデータ
のブロックを圧縮する際に最も効果的であるので、ブロ
ックサイズの一部であるテーブルオーバーヘッドは最小
となる。
【0031】これらの製品において、ハフマンのアルゴ
リズムによって発生されるコードの長さを与えるだけ
で、ハフマンコードの独特のセットを発生させて割り当
てることができるという公知の事実によって、ハフマン
テーブルは、それ自体が圧縮形態で格納されている。従
って、ハフマンコードの長さのみが格納される必要があ
るので、テーブルはコード自体よりもかなり小さくなる
(さらに圧縮可能である)。実際、ハフマン長はハフマ
ンコード化を用いて圧縮されるので、ハフマン長を引き
出すために用いられる初期の(未圧縮の)ハフマンテー
ブルが実際にあり、それはその後、データの圧縮及び伸
張において用いられるハフマンコードを発生させるため
に用いられる。
【0032】典型的には、これらのアプローチは固定コ
ード化技術よりも10〜15%小さいサイズまでデータ
を圧縮することができる。データ圧縮に関する文献及び
研究の多くが、コード化技術よりもストリング探索方法
に注目しているが、コード化が行われる方法に厳密に傾
注することによって、大きな利得が(複雑さを犠牲にし
て)達成され得ることが経験的に明らかである。しかし
ながら、複雑さの局面を無視しても、固定コード化は、
テーブルが送られ得ない多くのアプリケーションに対し
てはやはり重要である。例えば、多くの伝送システムに
おいて、データの小さなパケット(多くの場合、100
バイトよりも小さい)が圧縮されなくてはならない。テ
ーブルオーバーヘッドはこの場合重要である。同様に、
いくつかのアプリケーションにおいて、データは、テー
ブルが発生され得るように、受け取られる全ブロックを
待つことなく、データが受け取られるとすぐに圧縮され
移送されなくてはならない。
【0033】可変コード化スキームを用いる圧縮比率に
おける利得の主要な部分は、可変コード化自体から得ら
れるものであり、生バイト及びストリングの分布に適合
する。しかしながら、利得の他の重要な成分は、可変コ
ード化によって提供されるより大きなウインドウサイズ
(例えば、8Kバイト以上)に帰することができる。よ
り大きなウインドウによって、より多くのストリングが
見いだされることが可能となる。なぜなら、より大きな
履歴がストリング探索のために利用可能となるからであ
る。固定コード化スキームでは、残念なことに、オフセ
ットのコード化サイズの増大は、より多くのストリング
が見いだされるという事実を打ち消す傾向がある。一
方、可変コード化スキームでは、余分のストリングがオ
フセットコード化の適合性によって全体の圧縮比率を増
大させる。
【0034】
【発明が解決しようとする課題】実施する観点から、よ
り大きなウインドウサイズに伴う一つの問題は、全体の
圧縮及び伸張エンジンが単一の集積回路上に配置される
べきである場合には特に、必要なハードウエアのコスト
が非常に高いことである。同様に、ソフトウエアの実現
には通常、ウインドウサイズに比例するメモリサイズが
必要であり、これが多くの場合に許容され得ない。あら
ゆる場合において、通常は、圧縮アルゴリズムの互換性
のあるソフトウエア及びハードウエアのバージョンを有
することが望ましい。アルゴリズムによって達成され得
る圧縮比率と共に、ハードウエア及びソフトウエアの両
方のコスト及び速度が考慮されなくてはならない。
【0035】
【課題を解決するための手段】本発明のデータ圧縮方法
は、入力バイトのウインドウ内のマッチングストリング
に対する探索であって、生のバイトまたは一定の長さお
よび該ウインドウへ戻る一定のオフセットを有するマッ
チングストリングのいずれかを表現するトークンからな
るストリームを生成する探索を実行するステップと、該
トークンを予め定義されているビンに割り当てるステッ
プであって、該ビンのいくつかは、所定の長さおよび一
定のオフセット範囲内にあるマッチングストリングを有
するステップと、各ビンに割り当てられたトークンの発
生頻度に基づいて、可変長コードを各ビンに割り当てる
ステップと、生成された各トークンに対し、各トークン
が割り当てられた該ビンの該可変長コードを、出力デー
タストリームに出力するステップと、各可変長コードが
出力された後、必要であれば、該ビン内の該トークンを
正確に特定するために、余分なビットを出力するステッ
プとを包含する。
【0036】前記方法は、前記可変長コードを割り当て
る前に、入力データストリームの全てのマッチングスト
リング探索を完了するステップと、該入力ストリーム全
体から各ビンにおけるトークン発生数をカウントするス
テップと、該発生カウントに基づいて前記可変長コード
を割り当てるステップと、各ビンに割り当てられた該可
変長コードを示すコーディングテーブルを生成するステ
ップと、いかなる符号化されたトークンを出力する前
に、該コーディングテーブルを前記出力データストリー
ムに出力するステップとをさらに包含することもでき
る。
【0037】前記可変長コードを割り当てるステップ
が、前記発生カウントに基づいてハフマンのアルゴリズ
ムを用いて該可変長コードを割り当てるステップをさら
に包含することもできる。
【0038】前記コーディングテーブルを生成するステ
ップが、前記可変長コードの長さのみを有するコーディ
ングテーブルを生成するステップをさらに包含すること
もできる。
【0039】前記方法は、ランレングス圧縮体系を用い
て前記コーディングテーブルを圧縮するステップをさら
に包含することもできる。
【0040】前記方法は、ハフマンコーディングを用い
て、前記コーディングテーブルを圧縮するステップと、
該コーディングテーブル中の可変長に割り当てられたハ
フマンコードを特定するために使用される予備テーブル
を生成するステップとをさらに包含することもできる。
【0041】前記方法は、圧縮された出力データの末端
部を示す特別なビンを割り当てるステップと、全ての他
のトークンが出力された後に、該圧縮された出力データ
ビンの該末端部のコードを出力するステップとをさらに
包含することもできる。
【0042】前記方法は、前記ビンを以下に示すように
割り当てるステップ
【0043】
【表9】
【0044】をさらに包含することもできる。
【0045】前記方法は、ビン256から318のコー
ドの後にストリングオフセットを特定する一定数の余分
なビットを以下に示すように続けるステップ
【0046】
【表10】
【0047】をさらに包含することもできる。
【0048】前記方法は、ビン319から334のコー
ドの後にストリングオフセットを特定する一定数の余分
なビットを以下に示すように続けるステップ
【0049】
【表11】
【0050】をさらに包含することもできる。
【0051】前記方法は、ビン334のコードおよびオ
フセットビットの後にストリング長を特定する余分なビ
ットを以下に示すように続けるステップ
【0052】
【表12】
【0053】をさらに包含することもできる。
【0054】他の局面によれば、本発明の圧縮された入
力データストリームを伸張するデータ伸張方法は、全て
のバイト出力の履歴アレイを維持するステップと、入力
データストリームが消耗するまで、または該圧縮された
入力データストリームの末端部を示すコードが見つかる
まで、以下のステップを繰り返すステップと、該圧縮さ
れた入力データストリームからビンコードを抜き出すス
テップと、該ビンコードに関連したトークンを正確に決
定するために必要とされる余分なビットを抜き出すステ
ップと、該トークンが生のバイトに相当する時、該生の
バイトを出力するステップと、該トークンがマッチング
ストリングに相当する時、該ストリングのオフセットを
用いて該履歴アレイにインデックスバックすることによ
り該ストリングの全てのバイトを出力するステップとを
包含する。
【0055】前記方法は、前記圧縮された入力データス
トリームの開始部からコーディングテーブルを抜き出す
ステップと、該コーディングテーブルからカテゴリーに
対する可変長コードを抜き出すステップとをさらに包含
することもできる。
【0056】他の局面によれば、本発明のデータ圧縮装
置は、入力バイトのウインドウ内のマッチングストリン
グに対する探索であって、生のバイトまたは一定の長さ
および該ウインドウへ戻る一定のオフセットを有するマ
ッチングストリングのいずれかを表現するトークンから
なるストリームを生成する探索を実行する手段と、該ト
ークンを予め定義されているビンに割り当てる手段であ
って、該ビンのいくつかは、所定の長さおよび一定のオ
フセット範囲内にあるマッチングストリングを有する手
段と、各ビンに割り当てられたトークンの発生頻度に基
づいて、可変長コードを各ビンに割り当てる手段と、生
成された各トークンに対し、各トークンが割り当てられ
た該ビンの該可変長コードを、出力データストリームに
出力する手段と、各可変長コードが出力された後、必要
であれば、該ビン内の該トークンを正確に特定するため
に、余分なビットを出力する手段とを備えている。
【0057】前記装置は、前記可変長コードを割り当て
る前に、入力データストリームの全てのマッチングスト
リング探索を完了する手段と、該入力ストリーム全体か
ら各ビンにおけるトークン発生数をカウントする手段
と、該発生カウントに基づいて前記可変長コードを割り
当てる手段と、各ビンに割り当てられた該可変長コード
を示すコーディングテーブルを生成する手段と、いかな
符号化されたトークンを出力する前に、該コーディン
グテーブルを前記出力データストリームに出力する手段
とをさらに備えることもできる。
【0058】前記可変長コードを割り当てる手段が、前
記発生カウントに基づいてハフマンのアルゴリズムを用
いて該可変長コードを割り当てる手段をさらに備えるこ
ともできる。
【0059】前記コーディングテーブルを生成する手段
が、前記可変長コードの長さのみを有するコーディング
テーブルを生成する手段をさらに備えることもできる。
【0060】前記装置は、ランレングス圧縮体系を用い
て前記コーディングテーブルを圧縮する手段をさらに備
えることもできる。
【0061】前記装置は、ハフマンコーディングを用い
て、前記コーディングテーブルを圧縮する手段と、該コ
ーディングテーブル中の可変長に割り当てられたハフマ
ンコードを特定するために使用される予備テーブルを生
成する手段とをさらに備えることもできる。
【0062】前記装置は、圧縮された出力データの末端
部を示す特別なビンを割り当てる手段と、全ての他のト
ークンが出力された後に、該圧縮された出力データビン
の該末端部のコードを出力する手段をさらに備えること
もできる。
【0063】前記装置は、前記ビンを以下に示すように
割り当てる手段
【0064】
【表13】
【0065】をさらに備えることもできる。
【0066】前記装置は、ビン256から318のコー
ドの後にストリングオフセットを特定する一定数の余分
なビットを以下に示すように続ける手段
【0067】
【表14】
【0068】をさらに備えることもできる。
【0069】前記装置は、ビン319から334のコー
ドの後にストリングオフセットを特定する一定数の余分
なビットを以下に示すように続ける手段
【0070】
【表15】
【0071】をさらに備えることもできる。
【0072】前記装置は、ビン334のコードおよびオ
フセットビットの後にストリング長を特定する余分なビ
ットを以下のように続ける手段
【0073】
【表16】
【0074】をさらに備えることもできる。
【0075】他の局面によれば、本発明の圧縮された入
力データストリームを伸張するデータ伸張装置は、全て
のバイト出力の履歴アレイを維持する手段と、該圧縮さ
れた入力データストリームからビンコードを抜き出す手
段と、該ビンコードに関連したトークンを正確に決定す
るために必要とされる余分なビットを抜き出す手段と、
生のバイトを出力する手段と、マッチングストリングの
全てのバイトを、該ストリングのオフセットを用いて該
履歴アレイにインデックスバックすることにより出力す
る手段とを備えている。
【0076】前記装置は、前記圧縮された入力データス
トリームの開始部からコーディングテーブルを抜き出す
手段と、該コーディングテーブルから該カテゴリーに対
する可変長コードを抜き出す手段とをさらに備えること
もできる。
【0077】
【作用】本発明は、磁気ディスク又はテープ記憶装置の
ようなデジタル記憶装置の容量を増大させる、圧縮/伸
張システムである。圧縮方法は完全に適合性があり、予
め初期化されたコード化テーブルを必要とせずに、コン
ピュータファイルのようなバイトに適応したキャラクタ
ストリームを最適化する。それは従来技術に見られる多
くの困難を克服し、上述で議論した先行する技術の何れ
よりも、より少ないメモリ要件で、より速くより高い圧
縮率を達成する。
【0078】圧縮は、まず、以前のマッチするストリン
グ又はバイトに対して、入力データストリーム全体に探
索を行うことによって達成される。ストリング探索は、
以前に処理されたバイトの履歴アレイを維持することに
よって達成される。マッチするストリングが見いだされ
ると、マッチするストリングの長さ及び履歴アレイ内で
のマッチするストリングのオフセット(相対的位置)を
示す出力トークンが発生される。現在調べられているバ
イトを含むマッチするストリングが見いだされない場合
には、「生の」バイトであることを示す出力トークンが
発生される。
【0079】圧縮プロセスは、マッチするストリング及
びストリング探索によって発生される生のバイトを表す
トークンのハフマンに基づくコード化を用いることによ
って完結する。単一のハフマンコード化ツリーが、生の
バイト及び多くの最も共通するストリング長/オフセッ
トの対に対して用いられる。ハフマンテーブル自体は、
データの圧縮イメージの一部として圧縮形態で格納され
る。
【0080】本発明の好ましい実施例は、圧縮ユニット
から出力されるコード化データストリームを伸張するた
めの方法も包含している。伸張するための方法は、以下
のステップを包含している。第1に、コード化されたハ
フマン長テーブルが受け取られてデコードされる。各ハ
フマンビンに対するコードの長さが分かると、ハフマン
コードが各トークンビンに割り当てられる。トークンビ
ンに対してハフマンコードが与えられると、ハフマンツ
リーがトークンをデコードするために構築され、それが
圧縮入力データストリームから引き出される。ハフマン
ビンが生のバイトに対応する場合には、伸張ユニットが
生のバイトを出力する。ハフマンビンがストリングに対
応する場合には、ストリングオフセット及び長さを特定
するために必要な全ての余分なビットが、入力データス
トリームから引き出される。その後、ストリングが、同
時に1バイト出力される。好ましい実施例において、た
いていのスライディングウインドウ伸張スキームと同様
に、これは、最新のバイト出力の履歴アレイを維持し、
オフセットによって履歴アレイにインデックスし直すこ
とによって行われ、1バイトが引き出される。生バイト
又はストリングバイトのいずれか全てのバイト出力が履
歴アレイに加えられる。
【0081】
【実施例】図1(a)及び図1(b)において、本発明
による圧縮ユニット4及び伸張ユニット6のブロック図
が示される。ユニット4及び6の両方は、ハードウエア
モジュールであっても、ソフトウエアモジュールであっ
てもよい。しかし、好ましい実施例においては、圧縮ユ
ニット4及び伸張ユニット6は1個の集積回路に組み入
れられる(図10)。この集積回路は、マイクロプロセ
ッサ5によって制御されるデータ記憶システム又はデー
タ伝送システムの一部として用いられる。図1(a)に
おいて、入力データストリーム8は、ホスト10と称さ
れるデータ送信装置から圧縮ユニット4に入力される。
コード化され、圧縮されたデータストリーム12は装置
14と称されるデータ受信装置へ伝送される。
【0082】同様に、図1(b)に於いて、伸張ユニッ
ト6は、装置14(ここではデータ送信装置)から圧縮
されたデータストリーム18を受け取り、元の圧縮され
ていないデータストリーム20を再構成し、そのデータ
ストリームをホスト10(ここではデータ受信装置)へ
出力する。好ましい実施例において、伸張及び圧縮は同
時には行われない。しかし、他の実施例に於いては伸張
及び圧縮は同時に行われ得る。
【0083】図2では、本発明によって動作するように
構成された圧縮ユニット4のブロック図が示されてい
る。入力データ22は、圧縮されるべき入力データスト
リームである。入力データ22は、MEMSIZEバイ
トのウインドウサイズを用いて、ブロック24に示され
るように、スライディングウインドウストリング探索ア
ルゴリズムを用いて処理される。多くの異なるストリン
グ探索アルゴリズムがブロック24において用いられ得
る。スライディングウインドウアルゴリズムの出力は一
連のトークン26である。
【0084】トークン26のそれぞれは、生バイト又は
与えられた長さ及びオフセットを有するマッチするスト
リングである。すでに処理された以前のMEMSIZE
バイトにおいてマッチするストリングが見いだされない
場合に、生バイトトークンが生成される。ストリングト
ークンは、見いだされたストリングマッチの長さ及びス
ライディングウインドウからのそのオフセットを示す。
長さ及びオフセットは、伸張ユニット6が元のデータを
再構成し得るには十分である。
【0085】出力トークンは、ハフマンコードがトーク
ンビンのそれぞれに割り当てられるまで中間バッファ2
8に一時的に格納される。この割当ては、入力データ2
2の全てがマッチするストリングを捜すために探索さ
れ、全てのトークンが生成されるまで起こらない。トー
クンが生成されて格納されると、それらは、異なるビン
又はカテゴリに割り当てられる。ビンは、生バイト、各
種ストリング長さ/オフセット対及び幾つかの個々のス
トリング長から成る。
【0086】トークンはまた、入力データ22から生成
される全てのトークンに対して1ビン当たりのトークン
の数をカウントするビンカウンタ30へ入力される。各
ビンに対するカウントは、初期的にはゼロに設定され、
ビンに対応するトークンが生成される毎に1ずつインク
リメントされる。他の実施例において、ビンカウント
は、中間バッファにおけるトークンを再処理することに
よってスライディングウインドウ探索が完了した後にの
み計算されて、カウントを累積する。他の実施例におい
て、中間トークンは、バイト配列された固定コード化を
用いて(ビット配列フォーマットではなく)格納され
る。バイト配列された固定コード化には、より大きな格
納空間が必要ではあるが、より効率的に処理され得る。
【0087】全ての入力データがスライディングウイン
ドウ探索24によって処理され、全ての出力トークンが
一時的に格納されてビンカウントが計算されると、ハフ
マンのアルゴリズムが用いられて、ハフマンコード32
が各種ビンに割り当てられる。ハフマンコード32は、
ビンカウンタ30によって維持されるビンカウントから
生成される。各ビンに対するハフマンの確率は、ビンカ
ウントに比例するので、一般に、大きなカウントを有す
るビンほど短いコードを割り当てられ、小さなカウント
を有するビンほど長いコードを割り当てられる。
【0088】単一のハフマンツリーを用いることによっ
て、データと共に格納されるテーブルのサイズが小さく
なる。より重要なことに、ストリング長さ/オフセット
対を単一ハフマンコードに組み合わせることは、所定の
長さ及びオフセットのビンからのストリングが、例えば
オフセットとは独立した所定の長さのストリングよりも
かなり確率が低くなることを意味している。従って、ハ
フマンコード化に付随するまるめの問題が最小化され、
高圧縮比率が小さなウインドウサイズでも達成され得
る。小さなウインドウサイズは、ハードウエア及びソフ
トウエア実現において、より許容可能なコストとなる。
【0089】好ましい実施例において、ハフマンのアル
ゴリズムは、各ハフマンコードの長さを生成させるため
にのみ用いられており、ビットコードそのものを生成さ
せるためには用いられていない。各ビンに対してハフマ
ンコードの長さを与えると、実際のコードは、以下に説
明されるように、図15において示されるアルゴリズム
を用いて一意的に生成される。ハフマンコードの長さの
みが圧縮データと共に格納され、伸縮ユニット6は図1
5の同様のアルゴリズムを用いてコードを割り当てる。
従って、圧縮及び伸縮の一致が保証される。
【0090】中間バッファ28からのトークン及びハフ
マンコード32がいずれもハフマンエンコーダ34へ入
力される。ハフマンエンコーダ34は、圧縮された出力
データ36の第1の部分として、各ビン対するハフマン
コードレングスを出力する。そのレングスは、ハフマン
ビン0から始まり、最後のハフマンビンまで出力され
る。好ましい実施例では1〜15ビットの範囲であるコ
ードレングス自体は、空間を節約するために圧縮フォー
マットで出力される。レングスフィールドにおいてゼロ
であるということは、所定のビンが起こらないことを意
味している。好ましい実施例において、単一のランレン
グス圧縮フォーマットは、4ビットによって表される各
レングスを用いて、このレングステーブルをコード化す
るために用いられる。他の実施例において、そのレング
ス自身も、可変ハフマンコードを用いてコード化される
ことができ、ハフマン長のためのコード化を特定するた
めにデータの始めにさらに他のテーブルが置かれてい
る。このテーブルは、圧縮されずに含まれている。なぜ
なら、繰り返される連続レングス(つまり、ラン)がハ
フマンコードとしてどのように含まれているか(或いは
含まれているかどうか)に応じて、32個よりも少ない
コードが典型的には含まれるからである。
【0091】割り当てられ出力されたハフマンコードと
共に、その後、ハフマンエンコーダは、中間バッファ2
8内のトークンを処理して、各トークンに対するハフマ
ンコードを圧縮された出力データストリーム36へ出力
する。たいていのストリングトークンは、ハフマンコー
ドの後に添付される余分なビットを必要とする。先ず、
ストリングオフセットを特定するために必要な余分のビ
ットが出力される。好ましい実施例において、長さ6以
上のストリング(ハフマンビン319〜334)の後ろ
には、図13に示されるように、ストリングオフセット
コード化が後続している。レングス3、4及び5(ハフ
マンビン256〜318)のストリングに対するコード
の後ろには、図14に示されるように、特定された余分
のオフセットビットの数が後続している。次に、ストリ
ング長を十分に特定するために必要な余分のビットが出
力される。好ましい実施例において、図14に示される
ように、ハフマンビン334のみが余分なレングスビッ
トを必要としている。他の実施例において、中間バッフ
ァに出力トークンを格納する代わりに、元の入力データ
が、スライディングウインドウ探索アルゴリズムによっ
て再び処理され、最初のスライディングウインドウ探索
後に生成されるハフマンコードに基づいて、トークンス
トリームが、2回目の生成されるようにコード化され
る。
【0092】圧縮ユニット4の出力はビットストリーム
である。好ましい実施例において、ビットは、16ビッ
トワードで出力され、第1のビットがワードの最上位ビ
ットであり、連続ビットがワードの最下位ビットまで満
たしている。ワードが満たされると、最下位バイトが最
初に出力され、再びワードの最上位ビットから始まる最
初のワードが蓄積される。全てのトークンがコード化さ
れて出力されると、特別のハフマンコード(好ましい実
施例においては335)が圧縮データの終了を示すため
に出力され、パッドビットが出力ワードの残りを埋める
ために出力される。最終コードは伸張ユニット6を停止
するために用いられる。他の実施例においては、ビット
が8ビットバイトで出力されることも可能であり、或い
は、ビットが最下位ビットを先頭として蓄積されること
もでき、或いは、ワードが最上位バイトを先頭として出
力されることもできる。
【0093】図3は、スライディングウインドウ探索ブ
ロック24によるトークン生成の一例を含む単純な結果
のテーブルを示している。テーブルは、2つの列に分け
られており、第1列50は、入力データストリームを示
しており、第2列52は、トークン及び生データの出力
ストリームを示している。トークンを生成させるために
必要な最小マッチストリング長は好ましい実施例におい
ては3である。なぜなら、それが、経験的に最良の結果
を与えるようであるからである。
【0094】第2列52は、行60〜70によって参照
される。第1の入力バイトはキャラクタ「A」であり、
これは以前には現れなかったもので、生のバイト「A」
に対応する出力トークンを有している(行60)。次の
入力バイトはキャラクタ「B」であり、これは同様に以
前には現れなかったもので(スライディングウインドウ
履歴は「A」のみを有している)、従って、生のバイト
「B」に対応する出力トークンを有している(行6
2)。次の入力バイトはキャラクタ「A」である。好ま
しい実施例において、3又はそれ以上を有するストリン
グのみがマッチするストリングとしてコード化されるの
で、キャラクタ「A」は、生のバイト「A」として出力
される(行64)。しかしながら、次の「A」キャラク
タが起こると、全ての「A」キャラクタが処理された後
に、オフセット1でレングス5を有するマッチするスト
リングが見いだされる。従って、対応するトークン(行
66)が生成される。次の入力バイトは「C」であり、
これは以前には現れなかったもので、従って、生のバイ
ト「C」に対応する出力トークンを有している(行6
8)。次の3つのバイト「ABA」は、入力データスト
リームの先頭のストリングにマッチしている。従って、
オフセット9でのレングス3のストリングのマッチを示
すマッチするストリングのためのトークンが出力される
(行70)。
【0095】全てのデータ構造(例えば、履歴アレイ1
02、ハッシュテーブル100、及びオフセットアレイ
104(図4))は、RAM16内に維持され、RAM
16は1つ又は多数のRAMユニットを有していること
ができる。好ましい実施例において行われる好ましいデ
ータ構造のより詳細な説明は、それらを構築し維持する
圧縮ユニット4の説明の間に、以下に説明される。
【0096】以下に論じられる全ての数値パラメータの
値(例えば、MEMSIZE、16ビットHPTRサイ
ズ等)が、本発明の圧縮伸張技術の背後にある基本概念
に影響を与えることなく修正され得ることを、当業者は
認識するであろう。
【0097】上記実施例において、バイトがマッチしな
かった場合には、スライディングウインドウ探索24
が、入力バイトストリームの履歴アレイを遡って現在の
入力バイトまでマッチし、現在の入力バイトを含むスト
リングを探索する。そのような新たなストリングが見い
だされた場合には、マッチの長さがインクリメントさ
れ、新たなマッチストリングの位置が定められて記憶さ
れる。このように、このストリングマッチが「拡張」さ
れている。そのような新たなストリングが見いだされな
い場合には、或いは、非常に多くの以前の入力バイトエ
ントリーが探索されなくてはならない場合には、現在の
マッチするストリングが最大のストリングであると見な
され、そのコード化トークンが出力される。コード化さ
れたトークンは、その長さ及び入力バイトストリームを
格納する履歴内の相対位置を含んでいる。オフセット
は、バッファ内のストリングの開始位置からマッチした
バイトまでのバイト数として算出される。このバイト数
は、好ましい実施例においては1からメモリサイズ(M
EMSIZE−1)の範囲である。
【0098】ハッシング技術は、好ましい実施例におい
ては、効率的なストリング探索を行うために用いられ
る。入力バイトストリームに対するストリング探索操作
を行うために多くの実現方法があることを当業者は認識
するであろう。特に、マッチするストリングを見いだす
ために用いられ得る多くのハッシング技術及び探索方法
がある。各種のハッシング技術についての完全な背景に
関しては、KnuthのSorting and Searching, The Art of
Computer Programming (Vol. 3) pp. 506-549 (1973)
を参照されたい。この文献は参考として本明細書に援用
されている。以下は、好ましい実施例によって用いられ
る特定のハッシング構造の詳細な説明である。説明され
るデータ構造及びアプローチが選択された理由は、それ
らが、ストリング探索機能のために必要なRAMサイク
ルの数を最小とし、システムのスループットを最大とす
るからである。
【0099】図4を参照して、ハッシュ構造の好ましい
実施例が説明される。すでに処理された(圧縮された、
又は生データとして圧縮されなかった)入力データの最
後のMEMSIZE(好ましくは2048)のキャラク
タを包含する履歴アレイ102がRAM16に格納され
ている(図1(a))。新たな入力データがスライディ
ングウインドウ探索24によって受け取られると、本発
明は、先ず、新たな入力データ中の少なくとも2バイト
の「ストリング」が履歴アレイ102中のストリングと
マッチするかどうかをチェックする。マッチすれば、少
なくとも3バイト長のマッチするストリングを見いだす
ように探索が拡張される。少なくとも3バイト長のマッ
チするストリングが見いだされると、マッチするストリ
ングを表すトークンが出力される。少なくとも3バイト
長のマッチするストリングが見いだされない場合には、
現在処理されているバイトを表す生データトークンが出
力される。
【0100】ハッシュテーブル100は、履歴アレイ1
02中の特定のストリングを素早く見いだすために用い
られる。ハッシュテーブル100は、履歴アレイ102
への履歴アレイポインタを含む一連のエントリで構成さ
れている。オフセットアレイ104と称されている他の
データ構造はハッシュリンクテーブルである。オフセッ
トアレイ104中の各リンクリストの第1の要素は、特
定のハッシュ値に対応する履歴アレイ中の前のエントリ
を指し示している。リンクリスト中の最後の要素(この
要素は無効なポインタであってもよい)はこのハッシュ
値に関連付けられた最も古いエントリを指し示してい
る。スライディングウインドウ探索24は、各入力バイ
トが処理された後にインクリメントされる16ビットの
履歴ポインタHPTR108を維持している。HPTR
108は0に初期化される。好ましい実施例において、
圧縮操作は、64Kサイズよりも大きなブロックに関し
ては行われない。従って、HPTR108は、64Kバ
イトがスライディングウインドウ探索24によって処理
された後に、0へ戻るように「ラップ」する必要はな
い。HPTR108がラップしないので、HPTR10
8の「ラッピング」によって無効となったハッシュテー
ブルからの古いエントリを取り除く必要がない。オフセ
ットアレイ104は実際には単純リンクリストから構成
された2次ハッシュである。ある特定のオフセットがM
EMSIZE−MAXSTR(ここでMAXSTRは探
索されている最大のストリングである)よりも大きい
か、又はリストの最近のエントリからの全てのリンクの
合計がMEMSIZE−MAXSTRよりも大きい場合
には、特定のハッシュビン(値)中に有効なエントリは
もはや存在しない。このようにして、MEMSIZE−
MAXSTRよりも古いエントリは履歴アレイ102の
終わりから効果的に「離れ落ちる(fall off)」。本発
明のこの点により、オフセットアレイ104中の単純リ
ンクリストの使用を可能にする。単純リンクリストの維
持は、二重リンクリストに比べて半分以下のメモリアク
セスによって行うことができる。
【0101】図5〜図7及び図8を参照して、本発明の
スライディングウインドウ探索の詳細な流れ図が論じら
れる。流れ図(図5〜図7及び図8)の特定のデータ経
路を示すハード的に配線された版を図9に示す。
【0102】より詳細には、図5〜図7において、スラ
イディングウインドウ探索ルーチンがブロック109で
スタートする。次に、ブロック110では、初期化ルー
チン(図8)が呼び出され、図4に示すハッシュ構造が
初期化される。この操作は、新たなウインドウ探索操作
のそれぞれの開始時に行われる。
【0103】図8において、ブロック112では、ハッ
シュポインタ108(HPTR)が0に設定される。ブ
ロック114(図8)では、現在コード化されているビ
ットストリングの現在の長さを追跡するためのマッチ長
変数(「MATCHLEN」)が0に設定される。次
に、ブロック120の間に、ハッシュテーブル100が
値HPTR−MEMSIZEで埋められる。このステッ
プにより、ハッシュテーブル100の以前の有効な全て
の値が効果的に空にされる。
【0104】図5〜図7を再び参照すると、初期化ルー
チン(図8)の終了後、入力されるデータストリームか
らのバイトを受け入れるためにスライディングウインド
ウ探索が始まり得る。ブロック128の間に、操作を初
期化するために、履歴アレイ102の最初の2つのバイ
トが入力データで埋められる。この2バイトは、レジス
タINREG0及びINREG1に保持される。新たな
1バイトが処理される度に、第1バイト及び次の入力バ
イトのハッシュ(「H」)が計算される。好ましい実施
例において、INREG0を左に4ビットシフトたもの
とINREG1との排他的論理和を求めることによって
ハッシュが計算される。上述のように、Knuth(以前に
参照した)によって論じられるいずれのハッシュ関数も
適用可能である。新たな1個の入力バイトが処理される
度に、INREG1の内容がINREG0へ移され、I
NREG1には新たなバイト値がロードされる。
【0105】ブロック128で処理される各バイトに対
して、ハッシュ値H(「H」)が計算され、新たなハッ
シュ値に対応するハッシュリスト内の古いエントリが読
み出されてNEXTと称される変数に格納される。ま
た、ブロック128では、現在のハッシュ値に対応する
ハッシュテーブル中の古いエントリがHPTRの現在の
値で置換される。ブロック140では、HPTR−NE
XT>=MEMSIZE−MAXSTRであるかどうか
が判定される。変数MAXSTRは、履歴アレイ102
中で見いだされるバイトのマッチするストリングが現在
処理されているバイトによって上書きされないことを保
証する、探索されている最大ストリングサイズの値であ
る。MEMSIZE−MAXSTRよりも大きいか又は
等しい値にであると判定されると、処理はブロック14
2へ進み、変数NEXTはHPTR−MEMSIZEに
等しく設定される。言い換えると、履歴の最後のMEM
SIZEバイト中にマッチするストリングがなかったた
め、ハッシュビンが空にされる。
【0106】MEMSIZE−MAXSTRよりも大き
いか又は等しい値となるかどうかの判定に拘らず、処理
はブロック144へ進む。ブロック144では、値HP
TR−NEXTが対応するオフセットアレイ104のエ
ントリであるOFFSET(HPTR)に書き込まれ
る。同様に、ブロック144では、INREG1の値が
履歴アレイ102のエントリであるHISTORY(H
PTR)に置かれる。上記ブロック128、140、1
42及び144で行われるステップにより、現在処理さ
れているバイトに必要なデータ構造の保守は完了し、こ
の時点で、履歴アレイ102の内容のストリング探索が
開始され得る。スライディングウインドウ探索がストリ
ングマッチを現在処理しているかどうかに拘らず、処理
される全ての入力バイトに対して上記ハウスキーピング
機能が行われることに注意されたい。他の実施例におい
て、ハウスキーピング機能の幾つかは、圧縮比率でのわ
ずかなコストでの操作のスループットを増大させるため
に、処理される入力バイトの幾つかに対してのみ行われ
る。
【0107】ブロック146では、マッチ長変数MAT
CHLENが0に等しいかどうかが判定される。ブロッ
ク114の初期化ルーチン(図8)ではMATCHLE
N変数が0に設定されたことを想起されたい。MATC
HLENは、現在のストリングマッチ長を包含してお
り、操作の開始時には0である。ここで、圧縮操作の開
始時での処理を行っており、MATCHLENが0であ
る場合には、内部ハッシュカウンタHASHCNTが0
に設定される。HASHCNTは、いずれかの特定のス
トリング探索の反復を制限するために用いられる。次
に、ブロック150では、HPTR−NEXT>=ME
MSIZE−MAXSTRであるかどうかが判定され
る。得られる値がMEMSIZE−MAXSTRよりも
小さいと判定されると、処理はブロック152へ進む。
ブロック152の間に、変数INREG1が履歴アレイ
のHISTORY(NEXT)の値に等しいかどうかが
判定される。このステップの目的は、履歴アレイ中の先
行するエントリに対して、INREG0及びINREG
1における2バイトにマッチする2バイトストリングを
探索することである。INREG1における値のみがH
ISTORY(NEXT)の値と比較される。なぜな
ら、ハッシュ機能が、INREG0に対して1対1の写
影が行われるように選択されるので、ハッシュリスト中
の各ストリングからの1バイトのみがINREG1と比
較される必要があるからである。このステップは、本実
施例の性能を高める。なぜなら、2バイト比較に代えて
1バイトの比較を行うだけでよいからである。ブロック
150においてMEMSIZE−MAXSTRよりも大
きい又は等しいと判定された場合には、処理はブロック
158へ進む。ブロック158では、INREG0バイ
トを示す生のデータバイトトークンが出力され、処理が
ブロック125へ進む。ブロック125では、次の入力
バイトが得られ、処理全体が再び開始される。
【0108】ブロック152においてマッチしていると
判定された場合には、処理はブロック160へ進み、変
数MATCHPTRが変数NEXTの値に等しく設定さ
れる。加えて、変数MATCHLENが2バイトマッチ
を示すように2に設定され、長さ2よりも大きなマッチ
するストリングが結局ない場合には、INREG0の内
容が変数OLDRAWに格納される。処理は、ブロック
125へ進み、そこで、次の入力バイトが得られる。し
かしながら、HISTORY(NEXT)での値がマッ
チしない場合には、処理はブロック154へ進み、HA
SHCNTの値がインクリメントされ、変数NEXTが
NEXT−OFFSET(NEXT)に等しく設定され
る。このステップにより、オフセットアレイ104によ
ってリンクされている次のエントリが効果的に指し示さ
れる。処理はブロック156へ進み、HASHCNTが
所定の最大カウント値MAXHCNT(典型的には8)
に達しているかどうかが判定される。HASHCNTが
MAXHCNTよりも大きい又は等しい場合には、処理
はブロック158へ進み、INREG0に対する出力生
バイトトークンが出力され、処理はブロック125へ進
む。しかしながら、HASHCNTがMAXHCNTよ
りも大きくなく又は等しくもない場合には、HASHC
NTがMAXHCNT(つまり、好ましい実施例では
8)に達するまで、又はハッシュリスト中にそれ以上有
効なエントリが存在しなくなるまで(ブロック150で
判定される)、又はマッチするストリングが見いだされ
るまで(ブロック152)、ブロック150、152、
154及び156の処理を継続する。
【0109】最終的に、処理はブロック125へ進み、
この時点で、スライディングウイントウ探索は、次の入
力データバイトを処理する準備ができている。ブロック
125では、HPTRがインクリメントされる。MAT
CHLENがブロック146で0よりも大きいと判定さ
れるまで、ブロック128、140、142、144、
146、148、150、152、154、156、1
58、160及び125の処理が継続される。ブロック
146では、MATCHLENが0に等しくない場合に
は、処理がブロック162へ進むことに注意されたい。
ブロック162では、変数MATCHPTRが1だけイ
ンクリメントされる。このように、新たな値INREG
1は、履歴アレイ102中のMATCHPTRにおいて
見いだされるMATCHLEN+1の長さのストリーム
における次のバイトと比較される。ブロック164で
は、バイトがマッチしているかどうかの判定がなされ
る。バイトがマッチする場合には、ブロック180でM
ATCHLENがインクリメントされてストリングが拡
張され、処理はブロック125へ進む。しかしながら、
バイトがマッチしない場合には、処理はブロック166
へ進み、変数NEXTがMATCHPTR−MATCH
LEN+1に等しく設定される。処理は、ブロック16
8へ進み、変数NEXTがNEXT−OFFSET(N
EXT)に等しく設定される。加えて、ブロック168
では、変数HASHCNTがインクリメントされる。ス
テップ166及び168は、ハッシュリストの残りの連
続するストリングエントリにおいた、マッチがとれる元
のストリングを探索するスライディングウインドウ探索
を効果的に引き起こす。ブロック170では、HPTR
−NEXT>=MEMSIZE−MAXSTRであるか
どうかが判定される。MEMSIZE−MAXSTRよ
りも大きいと判定された場合には、有効なエントリはそ
れ以上存在せず、処理はブロック124へ進む。ブロッ
ク124では、MATCHLENが2よりも大きいかど
うかが判定される。大きくないと判定されると、処理は
ブロック126へ進み、変数OLDRAWにおける生デ
ータバイトを表す出力トークンが出力される。その後、
NEXTはINREG1及びINREG0の最新のハッ
シュ値に対応して、ハッシュリストで置換される。その
後、MTACHLENが0にリセットされ、処理はブロ
ック148から再開される。
【0110】ブロック124でMATCHLENが2よ
りも大きいと判定された場合には、処理はブロック18
2へ進み、スライディングウインドウ探索24が、マッ
チするストリングの長さ(MATCHLEN)及び履歴
アレイ102内でのそのオフセット(OFFSET=H
PTR−MATCHPTR)を表すトークンを出力す
る。処理はブロック184へ進み、MATCHLENが
0に設定され、処理は、新たなバイトに対してブロック
125を開始する。
【0111】しかしながら、ブロック170においてM
EMSIZE−MAXSTRよりも小さいと判定された
場合には、処理はブロック172へ進み、MATCHL
EN>=MAXSTRであるかどうかが判定される。M
ATCHLEN>=MAXSTRである場合には、探索
は限界に達し、処理はブロック124へ続く。しかしな
がら、MATCHLENがMAXSTRよりも大きくな
く、等しくもないと判定される場合には、処理はブロッ
ク174へ進む。
【0112】ブロック174では、位置HISTORY
(NEXT)におけるMATCHLEN+1の現在のス
トリングが内部マッチバッファの内容に等しいかどうか
が判定される。内部マッチバッファは、現在のマッチし
ているストリングのMATCHLEN個の全てのバイト
を包含している。このバッファによって、このストリン
グをマッチさせる最初の試みが失敗しても、新たなスト
リングの探索が高速化される。マッチが行われる度にマ
ッチをとろうとするバイトを得るためにRAMにアクセ
スする必要はなく、マッチをとろうとするバイトがチッ
プ内で即座に利用可能であるので効率的である。言い換
えると、マッチバッファは、処理を効率的に向上するた
めのルックアサイド(look aside)バッファ
として機能する。マッチバッファの長さは有限である
(好ましい実施例においてMAXSTR=8バイト)。
【0113】HISTORY(NEXT)におけるMA
TCHLEN+1のストリングがマッチバッファの内容
に等しい場合には、処理はブロック178へ進み、変数
MATCHPTRがNEXT+MATCHLENに等し
く設定される。処理はブロック180へ進み、そこで、
MATCHLENがインクリメントされ、処理はブロク
125へ進む。ブロック125では、入力データストリ
ームにおける次の新たなバイトが処理される。しかしな
がら、HISTORY(NEXT)におけるストリング
がマッチバッファに等しくない場合には、処理がブロッ
ク176へ進み、変数HASHCNTがMAXHCNT
よりも大きい又は等しいかどうかに関する判定がなされ
る。HASHCNTがMAXHCNTよりも大きい又は
等しい場合には、処理はブロック182及び184へ進
み、履歴アレイにおけるマッチの長さ及びオフセットを
含むマッチストリングトークンが出力され、変数MAT
CHLENが0に設定される。処理は、ブロック125
へ進み、次の新たな入力データバイトが処理される。し
かしながら、ブロック176においてHASHCNTが
MAXHCNTよりも大きくなく又は等しくもない場合
には、処理は、MATCHLEN+1の長さのマッチが
見いだされるまで、又はHASHCNTがMAXHCN
Tに達するまで、又は有効なハッシュエントリがそれ以
上存在しなくなるまで(HPTR−NEXT>=MEM
SIZE−MAXSTR)、ブロック168、170、
172、174及び176の処理を継続する。
【0114】好ましい実施例において、上記操作は、R
AM16(図1(a))が全てのクロックサイクルでも
使用中であることを保証するために、パイプライン化さ
れる。なぜなら、RAMサイクルカウントが性能を制限
する要因であるからである。
【0115】典型的には、記憶システムにおいて、デー
タは、一定サイズのセクタ又はブロックへ分割されなく
てはならず、所定段階で圧縮が切り捨てられ、次に、残
りの入力ストリームに関する新たな処理が再スタートす
る。圧縮ユニット4はその後、後述される特別な「圧縮
データの終わり」トークンを出力する。
【0116】本発明がなされる過程において、圧縮方法
の広範なソフトウエアシミュレーションが行われた。M
AXHCNT、HASHSIZE、マッチバッファサイ
ズ及びMEMSIZEを含む全てのパラメータの値が変
化させられて、スループット及び圧縮比に対するそれら
のパラメータの影響が調べられた。好ましい実施例の特
定の形式及びパラメータの組は、これらの性能上の論点
に対して受け入れ可能なトレードオフが得られるように
選択された。しかし、多くの類似のパラメータの組及び
コード化は実質的に同様の性能に帰着する。
【0117】図9に、好適な実施態様におけるスライデ
ィングウインドウ探索24(図2)および出力トークン
の生成を含む回路図228を示す。回路228の要素は
デジタル論理によって実現される。回路228は、圧縮
コントローラ兼シーケンスユニット230によって制御
される。圧縮コントローラ兼シーケンスユニット230
は、回路228の要素のそれぞれに一連の制御ライン
(図示せず)によってリンクされている。好適な実施態
様では、毎秒数メガヘルツで作動する内部クロック(図
示せず)は、作動中の各クロックサイクルにおいて1個
以上の要素に働きかけるコントローラ兼シーケンスユニ
ット230の活性化レベルを定める。実際の作動および
それらのシーケンスは、すでに論じた図5〜図7および
図8に示されている。
【0118】回路228におけるデータフローのより詳
細な説明を行う。入力バイトストリームの圧縮されてい
ないバイトは、圧縮ユニット4に入力され、ライン24
4を介して入力FIFO232に与えられる。入力FI
FO232に格納されたバイトは、2個の拡張FIFO
レジスタINREG1(233)およびINREG0
(235)に転送される。より詳細には、FIFO23
2からのデータはライン246を介してINREG1レ
ジスタ233に与えられる。INREG1レジスタ23
3に格納されたデータは、次にライン248および25
0を介してINREG0レジスタ235に転送される。
INREG1およびINREG0レジスタの目的はハッ
シュ関数237への入力を発生することにあることを想
起されたい。ハッシュ関数237の出力はライン255
を介してマルチプレクサ256へ伝送される。
【0119】INREG1レジスタ233において、マ
ッチングストリングが見い出せない場合には、それはラ
イン248、254、および258を介して出力管理部
260へ送られる。出力管理部260の目的は、生のデ
ータバイトおよびマッチングストリングの出力トークン
を生成することにある。出力管理部260の出力は、ラ
イン262を介してビットバイト変換器264へ伝送さ
れる。次にこのデータはライン268を介して出力FI
FO234に入力される。出力トークンは、出力FIF
O234からライン270を介して中間バッファ(図2
の28)へ出力される。
【0120】INREG1レジスタ233の内容はま
た、ライン248、254、および272を介して内部
マッチバッファ274へ送られる。内部マッチバッファ
274の目的は、マッチングプロセスの能力を効果的に
向上させるための「ルックアサイド(lookaside)」バ
ッファとして機能することにある。マッチバッファ27
4の内容はバイト比較レジスタ276の内容と比較され
る。マッチバッファの内容は、ライン278上に多重化
されてバイト比較レジスタ276へ送られる。バイト比
較レジスタ276の内容は外部のRAM238内に格納
されている履歴アレイ102(図4)から得られる。履
歴アレイのエントリの内容は、ライン280を介してラ
ッチ282に入力され、次に、ライン284および28
6を介してバイト比較レジスタ276へ送られる。ブロ
ック276によって実行されるバイト比較の結果は、ラ
イン288を介して圧縮コントローラ兼シーケンスユニ
ット230に伝達される。圧縮コントローラ兼シーケン
スユニット230は比較結果を評価し、制御ライン(図
示せず)を介して回路228の様々な要素に適切な制御
信号を送り出す。
【0121】INREG0レジスタ235の内容はま
た、ライン251および290を介してマルチプレクサ
292へ送られ得る。マルチプレクサ292は調停を行
い、INREG0の内容をライン294を介してラッチ
296へ送る。ラッチ296の内容は、ライン298を
介してRAM238内のデータ構造の履歴アレイ102
(図4)へ出力される。
【0122】ライン280を介してRAM238から入
力されるデータはまた、ラッチ282並びにライン28
4、300、および302を介してレジスタ304へ送
られる。このパス上のデータは、NEXTと称される変
数に格納された古いハッシュポインタを含んでいる。レ
ジスタ304の内容は、ライン305、306、および
307を介してマルチプレクサ256へ出力される。レ
ジスタ304の出力はまた、ライン305および308
を介してオフセットレジスタ310に与えられる。オフ
セットレジスタ310の機能について簡単に説明する。
レジスタ304の内容はまた、ライン304、305、
306、および312を介してMATCHPTRのため
の変数内容を含むレジスタ314へ送られる。レジスタ
314の出力(MATCHPTR)は、ライン316を
介してマルチプレクサ256へ送られる。レジスタ31
8の目的は、ポインタHPTRをインクリメントするこ
とである。レジスタ318の出力は、ライン320およ
び322を介してマルチプレクサ256へ送られる。他
に、レジスタ318の出力はまた、ライン320および
324を介してオフセットレジスタ310へ送られる。
オフセット関数の目的は、履歴アレイ中の適切なオフセ
ットを計算すること、またはライン324および308
を介してレジスタ318および304から入力されるデ
ータからHPTR−NEXTを計算することにある。
【0123】修正スイッチ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を介して送られ
る。
【0124】出力管理部260へのコード化のための長
さ入力は、回路図228の最下部に示されているレジス
タ338によって維持されている。レジスタ338の出
力はライン340を介して出力管理部260に与えられ
る。マルチプレクサ256の目的は、RAM238内の
適切なデータ構造を選択するために、ライン316、3
22、307および255上のアドレスの内のいずれを
出力するかを調停することにある。
【0125】図10を参照して、入力および出力FIF
Oの使用について説明する。入力FIFO232(図
9)および出力FIFO234(図9)を、圧縮ユニッ
ト4の入力および出力側に示す。入力および出力FIF
Oは好ましくは、圧縮ユニット4および伸張ユニット6
と同じチップ内にある。
【0126】図11に、本発明の圧縮されたデータ出力
フォーマットを400として示す。圧縮されたデータ出
力フォーマット400は、圧縮されたハフマン長テーブ
ル402およびコード化されたハフマントークン404
から構成される。コード化されたハフマントークン40
4は、生のデータバイトまたはハフマン長テーブルに従
ったマッチングストリングを表現している。図11にも
示す各コード化されたハフマントークン404はハフマ
ンビンコード406を有している。ハフマンビンコード
406が1より多い可能なオフセットを有するマッチン
グストリングを示すなら、コード化されたハフマントー
クン404はまた、特定のハフマンビンコード406に
対するストリングの正確なオフセットを示す余分なオフ
セットビット408を有する。同様に、ハフマンビンコ
ード406が1より多い可能な長さを有するマッチング
ストリングを示すなら、コード化されたハフマントーク
ン404はまた、特定のハフマンビンコード406に対
するストリングの正確な長さを示す余分な長さビット4
10を有する。
【0127】ほとんどのデータにおいて、ストリングの
大部分が長さ3、4、または5であることが経験によっ
て判明している。このため、好適な実施態様では、これ
らのストリング長は複数のハフマンビンに分割され、こ
れによりオフセット分布に対するハフマンコードのより
良いマッチングが可能となっている。ハフマンビン内の
これらのストリングの長さおよびオフセットを組み合わ
せなければ、ストリングのハフマン丸め誤差はより有意
なものとなる。例えば、これらの長さのストリングに対
するトークン確率によれば(オフセットを無視して)、
大抵が2〜5ビットの長さを有するハフマンコードを導
いている。長さおよびオフセットを基にしてこれらのビ
ンを分割すると、これらのビンのハフマン長は典型的に
は6〜10ビットの範囲である。このビン分割によって
得られる余分なコーディング効率により、ほんの2Kバ
イトのウインドウサイズでもってしても良好な圧縮比率
が得られる。また、より大きいウインドウを用いると、
組み合わせたビンを用いない場合よりも組み合わせた長
さ/オフセット対を用いる方がわずかに高い圧縮比率が
得られた。
【0128】図12は、本発明に従ったトークンビンの
配列の一例を示す表である。列450はハフマンビンの
数を示し、列452は各ビンによって表現されているも
のの記述を示し、また列454は、存在するならば、各
ビンによって表現されているオフセットの範囲内での正
確なオフセットを特定する必要がある余分なオフセット
ビットの数を示している。例えば行462はハフマンビ
ン0から255がコード0から255を有する生のバイ
トを表現することを示している。生のバイトコードはA
SCIIまたは他の類似のコード体系から決定され得
る。生のバイトはマッチングストリングではないので、
ハフマンビン0から255は余分なオフセットビットを
必要としない。別の実施例では、行464はハフマンビ
ン256から258が1のオフセットを有している長さ
3、4、および5のマッチングストリングそれぞれを表
現していることを示している。1つのオフセット値のみ
がハフマンビン256から258のそれぞれによって示
されるので、これらのビンは余分なオフセットビットを
必要としない。さらなる実施例では、行466はハフマ
ンビン295から297が128から191の範囲のオ
フセット値を有する、長さ3、4、および5のマッチン
グストリングそれぞれを表現していることを示してい
る。128から191の範囲にある64個のオフセット
値の何れが所定の出力トークンによって表現されるかを
特定するために、6つの余分なオフセットビットが必要
とされる。
【0129】さらに別の実施例では、行468がハフマ
ンビン319から333が長さ6から20のマッチング
ストリングそれぞれを表現することを示している。6以
上の長さを有するマッチングストリングに対するオフセ
ットを特定するために必要とされる余分なオフセットビ
ットを図13に示し、以下に説明する。さらに別の実施
例では、行470はハフマンビン334が長さ21以上
のストリングを表現することを示している。このビンは
1つの特定の長さより長いストリングを表現しているた
め、余分な長さビットはこのビンを含有するトークンに
よって表現される特定の長さを特定する必要がある。こ
のビン中のマッチングストリングの長さを特定する必要
がある余分な長さビットを図14に示し、以下に説明す
る。長さが6以上のマッチングストリングのオフセット
を特定する必要がある余分なオフセットビットを図13
に示し、以下に説明する。最後の実施例では、行472
はハフマンビン335が圧縮されたデータマーカーの末
端部を表現することを示している。明らかに余分なオフ
セットビットは必要とされない。
【0130】当業者であれば、基本圧縮技術を変えるこ
となく、本明細書に記載の全てのパラメータ(例えば、
MEMSIZE、特定のビン配列等)の値を改変し得る
ことを認識するだろう。
【0131】好適な実施態様では、長さが6以上の全て
のストリングは図13に示す固定オフセットコード化を
用いている。別の実施態様では、長さが6以上のストリ
ングもまた、好適な実施態様において長さ3、4、およ
び5のストリングに用いられたものと同様の、組み合わ
せたストリング長およびオフセット範囲を持つビンを有
し得る。しかし、ほとんどのストリングが長さ5以下で
あるため、追加のハフマンテーブルエントリを格納する
ために必要とされる余分なスペースは、より長いストリ
ング上におけるより良いコーディングによる利得と匹敵
するものであり、そのような実施態様においては、圧縮
比率において極めて適度な利得が得られたことが、経験
により判明した。同様に、別の実施態様において2バイ
トである最小のストリング長を用いると、ほとんどまた
は全く圧縮比率利得が経験的に観察されなかったが、こ
れは生のバイト上のハフマンがストリングコード化と同
様に長さが2のストリングを典型的にコード化するため
であろう。
【0132】図13の502に示すように、1から32
の範囲のオフセットが2つのビット「00」およびそれ
に続く5ビットからなる余分なオフセットビットにより
表現されている。504に示すように、33から160
の範囲のオフセットが2つのビット「01」およびそれ
に続く7ビットからなる余分なオフセットビットで表現
されている。506に示すように、161から672の
範囲のオフセットが2つのビット「10」およびそれに
続く9ビットからなる余分なオフセットビットで表現さ
れている。508に示すように、673から2047の
範囲のオフセットが2つのビット「11」およびそれに
続く11ビットからなる余分なオフセットビットで表現
されている。
【0133】図14に、長さが21以上であるストリン
グの長さを表現するために用いた余分な長さビットの配
列の一例を表にして示す。520の列は可能なストリン
グ長を示しており、522の列は所定の長さを特定する
ために用いられる対応する余分な長さビットを示してい
る。
【0134】図15に、ハフマン長からハフマンコード
を割り当てるアルゴリズムをCプログラム言語で記載す
る。540において、一例であるサブルーチンを通過し
た変数を定義する。変数「lengths」は各コードの長さ
の配列である。変数「codes」は、サブルーチンによっ
て生成される割り当てられたハフマンコードの配列であ
り、それぞれ32ビットを限度とする。変数「size」は
「lengths」配列中のエントリ数を表現する整数であ
る。542において、サブルーチンの頻度カウントが初
期化される。544において、各長さの頻度がカウント
される。546において、ベースコードが割り当てられ
る。548において実際のハフマンコードがビンに割り
当てられる。
【0135】図16において、本発明に従ってハフマン
長さテーブルをコード化するために用いられるランレン
グス符号化の使用法を示す。長さテーブル570は種々
のセグメント572を含有する。セグメント572は、
ゼロカウント574、非ゼロカウント576および非ゼ
ロ長さ580を有している。ゼロカウント574および
非ゼロカウント576はそれぞれカウント578を有し
ている。カウント578はゼロまたは非ゼロカウントを
表現する。カウント578は図16に示すようにコード
化される。「0000」のカウントは全テーブルの末端
部を表現する。カウント「0001」から「1110」
はカウント1から14をそれぞれ表現する。カウント1
5から270は「1111」およびそれに続く8ビット
からなるカウントによって表現される。非ゼロ長さ58
0は図16に示すようにコード化される。「0000」
の非ゼロ長さは全テーブルの末端部を示す。「000
1」から「1111」の非ゼロ長さは1から15の非ゼ
ロ長さをそれぞれ表現する。
【0136】テーブルの符号化の一例を582に示す。
実施例において示す全ての数量は4ビットニブルであ
る。一例である長さテーブル584はコード化される以
下の長さを含有する:0、0、0、0、8、9、1、
0、5、4、0、0、0。テーブルの最初のセグメント
は4、3、8、9、1、であり、それは4つのゼロ、3
つの非ゼロ、および3つの非ゼロ長さ8、9、1を表現
している。テーブルの第2のセグメントは1、2、5、
4、であり、それは1つのゼロ、2つの非ゼロ、および
2つの非ゼロ長さ5、4を表現している。テーブルの最
後のセグメントは3、0であり、それは3つのゼロおよ
びテーブルの末端部を表現している。
【0137】図17〜図22を参照して、小さな入力ス
トリームに対する圧縮ユニット4の簡潔化されてはいる
が完全な出力例の段階を、好適な実施態様におけるコー
ド化方法を用いて、説明する。この場合、入力ストリー
ムのサイズは図に示すにはあまりに小さいため、出力デ
ータストリームは実際には入力データストリームより大
きい。しかし、この例は、どのように圧縮符号化ステッ
プが実行されるかを正確に説明するのに役立つ。
【0138】図17に、一例として、ASCIIテキス
トのフレーズ"this is a small small example"を示し
ている。列600に、スライディングウインドウ探索に
よって生成されたトークンを挙げている。列602に、
各トークンに対応するハフマンビンを図12に示すハフ
マンビン配列に従って表記する。
【0139】図18において、列610にハフマンビン
を数値順に表記する。列612に列610の各ビンに対
するビンカウントを表記する。列614に列610の各
ビンに対するハフマン長を表記する。列616に、列6
10の各ビンに対して割り当てられたハフマンコードを
表記する。
【0140】図19に、圧縮されたハフマンテーブルを
示すが、全ての数値は16進法ニブルで表している。圧
縮されたテーブルのセグメントを列620に表記する。
各テーブルセグメントに対応する記述を列622に載せ
る。
【0141】図20に、コード化されたトークンのビッ
トストリームを列630に示す。対応するコード化され
ていないトークンを列632に表記する。
【0142】図21に、テーブルおよびコード化された
トークンからなる出力バイトストリーム640を示す。
図22に、出力ワードにプットバック(put back)され
た出力バイトストリーム640からなる、出力ワードス
トリーム642を示す。
【0143】図23に、本発明に従ってコード化された
伸張データの伸張操作を表わすフローブロック図を示
す。伸張操作は圧縮操作より簡潔であるが、それは主と
してストリング探索が必要でないこと、およびデータが
中間バッファなしに1回のパスで処理され得るためであ
る。
【0144】伸張操作はブロック700において開始
し、伸張ユニット6が圧縮された入力ストリームからハ
フマン長テーブルを読み込む。これらの長さは圧縮され
たフォーマット内に格納されているため、それらは圧縮
ユニット4に用いられる方法に従って圧縮された入力ビ
ットストリームから伸張される。好適な実施態様におい
ては、図16のランレングス符号化が用いられるが、他
の多くの技術もまた使用可能である。公知の各ハフマン
ビンに対するコードの長さを用いて、処理はブロック7
02に進み、図15に示すアルゴリズムを用いて、ハフ
マンコードが各ビンに割り当てられる。トークンビンに
対するハフマンコードの場合、処理はブロック704に
進み、トークンをデコードするためにハフマンツリーが
構築される。 好適な実施態様では、ハフマンツリーは
図24の750に示すように、記憶装置中のデータ構造
によって表現される。ツリーを756に図示する。対応
するハフマンコードを758に列挙する。データ構造7
50の各メモリセルの内容は2つのフィールド、タグビ
ットフィールド752および子/ビンフィールド754
からなる。メモリセル中のタグビットはセルがツリーの
葉を含有しているか、または子があるかを知らせる。タ
グビットが子があることを示すと、セルの残りのビット
が左側の子のメモリアドレスNを与え、右側の子がアド
レスN+1に現れる。タグビットがこれがハフマンツリ
ーの葉であることを示すなら、メモリセルの残りのビッ
トは葉に関連したハフマンビン数を含有している。好適
な実施態様では、メモリ幅は、1つのタグビットおよび
10のアドレスビットからなる少なくとも11のビット
である。好適な実施態様では、336*2メモリセルの
みが実際に完全なツリーを含むことを要求され、これが
10ビットのアドレスを必要としている。
【0145】圧縮された入力データストリームからトー
クンを抜き出し、それらをデコードするために、一度に
1ビットずつが読みだされる。開始メモリアドレスがM
=0に設定される。ビットがゼロなら、左ノード(アド
レスM)の内容が検査される。ビットが1なら、右ノー
ド(アドレスM+1)の内容が検査される。問題のノー
ドが葉でないなら、MはN(そのメモリセルの残りのビ
ット)に等しくなるように設定され、ツリートラバーサ
ルが、この方法で葉ノードが見つかるまで継続される。
【0146】ハフマンビンが生のバイトに相当するな
ら、伸張ユニット6は生のバイトを出力する。ハフマン
ビンがストリングに相当するなら、ストリングオフセッ
トおよび長さを特定する必要がある余分なビットが入力
データストリームから抜き出される。次にストリング
が、一度に1バイトずつ出力される。好適な実施態様で
は、ほとんどのスライディングウインドウ伸張体系でそ
うであるように、これは最後のMEMSIZEバイト出
力の履歴アレイを維持し、バイトを引き出すオフセット
により履歴アレイ中へインデックスバック(indexing b
ack)することにより行われる。出力された全てのバイ
ト、生のバイトまたはストリングバイトのいずれかが、
履歴アレイに加えられる。ハフマンビンが圧縮されたデ
ータマークの末端部に対応するなら、伸張ユニット6は
停止する。そうでなければ、各ストリングまたは生のバ
イトを処理した後、トークンを抜き出す処理は、入力ス
トリームが消耗するまで、または圧縮されたデータマー
クの末端部が見つかるまで継続される。
【0147】別の実施態様では、ハフマンテーブルがマ
ルチビットルックアップテーブルとして構築され、さら
に速い操作を可能とする。ビットの定数(K)が入力ス
トリームから抜き出され、2kエントリを有するテーブ
ル中でルックアップするために用いられる。テーブルサ
イズは典型的には512または1024エントリであ
り、K=9または10に相当する。各テーブルエントリ
はコード長(L)を含有しており、実際に必要とされる
ビット数を知らせる。このコード長がK以下であれば、
抜き出されたビットはハフマンビンを独特の方法で同定
するに充分なものであり、またテーブルエントリの残り
はハフマンビン数を特定する。この場合、入力データス
トリームから抜き出されたK−Lビットは実際には必要
でないため、それらはハフマンビン処理を進める前に入
力ストリームに効果的に「プットバック」された。Kが
Lよりも大きければ、テーブルエントリの残りは、好適
な実施態様において上述したように、一度に1ビットず
つ、トラバースされるハフマンサブツリーの残りのメモ
リ位置(N)を特定する。一般にテーブルの葉エントリ
は2(K-L)回反復される。この技術は、ほとんどのハフ
マンビンが、ハフマンコード長の1ビット当り1メモリ
サイクルではなく、1回のメモリサイクルにより抜き出
されることを可能にし、伸張プロセスの実質的なスピー
ドアップを導いている。
【0148】図23において、一度ハフマンツリーが構
築されると、処理はブロック706に進み、圧縮された
入力データストリームから次のハフマンコードが抜き出
され、そのコードで表現されたビンを決定するハフマン
コードに対するデータ構造へと続く。次に、ブロック7
08において、ハフマンビンが生のバイトであるかが決
定される。生のバイトであれば、処理はブロック710
に進み、生のバイトが伸張データストリームに出力され
る。次に処理はブロック706に戻る。
【0149】ブロック708において、ハフマンビンが
生のバイトでないと決定されると、処理はブロック71
2に進み、ハフマンビンが「圧縮されたデータの末端
部」マーカであるか否かが決定される。是であれば、処
理は終了し伸張は完了する。否であれば、処理はブロッ
ク714に進み、特定のハフマンビンにとって必要であ
れば余分なストリングオフセットビットが抜き出され
る。次に処理はブロック716に進み、特定のハフマン
ビンにとって必要であれば余分なストリング長ビットが
抜き出される。
【0150】次に処理はブロック718に進み、マッチ
ングストリングの次のバイトが、所定のオフセットおよ
び長さで伸張ユニット6により維持された履歴アレイか
ら出力される。次に処理はブロック720に進み、出力
されるマッチングストリング内に他にバイトがあるかが
決定される。あるならば、処理はブロック718に戻
り、次のバイトが出力される。マッチングストリング内
に他にバイトがなければ、処理はブロック706に戻
り、次のハフマンコードが抜き出される。
【0151】本発明を例を挙げて、好適な実施態様によ
り説明してきたが、本発明はそれらに限定されるもので
はない。
【0152】
【発明の効果】本発明によれば、完全に適合性があり、
予め初期化されたコード化テーブルを必要とせず、コン
ピュータファイルのようにバイトに適応したキャラクタ
ストリームを最適化するデータ圧縮が達成される。
【図面の簡単な説明】
【図1】(a)は、本発明による、未圧縮データを受け
取り圧縮データを出力する圧縮ユニットを示すブロック
図、(b)は、本発明による、圧縮データを受け取り伸
張データを出力する伸張ユニットを示すブロック図であ
る。
【図2】本発明によって動作するように構成された圧縮
ユニットのブロック図である。
【図3】本発明による出力トークンの生成の例を示す図
である。
【図4】入力データストリームに関してマッチするスト
リングの探索を行うための、本発明の好ましい実施例に
よって実行されるデータ構造を示す図である。
【図5】入力データストリームから出力トークンを生成
させるためのスライディングウインドウ探索を示す流れ
ブロック図である。
【図6】入力データストリームから出力トークンを生成
させるためのスライディングウインドウ探索を示す流れ
ブロック図である。
【図7】入力データストリームから出力トークンを生成
させるためのスライディングウインドウ探索を示す流れ
ブロック図である。
【図8】図4に示されるデータ構造のハッシュテーブル
を初期化するためのスライディングウインドウ探索(図
5〜図7)の間に参照される初期化ルーチンの流れブロ
ック図である。
【図9】本発明のスライディングウインドウ探索及び出
力トークン生成をハード的配線で示した概略ブロック図
である。
【図10】入力及び出力RAMFIFOを示すブロック
図である。
【図11】本発明において用いられる圧縮フォーマット
を示す図である。
【図12】本発明による、トークンビンの割当ての一例
を示す表である。
【図13】図12の例のハフマンビン割当てによる6及
びそれ以上のストリングの長さに対する余分なオフセッ
トビットのコード化の一例を示す図である。
【図14】図12の例のハフマンビン割当てによって単
一ハフマンビンに割り当てられる21及びそれ以上のス
トリングの長さに対する余分なレングスビットのコード
化の一例を示す図である。
【図15】ハフマンレングスからハフマンコードを割り
当てるためのアルゴリズムを示す図である。
【図16】本発明によるハフマンレングスをコード化す
るために用いられるランレングスコード化の使用を示す
図である。
【図17】本発明による圧縮コード化の簡単化された例
のステージを示す図である。
【図18】本発明による圧縮コード化の簡単化された例
のステージを示す図である。
【図19】本発明による圧縮コード化の簡単化された例
のステージを示す図である。
【図20】本発明による圧縮コード化の簡単化された例
のステージを示す図である。
【図21】本発明による圧縮コード化の簡単化された例
のステージを示す図である。
【図22】本発明による圧縮コード化の簡単化された例
のステージを示す図である。
【図23】本発明によるコード化データを伸張するため
の伸張動作を示す流れブロック図である。
【図24】本発明によるコード化データを伸張するため
の伸張ハフマンツリーデータ構造を示す図である。
【符号の説明】
230 圧縮コントローラ兼シーケンスユニット 260 出力管理部 274 内部マッチバッファ 338 レジスタ
───────────────────────────────────────────────────── フロントページの続き (73)特許権者 593151099 5993 Avenida Encina s, Carlsbad, Calif ornia 92008, United States of America (72)発明者 ダグラス エル. ホワイティング アメリカ合衆国 カリフォルニア 92009,カールズバッド,フェボ コー ト 3312 (72)発明者 グレン エイ. ジョージ アメリカ合衆国 カリフォルニア 91106,パサデナ,ピー. オー. ボ ックス 60545 (72)発明者 グレン イー. アイビー アメリカ合衆国 カリフォルニア 91106,パサデナ,サウス ミシガン ナンバー202 146 (56)参考文献 特開 平3−68219(JP,A) 米国特許5016009(US,A) 米国特許5003307(US,A) C Magazine,Vol,3, No.1,1991年1月号,ソフトバン ク,奥村,吉崎,p.44−68,「特集圧 縮アルゴリズム入門」 (58)調査した分野(Int.Cl.6,DB名) H03M 7/40

Claims (26)

    (57)【特許請求の範囲】
  1. 【請求項1】 入力バイトのウインドウ内のマッチング
    ストリングに対する探索であって、生のバイトまたは一
    定の長さおよび該ウインドウへ戻る一定のオフセットを
    有するマッチングストリングのいずれかを表現するトー
    クンからなるストリームを生成する探索を実行するステ
    ップと、 該トークンを予め定義されているビンに割り当てるステ
    ップであって、該ビンのいくつかは、マッチングストリ
    ングを有するステップと、 各ビンに割り当てられたトークンの発生頻度に基づい
    て、可変長コードを各ビンに割り当てるステップと、 生成された各トークンに対し、各トークンが割り当てら
    れた該ビンの該可変長コードを、出力データストリーム
    に出力するステップと、複数のトークンが特定の1つのビンに割り当てられてい
    る場合には、各可変長コードが出力された後に該複数の
    トークンのそれぞれを区別する余分な長さビットまたは
    余分なオフセットビットを出力するステップ とを包含す
    るデータ圧縮方法。
  2. 【請求項2】 前記方法は、 前記可変長コードを割り当てる前に、入力データストリ
    ームの全てのマッチングストリング探索を完了するステ
    ップと、 該入力ストリーム全体から各ビンにおけるトークン発生
    数をカウントするステップと、 該発生カウントに基づいて前記可変長コードを割り当て
    るステップと、 各ビンに割り当てられた該可変長コードを示すコーディ
    ングテーブルを生成するステップと、 いかなる符号化されたトークンを出力する前に、該コー
    ディングテーブルを前記出力データストリームに出力す
    るステップとをさらに包含する、請求項1に記載の方
    法。
  3. 【請求項3】 前記可変長コードを割り当てるステップ
    が、前記発生カウントに基づいてハフマンのアルゴリズ
    ムを用いて該可変長コードを割り当てるステップをさら
    に包含する、請求項2に記載の方法。
  4. 【請求項4】 前記コーディングテーブルを生成するス
    テップが、前記可変長コードの長さのみを有するコーデ
    ィングテーブルを生成するステップをさらに包含する、
    請求項3に記載の方法。
  5. 【請求項5】 前記方法は、ランレングス圧縮体系を用
    いて前記コーディングテーブルを圧縮するステップをさ
    らに包含する、請求項4に記載の方法。
  6. 【請求項6】 前記方法は、 ハフマンコーディングを用いて、前記コーディングテー
    ブルを圧縮するステップと、 該コーディングテーブル中の可変長に割り当てられたハ
    フマンコードを特定するために使用される予備テーブル
    を生成するステップとをさらに包含する、請求項4に記
    載の方法。
  7. 【請求項7】 前記方法は、 圧縮された出力データの末端部を示す特別なビンを割り
    当てるステップと、 全ての他のトークンが出力された後に、該圧縮された出
    力データビンの該末端部のコードを出力するステップと
    をさらに包含する、請求項1に記載の方法。
  8. 【請求項8】 前記方法は、前記ビンを以下に示すよう
    に割り当てるステップ 【表1】 をさらに包含する、請求項1に記載の方法。
  9. 【請求項9】 前記方法は、 ビン256から318のコードの後にストリングオフセ
    ットを特定する一定数の余分なオフセットビットを以下
    に示すように続けるステップ 【表2】 をさらに包含する、請求項8に記載の方法。
  10. 【請求項10】 前記方法は、 ビン319から334のコードの後にストリングオフセ
    ットを特定する一定数の余分なオフセットビットを以下
    に示すように続けるステップ 【表3】 をさらに包含する、請求項9に記載の方法。
  11. 【請求項11】 前記方法は、 ビン334のコードおよびオフセットビットの後にスト
    リング長を特定する余分な長さビットを以下に示すよう
    に続けるステップ 【表4】 をさらに包含する、請求項10に記載の方法。
  12. 【請求項12】 請求項1に記載のデータ圧縮方法によ
    って圧縮された入力データストリームを伸するデータ
    方法であって、 全てのバイト出力の履歴アレイを維持するステップと、 入力データストリームの処理が終わるまで、または、
    圧縮された入力データストリームの末端部を示すコード
    が見つかるまで、以下のステップを繰り返すステップ
    と、 該圧縮された入力データストリームからビンコードを抜
    き出すステップと、 該ビンコードに関連したトークンを正確に決定するため
    に必要とされる余分な長さビットまたは余分なオフセッ
    トビットを抜き出すステップと、 もし該余分な長さビットまたは余分なオフセットビット
    があるなら、該余分な長さビットまたは余分なオフセッ
    トビットを用いて該ビンコードに関連した該トークンを
    正確に決定するステップと、 該トークンが生のバイトに相当する時、該生のバイトを
    出力するステップと、 該トークンがマッチングストリングに相当する時、該ス
    トリングのオフセットを用いて該履歴アレイにインデッ
    クスバックすることにより該ストリングの全てのバイト
    を出力するステップとを包含する、データ伸方法。
  13. 【請求項13】 前記方法は、 前記圧縮された入力データストリームの開始部からコー
    ディングテーブルを抜き出すステップと、 該コーディングテーブルからカテゴリーに対する可変長
    コードを抜き出すステップとをさらに包含する、請求項
    12に記載の方法。
  14. 【請求項14】 入力バイトのウインドウ内のマッチン
    グストリングに対する探索であって、生のバイトまたは
    一定の長さおよび該ウインドウへ戻る一定のオフセット
    を有するマッチングストリングのいずれかを表現するト
    ークンからなるストリームを生成する探索を実行する手
    段と、 該トークンを予め定義されているビンに割り当てる手段
    であって、該ビンのいくつかは、マッチングストリング
    を有する手段と、 各ビンに割り当てられたトークンの発生頻度に基づい
    て、可変長コードを各ビンに割り当てる手段と、 生成された各トークンに対し、各トークンが割り当てら
    れた該ビンの該可変長コードを、出力データストリーム
    に出力する手段と、複数のトークンが特定の1つのビンに割り当てられてい
    る場合には、各可変長コードが出力された後に該複数の
    トークンのそれぞれを区別する余分な長さビットまたは
    余分なオフセットビットを出力する 手段とを備えた、デ
    ータ圧縮装置。
  15. 【請求項15】 前記装置は、 前記可変長コードを割り当てる前に、入力データストリ
    ームの全てのマッチングストリング探索を完了する手段
    と、 該入力ストリーム全体から各ビンにおけるトークン発生
    数をカウントする手段と、 該発生カウントに基づいて前記可変長コードを割り当て
    る手段と、 各ビンに割り当てられた該可変長コードを示すコーディ
    ングテーブルを生成する手段と、 いかなる符号化されたトークンを出力する前に、該コー
    ディングテーブルを前記出力データストリームに出力す
    る手段とをさらに備えている、請求項14に記載の装
    置。
  16. 【請求項16】 前記可変長コードを割り当てる手段
    が、前記発生カウントに基づいてハフマンのアルゴリズ
    ムを用いて該可変長コードを割り当てる手段をさらに備
    えている、請求項15に記載の装置。
  17. 【請求項17】 前記コーディングテーブルを生成する
    手段が、前記可変長コードの長さのみを有するコーディ
    ングテーブルを生成する手段をさらに備えている、請求
    項16に記載の装置。
  18. 【請求項18】 前記装置は、 ランレングス圧縮体系を用いて前記コーディングテーブ
    ルを圧縮する手段をさらに備えている、請求項17に記
    載の装置。
  19. 【請求項19】 前記装置は、 ハフマンコーディングを用いて、前記コーディングテー
    ブルを圧縮する手段と、 該コーディングテーブル中の
    可変長に割り当てられたハフマンコードを特定するため
    に使用される予備テーブルを生成する手段とをさらに備
    えている、請求項17に記載の装置。
  20. 【請求項20】 前記装置は、 圧縮された出力データの末端部を示す特別なビンを割り
    当てる手段と、 全ての他のトークンが出力された後に、該圧縮された出
    力データビンの該末端部のコードを出力する手段をさら
    に備えている、請求項14に記載の装置。
  21. 【請求項21】 前記装置は、前記ビンを以下に示すよ
    うに割り当てる手段 【表5】 をさらに備えている、請求項14に記載の装置。
  22. 【請求項22】 前記装置は、 ビン256から318のコードの後にストリングオフセ
    ットを特定する一定数の余分なオフセットビットを以下
    に示すように続ける手段 【表6】 をさらに備えている、請求項21に記載の装置。
  23. 【請求項23】 前記装置は、 ビン319から334のコードの後にストリングオフセ
    ットを特定する一定数の余分なオフセットビットを以下
    に示すように続ける手段 【表7】 をさらに備えている、請求項22に記載の装置。
  24. 【請求項24】 前記装置は、 ビン334のコードおよびオフセットビットの後にスト
    リング長を特定する余分な長さビットを以下のように続
    ける手段 【表8】 をさらに備えている、請求項23に記載の装置。
  25. 【請求項25】 請求項14に記載のデータ圧縮装置に
    よって圧縮された入力データストリームを伸するデー
    タ伸装置であって、 全てのバイト出力の履歴アレイを維持する手段と、 該圧縮された入力データストリームからビンコードを抜
    き出す手段と、 該ビンコードに関連したトークンを正確に決定するため
    に必要とされる余分な長さビットまたは余分なオフセッ
    トビットを抜き出す手段と、 もし該余分な長さビットまたは余分なオフセットビット
    があるなら、該余分な長さビットまたは余分なオフセッ
    トビットを用いて該ビンコードに関連した該トークンを
    正確に決定する手段と、 生のバイトを出力する手段と、 マッチングストリングの全てのバイトを、該ストリング
    のオフセットを用いて該履歴アレイにインデックスバッ
    クすることにより出力する手段とを備えている、データ
    装置。
  26. 【請求項26】 前記装置は、 前記圧縮された入力データストリームの開始部からコー
    ディングテーブルを抜き出す手段と、 該コーディングテーブルから該カテゴリーに対する可変
    長コードを抜き出す手段とをさらに備えている、請求項
    25に記載の装置。
JP5198670A 1992-08-10 1993-08-10 マッチングストリング探索およびハフマン符号化を用いたデータ圧縮装置および方法ならびにデータ伸長装置および方法 Expired - Fee Related JP2863065B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US92734392A 1992-08-10 1992-08-10
US927,343 1992-08-10

Publications (2)

Publication Number Publication Date
JPH06224778A JPH06224778A (ja) 1994-08-12
JP2863065B2 true JP2863065B2 (ja) 1999-03-03

Family

ID=25454608

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5198670A Expired - Fee Related JP2863065B2 (ja) 1992-08-10 1993-08-10 マッチングストリング探索およびハフマン符号化を用いたデータ圧縮装置および方法ならびにデータ伸長装置および方法

Country Status (2)

Country Link
EP (1) EP0582907A3 (ja)
JP (1) JP2863065B2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5592482A (en) * 1989-04-28 1997-01-07 Abraham; Charles Video distribution system using in-wall wiring
US5442350A (en) * 1992-10-29 1995-08-15 International Business Machines Corporation Method and means providing static dictionary structures for compressing character data and expanding compressed data
JP3278297B2 (ja) * 1994-07-20 2002-04-30 富士通株式会社 データ圧縮方法及びデータ復元方法並びにデータ圧縮装置及びデータ復元装置
DE69524999T2 (de) * 1994-08-01 2002-07-18 Opentv Inc Verfahren zum Komprimieren und Dekomprimieren von Dateien
DE4432436C2 (de) * 1994-09-12 1997-04-03 Tecomac Ag Datenkompressionsverfahren und Vorrichtung zum Komprimieren von Daten
US5696563A (en) * 1995-03-08 1997-12-09 Lucent Technologies Inc. Apparatus and methods for performing huffman coding
US6169820B1 (en) 1995-09-12 2001-01-02 Tecomac Ag Data compression process and system for compressing data
US5710719A (en) * 1995-10-19 1998-01-20 America Online, Inc. Apparatus and method for 2-dimensional data compression
SE512613C2 (sv) * 1996-12-30 2000-04-10 Ericsson Telefon Ab L M Metod och organ för informationshantering
US5874908A (en) * 1997-09-19 1999-02-23 International Business Machines Corporation Method and apparatus for encoding Lempel-Ziv 1 variants
US5973626A (en) * 1998-03-17 1999-10-26 Cornell Research Foundation, Inc. Byte-based prefix encoding
US6393149B2 (en) * 1998-09-17 2002-05-21 Navigation Technologies Corp. Method and system for compressing data and a geographic database formed therewith and methods for use thereof in a navigation application program
US6130630A (en) * 1998-10-27 2000-10-10 Hewlett-Packard Company Apparatus and method for compressing Huffman encoded data
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
US6668092B1 (en) * 1999-07-30 2003-12-23 Sun Microsystems, Inc. Memory efficient variable-length encoding/decoding system
DE10131801B4 (de) * 2001-06-30 2013-03-07 Robert Bosch Gmbh Verfahren zur Datenkompression und Navigationssystem
US7587396B2 (en) 2004-11-24 2009-09-08 Oracle International Corporation Encoding data to be sorted
GB201620235D0 (en) 2016-11-29 2017-01-11 Microsoft Technology Licensing Llc Neural network data entry system
JP2019036810A (ja) * 2017-08-14 2019-03-07 富士通株式会社 データ圧縮装置、データ復元装置、データ圧縮プログラム、データ復元プログラム、データ圧縮方法、およびデータ復元方法
US10944697B2 (en) 2019-03-26 2021-03-09 Microsoft Technology Licensing, Llc Sliding window buffer for minimum local resource requirements
CN110620637B (zh) * 2019-09-26 2023-02-03 上海仪电(集团)有限公司中央研究院 一种基于fpga的数据解压装置及方法
CN112332854A (zh) * 2020-11-27 2021-02-05 平安普惠企业管理有限公司 霍夫曼编码的硬件实现方法、装置及存储介质
CN115801901B (zh) * 2023-01-05 2023-08-04 安徽皖欣环境科技有限公司 一种企业生产排放数据压缩处理方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5051745A (en) * 1990-08-21 1991-09-24 Pkware, Inc. String searcher, and compressor using same

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
C Magazine,Vol,3,No.1,1991年1月号,ソフトバンク,奥村,吉崎,p.44−68,「特集圧縮アルゴリズム入門」

Also Published As

Publication number Publication date
JPH06224778A (ja) 1994-08-12
EP0582907A2 (en) 1994-02-16
EP0582907A3 (en) 1995-05-10

Similar Documents

Publication Publication Date Title
JP2863065B2 (ja) マッチングストリング探索およびハフマン符号化を用いたデータ圧縮装置および方法ならびにデータ伸長装置および方法
US5532694A (en) Data compression apparatus and method using matching string searching and Huffman encoding
US5126739A (en) Data compression apparatus and method
US5506580A (en) Data compression apparatus and method
US5016009A (en) Data compression apparatus and method
US5003307A (en) Data compression apparatus with shift register search means
US5001478A (en) Method of encoding compressed data
US5406279A (en) General purpose, hash-based technique for single-pass lossless data compression
US5951623A (en) Lempel- Ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases
JP2610084B2 (ja) データ伸長方法および装置ならびにデータ圧縮伸長方法および装置
US4906991A (en) Textual substitution data compression with finite length search windows
US5058144A (en) Search tree data structure encoding for textual substitution data compression systems
US5229768A (en) Adaptive data compression system
EP0438955B1 (en) Data compression method
US5973626A (en) Byte-based prefix encoding
JPH07104971A (ja) ネットワークパケットに適用される小型辞書を用いた圧縮方法
WO1998006028A9 (en) A lempel-ziv data compression technique utilizing a dicionary pre-filled with fequent letter combinations, words and/or phrases
EP0435802B1 (en) Method of decompressing compressed data
US5010344A (en) Method of decoding compressed data
Lin A hardware architecture for the LZW compression and decompression algorithms based on parallel dictionaries
EP0340039B1 (en) Search tree data structure encoding for textual substitution data compression systems
EP0340041B1 (en) Start, step, stop unary coding for data compression
Thomborson et al. Systolic implementations of a move-to-front text compressor
Bloom New Techniques in Context Modeling and Arithmetic Encoding.

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19981112

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071211

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081211

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081211

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081211

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081211

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081211

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081211

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091211

Year of fee payment: 11

LAPS Cancellation because of no payment of annual fees