JP2952068B2 - データ圧縮及び復元方式 - Google Patents

データ圧縮及び復元方式

Info

Publication number
JP2952068B2
JP2952068B2 JP3056706A JP5670691A JP2952068B2 JP 2952068 B2 JP2952068 B2 JP 2952068B2 JP 3056706 A JP3056706 A JP 3056706A JP 5670691 A JP5670691 A JP 5670691A JP 2952068 B2 JP2952068 B2 JP 2952068B2
Authority
JP
Japan
Prior art keywords
dictionary
data
character
address
memory
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
JP3056706A
Other languages
English (en)
Other versions
JPH0683575A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP3056706A priority Critical patent/JP2952068B2/ja
Publication of JPH0683575A publication Critical patent/JPH0683575A/ja
Application granted granted Critical
Publication of JP2952068B2 publication Critical patent/JP2952068B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Image Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ユバーサル符号化の一
種である増分分解型の改良としてのLZW符号化による
デ−タ圧縮及び復元方式に関する。
【0002】近年、文字コ−ド、ベクトル情報、画像な
ど様々な種類のデ−タがコンピュ−タで扱われるように
なっており、扱われるデ−タ量も急速に増加してきてい
る。大量のデ−タを扱うときは、デ−タの中の冗長な部
分を省いてデ−タ量を圧縮することで、記憶容量を減ら
したり、速く伝送したりできるようになる。このような
様々なデ−タを1つの方式でデ−タ圧縮できる方法とし
てユニバ−サル符号化が提案されている。
【0003】ここで、本発明の分野は、文字コ−ドの圧
縮に限らず、様々なデ−タに適用できるが、以下では、
情報理論で用いられている呼称を踏襲し、デ−タの1ワ
ード単位を文字と呼び、デ−タが複数ワードツながった
ものを文字列と呼ぶことにする。
【0004】ユニバ−サル符号の代表的な方法として、
ジブーレンペル(Ziv-Lempel)符号がある(詳しくは、
例えば、宗像「Ziv-Lempelのデ−タ圧縮法」、情報処
理、Vol.26,No.1,1985年を参照のこと)。ジフーレンペ
ル符号では、 ユニバ−サル型 増分分解型(Incremental parsing ) の2つのアルゴリズムが提案されている。
【0005】更に、ユニバ−サル型アルゴリズムの改良
として、LZSS符号がある(T.C.Bell, “Better OPM
/L Text Compression ”,IEEE Trans. on Commun.,Vol.
COM-34,No.12,DEC.1986 参照)。また、増分分解型アル
ゴリズムの改良としては、LZW(Lempel-Ziv-Welch)
符号がある(T.A.Welch,“A Technique for High-Perfo
rmance Data Compression ”,Computer,June 1984 参
照)。
【0006】これらの符号の内、高速処理ができること
と、アルゴリズムの簡単さからLZW符号が記憶装置の
ファイル圧縮などで使われるようになっている。
【0007】
【従来の技術】従来のLZW符号による符号化処理フロ
ーを第10図に示し、復号化処理フローを図11に示
す。まずLZW符号化処理は、書き替え可能な辞書を持
ち、入力文字列の中を相異なる文字列(部分列)に分
け、この文字列を出現した順に参照番号を付けて辞書に
登録すると共に、現在入力している文字列を、辞書に登
録してある最長一致文字列の参照番号で表して符号化す
るものである。
【0008】図12にLZW符号化の説明図を示すと共
に図14にLZW復号化の説明図を示し、更に図13に
符号化及び復号化時に作成される辞書構成例を示す。
尚、図12,13,14にあっては説明を簡単にするた
め、abcの3文字の組合せからなるデ―タを圧縮、復
元する場合の例を取り上げている。図10のLZW符号
化処理では、まずステップS1で予め辞書に全文字につ
き一文字からなる文字列を初期値として登録してから符
号化を始める。
【0009】ステップS1の符号化は入力した最初の文
字Kにより辞書を検索して参照番号ωを求め、これを語
頭文字列とする。次にステップS2で入力データの次の
文字Kを読込み、ステップS3で文字入力が終了したか
否かチェックした後、ステップS4に進んでステップS
1で求めた語頭文字列ωにステップS2で読込んだ文字
Kを加えた拡張文字列(ωK)が辞書にあるか否か探
す。
【0010】ステップS4で文字列(ωK)が辞書にな
ければ、ステップS6に進んでステップS1で求めた文
字Kの参照番号ωを符号語code(ω)として出力し、ま
た文字列(ωK)に新たな参照番号を付加して辞書に登
録し、更にステップS2の入力文字Kを参照番号ωに置
き換えると共に辞書アドレスnをインクリメントしてス
テップS2に戻って次の文字Kを読み込む。
【0011】一方、ステップS4で文字列(ωK)が辞
書にあればステップS5で文字列(ωK)を参照番号ω
に置き換え、再びステップS2に戻ってステップS4で
文字列(ωK)が辞書から探せなくなるまで最大一致長
の検索を続ける。
【0012】図12,13を参照してLZW符号化を具
体的に説明すると次のようになる。まず図12の入力デ
ータinput は左から右へと読む。最初の文字aを入力し
た時、辞書には文字aの他に一致する文字列がないの
で、OUTPUT CODE 1(参照番号ω)を符号語して出力す
る。そして文字aを語頭文字列ωとする。次に2番目の
文字bを入力したとすると、この入力文字を語頭文字列
ωに加えた拡張文字列ωK=abは辞書にないことか
ら、文字bのOUTPUT CODE 2を符号語として出力する。
そして、拡張文字列ωK=abに参照番号4を付けて辞
書に登録する。実際の辞書登録は図13の右側に示すよ
うに文字列1bとして登録される。そして文字bが語頭
文字列ωとなる。
【0013】続いて3番目の文字aを入力したとする
と、文字bに語頭文字列ωを加えた拡張文字列ωK=b
a=2aは辞書にないことから、文字aのOUTPUT CODE
1 を符号語として出力した後、拡張文字列ωK=baを
2aで表わし、参照番号5を付けて辞書に登録する。そ
して文字aが新たな語頭文字列ωとなる。4番目の入力
文字bについては拡張文字列ωK=abは1bの符号語
4として既に辞書に登録されているので、文字列ωKを
新たな語頭文字列ωとし、5番目の文字cを入力して拡
張文字列ωK=4c=abcを作る。この拡張文字列ω
K=abcは辞書に登録されていないことから、文字列
ab=1bのOUTPUT CODE4 を符号語として出力し、拡
張文字列ωK=abcを辞書に4cの形で符号語6とし
て登録する。以下同様に、この処理を続ける。
【0014】図11の復号化処理は図10の符号化の逆
の操作を行う。図11のLZW復号化では、符号化時と
同様に予め辞書に全文字につき一文字からなる文字列を
初期値として登録してから復号化を始める。まずステッ
プS1で最初の符号(参照番号)を読込み、現在のCODE
をOLDcodeとし、最初の符号は既に辞書に登録された一
文字の参照番号いずれかに該当することから、入力符号
CODEに一致する文字code(K) を探し出し、文字Kを出力
する。
【0015】尚、出力した文字Kは後の例外処理のため
FINchar にセットしておく。次にステップS2に進んで
次の符号を読込んでCODEにINcodeとしてセットする。ス
テップS3で新たな符号があるか否か、即ち符号入力の
終了の有無をチェックしてステップS4に進み、ステッ
プS3で入力された符号CODEが辞書に定義(登録)され
ているか否かチェックする。
【0016】通常、入力した符号語は前回までの処理で
辞書に登録されているため、ステップS5に進んで符号
CODEに対応する文字列code(ωK)を辞書から読出し、
ステップS6で文字Kを一時的にスタックし、参照番号
CODE(ω)を新な符号CODEとして再度ステップS5に戻
り、このステップS5,ステップS6の手順を再帰的に
参照番号ωが一文字Kに至るまで繰り返し、最後にステ
ップS7に進んでステップS6でスタックした文字をL
IFO(Last In Fast Out) 形式でポップアップして出
力する。
【0017】同時にステップS7において、前回使った
符号ωと今回復元した文字列の最初の1文字Kを組(ω
K)と表した文字列に、新たな参照番号を付加して辞書
に登録する。
【0018】図14を参照してLZW復号化処理を具体
的に説明すると次のようになる。まず図14で最初の入
力符号語(INPUT CODE)は1であり、一文字a,b,cに
ついては既に参照番号1,2,3として図13に示すよ
うに辞書に登録されているため、辞書の参照により符号
語1に一致する参照番号の文字列aに置き換えて出力す
る。
【0019】次の符号語2についても同様にして文字b
に置き換えて出力する。このとき前回処理した符号語1
と今回復号した文字列の1番目の文字bとを組合わせた
文字列ωK=1bに新たな参照番号4を付加して辞書に
登録する。3番目の符号語4は辞書の検索により求めた
文字列1bから文字列abと置き換えて文字列abを出
力する。同時に前回処理した符号語2と今回復号した文
字列の1番目の文字aとの組合せた文字列ωK=2a
(=ba)に新たな参照番号5を付加して辞書に登録す
る。
【0020】以下同様に、この処理を繰り返す。
【0021】図14のLZW復号化では次の例外処理が
ある。この例外処理は、第6番目の入力符号語8の復号
で生ずる。符号語8は復号時に辞書に定義されておら
ず、復号できない。この場合には、前回処理した符号語
5に前回復号した文字列baの最初の一文字bを加えた
文字列5bを求め、更に 5b=2ab=bab と置き換えて出力する例外処理を行う。そして、文字列
の出力後に前回の符号語5に今回復号した文字列の1番
目の文字bを加えた文字列5bに参照番号8を付加して
辞書に登録する。
【0022】この例外処理は、図11の復号化処理フロ
ーのステップS4,ステップS8の処理を通じて行わ
れ、最終的にステップS7で文字列の出力と新たな文字
列に参照番号を付加した辞書への登録がステップS7で
行われる。尚、11,14のLZW復号化は、復号側で
符号を解読しながら辞書をリアルタイムで作り出す場合
を説明したが、符号化の際に作られた辞書をそのまま復
号化側にコピーとして使用することで符号化しても良
い。この場合に復号化側での例外処理は不要になる。
【0023】しかし図10の処理フロー図に示す手順で
LZW符号化を行うと、1つの文字列を辞書検索するた
びに、最悪、辞書全体をサ−チしなければならならず、
辞書検索に時間がかかる問題があった。そこで従来の辞
書検索方式にあっては、外部ハッシュ法(open hashing
又はchaining)を用いて処理速度を上げている。
【0024】まず一般的なハッシュ法による辞書検索に
あっては、複数の文字列からなる集合Sを考えたとき、
集合Sの文字列xの格納位置を、文字列xそのものから
格納位置を示すアドレスを直接計算できる仕組みになっ
ており、高速の辞書検索ができる。文字列の記憶場所、
即ちハッシュ表に0からm-1 までのアドレスが付されて
いるとすると、ハッシュ法では、関数 h:S→〔0,1,・・・,m-1 〕 を一つ定めて、集合Sの文字列xのアドレスをh(x)
として求める。この関数hをハッシュ関数、値h(x)
を文字列xのハッシュアドレスという。
【0025】ハッシュ法は、通常、集合Sの大きさがア
ドレス数mに比べてはるかに大きい場合に用いられる。
しかしながら、ハッシュ関数hをどのように選んだとし
ても、集合Sの相異なる文字列x1,x2に対して h(x1)=h(x2) ハッシュアドレスが一致してしまう場合が起こり得る。
これを衝突と呼び、衝突に対する対策の一つとして外部
ハッシュ法(open hashing, またはchaining)が用いら
れる。
【0026】外部ハッシュ法は図15に示すように、索
引(ディレクトリ)で示されるハッシュアドレスi毎に
連結リストを用意し、衝突を起こしたハッシュアドレス
h(x)=iの文字列xは、連結リストの先頭から順番
に格納する。同じハッシュアドレスh(x)をもつそれ
ぞれの連結リストはバケット(bucket) と呼ばれる。
【0027】辞書検索に外部ハッシュ法のリスト構造を
利用したLZW符号化の処理フローを図16に示す。ま
た図17に従来の辞書の構成例を示し、この辞書構成に
対応して辞書メモリ上の配置を図18に示す。まず図1
8において、辞書メモリは、ファーストメモリ(fir
st)100、ネクストメモリ(next)200及び
拡張メモリ(extention;extと省略)30
0で構成される。ここでファーストメモリ100が図1
5に示した外部ハッシュ法の索引(ディレクトリ)に対
応し、ネクストメモリ200が図15の連結リストの
「next」に対応し、更に拡張メモリ300が図15の
「name」に対応する。
【0028】また図17の辞書構成にあっては、右下に
取出して示すように、1つのノードに次の情報を示して
いる。 (1)ノード内 ; 拡張メモリの登録シンボル (2)ノード左上; アドレス (3)ノード左下; 次のファーストメモリのアドレス (4)ノード右下; ネクストメモリのアドレス 尚、数値Oはメモリ内容が空であることを示す。 図16のLZW符号化処理を、説明を簡単にするため文
字A、B、Cの3文字を対象とした場合を例にとって説
明すると次のようになる。
【0029】まずステップS1で次の初期化処理を行
う。 (1)第1番目の文字を含むように辞書を初期化する。
ここでアルファベットA、B、Cの3文字を対象として
いることから、A、B、Cの文字コードをそのままハッ
シュアドレスとして図18の辞書メモリのアドレス1,
2,3に登録する。
【0030】(2)辞書への現在文字登録数nを前記
(2)で登録した文字数にセットする。アルファベット
3文字の場合には、n=3となる。 (3)入力した最初の文字Kを語頭文字列iとする。こ
の場合、最初の入力文字は「A」であることから語頭文
字列i=1とする。 (4)辞書検索用配列を0に初期化する。即ち、ファー
スト、ネクスト及び拡張のメモリの検索用配列はfirst
[1,Nmax],next[1,Nmax]、EXT [1,Nmax]で表わされ
るので、これを0に初期化する。
【0031】以上のステップS1の初期化処理が済んだ
ならば、ステップS2移行の処理に進み、その結果、現
在図17及び図18に示す辞書が作成された段階にある
ものとする。この状態でいま文字列「AAAA」を入力
して符号化する場合の処理を説明する。
【0032】ステップS1の初期化は済んでいるので、
最初の入力文字「A」を語頭文字列ω=1とし、ステッ
プS1で最初の入力文字「A」を語頭文字列ω=1と
し、ステップS2で2番目の入力文字「A」を読む。続
いてステップS3で未処理文字があることが判別されて
ステップS5〜ステップS9に示す辞書検索ステップに
進む。
【0033】辞書検索ステップでは、まずステップS5
で語頭文字列ω=1をカウンタiにi=1としてセット
し、且つjカウンタをj=0にセットする。ここでカウ
ンタiはファーストメモリの格納値で指定される辞書メ
モリのアドレス値であり、またカンウタjはネクストメ
モリの格納値で指定される辞書メモリのアドレス値であ
る。
【0034】次にステップS6でiカウンタで指定され
た図16の辞書メモリのアドレス1の内容を読み、拡張
メモリ300からシンボル(smbol)として「A」
を読出し、またファーストメモリ100から次のファー
ストアドレス「4」を読出してiカウンタをi=4にセ
ットする。続いてステップS7に進み、辞書登録ステッ
プに移行するか否か判断するためにi=0か否かチェッ
クし、このときi=4であることからステップS8に進
み、ステップS6のアドレス1の拡張メモリ300を参
照して得たシンボル「A」と、1番目の入力文字「A」
との一致を判別する。この場合、両者は一致しているこ
とからステップS2に戻り、3番目の入力文字「A」を
読込む。
【0035】続いてステップS3を介してステップS5
に進み、辞書メモリのアドレスωにそのときのカウンタ
iの値i=4をセットし、辞書メモリのアドレス4を参
照する。次にステップS6で辞書メモリのアドレス4の
内容を読み、拡張メモリ300に格納したシンボル(s
mbol)として「B」を読出し、またファーストメモ
リ100から次のファーストアドレス「6」を読出して
iカウンタをi=6にセットする。
【0036】続いてステップS7に進み、i=0か否か
チェックし、このときi=6であることからステップS
8に進み、ステップS6のアドレス4の拡張メモリ30
0から得たシンボル「B」と、ステップS2で得ている
入力文字「A」との一致を判別する。この場合、両者は
不一致あることからステップS9に進む。ステップS9
では、まずiカウンタに辞書メモリのアドレス4の参照
でネクストメモリ200から得たj=10の値をセット
してi=10とする。このiカウンタとjカウンタの置
き換えは、ステップS7の判断をiカウンタについての
み行っていることから、これをjカウンタについてもで
きるようにするためである。
【0037】続いて置き換えが済んだiカウンタで指定
される辞書メモリのアドレス10を参照し、アドレス1
0の拡張メモリ300に格納したシンボル「A」を読出
し、更に、アドレス10のファーストメモリ100に格
納している次のファーストメモリのアドレス値11をi
カウンタにセットする。次にステップS7に戻り、この
ときi=11であることからステップS9で得られたア
ドレス10のシンボル「A」と入力文字「A」とを比較
し、一致していることからステップS2に進み、3番目
の文字の処理に進む。
【0038】3番目及び4番目の入力文字「A」につい
ては1番目の入力文字と同様の処理が行われ、辞書メモ
リのアドレス10から11、更にアドレス11から12
に進み、アドレス12の処理が済むとステップS3で処
理対象となる文字がなくなることからステップS16に
進んで最終アドレスω=12を符号語code(ω)と
して出力して一連の処理を終える。
【0039】次にステップS11〜ステップS15の辞
書登録ステップの処理を説明する。辞書登録は辞書検索
ステップのファーストメモリ100又はネクストメモリ
200の検索でi=0となった時に行われる。即ち、ス
テップS7でi=0が判別されると、もはや辞書検索は
できないのでステップS10でそのときの辞書アドレス
ωを符号語code(ω)として出力して辞書登録ステ
ップに入る。
【0040】辞書登録ステップでは、まずステップS1
1でその時点での辞書メモリの現在登録文字数nをiカ
ウンタにセットし、更にnを1つインクリメントする。
続いてステップS12でj=0か否かチェックし、j=
0でなければi=0であるのでステップS13に進んで
ファーストメモリ100の登録処理を行う。j=0であ
ればステップS14に進んでネクストメモリの登録処理
を行う。
【0041】ステップS13のファーストメモリ100
の登録処理は、(1)iカウンタで指定されるメモリア
ドレスnのファーストメモリ100に中に、次の登録先
を示す(n+1)の値を格納し、(2)次のメモリアド
レス(n+1)の拡張メモリ100に入力文字Kをシン
ボルとして登録する。
【0042】具体的に図17、図18でアドレス11に
続いて入力文字「A」を登録する場合を例にとると、i
カウンタで指定されるメモリアドレス11のファースト
メモリ100に中に、次の登録先を示すアドレス値12
を格納し、次のメモリアドレス12の拡張メモリ100
に入力文字「A」をシンボルとして登録する。一方、ス
テップS14のネクストメモリ200の登録処理は、
(1)iカウンタで指定されるメモリアドレスのネクス
トメモリ200に中に、次の登録先を示す(n+1)の
値を格納し、(2)次のメモリアドレス(n+1)の拡
張メモリ100に入力文字Kをシンボルとして登録す
る。
【0043】具体的に図17、図18でアドレス10で
入力文字「A」を登録する場合を例にとると、まずiカ
ウンタで指定されるメモリアドレス4のネクストメモリ
200に中に、次のネクストメモリの登録先を示すアド
レス値10を格納し、メモリアドレ10の拡張メモリ3
00に入力文字「A」をシンボルとして登録する。以上
の登録処理が済むと、登録が済んだ文字Kをiカウンタ
にセットしてステップS2からの辞書検索ステップに戻
る。
【0044】図19は従来のLZW符号化における辞書
登録及び検索処理を示したフローチャートであり、図2
0に復元時の辞書構成の具体例を示し、図21に図20
の辞書構成に対応した辞書メモリの配置を示す。尚、図
20のノードは、右下に取出して示すように、 (1)ノード内部 ;拡張メモリの登録シンボル (2)ノード左上; アドレス (3)ノード左下; ビフォーメモリのアドレス を示す。
【0045】図19において、ステップS1−1,ステ
ップS1−2の初期化は、辞書検索用配列としてビフォ
ーメモリ400と拡張メモリ500をに初期化する以外
は図11の復号化と同じである。更にステップS2〜ス
テップS8の辞書検索による復元も図11と基本的に同
じである。例えば図20、図21で符号語CODE=1
2を復元する場合を例にとると、CODE=12で指定
される辞書メモリのアドレス12を参照して拡張メモリ
500のシンボル「A」を読出してスタックし、次にビ
フォーメモリ400から次のアドレス11を読出す。以
下同様な処理を繰り返すことで、アドレス11、10,
1の拡張メモリのシンボル「AAA」が読出されてスタ
ックされ、アドレス1で次のメモリアドレスが0となっ
てアドレス最小値NMIN以下となるので、それまでに
スタックしたシンボル列「AAAA」を復元した文字列
として出力する。
【0046】このような復元時の辞書検索に加えステッ
プS7で辞書登録が行われる。この辞書登録はシンボル
の復元に対し1スステップ遅れて行われ、復元した文字
列を出力した後に次の符号語を復元して得た最初の文字
を、現在登録文字数nのメモリアドレスのビフォーメモ
リ400に登録し、且つ拡張メモリ500に文字をシン
ボル登録する。
【0047】
【発明が解決しようとする課題】このように従来のLZ
W符号化は、記憶装置上に確保した領域上に辞書を作成
しながら、その辞書を使用して符号化処理を行う。辞書
の内容は連結リストで構成され、辞書検索時に連結リス
トをたどって符号語に変換する。ところで、このような
辞書検索処理は、記憶装置上のデータが外部的な要因な
どで破壊されないという前提条件のもとで成立する。し
かし、圧縮復元装置として構成した場合、記憶装置が破
壊されたり、データが化けるといった障害も発生する。
この場合、従来のLZW符号では誤ったデータが読みだ
されて符号化および復元処理に使用され、しかも使用さ
れたデータが正しいデータ誤ったデータかを判断するこ
とができないという問題があった。
【0048】本発明は、このような従来の問題点に鑑み
てなされたもので、辞書検索が正しく行われたか否かを
確認可能にして信頼性の高いデータ圧縮および復元方式
を提供することを目的とする。
【0049】
【課題を解決するための手段】図1、図2は本発明の原
理説明図であり、データ圧縮方式とデータ復元方式に分
けて示している。まず図1に示すように、本発明は、符
号化済データを相異なる部分列に分けて各部分列毎に異
なる参照番号を付加して辞書1に登録しておき、入力デ
ータを辞書1中の部分列の内、最大長一致するものの参
照番号で指定して符号化してデータ圧縮方式を対象とす
る。
【0050】このようなデータ圧縮方式につき本発明に
あっては、部分列の検索に外部ハッシュ法を使用し、辞
書1に登録した部分列番号の参照番号をハッシュ・アド
レスとする辞書検索手段2と、部分列が属する相対的な
関係を示す付加情報を前記辞書1の参照番号に対応して
付加するデータ付加手段3と、辞書検索時に付加情報の
正誤を判定する判定手段4とを設けたことを特徴とす
る。
【0051】また本発明は図2に示すように、符号化済
データを相異なる部分列に分けて各部分列毎に異なる参
照番号を付加して辞書1に登録しておき、入力データを
辞書1中の部分列の内、最大長一致するものの参照番号
で指定して符号化した符号語から元の文字列を復元する
データ復元方式を対象とする。このデータ復元方式につ
き本発明にあってはデータ圧縮方式と同様に、部分列の
検索に外部ハッシュ法を使用し、辞書1に登録した部分
列番号の参照番号をハッシュ・アドレスとする辞書検索
手段2と、部分列が属する相対的な関係を示す付加情報
を辞書1の参照番号に対応して付加するデータ付加手段
3と、辞書検索時に付加情報の正誤を判定する判定手段
4とを設けたことを特徴とする。
【0052】ここで図1、2のデータ付加手段4は、辞
書1中の検索木の構造の位置関係を示す付加情報を付加
する。具体的には例えば図1のように、辞書1中の検索
木構造の同一階層の登録順番を示すノード中の連続番号
を付加する。また図2に示すように、辞書1中の検索木
構造のノードの深さを示す番号を付加するしてもよい。
【0053】またデータ付加手段4は、辞書1に登録さ
れる検索木構造の前後関係にあるノードに含まれる文字
コード等の複製データを付加するようにしてもよい。
【0054】
【作用】このような構成を備えた本発明のデータ圧縮及
び復元方式によれば、辞書の連結リストを書き込む時、
次のデータのアドレス(ポインタ)と共に、1つのノー
ド中の連続番号などをリスト関係(検索木構造)を示す
別の付加データを書き込んでおき、辞書検索時にはリス
トの連続番号等の付加データの正否を判定しながら否な
がら辞書の検索処理を行う。このため辞書中に書き込ん
だ連結リストデータが誤って読みだされても、付加デー
タとして別に書き込まれている連続番号等を判定するこ
とで、読みだされた辞書内容が誤っていることが判定で
きる。これにより符号化動作の無効を処理途中で判定
し、信頼性の高い圧縮復元装置が実現できる。
【0055】
【実施例】図3は本発明の辞書検索機能を備えたデータ
圧縮復元装置の一実施例を示した実施例構成図である。
図3において、処理対象となる原デ−タ(文字データ或
いは符号語データ)10はDMA(Direct Memory Acce
ss)制御回路12を介して入力される。制御手段として
のMPU14は入力された原デ−タ10を、1文字と今
までの文字列の参照番号を辞書検索回路16の複数文字
読込み回路18にセットした後、辞書検索回路16を起
動する。
【0056】辞書検索回路16は以後、辞書メモリ20
より1文字伸ばした文字列の候補文字を読込み、一致検
査回路22で入力文字と候補文字との一致検査(照合)
を行ない、連結検出回路24で候補文字の有無の検出を
行なう。パイプライン制御回路26は、一致検査回路2
2による入力文字と候補文字の照合と連結検出回路24
による候補文字の有無の検出とに並行して辞書メモリ2
0に次の候補文字の読出しをかける。このようにパイプ
ライン制御回路26でパイプライン処理を行なうこと
で、候補文字の複数個ごとの探索と照合処理が辞書メモ
リ20のサイクル・タイムで実行することができる。
【0057】更に辞書検索回路16には連続アドレス回
路28が設けられ、連続アドレス回路28は連続アドレ
スを発生し、複数文字読込み回路18に辞書メモリ20
の連続アドレスに登録されているハッシュアドレス及び
候補文字を読出すようにする。LZW符号の符号化で
は、辞書メモリ20中の最大長一致する文字列を求め
る。従って、入力文字を付加して文字列を逐次一文字ず
つ伸ばしていき、候補文字がなくなったところで最大一
致長の文字列であることが分かる。このとき、最大一致
長文字列まではアドレスωを使用した参照番号で表わさ
れており、その参照番号ωを入出力ポ−ト30から外部
に圧縮された符号語code(ω)として出力する。
【0058】一方、LZW符号の復元は、入力コードで
辞書メモリ20をアクセスして連結リストを前にたどり
ながら1文字ずつ復元し、参照番号が0になったとに既
に復元した複数の文字列を文字列データとして出力す
る。
【0059】次にアルファベットA、B、Cの3文字を
例にとり、図4のフローチャートを参照して本発明のL
ZW符号化を説明する。ここで辞書メモリには既に図5
の辞書構成及び図6のメモリ配置が行なわれていたもの
とする。図4において、ステップS1〜ステップS16
の初期化処理、辞書検索ステップ及び辞書登録ステップ
は付加情報に関する処理を除き図16の従来方式と同じ
である。
【0060】本発明の復号化では、図5、図6に示すよ
うに、辞書メモリの検索機のノードの右上に示すように
「ノード中の連続番号NO」を付加情報として新たに登
録している。このノード中の連続番号NOは、例えばア
ドレス4のノードの下に位置する斜線で示すアドレス4
のノードとアドレス10のノードに着目してみると、こ
の2つのノードは検索木の同じ親ノードの下の同じ階層
位置に属することから、ノード中の連続番号として、登
録純にNO=1、NO=2を付加情報として付けてい
る。尚、他のノードについては全て各階層の最初のノー
ドであることから全てNO=1としている。
【0061】このノード中の連続番号の登録は、図4の
辞書登録ステップの中のステップS13又はステップS
14で行われる。ステップS13ではファーストメモリ
100への文字登録であることから、登録アドレスのノ
ード中の連続番号NOにNO=1を登録する。ステップ
S14はネクストメモリ200への文字登録であること
から、親ノードを同じにする最初のネクストノードでc
ount=2となり、同一階層であれば以下ステップS
14の処理を行う毎にcount=3,4,5,・・・
と増加される。
【0062】一方、辞書検索ステップにおいては、ステ
ップS6及びステップS9に付加情報として登録してい
るノード中の連続番号NOを読出す処理と、読出番号N
Oの判別基準となるcountをセットする処理が加え
られる。更に、ステップS7とステップS8の間に読出
番号NOと判定値countとの一致を判別する処理ス
テップS17が付加され、不一致を判別した場合にはエ
ラー処理に移行できるようにしている。
【0063】図5、図6について具体的に説明すると、
いまアドレス12に登録される文字列「AAAA」の検
索する場合、1番目の文字「A」はルート(根)の下の
アドレス1のシンボル「A」と一致するので、2番目の
文字「A」が登録されているか探す。このときアドレス
1をもつ1段目のノードのファーストを読むと2段目の
先頭アドレス4が分かり、アドレス4の拡張メモリのシ
ンボル「B」と文字「A」を比較する。不一致であるの
で次の候補を探す。
【0064】ここではアドレス4のネクストメモリを読
むことで次の候補のアドレス10が求まる。このアドレ
ス10のまシンボル「A」と文字「A」を比較して一致
するので3段目の検索に移り、同様に、ファーストメモ
リとネクストメモリを読むことで検索することができ
る。
【0065】外部ハッシュで実現されているこの検索法
は、アルファベット3文字を例にとった場合、1つのノ
ードの下に最大3個の子供のノードがぶら下がる。実際
には、文字種256であることから、最大 256個の子供
のノードがぶら下がる。本発明では1つの親ノードの下
にぶら下がる3個の子ノードに、登録順に連続番号NO
を登録させている。例えばアドスレ1のノードを親とす
る2段目のアドレス4の子ノードは連続番号NO=1を
付け、同じ段のアドレス10の2番目の子ノードは連続
番号NO=2を付けておく。
【0066】検索時に連続番号NOが順に検索されてい
るかを判断する。例えばアドレス4をもつ2段目のシン
ボル「B」のノードのネクストアドレス10が誤ってア
ドレス8と読出された場合、従来方式ではそのまま検索
を続けて符号化を行ったが、本発明では連続番号を調
べ、この場合には、連続番号がNO=1から同じNO=
1と変化し、順番になっていないことで読出されたデー
タが誤っていることが分かり、符号化を中断することが
できる。
【0067】ここでは子ノードの登録順を記憶して判定
したが、相対的な関係が分かれば他のデータでもよい。
例えば、上のノードのネクストメモリの格納アドレス値
のコピー、子供のノードの先頭の拡張メモリの登録シン
ボル値のコピーなどでもよい。また、記憶場所が限られ
ている場合は、アドレス値、シンボル値の1部の値のコ
ピーでもよい。
【0068】次にアルファベットA、B、Cの3文字を
例にとり、図7のフローチャートを参照して本発明のL
ZW復元処理を説明する。ここで辞書メモリには既に図
8の辞書構成及び図9のメモリ配置が行なわれていたも
のとする。図7において、ステップS1−1〜ステップ
S8の処理は図19の従来方式と基本的に同じである。
ここの中でステップS1−2の初期処理に、前回のノー
ド深さOLDnoを1にセットし、1文字目と2文字目
移行の復元を示すFLGを1文字目を示す0にセット
し、更に最初のノード深さnoを保持するtmpを1に
セットしている。
【0069】またステップS7の登録処理の中に、前回
の復元処理で得られたノードの深さtmpを登録アドレ
スにnoとして登録する処理が加わる。さらに辞書検索
による復元処理の中のステップS5とステップS6の間
に、ステップS9〜ステップS12でなるノードの深さ
noの読出しと比較判定を行う処理が追加される。
【0070】このステップS9〜ステップS10の処理
は、符号語CODEから1文字目を復元するFLG=0
の際には、ステップS9からステップS10に進み、符
号語CODEでせ指定されたアドレスのノードの深さn
oを読出してtmpにセットし、更に2文字目の復元の
ためにFLGを1にセットする。2文字目以降について
は、FLG=1であることからステップS9からステッ
プS11に進み、noを1つ減らし、ステップS12で
次のアドレスから読出したノードの深さNO[COD
E]がnoに一致するか否か判定し、一致すればステッ
プS6に進み、一致しなければエラー処理を行う。具体
例として符号語CODE=12が復元される様子を図
8、図9について説明する。
【0071】符号語のコード12から辞書メモリのアド
レス12を読み、アドレス12の拡張メモリ500のシ
ンボル「A」をスタックに置く。アドレス12のビフォ
ーメモリ400を読むことで1つ前のアドレス11が次
の文字であることが分かり、拡張メモリ500のシンボ
ル「A」をスタックに置く。この処理を検索木のルート
(根)まで繰り返し、最後にスタックのデータを取り出
して文字列「AAAA」復元の処理が終わる。ここでル
ートに近い部分が復元データの先頭であり、葉の部分が
復元データの最後である。
【0072】本発明では、登録時にノードの深さNOを
示すデータを記憶させておく。例えば先ほどのアドレス
12をもつ4段目のシンボル「A」はノードにはノード
の深さno=4を付け、3段目のアドレス11のノード
にはNO=3を連続番号を付けておく。検索時には、最
初に読みだしたノードの深さNOを変数にセットして辞
書を辿るごとに値を減らしながら、読出されるNOと比
較判定する。このとき、例えばアドレス11をもつ3段
目のノードのビフォーアドレス10が誤ってアドレス2
と読みだされた場合、従来法ではそのまま検索を続けて
復元を行っていたが、本発明では連続番号が3から2に
変化すべきものが、アドレス2では連続番号が3から1
と変化するので、読出されたデータが誤っていることが
分かり、復元を中断することができる。
【0073】ここでは子供のノードの深さを記憶して判
定しているが、相対的な関係が分かれば他のデータでも
よい。例えば、最上位のノードの拡張メモリのシンボル
値のコピーなどでもよい。また、記憶場所が限られてい
る場合は、データの1部の値のコピーでもよい。
【0074】
【発明の効果】以上説明したように本発明によれば、辞
書の連結リストを書き込む際に、次のデータのアドレス
(ポインタ)と共に、1つのノード中の連続番号などを
リストの関係を示す別の付加データを同一の記憶場所に
書き込んでおき、検索時にはこれら連続番号等の付加デ
ータを判定しながら処理を行うことで、辞書中に書き込
んだ連結リストデータが誤って読みだされたも、別に書
き込まれている連続番号を判定することにより読みださ
れた辞書内容が誤っているか判定できる。これにより符
号化或いは復元動作の無効を処理の途中に判定すること
ができ、信頼性の高いデータ圧縮及び復元ができる。
【図面の簡単な説明】
【図1】本発明の圧縮方式の原理説明図
【図2】本発明の復元方式の原理説明図
【図3】本発明の実施例構成図
【図4】本発明のLZW符号の符号化アルゴリズムを示
したフローチャート
【図5】図4の符号化に使用する辞書メモリの構成を示
した説明図
【図6】図5に対応した辞書メモリの配置説明図
【図7】本発明のLZW符号の復元アルゴリズムを示し
たフローチャート
【図8】図7の復元に使用する辞書メモリの構成を示し
た説明図
【図9】図8に対応した辞書メモリの配置説明図
【図10】従来のLZW符号化アルゴリズムのフローチ
ャート
【図11】従来のLZW復号化アルゴリズムのフローチ
ャート
【図12】従来のLZW符号化の具体例説明図
【図13】辞書構成例の説明図
【図14】従来のLZW復号化の具体例説明図
【図15】外部ハッシュ法のリスト構造説明図
【図16】外部ハッシュ法を用いた従来のLZW符号の
符号化アルゴリズムを示したフローチャート
【図17】図16の符号化に使用する辞書メモリの構成
を示した説明図
【図18】図17に対応した辞書メモリの配置説明図
【図19】外部ハッシュ法を用いた従来のLZW符号の
復号化アルゴリズムを示したフローチャート
【図20】図19の符号化に使用する辞書メモリの構成
を示した説明図
【図21】図20に対応した辞書メモリの配置説明図
【符号の説明】
1:辞書 2:辞書検索手段 3:データ付加手段 4:判定手段 10:原データ 12:DMA制御回路 14:MPU 16:辞書検索手段(辞書検索回路) 18:複数文字読込み回路 20:辞書メモリ 22:一致検査回路 24:連結検出回路 100:ファーストメモリ(first) 200:ネクストメモリ (next) 300,500:拡張メモリ (ext) 400:ビフォーメモリ (before)
───────────────────────────────────────────────────── フロントページの続き (72)発明者 中野 泰彦 神奈川県川崎市中原区上小田中1015番地 富士通株式会社内 (56)参考文献 特開 平3−179562(JP,A) 特開 平2−227735(JP,A) (58)調査した分野(Int.Cl.6,DB名) G06F 5/00 G06F 17/30 G06T 9/00 H03M 7/40 H04N 1/41

