JP2774350B2 - データ圧縮方法および圧縮データのデータ復元方法 - Google Patents
データ圧縮方法および圧縮データのデータ復元方法Info
- Publication number
- JP2774350B2 JP2774350B2 JP2070379A JP7037990A JP2774350B2 JP 2774350 B2 JP2774350 B2 JP 2774350B2 JP 2070379 A JP2070379 A JP 2070379A JP 7037990 A JP7037990 A JP 7037990A JP 2774350 B2 JP2774350 B2 JP 2774350B2
- Authority
- JP
- Japan
- Prior art keywords
- character
- dictionary
- code
- character string
- last
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Reduction Or Emphasis Of Bandwidth Of Signals (AREA)
Description
【発明の詳細な説明】 〔概要〕 LZW符号によるデータ圧縮方法および圧縮データのデ
ータ復元方法に関し、符号化文字列に対して直前の文字
列の最終文字との従属関係を辞書に取り込むことによっ
て文字列間の圧縮率を高めることを目的とし、 入力文字列に対して辞書を参照し文字部分列を順次符
号化し、異なる文字列毎に異なる登録番号を付与して辞
書を作成し、現在の文字部分列を符号化済の過去の文字
部分列のうち一致する最大長の文字部分列の複製として
符号化するデータ圧縮方法において、任意の連続する二
つの文字部分列における符号化された直前の文字部分列
の最終文字もしくは最終文字グループを記憶し、直前の
文字部分列の各最終文字もしくは各最終文字グループに
対応けて文字部分列の各先頭文字毎にグループ化して文
字列を登録することにより辞書を作成し、文字部分列に
対して直前の文字列の最終文字もしくは最終文字グルー
プに対応する辞書を参照し、その登録番号により入力文
字列を符号化する構成を持つ。
ータ復元方法に関し、符号化文字列に対して直前の文字
列の最終文字との従属関係を辞書に取り込むことによっ
て文字列間の圧縮率を高めることを目的とし、 入力文字列に対して辞書を参照し文字部分列を順次符
号化し、異なる文字列毎に異なる登録番号を付与して辞
書を作成し、現在の文字部分列を符号化済の過去の文字
部分列のうち一致する最大長の文字部分列の複製として
符号化するデータ圧縮方法において、任意の連続する二
つの文字部分列における符号化された直前の文字部分列
の最終文字もしくは最終文字グループを記憶し、直前の
文字部分列の各最終文字もしくは各最終文字グループに
対応けて文字部分列の各先頭文字毎にグループ化して文
字列を登録することにより辞書を作成し、文字部分列に
対して直前の文字列の最終文字もしくは最終文字グルー
プに対応する辞書を参照し、その登録番号により入力文
字列を符号化する構成を持つ。
コンピュータ、データ通信等におけるような大量のデ
ータを扱う場合、データの中の冗長な部分を省いて、デ
ータを圧縮することで、記憶容量を減らしたり、通信速
度を高速化することができるようになる。
ータを扱う場合、データの中の冗長な部分を省いて、デ
ータを圧縮することで、記憶容量を減らしたり、通信速
度を高速化することができるようになる。
データを圧縮する方法として、入力文字列を順次異な
る文字部分列ごとに順次符号化して記憶し、符号化済の
過去の最長の文字部分列の複製として現在の文字部分列
を符号化するデータ圧縮方式がある。
る文字部分列ごとに順次符号化して記憶し、符号化済の
過去の最長の文字部分列の複製として現在の文字部分列
を符号化するデータ圧縮方式がある。
そのような従来のデータ圧縮方式においては、文字列
を相異なる文字部分列に分けて符号化するとき、現在符
号化しようとする現文字部分列は出現した文字列とは独
立に出現するものとして符号化していた。
を相異なる文字部分列に分けて符号化するとき、現在符
号化しようとする現文字部分列は出現した文字列とは独
立に出現するものとして符号化していた。
実際の文章等のデータにおいては、各文字部分列間に
相関関係かあるものであり、上記のように従来の符号化
方式においては、文字部分列の出現する履歴を利用して
なく、現文字部分列の過去に出現した文字部分列との従
属性については考慮されていないため、データ圧縮にお
ける冗長性として残されていた。
相関関係かあるものであり、上記のように従来の符号化
方式においては、文字部分列の出現する履歴を利用して
なく、現文字部分列の過去に出現した文字部分列との従
属性については考慮されていないため、データ圧縮にお
ける冗長性として残されていた。
本発明は、符号化文字部分列に対して直前の文字列の
最終文字との従属関係を辞書に取りことによって文字部
分列におけるデータ圧縮の冗長性を削減し、圧縮率を高
めた増分分解型のLZW(Ziv−Lempel−Welch)符号によ
るデータ圧縮方法および圧縮データのデータ復元方法に
関するものである。
最終文字との従属関係を辞書に取りことによって文字部
分列におけるデータ圧縮の冗長性を削減し、圧縮率を高
めた増分分解型のLZW(Ziv−Lempel−Welch)符号によ
るデータ圧縮方法および圧縮データのデータ復元方法に
関するものである。
LZW符号によるデータ圧縮は、文字列を異なる文字部
分列に分け辞書に登録されている過去に出現した文字列
のうちから最長一致文字列を探し、その番号により符号
化する。同時に、一致した最長文字列より一文字延ばし
た文字列を新たに出現した文字列としあらたに辞書に登
録するものである。
分列に分け辞書に登録されている過去に出現した文字列
のうちから最長一致文字列を探し、その番号により符号
化する。同時に、一致した最長文字列より一文字延ばし
た文字列を新たに出現した文字列としあらたに辞書に登
録するものである。
第12〜14図により従来のLZW符号化方式を説明する。
第12図(a),(b),(c)は、簡単のため、a,b,
cの3文字よりなる場合についてデータを符号化して圧
縮する場合および復号(以下,復元に同じ)する場合を
示している。
cの3文字よりなる場合についてデータを符号化して圧
縮する場合および復号(以下,復元に同じ)する場合を
示している。
LZW符号では、予め辞書に全文字につき一文字からな
る文字列を初期値として登録してから符号化を始める。
る文字列を初期値として登録してから符号化を始める。
そして、文字列から、辞書に登録してある最長一致文
字部分列を捜し、その登録符号ωを符号として出力す
る。
字部分列を捜し、その登録符号ωを符号として出力す
る。
一方、辞書には、その最長一致文字列に、不一致とな
った次の一文字(拡張文字K)を足した文字列を継ぎ足
した文字列を(ω,K)の組で表して辞書に登録する。
った次の一文字(拡張文字K)を足した文字列を継ぎ足
した文字列を(ω,K)の組で表して辞書に登録する。
復号は符号化の逆の操作を行う。即ち、入力した符号
ωに対応する文字列の表現の組(ω′,K)を求める。次
に、同様に、ω′に対応する文字列の表現の組を求め、
そのつど求めた拡張文字Kをスタックしておく。
ωに対応する文字列の表現の組(ω′,K)を求める。次
に、同様に、ω′に対応する文字列の表現の組を求め、
そのつど求めた拡張文字Kをスタックしておく。
この手順を繰り返して、番号ωが一文字にいたるまで
繰り返し最後にスタックした文字を出力し、各文字列を
復号する。
繰り返し最後にスタックした文字を出力し、各文字列を
復号する。
そして、辞書には、前回使った符号ωと今回復元した
文字列の第1文字Kの組(ω,K)を登録し、復号辞書を
更新する。
文字列の第1文字Kの組(ω,K)を登録し、復号辞書を
更新する。
第12図(a),(b)により、従来のLZW符号化方法
をa,b,cの三文字のみよりなる場合について、具体的に
説明する。
をa,b,cの三文字のみよりなる場合について、具体的に
説明する。
先ず、一文字a,b,cについては、図(b)に示すよう
に最初に辞書に登録しておく。
に最初に辞書に登録しておく。
(1) 図(a)に示す入力文字列において、先ず,先
頭の文字aを入力する。aは辞書にあり、aの符号が1
なので、ω=1として、次の文字b(K=b)を入力す
る。その文字部分列ab(ω=1,K=b)は辞書に登録さ
れていないので、aを出力し、ab(1b)を登録コード4
で辞書に登録する。
頭の文字aを入力する。aは辞書にあり、aの符号が1
なので、ω=1として、次の文字b(K=b)を入力す
る。その文字部分列ab(ω=1,K=b)は辞書に登録さ
れていないので、aを出力し、ab(1b)を登録コード4
で辞書に登録する。
(2) 次に、いま入力したbを文字列の先頭文字とし
て(ω=2とする)、次の文字a(K=a)を入力す
る。
て(ω=2とする)、次の文字a(K=a)を入力す
る。
そこで、作成された文字部分列ba(ω=2,K=a)
は、辞書に未登録であるので、bを出力し、ba(2a)を
登録コード5として、に登録する。
は、辞書に未登録であるので、bを出力し、ba(2a)を
登録コード5として、に登録する。
(3) さらに、(2)で入力したaの文字列の先頭と
して(ω=1)次の文字b(K=b)を入力する。
して(ω=1)次の文字b(K=b)を入力する。
文字列abは、既に登録コード4で登録されているの
で、ωを現在の文字部分列abの登録コード4として続く
文字cを入力する(ω=4,K=c)。
で、ωを現在の文字部分列abの登録コード4として続く
文字cを入力する(ω=4,K=c)。
文字列abcは未登録であるので、一致した最長文字部
分列abを登録コード4で出力し、文字列abc(4c)を登
録コード6で、辞書に登録する。
分列abを登録コード4で出力し、文字列abc(4c)を登
録コード6で、辞書に登録する。
(4) そこで、今入力した文字cを文字列の先頭文字
として(ω=3),続く文字bを入力する(K=b)。
として(ω=3),続く文字bを入力する(K=b)。
文字列cb(3b)は辞書に未登録であるので、文字cを
登録コード3(初期化において登録済)で出力し、文字
列cb(3b)を登録コード7として辞書に登録する。
登録コード3(初期化において登録済)で出力し、文字
列cb(3b)を登録コード7として辞書に登録する。
以下同様の手順により、続く文字列について、登録済
の文字部分列から一致する最大長の文字部分列の登録コ
ードにより出力し、未登録の文字部分列は新たに登録コ
ードを定めて辞書に登録し、辞書を更新してゆく。
の文字部分列から一致する最大長の文字部分列の登録コ
ードにより出力し、未登録の文字部分列は新たに登録コ
ードを定めて辞書に登録し、辞書を更新してゆく。
図(b)は図(a)の入力文字列について、LZW符号
により作成した参照辞書を示す。
により作成した参照辞書を示す。
入力されたコードを復号する場合には、例えば、符号
8が入力されると、図示の変換テーブルにより、8=5b
を読み取り、次に5=2a、であるので、8=2abとし、
さらに2=bから文字列babを復号する。
8が入力されると、図示の変換テーブルにより、8=5b
を読み取り、次に5=2a、であるので、8=2abとし、
さらに2=bから文字列babを復号する。
図(c)に、LZW符号の復号方式を示す。
図(c)は図(a)における文字列の出力コードを復
号する場合を示す。
号する場合を示す。
復号は、符号化の手順の逆を操作を行う。
あらかじめ、初期化において、登録辞書には一文字a,
b,cをそれぞれコード1,2,3として登録しておく。
b,cをそれぞれコード1,2,3として登録しておく。
図示の入力コードを復号する場合により、従来のLZW
符号の復号手順を説明する。
符号の復号手順を説明する。
(1) 先ず、最初の入力コード1が入力されると、辞
書を参照して文字aを出力する。
書を参照して文字aを出力する。
ここで、入力コード1は直前コードレジスタ(Oldcod
e)に残しておく。
e)に残しておく。
(2) 次に入力コード2によりbを出力する。
このとき、(1)の処理における入力コード1と、今
復号した文字列のbの組の符号1bを辞書に登録コード4
として登録し、辞書を復元する。
復号した文字列のbの組の符号1bを辞書に登録コード4
として登録し、辞書を復元する。
そして、入力コード2は、Oldcodeに保存しておく。
(3) 次に入力コード符号4により辞書を参照して1b
に読み取り、さらに1bから文字列abを復号する。
に読み取り、さらに1bから文字列abを復号する。
そして、(2)で復元した文字列の第1文字aとOldc
odeの2とにより変換コード2aを辞書に登録コード5で
登録する。
odeの2とにより変換コード2aを辞書に登録コード5で
登録する。
入力コード4はOldcodeに移して保存する。
(4) 次の入力コード3を入力する。
3はcとして辞書に登録済であるから文字cを復元
し、Oldcodeのコード4といま復元した文字cにより変
換コード4cを辞書に登録コード6で登録する。
し、Oldcodeのコード4といま復元した文字cにより変
換コード4cを辞書に登録コード6で登録する。
そして、入力コード3をOldcodeに移して保存する。
(5) 次の入力コード5を読み取る。
入力コード5は既に変換コード2aとして登録されてい
るので、2aより、文字部分列baを復号する。
るので、2aより、文字部分列baを復号する。
そして、今復号した文字部分列の第1文字bとOldcod
eに保存されているコード3により3bを辞書に登録コー
ド7で登録する。入力コード5はOldcodeに移して保存
する。
eに保存されているコード3により3bを辞書に登録コー
ド7で登録する。入力コード5はOldcodeに移して保存
する。
同様の手順を繰り返して、入力コードを順次復号し、
辞書を更新してゆく。第13図に、従来のLZW符号化方式
の符号化のフローを示す。
辞書を更新してゆく。第13図に、従来のLZW符号化方式
の符号化のフローを示す。
上記の文字列ababcについて符号化する場合を例とし
てフローを説明する。
てフローを説明する。
初期化において、一文字a,b,cを辞書に登録する
(a=1、b=2、c=3)。
(a=1、b=2、c=3)。
同時に,辞書の先頭アドレスnを設定する。
図のフローは、256文字ある場合についてのものであ
るので、先頭アドレスとしてn=256を設定してある
が、今の場合は、a,b,c三文字のみの場合を考えている
ので、n=4を初期値として考える。
るので、先頭アドレスとしてn=256を設定してある
が、今の場合は、a,b,c三文字のみの場合を考えている
ので、n=4を初期値として考える。
(1) 文字列の第1文字K(K=a)を語頭文字
列のωとする。
列のωとする。
(2) 次の文字bを読む。
入力文字列の最後の文字の処理を終わっている場合
には、次の文字Kはないので、終了処理に進む。
には、次の文字Kはないので、終了処理に進む。
今は、入力文字列があるので、に進む。
今ω=a,K=bであり、ωK=abの文字部分列は辞
書にないので、に進む。
書にないので、に進む。
ω=aの登録コード(コード(ω))として1を出
力する。
力する。
入力文字bの登録コード2をωに移し、同時に辞書
のアドレスnを1つ進める。
のアドレスnを1つ進める。
(3) 再び、に戻り、次の文字aを入力する。今、
ω=2であるのででωK=2aを辞書と照合する。未登
録であるので、でbの登録コード2(コード(ω))
を出力する。そしてでωK=2aを辞書に登録コード5
(n=5)で登録する。さらにωにいま入力した文字a
のコード1を移す。そして再びに戻る。
ω=2であるのででωK=2aを辞書と照合する。未登
録であるので、でbの登録コード2(コード(ω))
を出力する。そしてでωK=2aを辞書に登録コード5
(n=5)で登録する。さらにωにいま入力した文字a
のコード1を移す。そして再びに戻る。
(4) 次の文字bを入力する。
この場合、における判断で,ωK=1bは登録済であ
るので、に進み、ωK=1bをωとする。そこで、に
戻る。
るので、に進み、ωK=1bをωとする。そこで、に
戻る。
(5) 次の文字cをKとして入力し、以降の処理を行
う。
う。
以上の処理を進め,最後まで処理が進むとに進む。
は、最終文字が、入力済の場合で、最終文字はの
処理でωに入力されている状態であるから、そのコード
(コード(ω))を出力して符号の作成処理を終了す
る。
処理でωに入力されている状態であるから、そのコード
(コード(ω))を出力して符号の作成処理を終了す
る。
第14図は、従来のLZW復号化方式のフローを示す。
第12図において例として説明した文字列の出力符号を
用いてフローを説明する。
用いてフローを説明する。
復号化には、入力コードを格納する入力コードメモリ
(INcode),直前コードを格納するメモリ(Oldcod
e),復元文字の第1文字を格納するメモリ(FINcha
r),順次復元される復号文字を1時格納するメモリ
(スタック)を用いる。
(INcode),直前コードを格納するメモリ(Oldcod
e),復元文字の第1文字を格納するメモリ(FINcha
r),順次復元される復号文字を1時格納するメモリ
(スタック)を用いる。
初期化により、一文字についての符号は予め、作成
しておく。
しておく。
(1) は最初に読み込んだ符号の処理である。最初
のコードを読み込む(今の場合、1)。Oldcodeに読み
込んだコードを入れる。入力コード(1)と辞書の登録
コードを参照して、文字Kとしてaを出力する。
のコードを読み込む(今の場合、1)。Oldcodeに読み
込んだコードを入れる。入力コード(1)と辞書の登録
コードを参照して、文字Kとしてaを出力する。
aをFINcharに移して一時保存する。
(2) 次のコード(CODE)を読み、INcodeに入れ
る。
る。
, 新たな符号があるか判定する。そして,最後の
符号まで読み取ってコードがない場合には処理を終了す
る。いまの場合は次のコード2があるので、に進む。
符号まで読み取ってコードがない場合には処理を終了す
る。いまの場合は次のコード2があるので、に進む。
, Kをスタックに移す。第12図(b)における登
録コード8のように、8が5bで5が2aであるようなコー
ドの場合は、ωKの文字Kを順次スタックに入力し、ω
を順次変換していってωKが一文字になるまで処理を繰
り返す。
録コード8のように、8が5bで5が2aであるようなコー
ドの場合は、ωKの文字Kを順次スタックに入力し、ω
を順次変換していってωKが一文字になるまで処理を繰
り返す。
今の例の場合Kとしてコード2に対応するbをスタッ
クに格納する。
クに格納する。
スタックに格納された文字bを出力する。
復号文字の第1文字、いまの場合は文字bをFINcha
rに格納する。
rに格納する。
以上の処理を進め最終文字まで処理が進むとに進
む。
む。
(Oldcode,K)の組を辞書に登録する。今の場合、O
ldcodeには初期化において読み込んだ文字列の第1文字
aのコード1が格納されている。またK=bであるので
1bを登録コード4で格納する(新しく登録する文字部分
列の登録番地(=登録コード)nは4から始まるものと
する)。
ldcodeには初期化において読み込んだ文字列の第1文字
aのコード1が格納されている。またK=bであるので
1bを登録コード4で格納する(新しく登録する文字部分
列の登録番地(=登録コード)nは4から始まるものと
する)。
nを1インクリメントする。
OldcodeにINcodeのデータを移す。いまの場合、INc
odeのデータは2であるから、Oldcodeを2とする。
odeのデータは2であるから、Oldcodeを2とする。
(3) そこで、に戻り、次の符号を読む。次の符号
は4である。そこで、辞書を参照すると符号4は1bであ
るから、,,でωK=1bから、スタックに順次b
とaを格納し、で文字abを出力する。さらに、で復
号文字列の第1文字aをFINcharに格納する。そして、
いまOldcodeは2と復号文字の第1文字をK=aによ
り、(2,a)の組合せにより、符号2aを辞書に登録コー
ド5(n=5)で登録する。そしてnを1インクリメン
トする。
は4である。そこで、辞書を参照すると符号4は1bであ
るから、,,でωK=1bから、スタックに順次b
とaを格納し、で文字abを出力する。さらに、で復
号文字列の第1文字aをFINcharに格納する。そして、
いまOldcodeは2と復号文字の第1文字をK=aによ
り、(2,a)の組合せにより、符号2aを辞書に登録コー
ド5(n=5)で登録する。そしてnを1インクリメン
トする。
さらに、Oldcodeに入力符号を移し、いつの場合Oldco
deを4とする。そして、以降の処理を繰り返す。
deを4とする。そして、以降の処理を繰り返す。
上記のように、入力コードを復号し、復号した文字列
のコードを記憶しておいて、次の入力コードにより、次
の文字列を復号した時点において、記憶してあるコード
に対応する文字部分列より1文字延ばした、未登録の文
字部分列を辞書に登録し、辞書を復元する。
のコードを記憶しておいて、次の入力コードにより、次
の文字列を復号した時点において、記憶してあるコード
に対応する文字部分列より1文字延ばした、未登録の文
字部分列を辞書に登録し、辞書を復元する。
図のフローにおいて、は例外的な処理の場合であ
る。
る。
上記のように、LZW符号による圧縮処理では、符号化
においては、注目文字部分列の符号化を終了した時点
で、一文字のばした文字部分列を辞書に登録できるが、
復号化において,注目文字列を1文字延ばすときは、次
の文字部分列の先頭文字と合わせて辞書に登録するた
め、次の文字列の復号が終了した時点でないと登録を行
うことができない。
においては、注目文字部分列の符号化を終了した時点
で、一文字のばした文字部分列を辞書に登録できるが、
復号化において,注目文字列を1文字延ばすときは、次
の文字部分列の先頭文字と合わせて辞書に登録するた
め、次の文字列の復号が終了した時点でないと登録を行
うことができない。
そのため、入力された符号を復号するために必要な登
録コードが、辞書に登録されていないような場合を生じ
ることがある。このような場合には、入力符号を復号で
きないわけであるが、はその場合の復号処理を行うた
めのものである。
録コードが、辞書に登録されていないような場合を生じ
ることがある。このような場合には、入力符号を復号で
きないわけであるが、はその場合の復号処理を行うた
めのものである。
例えば、第12図(c)の入力コードにおいて、入力コ
ード10が入力された場合を考える。
ード10が入力された場合を考える。
この時、Oldcodeは1であり、FINcharはaである。
この時点では、辞書への登録は登録コード9までであ
り、10は登録されていない。
り、10は登録されていない。
そのため、入力コード10を復元することができない。
そこで、により、FINcharのaおよび、Oldcode1の
1により、1aをINcodeに入力する。
1により、1aをINcodeに入力する。
その後は、以降の通常の場合と同様の処理により、
aaを出力し、1aを辞書に符号10で登録することができ
る。
aaを出力し、1aを辞書に符号10で登録することができ
る。
従来のLZW符号化方式では、入力文字列を相異なる文
字部分列に分けて符号化するとき、現在符号化中の各文
字部分列は過去に出現した文字部分列とは独立に出現し
たものとして符号化をしていた。
字部分列に分けて符号化するとき、現在符号化中の各文
字部分列は過去に出現した文字部分列とは独立に出現し
たものとして符号化をしていた。
この方法では、無記憶情報源(1文字ずつ独立に出現
するデータ)の符号化には問題はない。しかし、実際の
文章等多くのデータは記憶情報源とみなされ、LZW符号
では文字列が出現する履歴を十分利用できておらず、デ
ータ圧縮後も、文字列の出現の従属性について考慮して
いない分は冗長性として残る欠点があった。
するデータ)の符号化には問題はない。しかし、実際の
文章等多くのデータは記憶情報源とみなされ、LZW符号
では文字列が出現する履歴を十分利用できておらず、デ
ータ圧縮後も、文字列の出現の従属性について考慮して
いない分は冗長性として残る欠点があった。
本発明は、例えば、直前の文字列の最終文字のような
直前の文字列との関係において、現在の文字列の符号を
決定して辞書に登録する等、符号化対象文字部分列に対
して直前の文字列の最終文字との従属関係を辞書に取り
込むことによって文字列間の冗長性を削減し、圧縮率を
高めようとするものである。
直前の文字列との関係において、現在の文字列の符号を
決定して辞書に登録する等、符号化対象文字部分列に対
して直前の文字列の最終文字との従属関係を辞書に取り
込むことによって文字列間の冗長性を削減し、圧縮率を
高めようとするものである。
第11図により、課題を解決するための手段を説明す
る。
る。
図において、(a)は従来のLZW符号による辞書の木
を示し、(b)は従来のLZW符号による文字列の符号化
における各文字列間の関係を示している。
を示し、(b)は従来のLZW符号による文字列の符号化
における各文字列間の関係を示している。
従来は、図(b)に示すように、各文字部分列の先頭
の文字ごとに、図(a)に示すような文字部分列により
辞書の木を作成していた。
の文字ごとに、図(a)に示すような文字部分列により
辞書の木を作成していた。
例えば、図示のように、256個の先頭の一文字に対し
て、0〜256の番号を付し、各一文字を先頭文字とする
文字列をそれぞれの先頭文字から展開していた。
て、0〜256の番号を付し、各一文字を先頭文字とする
文字列をそれぞれの先頭文字から展開していた。
例えば、一文字「a」を0とし、「a」を先頭文字と
する文字列に対して例えば、図に示すように「ab」は25
7、「ac」は259、「aca」は258の「ac」の下位の階層と
して全体を1つの辞書の木として各文字列に番号を付し
ていた。
する文字列に対して例えば、図に示すように「ab」は25
7、「ac」は259、「aca」は258の「ac」の下位の階層と
して全体を1つの辞書の木として各文字列に番号を付し
ていた。
この場合、先頭文字列間の結びつきはなく、いわば、
空を根とする辞書の木の根に各先頭文字が結合している
もので、LZW符号では符号化中の文字列に対して以前に
出現した文字列の履歴は考えられていないことを示して
いる。
空を根とする辞書の木の根に各先頭文字が結合している
もので、LZW符号では符号化中の文字列に対して以前に
出現した文字列の履歴は考えられていないことを示して
いる。
このような従来の方法によれば、各文字列を識別する
番号は、異なる文字列について、全て異なる番号を付さ
なければならず、符号語を設定するための各文字部分列
の登録番号も大きくなり、しかも文字列の出現頻度等は
考慮されずに設定される等の冗長性が残されているもの
であった。
番号は、異なる文字列について、全て異なる番号を付さ
なければならず、符号語を設定するための各文字部分列
の登録番号も大きくなり、しかも文字列の出現頻度等は
考慮されずに設定される等の冗長性が残されているもの
であった。
次に本発明の辞書の木の構成と字列の符号化方法を図
(c)および(d)により説明する。
(c)および(d)により説明する。
本発明では、図(d)に示すように、直前の最終文字
との従属関係において、現文字部分列の符号を付すよう
にした。
との従属関係において、現文字部分列の符号を付すよう
にした。
そして、直前の文字列の最終文字ごとに図(c)に示
すように、先頭文字およびその展開文字で木を構成する
ようにし、各木毎に、各文字列の番号を付すようにし
た。
すように、先頭文字およびその展開文字で木を構成する
ようにし、各木毎に、各文字列の番号を付すようにし
た。
例えば、直前の文字が「a」の場合にその文字「a」
に一文字「a」がつくときは、その一文字「a」のその
木におけるインデックス1(番号)とし、直前の文字
「a」に対する文字列「ab」はインデックス7、直前の
文字「a」に続く一文字「b」は番号2とする。また、
直前の文字列が「b」である一文字「a」は直前文字列
「b」の木のインデックス1、「ab」はその木における
インデックス4というように、直前文字列を根とする木
毎に各文字列のインデックスを付すようにする。
に一文字「a」がつくときは、その一文字「a」のその
木におけるインデックス1(番号)とし、直前の文字
「a」に対する文字列「ab」はインデックス7、直前の
文字「a」に続く一文字「b」は番号2とする。また、
直前の文字列が「b」である一文字「a」は直前文字列
「b」の木のインデックス1、「ab」はその木における
インデックス4というように、直前文字列を根とする木
毎に各文字列のインデックスを付すようにする。
このようにすることにより、各文字が等確率で出現す
る場合には、インデックス(各辞書の木における各部分
文字列の登録番号)の長さを1/256とすることができ
る。
る場合には、インデックス(各辞書の木における各部分
文字列の登録番号)の長さを1/256とすることができ
る。
通常、個別の木の大きさは、個別の木を全部合わせた
全体の木の大きさの十数分の一になるので、文字部分列
を識別する符号の長さを短くすることができ、圧縮率を
高めることが可能になる。
全体の木の大きさの十数分の一になるので、文字部分列
を識別する符号の長さを短くすることができ、圧縮率を
高めることが可能になる。
第1図は、本発明の符号化方法のための基本構成を示
す。
す。
図は、文字列が3文字a,b,cのみより成る文字列にお
いて、直前文字列の最終文字ごとに辞書を作成する場合
について、例示的に示したものである。
いて、直前文字列の最終文字ごとに辞書を作成する場合
について、例示的に示したものである。
図において、1は入力文字列、2は最終文字を根とす
る木ごとに登録文字部分のインデックス(I(n))を
登録した辞書、例えば、aを根とする木における文字部
分列ab、abcのインデックスはそれぞれ1、2等である
ことを示すもの、3は一文字ずつ入力文字列を読み出す
文字読出出力段、4は対象とする現文字部分列、5は現
文字部分列を辞書を参照して、登録されている文字部分
列より現文字部分列と一致する最大長の文字部分列を読
み取る辞書参照手段、8は読み出した文字列の最大一致
文字部分を辞書に登録されているインデックスに基づい
てコード化し、最大一致文字列に文字列の次の一文字を
延ばした新しく現れた現文字部分列に、直前文字列の最
終文字ごとにインデックスを定める符号化手段、9は現
文字列部分辞書に登録する辞書登録手段、10は最大一致
文字部分列の最終文字部分を記憶する最終文字記憶手
段、11は直前文字列の最終文字を根とする辞書の木の例
である。
る木ごとに登録文字部分のインデックス(I(n))を
登録した辞書、例えば、aを根とする木における文字部
分列ab、abcのインデックスはそれぞれ1、2等である
ことを示すもの、3は一文字ずつ入力文字列を読み出す
文字読出出力段、4は対象とする現文字部分列、5は現
文字部分列を辞書を参照して、登録されている文字部分
列より現文字部分列と一致する最大長の文字部分列を読
み取る辞書参照手段、8は読み出した文字列の最大一致
文字部分を辞書に登録されているインデックスに基づい
てコード化し、最大一致文字列に文字列の次の一文字を
延ばした新しく現れた現文字部分列に、直前文字列の最
終文字ごとにインデックスを定める符号化手段、9は現
文字列部分辞書に登録する辞書登録手段、10は最大一致
文字部分列の最終文字部分を記憶する最終文字記憶手
段、11は直前文字列の最終文字を根とする辞書の木の例
である。
入力文字列をababcb・・・を符号化する場合を例とし
て、第1図の基本構成の作用を具体的に説明する。
て、第1図の基本構成の作用を具体的に説明する。
本発明においては、例えば、文字部分列としてaを出
力する場合、直前文字部分列の最終文字がaに続くa
と、bに続くaではそれぞれaを根とする木のaとbを
根とする木のaとして区別して出力しなければならな
い。
力する場合、直前文字部分列の最終文字がaに続くa
と、bに続くaではそれぞれaを根とする木のaとbを
根とする木のaとして区別して出力しなければならな
い。
そのような各根につく1文字を出力するためには、木
の根となる各文字と1文字との組合せ(aa,ab,ac、ba・
・・)等を符号化側、復号化側の両方に、あらかじめ初
期化する際に作成しておき、そのコードによりaに続く
a,bに続くa等を区別して出力するか、そのような木の
根につく1文字があらたに現れた場合には1文字(生デ
ータ)を出力するようにする方法をとらなければならな
い。
の根となる各文字と1文字との組合せ(aa,ab,ac、ba・
・・)等を符号化側、復号化側の両方に、あらかじめ初
期化する際に作成しておき、そのコードによりaに続く
a,bに続くa等を区別して出力するか、そのような木の
根につく1文字があらたに現れた場合には1文字(生デ
ータ)を出力するようにする方法をとらなければならな
い。
この作用説明においては、後者の1文字(生データ)
を出力する場合を例として説明する。生データを送ると
きはインデックス0に続けて送るものとする。
を出力する場合を例として説明する。生データを送ると
きはインデックス0に続けて送るものとする。
(1) 文字列読出手段3は最初の文字aを読み出し、
文字部分列4とする。辞書参照手段5は辞書を参照し、
aが未登録であることを確認する。
文字部分列4とする。辞書参照手段5は辞書を参照し、
aが未登録であることを確認する。
符号化手段8は、辞書にインデックス0を設定する。
辞書登録手段9は、直前文字列の最終文字0の木にa
のインデックス1で辞書の登録位置(n=1)に登録す
る。
のインデックス1で辞書の登録位置(n=1)に登録す
る。
文字aは生データであるので0aを出力する。そして、
直前文字列の最終文字としてaを記憶する。
直前文字列の最終文字としてaを記憶する。
(2) 次に、第2番目の文字bを読み取る。
そこで、直前文字列の最終文字aと入力文字bとによ
る文字列abを辞書を参照する。abは未登録であり、直前
の文字列の最終文字(以後,単に最終文字と称する)は
aであるので文字列abを最終文字がaである辞書の登録
装置2に、aを根とする木の第1番目の登録文字部分列
としてインデックス1を定め、登録する。
る文字列abを辞書を参照する。abは未登録であり、直前
の文字列の最終文字(以後,単に最終文字と称する)は
aであるので文字列abを最終文字がaである辞書の登録
装置2に、aを根とする木の第1番目の登録文字部分列
としてインデックス1を定め、登録する。
そして、いま入力したbは生データであるので、0bを
出力し、直前の文字列の最終文字としてbを記憶する。
出力し、直前の文字列の最終文字としてbを記憶する。
(3) 同様に、第3番目の文字aを入力する。
そこで、直前の文字列の最終文字bと読み取ったaに
よる文字列baを辞書を参照する。
よる文字列baを辞書を参照する。
baはないので、文字部分列「ba」を直前文字列の最終
文字bに続く辞書のbを根とする木の最初の文字として
インデックス1を定め、最終文字bの辞書の登録位置3
(n=3)に登録する。
文字bに続く辞書のbを根とする木の最初の文字として
インデックス1を定め、最終文字bの辞書の登録位置3
(n=3)に登録する。
aは生データであるので0aを出力し、aを直前文字列
の最終文字として記憶する。
の最終文字として記憶する。
(4) 次に、第4番目の文字bを読み取る。
そこで、直前文字列の最終文字aと読み取ったbとに
よる文字列abを最終文字aに続く辞書と参照する。
よる文字列abを最終文字aに続く辞書と参照する。
abは登録位置2(n=2)に登録されているので、さ
らに次の文字cを読み取る。
らに次の文字cを読み取る。
文字列abcは辞書に未登録であるので、符号化手段8
は、最大一致文字列「ab」を、最終文字aに続く辞書の
aを根とする木における「ab」のインデックス1により
コード化して出力し、同時に、aを最終文字とする辞書
の登録位置4に新しく現れた文字列「abc」をaを根と
する木の2番目の文字列としてインデックス2で登録す
る。
は、最大一致文字列「ab」を、最終文字aに続く辞書の
aを根とする木における「ab」のインデックス1により
コード化して出力し、同時に、aを最終文字とする辞書
の登録位置4に新しく現れた文字列「abc」をaを根と
する木の2番目の文字列としてインデックス2で登録す
る。
出力した最大一致文字列abの最終文字bを直前文字列
の最終文字として記憶する。
の最終文字として記憶する。
記憶してある最終文字bと読み取ったcとの文字列bc
について辞書を参照し,未登録であることを判定すると
文字列bcを、最終文字bに続く辞書のbを根とする木の
最初の文字部分列としてインデックス1で、辞書の登録
位置5(n=5)に登録する。
について辞書を参照し,未登録であることを判定すると
文字列bcを、最終文字bに続く辞書のbを根とする木の
最初の文字部分列としてインデックス1で、辞書の登録
位置5(n=5)に登録する。
そして、文字cを生データとして0cにより出力する。
以下、同様の手続きを進め、出力コード 0a0b0a10c・・・ を得る。
次に第2図により、データ圧縮コードを文字列に復号
する方式を説明する。
する方式を説明する。
第2図は、本発明の復号方法のための基本構成を示
す。
す。
図において、21は入力コード、22は入力コードより復
元した辞書、23は入力コード読み取り手段、24は入力コ
ードの表わすインデックスと復元された直前文字列の最
終文字、25は辞書参照手段、26はインデックスと直前文
字列の最終文字に対応する辞書の登録文字列より文字列
を復号する文字部分列復号手段、27は復元文字列より復
号文字を出力する復元文字出力手段、28は復元した直前
の文字部分列の最終文字を記憶する最終文字記憶手段、
29は復号文字列と次に復号される復号文字列の第1文字
により構成される文字部分列を直前文字列の最終文字の
木にインデックスにより登録する辞書復元手段である。
元した辞書、23は入力コード読み取り手段、24は入力コ
ードの表わすインデックスと復元された直前文字列の最
終文字、25は辞書参照手段、26はインデックスと直前文
字列の最終文字に対応する辞書の登録文字列より文字列
を復号する文字部分列復号手段、27は復元文字列より復
号文字を出力する復元文字出力手段、28は復元した直前
の文字部分列の最終文字を記憶する最終文字記憶手段、
29は復号文字列と次に復号される復号文字列の第1文字
により構成される文字部分列を直前文字列の最終文字の
木にインデックスにより登録する辞書復元手段である。
次に、第2図の復号方式の基本構成の動作を第1図の
基本構成により符号化したコード0a0b0a10c・・・を復
号する場合を例として具体的に説明する。
基本構成により符号化したコード0a0b0a10c・・・を復
号する場合を例として具体的に説明する。
(1) まず、入力コード読み取り手段23は入力コード
0aを読み取る。0をともなっていることから生データで
あると判定し、文字部分列復号手段26は文字aを復号
し、出力する。そして、復号辞書22の登録位置1に文字
aを直前文字列の最終文字0に続く辞書にインデックス
1で登録する。同時に、復号文字列の最終文字aを記憶
する。
0aを読み取る。0をともなっていることから生データで
あると判定し、文字部分列復号手段26は文字aを復号
し、出力する。そして、復号辞書22の登録位置1に文字
aを直前文字列の最終文字0に続く辞書にインデックス
1で登録する。同時に、復号文字列の最終文字aを記憶
する。
(2) 次のコード0bを読み取る。生データであるの
で、文字bを復号して出力し、記憶してある文字aとい
ま読み取ったbとの文字列abをaを最終文字とするaを
根とする木の辞書の登録位置2にインデックス1で登録
する。
で、文字bを復号して出力し、記憶してある文字aとい
ま読み取ったbとの文字列abをaを最終文字とするaを
根とする木の辞書の登録位置2にインデックス1で登録
する。
さらに、復号した文字部分列の直前の文字列の最終文
字bを記憶する。
字bを記憶する。
(3) 次に0aを読む。最終文字がbなので最終文字b
の辞書を参照し、baが未登録であることを判定すると、
文字列baを最終文字bに続く辞書のbを根とする木に登
録位置3、インデックス1で登録する。そして,aを出力
する。
の辞書を参照し、baが未登録であることを判定すると、
文字列baを最終文字bに続く辞書のbを根とする木に登
録位置3、インデックス1で登録する。そして,aを出力
する。
(4) 次のコード1を読み出す。そして、直前の文字
列の最終文字aの辞書のインデックスを1を参照し、文
字列abを復元し、先頭の文字aを除いてbを出力する。
前回の最終文字aを直々前の最終文字として記憶し,今
回復元した文字列abの最終文字をの最終文字bとして記
憶する。
列の最終文字aの辞書のインデックスを1を参照し、文
字列abを復元し、先頭の文字aを除いてbを出力する。
前回の最終文字aを直々前の最終文字として記憶し,今
回復元した文字列abの最終文字をの最終文字bとして記
憶する。
(5) 1は登録済であったので,次の0cを読み取る。
0cは生データであるので、文字cを復号する。直前に復
号した文字部分列abといま復号した文字cにより文字列
abcを最終文字aに続く辞書を参照し,未登録であるこ
とを確認すると、最終文字aに続く辞書に登録位置4、
インデックス2で登録し辞書を復元する。
0cは生データであるので、文字cを復号する。直前に復
号した文字部分列abといま復号した文字cにより文字列
abcを最終文字aに続く辞書を参照し,未登録であるこ
とを確認すると、最終文字aに続く辞書に登録位置4、
インデックス2で登録し辞書を復元する。
(6) 復号した直前の文字列abの最終文字bを記憶し
ておき、bcについて辞書を参照し、未登録であることを
判定するとbcを最終文字bに続く辞書のbの木の根に続
く文字列としてインデックス5で登録する。
ておき、bcについて辞書を参照し、未登録であることを
判定するとbcを最終文字bに続く辞書のbの木の根に続
く文字列としてインデックス5で登録する。
上記の説明においては、直前文字列の最終文字ごとに
辞書の木を作成する場合について、説明したが、最終文
字をその種類等によりグループにまとめて、グループご
とに辞書の木を作成し、続く文字部分列を登録するよう
にしてもよい。
辞書の木を作成する場合について、説明したが、最終文
字をその種類等によりグループにまとめて、グループご
とに辞書の木を作成し、続く文字部分列を登録するよう
にしてもよい。
第3図〜第6図により本発明のデータ圧縮方法の説明
をする。
をする。
第3図は、本発明を実施するための装置構成を示す。
本実施例においては、辞書を文字部分列を登録する全
体辞書と、直前の文字列の最終文字ごとに、続く文字部
分列を全体辞書の登録位置に対応付けてインデックスに
より登録した個別辞書とに分けて作成している。
体辞書と、直前の文字列の最終文字ごとに、続く文字部
分列を全体辞書の登録位置に対応付けてインデックスに
より登録した個別辞書とに分けて作成している。
図において、30は入力文字列を符号化するための入力
文字列Kを格納するための入力文字列Kを格納するメモ
リ、31は文字部分列コードωを格納するメモリ、32は直
前文字部分列の最終文字PKの格納メモリ、33は符号化の
対象としている現文字列の最終文字K1の格納メモ、34は
メモリより成る全体辞書D(n)、35はメモリより成る
個別辞書で0、a、b、c・・・等256の各文字ごとに
構成されるもの、36は辞書の木における文字部分列の登
録階層の深さを計測するカウンタ、37−0〜37−255は
個別辞書0〜255の各インデックスm(0)〜m(255)
のカウンタ、38は全体辞書の登録番号nのカウンタ、39
は辞書を参照しさらに辞書を作成する辞書参照および作
成手段、40は読み取った文字部分列を符号化する符号作
成手段、41は作成した文字部分列の符号を出力する符号
出力手段、42はプログラムに従ってデータの符号化処理
の実行、制御を行うCPUである。
文字列Kを格納するための入力文字列Kを格納するメモ
リ、31は文字部分列コードωを格納するメモリ、32は直
前文字部分列の最終文字PKの格納メモリ、33は符号化の
対象としている現文字列の最終文字K1の格納メモ、34は
メモリより成る全体辞書D(n)、35はメモリより成る
個別辞書で0、a、b、c・・・等256の各文字ごとに
構成されるもの、36は辞書の木における文字部分列の登
録階層の深さを計測するカウンタ、37−0〜37−255は
個別辞書0〜255の各インデックスm(0)〜m(255)
のカウンタ、38は全体辞書の登録番号nのカウンタ、39
は辞書を参照しさらに辞書を作成する辞書参照および作
成手段、40は読み取った文字部分列を符号化する符号作
成手段、41は作成した文字部分列の符号を出力する符号
出力手段、42はプログラムに従ってデータの符号化処理
の実行、制御を行うCPUである。
第4図は第3図の符号化のための装置構成のフローを
示す。
示す。
第5図(a)、(b)は、それぞれ文字列としてabab
cbaba・・・を符号化した場合の全体辞書と個別辞書の
実施例の構成を示す。個別辞書0は最終文字0(初期
値)に続く文字列を登録する個別辞書である。個別辞書
aは最終文字aに続く文字列を登録する個別辞書であ
る。個別辞書bは最終文字bに続く文字列を登録する辞
書である。個別辞書cは最終文字cに続く文字列を登録
する個別辞書である。
cbaba・・・を符号化した場合の全体辞書と個別辞書の
実施例の構成を示す。個別辞書0は最終文字0(初期
値)に続く文字列を登録する個別辞書である。個別辞書
aは最終文字aに続く文字列を登録する個別辞書であ
る。個別辞書bは最終文字bに続く文字列を登録する辞
書である。個別辞書cは最終文字cに続く文字列を登録
する個別辞書である。
第6図(a)は、上記の文字列を符号化した場合の個
別辞書の木の実施例を示す。図6(a)には図示されて
いないが,最終文字aに繋がる文字列ba,最終文字bに
繋がるab等の文字列も存在しえる。そして,最終文字a
に繋がるab,最終文字bに繋がるabは区別され、最終文
字aに繋がるba,最終文字bに繋がるbaに区別される。
別辞書の木の実施例を示す。図6(a)には図示されて
いないが,最終文字aに繋がる文字列ba,最終文字bに
繋がるab等の文字列も存在しえる。そして,最終文字a
に繋がるab,最終文字bに繋がるabは区別され、最終文
字aに繋がるba,最終文字bに繋がるbaに区別される。
本実施例は、直前文字列の最終文字で選択する256個
の個別辞書の各木iについて節点(インデックス)の個
数をm(i)で管理する。初期化のとき、256個のm
(i)をクリアしておく。また、LZW符号と同様に全体
の辞書の木の節点(インデックス)の個数をnで管理す
る。全体辞書は初期化のとき0〜255で直前文字列の最
終文字を指定し、256から新たな文字列を登録すること
にし、nに256をセットしておく。最初、直前文字列は
ないので、直前文字列の最終文字を示すPKは0にセット
するとともに最初のインデックスωを0にセットしてお
く。
の個別辞書の各木iについて節点(インデックス)の個
数をm(i)で管理する。初期化のとき、256個のm
(i)をクリアしておく。また、LZW符号と同様に全体
の辞書の木の節点(インデックス)の個数をnで管理す
る。全体辞書は初期化のとき0〜255で直前文字列の最
終文字を指定し、256から新たな文字列を登録すること
にし、nに256をセットしておく。最初、直前文字列は
ないので、直前文字列の最終文字を示すPKは0にセット
するとともに最初のインデックスωを0にセットしてお
く。
一文字入力した時LZW符号と手順は同様である。全体
辞書にωKの文字列が登録されていれば、全体辞書の登
録されているアドレスは新たなωとおいて、以下同様に
次の文字を入力するとともに、辞書に登録してあるか否
かを探索する操作を繰り返して、入力データと一致する
辞書に登録してある最長の文字列を探し出す。この際、
最長文字列の辞書の木における深さDPを計数するととも
に、文字列の最終文字K1を保持しておく。
辞書にωKの文字列が登録されていれば、全体辞書の登
録されているアドレスは新たなωとおいて、以下同様に
次の文字を入力するとともに、辞書に登録してあるか否
かを探索する操作を繰り返して、入力データと一致する
辞書に登録してある最長の文字列を探し出す。この際、
最長文字列の辞書の木における深さDPを計数するととも
に、文字列の最終文字K1を保持しておく。
本実施例では符号語を2つのモードに分けて出力す
る。すなわち、最初、探索木の各根につく葉を登録する
ときは、生データを符号化し、それ以外の葉は符号化文
字列をそのインデックスで符号化後、次の文字列の先頭
文字を付けて、一文字延ばしながら辞書に登録する。
る。すなわち、最初、探索木の各根につく葉を登録する
ときは、生データを符号化し、それ以外の葉は符号化文
字列をそのインデックスで符号化後、次の文字列の先頭
文字を付けて、一文字延ばしながら辞書に登録する。
モード1:もし、求めた最長一致文字列が木の深さ0であ
れば(すなわち、木の根に直接繋がる葉)であれば、そ
の木の〔最大インデックス+1〕を出力するのに続け
て、入力した文字Kを生データで出力する。
れば(すなわち、木の根に直接繋がる葉)であれば、そ
の木の〔最大インデックス+1〕を出力するのに続け
て、入力した文字Kを生データで出力する。
モード2:もし、最長一致文字列が木の深さ1以上であれ
ば、全体辞書のインデックスωを個別辞書のインデック
スiに変換してから出力する。全体辞書Dのインデック
スωから個別辞書Iのインデックスiへの変換は次のよ
うにして行う。
ば、全体辞書のインデックスωを個別辞書のインデック
スiに変換してから出力する。全体辞書Dのインデック
スωから個別辞書Iのインデックスiへの変換は次のよ
うにして行う。
符号化文字列が直前文字列の最終文字列PKに続くよう
に、各文字列の第1文字から全体辞書の根に対応付けて
探索する代わりに、PKを全体辞書の根に対応付けて探索
するようにする。そして,符号化済インデックスωと次
の文字Kの組を全体辞書Dの新しいアドレスnに登録す
るとともに、個別辞書Iのアドレスnに直前文字列の各
最終文字PKから始まる辞書の木毎に新たなインデックス
m(pk)を登録する。登録語、nとm(pk)は一つイン
クリメントする。この個別辞書を作成しておくことで、
LZW符号と同様の手順で全体辞書のインデックスωを見
つけた後、個別辞書のI(ω)を参照することによりイ
ンデックスωを直前の最終文字から始まるインデックス
iに変換することができる。
に、各文字列の第1文字から全体辞書の根に対応付けて
探索する代わりに、PKを全体辞書の根に対応付けて探索
するようにする。そして,符号化済インデックスωと次
の文字Kの組を全体辞書Dの新しいアドレスnに登録す
るとともに、個別辞書Iのアドレスnに直前文字列の各
最終文字PKから始まる辞書の木毎に新たなインデックス
m(pk)を登録する。登録語、nとm(pk)は一つイン
クリメントする。この個別辞書を作成しておくことで、
LZW符号と同様の手順で全体辞書のインデックスωを見
つけた後、個別辞書のI(ω)を参照することによりイ
ンデックスωを直前の最終文字から始まるインデックス
iに変換することができる。
第5図および第6図を参照しつつ、第4図のフローを
説明する。
説明する。
図における初期条件の設定ステップは、個別辞書を
256個備える場合を示しているが、説明を簡単にするた
め、文字列として、文字a,b,cの3文字のみよりなる文
字列ababc・・・を符号化する場合を考える。
256個備える場合を示しているが、説明を簡単にするた
め、文字列として、文字a,b,cの3文字のみよりなる文
字列ababc・・・を符号化する場合を考える。
まず、装置の全体を初期化する()。
初期条件として、(1)直前文字列の最終文字PKを0
とする。(2)文字列コード格納メモリの初期値をいま
の場合0とする(第4図は、256としてある)。(3)
辞書の木の深さDPの測定カウンタを0とする。(4)全
体辞書の先頭の登録位置を示す先頭アドレスを今の場合
4とする(第4図においては、256としてある)。個別
辞書のインデックスの個数の初期値をそれぞれ0とす
る。いまの場合、個別辞書は0,a,b,cの4つよりなるの
で、それぞれの辞書に登録されるインデックスの個数m
(0),m(a),m(b),m(c)を0とする。
とする。(2)文字列コード格納メモリの初期値をいま
の場合0とする(第4図は、256としてある)。(3)
辞書の木の深さDPの測定カウンタを0とする。(4)全
体辞書の先頭の登録位置を示す先頭アドレスを今の場合
4とする(第4図においては、256としてある)。個別
辞書のインデックスの個数の初期値をそれぞれ0とす
る。いまの場合、個別辞書は0,a,b,cの4つよりなるの
で、それぞれの辞書に登録されるインデックスの個数m
(0),m(a),m(b),m(c)を0とする。
(1)入力文字列ababc・・・の先頭文字aを読み取る
()。
()。
において文字列を全部読み取って、読み取る文字列
がなければに進んで処理を終了する。今の場合,読み
取る文字があるのでに進む。
がなければに進んで処理を終了する。今の場合,読み
取る文字があるのでに進む。
直前文字列0に続く文字列aは全体辞書に未登録であ
るから、に進む。
るから、に進む。
いま、深さDPは0(モードI)であるからに進む。
いまの場合、上記のモード1に該当する場合であるの
で、m(0)=0と生データaにより符号語として0aを
出力する()。
で、m(0)=0と生データaにより符号語として0aを
出力する()。
そこで、で全体辞書D(n=4)にいま入力した文
字列a(ωの初期値を0としてあるので0a)を登録す
る。その処理は、個別辞書0の登録インデックス個数m
(0)を1インクリメントして1とし、n=4にインデ
ックスI(4)=1を登録する。
字列a(ωの初期値を0としてあるので0a)を登録す
る。その処理は、個別辞書0の登録インデックス個数m
(0)を1インクリメントして1とし、n=4にインデ
ックスI(4)=1を登録する。
次に、全体辞書の登録位置nを1インクリメントする
()。
()。
次に、最終文字列PKをいま読み取ったaとし、文字列
コードωを読み取った文字aのコード(初期条件におい
て設定した1)とする。
コードωを読み取った文字aのコード(初期条件におい
て設定した1)とする。
(2)次の第2番目の文字bを読み取る。
ωK=1bは、辞書に未登録であるので、に進み、DP
=0であるから、に進む。
=0であるから、に進む。
そこで、モード1の場合であるから、0bを外部に出力
する。
する。
そこで、ωK=1bを全体辞書D(n=5)に登録し、
さらに、個別辞書a(PK=a)のインデックスの登録個
数m(a)を1インクリメントして1とし、I(5)=
1を登録する()。nを1インクリメントする
()。そして、最終文字PKをいま読み取ったbとし、
入力文字コードωを初期条件としてさだめたbのコード
2とする。
さらに、個別辞書a(PK=a)のインデックスの登録個
数m(a)を1インクリメントして1とし、I(5)=
1を登録する()。nを1インクリメントする
()。そして、最終文字PKをいま読み取ったbとし、
入力文字コードωを初期条件としてさだめたbのコード
2とする。
(3)次に、第3番目の文字aを読み取る。
ωK=2aは未登録であるので、に進み、DP=0であ
るから、でモード1として、m(b)=0(bの個別
辞書の木には文字列はまだない)であるから生データ0a
を出力する。
るから、でモード1として、m(b)=0(bの個別
辞書の木には文字列はまだない)であるから生データ0a
を出力する。
そこで、ωK=2aを全体辞書D(n=6)に登録し、
同時に、個別辞書b(PK=b)のm(b)を1つだけイ
ンクリメントし、個別辞書bにn=6に1を登録する
()。次に、nを1だけインクリメントとし()、
PKをa、ω=1として次の文字bを読み取る。
同時に、個別辞書b(PK=b)のm(b)を1つだけイ
ンクリメントし、個別辞書bにn=6に1を登録する
()。次に、nを1だけインクリメントとし()、
PKをa、ω=1として次の文字bを読み取る。
(4)次に、第4番目の文字bを読み取る。の判断に
おいて、ωK=1bは、全体辞書を参照すると、n=5で
登録済であるから、に進む。
おいて、ωK=1bは、全体辞書を参照すると、n=5で
登録済であるから、に進む。
そこで、ωをいま全体辞書から読み取ったn=5の登
録文字列1bとし、階層の深さDPを1インクリメントして
DP=1、いま読み取ったbを最終文字格納メモリK1に格
納する。
録文字列1bとし、階層の深さDPを1インクリメントして
DP=1、いま読み取ったbを最終文字格納メモリK1に格
納する。
(5)次の第5番目の文字cを読み取る。
次に、でωK=1bc(ω=1bc,K=c)が全体辞書に
登録されているか判断する。ωK=1bcは未登録である
から、に進む。
登録されているか判断する。ωK=1bcは未登録である
から、に進む。
いま、DP=1であるから、に進む。
において、ω=1b(n=5)を登録している個別辞
書aを参照し、インデックスI(n=5)=1を出力す
る。
書aを参照し、インデックスI(n=5)=1を出力す
る。
次に、において、ωK=1bc(abc)を全体辞書のn
=7の登録位置に登録する。同時に個別辞書aのm(P
K)を1つインクリメントし、インデックスI(m=
7)=2を登録する。
=7の登録位置に登録する。同時に個別辞書aのm(P
K)を1つインクリメントし、インデックスI(m=
7)=2を登録する。
そして、nを1インクリメントし、深さDPを0とす
る。
る。
さらに、PKを最終文字格納メモリK1に格納されている
bとし、ωのK1のコード2とする。そして、におい
て、再度いま読み取った第5番目の文字cをKとしてω
K=2cが全体辞書に登録されているかどうか判断する。
bとし、ωのK1のコード2とする。そして、におい
て、再度いま読み取った第5番目の文字cをKとしてω
K=2cが全体辞書に登録されているかどうか判断する。
2cは全体辞書に未登録であるので、に進み、DP=0
であるから、に進み、文字cを生データとしてモード
1の符号語0cを出力する。
であるから、に進み、文字cを生データとしてモード
1の符号語0cを出力する。
そこで、全体辞書にωK=2cをn=8で登録し、いま
PK=bであるから、個別辞書bのm(b)を1インクリ
メントし、I(n=8)=1(bの木の2番目の文字
列)を登録する()。
PK=bであるから、個別辞書bのm(b)を1インクリ
メントし、I(n=8)=1(bの木の2番目の文字
列)を登録する()。
さらに、nを1インクリメントし、PKをいま読み取っ
たcとし、ω=3(cの初期条件における値)として、
次の文字を読み取る。
たcとし、ω=3(cの初期条件における値)として、
次の文字を読み取る。
以下同様にして、入力文字列ababc・・・の出力符号
として0a0b0a10c0b1・・・を得る。
として0a0b0a10c0b1・・・を得る。
次に、上記の符号により文字列を復号する方法を説明
する。
する。
第7図は、本発明の復号化のための装置構成の実施例
を示す。
を示す。
図において、71は入力コード格納メモリ、72は個別辞
書のインデックスにより符号語で送られてくる入力コー
ドを全体辞書における文字列のコードに復元した復元コ
ードを格納するメモリ(1Nω)、73は復元された直前の
文字部分列を格納するメモリ(OLDω)、74は復元され
た直前の文字部分列の最終文字を格納するメモリ(P
K)、75は直々前の文字部分列の最終文字格納メモリ(P
K1)、76は復元文字列の第1文字格納メモリ(K1)、77
は入力符号より復元された文字部分列より随時復元する
全体辞書D(n)、78は復元文字列より随時復元する個
別辞書q(PK、インデックス)、79−0〜79−255は255
個の個別辞書のインデックス個数のカウンタ、80は入力
コードより個別辞書を参照する辞書参照手段、81は全体
辞書より文字部分列を復号する文字部分列復号手段、82
は復号文字部分列より文字部分列を全体辞書および対応
する個別辞書を復元する辞書復元手段、83はプログラム
に従って、復号処理を進めるCPUである。
書のインデックスにより符号語で送られてくる入力コー
ドを全体辞書における文字列のコードに復元した復元コ
ードを格納するメモリ(1Nω)、73は復元された直前の
文字部分列を格納するメモリ(OLDω)、74は復元され
た直前の文字部分列の最終文字を格納するメモリ(P
K)、75は直々前の文字部分列の最終文字格納メモリ(P
K1)、76は復元文字列の第1文字格納メモリ(K1)、77
は入力符号より復元された文字部分列より随時復元する
全体辞書D(n)、78は復元文字列より随時復元する個
別辞書q(PK、インデックス)、79−0〜79−255は255
個の個別辞書のインデックス個数のカウンタ、80は入力
コードより個別辞書を参照する辞書参照手段、81は全体
辞書より文字部分列を復号する文字部分列復号手段、82
は復号文字部分列より文字部分列を全体辞書および対応
する個別辞書を復元する辞書復元手段、83はプログラム
に従って、復号処理を進めるCPUである。
第8図〜第10図は一続きの符号化のフローを示し、第
8図は、初期化から入力符号が定義されているかどうか
を判断し、入力符号が定義されている場合には、個別辞
書を参照して全体辞書における文字列を表わすコードに
変換するまでのフローを示す。
8図は、初期化から入力符号が定義されているかどうか
を判断し、入力符号が定義されている場合には、個別辞
書を参照して全体辞書における文字列を表わすコードに
変換するまでのフローを示す。
第9図は、モード1の符号を復号する場合のフローを
示す。
示す。
第10図は、全体辞書の登録符号より、文字列を復号す
る場合のフローを示す。
る場合のフローを示す。
本実施例の復号化は、符号化の逆の動作をするが、LZ
W符号と同様に特に、辞書への新たな文字の登録が符号
化の時より下記のように1テンポ遅れて行われる点が異
なる。符号化に対して注目文字列の符号化を終了した時
点で一文字伸ばした文字列を〔注目文字列、次の文字〕
の組を辞書に登録できるう。これに対して、復号化で
は、注目文字列を一文字伸ばすときは、次の文字列の先
頭文字と合わせて辞書に登録するため、次の文字列の復
元が終了した時点で登録を行う。本発明では、前述のよ
うに符号語を2つのモードに分けている。モード2の符
号は前述のように次の文字列を復元した時点で辞書に登
録するが、モード1の符号は注目文字列の復元が終了し
た時点で辞書に登録することができる。このため、復元
のフローチャートでは、直前の文字列が辞書に未登録か
否かを調べてモード2の一文字伸ばした文字列を次の時
点で登録するとともに、モード1の符号は注目文字列を
復元した時点で辞書に登録する。
W符号と同様に特に、辞書への新たな文字の登録が符号
化の時より下記のように1テンポ遅れて行われる点が異
なる。符号化に対して注目文字列の符号化を終了した時
点で一文字伸ばした文字列を〔注目文字列、次の文字〕
の組を辞書に登録できるう。これに対して、復号化で
は、注目文字列を一文字伸ばすときは、次の文字列の先
頭文字と合わせて辞書に登録するため、次の文字列の復
元が終了した時点で登録を行う。本発明では、前述のよ
うに符号語を2つのモードに分けている。モード2の符
号は前述のように次の文字列を復元した時点で辞書に登
録するが、モード1の符号は注目文字列の復元が終了し
た時点で辞書に登録することができる。このため、復元
のフローチャートでは、直前の文字列が辞書に未登録か
否かを調べてモード2の一文字伸ばした文字列を次の時
点で登録するとともに、モード1の符号は注目文字列を
復元した時点で辞書に登録する。
モード2の符号として個別辞書のインデックスCODE
(=ωK)を入力する。本発明では、個別辞書のインデ
ックスCODEを全体辞書のインデックスωに変換した後、
文字列を復元する。個別辞書のインデックスCODEを全体
辞書のインデックスωに変換するため、文字列を辞書の
新たなアドレス(インデックス)nに登録するとき、
〔直前文字列の最終文字PK,個別辞書の新たなインデッ
クスm(PK)〕をアドレスとしてnを逆引き辞書qに登
録しておく。逆引き辞書qを用いることで、任意の個別
辞書インデックスCODEからq(PK,CODE)として全体辞
書インデックスωを求めることができる。
(=ωK)を入力する。本発明では、個別辞書のインデ
ックスCODEを全体辞書のインデックスωに変換した後、
文字列を復元する。個別辞書のインデックスCODEを全体
辞書のインデックスωに変換するため、文字列を辞書の
新たなアドレス(インデックス)nに登録するとき、
〔直前文字列の最終文字PK,個別辞書の新たなインデッ
クスm(PK)〕をアドレスとしてnを逆引き辞書qに登
録しておく。逆引き辞書qを用いることで、任意の個別
辞書インデックスCODEからq(PK,CODE)として全体辞
書インデックスωを求めることができる。
入力符号として前記の符号0a0b0a10c・・・が入力さ
れた場合を例として、第8図ないし第10図のフローを説
明する。
れた場合を例として、第8図ないし第10図のフローを説
明する。
先ず、装置の初期化を行う。
図における初期条件においては、個別辞書を256備え
る場合を示す。初期条件は、PK=0、ωの初期値を25
6、PK1=0全体辞書の先頭アドレスをn=256、OLDω=
0、各個別辞書のm(0)〜m(255)を0とする。
る場合を示す。初期条件は、PK=0、ωの初期値を25
6、PK1=0全体辞書の先頭アドレスをn=256、OLDω=
0、各個別辞書のm(0)〜m(255)を0とする。
ここでは、説明を簡単にするためa,b,cの3文字のみ
よりなる場合について考え、a、b、cについて初期条
件でそれぞれコード1,2,3を設定しておく。さらにωの
初期値を0としておく。
よりなる場合について考え、a、b、cについて初期条
件でそれぞれコード1,2,3を設定しておく。さらにωの
初期値を0としておく。
(1)先頭の入力コード0aを入力する()。
新たな符号があるのでに進む。全ての符号を読み
取ったために読み取る符号がなければ処理を終了する。
取ったために読み取る符号がなければ処理を終了する。
の判断においてコード未定義(辞書に未登録)であ
るので、に進む。
るので、に進む。
の判断は、直前の文字列の辞書の木の根に直接つく
符号をあらわすモード1か、あるいは、LZW符号化処理
において例外的に生じる符号に未定義なコード入力のあ
った場合かを判断する(Dは例外処理)。
符号をあらわすモード1か、あるいは、LZW符号化処理
において例外的に生じる符号に未定義なコード入力のあ
った場合かを判断する(Dは例外処理)。
いまは、モード1(符号0をともなう)であるので、
第9図のAに進む。
第9図のAに進む。
第9図のにおいて、入力符号0aを生データK=aと
して入力し、文字aを出力する()。
して入力し、文字aを出力する()。
いま、直前の文字列はないので、に進み、復元した
文字列aとPK=0より全体辞書D(n=4)に、0aを登
録し、全体辞書を復元する。さらに、PK=0により個別
辞書0に対してm(0)をインクリメントし、I(n=
4)=1として個別辞書0を復元する。
文字列aとPK=0より全体辞書D(n=4)に、0aを登
録し、全体辞書を復元する。さらに、PK=0により個別
辞書0に対してm(0)をインクリメントし、I(n=
4)=1として個別辞書0を復元する。
さらに、nを1インクリメントし()、PKにいま復
元したaを移し、PK=0をOLDωに移す。
元したaを移し、PK=0をOLDωに移す。
(2)次に、第2番目の入力コード0bを読み取る。
この場合も、モード1のコードであるから、から
に進み、さらにAに進む。
に進み、さらにAに進む。
第9図のフローにおいて(1)の1aを処理した場合と
同様に、生データbを出力する。直前の文字aは辞書に
登録済なのでに進む。PK=a,PK=bなので,全体辞書
の登録位置n=5にabを登録する。さらに、直前文字部
分列の最終文字aに対応する個別辞書aに、n=5、イ
ンデックス1を登録して個別辞書を復元する。さこで、
PK=b、OLDω=aとする。
同様に、生データbを出力する。直前の文字aは辞書に
登録済なのでに進む。PK=a,PK=bなので,全体辞書
の登録位置n=5にabを登録する。さらに、直前文字部
分列の最終文字aに対応する個別辞書aに、n=5、イ
ンデックス1を登録して個別辞書を復元する。さこで、
PK=b、OLDω=aとする。
(3)次に、第3の入力コード0aを入力する。符号0a
は、同様にモード1であるから、前記の処理をくり返
し、で復元コードとしてaを出力し、直前の文字列b
が登録済でで全体辞書のn=6にba(PK=b,K=a)
を書き込む。そして,個別辞書bにn=6、インデック
ス=1を書き込み,個別辞書bを復元する。
は、同様にモード1であるから、前記の処理をくり返
し、で復元コードとしてaを出力し、直前の文字列b
が登録済でで全体辞書のn=6にba(PK=b,K=a)
を書き込む。そして,個別辞書bにn=6、インデック
ス=1を書き込み,個別辞書bを復元する。
そこで、m(b)=2、n=7、PK=b、K=aとし
て、次の符号を読み取る。
て、次の符号を読み取る。
(4)第4番目のコードは1である。
符号1は定義されているので、第8図におけるに進
む。
む。
いま、直前の文字列がaで、入力符号が1であり、直
前の文字列の最終文字がaなので復元された個別辞書a
を参照し、対応する全体辞書の登録位置を確認する(個
別辞書aのI(n)=1からn=5を求める)。
前の文字列の最終文字がaなので復元された個別辞書a
を参照し、対応する全体辞書の登録位置を確認する(個
別辞書aのI(n)=1からn=5を求める)。
その結果、全体辞書のn=5に対応するωK=1bによ
り入力コードを変換し、INωに1bを書き込みBに進む。
り入力コードを変換し、INωに1bを書き込みBに進む。
でコード1bにより順次スタックに符号a,bの順に格
納し、で最後に格納したaを残して、上部のbを出力
する。
納し、で最後に格納したaを残して、上部のbを出力
する。
いま、直前の文字部分列は辞書に登録されているの
で、に進み、直々前の文字列の最終文字格納メモリに
PK1=a、復号文字の列bの最終文字bをPKに書き込
み、復号文字部分列の第1文字bをK1に書き込む。
で、に進み、直々前の文字列の最終文字格納メモリに
PK1=a、復号文字の列bの最終文字bをPKに書き込
み、復号文字部分列の第1文字bをK1に書き込む。
同時に、OLDωに復号コード1b(INω)を書き込み、
次のコードを読み取る。
次のコードを読み取る。
(5)次に第5番目の符号0cを読み取る。モード1のコ
ードであるので、第9図Aに進み、において、cを出
力する。
ードであるので、第9図Aに進み、において、cを出
力する。
いまの場合は、直前文字部分列が辞書に未登録の状態
であるので、において、OLDωの1bといま入力したc
とにより、全体辞書のn=7の位置に文字列abcを登録
し、同時にm(a)を1インクリメントし個別辞書aに
インデックス=2を書き込む。
であるので、において、OLDωの1bといま入力したc
とにより、全体辞書のn=7の位置に文字列abcを登録
し、同時にm(a)を1インクリメントし個別辞書aに
インデックス=2を書き込む。
において、nを1インクリメントし、において、
現在の文字列(最終文字bにおいてcを読み込んだ時点
における文字列bc)を個別辞書bに登録する。
現在の文字列(最終文字bにおいてcを読み込んだ時点
における文字列bc)を個別辞書bに登録する。
以下同様の手順により、入力コードを全部読み取り、
ababc・・・を復号することができる。
ababc・・・を復号することができる。
なお、第9図のフローにおける、のステップは、
従来技術において、LZW符号化の例外として説明された
場合の処理を表わす。前述における場合と同様であるの
で説明は省略する。なお、上記の実施例においては、各
個別辞書の木の根につく1文字については、生データを
出力する場合について説明したが、各個別辞書の木の根
に続く一文字の可能な組合わせについて、あらかじめ、
符号化側、復号化側において作成しておき、その作成コ
ードにより上記1文字については出力するようにしても
よい。
従来技術において、LZW符号化の例外として説明された
場合の処理を表わす。前述における場合と同様であるの
で説明は省略する。なお、上記の実施例においては、各
個別辞書の木の根につく1文字については、生データを
出力する場合について説明したが、各個別辞書の木の根
に続く一文字の可能な組合わせについて、あらかじめ、
符号化側、復号化側において作成しておき、その作成コ
ードにより上記1文字については出力するようにしても
よい。
また、出力する符号語は、常に〔注目文字列の個別イ
ンデックスω,次の1文字K〕の組であらわし、そこに
おける〔次の1文字〕を直前文字列の最終文字として用
いて次の1文字を符号化するようにしてもよい。
ンデックスω,次の1文字K〕の組であらわし、そこに
おける〔次の1文字〕を直前文字列の最終文字として用
いて次の1文字を符号化するようにしてもよい。
この場合には、符号化、復号化のフローが簡単な構成
となる。
となる。
本発明によれば、符号化する文字列に対して、過去の
文字列の履歴を採り入れたため、文字列間の頻度等を考
慮して符号語を定める等可能になり、データ圧縮におけ
る冗長性を削減することができる。
文字列の履歴を採り入れたため、文字列間の頻度等を考
慮して符号語を定める等可能になり、データ圧縮におけ
る冗長性を削減することができる。
また、辞書を複数に分割し、分割辞書のインデックス
により符合語を作成したため、インデックスの値が小さ
くなり、多いデータ量で、登録文字列の数が多くなった
場合にも、短い符号語によりデータ圧縮をすることがで
きるため、圧縮率が向上する。
により符合語を作成したため、インデックスの値が小さ
くなり、多いデータ量で、登録文字列の数が多くなった
場合にも、短い符号語によりデータ圧縮をすることがで
きるため、圧縮率が向上する。
第1図は、本発明の圧縮符号化方法のための基本構成を
示す図である。 第2図は、本発明の復号方法のための基本構成を示す図
である。 第3図は、本発明の符号化のための装置構成の実施例を
示す図である。 第4図は、本発明の符号化のフローの実施例を示す図で
ある。 第5図は、辞書の実施例を示す図である。 第6図は、辞書の木と符合語の実施例を示す図である。 第7図は、復号化のための装置構成の実施例を示す図で
ある。 第8図は、復号化のフロー(1)を示す図である。 第9図は、復号化のフロー(2)を示す図である。 第10図は、復号化のフロー(3)を示す図である。 第11図は、従来技術の課題を解決するための手段の説明
図である。 第12図は、従来のLZW符号の圧縮符号化の復号方式を示
す図である。 第13図は、従来のLZW符号化方式のフローを示す図であ
る。 第14図は、従来のLZW復号化方式のフローの説明図であ
る。 図面において、 1:入力文字列、 2:辞書、 3:文字列読み出し手段、 5:辞書参照手段、 8:符号化手段、 9:辞書登録手段、 10:最終文字記憶手段、 11:直前文字列の最終文字を根とする辞書の木、
示す図である。 第2図は、本発明の復号方法のための基本構成を示す図
である。 第3図は、本発明の符号化のための装置構成の実施例を
示す図である。 第4図は、本発明の符号化のフローの実施例を示す図で
ある。 第5図は、辞書の実施例を示す図である。 第6図は、辞書の木と符合語の実施例を示す図である。 第7図は、復号化のための装置構成の実施例を示す図で
ある。 第8図は、復号化のフロー(1)を示す図である。 第9図は、復号化のフロー(2)を示す図である。 第10図は、復号化のフロー(3)を示す図である。 第11図は、従来技術の課題を解決するための手段の説明
図である。 第12図は、従来のLZW符号の圧縮符号化の復号方式を示
す図である。 第13図は、従来のLZW符号化方式のフローを示す図であ
る。 第14図は、従来のLZW復号化方式のフローの説明図であ
る。 図面において、 1:入力文字列、 2:辞書、 3:文字列読み出し手段、 5:辞書参照手段、 8:符号化手段、 9:辞書登録手段、 10:最終文字記憶手段、 11:直前文字列の最終文字を根とする辞書の木、
フロントページの続き (72)発明者 千葉 広隆 神奈川県川崎市中原区上小田中1015番地 富士通株式会社内 (56)参考文献 特開 昭60−116228(JP,A) 特開 平3−262331(JP,A) 米国特許4876541(US,A) (58)調査した分野(Int.Cl.6,DB名) H03M 7/40
Claims (2)
- 【請求項1】入力文字列に対して辞書を参照し文字部分
列を順次符号化し、異なる文字列毎に異なる登録番号を
付与して辞書を作成し、現在の文字部分列を符号化済の
過去の文字部分列のうち一致する最大長の文字部分列の
複製として符号化するデータ圧縮方法において、 任意の連続する二つの文字部分列における符号化された
直前の文字部分列の最終文字もしくは最終文字グループ
を記憶し、直前の文字部分列の各最終文字もしくは各最
終文字グループに対応付けて文字部分列の各先頭文字毎
にグループ化して文字列を登録することにより辞書を作
成し、文字部分列に対して直前の文字列の最終文字もし
くは最終文字グループに対応する辞書を参照し、その登
録番号により入力文字列を符号化することを特徴とする
データ圧縮方法。 - 【請求項2】符号化した圧縮データを入力して復号し、
データ圧縮するのに使用した辞書を復元し、文字部分列
を符号化済の過去の文字部分列のうち一致する最大長の
文字部分列の複製として符号化された圧縮データを復号
する復号方法において、 任意の連続する二つの文字部分列における直前の文字部
分列の各最終文字もしくは各最終文字によるグループに
対応付けて文字部分列の各先頭文字毎にグループ化して
文字部分列を登録することにより作成された辞書に従っ
て符号化された圧縮データを入力し、復号された直前の
文字部分列の最終文字もしくは最終文字によるグループ
を記憶し、辞書を復元し、直前の文字部分列の最終文字
もしくは最終文字によるグループに対応する辞書を参照
することにより入力符号を文字部分列に復号することを
特徴とする圧縮データのデータ復元方法。
Priority Applications (11)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2070379A JP2774350B2 (ja) | 1990-03-20 | 1990-03-20 | データ圧縮方法および圧縮データのデータ復元方法 |
EP98201926A EP0871295B1 (en) | 1990-02-26 | 1991-02-26 | Method and apparatus for compression and decompression of data |
EP91904319A EP0472730B1 (en) | 1990-02-26 | 1991-02-26 | Data compression and restoration method and device therefor |
PCT/JP1991/000252 WO1991013395A1 (en) | 1990-02-26 | 1991-02-26 | Data compression and restoration method and device therefor |
DE69133481T DE69133481T2 (de) | 1990-02-26 | 1991-02-26 | Verfahren und Vorrichtung zur Kompression und Dekompression von Daten |
KR1019910701461A KR950013228B1 (ko) | 1990-02-26 | 1991-02-26 | 데이타 압축과 복원방법 및 그 장치 |
EP98201928A EP0878915A3 (en) | 1990-02-26 | 1991-02-26 | Method and apparatus for compression and decompression of data |
DE69133377T DE69133377T2 (de) | 1990-02-26 | 1991-02-26 | Verfahren und Vorrichtung zur Komprimierung und Dekomprimierung von Daten |
EP98201925A EP0871294B1 (en) | 1990-02-26 | 1991-02-26 | Method and apparatus for compression and decompression of data |
DE69132187T DE69132187D1 (de) | 1990-02-26 | 1991-02-26 | Verfahren zur komprimierung und wiederherstellung von daten und gerät dazu |
US08/003,876 US5254990A (en) | 1990-02-26 | 1993-01-11 | Method and apparatus for compression and decompression of data |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2070379A JP2774350B2 (ja) | 1990-03-20 | 1990-03-20 | データ圧縮方法および圧縮データのデータ復元方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH03270417A JPH03270417A (ja) | 1991-12-02 |
JP2774350B2 true JP2774350B2 (ja) | 1998-07-09 |
Family
ID=13429751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2070379A Expired - Fee Related JP2774350B2 (ja) | 1990-02-26 | 1990-03-20 | データ圧縮方法および圧縮データのデータ復元方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2774350B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2825960B2 (ja) * | 1990-10-15 | 1998-11-18 | 富士通株式会社 | データ圧縮方法及び復元方法 |
JP4456554B2 (ja) * | 2005-10-31 | 2010-04-28 | 富士通株式会社 | データ圧縮方法及び圧縮データ送信方法 |
JP4456574B2 (ja) * | 2006-03-13 | 2010-04-28 | 富士通株式会社 | 圧縮データ送信方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4876541A (en) | 1987-10-15 | 1989-10-24 | Data Compression Corporation | Stem for dynamically compressing and decompressing electronic data |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2590287B2 (ja) * | 1990-03-13 | 1997-03-12 | 富士通株式会社 | データ圧縮方法およびデータ圧縮装置 |
-
1990
- 1990-03-20 JP JP2070379A patent/JP2774350B2/ja not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4876541A (en) | 1987-10-15 | 1989-10-24 | Data Compression Corporation | Stem for dynamically compressing and decompressing electronic data |
Also Published As
Publication number | Publication date |
---|---|
JPH03270417A (ja) | 1991-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3273119B2 (ja) | データ圧縮・伸長装置 | |
JP3241788B2 (ja) | データ圧縮方式 | |
JP2774350B2 (ja) | データ圧縮方法および圧縮データのデータ復元方法 | |
JP3038223B2 (ja) | データ圧縮方式 | |
Ghuge | Map and Trie based Compression Algorithm for Data Transmission | |
JP3130324B2 (ja) | データ圧縮方式 | |
JP2590287B2 (ja) | データ圧縮方法およびデータ圧縮装置 | |
JP3241787B2 (ja) | データ圧縮方式 | |
JP3242795B2 (ja) | データ処理装置及びデータ処理方法 | |
WO1991013395A1 (en) | Data compression and restoration method and device therefor | |
JP3038233B2 (ja) | データ圧縮及び復元装置 | |
JPH05152971A (ja) | データ圧縮・復元方法 | |
JP3132774B2 (ja) | データ圧縮・復元装置 | |
JP2825960B2 (ja) | データ圧縮方法及び復元方法 | |
JP3088740B2 (ja) | データ圧縮及び復元方式 | |
JP3117760B2 (ja) | データ復元方式 | |
JP3012677B2 (ja) | Zl符号化方法 | |
Zia et al. | Two-level dictionary-based text compression scheme | |
JP3053656B2 (ja) | データ圧縮における辞書登録方式 | |
JP3083329B2 (ja) | データ圧縮復元方式 | |
JP3051501B2 (ja) | データ圧縮方法 | |
JP3100206B2 (ja) | データ圧縮方法 | |
JP3058711B2 (ja) | データ圧縮及び復元方法 | |
JP3388768B2 (ja) | データ圧縮及び復元方式 | |
JP3236747B2 (ja) | データ伸長方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |