JPH10261969A - データ圧縮方法および装置 - Google Patents

データ圧縮方法および装置

Info

Publication number
JPH10261969A
JPH10261969A JP6589797A JP6589797A JPH10261969A JP H10261969 A JPH10261969 A JP H10261969A JP 6589797 A JP6589797 A JP 6589797A JP 6589797 A JP6589797 A JP 6589797A JP H10261969 A JPH10261969 A JP H10261969A
Authority
JP
Japan
Prior art keywords
symbol string
symbol
input data
character string
static
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP6589797A
Other languages
English (en)
Inventor
Yoshiaki Hattori
芳明 服部
Yutaka Yoshiura
裕 吉浦
Taiji Hidaka
大治 日▲高▼
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP6589797A priority Critical patent/JPH10261969A/ja
Publication of JPH10261969A publication Critical patent/JPH10261969A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】従来は、動的辞書のみによる圧縮、伸長処理を
行ってきた。動的辞書は、文字列を効率的に登録、削除
するために、余分なメモリを必要とするので、処理に必
要なメモリが大きかった。 【解決手段】静的辞書は、文字列の登録、削除がなく、
検索のみを行えばよいので、1文字列当たりの所用メモ
リが削減できる。また、動的辞書と静的辞書を併用し、
動的辞書への文字列の登録を静的辞書中の文字列との差
分として表現することで、動的辞書をより効率よく活用
することができる。入出力処理(103)は、平文(1
12)を読み込んで記憶し、制御処理(104)によっ
て1文字ずつ読み込む。読み込んだ文字列が、静的辞書
(108)、動的辞書(110)に存在するか、検索
(105)し、圧縮文(111)として出力する。ま
た、静的辞書、動的辞書に存在しない文字列を、ハッシ
ュテーブル(109)を用いて動的辞書に登録(10
6)し、動的辞書が一杯になれば、文字列を削除(10
7)する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、データ圧縮に関
し、特に、所用メモリ量が少なく、圧縮率の高いデータ
の圧縮方法および装置に関する。
【0002】
【従来の技術】通信の利用機会の増加、マルチメディア
化に伴う個々のデータの巨大化に伴い、通信処理の効率
化のためのデータ圧縮の必要性が増大している。特に、
WANや無線では通信帯域が狭いので、効率の良い圧縮
が重要である。
【0003】従来の主な方法は、入力データ中の文字列
を動的辞書に登録し、その後、入力データ中に登録済み
の文字列が再度出現した時、その文字列を番号に変換す
ることで、符号化を行う。そして、動的辞書が満杯にな
ると一定の規則に従って文字列を辞書から削除してい
た。
【0004】動的辞書では、文字列の動的な追加、削除
を効率的に実行するために、文字列そのもの以外に付加
的な情報を記憶する必要があった。そのため、1文字列
あたりの所用メモリが多かった。
【0005】動的辞書が満杯になると古い文字列を辞書
から削除する圧縮方式(LZT)において、1文字列を
記憶するためには、 ・親となる記号列(当該文字列より1文字だけ短い文字
列)の識別子(2バイト) ・当該記号列と親記号列の差分となる文字(1バイト) ・親を同じくする文字列(兄弟文字列)へのポインタ
(2バイト) ・当該文字列を親文字列とする文字列(子文字列)への
ポインタ(2バイト)の計7バイト必要であった。
【0006】例えば、図1に示すように、文字列“th
e”を動的辞書に登録する過程を述べる。動的辞書の文
字列番号の0〜255番までは、アスキーコード番号に
相当する文字すなわち長さ1の文字列を表す。これら
は、入力データを処理する以前に予め登録する。これら
の長さ1の文字列の親文字列は存在せず、弟文字列の番
号は文字列番号より1多い番号、差分文字は文字列番号
のアスキーコード表に対応する文字である。例えば、11
6番には、“t”が登録されている。
【0007】入力データ中に文字列“th”が出現した
時、この文字列を動的辞書に登録する。動的辞書には文
字列の出現順に上から登録するが、今1035番目まで、文
字列の登録がなされていたとすると、1036番目に文字列
“th”を登録する。その親文字(t)の識別子は116であ
り、差分文字は、"h"である。この時、親文字列“t”
を持つ文字列は、初めて登録するので、文字列116(t)の
子文字列は、1036(th)となる。
【0008】次に、入力データ中に文字列“the”が
出現し、この文字列を2487番目に登録するとする。親文
字列は1036(th)であり、差分文字は、“e”である。こ
の時同様に、親文字列“th”を持つ文字列は、初めて
登録するので、文字列1036(th)の子文字列は、2487(th
e)となる。
【0009】その後、入力データ中に文字列“tu”が
出現した場合、同じ親文字列116(t)を持つ文字列は、
“th”“tu”の2つであり、その差分文字すなわち
“h”と“u”をアスキーコード順に並べると、“h”
が最初で、“u”が2番目だから、3953(tu)を文字列10
36(th)の弟文字列とする。(逆に、入力データ中に文字
列“ta”が出現した場合には、同じ親文字列116(t)を
持つ文字列は、“ta”“th”の2つであり、その差
分文字すなわち“a”と“h”をアスキーコード順に並
べた時、“a”が最初で、“h”が2番目なので、親文
字列116(t)の子文字列を3953(ta)とし、文字列3953(ta)
の弟文字列を1036(th)とする。)上記方式以外に、文字
列の動的な追加、削除を行わない静的辞書を用いる方法
もあるが、静的辞書の特徴を活かして1文字列当たりの
所用メモリを削減する方法は提案されていない。
【0010】また、現在のネットワーク環境において
は、複数の通信相手とコネクションをつなげることが多
い。その場合、入力データに応じて動的辞書を変更する
ので、相手毎に個別の辞書を作成しなくてはならず、さ
らには、送信側と受信側で2つの同じ辞書を持たねばな
らない。その結果、一般に、クライアントは4〜6個程
度ないしサーバでは数十個の動的辞書が必要となる。
【0011】
【発明が解決しようとする課題】上記従来の圧縮技術で
は、動的辞書における1文字列当たりのバイト数が多い
ので、メモリの必要量が大きい。また、通信相手が多く
なるほど、急速に、多くのメモリを必要とするという問
題がある。
【0012】本発明の目的は、文字列の追加、削除を行
わない静的辞書と動的辞書を用いることを活かして、1
文字列当たりの所用メモリを削減し、複数の通信相手が
ある場合のシステム全体の所用メモリを削減することを
課題とする。
【0013】
【課題を解決するための手段】静的辞書は、処理中の文
字列登録・削除が不要なので、検索のみ効率的に実行で
きればよい。また、予め検索のために構成を最適化して
おくことが可能である。
【0014】本発明の第1の方法では、上記静的辞書の
性質を利用する。静的辞書に存在する文字列を「親とな
る文字列の番号」と「当該文字列と親文字列の差分とな
る文字」により表現し、上記文字列番号と差分文字の少
なくとも一方に関して整列することによって構成する。
圧縮処理は、文字列の整列順序に基づいて、入力データ
中の文字列と一致する文字列を静的辞書から探索する。
その結果、静的辞書では、1つの文字列に対して、「親
となる文字列番号(2バイト)」と「当該文字列と親文
字列の差分となる文字(1バイト)」だけを記憶すれば
よいので、1文字列当たり3バイトにできる。さらに、
実施例で詳述するように、親番号に関する情報をさらに
コンパクトに表現することにより、1文字列当たり約2
バイトにできる。
【0015】また、伸長処理は、文字列の整列順序に基
づいて、入力データ中の文字列番号に対応する文字列を
文字列記憶手段から検索する。
【0016】本発明の第2の方法では、圧縮、伸長処理
において、動的辞書を静的辞書との差分で表す。その結
果、動的辞書に静的辞書と重複する文字列を記憶する必
要がないので、辞書をより有効に利用できる。
【0017】本発明の第3の方法では、異なる入力デー
タに対する各々の圧縮処理において、静的辞書について
は同じものを共通に利用する。動的辞書については従来
と同様に、通信相手毎に設ける。その結果、共通の静的
辞書は、各計算機に1つでよく、動的辞書と静的辞書を
あわせたシステム全体のメモリを削減できる。
【0018】
【発明の実施の形態】本発明をより詳細に述べるため
に、添付の図面に従ってこれを説明する。また、以下で
は、本発明の2つの実施例を述べる。まず、図2〜図1
1を用いて、第1の実施例を説明する。第1の実施例
は、前記第1、3、4、6、7の方法の具体例である。
図2は、第1の実施例の機能構成の全体図を示す。ブロ
ック101はCPU内の処理動作であり、入出力処理1
03、制御処理104、検索処理105、登録処理10
6、削除処理107、の各処理から構成される。ブロッ
ク102は、ハードディスクや主記憶であり、静的辞書
108、ハッシュテーブル109、動的辞書110、圧
縮文111、平文112を記憶する。
【0019】入出力処理103は、平文を入力し、これ
を記憶する。また、符号化コマンドを入力し、制御処理
104に渡す。制御処理104は、符号化コマンドを受
け取ったときに、検索処理105、登録処理106、削
除処理107を順次起動して平文を符号化し、記憶す
る。
【0020】検索105は、入力データ中の文字列が静
的辞書および動的辞書中に存在するかどうか調べる。登
録106は、入力データ中の文字列が静的辞書および動
的辞書中に存在しない時、静的辞書およびハッシュテー
ブルを用いてその文字列を動的辞書に登録する。削除処
理107は、動的辞書が満杯になった時、ハッシュテー
ブルを用いて文字列を動的辞書から削除する。これらの
処理については、後に、図3〜ず9を用いて詳述する。
【0021】図3は、図2の制御104の動作を表すフ
ローチャートである。ステップ31は、入力データから
1文字読み込み、それを親文字列とする。ステップ32
は、入力データ中の文字列が静的辞書に存在するかどう
かを検索する。この処理の詳細については、図6を用い
て後に説明する。ステップ33は、入力データ中の文字
列が動的辞書に存在するかどうかを検索する。この処理
の詳細については、図7を用いて後に説明する。ステッ
プ34は、動的辞書に文字列を登録する。この処理の詳
細については、図8を用いて後に説明する。ステップ3
5は、動的辞書が一杯になったかどうかを判定する。一
杯の場合は、ステップ36に進み、動的辞書の古い文字
列を削除しする。この処理の詳細については、図9を用
いて後に説明する。そうでない場合は、ステップ37へ
進む。ステップ37は、この時点での親文字列の番号を
出力する。ステップ38は、入力データの最後まで符号
化を行ったかどうかを判定する。行っていれば終了し、
行っていなければ、ステップ31に戻る。
【0022】次に、図4を用いて、静的辞書の構造につ
いて、簡単に説明する。静的辞書中の文字列は、「親文
字列+1文字」で表す。ここでは、親文字列の番号が
i、差分文字がCk、文字列番号がPの文字列を表現し
ている。「文字列検索テーブル」は、親文字列番号順で
ソートされており、親文字列番号iを持つ文字列の番号
を" j1 + 1 〜 j2 "で表現している。「差分テーブル」
は、文字列番号順でソートされており、さらに、同じ親
文字列を持つ文字列は、差分文字のアスキーコード順で
ソートされ、1ケ所に集まっている。ここでは、親文字
列iを持つ文字列Pの差分文字Ckは、で表現してい
る。
【0023】次に、図5を用いて、図3のステップ32
の詳細を示す。ステップ51は、親文字列から「文字列
検索テーブル」を用いて、当該文字列が「差分テーブ
ル」のどこに存在するかを検索する。ここで、「文字列
検索テーブル」は、親文字列の番号順にソートされてい
るので、その親文字列を持つ文字列が、「差分テーブ
ル」のどこに存在するかをすぐに発見できる。ステップ
52は、入力データから次の文字を読み込む。ステップ
53は、当該文字列が「差分テーブル」に存在するか否
かを判断している。ここで、「差分テーブル」の位置は
文字列の番号を表し、「文字列検索テーブル」から得ら
れた領域には、同じ親文字列を持つ文字列が集まってい
る。さらに、その領域で、それらの差分文字が、アスキ
ーコード順にソートされているので、バイナリーサーチ
によって、素早く目的の差分文字を発見することができ
る。当該文字列が、「差分テーブル」に存在すれば、ス
テップ54に進んで、親文字列を更新する、存在しなけ
れば、リターンする。
【0024】次に、図6にその静的辞書の具体例を示
す。入力データ中に文字列“image”があるとき、
まず最初に、親文字列“i”から「文字列検索テーブ
ル」を用いて、親文字列“i”を持つ文字列が、「差分
テーブル」のどこに存在するかを検索すると、8121〜81
60であることがわかる。その後、入力データから1文字
“m”を読み込み、「差分テーブル」のその領域を見る
と、差分文字“m”が存在した。そこで、親文字列を
“im”に更新し、再び「文字列検索テーブル」を用い
て、親文字列“im”を持つ文字列が、「差分テーブ
ル」のどこに存在するかを検索すると、12501〜12555で
あることがわかる。同様にして、入力データ中の文字列
を読み込み、「差分テーブル」を検索し、親を更新する
処理を続けると、文字列“image”(文字列番号36
952)が静的辞書中に存在することがわかる。
【0025】次に、図7を用いて、ハッシュテーブルと
動的辞書の関係およびそれぞれの構成について説明す
る。文字列を、静的辞書との差分として動的辞書に登録
する際、まず、ハッシュ関数に従って、静的辞書中の親
文字列と読み込んだ1文字からハッシュ値を計算する。
その結果、得られるハッシュ値をi1〜i3で表現し、
それから得られる動的辞書の文字列番号をj1〜j3で
表現している。異なった文字列で、ハッシュ値が重なっ
た場合、別のハッシュ値を与えられるよう、「ハッシュ
テーブル上へのポインタ」i2〜i3を持っている。
【0026】次に、図8を用いて、図3のステップ33
の詳細を示す。ステップ81は、この前の段階で、文字
列が静的辞書に存在していたかどうかを判断している。
文字列が、静的辞書に存在していたなら、ステップ82
に進んで、静的辞書の文字列を親文字列とし、ハッシュ
関数に従って、親文字列と読み込んだ1文字からハッシ
ュ値を計算し、ステップ83に進む。文字列が、静的辞
書に存在していなかったなら、ステップ84に進む。ス
テップ83は、得られたハッシュ値とハッシュテーブル
から、当該文字列の存在する可能性のある動的辞書のア
ドレスが得られるか否かを判断している。動的辞書のア
ドレスが得られたら、ステップ85に進み、得られなか
ったらリターンする。ステップ84は、子文字列と弟文
字列をたどることで、当該文字列が静的辞書中に存在す
るか否かを検索している。存在すれば、ステップ86に
進んで、親文字列を更新し、入力データから1文字読み
込む。存在しなければ、リターンする。ステップ85
は、動的辞書のアドレスに、当該文字列が存在するか否
かを判断する。存在すれば、ステップ86に進み、存在
しなければ、ステップ73に戻って、当該文字列が存在
する可能性のある動的辞書のアドレスの次の候補を得
る。
【0027】次に、図9を用いて、図3のステップ34
の詳細を示す。ステップ91は、ステップ81と同様、
ハッシュ関数に従って、親文字列と読み込んだ1文字か
らハッシュ値を計算する。ステップ92は、今から登録
しようとする文字列を動的辞書中のどこに登録するかを
ハッシュテーブルに登録しておく。ステップ93は、文
字列を動的辞書に登録する。この時、動的辞書には、親
文字列と差分文字のみを登録する。ステップ94は、ス
テップ93で登録した文字列と同じ親文字列を持つ文字
列の差分文字を、アスキーコード順に並べた時、今回登
録した文字列が何番目になるかを判定する。1番目の場
合は、ステップ96に進み、親文字列の子文字列番号を
今回登録の文字列番号にする。n(>1)番目の場合
は、ステップ95に進み、n−1番目文字列の弟文字列
番号をn番目の文字列番号に変更する。ステップ97
は、n+1番目文字列が辞書に存在するかどうかを判断
する。存在しなければ、そのままリターンする。存在す
れば、ステップ98に進み、n番目の文字列の弟文字列
番号をn+1番目の文字列番号にして、リターンする。
【0028】次に、図10を用いて、図3のステップ3
6の詳細を示す。ステップ100は、前回削除した文字
列(削除が最初の場合は、文字列番号の一番小さい文字
列)から文字列番号の大きい方に向かって動的辞書を検
索し、最初に見つかった子文字列の存在しない文字列を
削除する。ステップ101は、ステップ100で削除し
た文字列(当該文字列)は、これと同じ親文字列を持つ
文字列を差分文字のアスキーコード順に並べた時、何番
目になるかを判定する。1番目の場合は、ステップ10
2に進み、そうでない場合は、ステップ105に進む。
ステップ102は、n+1 番目文字列が動的辞書に存在す
るかどうかを判断する。存在すれば、ステップ103に
進み、当該文字列の親文字列の子文字列番号をn+1 番目
文字列にする。存在しなければ、ステップ104に進
み、当該文字列の親文字列の子文字列番号を削除する。
ステップ105も、n+1 番目文字列が動的辞書に存在す
るかどうかを判断する。 存在すれば、ステップ106
に進み、n-1 番目文字列の弟文字列番号をn+1 番目文字
列に変更。存在しなければ、ステップ107に進み、n-
1番目文字列の弟文字列番号を削除する。ステップ10
8は、削除した文字列の親文字列が、静的辞書中のもの
か否かを判断している。静的辞書中のものでなければ、
そのままリターンし、静的辞書中のものであれば、ステ
ップ109に進み、動的辞書中のアドレスをハッシュテ
ーブルから削除し、リターンする。
【0029】次に、図11を用いて、ハッシュテーブル
および動的辞書の構成、動的辞書中の文字列の検索、動
的辞書への文字列の登録、削除の具体例を示す。入力デ
ータ中に文字列“images ”があるとき、図6で
示した通り、静的辞書を検索して文字列“image”
が存在することがわかった。しかし、これを親文字列と
する文字列の差分文字に“s”が存在しなかったので、
静的辞書には、文字列“images”が存在しないこ
とがわかった。そこで、次に動的辞書を検索する。ハッ
シュ関数に従って親文字列“image”と差分文字
“s”からハッシュ値を求めると "589" であるとす
る。これとハッシュテーブルより、当該文字列“ima
ges”の存在する可能性のある動的辞書のアドレス "
2590" を得る。しかし、動的辞書中の文字列番号 "259
0" を見に行っても、該当する文字列が存在しなかった
ので、ハッシュテーブルへのポインタから、新たなハッ
シュ値"3265"を得る。このハッシュ値から動的辞書のア
ドレス"1036"を得るので、動的辞書中の文字列番号 "10
36" を見に行くと、“image”(文字列番号3695
2)を親文字列とし、差分文字を“s”とする文字列
“images”が存在することがわかる。上記のよう
にして、静的辞書中の文字列を親文字列とする文字列を
動的辞書から検索できる。その後、入力データ中に文字
列“imaged”があったとする。同様にして静的辞
書、動的辞書の順に検索したが、文字列“image
d”は動的辞書に存在しなかったので、これを動的辞書
に登録したところが、図11である。
【0030】ここで、動的辞書が一杯になったとする。
前回削除した文字列(ここでは、削除するのは初めてな
ので、2文字以上の文字列のうち番号の一番小さい文字
列)から文字列番号の大きい方へ向かって動的辞書を検
索する(辞書の最後まで検索した場合は、最初に戻
る)。すると、文字列番号1036の文字列“image
s”が、子文字列の存在しない最初の文字列なので、こ
の文字列を動的辞書から削除する。この際、今回削除し
た文字列は、これと同じ親文字列を持つ文字列を差分文
字のアスキーコード順に並べると、2番目であり(文字
列“imaged”が1番目)、3番目の文字列が存在
しないので、1番目の文字列の弟文字列番号"1036"を削
除する。また、削除した文字列の親文字列は、静的辞書
中の文字列なので、削除した文字列の動的辞書中のアド
レス"1036"をハッシュテーブルから削除する。
【0031】以上述べたように、本実施例によれば、動
的辞書と比較すると、静的辞書は、1文字列あたり、2
/7の所用メモリで済むので、辞書のメモリ量を大幅に
削減できる。また、動的辞書への文字列の登録を、静的
辞書との差分として表現することで、文字列が動的辞書
と静的辞書に重複して登録されることを防ぎ、動的辞書
をより有効に活用できる。
【0032】次に、図12〜図16を用いて、第2の実
施例を説明する。第2の実施例は、前記第2、3、5、
6、7の方法の具体例である。図12は、第2の実施例
の機能構成の全体図を示す。ブロック1201はCPU
内の処理動作であり、入出力処理1203、制御処理1
204、検索処理1205、追加処理1206、削除処
理1207、の各処理から構成される。ブロック120
2は、ハードディスクや主記憶であり、静的辞書120
9、動的辞書1210、平文1211、圧縮文1208
を記憶する。
【0033】入出力処理1203は、圧縮文を入力し、
これを記憶する。また、復号化コマンドを入力し、制御
処理1204に渡す。制御処理1204は、復号化コマ
ンドを受け取ったときに、検索処理1205、登録処理
1206、削除処理1207を順次起動して圧縮文を復
号化する。
【0034】検索処理1205は、入力データ中の文字
列番号から、静的辞書および動的辞書を用いて、文字列
を復元する。登録処理1206は、入力データ中の文字
列が静的辞書および動的辞書中に存在しない時、その文
字列を動的辞書に登録する。削除処理1207は、動的
辞書が一杯になった時、文字列を動的辞書から削除す
る。これらの処理については、後に、図13〜図16を
用いて詳述する。
【0035】図13は、図12の制御1204の動作を
表すフローチャートである。ステップ131は、入力デ
ータから文字列番号(当該文字列番号)を読み込む。ス
テップ132は、当該文字列番号から動的辞書および静
的辞書を検索し、文字列を復元する。この処理の詳細に
ついては、図14を用いて後に説明する。ステップ13
3は、動的辞書に文字列を登録する。この処理の詳細に
ついては、図15を用いて後に説明する。ステップ13
4は、動的辞書が一杯になったかどうかを判定する。一
杯の場合は、ステップ135に進み、古い文字列を削除
する。この処理の詳細については、図16を用いて後に
説明する。動的辞書が一杯でない場合は、ステップ13
6へ進む。ステップ136は、復元した文字列を出力す
る。ステップ137は、入力データの最後まで復号を行
ったかどうかを判定する。行っていれば終了し、行って
いなければ、ステップ131に戻る。
【0036】ここで、図6、図11を用いて、読み込ま
れた文字列番号から動的辞書と静的辞書を用いて、文字
列を復元する過程を説明する。今、読み込んだ当該文字
列番号が4096とすると、これは、動的辞書の文字列番号
なので、動的辞書のそのアドレスを見に行くと、親文字
列番号が36952であり、差分文字が“d”であることが
わかった。(図11)次に、上で得られた親文字列番号
は、静的辞書の文字列番号なので、まず「差分テーブ
ル」を見に行く。すると、この文字列の差分文字は、
“e”であることがわかる。次に、「文字列検索テーブ
ル」を見に行くと、その親文字列番号は、25841である
ことがわかる。そこで、この親文字列番号を当該文字列
番号とし、同様の処理を繰り返すことで、1文字ずつ復
元でき、最後に、文字列“images”をすべて復元
できる。(図6)次に、図14を用いて、図13のステ
ップ132について詳述する。ステップ141は、今回
読み込んだ文字列番号(当該文字列番号)が、4096以上
なら静的辞書の、4096未満なら動的辞書中の文字列番号
であると判断する。動的辞書の番号であれば、ステップ
143へ進み、動的辞書を検索する。また、動的辞書の
番号でなければ、ステップ142に進み、静的辞書を検
索する。ステップ142では、動的辞書中の当該文字列
番号から差分文字と親文字列番号を得る。ステップ14
3では、まず、「差分テーブル」を見に行き、当該文字
列番号より差分文字を得る。次に、「文字列検索テーブ
ル」を見に行き、当該文字列より親文字列番号を得る。
ステップ144は、文字列番号から文字列へ、完全に復
元されたかどうかを判断している。これは、当該文字列
が、長さ1の文字列すなわち当該文字列番号が255以下
であるかによって判定する。文字列が復元されていたら
リターンし、されていなければステップ145に進ん
で、親文字列番号を当該文字列番号とし、ステップ14
1に戻る。
【0037】次に、図15を用いて、図13のステップ
133について詳述する。ステップ151は、図13の
前サイクルで出力した文字列を親文字列とし、今回復元
した文字列の先頭文字を差分文字として動的辞書に登録
する。ステップ152は、ステップ151で登録した文
字列と同じ親文字列を持つ文字列の差分文字を、アスキ
ーコード順に並べた時、今回登録した文字列が何番目に
なるかを判定する。1番目の場合は、ステップ154に
進み、親文字列の子文字列番号を今回登録の文字列番号
にする。n(>1)番目の場合は、ステップ153に進
み、n−1番目文字列の弟文字列番号をn番目の文字列
番号に変更する。ステップ155は、n+1番目文字列
が辞書に存在するかどうかを判断する。存在しなけれ
ば、そのままリターンする。存在すれば、ステップ15
6に進み、n番目の文字列の弟文字列番号をn+1番目
の文字列番号にして、リターンする。
【0038】次に、図16を用いて、図13のステップ
135について詳述する。ステップ160は、最近削除
した文字列から文字列番号の大きい方に向かって動的辞
書を検索し、子文字列の存在しない最初の文字列を削除
する。ステップ161は、ステップ160で削除した文
字列(当該文字列)が、同じ親文字列を持つ文字列を差
分文字のアスキーコード順に並べると何番目になるかを
判断している。1番目の場合は、ステップ162に進
み、2番目以上の場合は、ステップ165に進む。ステ
ップ162は、当該文字列の弟文字列(2番目文字列)
が動的辞書に存在するかどうかを判断する。存在すれ
ば、ステップ163に進み、当該文字列の親文字列の子
文字列番号を当該文字列の弟文字列(2番目文字列)と
する。存在しなければ、ステップ164に進み、当該文
字列の親文字列の子文字列番号を削除する。ステップ1
65も、当該文字列の弟文字列(n+1番目文字列)が動
的辞書に存在するかどうかを判断する。 存在すれば、
ステップ166に進み、n-1番目文字列の弟文字列番号
を当該文字列の弟文字列(n+1番目文字列)に変更。存
在しなければ、ステップ167に進み、n-1番目文字列
の弟文字列番号を削除する。ステップ168は、削除し
た文字列の親文字列は、静的辞書中の文字列かどうかを
判断している。そうなら、ステップ169に進み、削除
した文字列の動的辞書中のアドレスをハッシュテーブル
から削除し、リターンする。そうでないなら、そのまま
リターンする。
【0039】以上述べたように、本実施例によれば、圧
縮時とまったく同様に、静的辞書や動的辞書を素早く検
索でき、動的辞書に文字列を登録、削除でき、平文を正
しく復元することができる。
【0040】次に、図17を用いて、第3、第4の実施
例を説明する。第3の実施例は、前記第8、10の方法
の具体例であり、第4の実施例は、前記第9、10の方
法の具体例である。図17は、2つのサーバーがそれぞ
れ4つのクライアントと通信している様子である。個々
のサーバ及びクライアントにおける圧縮、復元の処理方
法は、上記第1、2の実施例と同じである。本構成によ
ると、動的辞書のみ用いる従来方式では、サーバでは4
倍、クライアントでは2倍のメモリが必要であったが、
今回の方式では、動的辞書の部分のみ4倍あるいは2倍
にすればよい。このように、本実施例によれば、辞書に
必要なメモリ量を削減することができる。
【0041】以上述べたように、本実施例によれば、入
力データを圧縮、伸長する際、静的辞書と動的辞書を併
用することを活かして、複数の通信相手がある場合のシ
ステム全体の所用メモリを削減できる。
【0042】最後に、典型的なネットワーク構成による
実施例1〜4の総合効果を述べる。図17のように、2
つのサーバと4つのクライアントの間で通信していると
する。従来は、動的辞書のみで通信していた。今、動的
辞書の大きさを10000文字列とすると、動的辞書の
メモリ量は、1文字列あたり7バイト必要なので、クラ
イアントの所用メモリ量は、10000*7*2=14
0kバイト、サーバの所用メモリ量は、10000*7
*4=280kバイトとなる。しかし、今回発明した方
法では、動的辞書と静的辞書を併用しているため、動的
辞書の大きさを2500文字列、静的辞書の大きさを7
500文字列にでき、静的辞書のメモリ量は、1文字列
あたり2バイト、動的辞書のメモリ量は、1文字列あた
り11バイト必要なので、クライアントの所用メモリ量
は、7500*2+2500*11*2=70kバイ
ト、サーバの所用メモリ量は、7500*2+2500
*11*4=125kバイトとなり、所用メモリ量は、
クライアントで半分、サーバで半分以下になる。もし、
同じメモリ量を使えるなら、圧縮率は、2倍の効率にな
る。
【0043】
【発明の効果】文字列の検索のみを行えばよい静的辞書
の特徴を活かすことで、動的辞書と比べて1文字列あた
りの所用メモリを1/3以下にした。さらに、文字列
を、静的辞書中の文字列との差分として動的辞書に登録
することで、動的辞書をより有効なものにした。また、
複数の相手と通信する場合、各サーバまたはクライアン
トに静的辞書を持ち、動的辞書と併用することで、動的
辞書のみ用いていた従来方式よりも、システム全体のメ
モリ量を削減できる。典型的なシステム構成の場合、メ
モリ量は、クライアントで半分、サーバで半分以下にな
る。一方、同じメモリ量の辞書を用いた場合、多数の文
字列を登録できるので、圧縮率が向上できる。
【図面の簡単な説明】
【図1】入力データに応じて動的辞書を作成した一例を
示す図である。
【図2】本発明の一実施例の機能構成を示す全体図であ
る。
【図3】入力データ(平文)を読み込んで符号化を終了
するまでの一連の処理を示すフローチャートである。
【図4】静的辞書の構成を示す図である。
【図5】静的辞書の検索部分を示すフローチャートであ
る。
【図6】静的辞書の内容の例を示す図である。
【図7】ハッシュテーブルと動的辞書の構成を示す図で
ある。
【図8】圧縮(符号化)時に、動的辞書、静的辞書中の
文字列を検索する部分を示すフローチャートである。
【図9】圧縮(符号化)時に、動的辞書へ文字列を登録
する部分を示すフローチャートである。
【図10】圧縮(符号化)時に、動的辞書から文字列を
削除する部分を示すフローチャートである。
【図11】ハッシュテーブルと動的辞書の内容の例を示
す図である。
【図12】本発明の他の実施例の機能構成を示す全体図
である。
【図13】入力データ(圧縮文)を読み込んで復号化を
終了するまでの一連の処理を示すフローチャートであ
る。
【図14】伸長(復号化)時に、読み込んだ文字列番号
から動的辞書と静的辞書を探索して、文字列を復元する
部分を示すフローチャートである。
【図15】伸長(復号化)時に、動的辞書へ文字列を登
録する部分を示すフローチャートである。
【図16】伸長(復号化)時に、動的辞書から文字列を
削除する部分を示すフローチャートである。
【図17】本発明の他の実施例を示す図である。
【符号の説明】
101…CPU、 103…入出力処理部、 104…制御処理部、 105…検索処理部、 106…登録処理部、 107…削除処理部、 108…静的辞書、 109…ハッシュテーブル、 110…動的辞書、 111…圧縮文、 112…平文。

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】データを入力または受信する入力処理手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の記号列を前記記号列記憶手段中の記号列の
    識別子で表すことにより入力データを圧縮する圧縮処理
    手段とを有する情報処理システムにおいて、 前記記号列記憶手段中の記号列の少なくとも一部は、入
    力データに依存した追加、削除がなされない静的記号列
    であり、当該静的記号列の各々は、親となる記号列の識
    別子および当該記号列と親記号列の差分となる文字によ
    り表現され、前記親記号列識別子と差分文字の少なくと
    も一方に関して整列されており、 前記圧縮処理は、上記記号列の整列順序に基づいて、入
    力データ中の記号列と一致する記号列を前記記号列記憶
    手段から探索することを特徴とするデータ圧縮方法。
  2. 【請求項2】データを入力または受信する入力処理手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の識別子から前記記号列記憶手段中の記号列
    を復元することにより入力データを伸長する伸長処理手
    段を有する情報処理システムにおいて、 前記記号列記憶手段中の記号列の少なくとも一部は、入
    力データに依存した追加、削除がなされない静的記号列
    であり、当該静的記号列の各々は、親となる記号列の識
    別子および当該記号列と親記号列の差分となる文字によ
    り表現され、上記親記号列識別子と差分文字の少なくと
    も一方に関して整列されており、 前記伸長処理は、前記記号列の整列順序に基づいて、入
    力データ中の識別子に対応する記号列を記号列記憶手段
    から探索することを特徴とするデータ圧縮方法。
  3. 【請求項3】請求項1又は請求項2記載のデータ圧縮方
    法において、 前記整列された記号列の順序が、主記憶内における記号
    列の配置順序により表されており、記号列の順序を表す
    ための他の情報が記憶されていないことを特徴とするデ
    ータ圧縮方法。
  4. 【請求項4】データを入力または受信する入力処理手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の記号列を前記記号列記憶手段中の記号列の
    識別子で表すことにより入力データを圧縮する圧縮処理
    手段を有する情報処理システムにおいて、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、前記動的記号列が上記静的記号列と共
    通部分を有する場合に、前記動的記号列を前記静的記号
    列との差分により表現することを特徴とするデータ圧縮
    方法。
  5. 【請求項5】データを入力または受信する入力処理手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の識別子から上記記号列記憶手段中の記号列
    を復元することにより入力データを伸長する伸長処理手
    段を有する情報処理システムにおいて、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、上記動的記号列が上記静的記号列と共
    通部分を有する場合に、上記動的記号列を上記静的記号
    列との差分により表現することを特徴とするデータ圧縮
    方法。
  6. 【請求項6】請求項4又は請求項5記載ののデータ圧縮
    方法において、 前記静的記号列の識別子あるいはこの識別子を元にして
    算出した値が、この静的記号列と共通部分を有する動的
    記号列のデータに含まれることを特徴とするデータ圧縮
    方法。
  7. 【請求項7】請求項4又は請求項5記載のデータ圧縮方
    法において、 前記静的記号列と、当該静的記号列との差分により表現
    した動的記号列との対応関係を表す情報を設けることを
    特徴とするデータ圧縮方法。
  8. 【請求項8】データを入力または受信する入力処理手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の記号列を上記記号列記憶手段中の記号列の
    識別子で表すことにより入力データを圧縮する圧縮処理
    手段を有する情報処理システムにおいて、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、異なる入力データあるいは入力データ
    の異なる部分に対する各々の圧縮処理が、静的記号列に
    ついては同じものを共通に利用し、動的記号列について
    は同じものを共通に利用しないことを特徴とするデータ
    圧縮方法。
  9. 【請求項9】データを入力または受信する入力処理手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の識別子から上記記号列記憶手段中の記号列
    を復元することにより入力データを伸長する伸長処理手
    段を有する情報処理システムにおいて、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、異なる入力データあるいは入力データ
    の異なる部分に対する各々の伸長処理が、静的記号列に
    ついては同じものを共通に利用し、動的記号列について
    は同じものを共通に利用しないことを特徴とするデータ
    圧縮方法。
  10. 【請求項10】請求項8又は請求項9記載のデータ圧縮
    方法において、 前記各々の圧縮処理が、通信相手毎の圧縮処理であるこ
    とを特徴とするデータ圧縮方法。
  11. 【請求項11】データを入力または受信する入力手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の記号列を前記記号列記憶手段中の記号列の
    識別子で表すことにより入力データを圧縮する圧縮手段
    とを有する情報処理装置において、 前記記号列記憶手段中の記号列の少なくとも一部は、入
    力データに依存した追加、削除がなされない静的記号列
    であり、これらの静的記号列の各々は、親となる記号列
    の識別子および当該記号列と親記号列の差分となる文字
    により表現され、上記親記号列識別子と差分文字の少な
    くとも一方に関して整列されており、 前記圧縮手段は、前記記号列の整列順序に基づいて、入
    力データ中の記号列と一致する記号列を前記記号列記憶
    手段から探索することを特徴とするデータ圧縮装置。
  12. 【請求項12】データを入力または受信する入力手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の識別子から上記記号列記憶手段中の記号列
    を復元することにより入力データを伸長する伸長手段を
    有する情報処理装置において、 前記記号列記憶手段中の記号列の少なくとも一部は、入
    力データに依存した追加、削除がなされない静的記号列
    であり、当該静的記号列の各々は、親となる記号列の識
    別子および当該記号列と親記号列の差分となる文字によ
    り表現され、前記親記号列識別子と差分文字の少なくと
    も一方に関して整列されており、 前記伸長手段は、上記記号列の整列順序に基づいて、入
    力データ中の識別子に対応する記号列を前記記号列記憶
    手段から探索することを特徴とするデータ圧縮装置。
  13. 【請求項13】請求項11又は請求項12記載のデータ
    圧縮装置において、 前記整列された記号列の順序が、主記憶内における記号
    列の配置順序により表されており、記号列の順序を表す
    ための他の情報が記憶されていないことを特徴とするデ
    ータ圧縮装置。
  14. 【請求項14】データを入力または受信する入力手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の記号列を前記記号列記憶手段中の記号列の
    識別子で表すことにより入力データを圧縮する圧縮手段
    を有する情報処理装置において、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、前記動的記号列が上記静的記号列と共
    通部分を有する場合に、前記動的記号列を前記静的記号
    列との差分により表現することを特徴とするデータ圧縮
    装置。
  15. 【請求項15】データを入力または受信する入力手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の識別子から前記記号列記憶手段中の記号列
    を復元することにより入力データを伸長する伸長手段を
    有する情報処理装置において、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、前記動的記号列が前記静的記号列と共
    通部分を有する場合に、前記動的記号列を前記静的記号
    列との差分により表現することを特徴とするデータ圧縮
    装置。
  16. 【請求項16】請求項14又は請求項15記載のデータ
    圧縮装置において、 前記静的記号列の識別子あるいはこの識別子を元にして
    算出した値が、この静的記号列と共通部分を有する動的
    記号列のデータに含まれることを特徴とするデータ圧縮
    装置。
  17. 【請求項17】請求項14又は請求項15記載のデータ
    圧縮方法において、 前記静的記号列と、この静的記号列との差分により表現
    した動的記号列との対応関係を表す情報を設けることを
    特徴とするデータ圧縮装置。
  18. 【請求項18】データを入力または受信する入力手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の記号列を前記記号列記憶手段中の記号列の
    識別子で表すことにより入力データを圧縮する複数の圧
    縮手段を有する情報処理装置において、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、前記複数の圧縮手段が、静的記号列に
    ついては同じものを共通に利用し、動的記号列について
    は同じものを共通に利用しないことを特徴とするデータ
    圧縮装置。
  19. 【請求項19】データを入力または受信する入力手段
    と、一つ以上の記号列を記憶する記号列記憶手段と、入
    力データ中の識別子から前記記号列記憶手段中の記号列
    を復元することにより入力データを伸長する複数の伸長
    手段を有する情報処理システムにおいて、 前記記号列記憶手段中の記号列の一部は、入力データに
    依存して追加、削除される動的記号列であり、残りの一
    部は、入力データに依存した追加、削除がなされない静
    的記号列であり、上記複数の伸長手段が、静的記号列に
    ついては同じものを共通に利用し、動的記号列について
    は同じものを共通に利用しないことを特徴とするデータ
    圧縮装置。
  20. 【請求項20】請求項18又は請求項19記載のデータ
    圧縮装置において、 前記各々の圧縮手段が、通信相手毎に割り当て割れるこ
    とを特徴とするデータ圧縮装置。