Claims (6)

    (57)【特許請求の範囲】
  1. 【請求項1】符号化済データを相異なる部分列に分けて
    各部分列毎に異なる参照番号を付加して辞書(1)に登
    録しておき、入力データを該辞書(1)中の部分列の
    内、最大長一致するものの参照番号で指定して符号化し
    てデータ圧縮方式に於いて、 部分列の検索に外部ハッシュ法を使用し、前記辞書
    (1)に登録した部分列番号の参照番号をハッシュ・ア
    ドレスとする辞書検索手段(2)と、 前記部分列が属する相対的な関係を示す付加情報を前記
    辞書(1)の参照番号に対応して付加するデータ付加手
    段(3)と、 辞書検索時に前記付加情報の正誤を判定する判定手段
    (4)と、を備えることを特徴とするデータ圧縮方式。
  2. 【請求項2】符号化済データを相異なる部分列に分けて
    各部分列毎に異なる参照番号を付加して辞書(1)に登
    録しておき、入力データを該辞書(1)中の部分列の
    内、最大長一致するものの参照番号で指定して符号化し
    た符号語から元の文字列を復元するデータ復元方式に於
    いて、 部分列の検索に外部ハッシュ法を使用し、前記辞書
    (1)に登録した部分列番号の参照番号をハッシュ・ア
    ドレスとする辞書検索手段(2)と、 前記部分列が属する相対的な関係を示す付加情報を前記
    辞書(1)の参照番号に対応して付加するデータ付加手
    段(3)と、 辞書検索時に前記付加情報の正誤を判定する判定手段
    (4)と、を備えることを特徴とするデータ復元方式。
  3. 【請求項3】請求項1、2記載のデータ圧縮及び復元方
    式に於いて、 前記データ付加手段(4)は、前記辞書(1)中の検索
    木の構造の位置関係を示す付加情報を付加することを特
    徴とするデータ圧縮及び復元方式。
  4. 【請求項4】 請求項3記載のデータ圧縮及び復元方式に於いて、前記
    データ付加手段(4)は、前記辞書(1)中の検索木構
    造の同一階層の登録順番を示すノード中の連続番号を付
    加することを特徴とするデータ圧縮及び復元方式。
  5. 【請求項5】請求項3記載のデータ圧縮及び復元方式に
    於いて、 前記データ付加手段(4)は、前記辞書(1)中の検索
    木構造のノードの深さを示す番号を付加することを特徴
    とするデータ圧縮及び復元方式。
  6. 【請求項6】請求項1、2記載のデータ圧縮及び復元方
    式に於いて、 前記データ付加手段(4)は、前記辞書(1)に登録さ
    れる検索機構造の前後関係にあるノードに含まれる文字
    コード等の複製データを付加することを特徴とするデー
    タ圧縮及び復元方式。
