JP2502469B2 - 文字デ―タを圧縮し圧縮済みデ―タを展開するための静的辞書構造を提供する方法および手段 - Google Patents

文字デ―タを圧縮し圧縮済みデ―タを展開するための静的辞書構造を提供する方法および手段

Info

Publication number
JP2502469B2
JP2502469B2 JP5247984A JP24798493A JP2502469B2 JP 2502469 B2 JP2502469 B2 JP 2502469B2 JP 5247984 A JP5247984 A JP 5247984A JP 24798493 A JP24798493 A JP 24798493A JP 2502469 B2 JP2502469 B2 JP 2502469B2
Authority
JP
Japan
Prior art keywords
item
dictionary
child
record
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.)
Expired - Lifetime
Application number
JP5247984A
Other languages
English (en)
Other versions
JPH06222903A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH06222903A publication Critical patent/JPH06222903A/ja
Application granted granted Critical
Publication of JP2502469B2 publication Critical patent/JP2502469B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • 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/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/005Statistical coding, e.g. Huffman, run length coding

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本願発明は、データベースに必要
な記憶スペースを大幅に削減し、データ・レコードの伝
送速度を増大させ、圧縮済みデータベースに記憶された
圧縮済みレコードへのランダム・アクセスを可能にし、
圧縮および展開(expansion)に必要なコンピュータ資
源を削減する。これらの改善は、周知のZiv−Lem
pel(ZL)タイプのアルゴリズムを実施するために
静的辞書を固有の構造にする新規の方法によって提供さ
れる。データ・レコードを迅速に圧縮し伝送できるよう
にすることによって、データ・レコードの通信速度が大
幅に増大する。未圧縮レコードに使用する伝送と比べて
バイト伝送速度が増大しない場合でも、レコード速度が
増大する。辞書の項目用に固有の複数文字構造を使用す
るため、記憶または伝送、あるいはその両方の目的でレ
コードを圧縮するための処理時間と、レコードを圧縮し
記憶するためのアクセス時間と、圧縮済みレコードの展
開時間が短縮する。
【0002】
【従来の技術】適応Ziv−Lempel(ZL)辞書
構造または動的ZL辞書構造は、従来技術で周知であ
る。この構造では、各入力データ・ファイルごとに適応
辞書が固有に生成され、ファイルの圧縮/展開が可能に
なる。適応辞書は、データ・ファイルの圧縮中に構築さ
れる。展開の場合は、圧縮済みデータの展開中に構築さ
れる。辞書が一杯になると、新しい項目が、辞書内の最
も以前に使用された(LRU)既存の項目に置き換わ
る。
【0003】このように、従来のZLデータ圧縮方法で
は、辞書を、それぞれのデータ・ファイルに対して「動
的に」調整することによって「適合」させていた。した
がって、従来のZL辞書は、「動的」辞書または「適
応」辞書と呼ばれている。従来、適応辞書がそれに関連
するデータ・ファイルによって生成されない場合、デー
タ圧縮が不十分になると考えられていた。
【0004】適応(動的)Ziv−Lempel圧縮辞
書は、米国特許第4814746号に記載されている。
この米国特許は、ZL圧縮辞書を新規データ・ファイル
(すなわち、データ文字列)に適合させるための置換技
術について記載している。
【0005】圧縮すべきデータが少数の孤立した記号
(アトミック記号)(バイト)から構成されているとき
は、適応Ziv−Lempel方式では圧縮がほとんど
得られない。なぜなら、データ量が少ないので、データ
に関する情報が極めて少ないからである。したがって、
データの圧縮を開始する前の、データに関する知識に頼
るしかない。データベースを構成する個々のレコードを
他のレコードとは独立に圧縮または展開する必要があ
る、データベースを圧縮する場合がこれに当てはまる。
このように圧縮または展開する必要があるのは、ツリー
構造インデックス方式またはハッシュ・アクセス方式を
介して単一のレコードまたは少数のレコードに直接アク
セスしなければならないからである。レコードが容易に
見つかり、見つかったら、そのレコードに関するデータ
だけが展開されることが望ましい。レコードは通常小さ
く、小さいレコードに対して適応Ziv−Lempel
圧縮を実行しても、圧縮が完了する前にごく少数の短い
ZL辞書文字列しか形成できないため、それほど圧縮は
行われない。
【0006】
【発明が解決しようとする課題】本願発明は、データを
圧縮し展開するための静的辞書構造を定義するものであ
る。プログラムが、データベース上でパスを1回行い、
データベース内の一部または全部のデータをサンプリン
グし、本願発明で定義される辞書を構築する。その後に
このデータベースを使用すると、本願発明の別の一部を
構成する方法によってレコードを圧縮または展開するこ
とができる。
【0007】本願発明の新規の静的ZL辞書は、データ
・レコードの効率的な圧縮処理および展開処理を可能に
する固有の構造になっている。本願発明は、大型データ
ベース中のレコードから生成された静的ZL辞書を使用
する。本願発明では、辞書を、現在伝送または記憶する
ために圧縮中のレコードに「適合」させない。静的辞書
は、データベース変更後でも、圧縮中の未圧縮レコード
の変更を含めて、変更なしで引き続き使用することがで
きる。
【0008】静的辞書は、送信側位置と受信側位置のど
ちらに配置することもでき、データ・レコードと共に伝
送する必要はない。送信元では、辞書が圧縮に使用され
る。圧縮されたデータは宛先に送信され、宛先では、同
一のディレクトリのコピーを使用して、圧縮済みデータ
が展開される。レコード伝送速度は、1レコード当たり
のビット数が減るにつれて増大し、1レコード当たりの
ビット数が増えるにつれて減少する。したがって、デー
タ圧縮によって1レコード当たりのビット数が削減でき
るなら、伝送回線の伝送速度が変更されていなくても、
データ・レコードの伝送速度を上げることができる。
【0009】本願発明では、圧縮済みデータだけを伝送
すればよいので、データ・レコードの伝送速度が大幅に
増大する。
【0010】本願発明は、データ・レコードの圧縮プロ
セスまたは展開プロセスの速度を上げる、ZL辞書中の
項目用の新規の内部構造を提供する。この新規項目構造
によって、単一の項目に、複数の文字と、情報フィール
ドおよび固有の制御フィールドとを含めることができる
ようになる。このため、圧縮についての決定に関与する
項目にアクセスする前にその決定を下せるようになり、
その結果、1圧縮記号当たりのメモリ・アクセス回数が
削減され、圧縮操作の速度が上がる。また、1操作当た
り複数の文字を処理することによって展開操作の速度も
上がる。
【0011】本願発明はまた、別々の圧縮用辞書と展開
用辞書を使用することによって、圧縮プロセスおよび展
開プロセスの速度を増大させる。このため、辞書項目の
内部のスペースを効率的に使用することができる。圧縮
と展開の両方に単一の辞書を使用する場合、このような
効率的な使用は不可能である。
【0012】記憶スペースが重要である場合、本願発明
で単一の静的辞書を圧縮と展開の両方に使用して、処理
の速度を上げることができる。ただし、別々の辞書を使
用すれば、最高の操作速度が得られる。
【0013】したがって、静的圧縮用辞書は、未圧縮レ
コードを記憶または送信する必要がある送信側位置に提
供される。静的展開用辞書は、記憶域から、または電話
回線、マイクロ波、ファイバ回線など任意の種類のディ
ジタル伝送手段によって遠方のコンピュータ・システム
から圧縮済みデータ・レコードを受信して処理する位置
に提供される。ある位置で送信と受信のどちらか一方だ
けを行なう場合、その位置には静的圧縮用辞書か静的展
開用辞書のどちらか一方だけが必要であり、両方とも必
要なわけではない。したがって、本願発明では、圧縮お
よび展開を別個の独立したプロセスとして扱うことがで
きる。
【0014】さらに、本願発明は、コンピュータ・シス
テムのハードウェア特性に適合した構造の静的ZL辞書
を提供することによって、コンピュータ・システムによ
るデータ・レコードの圧縮速度または展開速度を大幅に
向上させる。これは、辞書中の項目のサイズを、コンピ
ュータ・メモリからアクセスされるデータ・ユニットの
サイズと一致させることによって行う。
【0015】本願発明の静的辞書は、データベース中の
様々なレコードの圧縮または展開に使用している間は変
更されない。しかし、静的辞書がまったく変更できない
わけではない。静的辞書のデータベースは静的である必
要はなく、通常、変更可能である。経験によれば、大型
データベースでは新しいレコードがたえず追加および削
除されるので、一般に、データベースは時間の関数とし
て少しだけ変化する。本願発明は、データベースが少し
だけ変化した場合でも、圧縮や展開の効率にほとんど影
響なく、静的辞書を継続して使用できるという、事実を
利用している。
【0016】この事実は、大型データベースは比較的長
い期間かけて比較的ゆっくりと変化するので、データの
ZL文字列がほとんど変らず、未変更の静的圧縮用辞書
を使って引き続き高い圧縮効率を得ることができるとい
う認識に基づいている。データベースにたとえば10%
を上回るような大幅な変更が生じる場合、その時点で存
在しているデータベース用の静的辞書を再生成すること
ができる。本願発明は、文字列を終了する判断文字を辞
書中の前の項目に移して、圧縮プロセスで圧縮記号を判
定するためのメモリ・アクセス回数が減るように項目を
構造化し、圧縮操作の速度を上げる。
【0017】上述の利点を実現可能にする本願発明の諸
特徴を要約する前に、ZL方式に関する情報と、本願発
明がZL方式とどう関係しているかについてさらに説明
する。
【0018】既知の適応辞書の場合と同様に、本願発明
の単一の辞書または別個の辞書はツリー形式の構造にな
っている。このツリーは、下向きに成長するツリーとし
て視覚化することができる。ツリーの1番上の256の
ノードまたは項目は、アルファベット項目と呼ばれ、8
ビット・バイトの256の可能な値に対応する。各アル
ファベット項目は、子項目を持つ親項目となることがで
きる。さらに、それらの子項目それぞれが、それ自体の
子項目を持つ親項目となることができ、以下同様であ
る。
【0019】適応辞書または本願発明の辞書では、各項
目は、1または複数の拡張文字(expansion characte
r)を表す。この拡張文字は、その項目のすべての先祖
によって表されかつZL文字列を形成するあらゆる拡張
文字の右側に続く。ZL文字列を文字記号と呼ぶ。した
がって、各辞書項目は1つまたは複数の拡張文字のみな
らず、今定義した完全な文字記号をも表す。
【0020】適応辞書または本願発明を使用し、入力文
字列の文字を、辞書中の拡張文字と、一致する文字が見
つかるまで左から右へと比較していくと圧縮が行われ
る。次に、最後に一致する辞書項目の拡張文字によって
最後の可能な一致が見つかると、索引記号と呼ばれる、
その項目の索引が、圧縮済みデータとして出力される。
圧縮プロセスは次の文字に進む。この文字は、レコード
から入力された文字シーケンスの最初の一致しない文字
である。
【0021】上述より、索引記号は、文字記号(ZL文
字列)を表す辞書項目を識別し、したがってその文字記
号を識別することが分かる。
【0022】現代の大部分のコンピュータ・システムは
2進法を使用しているので、これらのシステムでは、辞
書中の項目の数は、かならず2の累乗値となる。特定の
辞書の索引記号中のビット数が、そのべき指数であり、
この数は、索引記号によって識別される文字記号中のビ
ット数よりはるかに小さいことが多く、あるいはそれが
通常である。このため、所望の圧縮を実現することがで
きる。
【0023】適応辞書または本願発明を使用し、一連の
索引記号を左から右へと処理していき、各索引記号を使
用して辞書項目を見つけて、その項目で表される文字記
号を出力することによって、展開が行われる。適応辞書
を使用するときは、見つかった辞書項目と、その項目の
各先祖から拡張文字を取り出すことによって、文字記号
が再構築される。本願発明は、従来よりも少数の辞書項
目にアクセスすることによって再構築が行える新規の手
段を含む。
【0024】本願発明の説明の最初に、圧縮と展開の両
方に用いる単一の静的辞書に適用される本願発明の多数
の特徴を紹介し明らかにする。次に、好ましい実施例、
すなわち別々の静的圧縮用辞書および静的展開用辞書を
示すことによって、本願発明をさらに詳しく説明する。
本発明者等は、単一辞書に適用した場合の上記特徴の研
究を通じて、好ましい実施例を発明した。
【0025】単一の辞書を使用する際に本願発明で提供
される特徴には、次のものがある。
【0026】1.辞書項目を固定した2の累乗の長さに
し、項目を連続した記憶域に置く。これによって、索引
記号を使用して、その記号が識別する辞書項目を極めて
迅速に見つけることができる。このように辞書項目を見
つけるには、索引記号の右側に一定数のゼロ・ビットを
付加し、次にその結果を辞書の開始アドレスに加算し
て、識別された項目のアドレスを形成する。コンピュー
タ・システムのデータ転送機能と、項目中で所望される
情報の種類および量に基づき、8バイト長が最適の長さ
であることが分かっている。
【0027】2.アルファベット項目中では、その項目
で表される拡張文字(EC)を省略する。これによっ
て、項目中のスペースが節約され、このスペースを項目
中で他の情報に使用することができる。
【0028】3.アルファベット項目以外の項目中に、
項目のすべての先祖に含まれるECの右側に付加される
とみなされる1つまたは複数のECを置く。項目中に複
数のECを置くと、複数の項目ではなく単一の現項目だ
けにアクセスすることによって、入力文字列中の複数の
文字を比較することができ、また辞書中の情報密度が高
くなり、長いZL文字列を所定のある数の項目で表すこ
とができるので、圧縮が向上する。複数のECのうち最
初のECより後のECを追加EC(AEC)と呼ぶこと
がある。
【0029】4.アルファベット項目以外の項目中に、
その項目によってZL文字列中で新たに表されるECの
みならず、可能なら、その項目の最も近いある数の先祖
によって表されるある数のECも置く。先祖によって表
されるECを先祖EC(PEC)と呼ぶことがある。あ
る項目によって新たに表されるECを真EC(TEC)
と呼ぶことがある。ある項目中のPECは、その項目の
TECの左側に配置される。項目中にPECを配置する
と、展開時に、先祖項目にアクセスせずに現項目からP
ECを取り出すことができる。
【0030】5.アルファベット項目以外の項目中に、
可能なら、その項目の先祖のポインタを置くことができ
る。このポインタは、先祖ポインタ(PPTR)と呼ば
れ、先祖の索引であり、展開時に使用される。先祖は、
現項目の親でも、さらに遠い先祖でもよい。現項目によ
って表される文字記号が非常に大きくて、現項目中に記
号内のすべてのECを含めることができないとき、PP
TRが必要である。さらに、PPTRで指定される項目
もPPTRを含むことができる。展開時に文字記号を再
構築する際、PPTRを使って一連の辞書項目を上向き
に進まなければならない場合がある。本願発明ではPE
CおよびPPTRを新たに使用するので、通常、索引記
号の展開時には、圧縮時に索引記号を形成する際にアク
セスしなければならなかったよりも少数の辞書項目にア
クセスするだけで済む。
【0031】6.アルファベット項目以外の項目中に、
その項目と、その項目のすべての先祖におけるECの総
数のカウントを含む記号長(SL)フィールドを置く。
これによって、展開時に、項目によって表される文字記
号の長さをただちに知ることができ、出力バッファ中に
記号用のスペースがあるかどうかを判定することが可能
になる。ECが、現項目のPPTRによって指定される
項目中にECとして現れる場合、それは現項目中にPE
Cとして配置されないという規則を採用すると、SLの
使用に関して次の規則が利用可能になる。項目がPPT
Rを含まない場合、その項目のSLはその項目中のEC
の数を指定する。項目がPPTRを含む場合は、その項
目のSLから、PPTRで指定される項目のSLを引い
た数が、その項目中のECの数を指定し、その項目のS
Lからその項目の親のSLを引いた数が、その項目中の
TECの数を指定する。親がアルファベット項目である
場合、その暗黙的にSLが1に等しい。単一圧縮および
展開辞書における項目を構成する本願発明の方法によっ
て、項目は、そのSLが7以下で子を持たない場合、そ
のあるいはSLが5以下で子を持つ場合、PPTRを含
まないことが分かる。
【0032】7.記憶域内の連続する項目のリストに親
の子供を置き、その親中の子ポインタ(CPTR)によ
ってリストの第1項目を指定する。CPTRは、第1の
子の索引である。子供が連続しているので、次の子を見
つけるとき、その子中に制御情報が必要とされないの
で、子中のスペースが節約され他の情報用に使用できる
ようになる。
【0033】8.値が1のとき、項目が子を持ち、した
がってCPTRを含むことを示すビットを項目中に置
く。このビットを子ビット(C)と呼ぶ。このビットに
よって、CPTRが必要とするスペースを、CPTRが
存在しないとき他の情報に使用することができる。ま
た、このビットによって、それがゼロのとき、現項目に
子がないので突合せプロセスが終了することをただちに
知ることができる。
【0034】9.ある数のある親の初期の子のそれぞれ
の第1TECの複製を親中に置く。この場合、親中のこ
れらの複製ECのそれぞれを子文字(CC)と呼ぶ。親
中のCCによって子にアクセスして、子中にある同一の
ECを取り出す必要はなく、これらのCCを入力文字列
の次の文字と比較することができる。対応する子項目に
アクセスして突合せプロセスを継続する必要があるの
は、CCが等しい場合だけである。CCが一致する場
合、対応する子の索引は、項目中のCPTRと、項目中
の1組のCCのうち一致するCCの位置番号とから計算
することができる。項目中でCCを含めるために利用可
能なスペースの量は、その項目中のEC(PECおよび
TEC)の数と、その項目がCPTRまたはPPTRを
含むかどうかによって決まる。CCが一致しても、対応
する子に一致が見られるかどうかはまだ分からない。な
ぜなら、その子は、CCと同一なTECを1つだけ含む
のではなく、2つ以上のTEC(1つ以上のAEC)を
含むことがあるからである。
【0035】10.項目中に、値が1のとき、その項目
が、そのCCが表す子よりも多数の子を持つことを示す
ビットを置く。このビットは、more-childrenビット
(M)と呼ばれ、項目のCCで表される子に、CCおよ
びAECによって一致が見られないときに使用される。
そのような一致がなく、Mが1であるときは、その項目
のCCで表される最後の子の次の最初の子にアクセス
し、その最初の子に第1TECおよびAECがあれば、
それを入力文字列中の次の文字と比較する必要がある。
【0036】11.項目中に、値が1のとき、その項目
が、現行の子リスト中でその項目の後に続く兄弟を持つ
ことを示すビットを置く。ただし、2つの項目がどちら
も同一の親の子である場合、それらを兄弟と呼ぶ。この
ビットは、more-siblingsビット(S)と呼ばれ、その
項目の親のMビット、または先行の兄弟もしくは兄弟記
述子中のSビットのためにアクセスできる項目中だけで
使用される。兄弟記述子については後述する。
【0037】12.現項目の後に続くある数の兄弟のそ
れぞれの第1TECの複製を現項目中に置く。この場
合、現項目中のこれらの複製ECのそれぞれを兄弟文字
(SC)と呼ぶ。ある項目中にSCがあると、兄弟にア
クセスして、その中にある同一のECを取り出す必要は
なく、これらのSCを入力文字列の次の文字と比較する
ことができる。対応する兄弟にアクセスして突合せプロ
セスを継続することが必要になるのは、SCが等しい場
合だけである。SCが一致する場合、対応する兄弟の索
引は、現項目の索引と、その項目中の1組のSCのう
ち、一致するSCの位置番号とから計算することができ
る。SCが項目中に置かれるのは、その項目に子がない
場合だけである。SCは、項目に子がある場合にCCを
格納するのに使用されるスペースに配置される。
【0038】13.CCまたはSCの数が項目中に配置
できる最大数よりも少ないとき、項目中の最後のCCま
たはSCに等しい文字を最後のCCまたはSCの右側に
配置することによって、項目中のCCリストまたはSC
リストの終りを示す。これによって、項目中のスペース
を、項目中のCCまたはSCの数の明示的なカウントを
含めるため専用にする必要がなくなるので、スペースを
節約して他の情報用に使用することができる。この特徴
では、ある親の子供のどの第1TECも同一でないこと
が必要である。
【0039】14.後続の兄弟に対応するSCだけを子
リストに記憶するために、子リスト中に兄弟記述子(S
D)と呼ばれる特殊な種類の項目を配置する。SDでは
ない辞書項目は現在、SDと区別する必要があるときは
文字項目(CE)と呼ばれる。SDが、普通ならCEを
記憶するのに利用できる辞書索引位置を占めることに留
意されたい。SDの目的は、親にCCを格納するスペー
スがない場合、または先行の兄弟にSCを格納するスペ
ースがない場合にそれを補償することである。親中のC
Cまたは先行の兄弟中のSCと同様に、SD中にSCが
あると、後続の兄弟にアクセスする必要がなく、入力文
字列中の次の文字を、後続の兄弟の第1TECと比較す
ることができる。したがってアクセスが不要になると共
に、圧縮プロセスの速度が上がる。SDは、2種類の項
目のそれぞれにおける制御フィールドの特殊な値によっ
てCEと区別される。SDの存在は、親のMビット、ま
たは先行の兄弟中もしくはSD中のSビットによって示
される。SDは、CEと同様に、Sビットを含むことが
できる。子リストは、まずある数の子、次にSD、次に
SD中のSCで示される兄弟、次に別のSDなどという
順序に並べることができる。SD中のSCリストの終り
は、CEの場合と同様に、あるいはSLフィールドの値
によって示すことができる。SLはSD中では通常の方
法で使用されないからである。
【0040】単一辞書に関する、本願発明の特徴に関す
る説明をこれで終わる。この説明で使用し、今後も頻繁
に使用する略語を容易に覚えられるように、以下に列挙
しておくことにする。
【0041】AEC 追加拡張文字。項目中の第1TE
Cの次のTEC。
【0042】Cビット 子ビット。項目が子を持ち、C
PTRを含むことを示す。
【0043】CC 子文字。親中の文字であり、対応す
る子中の第1TECと位置が同一である。
【0044】CE 文字項目。SD以外の辞書項目。単
に「項目」という語を使用するときは通常、文字項目を
意味する。
【0045】CPTR 子ポインタ。項目の最初の子の
索引。
【0046】EC 拡張文字。項目中の文字であり、そ
の項目で表されるZL文字列の一部である。
【0047】Mビット more-childrenビット。項目中
のCCの数よりも多数の子が項目にあることを示す。
【0048】PEC 先祖EC。現項目中の文字であ
り、現項目の親またはそれよりも遠い先祖中のECでも
ある。現項目中のPECは、その項目中のTECよりも
前に置く。
【0049】PPTR 先祖ポインタ。項目の先祖の索
引。
【0050】Sビット more-siblingsビット。項目中
のSCの数よりも多数の兄弟を項目が持つことを示す。
項目はCEまたはSDとなることができる。Sが1であ
る場合は、後続のCEまたは後続のSDが存在すること
を示す。
【0051】SC 兄弟文字。項目中の文字であり、対
応する兄弟中の第1TECと位置が同一の文字である。
【0052】SD 兄弟記述子。CE以外の辞書項目。
SDは、制御フィールドとSCだけを含む。
【0053】SL 記号長 項目と、ある項目のすべて
の先祖中のECの総数のカウント。
【0054】TEC 真EC 先祖項目中には現れない
EC。すなわち、PECではないEC。
【0055】本発明者等は、次のような、単一の辞書を
圧縮と展開の両方に使用する方法の欠点を発見した。
【0056】項目中にPECを置くと、展開性能は向上
するが、CCまたはSC用のスペースが少なくなり、あ
るいはまったくなくなるので、圧縮性能は低下する。し
たがって、PECが存在すると、辞書は展開性能に有利
となり、PECが存在しないと、辞書は圧縮性能に有利
となる。圧縮中にも展開中にも最高の性能が得られるこ
とが望ましい。
【0057】現項目中のSLと現項目のPPTRで指定
される項目中のSLと現項目の親のSLとに基づいて現
項目中のECおよびTECの数を求めるための計算は時
間がかかり、圧縮および展開の性能が低下する。
【0058】TECの複製を、CCとして親中に、また
はSCとして兄弟もしくはSD中に置くと、辞書中に同
一の文字が2回存在することになり、他の情報用に利用
できるスペースが減少する。
【0059】最後のCCまたはSCに等しい文字によっ
て、CE中のCCリストもしくはSCリスト、またはS
D中のSCリストの終りを示す技法では、文字の比較を
繰り返す必要があり、CCまたはSCの数の単純なカウ
ントを使用するよりも時間がかかる。
【0060】ある親の子供のどの第1TECも同一であ
ってはならないという、親中の最後のCCまたは兄弟も
しくはSD中の最後のSCを示す手段を提供するための
要件により、様々な数の同一文字が繰り返される長い文
字列の場合、有効な辞書構造が得られない。このような
文字列では、2つ以上の子が同一のTECで始まること
が望ましい。
【0061】本発明者等は、項目中の制御情報が次のよ
うに配列されている場合、辞書項目中でPEC、TE
C、CC、およびSC用に最大のスペースを利用できる
ことを発見した。Cビット、Mビット、およびSビッ
ト、さらに5ビットのSLを1バイト内に配置する。た
だし、アルファベット項目はSもSLも含まないので、
CおよびMはアルファベット項目中の4つのビット内に
配置することができる。また、CPTRとPPTRはそ
れぞれ別々の12ビット・フィールド内にあるが、この
フィールドは項目中で必要なことも必要でないこともあ
る。5ビットのSL長により、最大文字記号が32文字
に制限される(SLで表される値がSLフィールド中の
物理値より1だけ多くなる、1増し表記法が使用され
る)。12ビットのCPTR長またはPPTR長によ
り、辞書中の項目の最大数が4K(4096)に制限さ
れる。32および4Kというこれらの限界はどちらも過
度に小さいものではないが、それでも問題となる可能性
がある限界である。
【0062】上記の欠点は、以下に示す本願発明の別の
特徴によって解消される。これらの特徴には、列挙され
た欠点に特に対処するためのものではない新しい特徴も
含まれる。以下に示す特徴には、上記の特徴の番号に続
く通し番号が付けてある。
【0063】15.単一の辞書の代わりに別々の圧縮用
辞書と展開用辞書を提供する。これによって、各辞書の
内容をそれぞれの目的に合わせて最適化し、それによっ
て圧縮時にも展開時にも最高の性能を実現することがで
きる。圧縮用辞書は、単一辞書の場合よりも多くのPE
Cを含むことができる。圧縮用辞書はまた、単一辞書の
場合よりも多くのCCを含むことができる。SDは依然
として、SCを含めるため、および圧縮用辞書CEの取
扱いを単純にするために利用可能なので、CEには含ま
れず、SDだけに含まれる。したがって、CE中のmore
-siblngs(s)ビットは削除される。この場合も、圧縮
用辞書および展開用辞書のそれぞれにおける最適長は8
バイトであることが分かっている。したがって、それぞ
れの辞書に同数の項目を入れるものとすると、別々の辞
書を使用する場合、単一の辞書に必要なスペースの2倍
のスペースが必要になる。性能よりもスペースを優先し
たい場合は、別々の辞書ではなく単一の辞書を使用する
ことができる。
【0064】16.展開辞書項目中のSLフィールドを
除去し、部分記号長(PSL)フィールドおよび完全記
号長(CSL)フィールドで置き換える。項目中でPS
Lがゼロのときは、その項目で表される文字記号は、完
全にその項目内に含まれ、項目のCSLで指定される長
さを持つ。文字記号はPECとTECから構成すること
ができ、TECの前にPECがいくつあるかを決定する
必要はない。展開時には、文字記号を項目から取り出
し、出力バッファの次のバイト位置から配置していくだ
けでよい。PSLがゼロである項目を、先行なし項目と
呼ぶ。項目中でPSLが非ゼロのときは、項目内に、そ
の項目で表される文字記号の一部だけが含まれる。項目
中には、PECまたはTECである、文字記号の1番右
の文字がPSLの数だけあり、1番右の文字の左側にあ
る残りの文字は、現項目のPPTRで最初の項目が識別
される、1つまたは複数の項目中にある。CSLフィー
ルドは現項目中に存在せず、CSLが占めるはずのスペ
ースは、PPTRの一部を格納するために使用される。
項目は、1バイトのオフセット(OFST)フィールド
を含み、その内容は、出力バッファの次のバイト位置
と、現項目中のPECおよびTECの配置が開始する位
置の間のバイト数である。したがって、SLを使用する
時間のかかる計算が不要になる。また、PSLの最大値
が5であり、OFSTの最大値が255なので、文字記
号の最大長は、32バイトではなく260バイトとな
る。PSLが非ゼロである項目を、先行あり項目と呼
ぶ。
【0065】17.非アルファベット圧縮辞書項目中の
第1TECを除去し、このECを親中のCCまたはSD
中のSCとしてだけ出現させる。これによって、項目中
のスペースが節約され、他の情報用に使用できるように
なる。アルファベット項目に現れなかったのは、第1T
ECだけである。
【0066】18.圧縮辞書項目中のSLフィールドを
除去し、項目中のAECの数のカウントを含むAECカ
ウント(ACT)フィールドで置き換える。これによっ
て、入力文字列中の次の文字を項目のAECと比較する
際に計算が不要になる。
【0067】19.圧縮辞書項目中の子ビット(C)を
除去し、項目中のCCの数のカウントを含む子カウント
(CCT)フィールドで置き換える。CCおよびCPT
Rが存在するのは、CCTが非ゼロの場合だけである。
CCTにより、文字比較を行ってCCリストの終りを検
出する必要がなくなり、ある親の任意の数の子供が、同
じ親の別の子の第1TECと同じ第1TECを持つこと
ができるようになるので、同一の文字が繰り返される長
い文字列の取扱いが改善できる。
【0068】20.圧縮辞書項目中でCCTとACTの
3種の組合せだけを使用可能にする。CCTが0の場
合、ACTは0ないし4となることができる。CCTが
1の場合、ACTは0ないし4となることができる。C
CTが1より大きい場合、ACTは0または1となるこ
とができる。本発明者等は、この組合せの制限によっ
て、実施態様が単純になり、実行速度が上がるが、依然
として優れた辞書の圧縮機能が得られることを発見し
た。ACTを0または1だけになるように制限すると、
ACTは単一ビットになり、項目中のスペースが節約さ
れる。この単一ビットを倍文字項目・ビット(D)と呼
ぶ。
【0069】21.SD中のSDの特殊指示をなくし、
SD中のSLをなくし、SD中のSCの数のカウントを
含む兄弟カウント(SCT)フィールドで置き換える。
SCTによって、文字比較を行ってSCリストの終りを
検出する必要がなくなり、子供が同一の第1TECをも
つことが完全に可能になる。
【0070】22.CEおよびSD中に、子検査ビット
(XおよびY)という1組のビット置く。CEの各CC
用にCE中に子検査ビット(X)があり、SDの各SC
用にSD中に子検査ビット(Y)がある。子検査ビット
が1のときは、そのビットに対応するCCまたはSCに
一致が見られる場合、そのCCまたはSCに対応する子
を検査して、突合せプロセスを継続する必要があること
を示す。子がAECを持つかどうか検査する必要があ
る。なぜなら、AECは入力文字列の次の文字と一致す
ることもしないこともあり、したがって子に一致が見ら
れることも見られないこともあるからである。子が子供
を持つかどうかも検査する必要がある。なぜなら、子に
一致が見られる場合、一致している子の子に一致が見ら
れるかどうか調べることによって突合せプロセスを継続
する必要があるからである。CCまたはSCに一致が見
られ、対応する子検査ビットがゼロの場合、その子には
AECも子供もなく、したがって最適な一致が見つかっ
たことがただちに分かる。この場合、子を検査する必要
はなく、辞書へのアクセスが節約される。
【0071】23.同一の文字が繰り返される多数の異
なる長さを持つ文字列を圧縮するのに必要な記憶域参照
の回数を67%減らす、圧縮辞書項目を配列する新規の
方法を示す。この新規の方法は、文字用のアルファベッ
ト項目が、文字の第2のインスタンスを表す1つの子を
持ち、この子が、文字の第3のインスタンスを表す1つ
の子を持ち、さらに、この子が文字の第4のインスタン
スを表す1つの子を持つという自明な方法とは対照的で
ある。この新規の方法は、任意の項目にAECが存在で
き、親項目が、それぞれ同じ第1TECを持つ複数の子
供を持つことができる(すなわち、親が複数の同一CC
を含むことができる)という、本願発明の能力を活用し
ている。この新規の方法では、アルファベット項目が第
1インスタンスである奇数レベルの親は、AECを持た
ず、5つの子を持ち、子は順に4つ、3つ、2つ、1
つ、および0のAECを持つ。子は、その親よりも5つ
ないし1つ多くの文字を表す。奇数レベルの親の第1の
子である偶数レベルの親は、4つのAECと1つの子を
持ち、この子が次の奇数レベルの親となる。奇数レベル
の親の2番目ないし5番目の子は、子を持たない。しか
し、この方法では、追加の子が、同一の繰返し文字以外
も含むZL文字列を形成するのに役立つ場合、奇数レベ
ルの親が5つより多数の子を持つこともでき、奇数レベ
ルの親の2番目ないし5番目の子が子供を持つこともで
きる。
【0072】24.短記号文字列という特殊な形式の圧
縮済みデータを提供する。この形式は、短記号オプショ
ン(SSO)というオプションを呼び出す際に提供され
る。SSOを呼び出すと、索引記号の前にゼロ・ビット
が付き、長記号と呼ばれるようになる。圧縮済みデータ
は、短記号と呼ばれる未圧縮文字を含むことができる。
4ビットの短記号ヘッダの後に続く文字列に、1つない
し8つの短記号が入ることができる。短記号ヘッダの第
1ビットは、このヘッダを長記号と区別するために1に
なる。残りの3ビットは、文字列中の短記号の数よりも
1多いカウントを含む。圧縮時には、必ず1文字だけか
ら成る文字記号を識別する長記号ではなく短記号が作成
される。1つないし8つの短記号が連続的に生成される
ときは、短記号文字列としてまとめて配置される。本発
明者等は、圧縮すべきデータが、いくつかのまたは多数
の2文字以上のデータ・シーケンスが辞書中にZL文字
列として存在しないようなデータであるとき、この新規
SSOによって圧縮が改善されることを発見した。バイ
ト内の2進データ、およびバイト内のパック10進デー
タでそうなると思われる。辞書中の項目の数が少ないほ
ど、SSOの利点は減少する。なぜなら、そのような場
合、索引記号の長さに1ビット追加して長記号を形成す
ると、スペースがかなり使用されるからである。
【0073】別個の辞書に関する、本願発明の追加の特
徴に関する説明をこれで終わる。上記の説明で使用した
略語を容易に覚えられるように、以下に列挙しておくこ
とにする。
【0074】ACT 追加拡張文字カウント。圧縮辞書
項目中のAECの数。
【0075】CCT 子文字カウント。圧縮辞書項目中
のCCの数。
【0076】CSL 完全記号長。先行なし展開辞書項
目中のPECとTECの数。
【0077】Dビット 倍文字項目・ビット。0または
1のACTと同じ。
【0078】OFST 出力バッファの次の位置から、
この展開辞書項目のPECおよびTECの配置が開始す
る位置までの、バイト単位で表したオフセット。先行あ
り項目中に存在する。
【0079】PSL 部分記号長。0の場合、先行なし
展開辞書項目を示す。非ゼロの場合、先行あり項目を示
し、項目中のPECとTECの数のカウントになる。
【0080】SCT 兄弟文字カウント。SD中のSC
の数。
【0081】SSO 短記号オプション。
【0082】Xビット CC用の子検査ビット。
【0083】Yビット SC用の子検査ビット。
【0084】
【実施例】
圧縮プロセスの概要−図1 図1において、ボックス21は、未圧縮レコードを受け
取るデータ発信元バッファを表す。発信元バッファ21
は、それに記憶されているレコード中の文字を、各レコ
ードに文字が記憶された順序で圧縮プロセス22に送
る、コンピュータ・システムのメモリ内に置くことがで
きる。圧縮プロセス22は、現未圧縮レコードから受け
取った文字を、圧縮用辞書23中のアクセスされた文字
と突き合わせて、現レコードの文字シーケンス内の文字
列を検出する。圧縮プロセス22は、文字列が検出され
るたびに、データ宛先バッファ24に「索引記号」を出
力し、宛先バッファ24内で各圧縮済みレコードが索引
記号のシーケンスとして生成される。入力文字が、辞書
項目の範囲内で、現在比較されているどの文字とも突き
合わせることができない場合、そのたびに、圧縮プロセ
ス22によってある文字列が検出される。出力される索
引記号は、最後に検出されたZL文字列中の最後に一致
した文字の、辞書内の位置を表す。文字が一致しない場
合はそのたびに、次のZL文字列の比較が開始され、こ
のZL文字列について、圧縮用辞書に再度入って、この
次ZL文字列中の1つまたは複数の文字を検出する。
【0085】未圧縮レコードの最後の文字が圧縮プロセ
ス22に提供されると、このレコードの最後の文字列が
終了し、この最後に一致した文字の辞書位置が、宛先バ
ッファ24に出力され、対応する圧縮済みレコードの文
字列を表す索引記号になる。
【0086】圧縮済みレコードは次に、宛先バッファ2
4から次の宛先に送信することができる。次の宛先はた
とえば、ディスク記憶域や、通信回線を経て伝送するた
めのモデムなどとすることができる。
【0087】展開プロセスの概要−図2 図2は、圧縮済みレコードを受け取り発信元バッファ2
6に入れる、受信位置における圧縮済みレコードの展開
処理を表している。発信元バッファ26は、コンピュー
タ・システムの主記憶域内の指定された区域とすること
ができる。圧縮済みレコードはたとえば、ディスク記憶
域や、通信回線に接続されたモデムなどから受け取るこ
とができる。
【0088】発信元バッファ26内の圧縮済みレコード
を含む索引記号が、展開プロセス27に送信される。展
開プロセス27では、展開用辞書28を使用するが、こ
れは図1の圧縮用辞書23と異なってよい。索引記号
は、発信元バッファ26で読み取り中の現圧縮済みレコ
ードの始めから既存の順序で展開プロセス27に送信さ
れる。
【0089】展開プロセス27は、発信元バッファ26
から受け取った各索引記号を検出し、その値を展開用辞
書28の項目の索引として使用して、展開辞書28内の
対応する未圧縮文字列のすべての文字または1番右の文
字を取り出す。選択された文字列に先行の文字があれ
ば、展開用辞書28内の1つまたは複数の連鎖された先
行の項目から取り出されて、現索引記号で表される未圧
縮文字列が再構築される。選択された文字列中の文字
は、宛先バッファ29に現カーソル位置から順に書き込
まれていく。
【0090】圧縮用辞書および展開用辞書の構造 本願発明の静的Ziv−Lempel方式は、2つの辞
書を使用することによって最高の性能を得る。これらの
辞書は、コンピュータ・システムのメモリに配置するこ
とができる。本明細書では、これらの辞書の一方を「静
的圧縮用辞書」と呼び、他方を「静的展開用辞書」と呼
ぶ。各辞書にはそれぞれ、固有の項目構造が提供され
る。
【0091】未圧縮レコード中のバイトが、レコードを
圧縮する際に、辞書に記録された文字列と突き合わされ
る。辞書内の文字列と一致する未圧縮レコード中の各文
字列は、その文字列中の最後の文字の、辞書内の索引
を、「索引記号」と呼ばれる圧縮コードとして使用す
る。本明細書では、索引記号を提供する未圧縮文字の文
字列を「文字記号」と呼ぶ。
【0092】文字列中の文字の数は、1から辞書に含ま
れる最大文字列長までの任意の数とすることができるの
で、文字記号は可変長である。
【0093】索引記号は固定長であり、この長さは、圧
縮用辞書内の項目の数によって決定される。したがっ
て、辞書が512バイト、1024バイト、2048バ
イト、または4096バイトの長さを持つ場合、索引記
号の長さは9ビット、10ビット、11ビット、または
12ビットである。索引記号は、出力される「圧縮済み
レコード」中で互いに連続して配置される。
【0094】本願発明で使用する辞書は、Ziv−Le
mpel(ZL)アルゴリズムを中心として編成されて
いるが、ZLアルゴリズムは多数の異なる方法で実施す
ることができる点に留意されたい。本願発明では、その
うちで、コンピュータの性能の点で有利な、Ziv−L
empelタイプの辞書内の項目の固有の構造化を伴う
新規の方法を提供する。
【0095】辞書内のどの文字列についても、その接頭
文字列も辞書内にあるという点で、Ziv−Lempe
lアルゴリズムは接頭特性を有する。すなわち、文字列
SBが辞書内にあり、ある文字列Sおよび別の単一文字
Bから構成される場合、文字列Sは辞書内にあるはずで
ある。Bを、接頭文字列Sの終りにある「拡張文字」
(EC)と呼び、文字列S中の各文字もまたECであ
る。文字列が一時に1文字だけ拡張されるので、これを
「文字拡張」と呼ぶ。ZLアルゴリズムはまた、従来技
術では、接頭文字列が、記号と呼ばれる2文字以上ずつ
一時に拡張される、「記号拡張」によっても実施されて
いる。本願発明では、文字拡張方式と記号拡張方式の両
方が使用可能である。
【0096】ZL辞書の最初の256項目はそれぞれ、
8ビット・バイトの各ビットのあらゆる置換によって得
られるすべての文字からなるアルファベットのすべての
文字を含む。あらゆるZL文字列は、1つの文字だけを
持つ単一文字列を含む、辞書内のこれらの最初の256
文字の1つで始まる。最初の256の文字項目に続く項
目中のECは、複数の文字を持つ文字列中に存在する。
【0097】Ziv−Lempel方式は、未圧縮文字
のシーケンスを、固定長「索引記号」の圧縮済みシーケ
ンスに変換する。各記号は、発信元文字シーケンス中の
文字の文字列を表す。ZL方式では、入力として索引記
号シーケンスが与えられると、その各索引記号をそれが
表す文字列に展開し、それによって元の未圧縮文字シー
ケンスを再作成する。
【0098】図3に、次の例で最初の索引記号を生成す
るために検索される辞書項目を示す。
【0099】 未圧縮シーケンス−−>ABCD EFG H IJKLMN EFG 圧縮済みシーケンス−−> 374 442 200 996 442
【0100】ZL方式では、圧縮アルゴリズムを使用し
て、辞書内の文字列と一致する最長の未圧縮文字列を見
つける。各文字列が検出されると、その文字列中の最後
の文字の索引(辞書アドレス)によってその文字列が識
別される。
【0101】したがって、ZL圧縮方式では、次のステ
ップが実行される。
【0102】1.現入力位置から始めて、辞書のメンバ
ーである最長文字列を検索する。
【0103】2.文字列の最後の文字の、辞書内の位置
(索引)を使用することによって、その文字列を表す索
引記号を出力する。
【0104】3.ステップ1に戻って、最後に検出され
た文字列に続く文字を次の文字列の最初の文字として文
字列検出プロセスを続行する。ただし、圧縮中の文字シ
ーケンスの終りにある場合は除く。
【0105】ZL展開アルゴリズムでは、逆のプロセス
に従い、圧縮操作によって得られた索引記号のシーケン
スを入力として使用して、未圧縮文字シーケンスを再構
築する。説明を簡単にするため、文字列全体が辞書の各
項目に記憶されるように示してあるが、好ましい実施例
ではこれを避けることに留意されたい。
【0106】図4に、A、B、C、AA、AB、AB
A、ABB、ABC、ABCA、ABCBという文字列
を表すツリーの例を示す。
【0107】図5は、項目として上記の同じ文字列を持
つ、リスト形式の辞書を示す。リスト形式では、同一の
親項目の子供である各項目が、親中の子ポインタによっ
て指定される順次リストに配置される。リスト中の各子
項目は、その親の文字列を、辞書で表されるツリー中の
異なる文字列経路に拡張する。すなわち、同一の子リス
ト中の各子は、共通の親文字列からの分岐文字列を提供
する。
【0108】辞書内の項目は、子ポインタ・フィールド
を持つことができる。子ポインタがない場合、この項目
中の文字はある文字列の最後の文字である。子ポインタ
がある場合、その項目は親であり、そのポインタが、そ
の親の子供である項目のリストを位置指定する。子リス
ト中の各項目は、その親から異なる文字列を継続する拡
張文字(EC)を含む。
【0109】図6に、図5の子リストを含む圧縮用辞書
をさらに展開したものを示す。これらの子リストは、辞
書内の順次位置に配置される。同一の親ECを持つ子項
目は、辞書内の順次位置にあり、「子リスト」と呼ばれ
る。辞書内に異なる子リストを連続して配置する必要は
ない。
【0110】展開用辞書の一般操作−図7:図7に、図
4のZiv−Lampelツリー用の辞書を表す。この
辞書は、圧縮と展開の両方に使用される。この辞書内で
は、子ポインタ(CPTR)は圧縮だけに使用され、先
祖ポインタ(PPTR)は展開だけに使用される。した
がって、どの辞書項目も、圧縮と展開の両方をサポート
するためにCPTRフィールドとPPTRフィールドの
両方を有する。PPTRは、索引記号によって位置指定
された項目から逆方向に文字を追跡させ、それによって
文字列の最後の文字を見つけることにより、ある索引記
号用の未圧縮文字列中の文字を再構築することができ
る。PPTRは、その文字列の以前の文字を持つ以前の
項目を位置指定し、前の項目はさらに前の項目のPPT
Rを含むことができ、以下同様にして、PPTR値がな
いことによって、その文字列用の最初の辞書項目が見つ
かったことが示されるまで続けられる。
【0111】たとえば、記号3は、EC(A)とPPT
R値0を含む、辞書内の項目3を位置指定する。PPT
R値0は、位置3で見つかったECの前の位置にある、
同一の文字列中の別の文字である別のEC(A)を持
つ、辞書内の最初の項目を位置指定する。したがって、
未圧縮文字列は、このように文字AAによって再構築さ
れる。
【0112】PPTRが0ないし255の範囲の値を持
つとき、これがアルファベット項目を指定していること
が知られる。この場合、このアルファベット項目は、そ
れ自体のECを含まないのでアクセスされない。その代
わり、PPTRの値が単に、そのアルファベット項目に
よって表されるECとして使用される。
【0113】展開操作の拡張−図8:図8は、任意の辞
書項目中の最大3文字を含むECフィールドを示す。こ
れらの文字は、当該の項目によって表される少なくとも
1つのTECを含む。このTECの前には、その左側に
文字列内の最大2つの先祖EC(PEC)がくることが
ある。このため、1つの辞書項目だけにアクセスするこ
とによって、3つ以下の文字から成る文字列を表すすべ
ての索引記号を展開することができる。この1つの辞書
項目は、索引付きの位置にある項目である。文字列中の
先祖ECを位置指定するためにPPTR値が必要となる
のは、3つを上回るECを持つ項目だけである。PPT
Rで位置指定される項目がPPTR値を含まないとき、
その文字列の展開操作が終了する。
【0114】たとえば、索引記号9は、BのECと、E
C ABCを含む項目7を位置指定するPPTR値とを
含む項目を指定する。ABCは第1のEC Bの前に連
結されて、文字列ABCBを形成する。項目7はPPT
R値を持たないので、文字列ABCBは完全な文字列で
ある。PPTR値がないので、この連鎖されたアクセス
操作は終了する。
【0115】圧縮操作の子拡張−図9:本願発明では、
アクセス時間がさらに改善される。本願発明では、アク
セスの回数を減らすために、各子の最初のTECを親項
目中に子文字(CC)として配置する。これによって、
現入力文字と一致しないCCをその親項目中にもつ子項
目にアクセスする必要がなくなる。
【0116】図9に、各項目が最大3つの子文字を含む
(図4の)圧縮用辞書の例を表す。図9の項目はまた、
図8で説明した方式で展開に使用できる最大3つのEC
文字を含むことができる。
【0117】辞書中のある項目用の子文字が3つを上回
る場合、それらの子文字を1つまたは複数の兄弟項目ま
たは兄弟記述子中に兄弟文字として配置する必要があ
る。
【0118】たとえば、図6の辞書構造を使用して文字
列ACを圧縮する場合、位置0にアクセスして文字Aと
突き合わせてから、Aの子を含む位置3および位置4に
アクセスすることになる。この操作の後、CがAの子で
ないと判定される。図9の新規の辞書構造を用いる場
合、前述の場合と同様に、位置0にアクセスして、Aと
一致するかどうか判定する。前述の手順とは対照的に、
この項目のCCフィールドからの位置0の辞書項目か
ら、CがAの子でないと決定することができる。このた
め、項目位置3および4へのアクセスが不要になる。
【0119】したがって、図9では、親項目中の最大3
つの子文字を現入力文字と比較して、現入力文字と一致
しないCCがあるか否か判定することができる。
【0120】CPTRを持たない子がある場合、その子
には子文字がなく、現文字列はその子項目へのアクセス
で終了する。その辞書位置は、一致文字列に対応する圧
縮済みデータである索引記号である。
【0121】圧縮操作の兄弟拡張−図10:図9では、
検査中の親項目に一致するCCが含まれる場合にアクセ
スが必要であるが、親中でCCが一致しない項目へのア
クセスは行われない。
【0122】同様に、図10でも、親項目にスペースが
不足しているために、親項目に別の子のCCを含めるこ
とができないとき、同じ親の別の子の大部分に対するア
クセスが不要になっている。図10は、同じ親の別の子
の最初のTECである最大3つの兄弟文字を含めるのに
十分なスペースを持つ項目を示す。このようなとき、S
Cフィールドの兄弟文字で一致しないものがある場合、
そのSCを表す項目へのアクセスは不要である。
【0123】兄弟項目の位置は、親項目のCCで指定さ
れる最後の子項目からの順次位置である。兄弟項目と
は、その親項目の子リスト中の別の子項目にすぎない。
SCフィールド中のどの兄弟文字とも一致が見られない
場合、それらのSCによって指定される兄弟項目はスキ
ップされる(アクセスされない)。
【0124】入力文字列をAXとすると、項目0のCC
A、CC B、CC Cがそれぞれ一致しない場合、
項目3、4、5をスキップして、最初に項目6にアクセ
スする。これによってXを項目6の新しいTEC、Dと
比較し、Dが一致しない場合、Xを項目6のSC E、
SC F、およびSC Gと比較する。
【0125】辞書項目長因子:辞書中の項目の長さによ
り、単一項目中で発生できる様々なタイプの文字の組合
せおよび数が制限される。辞書中の項目の数により、そ
の項目を参照するのに必要なCPTRフィールドおよび
PPTRフィールドのサイズが決定される。
【0126】単一の項目に1組の文字を含めるのが適切
なように思えるが、8バイトなど合理的なサイズの項目
ではそのようにできないことがある。項目の状況に依存
する項目構造が、高性能操作のための最良の構造であ
る。
【0127】項目の長さに関するもう1つの重要な考慮
点は、実行操作のために辞書項目をプロセッサに転送す
るプロセッサ・キャッシュおよびレジスタ内の取出し可
能ユニットのサイズなど、システムの主記憶域および他
の取出し可能メモリ階層レベルでアクセスされるユニッ
トのサイズである。
【0128】辞書項目の制御フィールド−図11、1
2、13、14、15、16:本願発明はまた、圧縮操
作の場合は入力文字ストリーム中の現文字列の終りを決
定し、展開操作の場合は文字記号の終りを決定するため
に必要な項目アクセスの数を減らす助けとなる各種フォ
ーマットを定義するための、1つまたは複数の制御フィ
ールドを辞書項目中に提供する。重要な制御フィールド
には、次のものが含まれる。
【0129】1.子ビット(C)−現項目が、1つまた
は複数の子を持ち、子ポインタ(CPTR)を含む。
【0130】2.more-childrenビット(M)−現項目
が、その項目中の子文字(CC)の数よりも多くの子を
持つ。
【0131】3.more-siblingビット(S)−現項目
が、子リスト中でその項目に続く兄弟を持つ。
【0132】4.記号長(SL)−この項目を含む辞書
文字列中の文字の数。
【0133】項目の制御フィールドでは、C、M、Sは
ビット標識であり、SLはカウント・フィールドであ
る。
【0134】Cビットは、項目が子供を持つかどうかを
示す。Cは、項目が子供を持たないことを示すとき、辞
書文字列が現項目で終わることを示している。その場
合、その項目中のすべてのECが入力ストリームと一致
するときは、文字列の終りを検出するために別の項目に
アクセスする必要はない。
【0135】MビットはCビットと併用されて、その項
目中に現入力文字と一致するCCがないとき、さらに兄
弟項目がアクセスされることを示す。Mビット情報がな
ければ、子リストの終りがその項目中の最後のCCに対
応するかどうかは分からない。
【0136】Sビットは、子リスト中の通常の文字項目
である兄弟項目で使用されて、その項目中に現入力文字
と一致するSCがないとき、さらに兄弟項目にアクセス
する必要があることを示す。Sビットは、子リスト中の
特殊兄弟記述子中でも同じ目的に使用される。
【0137】項目中にCC用のスペースがないとき、C
ビットは1になる。この場合、Mビットを検査する必要
はない。同様に、兄弟項目中にSC用のスペースがない
とき、Sビットは1になる。
【0138】辞書内の最初の256項目については制御
フィールドを小さくすることができる。なぜなら、これ
らの項目には兄弟がなく(Sが不要)、かつ長さが単一
文字だけに事前定義されており、明示的なSLフィール
ドが必要でないからである。これらの256項目は、バ
イト中の8ビットのあらゆる置換によって決定される、
その辞書のアルファベット文字を表す。アルファベット
項目中の制御フィールドは、4ビットだけなので、制御
数字(CD)と呼ばれる。CDを図11に示す。
【0139】最初の256項目の後の項目については、
制御フィールドにSビットおよびSL値も含まれる。S
ビットおよびSL値は、必要な任意の最大文字列長を示
すことが可能な複数のビットとすることができる。ただ
し、文字列は必ず最初の256項目のうちの1つで始ま
る。図12に、最初の256項目の後の項目中で使用さ
れる8ビットから成るバイトを占める制御フィールドを
示す。この制御フィールドを制御バイト(CB)と呼
ぶ。
【0140】辞書が最大で4K(4096)項目に制限
される場合、子ポインタ(CPTR)フィールドおよび
先祖ポインタ(PPTR)フィールドのサイズはそれぞ
れ12ビットとすることができる。これは、4ビットの
CDまたは8ビットのCBを収めるのに好都合なサイズ
である。図13に示すように、辞書内の最初の256項
目の1つであるアルファベット項目では、4ビットのC
Dと12ビットのCPTRを2バイトに収めることがで
き、次のバイトと、それに続くバイトにCCを格納する
ことができる。アルファベット項目中にECを入れる必
要はない。
【0141】最初の256項目の後の項目である非アル
ファベット項目では、8ビットのCBと12ビットのC
PTRを3バイトに収めることができる。この場合、3
つのバイトの終りに4つの未使用ビットが残る。これを
図14に示す。項目の4番目のバイト中に、EC、その
次に他のEC、さらにCCまたはSCを入れることがで
きる。CPTRの代わりに、図15に示すように、PP
TRとすることもできる。
【0142】図16に示すように、CB、CPTR、お
よびPPTRを4バイト中に配置することができる。
【0143】複数フォーマット辞書項目−図17:図1
7は、複数の項目フォーマットの例、F1A、F1、F
2、F3A、F3、F4を示している。これらのフォー
マットは、圧縮・展開併用辞書構造で使用することがで
きる。フォーマットF1AおよびF3Aは、アルファベ
ット項目であり、4ビットの制御数字(CD)を格納す
る。他のフォーマットは、非アルファベット項目であ
り、8ビットの制御バイト(CB)を格納する。ここで
は、フォーマットF1は、F1兄弟記述子(SD)では
なく文字項目を意味するように使用される。
【0144】フォーマットF1AのCD中の子ビット
(C)はゼロであり、子がないことを示す。したがっ
て、フォーマットF1Aはすべてゼロを含む。
【0145】フォーマットF1のCB中のCもゼロであ
る。F1には最大7つのEC用のスペースがある。この
うち、1番左のいくつかのECは先祖EC(PEC)と
することができる。図17では、PECと真EC(TE
C)を区別しておらず、最初のTECと追加のTEC
(AEC)も区別していない。
【0146】F1は、親項目中の子ポインタ(CPT
R)が指す子リスト内にある。子ポインタは、少なくと
も1の記号長(SL)を持つ必要がある(F1Aまたは
F3AのSLは暗示の1である)。したがって、F1の
CB中のSLは2ないし7の値を持つことができる。E
Cが占めていないF1のスペースは兄弟文字が占めるこ
とができるが、説明を簡単にするため、図17ではE
1、E2、、、で表したECだけを示している。F1中
のECの数は、F1中のSLである。F1中のECフィ
ールドの始めからF1中の1番左のTECまでのバイト
・オフセットが、F1の親中のSLである。この最初の
TECの左側にあるECはPECである。F1中のTE
Cの数は、F1中のSLからF1の親中のSLを引いた
値である。
【0147】展開の際に索引記号がF1を指定するとき
は、文字記号はF1中のすべてのECであり、これらの
ECの数は、F1中のSLで示される。PECとTEC
を区別する必要はない。索引記号を拡張する際に、他の
辞書項目にアクセスする必要はない。
【0148】フォーマットF2のCB中のCもゼロであ
る。F2は最大5つのEC用のスペースを持つ。これら
のECの中で、1番左のいくつかのECはPECとする
ことができる。F2は、CBの次に12ビットの先祖ポ
インタ(PPTR)を含み、その後に4つの未使用ビッ
トが続き、最大5つのEC用のスペースが残る。ECが
占めないスペースはSCが占めることができる。F2中
のECの数は、F2中のSLから、F2中のPPTRで
指定される項目中のSLを引いた値である。F2中のE
Cフィールドの始めからF2中の1番左のTECまでの
バイト・オフセットは、F2の親中のSLから、F2中
のPPTRで指定される項目中のSLを引いた値であ
る。F2中のTECの数は、F2中のSLから、F2の
親中のSLを引いた値である。F2の親と、F2中のP
PTRで指定される項目は、同一の項目でも異なる項目
でもよい。
【0149】項目中のCビットがゼロの値で、項目が子
を持たないことを示すとき、SLが7以下の場合、その
項目はF1であり、SLが8以上の場合、その項目はF
2である。これは、F1とF2を区別し、したがって項
目がPPTRを含むかどうかを識別する方法である。
【0150】図17に、様々な項目の組合せを示す。図
17は、F3AまたはF3中のCPTRによってF1を
指定できることを示している(すなわち、CPTRで指
定される子リストにその項目を入れることができる)。
F1は、F4中のCPTRによって指定することもでき
るが、これは図では示されていない。図では、F3また
はF4中のCPTRによってF2を指定できることを示
している。また、F2または別のF4中のPPTRによ
ってF4を直接指定できること、およびF2またはF4
中のPPTRによってF3を直接指定できることも示し
ている。
【0151】フォーマットF3AのCB中のCは1であ
り、その項目が子を持ち、CPTRを含むことを示す。
アルファベット項目であるF3A中にはECがないの
で、最大6つの子文字(CC)用のスペースがある。
【0152】フォーマットF3のCB中のCも1であ
る。F3は最大5つのEC用のスペースを持つ。それら
のECのうち1番左のいくつかのECはPECとするこ
とができる。F3は、CBの後に12ビットの子ポイン
タ(CPTR)を含み、その次に4つの未使用ビットが
続き、最大5つのEC用のスペースが残る。ECが占め
ないスペースはCCが占めることができるが、説明を簡
単にするため、図17ではE1、E2、、、で表したE
Cだけを示している。F3中のECの数は、F3中のS
Lである。F3中のECフィールドの始めからF3中の
1番左のTECまでのバイト・オフセットは、F3の親
中のSLである。この最初のTECの左側にあるEC
は、PECである。F3中のTECの数は、F3中のS
LからF3の親中のSLを引いた値である。
【0153】フォーマットF4のCB中のCも1であ
る。F4は最大4つのEC用のスペースを持つ。それら
のECのうち1番左のいくつかのECはPECとするこ
とができる。F4は、CBの後に12ビットCPTRを
含み、その次に12ビットのPPTRが続き、最大4つ
のEC用のスペースが残る。ECが占めないスペースは
CCが占めることができる。F4中のECの数は、F4
中のSLから、F4中のPPTRで指定される項目中の
SLを引いた値である。F4中のECフィールドの始め
からF4中の1番左のTECまでのバイト・オフセット
は、F4の親中のSLから、F4中のPPTRで指定さ
れる項目中のSLを引いた値である。F4中のTECの
数は、F4中のSLから、F4の親中のSLを引いた値
である。F4の親と、F4中のPPTRによって指定さ
れる項目は、同じ項目でも異なる項目でもよい。
【0154】項目中のCビットが1の値でその項目が子
を持つことを示すとき、SLが5以下の場合、その項目
はF3であり、SLが6以上の場合はF4である。これ
は、F3とF4を区別し、したがってその項目がPPT
Rを含むかどうかを識別する方法である。
【0155】辞書項目フォーマットの使用例−図18、
19、20、21、22 図18に、図19に示す文字記号ツリーに対応する辞書
を示す。図20にツリー中の項目のフォーマットを示
し、図21に項目中の真拡張文字(TEC)を示し、図
22に項目中のすべての拡張文字、先祖EC(PE
C)、およびTECを示す。図19、21、22では、
項目位置をコロンの前に示し、その後に文字記号または
ECを示す。
【0156】図18では、位置0にある項目は、文字A
用のアルファベット項目である。他の255のアルファ
ベット項目は示していないので、次の項目は位置1にあ
る。項目0(位置0にある項目)は、フォーマットF3
Aであり、Cビットを含むがMビットを含まず(すなわ
ち、Cビットの値が1、Mビットが値が0)、項目1を
子として指定する子ポインタ(CPTR)を含み、バイ
トC1中に1つの子文字(CC)Bを含む。バイトC2
中のBは、バイトB1中のBの複製であり、したがって
バイトB1中のBが最後のCCであることを示す。
【0157】位置1にある項目は、フォーマットF3で
あり、Cビットと記号長(SL)2を含み、先祖EC
(PEC)であるAと真EC(TEC)であるBの2つ
の拡張文字(EC)を含み、CPTR 2およびCC
Cを含む。バイトC2中のCは、バイトC1中のCが最
後のCCであることを示す。
【0158】位置2にある項目は、CビットおよびSL
4を含み、PECである4つのEC AB、最初のT
ECであるC、および追加のTEC(AEC)であるD
を含み、CPTR 3およびCC Eを含む。Mビット
はゼロなので、項目2の子は1つだけであることが分か
る。
【0159】位置3にある項目は、Cビット、Mビッ
ト、およびSL 5を含み、ABCDがPECでありE
がTECであるEC ABCDEを含み、CPTR 4
を含む。項目中にCC用のスペースはない。このため、
Cビットが少なくとも1つの子があることを示すので、
Mビットは実際には必要でない。
【0160】図18についてさらに説明する。ここで
は、すべての詳細は説明せず、図の重要部分だけを説明
する。他の詳細は自明である。
【0161】位置4にあるF4項目は、Cビット、CP
TR、先祖ポインタ(PPTR)、TEC F、2つの
CCであるGおよびXを含み、子リストが位置6から始
まることを示す。F4項目はまた、その後の位置5に兄
弟があることを示すSビットを含む。項目5の兄弟文字
(SC)はない。項目5中のTECを検査して、項目5
に一致が見られるかどうかを判定する必要がある。
【0162】位置5にあるF1項目は、項目4の兄弟で
ある。このF1項目は、PEC ABCDEおよびTE
C XYを含む。この項目は、子がなく、SLが7にす
ぎないので、PPTRを含む項目ではなく、完全な文字
記号を含むF1項目とすることができる。
【0163】項目6は、項目4の最初の子である。項目
4が2つのCCを含むので、項目7は項目6の兄弟であ
ることが分かり、項目6がSビットを含む必要はない。
【0164】項目7は、項目4の第2の子である。これ
は、図17の説明で述べたが、図中には示さなかった、
F1がF4の子である場合である。
【0165】項目8は、PEC FGおよびTEC H
を含み、項目8を指定する索引記号の展開時に、項目3
中のECを項目8中のECの左側に配置すべきことを示
すPPTRを含む。
【0166】子文字および兄弟文字の操作−図23およ
び24 図23に、CCおよびSCの位置を使用して親の子リス
ト中で対応する子供をどのように位置指定するかを示
す。図24に、図23に示した項目を含むツリーを示
す。
【0167】図23で1番上のF3項目が、対象となる
親である。このF3項目は、PECAおよびTEC B
を含み、CC ABCを含む。また、Mビットを含み、
ABCの子供よりも多くの子供があることを示す。
【0168】親のCC Aに一致が見られる場合、Aが
最初のCCであるので、親中のCPTRに増分0が加算
されて、対応する子であるAという子の索引が形成され
る。A CCには一致が見られないが、B CCに一致
が見られる場合、CPTRに増分1が加算され、以下同
様である。親中のどのCCにも一致が見られない場合、
CPTRに増分3が加算されて、親中のCCに対応する
索引の後に最初の子の索引が形成される。この最初の子
は、PEC ABおよびTEC Dを含み、Sビットお
よびSC Eを含む。したがって、親のCCに一致が見
られないと、オフセット索引3にある子が取り出され、
そのTEC Dでの突合せが行われ、それが失敗した場
合は、SC Eでの突合せが行われる。この項目中のS
Cリストの終りは、バイトS2中の複製Eによって示さ
れる。
【0169】オフセット索引3にある項目中のSC E
に一致が見られる場合、そのSCが第1のSCであるの
で、現項目の索引に増分1が加算されて、SCに対応す
る兄弟の索引が形成される。これは、増分0が最初のC
Cに対応する、親中のCCの場合と異なる。この違いの
理由は、最初の子の索引であるCPTRにはCCの増分
が加算されるが、現兄弟の索引にはSCの増分が加算さ
れて、後続の兄弟の索引が形成されることである。
【0170】オフセット索引0およびオフセット索引4
にある項目中のMビットは、それらの項目中のCCで示
される子供よりも少なくとも1つ多い子を示す。図24
のツリーでは、それらの追加の子供はTEC Zを持つ
ものと仮定される。
【0171】特殊兄弟記述子項目−図25および26:
図25に、親が多数の子供を持ち、おそらく親とその子
供に多数のECがあるとき、および子供が子供を持ち、
直接の子供がSCではなくCCを含むときに使用される
特殊兄弟記述子(SD)を示す。このようなときには、
親中のCC用のスペースおよび直接の子供中のSC用の
スペースが余りまたはまったくなくなるので、入力文字
列の次の文字を子供中の最初のTECと比較して、一致
を見つけるために、直接の子供に何度もアクセスを行な
わなければならない。親の子リスト中に、子リスト中の
後続の子供に対応するSCを含むSDを配置すると、こ
のように何度もアクセスを行う必要がなくなる。次いで
入力文字列中の次の文字をSD中のSCと比較し、SD
中の対応するSCに一致が見られない場合、子リスト中
の後続の子供をスキップする。SDについて議論する
際、子リスト中の、SDではない項目を文字項目(C
E)と呼ぶ。SDがないとき、子リスト中のすべての項
目はCEである。
【0172】図26に、その対応する辞書項目が図25
の項目を含む、ツリーを示す。
【0173】図25の1番上の項目は、PEC AB、
TEC C、ならびにCC AおよびCC Bを含む親
である。入力文字列と親のEC ABCの間ですでに一
致が見つかっているものとすると、入力文字列中の次の
文字とCC AまたはCCBの間に一致が見られる場
合、突合せプロセスを続行するため、親中のCPTRに
それぞれ増分0または増分1が加算されて、親の対応す
る子の索引が形成される。CC AとCC Bのどちら
にも一致が見られない場合は、CPTRに増分2が加算
されて、SDの索引が形成される。親中のMビットは1
なので、CCAおよびCC Bに対応する子供以外に、
その親には別の子があることが知られる。
【0174】SDの索引が形成されるとき、子リスト中
で指定された項目がCEであるかSDであるかは分から
ない。この項目にアクセスするとき、その制御バイト
(CB)中の区別コードがその項目をSDとして識別す
る。たとえば、CビットがゼロであるがMビットが1で
あるケースを使用して、ある項目をCEではなくSDと
して識別することができる。その項目がCEである場
合、突合せプロセスを続行するために、入力文字列中の
次の文字がCE中の最初のTECと比較される。その項
目はSDなので、入力文字列中の次の文字が、最初のT
ECではなくSD中のSC CDEFと比較される。S
DのバイトS5中のFは、バイトS4中のFの複製であ
り、バイトS4中のFがSD中の最後のSCであること
を示す。SCCに一致が見られる場合、SDの索引に増
分1が加算されて、対応する子の索引が形成される。次
に、この対応する子がアクセスされて、突合せプロセス
が続行される。SC Cには一致が見られないが、SC
Dには一致が見られる場合、SDの索引に増分2が加
算されて、対応する子の索引が形成される。
【0175】図示したように、SDは、4つだけでなく
7つのSCを含むことができる。さらに、その場合は、
7つのSCに対応する数よりはるかに多くの子供がその
親にある可能性がある。この場合、SD中のSビットは
1となり、SD中のどのSCにも一致が見られない場
合、突合せを続行するために7番目の対応する子の後の
別の項目にアクセスする必要があることを示す。この次
の項目は、CEまたは別のSDとすることができる。
【0176】別個の静的辞書構造 好ましい実施例では、異なる構造を持つ2つの別々の辞
書を使用する。一方の辞書は圧縮用であり、もう一方は
展開用である。静的辞書の2重辞書構造を提供するのが
最善である。というのは、適応(動的)辞書更新操作に
2つの異なる辞書の再生成が必要であり、これは単一の
適応辞書の更新よりも難しいからである。
【0177】圧縮と展開の両方に単一の静的辞書を使う
場合に比べて、別々の静的辞書を使う方が優れた性能を
提供することが分かっている。なぜなら、単一の併用辞
書は圧縮と展開の両方に最適化することはできず、その
性能が、圧縮と展開のどちらか一方に片寄るからであ
る。単一の辞書の効率は、別々の辞書の効率に及ばな
い。
【0178】好ましい実施例では、圧縮用辞書を、展開
プロセスには留意せずに圧縮プロセスについて最適化
し、展開用辞書を、圧縮プロセスには留意せずに展開プ
ロセスについて最適化する。この最適化は、図29、3
0、31に示すように、本願発明による別個の辞書内の
項目の構造によって行われる。
【0179】圧縮呼出し命令−図27および28:本願
発明の好ましい実施例では、圧縮呼出し命令という命令
を提供する。この命令を図27に示す。圧縮呼出し(C
MPSC)命令は、この命令が使用する汎用レジスタ1
(GR1)中のビットによる決定に応じて圧縮または展
開を実行する。CMPSCは、圧縮を実行するとき、図
1の概要に示すように実行する。CMPSCは、展開を
実行するとき、図2の概要に示すように実行する。
【0180】図27に示すように、CMPSCは4ビッ
トのR1フィールドと4ビットのR2フィールドを持
つ。これらのフィールドはそれぞれ、偶数/奇数汎用レ
ジスタ対を指定する数を含む(フィールド中の数によっ
て指定される偶数番号のレジスタとそれより1つ小さな
奇数番号のレジスタ)。
【0181】図28に、CMPSCが使用するレジス
タ、すなわち汎用レジスタR1、R1+1、R2、R2
+1と、やはり暗示的に指定されるGR1を示す。レジ
スタR1およびR1+1はそれぞれ、宛先オペランドの
31ビット・アドレスおよび32ビットの符号なし2進
長を含む。宛先オペランドとは、CMPSCが圧縮時に
はそこに索引記号を置き、展開時には文字を置く場所で
ある。レジスタR2およびR2+1は、CMPSCが圧
縮時にはそこから文字を取りだし、展開時には索引記号
を取り出す発信元オペランドのアドレスおよび長さを含
む。CMPSCは、処理を完了するために、レジスタR
1およびR2中のアドレスを増分し、レジスタR1+1
およびR2+1中の長さを減分して、各オペランド中で
処理されたデータの量を反映するようにして、新規の開
始アドレスおよびオペランドの残りの長さを指定する。
【0182】レジスタGR1は、圧縮済みデータの単位
である、索引記号中のビット数と、圧縮用辞書または展
開用辞書内の対応する項目の数とを指定する3ビットの
フィールドISSを含む。レジスタGR1はまた、圧縮
を行うかそれとも展開を行うかを指定するビットも含
む。これらのフィールドについての詳細は、図28から
自明である。最大13ビットの索引記号サイズが可能で
あり、これは、前述の単一辞書における12ビットの限
界に比べて改善である。索引記号サイズを大きくすれ
ば、辞書が大規模になり、辞書にさらに様々なZL文字
列を含めることができるので、圧縮が向上する。
【0183】レジスタGR1は、4K(4096)バイ
ト境界上の辞書の位置を指定する31ビット・アドレス
の上位ビットを含む。これは、圧縮操作時に別個の圧縮
用辞書であり、あるいは展開操作時に別個の展開用辞書
である。
【0184】レジスタGR1はまた、3ビットの圧縮済
みデータ・ビット番号(CBN)フィールドを含む。圧
縮操作の開始時に、CBNは、圧縮済みデータの第1ビ
ットを配置すべき、R1で指定されるバイト中のビット
位置を指定する。この圧縮操作の完了時に、R1が更新
されて、圧縮済みデータのビットをまだ含んでいない少
なくとも1つのビット位置を含む宛先オペランド中の第
1バイトのアドレスを含むようになり、CBNも更新さ
れて、圧縮済みデータを含まないビット位置のうち1番
左のビット位置の番号を含むようになる。展開操作の開
始時に、CBNが、レジスタR2によって指定されたバ
イト中で処理すべき圧縮済みデータの第1ビットを指定
する。この展開操作の完了時に、レジスタR2が更新さ
れて、処理された圧縮済みデータの最後のビットの後の
第1のビットを含む、発信元オペランド中のバイトのア
ドレスを含むようになり、CBNも更新されて、その第
1ビットの番号を含むようになる。ここで説明したレジ
スタの更新と、レジスタR1+1およびR2+2中の長
さの更新は、CMPSC実行の完了時のみならず、たと
えば、実記憶域に仮想ページが存在しないため、あるい
は入出力割込みもしくは外部割込みのためにこの実行が
割り込まれる場合にも行われる。
【0185】CMPSC実行の完了時に、プログラム状
況ワード(PSW、ESA/390の標準部分)中の条
件コードが、完了の理由を示すように設定される。条件
コードの2つの可能な値を図27に示す。CC0が設定
される場合、命令は、操作に応じて、発信元オペランド
全体を圧縮または展開したので、所期のとおりの処理を
実行し終えている。CC1が設定される場合、宛先オペ
ランド中に処理の出力を受け取るためのスペースがなく
なってしまったので、命令は発信元オペランド全体の処
理を終えていない。
【0186】別個の圧縮用辞書における項目フォーマッ
ト−図29 図29に示すように、好ましい実施例の圧縮用辞書内に
は、文字項目のフォーマット3つと、兄弟記述子フォー
マット1つがある。図29には、前述し、図32につい
て説明する際に述べる、代替フォーマット0およびフォ
ーマット1の兄弟記述子は示していない。
【0187】別個の圧縮用辞書の形成には、単一圧縮お
よび展開辞書に関して述べた概念および用語を多数使用
する。前述の説明を理解するには、次の説明が必要であ
る。
【0188】単一辞書の場合と同様に、別個の圧縮用辞
書内の項目は長さ8バイトである。
【0189】3つの文字項目(CE)はそれぞれ、項目
中のCCの数のカウントを含む3ビットの子カウント
(CCT)フィールドで始まる。CCTは、単一辞書で
はCE中に存在すると記述された子ビット(C)に置き
換わる。CCTフィールドの値は、CMPSC命令用の
容易な方法で3つの項目フォーマットを区別する。CC
Tが0のとき、フォーマットは、CPTRやCCを含ま
ず、項目中のAECのカウントを内容とする3ビットの
ACTだけを含む、C0であることが知られる。AEC
のカウントは0ないし4となることができる。
【0190】別個の圧縮用辞書では、CEが、そのCE
によって新たに表される第1のECである第1の真EC
(TEC)を含むことはない。この第1TECは必ず、
その項目の親中のCCとして、または親の下にある子リ
スト中の兄弟記述子(SD)中のSCとしてのみ出現す
る。CEはまた先行EC(PEC)を含むこともない。
PECが有効となるのは展開用辞書内だけだからであ
る。しかし、CEは、その項目によって表され、その第
1TECの後に続くTECを含むことができる。これら
後続のTECを、前述どおり追加EC(AEC)と呼
ぶ。
【0191】フォーマットC0 CEは、0ないし4個
のAECを含むことができるので、1つないし5個のT
ECを表すことができる。
【0192】フォーマットC1 CEは、CCTが1で
ある。このフォーマットは、CPTRと1つのCCを含
み、フォーマットC0と同様に、0ないし4となること
ができるACTを含む。
【0193】別個の圧縮用辞書の好ましい実施例は、単
一辞書に関して説明しなかった新規の構成、すなわち子
検査ビットを含む。別個の圧縮用辞書では、親CEは、
CE中の各CC用の子検査ビット(X)を含む。CCに
一致が見られる場合、関連するXが、0であるかそれと
も1であるか試験する。Xが0の場合、CCに対応する
子項目にアクセスしても意味がないことがただちに分か
る。したがって、現在比較されている入力文字列につい
て、辞書中の最長の一致ZL文字列が見つかったことが
分かる。Xが1の場合、突合せプロセスを続行するため
に一致CCに対応する子にアクセスする必要があること
が分かる。子のXは、子が1つまたは複数のAECを持
つ場合に1となる。なぜなら、これらのAECが入力文
字列と一致しないと、子に一致が見られるようにならな
いからである。子のXは、子がそれ自体の子を持つ場合
も1である。なぜなら、この場合は、入力文字列中の後
続の文字を子のCCまたは子の下にあるSD中のSCと
突合せを試みることによって、突合せプロセスを続行で
きるからである。単一辞書中には子検査ビットは存在し
ない。なぜなら、それらのビットが必要とするスペース
を、単一辞書中の他の情報に使用した方が価値があるか
らである。
【0194】フォーマットC1 CEは、1つのCCを
含むので、1つのXも含む。このXは、CEのビット位
置3にある。
【0195】C1 CEのCCは、CE中の最後のAE
Cの後に続く。AECがない場合、CCはビット位置2
4から始まる。
【0196】フォーマットCG1 CEは1より大きな
CCTを持つ。このフォーマットは、CPTRと幾つか
のCCを含む。また、0または1つのAECを含む。含
むことのできるAECは最大で1つなので、CG1 C
E中のACTフィールドはDという単一ビットに還元さ
れる。Dとは倍文字項目を意味する。Dが1のとき、別
の項目中のCCまたはSCであるCEの第1TECと、
CE中の1つのAECとによって、CEは2つのTEC
を表す。CE中のCCTは、Dが0の場合は2ないし5
となることができ、Dが1の場合は2ないし4となるこ
とができる。
【0197】フォーマットCG1 CEはまた、その各
CC用のXビットを含み、more-childrenビット(M)
を含む。CE中のCCがCEのすべての子に対応するの
に十分である場合、Mビットは0である。CEの子がC
Cの子よりも多い場合、Mビットは1となって子が多い
ことを示す。Mが1のとき、子リスト中で、CE中のC
Cに対応する最後の子の次にSDが続く。
【0198】兄弟記述子(SD)項目は、SD中のSC
の数のカウントを含む3ビットのSCTフィールドを含
んでいる。このSCの数は1ないし6となることができ
る。SDはまた、その各SC用の子検査ビット(Y)を
含み、more-siblingsビット(S)を含む。図32の理
解を助けるために、SD中の子検査ビットにはXではな
く文字Yを使用する。XがCC用に使われるのと同様
に、YはSC用に使われる。
【0199】圧縮プロセス−図30および31 本願発明の好ましい実施例では、図30および31に示
す一般プロセスを使用して、図29で定義した項目を持
つ構造の別個の圧縮用辞書で入力文字列を圧縮する。
【0200】図30および31では、プロセス内の他の
点から制御が渡されるプロセス内の点を括弧付きの番号
で表し、この説明で参照するために、プロセスのいくつ
かのステップには括弧のない番号を付けてある。プロセ
スは、図30の上端の(1)から開始する。
【0201】(1)で、汎用レジスタR2+1中にある
発信元オペランドの長さが、少なくとも1であるかどう
か試験する。0である場合、CC0がセットされ、実行
は終了する。
【0202】(2)で、汎用レジスタR1+1中にある
宛先オペランドの長さと、汎用レジスタ1中にある圧縮
済みデータ・ビット番号(CBN)を、宛先オペランド
に少なくとも1つの索引記号用のスペースが含まれてい
るかどうか試験する。試験の方法については、(9)の
操作に関連して説明する。そのスペースが含まれていな
い場合、CC1がセットされ、実行は終了する。図30
および31では、索引記号を単に索引と呼んでいる。
【0203】ステップ41で、汎用レジスタR2によっ
てアドレスされる文字を、汎用レジスタ1中のアドレス
によってアドレスされる、圧縮用辞書中のアルファベッ
ト項目の索引として使用する。この項目を親項目と呼
ぶ。R2中のアドレスに1が加算され、R2+1中の長
さから1が減算される。
【0204】(3)で、親項目中の子文字(CC)のカ
ウント(CCT)が0であるかどうか試験する。0であ
る場合、制御は(9)に移り、(9)で、親の索引が、
R1によってアドレスされるバイト中に、CBNで指定
されるビット位置から順に記憶されていく。汎用レジス
タ0中の索引記号サイズ(ISS)に応じて9ビット、
10ビット、11ビット、12ビット、または13ビッ
トである索引記号の長さがCBNに加算され、CBNか
らの桁上げが、R1中のアドレスに加算され、R1+1
中の長さから減算される。たとえば、CBNが最初5で
あり、索引記号サイズが13ビットである場合、5と1
3の和は18であり、CBNが2ビットにセットされ、
2バイトがR1に加算され、R1+1から減算される。
制御は(1)に移る。
【0205】親におけるCCTが0でないときは(4)
に達し、(4)で、発信元オペランドが(1)の場合と
同様に別の文字を含むかどうか試験する。別の文字を含
まない場合、制御はステップ42に移り、ステップ42
で、親の索引がR1、R1+1に記憶され、(9)の場
合と同様にCBNが更新され、CC0がセットされ、実
行が終了する。
【0206】ステップ43で、発信元オペランド中の次
の文字を、親のCCと1番左のCCから順に比較するル
ープを開始する。一致が見られる場合、制御はステップ
44に移る。一致がない場合は、(5)で、親中のCC
Tが別のCCを示しているかどうか試験し、別のCCが
ある場合はループを繰り返す。
【0207】等しいCCがあるときはステップ44に達
するが、ステップ44で、子の索引を、親中の子ポイン
タ(CPTR)と、等しいCCの番号を加えた値に等し
く設定する。この場合、第1のCCの番号は0、次のC
Cの番号は1となり、以下同様である。
【0208】ステップ45で、親中にあり、等しいCC
に対応する子検査ビット(X)が1であるかどうか試験
する。0である場合、子が追加EC(AEC)を含まず
子を持たないことが分かるので、子の突合せが完了し、
可能な突合せはそれが最後であることが分かる。したが
って、ステップ46で、宛先オペランド中に子の索引が
記憶され、CBNを含むレジスタが更新され、制御が
(1)に移る。
【0209】ステップ45でXが1であることが分かっ
た場合は、ステップ47で、子にアクセスし、子中のA
ECカウント(ACTまたはD)が0であるかどうか試
験する。0の場合、子に一致が見られることが分かるの
で、ステップ48でその子を親と呼び、R2およびR2
+1が更新されて1文字進められ、制御が(4)に移
る。
【0210】ステップ47で、子中にAECがあること
が分かった場合は、ステップ49で、発信元オペランド
中の次の文字を、子中にあるだけのAECと比較する準
備をする。ステップ50(図31)でまず、発信元オペ
ランドに多数の文字が残っているかどうか試験する。そ
れほど多くの文字が残っていない場合、子の突合せを行
うことができないので、制御は(5)に移り、等しいC
Cがあるかどうか試験するループを続行する。CCは相
互に等しくなることができることに留意されたい。この
点は、同一の文字が繰り返される、多数の異なる長さの
文字列を圧縮する際に好都合である。
【0211】発信元オペランドに文字が十分残っている
場合、ステップ51で、それらの文字を子中のAECと
比較する。一致が見られる場合、ステップ52で、その
子が親になり、発信元レジスタが1にAECの数を加え
た分だけ進められ、制御が(3)に移る。一致がない場
合、制御が(5)に移り、等しいCCがあるかどうか試
験するループを続行する。
【0212】すべてのCCを試験しても子に一致が見つ
からないときはステップ53(図30)に達する。ステ
ップ53で、親のmore-childrenビット(M)が1であ
るかどうか試験する。0である場合、親に関する可能な
突合せはそれが最後であることが分かるので、制御は
(8)に移り、そこで、親の索引が宛先オペランドに記
憶され、(9)の場合と同様に宛先レジスタが更新さ
れ、制御はさらに(2)に移る。
【0213】ステップ53でMが1である場合、子リス
ト中に、親のCCに対応する最後の子の次に兄弟記述子
(SD)があることが分かる。ステップ54で、親中の
CPTRとCCTを加えることによってSDの索引を作
成する。
【0214】(7)で、先に親中のCCと比較したが子
に一致がなかった、発信元オペランド中の次の文字を、
今度はSD中の兄弟文字(SC)と1番左のSCから順
に比較していくループを開始する。一致が見られる場
合、制御はステップ55に移る。一致がない場合は、ス
テップ56で、SD中の兄弟文字カウント(SCT)が
別のSCを示しているかどうか試験し、別のSCがある
場合はループを繰り返す。
【0215】一致がなく別のSCがない場合、ステップ
57で、SD中のmore-siblingsビット(S)が1であ
るかどうか試験する。1である場合、ステップ58で、
現SDの索引に現SD中のSCT+1を加算することに
よって次のSDの索引を作成し、制御が(7)に移り、
次のSD中のSCを使用して突合せプロセスを続行す
る。現SD中のSが0の場合、制御は(8)に移る。
【0216】等しいSCがあるときはステップ55に達
するが、ステップ55で、子の索引を、SDの索引に、
等しいSCの番号を加えた値に等しく設定する。ここ
で、第1のCCの番号が1、次のCCの番号が2とな
り、以下同様である。
【0217】ステップ55より下の諸ステップは、ステ
ップ44より下の諸ステップと同様である。ただし、ス
テップ59およびステップ60の結果がN0の場合は
(5)の代わりに(8)に制御が移る。したがって、S
Cに一致が見られたが、次の発信元文字がAECに一致
しなかった場合、別のSCで一致を見つける試みは行わ
れない。この好ましい実施例では、SCを相互に等しく
するのはむだであると規定されていることに留意された
い。これらの等しいSCのうち2番目以降のものは発信
元文字と比較されないからである。そうしても、同一の
文字が繰り返される、多数の異なる長さの文字列の圧縮
効果は下がらないことが分かっており、またそうすると
親に関する可能な突合せとしてそれが最後のものである
とより迅速に判断できるので、圧縮速度が上がることが
分かっている。
【0218】別個の展開用辞書中の項目フォーマット−
図32:図32に示すように、好ましい実施例の展開用
辞書は、先行なし文字項目と先行あり文字項目という2
種類の項目を含む。
【0219】どちらの種類の展開辞書文字項目も、3ビ
ットの部分記号長(PSL)フィールドから始まる。こ
のフィールドは、0を含む場合、項目を先行なし項目と
して識別し、この項目中の完全記号長(CSL)フィー
ルドは、項目中のECの数のカウント(1ないし7)を
含む。これらのECは、先祖EC(PEC)と真EC
(TEC)からなることができる。PECとTECを区
別する必要はない。先行なし項目を指定する索引記号ま
たは先祖ポインタ(PPTR)を処理すると、その項目
中のすべてのECが、宛先オペランド中に次に利用可能
な位置から順に配置されていく。次に利用可能な位置と
は、前の索引記号の展開から得られる最後の文字を受け
取った位置のすぐ後の位置であり、現索引記号が展開す
べき最初の索引記号である場合は、宛先オペランドの始
めとなる。
【0220】PSLは、0でない場合、その項目を先行
あり項目として識別する。その場合、PSLは1ないし
5となり、項目中のECの数を示す。その項目は、CS
LではなくPPTRを含み、1バイトのオフセット(O
FST)フィールドを含む。その項目が索引記号または
PPTRで指定されるとき、項目中のECが、宛先オペ
ランド中に、そのアドレスが次に利用可能な位置のアド
レスとOFSTの和である位置から順に配置されてい
く。次に、項目中のPPTRを使用して、先行項目にア
クセスする。この先行項目は、別の先行あり項目または
先行なし項目とすることができる。
【0221】いくつかの先行あり項目へのアクセス、次
いで先行なし項目へのアクセスによって索引記号を展開
するとき、その辞書が論理的に正しいものとすると、各
エントリ中のECが、先行項目のために配置されたEC
に隣接しその左側にある宛先オペランド中に配置され
る。しかし、辞書が論理的に正しくないかどうかの検査
は行われない。辞書が正しくない場合、宛先オペランド
中にギャップができたり、文字が重なることがある。
【0222】索引記号が先行なし項目を指定するとき、
その項目中のCSLは、次の索引記号を展開するため
に、宛先オペランド中の次に利用可能な位置が前に進め
られる量である。索引記号が先行あり項目を指定すると
き、その第1の先行あり項目中のPSLとOFSTの和
が、次の索引記号のために次に利用可能な位置が前に進
められる量である。以後の先行あり項目中のPSLおよ
びOFSTと、最後の先行なし項目中のCSLは、この
前進量の計算には関与しない。
【0223】第1の(または任意の)先行あり項目は最
大5のPSLと最大255のOFSTを含むことができ
るので、索引記号に対応する文字記号の最大長は260
文字である。
【0224】展開プロセス−図33:図30および31
の場合と同様、図33では、索引記号を単に索引と呼
ぶ。ここでは、図30および31の記載の形式に通暁し
ているものとする。
【0225】(1)で、R2+1中の発信元オペランド
長とCBNを、発信元オペランドに少なくとももう1つ
の索引記号が含まれるかどうか試験する。含まれていな
い場合、CC0がセットされ、実行は終了する。
【0226】ステップ71で、次の索引記号が256よ
り小さな値を持つかどうか試験する。256未満の値を
持つ場合、この索引記号がアルファベット項目を指定し
ていることが分かり、制御はステップ72に移る。
【0227】ステップ72で、R1+1中の宛先オペラ
ンド長を、宛先オペランドに少なくとも1つの文字位置
が残っているかどうか試験する。残っていない場合、C
C1がセットされ、実行は終了する。残っている場合、
ステップ73で、索引記号の1番右の8ビットを、R1
で指定される位置に展開済みデータの文字として配置す
る。1がR1に加算され、R1+1から減算される。R
2、R2+1、およびCBNが、図30の制御点(9)
に関する説明と同様に更新され、制御は(1)に移る。
【0228】索引記号が255を上回るときステップ7
4に達し、ステップ74で、索引記号を使用して辞書項
目にアクセスする。その後、この辞書項目は現項目と呼
ばれる。
【0229】ステップ75で、現項目中の部分記号長
(PSL)が0であるかどうか試験する。0である場
合、その項目は先行なし項目であることが分かり、制御
はステップ76に移る。
【0230】ステップ76で、現項目から完全記号長
(CSL)を取り出し、次いで宛先オペランド中にCS
L文字位置が残っているかどうか試験する。残っていな
い場合、CC1がセットされ、実行は終了する。残って
いる場合、ステップ77で、その項目からCSL ES
を取り出し、それを宛先オペランド中にR1中のアドレ
スから順に配置していき、レジスタを更新し、制御が
(1)に移る。
【0231】PSLが非ゼロであり、先行あり項目を示
すとき、ステップ78に達する。この項目は第1の先行
あり項目なので、(記号長を表す)SYMLENという
変数が、項目中のPSLおよびOFSTの和で設定され
る。
【0232】ステップ79で、宛先オペランド中にSY
MLEN文字位置が残っているかどうか試験する。残っ
ていない場合、CC1がセットされ、実行は終了する。
残っている場合、ステップ80で、その項目からPSL
ECを取り出し、それを宛先オペランド中にR1中の
アドレスとOFSTを加えた位置から順に配置してい
く。ステップ80では次に、項目中の先祖ポインタ(P
PTR)を使用して、PPTRが指定する項目にアクセ
スし、その後その新規にアクセスされた項目が、この説
明では現項目になる。
【0233】ステップ81で、新規の現項目中のPSL
が0であるかどうか試験する。0である場合、ステップ
82で項目からCSL ECを取り出し、それをR1中
のアドレスから順に配置していく。ステップ82では次
に、レジスタを更新し、制御が(1)に移る。具体的に
は、ステップ82でR1にSYMLENが加算され、R
1+1からSYMLENが減算される。
【0234】ステップ83で、項目からPSL ECを
取り出し、それをR1中のアドレスとOFSTを加えた
位置から順に配置していく。SYMLENが変更されな
いことに留意されたい。ステップ83では次に、項目中
のPPTRを使用して、新規の現項目にアクセスした
後、制御がステップ81に移る。
【0235】ステップ80およびステップ83に関する
注で示したように、PPTRが256より小さな場合、
指定された項目を先行なし項目とみなすことができ、そ
の項目にアクセスすることによってECを取り出す代わ
りに、PPTRの1番右の8ビットがその項目中のEC
として使用される。
【0236】繰返し文字を圧縮するための辞書−図3
4:図34は、別個の辞書に関する圧縮プロセスおよび
展開プロセスをさらに理解するうえで役立ち、また項目
に複数のAECを含めることができ、親中のCCを同一
にすることができるという本願発明の規定が、同一の文
字が繰り返される、多数の異なる長さの文字列を圧縮す
る際にどのように有益かを示している。図34では例と
して文字Aが選択されている。8つのゼロ・ビットと空
白文字から構成される文字の方が重要であるが、印刷が
不可能であり、例示するのが容易でない。
【0237】図34に、圧縮用辞書内の一定の索引位置
と、展開用辞書内の同一の索引位置を表したものであ
る。文字Aは10進値が193なので、索引位置193
におけるAのアルファベット項目が示されている。他の
アルファベット項目は示されていない。Aの子孫は索引
位置256から示されている。索引位置256は、アル
ファベット項目の後の最初の位置である。
【0238】圧縮用辞書に示されている項目にはCCよ
り多くの子を持つものがないので、図34にはMビット
は示されていない。
【0239】以下は、圧縮用辞書の項目を理解するため
の説明である。
【0240】項目193は、5であるCCT、1111
0である5つの対応するXビット、0であるD、256
であるCPTR、およびそれぞれ値Aを持つ5つのCC
を有するものとして示されている。
【0241】項目256は、1であるCCT、1である
1つの対応するXビット、4であるACT、261であ
るCPTR、それぞれ値Aを持つ4つのAEC、および
値Aを持つ1つのCCを有するものとして示されてい
る。
【0242】項目257は、0であるCCT、3である
ACT、それぞれ値Aを持つ3つのAECを有し、Xビ
ット、CPTR、CCを有さないものとして示されてい
る。
【0243】項目193、256、257についての以
上の説明から、圧縮用辞書の残りの項目は自明である。
【0244】圧縮用辞書の後の2つの列は辞書の一部で
はない。これらの列には、辞書項目に関する情報だけが
含まれる。圧縮辞書項目の後の最初の列の数は、その項
目(および同一の番号の展開辞書項目)で表されるAの
数であり、第2の列の数は、圧縮辞書項目の突合せを行
うのに必要な記憶域参照の回数である。たとえば、入力
文字列がAAAAABである場合、突合せプロセスは次
の手順から構成される。(1)文字列中に第1のAがあ
るため項目193を参照する。(2)文字列中の第2の
Aを項目193中の第1のCC Aと突き合わせ、次い
で項目256を参照し、文字列中に残っているAAAB
が項目256中のAEC AAAAと一致しないことを
確認する。(3)文字列中の第2のAを項目193中の
第2のCC Aと突き合わせ、次いで項目257を参照
し、文字列中に残っているAAABのAAAが項目25
7のAEC AAAと一致することを確認する。(4)
項目257中のCCTが0なので、文字列中に現在残っ
ているBに一致が見られる可能性がなく、したがって項
目257に関する可能な突合せはそれが最後のものであ
ることを確認する。したがって、5つのAを表す圧縮辞
書項目に関するこの最後の可能な突合せを見つける際
に、記憶域参照が3回行われた。
【0245】以下は、展開辞書項目を理解するための説
明である。
【0246】展開すべき索引記号が270であるものと
する。圧縮辞書項目の後の最初の列は、圧縮用辞書また
は展開用辞書中の項目270が16個のAを表すことを
示している。この情報は、本説明を理解する助けとなる
ものにすぎず、展開プロセスでは必要とされない。
【0247】展開用辞書中の項目270は、4であるP
SL、262であるPPTR、それぞれ値Aを持つ4つ
のEC、12であるOFSTを含み、CSLを含まな
い。
【0248】項目262は、5であるPSL、261で
あるPPTR、それぞれ値Aを持つ5つのEC、7であ
るOFSTを含み、CSLを含まない。
【0249】項目261は、0であるPSL、7である
CSL、それぞれ値Aを持つ7つのECを含み、PPT
RとOFSTを含まない。
【0250】索引記号270の展開は次の手順から構成
される。(1)項目270を参照し、その項目からAA
AAを取り出し、それを宛先オペランド中の次に利用可
能な位置からオフセット12の所に置く。(2)項目2
62を参照し、その項目からAAAAAを取り出し、そ
れを宛先オペランド中の次に利用可能な位置からオフセ
ット7の所に置く。(3)項目261を参照し、その項
目からAAAAAAAを取り出し、それを宛先オペラン
ド中の次に利用可能な位置に置く。16個のAを圧縮す
るには8回の記憶域参照が必要であるが、拡張するには
3回だけでよいことに留意されたい。
【0251】圧縮用辞書の項目が、同一の文字が繰り返
される、多数の異なる長さの文字列が圧縮できる明白な
形の構造である場合、Aのアルファベット項目が第2の
Aを表す単一の子を持ち、その子が第3のAを表す単一
の子を持ち、その子が第4のAを表す単一の子を持ち、
以下同様となる。したがって、Aの文字列を突き合わせ
るのに必要な記憶域参照の回数は、文字列中のAの数に
等しくなる。
【0252】図34の圧縮辞書項目の新規パターンによ
り、上述の明白なパターンの場合よりも圧縮時の記憶域
参照回数を減らすことができる。実際に、長い文字列の
限界では、記憶域参照の回数を67%削減することがで
きる。たとえば、図34では、12個のAを突き合わせ
るのに4回、18個のAを突き合わせるのに6回、24
個のAを突き合わせるのに8回の参照が必要であり、し
たがって参照の回数はAの数の33%である。
【0253】図34のパターンについて以下に説明す
る。奇数レベルの親はAECを持たず5つの子を持ち、
それらの子供はそれぞれ4つ、3つ、2つ、1つ、0個
のAECを持つ。これらの子供は、親よりも5つないし
1つ多い文字を表す。偶数レベルの親は、奇数レベルの
親の第1の子であり、4つのAECおよび1つの子を持
つ。この子は、次の奇数レベルの親である。奇数レベル
の親の2番目ないし5番目の子は、子を持たない。図3
4では、項目193、261、267、273、279
が奇数レベルの親であり、項目256、262、26
8、274が偶数レベルの親である。
【0254】上述のパターン方式では、奇数レベルの親
が6つ以上の子を持たないようにすることも、奇数レベ
ルの親の2番目ないし5番目の子が子を持たないように
することもできない。これらの追加の子はいずれも、同
一の繰返し文字以外も含むZL文字列を形成するのに役
立つことがある。
【0255】短記号オプション−図35、36、37 図35は、圧縮すべきデータが非常にランダムであるた
めに、その2つ以上の隣接文字のうち辞書中にZL文字
列として出現する文字があまりないときに、使用するた
めに短記号オプションをどのように呼び出すことができ
るかを示す。この状態は、このデータの2つの隣接バイ
トが多数の異なる値を持つ可能性があるので、データが
2進データまたはパック10進データであるときに生じ
る可能性が高い。
【0256】図36は、短記号オプションを使用すると
き、索引記号の左にゼロ・ビットを置く手順を示してい
る。この結果を長記号と呼ぶ。索引記号は9ビットない
し13ビットの任意の長さとすることができ、その際、
長記号の長さはそれぞれ10ビットないし14ビットと
なる。しかし、一般に、索引記号長が9ビットまたは1
0ビットの場合は短記号オプションは使用すべきではな
い。なぜなら、そうすると、先行ゼロ・ビットによって
スペースが大幅に使用され、圧縮度が下がる可能性があ
るからである。
【0257】短記号オプションを使用するとき、1文字
だけから成る文字記号を表す索引記号から長記号が作成
されることはない。その代わり、単一の未圧縮文字を短
記号と呼び、これをいわゆる短記号文字列中の出力圧縮
済みデータ中に置く。短記号文字列は4ビットの短記号
ヘッダで始まり、次に1つないし8つの短記号が続く。
このヘッダは、長記号と区別するためゼロ・ビットで始
まり、その後文字列中の短記号の数を示す3ビットのカ
ウント・フィールドを含む。このカウント・フィールド
が0の場合は1つの短記号を示し、1の場合は2つの短
記号を示し、以下同様である。
【0258】文字列に1つの短記号だけが含まれると
き、短記号文字列は圧縮度に対してほとんど効果を与え
ず、ときには悪影響を与える場合もある。短記号文字列
は、複数の短記号を含むときに効果が高くなる。たとえ
ば、図37は、3つの短記号から成る短記号文字列が2
8ビットであることを示している。索引記号サイズが1
2ビットである場合、3つの索引記号は合計36ビット
の長さを持ち、それに対応する3つの長記号は合計39
ビットの長さを持つ。
【0259】以上で述べた実施例から抽出することので
きる発明には、以下のような態様がある。
【0260】(1)Ziv−Lempel(ZL)圧縮
アルゴリズムを実施して比較的大規模なデータベース内
の任意の1つまたは複数の比較的小規模な未圧縮レコー
ドを圧縮することによりレコードの圧縮を改善する方法
において、前記データベースに前記ZL圧縮アルゴリズ
ムを使用するコンピュータ・プログラムを適用すること
により、圧縮済みレコードを生成する前に、前記データ
ベース内のすべてのZL文字列を辞書文字列として含む
静的圧縮辞書を事前に生成しておくステップと、別のコ
ンピュータ・プログラムを実行して、未圧縮レコード中
の一連の文字を前記辞書中の前記辞書文字列と突き合わ
せることにより、前記未圧縮レコード中のレコード文字
列を検出するステップと、前記辞書中の辞書文字列と突
き合わされるレコード文字列の、前記辞書内での終了位
置を表す索引記号を出力して、前記未圧縮レコードに対
応する圧縮済みレコードを提供するステップとにより、
前記データベース内の未圧縮レコードが変更されている
か否かにかかわらず、前記辞書を変更せずに、アクセス
された前記未圧縮レコードから前記圧縮済みレコードを
生成するステップとを含むレコード圧縮方法。
【0261】(2)前記コンピュータ・システムの記憶
装置に前記辞書を記憶するステップと、各辞書項目ごと
に、前記コンピュータ・システムの記憶装置からアクセ
ス可能な記憶装置アクセス・ユニットのサイズに等しい
固定サイズを選択するステップとをさらに含む(1)記
載のレコード圧縮方法。
【0262】(3)前記データベース内の各文字列を、
1または複数の辞書項目によって表される辞書文字列と
して構造化するステップであって、各前記項目は、前記
辞書文字列中の1または複数の対応する拡張文字(E
C)が割り当てられ、前記割り当てられたECは、前記
辞書項目中に記録されることもされないこともあり、真
拡張文字(TEC)と呼ばれる前記ステップと、辞書文
字列中の前記辞書項目を、2つ以上の項目によって表さ
れる任意の文字列の第1項目から連鎖または索引付けす
るステップとを含む(1)記載のレコード圧縮方法。
【0263】(4)子ECに割り当てられた前記辞書項
目にアクセスせずに子文字(CC)からレコード文字列
を検出できるとき、前記圧縮済みレコードを生成するプ
ロセスにおける前記辞書の記憶装置へのアクセスを削減
するために、任意の辞書項目中で、同一の辞書文字列中
の辞書項目に割り当てられたECの次に、子文字(C
C)と呼ばれる、1つまたは複数のECの複製を作成す
るステップをさらに含む(3)記載のレコード圧縮方
法。
【0264】(5)レコード文字列中の第1の文字を表
す辞書項目から辞書に入り、未圧縮レコードから順次得
られる後続の各レコード文字またはレコード文字の文字
列を同一の辞書文字列中の後続の辞書項目と比較して前
記レコード文字列の終りを決定することにより、前記未
圧縮レコード中の各レコード文字列を検出するコンピュ
ータ・プログラムを実行し、前記辞書文字列中の最後の
前記項目を検出するか、あるいは前記辞書文字列中のE
Cと一致するレコード文字の後に続く次のレコード文字
と一致しない前記文字列中のECを検出することにより
前記レコード文字列の終りを位置指定するステップをさ
らに含む(3)記載のレコード圧縮方法。
【0265】(6)前記事前生成ステップで辞書が提供
されて以降に、前記データベース内の1つまたは複数の
レコードが変更され、あるいは前記データベースに追加
された、データベース内の未圧縮レコードから、前記静
的圧縮辞書を使って、前記辞書をデータベースの変更に
適合させずに、レコードを圧縮及び展開するように設計
された辞書を使用する場合よりも速い速度で、前記圧縮
済みレコードを生成するステップをさらに含む(1)記
載のレコード圧縮方法。
【0266】(7)前記未圧縮レコードが変更された場
合でも、前記静的圧縮辞書を使って、前記辞書をデータ
ベースの変更に適合させずに、レコードを圧縮及び展開
するように設計された辞書を使用する場合よりも速い速
度で、前記未圧縮レコードを圧縮するステップをさらに
含む(1)記載のレコード圧縮方法。
【0267】(8)前記適応辞書を使用する場合には実
行できない方式でレコードを圧縮するために、前記デー
タベースを任意の順序で(レコードを取り出す順序と同
じランダムな順序、またはそれと異なるランダムな順序
で、あるいは順次に)走査することによって、前記静的
圧縮辞書が事前に生成された場合でも、該辞書を使っ
て、前記データベースからランダムな順序で取り出され
た前記未圧縮レコードを圧縮するステップをさらに含む
(1)記載のレコード圧縮方法。
【0268】(9)前記静的圧縮辞書を、同一の辞書文
字列を含む静的展開辞書と関連付けるステップと、レコ
ードを圧縮及び展開するように設計された辞書を使用す
る場合よりも速い速度でレコードを展開するために、圧
縮済みレコード中の索引記号を使って展開辞書にアクセ
スして、前記索引記号で表される文字列を取り出すこと
により、前記圧縮辞書を使って圧縮された圧縮済みレコ
ードを展開するステップとをさらに含む(1)記載のレ
コード圧縮方法。
【0269】(10)前記静的圧縮辞書と関連付けられ
た送信装置と、静的展開辞書と関連付けられた受信装置
とを有する伝送ネットワークを提供するステップと、辞
書を伝送せずに、前記伝送ネットワークを介して前記送
信装置から受信装置に圧縮済みレコードを伝送するステ
ップとをさらに含む(9)記載のレコード圧縮方法。
【0270】(11)前記静的圧縮辞書を使って圧縮済
みレコードを生成した後、記憶媒体内の前記データベー
スに各圧縮済みレコードを記憶するステップと、前記記
憶媒体内のデータベースから圧縮済みレコードにアクセ
スするステップと、前記静的展開辞書を使って、レコー
ドを圧縮及び展開するように設計された辞書を使用する
場合よりも速い速度で、レコードを展開するステップと
をさらに含む(9)記載のレコード圧縮方法。
【0271】(12)それぞれ辞書文字列中に1または
複数の先祖ECを有する子ECを前記辞書文字列中に有
する次の辞書項目を位置指定するために、前記辞書文字
列の少なくとも第1の項目に子ポインタを記憶するステ
ップをさらに含む(3)記載のレコード圧縮方法。
【0272】(13)第1の辞書項目で表されるアルフ
ァベットECの値によって示される位置に各辞書文字列
の各第1辞書項目を位置指定し、前記各第1辞書項目を
前記アルファベット項目として指定し、他のすべての辞
書項目を非アルファベット項目として指定するが、各ア
ルファベット項目の位置が、割り当てられたアルファベ
ットECと関連付けられているために、どの前記アルフ
ァベット項目中にもECを必要としないステップをさら
に含む(12)記載のレコード圧縮方法。
【0273】(14)前記静的圧縮辞書を、ECおよび
制御フィールドを含む固定長項目を伴う構造にする構造
化ステップをさらに含む(13)記載のレコード圧縮方
法。
【0274】(15)同一の辞書文字列中の直接の先祖
項目中の子ポインタによって前記非アルファベット辞書
項目を位置指定するステップをさらに含む(14)記載
のレコード圧縮方法。
【0275】(16)前記構造化ステップが、前記非ア
ルファベット項目中の前記制御フィールドを、前記項目
に割り当てられた真ECの数を示すECカウント表示を
伴う構造にするステップをさらに含む(14)記載のレ
コード圧縮方法。
【0276】(17)前記構造化ステップが、前記アル
ファベット項目または非アルファベット項目の前記制御
フィールドを、親項目に割り当てられたECの後に続
く、辞書文字列中の文字である子EC(CC)をいつ前
記親項目が含むかを示す子標識を含む親辞書項目(親項
目)として構造化し、それによって、前記CCに割り当
てられた前記子辞書項目への追加のアクセスなしで、レ
コード文字列の終りを検出できるようにすることによ
り、前記CCが前記辞書内のレコード文字列の検出効率
を向上できるようにするステップをさらに含む(14)
記載のレコード圧縮方法。
【0277】(18)前記親項目中に含まれるCCの数
を示すカウント標識を前記親項目中に置き、各CCが、
関連する子項目に割り当てられた第1のECであるか、
または関連する子項目に割り当てられた1組の第1EC
であることを事前決定しあるいは項目中で指示するステ
ップをさらに含む(17)記載のレコード圧縮方法。
【0278】(19)1つまたは複数の子辞書項目(子
項目)を有する子リストを含む、前記親項目の前記子辞
書項目を提供するステップと、前記子リスト中の第1の
子項目に対して所定の位置に、前記子リスト中の各前記
子項目を位置指定するステップと、前記親項目中の各C
Cを前記子リスト中の当該の子項目と関連付けられるよ
うに割り当てるステップとをさらに含む(18)に記載
のレコード圧縮方法。
【0279】(20)辞書内の前記子リストを前記親項
目中の子ポインタ・フィールドによって位置指定するス
テップをさらに含む(19)記載のレコード圧縮方法。
【0280】(21)現在検出中のレコード文字列用の
索引記号を生成するために、子ポインタと、辞書文字列
中のECと突き合わされる次のレコード文字と一致する
親項目中の関連CCの位置とから、子辞書項目の位置を
算出するステップをさらに含む(20)記載のレコード
圧縮方法。
【0281】(22)親項目の制御フィールド中のmore
-children標識をオンにセットして、前記親項目内に含
まれる前記CCの数よりも多くの前記子項目が前記親項
目の前記子リスト中にあることを示すステップをさらに
含む(19)記載のレコード圧縮方法。
【0282】(23)同一のCCを使用して、ECに割
り当てられた子項目で一致が見つかった場合、ECはす
でに分かっているので、割り当てれらたECが親項目の
CCであるとき、前記圧縮辞書項目から、割り当てられ
たECを省略するステップをさらに含む(17)記載の
レコード圧縮方法。
【0283】(24)子検査標識を親項目中のCCと関
連付けて、CCが現レコード文字と一致するとき、他の
辞書項目にアクセスする必要なく、CCが辞書文字列を
終了する(したがって、レコード文字列の終りを検出す
る)かどうかを示すステップをさらに含む(17)記載
のレコード圧縮方法。
【0284】(25)子が指定CC以外に割り当てられ
たECを持たず、かつそれ自体の子を持たないことが事
前決定されているとき、それ以上突合せプロセスを続行
できないので、関連する子項目(子)へのアクセスが必
要でないことを示すように、CCと関連する子検査標識
を設定するステップ、または子が指定CC以外に割り当
てられたECを持ち、あるいはそれ自体の子を持つこと
が事前決定されているとき、子に真の一致が見られるか
否か、あるいは突合せプロセスが続行できないかどうか
分からないので、子へのアクセスが必要であることを示
すように、子検査標識を設定するステップをさらに含む
(24)記載のレコード圧縮方法。
【0285】(26)more-children標識を含む前記親
項目(親)の下にある前記子リスト中の前記子項目
(子)中に、前記親中の利用可能なスペースに親中のC
Cと区別するために兄弟文字(SC)と呼ばれるその当
該の各識別CCを含めることができない、同一の親の子
供と関連するCCを置き、各SCが前記同一の親の関連
する子に割り当てられた第1のECであるか、または前
記同一の親の関連する子に割り当てられた1組の第1E
Cであることが事前決定され、あるいは項目中で指示さ
れており、それによって、前記SCに割り当てられた前
記子辞書項目への追加のアクセスなしで、前記レコード
文字列の終りを検出できるようにすることにより、前記
SCが前記辞書内の前記レコード文字列の検出効率を向
上できるようにするステップと、前記子項目に含まれる
SCの数を示すカウント標識を前記子項目中に置くステ
ップと、SCを含む前記子項目中の各SCを、前記子リ
スト中の当該の子項目と関連付けられるように割り当て
るステップとをさらに含む(22)記載のレコード圧縮
方法。
【0286】(27)SCを含む子項目を、親中に含ま
れる最後のCCによって指定される子項目の位置に対し
て所定の方式で位置指定するステップをさらに含む(2
6)記載のレコード圧縮方法。
【0287】(28)現在検出中のレコード文字列用の
索引記号を生成するために、SCを含む第1の子項目の
位置と、辞書文字列中のECと突き合わされる次のレコ
ード文字と一致する第1の子項目中の関連するSCの位
置とから、第2の子項目の位置を算出するステップをさ
らに含む(27)記載のレコード圧縮方法。
【0288】(29)SCを含む子項目の制御フィール
ド中のmore-siblings標識をオンにセットして、子項目
が、子項目内に含まれるよりも多くのSCを有すること
を示すステップと、SCを含む第1の子項目中の最後の
SCによって指定される子項目の位置に対して所定の位
置に、上記の追加SCを含む別の子項目を置くステップ
とをさらに含む(27)記載のレコード圧縮方法。
【0289】(30)同一のSCを使用して、ECに割
り当てられた子項目に一致が見つかった場合、ECはす
でに分かっているので、同一の子リスト中の別の子項目
中の同一のSCによって位置指定された子項目から、割
り当てられたECを省略するステップをさらに含む(2
6)記載のレコード圧縮方法。
【0290】(31)子検査標識を子項目中のSCと関
連付けて、SCが現レコード文字と一致するとき、他の
辞書項目にアクセスする必要なしに、SCが辞書文字列
を終了する(したがって、レコード文字列の終りを検出
する)かどうかを示すステップをさらに含む(26)記
載のレコード圧縮方法。
【0291】(32)子が指定SC以外に割り当てられ
たECを持たず、かつそれ自体の子を持たないことが事
前決定されているとき、それ以上突合せプロセスが続行
できないので、関連する子項目(子)へのアクセスが必
要でないことを示すように、SCと関連する子検査標識
を設定するステップ、または子が指定SC以外の割り当
てられたECを持ち、あるいはそれ自体の子を持つこと
が事前決定されているとき、子に真の一致が見られるか
否か、あるいは突合せプロセスが続行できないかどうか
分からないので、子へのアクセスが必要であることを示
すように、子検査標識を設定するステップをさらに含む
(31)記載のレコード圧縮方法。
【0292】(33)more-children標識を含む親項目
(親)の下にある子リスト中に、前記アルファベット項
目でも非アルファベット項目でもなく、前記親中の利用
可能なスペースに、前記親中のCCと区別するために兄
弟文字(SC)と呼ばれるその当該の各識別CCを含め
ることができない、前記同一の親の子項目(子)と関連
するCCを含む、兄弟記述子(SD)と呼ばれる項目を
置き、各SCが前記同一の親の関連する子項目(子)に
割り当てられた前記第1のECであるか、または前記同
一の親の関連する子に割り当てられた1組の前記第1E
Cであることが事前決定され、あるいは前記SD中で指
示されており、それによって、前記SCに割り当てられ
た前記子辞書項目への追加アクセスなしで、レコード文
字列の終りを検出できるようにすることにより、前記S
Cが前記辞書内のレコード文字列の検出効率を向上でき
るようにするステップと、前記SDに含まれるSCの数
を示すカウント標識を前記SD中に置くステップと、前
記SD中の各SCを、前記子リスト中の当該の子項目と
関連付けられるように割り当てるステップとをさらに含
む(22)記載のレコード圧縮方法。
【0293】(34)前記SDを、親内に含まれる最後
のCCによって指定される子項目の位置に対して所定の
方式で位置指定するステップをさらに含む(33)記載
のレコード圧縮方法。
【0294】(35)現在検出中のレコード文字列用の
索引記号を生成するために、SCを含むSDの位置と、
辞書文字列中のECと突き合わされる次のレコード文字
と一致するSD中の関連するSCの位置とから、子項目
の位置を算出するステップをさらに含む(34)記載の
レコード圧縮方法。
【0295】(36)SDの制御フィールド中のmore-s
iblings標識をオンにセットして、SDが、SD内に含
まれるよりも多くのSCを有することを示すステップ
と、第1のSD中の最後のSCによって指定される子項
目の位置に対して所定の位置に、上記の追加SCを含む
別のSDを置くステップとをさらに含む(34)記載の
レコード圧縮方法。
【0296】(37)同一のSCを使用して、ECに割
り当てられた子項目に一致が見つかった場合、ECはす
でに分かっているので、同一の子リスト中のSD中の同
一のSCによって位置指定された子項目から、割り当て
られたECを省略するステップをさらに含む(33)記
載のレコード圧縮方法。
【0297】(38)子検査標識をSD中のSCと関連
付けて、SCが現レコード文字と一致するとき、他の辞
書項目にアクセスする必要なしに、SCが辞書文字列を
終了する(したがって、レコード文字列の終りを検出す
る)かどうかを示すステップをさらに含む(33)記載
のレコード圧縮方法。
【0298】(39)子が指定SC以外に割り当てられ
たECを持たず、かつそれ自体の子を持たないことが事
前決定されているとき、それ以上突合せプロセスが続行
できないので、関連する子項目(子)へのアクセスが必
要でないことを示すように、SCと関連する子検査標識
を設定するステップ、または子が指定SC以外の割り当
てられたECを持ち、あるいはそれ自体の子を持つこと
が事前決定されているとき、子に真の一致が見られるか
どうか、あるいは突合せプロセスが続行できないかどう
かが分からないので、子へのアクセスが必要であること
を示すように、子検査標識を設定するステップをさらに
含む(38)記載のレコード圧縮方法。
【0299】(40)アルファベット項目または非アル
ファベット項目が占めることのできる圧縮辞書内だけの
スペースにSDを置くステップと、展開辞書内のこのス
ペースが、アルファベット項目または非アルファベット
項目を含む、圧縮辞書内の位置に対応せず、展開走査時
に未圧縮レコードを再構築するために使用されるECを
含むことができないため、該スペースが普通なら無駄に
なるので、圧縮辞書内のSDの位置と同一の展開辞書内
の位置にもSDを置くステップとをさらに含む(33)
記載のレコード圧縮方法。
【0300】(41)辞書項目における終了の指示が、
辞書文字列の終りであることを示すとき、辞書項目内の
すべてのECがレコード文字と一致するとき、レコード
文字列を検出するステップをさらに含む(1)記載のレ
コード圧縮方法。
【0301】(42)比較的大規模なデータベースの対
応する未圧縮レコードを再構築するために、(5)記載
の方法によって生成される圧縮済みレコードを展開する
ための圧縮済みレコード展開方法であって、ZLアルゴ
リズムを使用するコンピュータ・プログラムを、前記圧
縮辞書の構築に使用するデータベースに適用することに
よって、前記データベースの未圧縮レコードを再構築す
る前に、静的展開辞書を事前生成しておき、前記圧縮辞
書内の辞書文字列に対応する辞書文字列を表す辞書項目
を前記展開辞書内で構築するステップと、圧縮済みレコ
ード中にありかつ未圧縮レコード中のレコード文字列を
表す各索引記号と関連する1つまたは複数の展開辞書項
目を見つけることによって、前記索引記号を検出する別
のコンピュータ・プログラムを実行するステップと、見
つかった展開辞書項目から各索引記号で表される各レコ
ード文字列用の文字にアクセスするステップと、圧縮済
みレコードから入力される各索引記号用の前記アクセス
された文字を出力して、対応する未圧縮レコードを再構
築するステップとによって、前記圧縮辞書および前記展
開辞書が事前生成された後に変更された未圧縮レコード
からデータベース内の圧縮済みレコードが生成されたか
どうかにかかわらず、前記展開辞書を変更せずに、入力
された圧縮済みレコードから未圧縮レコードを再生成す
るステップとを含む圧縮済みレコード展開方法。
【0302】(43)コンピュータ・システムの記憶域
に辞書を記憶するステップと、コンピュータ・システム
の記憶域からアクセス可能な記憶域アクセス・ユニット
のサイズと等しい、各辞書項目の固定サイズを選択する
ステップとをさらに含む(42)記載の圧縮済みレコー
ド展開方法。
【0303】(44)展開中の圧縮済みレコードが、静
的展開辞書が事前生成された後に変更された対応する未
圧縮レコードを表す場合でも、同一の静的展開辞書を使
用してデータベースの圧縮済みレコードを展開し、した
がって、静的展開辞書を対応する未圧縮レコードに適合
させる必要のないステップをさらに含む(42)記載の
圧縮済みレコード展開方法。
【0304】(45)適応辞書を使用しては実行できな
い方式でレコードを圧縮し展開するために、データベー
スを任意の順序で(データベースから取り出した順序と
同じランダムな順序、またはそれと異なるランダムな順
序で、あるいは順次に)走査することにより、静的展開
辞書が事前生成された場合でも、静的展開辞書を使用し
て、データベースからランダムな順序で取り出された圧
縮済みレコードを展開するステップをさらに含む(4
2)記載の圧縮済みレコード展開方法。
【0305】(46)適応辞書を使用しては実行できな
い方式でレコードを圧縮しかつ展開するためにデータベ
ースから任意の順序で(データベースから取り出した順
序と同じランダムな順序、またはそれと異なるランダム
な順序で、あるいは順次に)取り出した未圧縮レコード
を圧縮することによって圧縮済みレコードが生成された
場合でも、静的展開辞書を使用して、データベースから
ランダムな順序で取り出した圧縮済みレコードを展開す
るステップをさらに含む(42)記載の圧縮済みレコー
ド展開方法。
【0306】(47)データベース用に受信された圧縮
済みレコードを展開するために、ネットワークの受信端
で展開辞書を記憶するステップをさらに含む(42)記
載の圧縮済みレコード展開方法。
【0307】(48)ネットワークの受信端で静的展開
辞書を使用して圧縮済みレコードを展開し、各未圧縮済
みレコードの伝送と共に辞書を伝送することなしに、対
応する未圧縮レコードを生成するステップをさらに含む
(42)記載の圧縮済みレコード展開方法。
【0308】(49)索引記号で位置指定された前記項
目内に含まれるよりも多くの先祖文字が関連する前記辞
書文字列中に存在するとき、索引記号で位置指定された
前記項目に連鎖された、前記展開辞書内の1つまたは複
数の先祖辞書項目を提供するステップと、前記索引記号
で位置指定された前記項目中に、先祖項目によって表さ
れる1つまたは複数の先祖ECを複製して、関連する先
祖項目にアクセスせずに、前記文字列中の先祖ECを出
力できるようにするステップとをさらに含む(42)記
載の圧縮済みレコード展開方法。
【0309】(50)索引記号で位置指定された項目が
文字列中のすべての先祖ECを含むことができないとき
に、文字列中の先祖項目の1つまたは複数の先祖ECを
先祖項目中で複製して、他の先祖項目にアクセスせず
に、さらに先祖ECを出力できるようにするステップを
さらに含む(49)記載の圧縮済みレコード展開方法。
【0310】(51)前記辞書文字列中に複数の先祖文
字が存在するとき、展開辞書内の一連の辞書項目のう
ち、第1先祖項目を除く各先祖辞書項目中に先祖ポイン
タ・フィールドを提供するステップをさらに含む(5
0)記載の圧縮済みレコード展開方法。
【0311】(52)前記展開辞書項目中の記号長フィ
ールド(SL)を、その項目に割り当てられたECから
その文字列を開始するECまでの、辞書文字列中のEC
の総数を示す構造にするステップと、現レコード文字列
用に出力される文字を受け取るためのスペースが出力バ
ッファ内に存在しているかどうかをSLから判定するス
テップとをさらに含む(49)記載の圧縮済みレコード
展開方法。
【0312】(53)対応する未圧縮レコード中で必要
なECシーケンスと逆の順序である連鎖順序で、アクセ
スされる連鎖展開辞書項目から、索引記号で位置指定さ
れたレコード文字列用のECを出力するステップと、未
圧縮レコード中で必要な順序にECが並ぶ順序で、アク
セスされる展開辞書項目の連鎖から出力されるECを、
出力バッファ内に記録するステップと、対応する未圧縮
レコード中で必要なシーケンスで、各項目内のECを選
択するステップとをさらに含む(52)記載の圧縮済み
レコード展開方法。
【0313】(54)展開プロセスのために文字列中の
すべてのECを取り出すために先祖項目への追加アクセ
スが必要でないことを示すために、関連するレコード文
字列のすべてのEC(項目に割り当てられたECと先祖
EC)が項目中に含まれるかどうかを項目中で示すステ
ップをさらに含む(52)記載の圧縮済みレコード展開
方法。
【0314】(55)展開辞書項目中のオフセット・フ
ィールドを、先祖項目からさらにECを取り出すとき、
出力バッファ内の現カーソル位置から順に未圧縮レコー
ドが作成されるように、項目に割り当てられたECと項
目中の先祖ECが配置される、出力バッファ内の現カー
ソル位置に対する位置を示す構造にするステップをさら
に含む(49)記載の圧縮済みレコード展開方法。
【0315】(56)対応する未圧縮レコード中で必要
なECシーケンスと逆の順序である連鎖順序で、アクセ
スされる連鎖展開辞書項目から、索引記号で位置指定さ
れたレコード文字列のECを出力するステップと、未圧
縮レコード中で必要な順序にECが並ぶ順序で、アクセ
スされる展開辞書項目の連鎖から出力されるECを、出
力バッファ内に記録するステップと、対応する未圧縮レ
コード中で必要なシーケンスで、各項目内のECを選択
するステップとをさらに含む(55)記載の圧縮済みレ
コード展開方法。
【0316】(57)展開プロセスのために文字列中の
すべてのECを取り出すために先祖項目への追加アクセ
スが必要でないことを示すために、関連するレコード文
字列のすべてのEC(項目に割り当てられたECと先祖
EC)が項目中に含まれるかどうかを項目中で示すステ
ップをさらに含む(55)記載の圧縮済みレコード展開
方法。
【0317】(58)関連するレコード文字列のすべて
のECが項目中に含まれているわけでないことが項目中
ですでに示されているときに、項目から取り出して出力
バッファ内に置くべきECの数(項目に割り当てられた
ECと先祖EC)を項目中で示すステップをさらに含む
(57)記載の圧縮済みレコード展開方法。
【0318】(59)記号が真に辞書項目を指定する索
引記号であるかどうか、あるいは、記号が、ZL圧縮の
使用時に、辞書内で、良好な圧縮を提供するのに十分な
長さのZL文字列によって表されなかったために、未圧
縮形式で現れる後続の該未圧縮文字の数のカウントを含
むかどうかを示す標識で、索引記号を展開するステップ
と、上記カウントによって示される未圧縮文字の数を圧
縮済みレコードから未圧縮レコードに移すことによっ
て、展開プロセス中に、この標識で索引記号を処理する
ステップとをさらに含む(1)記載のレコード圧縮方
法。
【0319】(60)ZL辞書文字列中の辞書項目を、
1つの割り当てられたECおよび複数(N個)の子を持
つ第1の種類のレベルの項目と、1つまたは複数の割り
当てられたECを持つが、必ずしも2つ以上の子を持た
ない第2の種類のレベルの項目との、2種類の交互のレ
ベルを持つ構造にするステップと、ここで定義する構造
にしなかった場合よりもアクセスする必要のある辞書項
目の数を減らすことによって、同一の文字が繰り返され
る、多数の異なる長さの文字列を圧縮する目的で、第2
の種類のレベルの項目を、さらに、そのレベルにある第
1の子がN個の割り当てられたECを持ち、次の子がN
−1個の割り当てられたECを持ち、その次の子がN−
2個の割り当てられたECを持ち、以下同様にして最後
の子が1つの割り当てられたECを持つ構造にするステ
ップとをさらに含む(3)記載のレコード圧縮方法。
【0320】(61)Ziv−Lempel(ZL)ア
ルゴリズムを使用して、比較的大規模なデータベース内
で未圧縮レコードを圧縮する方法と、圧縮済みレコード
を未圧縮レコードに展開する方法を組み合わせた方法で
あって、データベースに前記ZLアルゴリズムを使用す
るコンピュータ・プログラムを適用して、前記データベ
ース内のすべてのZL文字列を辞書文字列として含む辞
書を前記データベースから生成することにより、前記デ
ータベースのレコードに対して圧縮操作と展開操作の両
方を実行するための辞書項目を含む静的辞書を事前に生
成するステップと、別のコンピュータ・プログラムを実
行して、未圧縮レコード中の一連の文字を前記辞書中の
前記辞書文字列と突き合わせることにより、前記未圧縮
レコード中のレコード文字列を検出するステップと、前
記辞書中の辞書文字列と突き合わされるレコード文字列
の、前記辞書内での終了位置を表す索引記号を出力し
て、前記未圧縮レコードに対応する圧縮済みレコードを
提供するステップとにより、前記データベース内の未圧
縮レコードが変更されているか否かにかかわらず、前記
辞書を変更せずに、アクセスされた未圧縮レコードから
圧縮済みレコードを生成するステップと圧縮済みレコー
ド中にありかつ未圧縮レコード中のレコード文字列を表
す各索引記号と関連する辞書項目を見つけることによっ
て、索引記号を検出する別のコンピュータ・プログラム
を実行するステップと、見つかった辞書項目から各索引
記号で表される各辞書文字列用の文字に前記アクセスす
るステップと、圧縮済みレコードから入力される各索引
記号用のアクセスされた文字を出力して、対応する未圧
縮レコードを再構築するステップとによって、前記辞書
が事前生成された後に変更された未圧縮レコードから前
記データベース内の圧縮済みレコードが生成されたかど
うかにかかわらず、前記辞書を変更せずに、入力された
圧縮済みレコードから未圧縮レコードを再生成するステ
ップとを含む前記方法。
【0321】(62)コンピュータ・システムの記憶域
に辞書を記憶するステップと、各辞書項目ごとに、コン
ピュータ・システムの記憶域からアクセス可能な記憶域
アクセス・ユニットのサイズに等しい固定サイズを選択
するステップとをさらに含む(61)記載のプロセスを
使用する方法。
【0322】(63)前記データベース内の各文字列
を、各項目に前記辞書文字列中の1つまたは複数の当該
の拡張文字(EC)が割り当てられ、かつ前記割り当て
られたECが前記辞書文字列の真拡張文字(TEC)と
呼ばれる、1つまたは複数の辞書項目によって表される
辞書文字列として構造化するステップと、前記辞書中の
各辞書文字列中の前記辞書項目を順方向および逆方向に
連鎖するステップとをさらに含む(61)記載のプロセ
スを使用する方法。
【0323】(64)子ECに割り当てられた辞書項目
にアクセスせずに子文字(CC)からレコード文字列を
検出できるとき、圧縮済みレコードを生成するためのプ
ロセスにおける辞書の記憶域アクセスを削減するため、
かつ辞書文字列から未圧縮レコードを再生成するプロセ
スにおける辞書の記憶域アクセスを削減するために、任
意の辞書項目中で、同一の辞書文字列中の辞書項目に割
り当てられたECの後または前に、子文字(CC)と呼
ばれる、1つまたは複数のECの複製を作成するステッ
プをさらに含む、(63)記載のプロセスを使用する方
法。
【0324】(65)レコード文字列中の第1の文字を
表す辞書項目に入り、未圧縮レコードから順次得られる
後続の各レコード文字またはレコード文字の文字列を同
一の辞書文字列中の後続の辞書項目と比較してレコード
文字列の終りを決定し、辞書文字列中の最後の項目を検
出するか、あるいは辞書文字列中のECと一致するレコ
ード文字の後に続く次のレコード文字と一致しない辞書
文字列中のECを検出することによって、レコード文字
列の終りを見つけることにより、未圧縮レコードにおけ
る各レコード文字列を検出するコンピュータ・プログラ
ムを実行するステップをさらに含む(63)記載のプロ
セスを使用して圧縮済みレコードを生成する方法。
【0325】(66)事前生成ステップで辞書が提供さ
れて以降に、データベース内の1つまたは複数のレコー
ドが変更され、あるいはデータベースに追加された、デ
ータベース内の未圧縮レコードから、静的辞書を使っ
て、レコード圧縮速度を高めるために辞書をデータベー
スの変更に適合させずに、圧縮済みレコードを生成する
ステップをさらに含む(61)記載のプロセスを使用す
る方法。
【0326】(67)未圧縮レコードが変更された場合
でも、静的辞書を使って、辞書をデータベースの変更に
適合させずに、未圧縮レコードを圧縮するステップをさ
らに含む(61)記載のプロセスを使用する方法。
【0327】(68)適応辞書を使用する場合には実行
できない方式でレコードを圧縮するために、データベー
スを任意の順序で(レコードを取り出した順序と同じラ
ンダムな順序、またはそれと異なるランダムな順序で、
あるいは順次に)走査することによって、静的辞書が事
前に生成された場合でも、該辞書を使って、データベー
スからランダムな順序で取り出された未圧縮レコードを
圧縮するステップをさらに含む(61)記載のレコード
を圧縮する方法。
【0328】(69)圧縮済みレコード中の索引記号を
使って辞書にアクセスして、未圧縮レコードを表す索引
記号で表される文字列を取り出すことにより、辞書を使
って圧縮された圧縮済みレコードを展開するステップと
をさらに含む(61)記載のプロセスを使用する方法。
【0329】(70)静的辞書を使って圧縮済みレコー
ドを生成した後、記憶媒体内のデータベースに各圧縮済
みレコードを記憶するステップと、記憶媒体内のデータ
ベースから圧縮済みレコードにアクセスするステップ
と、静的辞書を使って、適応型の辞書を使用する場合よ
りも速い速度で、レコードを展開するステップとをさら
に含む(69)記載のプロセスを使用する方法。
【0330】(71)それぞれ前記辞書文字列中に1つ
または複数の先祖ECを有する子ECを前記辞書文字列
中に有する次の辞書項目を位置指定するために、辞書文
字列の少なくとも第1の項目に子ポインタを記憶するス
テップをさらに含む(63)記載のプロセスを使用する
方法。
【0331】(72)第1の辞書項目で表されるアルフ
ァベットECの値によって示される位置に各辞書文字列
の各第1辞書項目を位置指定し、各第1辞書項目をアル
ファベット項目として指定し、他のすべての辞書項目を
非アルファベット項目として指定するが、各アルファベ
ット項目の位置が、割り当てられたアルファベットEC
と関連付けられているためにどのアルファベット項目中
にもECを必要としないステップをさらに含む(71)
記載のプロセスを使用する方法。
【0332】(73)前記静的辞書を、ECおよび制御
フィールドを含む固定長項目を含む構造にする構造化ス
テップをさらに含む(72)記載のプロセスを使用する
方法。
【0333】(74)同一の辞書文字列中の直接の先祖
項目中の子ポインタによって非アルファベット辞書項目
を位置指定するステップをさらに含む(73)記載のプ
ロセスを使用する方法。
【0334】(75)前記構造化ステップが、非アルフ
ァベット項目中の制御フィールドを、項目に割り当てら
れた真ECの数を示すECカウント指示を含む構造にす
るステップをさらに含む(73)記載のプロセスを使用
する方法。
【0335】(76)前記構造化ステップが、非アルフ
ァベット項目中で、制御フィールド中のカウント指示
を、同一の辞書文字列用の先祖ESおよび割り当てられ
たECを該項目がいつ含むかを示す構造にするステップ
と、制御フィールドによっても割り当てられたECによ
っても使用されないスペースに項目の先祖ECを記録す
るステップとをさらに含む(73)記載のプロセスを使
用する方法。
【0336】(77)前記構造化ステップが、アルファ
ベット項目または非アルファベット項目の前記制御フィ
ールドを、前記親項目に割り当てられたECの後に続
く、辞書文字列中の文字である子EC(CCと呼ぶ)を
いつ前記親項目が含むかを示す子標識を含む親辞書項目
(親項目)として構造化し、それによって、CCに割り
当てられた前記子辞書項目への追加のアクセスなしで、
レコード文字列の終りを検出できるようにすることによ
り、CCが前記辞書内のレコード文字列の検出効率を向
上できるようにするステップをさらに含む(73)記載
のプロセスを使用する方法。
【0337】(78)親項目中に含まれるCCの数を示
すカウント標識を親項目中に置き、各CCが、関連する
子項目に割り当てられた第1のECであるか、または関
連する子項目に割り当てられた1組の第1ECであるこ
とを事前決定し、あるいは項目中で指示するステップを
さらに含む(77)記載のプロセスを使用する方法。
【0338】(79)1つまたは複数の子辞書項目(子
項目)を有する子リストを含む、親項目の子辞書項目を
提供するステップと、前記子リスト中の前記第1の子項
目に対して所定の位置に、前記子リスト中の各子項目を
位置指定するステップと、前記親項目中の各CCを前記
子リスト中の当該の子項目に割り当てるステップとをさ
らに含む(77)記載のプロセスを使用する方法。
【0339】(80)前記辞書内の前記子リストを前記
親項目中の子ポインタ・フィールドによって位置指定す
るステップをさらに含む(79)記載のプロセスを使用
する方法。
【0340】(81)現在検出中のレコード文字列用の
索引記号を生成するために、子ポインタと、前記辞書文
字列中のECと突き合わされる次のレコード文字と一致
する前記親項目中の関連CCの前記位置とから、子辞書
項目の位置を算出するステップをさらに含む(80)記
載のプロセスを使用する方法。
【0341】(82)親項目の制御フィールド中のmore
-children標識をオンにセットして、前記親項目内に含
まれるCCの数よりも多くの子項目が前記親項目の子リ
スト中にあることを示すステップをさらに含む(79)
記載のプロセスを使用する方法。
【0342】(83)子検査標識を親項目中のCCと関
連付けて、CCが現レコード文字と一致するときに、他
の辞書項目にアクセスする必要なく、CCが辞書文字列
を終了する(したがって、レコード文字列の終りを検出
する)かどうかを示すステップをさらに含む(77)記
載のレコード圧縮方法。
【0343】(84)子が指定CC以外に割り当てられ
たECを持たず、かつそれ自体の子を持たないことが事
前決定されているとき、それ以上突合せプロセスを続行
できないので、関連する子項目(子)へのアクセスが必
要でないことを示すように、CCと関連する子検査標識
を設定するステップ、または子が指定CC以外に割り当
てられたECを持ち、あるいはそれ自体の子を持つこと
が事前決定されているとき、子に真の一致が見られるか
否か、あるいは突合せプロセスが続行できないかどうか
分からないので、子へのアクセスが必要であることを示
すように、子検査標識を設定するステップをさらに含む
(83)記載のレコード圧縮方法。
【0344】(85)more-children標識を含む親項目
(親)の下にある子リスト中の子項目(子)中に、親中
の利用可能なスペースに、親中のCCと区別するために
兄弟文字(SC)と呼ばれるその当該の各識別CCを含
めることができない、同一の親の子供と関連するCCを
置き、各SCが同一の親の関連する子に割り当てられた
第1のECであるか、または同一の親の関連する子に割
り当てられた1組の第1ECであることが事前決定さ
れ、あるいは項目中で指示されており、それによって、
SCに割り当てられた子辞書項目への追加のアクセスな
しで、レコード文字列の終りを検出できるようにするこ
とにより、SCが辞書内のレコード文字列の検出効率を
向上できるようにするステップと、子項目に含まれるS
Cの数を示すカウント標識を子項目中に置くステップ
と、SCを含む子項目中の各SCを、子リスト中の当該
の子項目と関連付けられるように割り当てるステップと
をさらに含む(82)記載のレコード圧縮方法。
【0345】(86)SCを含む子項目を、親中に含ま
れる最後のCCによって指定される子項目の位置に対し
て所定の方式で位置指定するステップをさらに含む(8
5)記載のレコード圧縮方法。
【0346】(87)現在検出中のレコード文字列用の
索引記号を生成するために、SCを含む第1の子項目の
位置と、辞書文字列中のECと突き合わされる次のレコ
ード文字と一致する第1の子項目中の関連するSCの位
置とから、第2の子項目の位置を算出するステップをさ
らに含む(86)記載のレコード圧縮方法。
【0347】(88)SCを含む子項目の制御フィール
ド中のmore-siblings標識をオンにセットして、子項目
が、子項目内に含まれるよりも多くのSCを有すること
を示すステップと、SCを含む第1の子項目中の最後の
SCによって指定される子項目の位置に対して所定の位
置に、追加SCを含む別の子項目を置くステップとをさ
らに含む(86)記載のレコード圧縮方法。
【0348】(89)子検査標識を子項目中のSCと関
連付けて、SCが現レコード文字と一致するとき、他の
辞書項目にアクセスする必要なしに、SCが辞書文字列
を終了する(したがって、レコード文字列の終りを検出
する)かどうかを示すステップをさらに含む(85)記
載のレコード圧縮方法。
【0349】(90)子が指定SC以外に割り当てられ
たECを持たず、かつそれ自体の子を持たないことが事
前決定されているとき、それ以上突合せプロセスが続行
できないので、関連する子項目(子)へのアクセスが必
要でないことを示すように、SCと関連する子検査標識
を設定するステップ、または子が指定SC以外の割り当
てられたECを持ち、あるいはそれ自体の子を持つこと
が事前決定されているとき、子に真の一致が見られるか
否か、あるいは突合せプロセスが続行できないかどうか
分からないので、子へのアクセスが必要であることを示
すように、子検査標識を設定するステップをさらに含む
(89)記載のレコード圧縮方法。
【0350】(91)more-children標識を含む親項目
(親)の下にある子リスト中に、アルファベット項目で
も非アルファベット項目でもなく、前記親中の利用可能
な前記スペースに、前記親中のCCと区別するために兄
弟文字(SC)と呼ばれるその当該の各識別CCを含め
ることができない、前記同一の親の子項目(子)と関連
する前記CCを含む、兄弟記述子(SD)と呼ばれる項
目を置き、各SCが前記同一の親の関連する子項目
(子)に割り当てられた前記第1のECであるか、また
は前記同一の親の関連する子に割り当てられた1組の第
1ECであることが事前決定され、あるいはSD中で指
示されており、それによって、SCに割り当てられた前
記子辞書項目への追加アクセスなしで、レコード文字列
の終りを検出できるようにすることにより、SCが前記
辞書内のレコード文字列の検出効率を向上できるように
するステップと、前記SDに含まれるSCの数を示すカ
ウント標識を前記SD中に置くステップと、前記SD中
の各SCを、前記子リスト中の当該の子項目と関連付け
られるように割り当てるステップとをさらに含む(8
2)記載のレコード圧縮方法。
【0351】(92)SDを、親中に含まれる最後のC
Cによって指定される子項目の位置に対して所定の方式
で位置指定するステップをさらに含む(91)記載のレ
コード圧縮方法。
【0352】(93)現在検出中のレコード文字列用の
索引記号を生成するために、SCを含むSDの位置と、
辞書文字列中のECと突き合わされる次のレコード文字
と一致するSD中の関連するSCの位置とから、子項目
の位置を算出するステップをさらに含む(92)記載の
レコード圧縮方法。
【0353】(94)SDの制御フィールド中のmore-s
iblings標識をオンにセットして、SDが、SD内に含
まれるよりも多くのSCを有することを示すステップ
と、第1のSD中の最後のSCによって指定される子項
目の位置に対して所定の位置に、上記の追加SCを含む
別のSDを置くステップとをさらに含む(92)記載の
レコード圧縮方法。
【0354】(95)子検査標識をSD中のSCと関連
付けて、SCが現レコード文字と一致するとき、他の辞
書項目にアクセスする必要なしに、SCが辞書文字列を
終了する(したがって、レコード文字列の終りを検出す
る)かどうかを示すステップをさらに含む(91)記載
のレコード圧縮方法。
【0355】(96)子が指定SC以外に割り当てられ
たECを持たず、かつそれ自体の子を持たないことが事
前決定されているとき、それ以上突合せプロセスが続行
できないので、関連する子項目(子)へのアクセスが必
要でないことを示すように、SCと関連する子検査標識
を設定するステップ、または子が指定SC以外の割り当
てられたECを持ち、あるいはそれ自体の子を持つこと
が事前決定されているとき、子に真の一致が見られるか
どうか、あるいは突合せプロセスが続行できないかどう
かが分からないので、子へのアクセスが必要であること
を示すように、子検査標識を設定するステップをさらに
含む(95)記載のレコード圧縮方法。
【0356】(97)辞書項目における終了の指示が、
辞書文字列の終りであることを示すとき、辞書項目内の
すべてのECがレコード文字と一致するとき、レコード
文字列を検出するステップをさらに含む(61)記載の
レコード圧縮方法。
【0357】(98)展開中の圧縮済みレコードが、静
的展開辞書を事前生成した後に変更された対応する未圧
縮レコードを表す場合でも、静的辞書を使用してデータ
ベースの圧縮済みレコードを展開することによって、静
的辞書を対応する未圧縮レコードに適合させなくて済む
ようにするステップをさらに含む(61)記載のプロセ
スを使用する方法。
【0358】(99)適応辞書を使用しては実行できな
い方式でレコードを圧縮し展開するために、データベー
スを任意の順序で(データベースから取り出した順序と
同じランダムな順序、またはそれと異なるランダムな順
序で、あるいは順次に)走査することにより、静的辞書
が事前生成された場合でも、静的辞書を使用して、デー
タベースからランダムな順序で取り出された圧縮済みレ
コードを展開するステップをさらに含む(61)記載の
圧縮済みレコード展開方法。
【0359】(100)適応辞書を使用しては実行でき
ない方式でレコードを圧縮し展開するために、データベ
ースから任意の順序で(データベースから取り出した順
序と同じランダムな順序、またはそれと異なるランダム
な順序で、あるいは順次に)取り出した未圧縮レコード
を圧縮することによって圧縮済みレコードが生成された
場合でも、静的辞書を使用して、データベースからラン
ダムな順序で取り出した圧縮済みレコードを展開するス
テップをさらに含む(61)記載の圧縮済みレコード展
開方法。
【0360】(101)データベースのレコードを圧縮
および展開するために、ネットワークの受信端と送信端
で辞書を記憶するステップをさらに含む(61)記載の
プロセスを使用する方法。
【0361】(102)ネットワークの受信端で静的展
開辞書を使用して圧縮済みレコードを展開し、各未圧縮
レコードの伝送と供に辞書を伝送することなしに、対応
する未圧縮レコードを生成するステップをさらに含む
(61)記載のプロセスを使用する方法。
【0362】(103)索引記号で位置指定された項目
内に含まれるよりも多くの先祖EC(位置指定された項
目の先祖に割り当てられたEC)が、関連する辞書文字
列中に存在するとき、索引記号で位置指定された項目に
連鎖された、辞書内の1つまたは複数の先祖辞書項目を
提供するステップと、索引記号で位置指定された項目中
に、先祖項目によって表される1つまたは複数の先祖E
Cを複製して、関連する先祖項目にアクセスせずに、文
字列中の先祖ECを出力できるようにするステップをさ
らに含む(61)記載のプロセスを使用する方法。
【0363】(104)索引記号で位置指定された項目
が文字列中のすべての先祖ECを含むことができないと
きに、文字列中の先祖項目の1つまたは複数の先祖EC
を先祖項目中で複製して、他の先祖項目にアクセスせず
に、さらに先祖ECを出力できるようにするステップを
さらに含む(103)記載のプロセスを使用する方法。
【0364】(105)辞書文字列中に複数の先祖文字
が存在するとき、展開辞書内の一連の辞書項目のうち、
第1先祖項目を除く各先祖辞書項目中に先祖ポインタ・
フィールドを提供するステップをさらに含む(104)
記載の圧縮済みレコード展開方法。
【0365】(106)辞書項目中の記号長フィールド
(SL)を、その項目に割り当てられたECからその文
字列を開始するECまでの、辞書文字列中のECの総数
を示す構造にするステップと、現レコード文字列用に出
力される文字を受け取るためのスペースが出力バッファ
内に存在しているかどうかをSLから判定するステップ
とをさらに含む(61)記載のプロセスを使用する方
法。
【0366】(107)対応する未圧縮レコード中で必
要なECシーケンスと逆の順序である連鎖順序で、アク
セスされる連鎖辞書項目から、索引記号で位置指定され
たレコード文字列用のECを出力するステップと、未圧
縮レコード中で必要な順序にECが並ぶ順序で、アクセ
スされる辞書項目の連鎖から出力されるECを、出力バ
ッファ内に記録するステップと、対応する未圧縮レコー
ド中で必要なシーケンスで、各項目内のECを選択する
ステップとをさらに含む(106)記載のプロセスを使
用する方法。
【0367】(108)展開プロセスのために文字列中
のすべてのECを取り出すために先祖項目への追加アク
セスが必要でないことを示すために、関連するレコード
文字列のすべてのEC(項目に割り当てられたECと先
祖EC)が項目中に含まれるかどうかを項目中で示すス
テップをさらに含む(106)記載のプロセスを使用す
る方法。
【0368】(109)辞書項目中のオフセット・フィ
ールドを、先祖項目からさらにECを取り出すとき、出
力バッファ内の現カーソル位置から順に未圧縮レコード
が作成されるように、項目に割り当てられたECと項目
中の先祖ECが配置される、出力バッファ内の現カーソ
ル位置に対する位置を示す構造にするステップをさらに
含む(61)記載の、圧縮済みレコード展開方法。
【0369】(110)対応する未圧縮レコード中で必
要なECシーケンスと逆の順序である連鎖順序で、アク
セスされる連鎖辞書項目から、索引記号で位置指定され
たレコード文字列のECを出力するステップと、未圧縮
レコード中で必要な順序にECが並ぶ順序で、アクセス
される辞書項目の連鎖から出力されるECを、出力バッ
ファ内に記録するステップと、対応する未圧縮レコード
中で必要なシーケンスで、各項目内のECを選択するス
テップとをさらに含む(109)記載の、圧縮済みレコ
ード展開方法。
【0370】(111)展開プロセスのために文字列中
のすべてのECを取り出すために先祖項目への追加アク
セスが必要でないことを示すために、関連するレコード
文字列のすべてのEC(項目に割り当てられたECと先
祖EC)が項目中に含まれるかどうかを項目中で示すス
テップをさらに含む(109)記載の圧縮済みレコード
展開方法。
【0371】(112)関連するレコード文字列のすべ
てのECが項目中に含まれているわけでないことが項目
中ですでに示されているときに、項目から取り出して出
力バッファ内に置くべきECの数(項目に割り当てられ
たECと先祖EC)を項目中で示すステップをさらに含
む(111)記載の圧縮済みレコード展開方法。
【0372】(113)記号が真に辞書項目を指定する
索引記号であるかどうか、あるいは、記号が、ZL圧縮
の使用時に、辞書内で、良好な圧縮を提供するのに十分
な長さのZL文字列によって表されなかったために、未
圧縮形式で現れる後続の該未圧縮文字の数のカウントを
含むかどうかを示す標識で、索引記号を展開するステッ
プと、上記カウントによって示される未圧縮文字の数を
圧縮済みレコードから未圧縮レコードに移すことによっ
て、展開プロセス中に、この標識で索引記号を処理する
ステップとをさらに含む(61)記載のレコード圧縮方
法。
【0373】(114)ZL辞書文字列中の辞書項目
を、1つの割り当てられたECおよび複数(N個)の子
を持つ第1の種類のレベルの項目と、1つまたは複数の
割り当てられたECを持つが、必ずしも2つ以上の子を
持たない第2の種類のレベルの項目との、2種類の交互
のレベルを持つ構造にするステップと、ここで定義する
構造にしなかった場合よりもアクセスする必要のある辞
書項目の数を減らすことによって、同一の文字が繰り返
される、多数の異なる長さの文字列を圧縮する目的で、
第2の種類のレベルの項目を、さらに、そのレベルにあ
る第1の子がN個の割り当てられたECを持ち、次の子
がN−1個の割り当てられたECを持ち、その次の子が
N−2個の割り当てられたECを持ち、以下同様にして
最後の子が1つの割り当てられたECを持つ構造にする
ステップとをさらに含む(61)記載のレコード圧縮方
法。
【0374】(115)関連するレコード文字列のすべ
てのECが項目中に含まれているわけでないことが項目
中ですでに示されているときに、項目から取り出して出
力バッファ内に置くべきECの数(項目に割り当てられ
たECと先祖EC)を項目中で示すステップをさらに含
む(54)記載の圧縮済みレコード展開方法。
【0375】(116)関連するレコード文字列のすべ
てのECが項目中に含まれているわけでないことが項目
中ですでに示されているときに、項目から取り出して出
力バッファ内に置くべきECの数(項目に割り当てられ
たECと先祖EC)を項目中で示すステップをさらに含
む(108)記載の圧縮済みレコード展開方法。
【図面の簡単な説明】
【図1】本願発明の好ましい実施例で使用する圧縮の概
要を示す図である。
【図2】本願発明の好ましい実施例で使用する展開の概
要を示す図である。
【図3】データの圧縮に使用する発信元バッファおよび
宛先バッファを備えた従来のZiv−Lempel辞書
を示す図である。
【図4】文字列のZiv−Lempelツリーの例を示
す図である。
【図5】図4に示した文字ツリーを表すリスト形式の辞
書を示す図である。
【図6】図5に示す子ポインタの数値を格納する圧縮用
辞書をさらに展開した図である。
【図7】圧縮と展開の両方に使用される辞書を示す図で
ある。
【図8】任意の辞書項目に先祖文字(PEC)を含む可
能性のある辞書を示す図である。
【図9】任意の項目に子文字(CC)を含む可能性のあ
る辞書を示す図である。
【図10】任意の項目に兄弟文字(SC)を含む可能性
のある辞書を示す図である。
【図11】辞書のアルファベット項目(最初の256文
字)で使用できる制御数字を示す図である。
【図12】非アルファベット項目(最初の256文字の
後)で使用できる制御ビットを示す図である。
【図13】アルファベット項目における制御数字および
子ポインタ(CPTR)を示す図である。
【図14】非アルファベット項目における制御バイトお
よびCPTRを示す図である。
【図15】CPTRの代わりに先行ポインタ(PPT
R)を示す図である。
【図16】すべて同一の非アルファベット項目に含まれ
る、制御バイト、CPTR、およびPPTRを示す図で
ある。
【図17】辞書構造で使用できる複数の項目フォーマッ
トの例、F1A、F1、F2、F3A、F3、F4を示
す図である。
【図18】辞書項目F1、F2、F3A、F3、F4の
使用例を示す図である。
【図19】図18の例に対応する文字記号ツリーを示す
図である。
【図20】図18の項目フォーマットのツリーを示す図
である。
【図21】図18の真拡張文字のツリーを示す図であ
る。
【図22】図18のすべての拡張文字のツリーを示す図
である。
【図23】子文字(CC)および兄弟文字(SC)を使
用して辞書項目を位置指定する方法を示す図である。
【図24】図23の真拡張文字のツリーを示す図であ
る。
【図25】兄弟記述子中の兄弟文字(SC)を使用して
辞書項目を位置指定する方法を示す図である。
【図26】図25のツリー拡張文字のツリーを示す図で
ある。
【図27】本願発明の好ましい実施例で使用され、圧縮
または展開を実行するときに使用できる圧縮呼出し命令
を示す図である。
【図28】圧縮呼出し命令が使用するレジスタを示す図
である。
【図29】好ましい実施例の別個の圧縮用辞書で使用さ
れる項目のフォーマットを示す図である。
【図30】好ましい実施例で使用される圧縮プロセスの
流れ図である。
【図31】好ましい実施例で使用される圧縮プロセスの
流れ図である。
【図32】好ましい実施例の別個の展開用辞書で使用さ
れる項目のフォーマットを示す図である。
【図33】好ましい実施例で使用される展開プロセスの
流れ図である。
【図34】圧縮辞書および展開辞書の例、特に、同一の
文字が繰り返される、多数の異なる長さの文字列を圧縮
するための辞書を示す図である。
【図35】好ましい実施例に短記号オプションがどのよ
うに含まれるかを示す図である。
【図36】短記号オプションによって索引記号がどのよ
うにして長記号に変更されるかを示す図である。
【図37】短記号と呼ばれる未圧縮文字を含む短記号文
字列の例を示す図である。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 クラーク・クルツ アメリカ合衆国12528、ニューヨーク州 ハイランド、ウッドランド・ドライブ 7 (72)発明者 ケンス・アーネスト・プラムベック アメリカ合衆国12603、ニューヨーク州 ポーキープシー、デイジー・レーン 7 (72)発明者 バスカール・シンハ アメリカ合衆国01921、メリーランド州 ボックスフォード、アンナズ・ウェイ 41