JP6589797A 1997-03-19 1997-03-19 データ圧縮方法および装置 Pending JPH10261969A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6589797A JPH10261969A (ja) 1997-03-19 1997-03-19 データ圧縮方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6589797A JPH10261969A (ja) 1997-03-19 1997-03-19 データ圧縮方法および装置

Publications (1)

Publication Number Publication Date
JPH10261969A true JPH10261969A (ja) 1998-09-29

Family

ID=13300227

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6589797A Pending JPH10261969A (ja) 1997-03-19 1997-03-19 データ圧縮方法および装置

Country Status (1)

Country Link
JP (1) JPH10261969A (ja)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007124561A (ja) * 2005-10-31 2007-05-17 Fujitsu Ltd データ圧縮方法及び圧縮データ送信方法
JP2007129683A (ja) * 2006-03-13 2007-05-24 Fujitsu Ltd 圧縮データ送信方法
JP2011114546A (ja) * 2009-11-26 2011-06-09 Fujitsu Ltd データ圧縮装置、データ伸長装置、データ圧縮プログラム、及びデータ伸長プログラム
JP2017028374A (ja) * 2015-07-16 2017-02-02 富士通株式会社 符号化プログラム、符号化装置、符号化方法、照合プログラム、照合装置および照合方法
RU2611257C1 (ru) * 2015-10-01 2017-02-21 Акционерное общество "Калужский научно-исследовательский институт телемеханических устройств" Способ подготовки, хранения и передачи оперативно-командной информации в комплексах телекодового управления
EP3236367A2 (en) 2016-04-18 2017-10-25 Fujitsu Limited Encoding program, encoding method, encoding device, retrieval program, retrieval method, and retrieval device
JP2017194803A (ja) * 2016-04-19 2017-10-26 富士通株式会社 符号化プログラム、符号化装置および符号化方法
JP2017194762A (ja) * 2016-04-18 2017-10-26 富士通株式会社 インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法
US11520765B2 (en) 2017-04-06 2022-12-06 Fujitsu Limited Computer-readable recording medium recording index generation program, information processing apparatus and search method

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007124561A (ja) * 2005-10-31 2007-05-17 Fujitsu Ltd データ圧縮方法及び圧縮データ送信方法
JP2007129683A (ja) * 2006-03-13 2007-05-24 Fujitsu Ltd 圧縮データ送信方法
JP2011114546A (ja) * 2009-11-26 2011-06-09 Fujitsu Ltd データ圧縮装置、データ伸長装置、データ圧縮プログラム、及びデータ伸長プログラム
JP2017028374A (ja) * 2015-07-16 2017-02-02 富士通株式会社 符号化プログラム、符号化装置、符号化方法、照合プログラム、照合装置および照合方法
US9628110B2 (en) 2015-07-16 2017-04-18 Fujitsu Limited Computer-readable recording medium, encoding apparatus, encoding method, comparison apparatus, and comparison method
RU2611257C1 (ru) * 2015-10-01 2017-02-21 Акционерное общество "Калужский научно-исследовательский институт телемеханических устройств" Способ подготовки, хранения и передачи оперативно-командной информации в комплексах телекодового управления
EP3236367A2 (en) 2016-04-18 2017-10-25 Fujitsu Limited Encoding program, encoding method, encoding device, retrieval program, retrieval method, and retrieval device
JP2017194762A (ja) * 2016-04-18 2017-10-26 富士通株式会社 インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法
US10521414B2 (en) 2016-04-18 2019-12-31 Fujitsu Limited Computer-readable recording medium, encoding method, encoding device, retrieval method, and retrieval device
EP3236367B1 (en) * 2016-04-18 2023-09-13 Fujitsu Limited Encoding program, encoding method, encoding device, retrieval program, retrieval method, and retrieval device
JP2017194803A (ja) * 2016-04-19 2017-10-26 富士通株式会社 符号化プログラム、符号化装置および符号化方法
US11520765B2 (en) 2017-04-06 2022-12-06 Fujitsu Limited Computer-readable recording medium recording index generation program, information processing apparatus and search method