JP3056706A 1991-03-20 1991-03-20 データ圧縮及び復元方式 Expired - Lifetime JP2952068B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3056706A JP2952068B2 (ja) 1991-03-20 1991-03-20 データ圧縮及び復元方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3056706A JP2952068B2 (ja) 1991-03-20 1991-03-20 データ圧縮及び復元方式

Publications (2)

Publication Number Publication Date
JPH0683575A JPH0683575A (ja) 1994-03-25
JP2952068B2 true JP2952068B2 (ja) 1999-09-20

Family

ID=13034922

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3056706A Expired - Lifetime JP2952068B2 (ja) 1991-03-20 1991-03-20 データ圧縮及び復元方式

Country Status (1)

Country Link
JP (1) JP2952068B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6296044B2 (ja) * 2015-12-07 2018-03-20 富士通株式会社 符号処理のためのプログラム及びデータ構造

Also Published As

Publication number Publication date
JPH0683575A (ja) 1994-03-25

Similar Documents

Publication Publication Date Title
EP0688104A2 (en) Data compression method and apparatus
JP2952068B2 (ja) データ圧縮及び復元方式
JP2952067B2 (ja) データ圧縮方式
JP3038234B2 (ja) データ圧縮装置の辞書検索方式
JP3038233B2 (ja) データ圧縮及び復元装置
JP3350118B2 (ja) データ符号化方式及びデータ復元方式
JPH05241778A (ja) データ圧縮及び復元方式
JPH05252049A (ja) データ圧縮処理方式及びデータ復元処理方式
JP3132774B2 (ja) データ圧縮・復元装置
JP3115066B2 (ja) 辞書検索方法
JP3053656B2 (ja) データ圧縮における辞書登録方式
JPH05152971A (ja) データ圧縮・復元方法
JPH05250137A (ja) データ圧縮及び復元方式
JP2774350B2 (ja) データ圧縮方法および圧縮データのデータ復元方法
JP3103172B2 (ja) 辞書検索方法
JPH06161705A (ja) データ符号化方式及びデータ復元方式
JP3117760B2 (ja) データ復元方式
JP2825960B2 (ja) データ圧縮方法及び復元方法
JP3083329B2 (ja) データ圧縮復元方式
JP2957801B2 (ja) データ圧縮方式およびその復元方式
JP2999561B2 (ja) データ圧縮及び復元装置
JPH05298061A (ja) データ圧縮および復元方式ならびにその装置
JP3388768B2 (ja) データ圧縮及び復元方式
JP3015483B2 (ja) データ圧縮及び復元方式
JPH05341953A (ja) データ圧縮方法及び装置

Legal Events

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19990615