Claims (21)

    (57)【特許請求の範囲】
  1. 【請求項1】Ziv−Lempel(ZL)圧縮アルゴ
    リズムを実施して比較的大規模なデータベース内の任意
    の1つまたは複数の比較的小規模な未圧縮レコードを圧
    縮することによりレコードの圧縮を改善する方法におい
    て、 前記データベースに前記ZL圧縮アルゴリズムを使用す
    るコンピュータ・プログラムを適用することにより、圧
    縮済みレコードを生成する前に、前記データベース内の
    すべてのZL文字列を辞書文字列として含む静的圧縮辞
    書を事前に生成しておくステップと、 別のコンピュータ・プログラムを実行して、前記未圧縮
    レコード中の一連の文字を前記辞書中の前記辞書文字列
    と突き合わせることにより、前記未圧縮レコード中のレ
    コード文字列を検出するステップと、前記辞書中の辞書
    文字列と突き合わされるレコード文字列の、前記辞書内
    での終了位置を表す索引記号を出力して、前記未圧縮レ
    コードに対応する圧縮済みレコードを提供するステップ
    とにより、前記データベース内の未圧縮レコードが変更
    されているか否かにかかわらず、前記辞書を変更せず
    に、アクセスされた前記未圧縮レコードから前記圧縮済
    みレコードを生成するステップとを含むレコード圧縮方
    法。
  2. 【請求項2】前記データベース内の各文字列を、1また
    は複数の辞書項目によって表される辞書文字列として構
    造化するステップであって、 各前記項目は、前記辞書文字列中の1または複数の対応
    する拡張文字(EC)が割り当てられ、 前記割り当てられたECは、前記辞書項目中に記録され
    ることもされないこともあり、真拡張文字(TEC)と
    呼ばれる前記ステップと、 辞書文字列中の前記辞書項目を、2つ以上の項目によっ
    て表される任意の文字列の第1項目から連鎖または索引
    付けするステップとを含む請求項1記載のレコード圧縮
    方法。
  3. 【請求項3】それぞれ辞書文字列中に1または複数の先
    祖ECを有する子ECを前記辞書文字列中に有する次の
    辞書項目を位置指定するために、前記辞書文字列の少な
    くとも第1の項目に子ポインタを記憶するステップをさ
    らに含む請求項2に記載のレコード圧縮方法。
  4. 【請求項4】第1の辞書項目で表されるアルファベット
    ECの値によって示される位置に各辞書文字列の各第1
    辞書項目を位置指定し、各第1辞書項目をアルファベッ
    ト項目として指定し、他のすべての辞書項目を非アルフ
    ァベット項目として指定するが、各アルファベット項目
    の位置が、割り当てられたアルファベットECと関連付
    けられているために、どのアルファベット項目中にもE
    Cを必要としないステップと、 前記静的圧縮辞書を、ECおよび制御フィールドを含む
    固定長項目を伴う構造にする構造化ステップとをさらに
    含む請求項3に記載のレコード圧縮方法。
  5. 【請求項5】前記構造化ステップが、アルファベット項
    目または非アルファベット項目の前記制御フィールド
    を、親項目に割り当てられたECの後に続く、辞書文字
    列中の文字である子EC(CC)をいつ前記親項目が含
    むかを示す子標識を含む親辞書項目(親項目)として構
    造化し、それによって、前記CCに割り当てられた前記
    子辞書項目への追加のアクセスなしで、レコード文字列
    の終りを検出できるようにすることにより、前記CCが
    前記辞書内のレコード文字列の検出効率を向上できるよ
    うにするステップをさらに含む請求項4記載のレコード
    圧縮方法。
  6. 【請求項6】前記親項目中に含まれるCCの数を示すカ
    ウント標識を前記親項目中に置き、各CCが、関連する
    子項目に割り当てられた第1のECであるか、または関
    連する子項目に割り当てられた1組の第1ECであるこ
    とを事前決定しあるいは項目中で指示するステップと、 1つまたは複数の子辞書項目(子項目)を有する子リス
    トを含む、親項目の前記子辞書項目を提供するステップ
    と、 前記子リスト中の第1の子項目に対して所定の位置に、
    前記子リスト中の各子項目を位置指定するステップと、 前記親項目中の各CCを前記子リスト中の当該の子項目
    と関連付けられるように割り当てるステップとをさらに
    含む請求項5記載のレコード圧縮方法。
  7. 【請求項7】親項目の制御フィールド中のmore-childre
    n標識をオンにセットして、前記親項目内に含まれる前
    記CCの数よりも多くの前記子項目が前記親項目の子リ
    スト中にあることを示すステップをさらに含む請求項6
    に記載のレコード圧縮方法。
  8. 【請求項8】more-children標識を含む親項目(親)の
    下にある前記子リスト中の前記子項目(子)中に、前記
    親中の利用可能なスペースに、親中のCCと区別するた
    めに兄弟文字(SC)と呼ばれるその当該の各識別CC
    を含めることができない、同一の親の子供と関連するC
    Cを置き、各SCが前記同一の親の関連する子に割り当
    てられた第1のECであるか、または前記同一の親の関
    連する子に割り当てられた1組の第1ECであることが
    事前決定され、あるいは項目中で指示されており、それ
    によって、前記SCに割り当てられた前記子辞書項目へ
    の追加のアクセスなしで、前記レコード文字列の終りを
    検出できるようにすることにより、前記SCが前記辞書
    内の前記レコード文字列の検出効率を向上できるように
    するステップと、 前記子項目に含まれるSCの数を示すカウント標識を前
    記子項目中に置くステップと、 SCを含む前記子項目中の各SCを、前記子リスト中の
    当該の子項目と関連付けられるように割り当てるステッ
    プとをさらに含む請求項7記載のレコード圧縮方法。
  9. 【請求項9】more-children標識を含む親項目(親)の
    下にある子リスト中に、アルファベット項目でも非アル
    ファベット項目でもなく、前記親中の利用可能なスペー
    スに、前記親中のCCと区別するために兄弟文字(S
    C)と呼ばれるその当該の各識別CCを含めることがで
    きない、前記同一の親の子項目(子)と関連するCCを
    含む、兄弟記述子(SD)と呼ばれる項目を置き、各S
    Cが前記同一の親の関連する子項目(子)に割り当てら
    れた前記第1のECであるか、または前記同一の親の関
    連する子に割り当てられた1組の前記第1ECであるこ
    とが事前決定され、あるいは前記SD中で指示されてお
    り、それによって、前記SCに割り当てられた前記子辞
    書項目への追加アクセスなしで、レコード文字列の終り
    を検出できるようにすることにより、前記SCが前記辞
    書内のレコード文字列の検出効率を向上できるようにす
    るステップと、 前記SDに含まれるSCの数を示すカウント標識を前記
    SD中に置くステップと、 前記SD中の各SCを、前記子リスト中の当該の子項目
    と関連付けられるように割り当てるステップとをさらに
    含む請求項7記載のレコード圧縮方法。
  10. 【請求項10】レコード文字列中の第1の文字を表す辞
    書項目から辞書に入り、未圧縮レコードから順次得られ
    る後続の各レコード文字またはレコード文字の文字列を
    同一の辞書文字列中の後続の辞書項目と比較して前記レ
    コード文字列の終りを決定することにより、前記未圧縮
    レコード中の各レコード文字列を検出するコンピュータ
    ・プログラムを実行し、前記辞書文字列中の最後の前記
    項目を検出するか、あるいは前記辞書文字列中のECと
    一致するレコード文字の後に続く次のレコード文字と一
    致しない前記文字列中のECを検出することにより前記
    レコード文字列の終りを位置指定するステップをさらに
    含む請求項2記載のレコード圧縮方法。
  11. 【請求項11】比較的大規模なデータベースの対応する
    未圧縮レコードを再構築するために、請求項10に記載
    の方法によって生成される圧縮済みレコードを展開する
    ための圧縮済みレコード展開方法であって、 ZLアルゴリズムを使用するコンピュータ・プログラム
    を、前記圧縮辞書の構築に使用するデータベースに適用
    することによって、前記データベースの未圧縮レコード
    を再構築する前に、静的展開辞書を事前生成しておき、
    前記圧縮辞書内の辞書文字列に対応する辞書文字列を表
    す辞書項目を前記展開辞書内で構築するステップと、 圧縮済みレコード中にありかつ未圧縮レコード中のレコ
    ード文字列を表す各索引記号と関連する1つまたは複数
    の展開辞書項目を見つけることによって、前記索引記号
    を検出する別のコンピュータ・プログラムを実行するス
    テップと、見つかった展開辞書項目から各索引記号で表
    される各レコード文字列用の文字にアクセスするステッ
    プと、圧縮済みレコードから入力される各索引記号用の
    前記アクセスされた文字を出力して、対応する未圧縮レ
    コードを再構築するステップとによって、前記圧縮辞書
    および前記展開辞書が事前生成された後に変更された未
    圧縮レコードから前記データベース内の圧縮済みレコー
    ドが生成されたかどうかにかかわらず、前記展開辞書を
    変更せずに、入力された圧縮済みレコードから未圧縮レ
    コードを再生成するステップとを含む圧縮済みレコード
    展開方法。
  12. 【請求項12】索引記号で位置指定された前記項目内に
    含まれるよりも多くの先祖文字が関連する前記辞書文字
    列中に存在するとき、索引記号で位置指定された前記項
    目に連鎖された、前記展開辞書内の1つまたは複数の先
    祖辞書項目を提供するステップと、 前記索引記号で位置指定された前記項目中に、先祖項目
    によって表される1つまたは複数の先祖ECを複製し
    て、関連する先祖項目にアクセスせずに、前記文字列中
    の先祖ECを出力できるようにするステップとをさらに
    含む請求項11記載の圧縮済みレコード展開方法。
  13. 【請求項13】Ziv−Lempel(ZL)アルゴリ
    ズムを使用して、比較的大規模なデータベース内で未圧
    縮レコードを圧縮する方法と、圧縮済みレコードを未圧
    縮レコードに展開する方法を組み合わせた方法であっ
    て、 データベースに前記ZLアルゴリズムを使用するコンピ
    ュータ・プログラムを適用して、前記データベース内の
    すべてのZL文字列を辞書文字列として含む辞書を前記
    データベースから生成することにより、前記データベー
    スのレコードに対して圧縮操作と展開操作の両方を実行
    するための辞書項目を含む静的辞書を事前に生成するス
    テップと、 別のコンピュータ・プログラムを実行して、未圧縮レコ
    ード中の一連の文字を前記辞書中の前記辞書文字列と突
    き合わせることにより、前記未圧縮レコード中のレコー
    ド文字列を検出するステップと、前記辞書中の辞書文字
    列と突き合わされるレコード文字列の、前記辞書内での
    終了位置を表す索引記号を出力して、前記未圧縮レコー
    ドに対応する圧縮済みレコードを提供するステップとに
    より、前記データベース内の未圧縮レコードが変更され
    ているか否かにかかわらず、前記辞書を変更せずに、ア
    クセスされた未圧縮レコードから圧縮済みレコードを生
    成するステップと圧縮済みレコード中にありかつ未圧縮
    レコード中のレコード文字列を表す各索引記号と関連す
    る辞書項目を見つけることによって、索引記号を検出す
    る別のコンピュータ・プログラムを実行するステップ
    と、見つかった辞書項目から各索引記号で表される各辞
    書文字列用の文字にアクセスするステップと、圧縮済み
    レコードから入力される各索引記号用の前記アクセスさ
    れた文字を出力して、対応する未圧縮レコードを再構築
    するステップとによって、前記辞書が事前生成された後
    に変更された未圧縮レコードから前記データベース内の
    圧縮済みレコードが生成されたかどうかにかかわらず、
    前記辞書を変更せずに、入力された圧縮済みレコードか
    ら未圧縮レコードを再生成するステップとを含む前記方
    法。
  14. 【請求項14】前記データベース内の各文字列を、各項
    目に前記辞書文字列中の1つまたは複数の当該の拡張文
    字(EC)が割り当てられ、かつ前記割り当てられたE
    Cが前記辞書文字列の真拡張文字(TEC)と呼ばれ
    る、1つまたは複数の辞書項目によって表される辞書文
    字列として構造化するステップと、 前記辞書中の各辞書文字列中の前記辞書項目を順方向お
    よび逆方向に連鎖するステップとをさらに含む請求項1
    3記載のプロセスを使用する方法。
  15. 【請求項15】それぞれ前記辞書文字列中に1つまたは
    複数の先祖ECを有する子ECを前記辞書文字列中に有
    する次の辞書項目を位置指定するために、辞書文字列の
    少なくとも第1の項目に子ポインタを記憶するステップ
    をさらに含む請求項14に記載のプロセスを使用する方
    法。
  16. 【請求項16】第1の辞書項目で表されるアルファベッ
    トECの値によって示される位置に各辞書文字列の各第
    1辞書項目を位置指定し、各第1辞書項目をアルファベ
    ット項目として指定し、他のすべての辞書項目を非アル
    ファベット項目として指定するが、各アルファベット項
    目の位置が、割り当てられたアルファベットECと関連
    付けられているためにどのアルファベット項目中にもE
    Cを必要としないステップと、 前記静的辞書を、ECおよび制御フィールドを含む固定
    長項目を含む構造にする構造化ステップとをさらに含む
    請求項15に記載のプロセスを使用する方法。
  17. 【請求項17】前記構造化ステップが、アルファベット
    項目または非アルファベット項目の前記制御フィールド
    を、前記親項目に割り当てられたECの後に続く、辞書
    文字列中の文字である子EC(CCと呼ぶ)をいつ前記
    親項目が含むかを示す子標識を含む親辞書項目(親項
    目)として構造化し、それによって、CCに割り当てら
    れた前記子辞書項目への追加のアクセスなしで、レコー
    ド文字列の終りを検出できるようにすることにより、C
    Cが前記辞書内のレコード文字列の検出効率を向上でき
    るようにするステップをさらに含む請求項16に記載の
    プロセスを使用する方法。
  18. 【請求項18】1つまたは複数の子辞書項目(子項目)
    を有する子リストを含む、親項目の子辞書項目を提供す
    るステップと、 前記子リスト中の前記第1の子項目に対して所定の位置
    に、前記子リスト中の各子項目を位置指定するステップ
    と、 前記親項目中の各CCを前記子リスト中の当該の子項目
    に割り当てるステップとをさらに含む請求項17に記載
    のプロセスを使用する方法。
  19. 【請求項19】前記辞書内の前記子リストを前記親項目
    中の子ポインタ・フィールドによって位置指定するステ
    ップと、 現在検出中のレコード文字列用の索引記号を生成するた
    めに、子ポインタと、前記辞書文字列中のECと突き合
    わされる次のレコード文字と一致する前記親項目中の関
    連CCの前記位置とから、子辞書項目の位置を算出する
    ステップとをさらに含む請求項18記載のプロセスを使
    用する方法。
  20. 【請求項20】親項目の制御フィールド中のmore-child
    ren標識をオンにセットして、前記親項目内に含まれる
    CCの数よりも多くの子項目が前記親項目の子リスト中
    にあることを示すステップをさらに含む請求項18記載
    のプロセスを使用する方法。
  21. 【請求項21】more-children標識を含む親項目(親)
    の下にある子リスト中に、アルファベット項目でも非ア
    ルファベット項目でもなく、前記親中の利用可能な前記
    スペースに、前記親中のCCと区別するために兄弟文字
    (SC)と呼ばれるその当該の各識別CCを含めること
    ができない、前記同一の親の子項目(子)と関連する前
    記CCを含む、兄弟記述子(SD)と呼ばれる項目を置
    き、各SCが前記同一の親の関連する子項目(子)に割
    り当てられた前記第1のECであるか、または前記同一
    の親の関連する子に割り当てられた1組の第1ECであ
    ることが事前決定され、あるいはSD中で指示されてお
    り、それによって、SCに割り当てられた前記子辞書項
    目への追加アクセスなしで、レコード文字列の終りを検
    出できるようにすることにより、SCが前記辞書内のレ
    コード文字列の検出効率を向上できるようにするステッ
    プと、 前記SDに含まれるSCの数を示すカウント標識を前記
    SD中に置くステップと、 前記SD中の各SCを、前記子リスト中の当該の子項目
    と関連付けられるように割り当てるステップとをさらに
    含む請求項20に記載のレコード圧縮方法。