Similar Documents

Publication Publication Date Title
Adjeroh et al. The Burrows-Wheeler Transform:: Data Compression, Suffix Arrays, and Pattern Matching
US8255398B2 (en) Compression of sorted value indexes using common prefixes
US5229768A (en) Adaptive data compression system
US5999949A (en) Text file compression system utilizing word terminators
JP3273119B2 (ja) データ圧縮・伸長装置
US5561421A (en) Access method data compression with system-built generic dictionaries
US8712977B2 (en) Computer product, information retrieval method, and information retrieval apparatus
US5854597A (en) Document managing apparatus, data compressing method, and data decompressing method
US20020152219A1 (en) Data interexchange protocol
US5150119A (en) Data compression method and apparatus
JP5831298B2 (ja) プログラム、情報処理装置およびインデックス生成方法
JPH1153349A (ja) タグ文書の圧縮装置および復元装置,圧縮方法および復元方法,圧縮/復元装置および圧縮/復元方法並びに圧縮,復元もしくは圧縮/復元プログラムを記録したコンピュータ読み取り可能な記録媒体
JP4003854B2 (ja) データ圧縮装置及び復元装置並びにその方法
US9665590B2 (en) Bitmap compression for fast searches and updates
JPS6356726B2 (ja)
KR100495593B1 (ko) 파일 처리 방법, 데이터 처리 장치, 및 기억 매체
JPH10261969A (ja) データ圧縮方法および装置
US9424293B2 (en) Row, table, and index compression
JP2536422B2 (ja) デ―タ圧縮装置及びデ―タ復元装置
JP4821287B2 (ja) 構造化文書の符号化方法、符号化装置、符号化プログラム、復号装置及び符号化された構造化文書のデータ構造
JP4726046B2 (ja) 文字列検索装置及びコンピュータプログラム及び文字列検索方法
US10956440B2 (en) Compressing a plurality of documents
Zhang Transform based and search aware text compression schemes and compressed domain text retrieval
JPH01314430A (ja) 可変ビット長コード語のビット長通信方法
JP3053656B2 (ja) データ圧縮における辞書登録方式