JP5247984A 1992-10-29 1993-10-04 文字デ―タを圧縮し圧縮済みデ―タを展開するための静的辞書構造を提供する方法および手段 Expired - Lifetime JP2502469B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/968,631 US5442350A (en) 1992-10-29 1992-10-29 Method and means providing static dictionary structures for compressing character data and expanding compressed data
US968631 1992-10-29

Publications (2)

Publication Number Publication Date
JPH06222903A JPH06222903A (ja) 1994-08-12
JP2502469B2 true JP2502469B2 (ja) 1996-05-29

Family

ID=25514528

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5247984A Expired - Lifetime JP2502469B2 (ja) 1992-10-29 1993-10-04 文字デ―タを圧縮し圧縮済みデ―タを展開するための静的辞書構造を提供する方法および手段

Country Status (3)

Country Link
US (1) US5442350A (ja)
EP (1) EP0595064A3 (ja)
JP (1) JP2502469B2 (ja)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5424732A (en) * 1992-12-04 1995-06-13 International Business Machines Corporation Transmission compatibility using custom compression method and hardware
US5530645A (en) * 1993-06-30 1996-06-25 Apple Computer, Inc. Composite dictionary compression system
DE69433620T2 (de) * 1994-06-16 2004-08-12 Seiko Epson Corp. Datenkomprimierungsverfahren
US5778371A (en) * 1994-09-13 1998-07-07 Kabushiki Kaisha Toshiba Code string processing system and method using intervals
JPH08180067A (ja) * 1994-12-26 1996-07-12 Nec Corp データベースレコード圧縮システム
US5815096A (en) * 1995-09-13 1998-09-29 Bmc Software, Inc. Method for compressing sequential data into compression symbols using double-indirect indexing into a dictionary data structure
JP3566441B2 (ja) * 1996-01-30 2004-09-15 シャープ株式会社 テキスト圧縮用辞書作成装置
FR2751492B1 (fr) * 1996-07-16 1998-11-13 Alcatel Mobile Comm France Procede et dispositif de compression et de decompression de messages
US5790057A (en) * 1996-08-12 1998-08-04 Lanart Corporation Method of and system for the efficient encoding of data
US5999949A (en) * 1997-03-14 1999-12-07 Crandall; Gary E. Text file compression system utilizing word terminators
US6012057A (en) * 1997-07-30 2000-01-04 Quarterdeck Corporation High speed data searching for information in a computer system
JP3859313B2 (ja) 1997-08-05 2006-12-20 富士通株式会社 タグ文書の圧縮装置および復元装置,圧縮方法および復元方法,圧縮/復元装置および圧縮/復元方法並びに圧縮,復元もしくは圧縮/復元プログラムを記録したコンピュータ読み取り可能な記録媒体
US6011871A (en) * 1997-10-09 2000-01-04 Bmc Software, Inc. Method and apparatus for compressing digital data
CN1148657C (zh) 1997-10-21 2004-05-05 富士通株式会社 文件处理方法和数据处理装置
JP3337633B2 (ja) * 1997-12-03 2002-10-21 富士通株式会社 データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体
US6088699A (en) * 1998-04-22 2000-07-11 International Business Machines Corporation System for exchanging compressed data according to predetermined dictionary codes
JP3566111B2 (ja) * 1998-11-30 2004-09-15 松下電器産業株式会社 記号辞書作成方法及び記号辞書検索方法
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
US6597809B1 (en) 1999-03-19 2003-07-22 Raf Technology, Inc. Rollup functions for efficient storage presentation and analysis of data
US6611213B1 (en) 1999-03-22 2003-08-26 Lucent Technologies Inc. Method and apparatus for data compression using fingerprinting
KR100597513B1 (ko) 1999-08-13 2006-07-10 후지쯔 가부시끼가이샤 파일 처리 방법, 데이터 처리 장치 및 기억 매체
US6236341B1 (en) 2000-03-16 2001-05-22 Lucent Technologies Inc. Method and apparatus for data compression of network packets employing per-packet hash tables
US6388584B1 (en) 2000-03-16 2002-05-14 Lucent Technologies Inc. Method and apparatus for data compression of network packets
KR100382649B1 (ko) * 2000-12-29 2003-05-09 삼성전자주식회사 하드 카피 장치용 데이타 압축 및 복원 방법들 및 장치들
US6426711B1 (en) * 2001-05-14 2002-07-30 Unisys Corporation Character table implemented data compression method and apparatus
US20030038737A1 (en) * 2001-08-17 2003-02-27 Atng, Inc. System and method for compressing an intelligence bearing signal and communicating the compressed signal from a source site to a destination site
US6653950B2 (en) * 2001-09-13 2003-11-25 Unisys Corporation Data compression method and apparatus utilizing cascaded subdictionaries
US6614368B1 (en) * 2002-01-16 2003-09-02 Unisys Corporation Data compression method and apparatus utilizing cascaded character tables
US6670897B1 (en) 2002-10-03 2003-12-30 Motorola, Inc. Compression/decompression techniques based on tokens and Huffman coding
US6847315B2 (en) * 2003-04-17 2005-01-25 International Business Machines Corporation Nonuniform compression span
US7039394B2 (en) * 2003-11-25 2006-05-02 Good Technology, Inc. Communication system and method for compressing information sent by a communication device to a target portable communication device
US7640497B1 (en) * 2003-12-22 2009-12-29 Apple Inc. Transforming a hierarchical data structure according to requirements specified in a transformation template
US7653643B2 (en) * 2005-03-24 2010-01-26 Microsoft Corporation Method and apparatus for compressing a data set
US7552363B2 (en) * 2006-03-23 2009-06-23 Arm Limited Generation of trace elements within a data processing apparatus
EP2013974B1 (en) * 2006-04-07 2018-07-11 Data Storage Group Data compression and storage techniques
US8832045B2 (en) 2006-04-07 2014-09-09 Data Storage Group, Inc. Data compression and storage techniques
US8659451B2 (en) * 2009-11-13 2014-02-25 Universitaet Paderborn Indexing compressed data
US8493249B2 (en) 2011-06-03 2013-07-23 Microsoft Corporation Compression match enumeration
US9753983B2 (en) 2013-09-19 2017-09-05 International Business Machines Corporation Data access using decompression maps
US9124295B2 (en) * 2013-11-14 2015-09-01 Nicolas Thomas Mathieu Dupont System and method for data compression and transmission
US10028277B2 (en) 2013-11-20 2018-07-17 Cyborg Inc. Variable frequency data transmission
US9697221B2 (en) * 2014-03-19 2017-07-04 Oracle International Corporation OZIP compression and decompression
US9780805B2 (en) * 2014-10-22 2017-10-03 International Business Machines Corporation Predicate application through partial compression dictionary match
JP6531398B2 (ja) * 2015-01-19 2019-06-19 富士通株式会社 プログラム
JP6742692B2 (ja) 2015-01-30 2020-08-19 富士通株式会社 符号化プログラムおよび伸長プログラム
US10382056B2 (en) 2015-11-10 2019-08-13 International Business Machines Corporation Fast evaluation of predicates against compressed data
US9716515B2 (en) 2015-12-14 2017-07-25 International Business Machines Corporation Method for detecting end of record in variable length coded bit stream
US10432217B2 (en) 2016-06-28 2019-10-01 International Business Machines Corporation Page filtering via compression dictionary filtering
US10187081B1 (en) * 2017-06-26 2019-01-22 Amazon Technologies, Inc. Dictionary preload for data compression
US10963429B2 (en) 2017-10-11 2021-03-30 Lognovations Holdings, Llc Method and system for content agnostic file indexing
US11138152B2 (en) 2017-10-11 2021-10-05 Lognovations Holdings, Llc Method and system for content agnostic file indexing
US10956440B2 (en) 2017-10-16 2021-03-23 International Business Machines Corporation Compressing a plurality of documents
US11880368B2 (en) * 2018-10-15 2024-01-23 Ocient Holdings LLC Compressing data sets for storage in a database system
US11050436B2 (en) * 2019-06-21 2021-06-29 Sap Se Advanced database compression

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4814746A (en) * 1983-06-01 1989-03-21 International Business Machines Corporation Data compression method
GB8815978D0 (en) * 1988-07-05 1988-08-10 British Telecomm Method & apparatus for encoding decoding & transmitting data in compressed form
GB8828796D0 (en) * 1988-12-09 1989-01-18 British Telecomm Data compression
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.
US5325091A (en) * 1992-08-13 1994-06-28 Xerox Corporation Text-compression technique using frequency-ordered array of word-number mappers

Also Published As

Publication number Publication date
EP0595064A2 (en) 1994-05-04
EP0595064A3 (en) 1995-08-16
US5442350A (en) 1995-08-15
JPH06222903A (ja) 1994-08-12

Similar Documents

Publication Publication Date Title
JP2502469B2 (ja) 文字デ―タを圧縮し圧縮済みデ―タを展開するための静的辞書構造を提供する方法および手段
US4558302A (en) High speed data compression and decompression apparatus and method
US4988998A (en) Data compression system for successively applying at least two data compression methods to an input data stream
Aoe An efficient digital search algorithm by using a double-array structure
US4611280A (en) Sorting method
US5469161A (en) Algorithm for the implementation of Ziv-Lempel data compression using content addressable memory
US8838551B2 (en) Multi-level database compression
US4959785A (en) Character processing system with spelling check function that utilizes condensed word storage and indexed retrieval
US5572206A (en) Data compression method and system
CA1287183C (en) Method and apparatus for data hashing
JP3234104B2 (ja) 圧縮データをサーチする方法及びシステム
US6876774B2 (en) Method and apparatus for compressing data string
US3656178A (en) Data compression and decompression system
US5150119A (en) Data compression method and apparatus
JP2979106B2 (ja) データ圧縮
EP0628228A1 (en) Data compression using hashing
US5081608A (en) Apparatus for processing record-structured data by inserting replacement data of arbitrary length into selected data fields
US5610603A (en) Sort order preservation method used with a static compression dictionary having consecutively numbered children of a parent
US5815096A (en) Method for compressing sequential data into compression symbols using double-indirect indexing into a dictionary data structure
US6320523B1 (en) Method and apparatus for reducing the time required for compressing data
JPH10261969A (ja) データ圧縮方法および装置
JP2016213806A (ja) 入力ブロックのスキャンと同時にソート済みシンボル・リストを維持するハードウェア・データ圧縮器
JP3038234B2 (ja) データ圧縮装置の辞書検索方式
EP0595539A1 (en) A sequential pattern memory searching and storage management technique
JP2535655B2 (ja) 辞書検索方式

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090313

Year of fee payment: 13

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

Free format text: PAYMENT UNTIL: 20100313

Year of fee payment: 14

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

Free format text: PAYMENT UNTIL: 20110313

Year of fee payment: 15

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

Free format text: PAYMENT UNTIL: 20110313

Year of fee payment: 15

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

Free format text: PAYMENT UNTIL: 20120313

Year of fee payment: 16

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

Free format text: PAYMENT UNTIL: 20120313

Year of fee payment: 16

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

Free format text: PAYMENT UNTIL: 20130313

Year of fee payment: 17

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

Free format text: PAYMENT UNTIL: 20140313

Year of fee payment: 18

EXPY Cancellation because of completion of term