JP3202488B2 - データ符号化及び復号化方式 - Google Patents
データ符号化及び復号化方式Info
- Publication number
- JP3202488B2 JP3202488B2 JP16713194A JP16713194A JP3202488B2 JP 3202488 B2 JP3202488 B2 JP 3202488B2 JP 16713194 A JP16713194 A JP 16713194A JP 16713194 A JP16713194 A JP 16713194A JP 3202488 B2 JP3202488 B2 JP 3202488B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- identifier
- data storage
- history
- compressed data
- 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)
Description
【0001】
【産業上の利用分野】本発明は、情報処理装置のプログ
ラムやデータを高速に圧縮符号化及び復号化する方式に
関する。
ラムやデータを高速に圧縮符号化及び復号化する方式に
関する。
【0002】
【従来の技術】情報処理装置のプログラムやテキストな
どのデータ列を、元データを完全復号可能な形で、圧縮
符号化するアルゴリズムとしては、“IEEE Transa
ctionson Information Theory”Vol.IT-23,N
o.3,pp.337−343のJ.ZivとA.Lempelによ
る論文“A Universal Algorithm for SequentialD
ata Complession"に記載の方式が有効であることが知
られている。これを、以下、簡単に説明する。
どのデータ列を、元データを完全復号可能な形で、圧縮
符号化するアルゴリズムとしては、“IEEE Transa
ctionson Information Theory”Vol.IT-23,N
o.3,pp.337−343のJ.ZivとA.Lempelによ
る論文“A Universal Algorithm for SequentialD
ata Complession"に記載の方式が有効であることが知
られている。これを、以下、簡単に説明する。
【0003】この方式による符号化の手順は次の通りで
ある。
ある。
【0004】まず、入力されたデータ列を逐次バッファ
に溜めておく。バッファ上のかかるデータ列を履歴デー
タ列という。方式によってタイミングなどは異なるが、
ある程度バッファに履歴データ列が蓄積された段階で、
さらに、入力されたデータ列(以下、新規データ列とい
う)と履歴データ列とを比較し、 A)新規データ列の先頭からの内容と一致するデータ列
(部分データ列)が履歴データ列中に存在すれば、これ
を「履歴参照」といい、これを示す識別子(以下、履歴
参照識別子という)と、その部分データ列の位置を示す
インデックス(以下、参照位置インデックスという)と
一致したデータの長さを示すインデックス(以下、参照
長さインデックスという)とからなる符号(以下、これ
を履歴参照インデックスという)を生成し、履歴参照識
別子,履歴参照インデックスの順に圧縮データ記憶手段
に記憶する。
に溜めておく。バッファ上のかかるデータ列を履歴デー
タ列という。方式によってタイミングなどは異なるが、
ある程度バッファに履歴データ列が蓄積された段階で、
さらに、入力されたデータ列(以下、新規データ列とい
う)と履歴データ列とを比較し、 A)新規データ列の先頭からの内容と一致するデータ列
(部分データ列)が履歴データ列中に存在すれば、これ
を「履歴参照」といい、これを示す識別子(以下、履歴
参照識別子という)と、その部分データ列の位置を示す
インデックス(以下、参照位置インデックスという)と
一致したデータの長さを示すインデックス(以下、参照
長さインデックスという)とからなる符号(以下、これ
を履歴参照インデックスという)を生成し、履歴参照識
別子,履歴参照インデックスの順に圧縮データ記憶手段
に記憶する。
【0005】B)新規データ列の先頭からの内容と一致
する部分データ列が履歴データ列中に存在しなければ、
これを「非参照」といい、これを示す識別子(以下、非
参照識別子という)を生成するとともに、新規データ列
の先頭の1文字(あるいは1バイト)を符号(非参照デ
ータという)とし、非参照識別子,非参照データの順で
圧縮データ記憶手段に記憶する。
する部分データ列が履歴データ列中に存在しなければ、
これを「非参照」といい、これを示す識別子(以下、非
参照識別子という)を生成するとともに、新規データ列
の先頭の1文字(あるいは1バイト)を符号(非参照デ
ータという)とし、非参照識別子,非参照データの順で
圧縮データ記憶手段に記憶する。
【0006】このようにして、新規データ列と履歴デー
タ列とが比較される毎に、圧縮データ記憶手段では、順
次識別子と符号とが追加記憶されていき、バッファで
は、圧縮データ記憶手段に記憶される符号に対応した新
規データ列が、これまでに記憶された履歴データに続い
て記憶されて新たな履歴データとなる。これにより、新
たに追加された履歴データ列も新規データ列との比較対
象となるが、バッファの容量いっぱいになると、新たな
履歴データ列の追加とともに、古い履歴データ列は排除
される。
タ列とが比較される毎に、圧縮データ記憶手段では、順
次識別子と符号とが追加記憶されていき、バッファで
は、圧縮データ記憶手段に記憶される符号に対応した新
規データ列が、これまでに記憶された履歴データに続い
て記憶されて新たな履歴データとなる。これにより、新
たに追加された履歴データ列も新規データ列との比較対
象となるが、バッファの容量いっぱいになると、新たな
履歴データ列の追加とともに、古い履歴データ列は排除
される。
【0007】上記の識別子や履歴参照インデックスは短
かい符号で構成される。履歴データ列中の部分データ列
に内容が一致する新規データ列の部分はかかる識別子と
履歴参照インデックスとに置換される。これにより、入
力されるデータ列の上記部分データ列に内容が一致する
部分が冗長部分として圧縮されることになり、従って、
新規データ列が圧縮符号化されることになる。
かい符号で構成される。履歴データ列中の部分データ列
に内容が一致する新規データ列の部分はかかる識別子と
履歴参照インデックスとに置換される。これにより、入
力されるデータ列の上記部分データ列に内容が一致する
部分が冗長部分として圧縮されることになり、従って、
新規データ列が圧縮符号化されることになる。
【0008】かかる圧縮データの復号化処理は次の通り
である。
である。
【0009】予め符号化処理のときと同じ大きさの履歴
データを保持するバッファが設けられ、まず、上記圧縮
データを記憶した圧縮データ記憶手段から最初の符号に
対する識別子を読み取り、この識別子が非参照識別子で
あれば、これに続く1文字分のデータを圧縮データ記憶
手段から読み取って伸長データ記憶手段に記憶するとと
もに、履歴データを保持するバッファにも、履歴データ
列として記憶する。
データを保持するバッファが設けられ、まず、上記圧縮
データを記憶した圧縮データ記憶手段から最初の符号に
対する識別子を読み取り、この識別子が非参照識別子で
あれば、これに続く1文字分のデータを圧縮データ記憶
手段から読み取って伸長データ記憶手段に記憶するとと
もに、履歴データを保持するバッファにも、履歴データ
列として記憶する。
【0010】読み出された上記識別子が履歴参照識別子
であれば、これに続く履歴参照インデックスを圧縮デー
タ記憶手段から読み取り、これの参照位置インデックス
と参照長さインデックスとが示す情報内容から、バッフ
ァ上の履歴データの対応する部分データ列を読み取っ
て、伸長データ記憶手段に記憶するとともに、新たな履
歴データ列として、このバッファにそこに既に記憶され
ている履歴データ列に続けて記憶する。
であれば、これに続く履歴参照インデックスを圧縮デー
タ記憶手段から読み取り、これの参照位置インデックス
と参照長さインデックスとが示す情報内容から、バッフ
ァ上の履歴データの対応する部分データ列を読み取っ
て、伸長データ記憶手段に記憶するとともに、新たな履
歴データ列として、このバッファにそこに既に記憶され
ている履歴データ列に続けて記憶する。
【0011】以上の動作が圧縮データ記憶手段の全ての
圧縮データについて繰り返し行なわれ、これにより、圧
縮データの復号が行なわれる。
圧縮データについて繰り返し行なわれ、これにより、圧
縮データの復号が行なわれる。
【0012】履歴参照インデックスの構成は、圧縮を行
なうデータの冗長性に応じて最適なビット長を選択する
ことができる。例えば、履歴参照インデックスを固定長
の2進表現する場合を考えると、プログラムのソースコ
ードのように冗長性が高く、部分データ列の長さが9バ
イトを超えるようなデータを圧縮する場合には、履歴参
照インデックスの参照位置インデックスに12ビット
を、参照長さインデックスに4ビットを夫々割り当てる
ことにより、圧縮率を高くすることができる。また、実
行プログラムコードのように冗長性がそれ程高くなく、
部分データ列の長さも9バイトを超えることは殆どない
データを圧縮する場合には、参照位置インデックスを1
1ビット乃至10ビットで、参照長さのインデックスを
3ビットで夫々構成すると、圧縮率が高くなる。
なうデータの冗長性に応じて最適なビット長を選択する
ことができる。例えば、履歴参照インデックスを固定長
の2進表現する場合を考えると、プログラムのソースコ
ードのように冗長性が高く、部分データ列の長さが9バ
イトを超えるようなデータを圧縮する場合には、履歴参
照インデックスの参照位置インデックスに12ビット
を、参照長さインデックスに4ビットを夫々割り当てる
ことにより、圧縮率を高くすることができる。また、実
行プログラムコードのように冗長性がそれ程高くなく、
部分データ列の長さも9バイトを超えることは殆どない
データを圧縮する場合には、参照位置インデックスを1
1ビット乃至10ビットで、参照長さのインデックスを
3ビットで夫々構成すると、圧縮率が高くなる。
【0013】このように、データの出現パターンをバッ
ファに保持し、それと入力データ列とを比較して符号化
する方法は、一般に、スライディングディクショナリ方
式、あるいはLZ符号化方式と呼ばれ、履歴の参照の仕
方や符号の構成によって様々な方法が提案されている。
この方式の特徴は復号処理が簡単なことであり、従っ
て、プログラムコードやデータの初期値、メニュー画面
データなどといった通常変更を伴わないものをこの方式
で圧縮して記憶し、実行時に復号化して用いるといった
用途に好適である。
ファに保持し、それと入力データ列とを比較して符号化
する方法は、一般に、スライディングディクショナリ方
式、あるいはLZ符号化方式と呼ばれ、履歴の参照の仕
方や符号の構成によって様々な方法が提案されている。
この方式の特徴は復号処理が簡単なことであり、従っ
て、プログラムコードやデータの初期値、メニュー画面
データなどといった通常変更を伴わないものをこの方式
で圧縮して記憶し、実行時に復号化して用いるといった
用途に好適である。
【0014】
【発明が解決しようとする課題】ところで、このように
符号化された圧縮データでの個々の符号は、元のデータ
でのバイト単位や文字単位とは異なる長さのものとな
る。従来技術では、かかる符号を単一の圧縮データ記憶
手段に生成順にシーケンシャルに記憶していた。また、
その圧縮データの符号を同じシーケンシャルで伸長処理
し、復号するようにしている。
符号化された圧縮データでの個々の符号は、元のデータ
でのバイト単位や文字単位とは異なる長さのものとな
る。従来技術では、かかる符号を単一の圧縮データ記憶
手段に生成順にシーケンシャルに記憶していた。また、
その圧縮データの符号を同じシーケンシャルで伸長処理
し、復号するようにしている。
【0015】以下、LZ符号化方式での圧縮データを得
る場合の従来技術を図5により説明する。但し、同図
(a)は圧縮データを、同図(b)は伸長データ(従っ
て、元のデータ)を夫々示し、また、図5(a),
(b)では、非参照識別子10、非参照データ11、履
歴参照識別子12、履歴参照インデックス13及び後述
する履歴複写データを模様で区別するようにしており、
これら模様との対象表も図示している。
る場合の従来技術を図5により説明する。但し、同図
(a)は圧縮データを、同図(b)は伸長データ(従っ
て、元のデータ)を夫々示し、また、図5(a),
(b)では、非参照識別子10、非参照データ11、履
歴参照識別子12、履歴参照インデックス13及び後述
する履歴複写データを模様で区別するようにしており、
これら模様との対象表も図示している。
【0016】なお、図5(a)での1区切りは8ビット
であり、図5(b)での1区切りは8ビットの文字を表
わしている。また、丸で囲んだ数字は非参照データ11
についての順序を示すものである。
であり、図5(b)での1区切りは8ビットの文字を表
わしている。また、丸で囲んだ数字は非参照データ11
についての順序を示すものである。
【0017】図5(b)のデータが元のデータとする場
合、区切りによって示す文字を左から順に1番目の文
字,2番目の文字,3番目の文字,……とする。この例
では、3番目の文字,7番目の文字が1番目の文字と内
容が等しく、4番目の文字,6番目の文字、8番目の文
字が2番目の文字と内容が等しいとする。前の文字と内
容が同じでない文字は、1番目の文字と2番目の文字
と5番目の文字である。前の文字と内容が同じ文字
は白抜きで同じ内容の文字に付された丸で囲んだ数字で
示している。
合、区切りによって示す文字を左から順に1番目の文
字,2番目の文字,3番目の文字,……とする。この例
では、3番目の文字,7番目の文字が1番目の文字と内
容が等しく、4番目の文字,6番目の文字、8番目の文
字が2番目の文字と内容が等しいとする。前の文字と内
容が同じでない文字は、1番目の文字と2番目の文字
と5番目の文字である。前の文字と内容が同じ文字
は白抜きで同じ内容の文字に付された丸で囲んだ数字で
示している。
【0018】ここで、各識別子を1ビット、履歴参照イ
ンデックスを14ビットとすると、かかる入力データ列
(元のデータ)をLZ符号化する場合、図5(a)に示
す元のデータは図5(b)に示されるような圧縮データ
となる。
ンデックスを14ビットとすると、かかる入力データ列
(元のデータ)をLZ符号化する場合、図5(a)に示
す元のデータは図5(b)に示されるような圧縮データ
となる。
【0019】即ち、1番目の文字と2番目の文字
は、前に同じ内容の文字がないから、非参照データ11
であり、夫々の直前毎に非参照識別子10が付加され
る。従って、これら文字,文字に対する8ビットの
非参照データ11は1ビットの非参照識別子10が付加
されて9ビットのデータとなる。
は、前に同じ内容の文字がないから、非参照データ11
であり、夫々の直前毎に非参照識別子10が付加され
る。従って、これら文字,文字に対する8ビットの
非参照データ11は1ビットの非参照識別子10が付加
されて9ビットのデータとなる。
【0020】また、3番目の文字と4番目の文字とは1
番目の文字と2番目の文字と内容が同じであるの
で、これら2つの文字に対して1番目の文字と2番目
の文字と同じ内容であることを示す上記の履歴参照イ
ンデックス13(これを、図5(a)では、符号Aとし
て示す)が形成され、これの先頭に1ビットの履歴参照
識別子12が付加される。ここで、履歴参照インデック
ス12が14ビットからなるものとすると、3番目の文
字と4番目の文字の16ビットのデータが14+1=1
5ビットのデータに圧縮されたことになる。
番目の文字と2番目の文字と内容が同じであるの
で、これら2つの文字に対して1番目の文字と2番目
の文字と同じ内容であることを示す上記の履歴参照イ
ンデックス13(これを、図5(a)では、符号Aとし
て示す)が形成され、これの先頭に1ビットの履歴参照
識別子12が付加される。ここで、履歴参照インデック
ス12が14ビットからなるものとすると、3番目の文
字と4番目の文字の16ビットのデータが14+1=1
5ビットのデータに圧縮されたことになる。
【0021】図5(b)での5番目の文字は非参照デ
ータ11であり、図5(a)に示すように、1ビットの
非参照識別子10が付加される。6番目の文字、7番目
の文字、8番目の文字は夫々、2番目の文字、1番目
の文字、2番目の文字と同じ内容であるから、これ
ら3文字に対して14ビットの履歴参照インデックス1
3が形成され、図5(a)において、符号Bとして示す
ように、1ビットの履歴参照識別子12が付加される。
この場合には、3文字の24ビットのデータが15ビッ
トのデータに圧縮されたことになる。
ータ11であり、図5(a)に示すように、1ビットの
非参照識別子10が付加される。6番目の文字、7番目
の文字、8番目の文字は夫々、2番目の文字、1番目
の文字、2番目の文字と同じ内容であるから、これ
ら3文字に対して14ビットの履歴参照インデックス1
3が形成され、図5(a)において、符号Bとして示す
ように、1ビットの履歴参照識別子12が付加される。
この場合には、3文字の24ビットのデータが15ビッ
トのデータに圧縮されたことになる。
【0022】ところで、図5(a)に示すような圧縮デ
ータの場合、8ビット毎に区分すると、非参照データ1
1や履歴参照データ13の区分とは関係がない区分とな
る。例えば、最初の8ビットの区分は、1ビットの非参
照識別子10と文字に対する非参照データ11の7ビ
ットからなり、次の8ビットの区分は、文字に対する
非参照データ11の1ビットと1ビットの非参照識別子
10と文字に対する非参照データ11の6ビットとか
らなる。一方、メモリへのアクセスはアドレス単位で行
なわれ、アドレス単位は8ビットあるいは16ビットで
ある。アドレス単位を8ビットとすると、例えば、文字
や文字に対する非参照データ11は2つのアドレス
単位にまたがって記憶されることになる。
ータの場合、8ビット毎に区分すると、非参照データ1
1や履歴参照データ13の区分とは関係がない区分とな
る。例えば、最初の8ビットの区分は、1ビットの非参
照識別子10と文字に対する非参照データ11の7ビ
ットからなり、次の8ビットの区分は、文字に対する
非参照データ11の1ビットと1ビットの非参照識別子
10と文字に対する非参照データ11の6ビットとか
らなる。一方、メモリへのアクセスはアドレス単位で行
なわれ、アドレス単位は8ビットあるいは16ビットで
ある。アドレス単位を8ビットとすると、例えば、文字
や文字に対する非参照データ11は2つのアドレス
単位にまたがって記憶されることになる。
【0023】このように、図5(a)に示す圧縮データ
では、非参照データ11や履歴参照インデックス13と
メモリでのアドレスとの対応関係が非常に複雑なものと
なり、かかるメモリから所望の非参照データ11や履歴
参照インデックス13を読み出すときには、対応するア
ドレス単位の割出しと対応する部分の切出しとが必要で
あった。
では、非参照データ11や履歴参照インデックス13と
メモリでのアドレスとの対応関係が非常に複雑なものと
なり、かかるメモリから所望の非参照データ11や履歴
参照インデックス13を読み出すときには、対応するア
ドレス単位の割出しと対応する部分の切出しとが必要で
あった。
【0024】ここで、図5(a)に示す圧縮データを、
アドレス単位を1バイト(8ビット)とするメモリに書
き込み、これを図5(a)に示す順で識別子や非参照デ
ータ、履歴参照インデックスを読み出す場合に必要なア
ドレス数(アクセス容量)を示すと、次の表1のように
なる。
アドレス単位を1バイト(8ビット)とするメモリに書
き込み、これを図5(a)に示す順で識別子や非参照デ
ータ、履歴参照インデックスを読み出す場合に必要なア
ドレス数(アクセス容量)を示すと、次の表1のように
なる。
【0025】
【表1】
【0026】表1において、例えば、最初の非参照識別
子11を読み出す場合には、この非参照識別子11は1
ビットであるから(取得ビット数1)、1つのアドレス
ですみ、この場合のアクセス容量は1バイトである。ま
た、文字に対する非参照データ11を読み出す場合に
は、8ビットの非参照データ11に対して2つのアドレ
スが必要であり、従って、アクセス容量は2バイトであ
る。文字に対する非参照データ11を読み出す場合で
も同様である。14ビットの履歴参照インデックス13
を読み出す場合には、図5(a)から明らかなように、
3つのアドレスが必要であり、このため、アドレス容量
は3バイトとなる。このようにして、図5(a)に示す
圧縮データを読み出すためには、全取得ビット数が57
ビットであるのに対し、全アクセス容量は17バイト
(=136ビット)となり、2倍以上のアクセス容量が
必要となる。
子11を読み出す場合には、この非参照識別子11は1
ビットであるから(取得ビット数1)、1つのアドレス
ですみ、この場合のアクセス容量は1バイトである。ま
た、文字に対する非参照データ11を読み出す場合に
は、8ビットの非参照データ11に対して2つのアドレ
スが必要であり、従って、アクセス容量は2バイトであ
る。文字に対する非参照データ11を読み出す場合で
も同様である。14ビットの履歴参照インデックス13
を読み出す場合には、図5(a)から明らかなように、
3つのアドレスが必要であり、このため、アドレス容量
は3バイトとなる。このようにして、図5(a)に示す
圧縮データを読み出すためには、全取得ビット数が57
ビットであるのに対し、全アクセス容量は17バイト
(=136ビット)となり、2倍以上のアクセス容量が
必要となる。
【0027】しかも、非参照データや履歴参照インデッ
クスの読出しでは、複数バイト(複数アドレス)にまた
がったデータの切出しや合成が必要である。例えば、図
5(a)における文字に対する非参照データ11を得
るためには、この非参照データが2つのアドレスにまた
がっているので、夫々のアドレスの読出しを行なうとと
もに、夫々のアドレスの読出しデータから非参照データ
11の部分を切り出し、それら切出し部分を合成しなけ
ればならない。このような処理を必要とするため、これ
ら非参照データや履歴参照インデックスを得るのに非常
な時間を要することになる。
クスの読出しでは、複数バイト(複数アドレス)にまた
がったデータの切出しや合成が必要である。例えば、図
5(a)における文字に対する非参照データ11を得
るためには、この非参照データが2つのアドレスにまた
がっているので、夫々のアドレスの読出しを行なうとと
もに、夫々のアドレスの読出しデータから非参照データ
11の部分を切り出し、それら切出し部分を合成しなけ
ればならない。このような処理を必要とするため、これ
ら非参照データや履歴参照インデックスを得るのに非常
な時間を要することになる。
【0028】また、従来では、復号処理を行なうための
履歴データをバッファに保持していたが、履歴データ
は、復号処理の進行とともに、内容を更新しなければな
らず、これによっても処理時間がかかるという問題があ
った。
履歴データをバッファに保持していたが、履歴データ
は、復号処理の進行とともに、内容を更新しなければな
らず、これによっても処理時間がかかるという問題があ
った。
【0029】本発明の目的は、かかる問題を解消し、高
速に圧縮データの復号を行なうことができるようにした
データ符号化及び復号化方式を提供することにある。
速に圧縮データの復号を行なうことができるようにした
データ符号化及び復号化方式を提供することにある。
【0030】
【課題を解決するための手段】上記目的を達成するため
に、本発明は、文字列からなる入力データをそれ以前に
入力された文字列と比較して同一内容の文字列があるか
否かを判定し、その判定結果を表わす識別子を生成する
とともに、以前に同じ内容の文字列がないときには、入
力データの先頭の1文字を非参照データとし、ある場合
には、最も古い同じ内容の文字列の位置と長さを表わす
インデックス(履歴参照インデックス)を生成し、かか
る履歴参照インデックスが元の文字列よりも短かいデー
タであるようにしてデータの圧縮を行なうに際し、この
ようにして得られる圧縮データを、識別子だけの入力順
の配列からなる第1のデータと、非参照データと履歴参
照インデックスとが入力順に配列されてなる第2のデー
タとで構成する。
に、本発明は、文字列からなる入力データをそれ以前に
入力された文字列と比較して同一内容の文字列があるか
否かを判定し、その判定結果を表わす識別子を生成する
とともに、以前に同じ内容の文字列がないときには、入
力データの先頭の1文字を非参照データとし、ある場合
には、最も古い同じ内容の文字列の位置と長さを表わす
インデックス(履歴参照インデックス)を生成し、かか
る履歴参照インデックスが元の文字列よりも短かいデー
タであるようにしてデータの圧縮を行なうに際し、この
ようにして得られる圧縮データを、識別子だけの入力順
の配列からなる第1のデータと、非参照データと履歴参
照インデックスとが入力順に配列されてなる第2のデー
タとで構成する。
【0031】また、本発明は、上記履歴参照インデック
スの長さが非参照データの長さの整数倍でない場合に
は、この履歴参照インデックスに対する元の文字列に続
く文字列の識別子をこの履歴参照インデックスに追加す
る。
スの長さが非参照データの長さの整数倍でない場合に
は、この履歴参照インデックスに対する元の文字列に続
く文字列の識別子をこの履歴参照インデックスに追加す
る。
【0032】
【作用】識別子は非参照データか履歴参照インデックス
かを示すものであるから、そのビット数はメモリのアド
レス単位のビット数以下とすることができ、従って、上
記第1のデータをメモリに格納する場合には、メモリの
各アドレスに1個ずつ識別子を格納することが可能とな
る。また、履歴参照インデックスの長さを非参照データ
の長さの整数倍とすれば、上記第2のデータは非参照デ
ータの長さを単位として区切ることができ、非参照デー
タの長さをメモリのアドレス単位のビット数に定めるこ
とにより、第2のデータをメモリに格納する場合、メモ
リの各アドレスに1個ずつしか非参照データが格納させ
ず、また、メモリの複数個のアドレスに1個の履歴参照
インデックスのみしか納まらないようにすることが可能
となる。これにより、データの伸長に際しては、メモリ
から圧縮データを読み出す場合、識別子や非参照データ
は1アドレスのアクセスで読み出すことができ、しか
も、かかるアクセスによって識別子や非参照データその
ものが得られることになる。また、履歴参照インデック
スを読み出す場合には、複数アドレスのアクセスを必要
とするが、履歴参照インデックスの長さはデータ圧縮の
観点から短く設定されるから、アクセスするアドレス数
もわずかなものであり、しかも、かかるアクセスによっ
て履歴参照インデックスそのものが得られることにな
る。
かを示すものであるから、そのビット数はメモリのアド
レス単位のビット数以下とすることができ、従って、上
記第1のデータをメモリに格納する場合には、メモリの
各アドレスに1個ずつ識別子を格納することが可能とな
る。また、履歴参照インデックスの長さを非参照データ
の長さの整数倍とすれば、上記第2のデータは非参照デ
ータの長さを単位として区切ることができ、非参照デー
タの長さをメモリのアドレス単位のビット数に定めるこ
とにより、第2のデータをメモリに格納する場合、メモ
リの各アドレスに1個ずつしか非参照データが格納させ
ず、また、メモリの複数個のアドレスに1個の履歴参照
インデックスのみしか納まらないようにすることが可能
となる。これにより、データの伸長に際しては、メモリ
から圧縮データを読み出す場合、識別子や非参照データ
は1アドレスのアクセスで読み出すことができ、しか
も、かかるアクセスによって識別子や非参照データその
ものが得られることになる。また、履歴参照インデック
スを読み出す場合には、複数アドレスのアクセスを必要
とするが、履歴参照インデックスの長さはデータ圧縮の
観点から短く設定されるから、アクセスするアドレス数
もわずかなものであり、しかも、かかるアクセスによっ
て履歴参照インデックスそのものが得られることにな
る。
【0033】また、履歴参照インデックスの長さは、入
力文字列と比較する既に入力された文字列をどこまで対
象とするかによってきまるが、非常に遡った文字列まで
も対象にすると、履歴参照インデックスは非常に長いも
のとなり、履歴参照インデックスと置換される文字列は
非常に長いものとしなければ、データ圧縮の効果が現わ
れず、短かい文字列に対してはデータ圧縮をすることが
できなくなる。このようなことから履歴参照インデック
スの長さが決められるものであるから、履歴参照インデ
ックスの長さは非参照データの長さの整数倍となるとは
限らない。このような場合、本発明では、上記のよう
に、履歴参照インデックスに次の文字列に対して得られ
る識別子を追加するものであり、これにより、非参照デ
ータの長さの整数倍の長さのデータとすることができ
る。
力文字列と比較する既に入力された文字列をどこまで対
象とするかによってきまるが、非常に遡った文字列まで
も対象にすると、履歴参照インデックスは非常に長いも
のとなり、履歴参照インデックスと置換される文字列は
非常に長いものとしなければ、データ圧縮の効果が現わ
れず、短かい文字列に対してはデータ圧縮をすることが
できなくなる。このようなことから履歴参照インデック
スの長さが決められるものであるから、履歴参照インデ
ックスの長さは非参照データの長さの整数倍となるとは
限らない。このような場合、本発明では、上記のよう
に、履歴参照インデックスに次の文字列に対して得られ
る識別子を追加するものであり、これにより、非参照デ
ータの長さの整数倍の長さのデータとすることができ
る。
【0034】
【実施例】以下、本発明の実施例を図面を用いて説明す
る。図1は本発明による符号化方式及び復号化方式の一
実施例を示すブロック図であって、1はCPU(演算処
理装置)、2はROM(読出し専用メモリ)、3はRA
M(随時書込み読出しメモリ)、4はシステムバスであ
る。
る。図1は本発明による符号化方式及び復号化方式の一
実施例を示すブロック図であって、1はCPU(演算処
理装置)、2はROM(読出し専用メモリ)、3はRA
M(随時書込み読出しメモリ)、4はシステムバスであ
る。
【0035】同図において、CPU1とROM2とRA
M3とがシステムバス4で相互に接続されており、シス
テムバス4を介してこれら間のデータのやり取りが行な
われる。CPU1はROM2に格納されているプログラ
ムやデータやRAM3に格納されているデータに基づい
て演算処理を行ない、その演算結果をRAM3に格納す
る。
M3とがシステムバス4で相互に接続されており、シス
テムバス4を介してこれら間のデータのやり取りが行な
われる。CPU1はROM2に格納されているプログラ
ムやデータやRAM3に格納されているデータに基づい
て演算処理を行ない、その演算結果をRAM3に格納す
る。
【0036】ROM2には、圧縮処理プログラム2Aや
伸長処理プログラム2B、管理プログラム2C、演算処
理プログラム2D、演算処理データ2Eが格納されてい
る。管理プログラム2Cは電源投入後の初期処理を行な
うためのものであり、圧縮,伸長処理を行なう場合に
は、圧縮処理プログラム2Aあるいは伸長処理プログラ
ム2Bを起動する。また、演算処理プログラム2Dは演
算処理を行なうためのものであり、演算処理データ2E
はこの演算処理を行なうために使用され、圧縮処理プロ
グラム2Aによって圧縮された形で格納されている。
伸長処理プログラム2B、管理プログラム2C、演算処
理プログラム2D、演算処理データ2Eが格納されてい
る。管理プログラム2Cは電源投入後の初期処理を行な
うためのものであり、圧縮,伸長処理を行なう場合に
は、圧縮処理プログラム2Aあるいは伸長処理プログラ
ム2Bを起動する。また、演算処理プログラム2Dは演
算処理を行なうためのものであり、演算処理データ2E
はこの演算処理を行なうために使用され、圧縮処理プロ
グラム2Aによって圧縮された形で格納されている。
【0037】RAM3には、圧縮処理を行なう際に用い
る履歴バッファ5、圧縮した結果を保持する圧縮データ
記憶バッファ6及び伸長データを保持する伸長データ記
憶バッファ7が設けられ、また、出力先制御フラグ8や
識別子取得フラグ9を格納している。圧縮データ記憶バ
ッファ6は、さらに、第1の圧縮データ記憶バッファ6
a、第2の圧縮データ記憶バッファ6bとに区分されて
いる。
る履歴バッファ5、圧縮した結果を保持する圧縮データ
記憶バッファ6及び伸長データを保持する伸長データ記
憶バッファ7が設けられ、また、出力先制御フラグ8や
識別子取得フラグ9を格納している。圧縮データ記憶バ
ッファ6は、さらに、第1の圧縮データ記憶バッファ6
a、第2の圧縮データ記憶バッファ6bとに区分されて
いる。
【0038】履歴バッファ5は2048バイトの容量を
有しており、FIFO(First InFirst Out)でデ
ータを保持し、新たにデータが読み込まれると、最も古
いデータから順に消去される。
有しており、FIFO(First InFirst Out)でデ
ータを保持し、新たにデータが読み込まれると、最も古
いデータから順に消去される。
【0039】ここで、この実施例で用いている圧縮符号
は、上記従来技術と同様に、次の4つで構成されてい
る。 1)非参照識別子10 2)非参照データ11 3)履歴参照識別子12 4)履歴参照インデックス13。
は、上記従来技術と同様に、次の4つで構成されてい
る。 1)非参照識別子10 2)非参照データ11 3)履歴参照識別子12 4)履歴参照インデックス13。
【0040】非参照識別子10と履歴参照識別子12は
1ビットで構成されており、前者は“1”、後者は
“0”とする。上記従来技術の場合と同様に、非参照デ
ータ11は、履歴バッファ5上のどの部分データ列とも
一致しなかったデータであって、8ビットで構成される
ものとする。履歴参照インデックス13は15ビットで
構成され、新規データ列と内容が一致する部分データ列
がこの新規データ列よりも何バイト手前から始まるかを
示す11ビットの位置インデックスと新規データ列と内
容が一致する部分データ列のデータ長を示す4ビットの
長さインデックスとを組み合わせたものとする。次の表
2に位置インデックスと長さインデックスの値と実際の
参照位置と参照長さとの対応を示す。
1ビットで構成されており、前者は“1”、後者は
“0”とする。上記従来技術の場合と同様に、非参照デ
ータ11は、履歴バッファ5上のどの部分データ列とも
一致しなかったデータであって、8ビットで構成される
ものとする。履歴参照インデックス13は15ビットで
構成され、新規データ列と内容が一致する部分データ列
がこの新規データ列よりも何バイト手前から始まるかを
示す11ビットの位置インデックスと新規データ列と内
容が一致する部分データ列のデータ長を示す4ビットの
長さインデックスとを組み合わせたものとする。次の表
2に位置インデックスと長さインデックスの値と実際の
参照位置と参照長さとの対応を示す。
【0041】
【表2】
【0042】値0の位置インデックスは、他の位置イン
デックスとは異なり、圧縮データの終了コードとして使
用される。伸長処理プログラム2Bは、この値0の位置
インデックスを取得すると、処理を終了する。長さイン
デックスにおいて、参照長さが2バイトであるのに、参
照長インデックスの値を0としているのは、長さ2バイ
トが参照長さの最小であり、4ビットの長さインデック
スを効率良く使うために、値0の参照長インデックスを
参照長さ2バイトに、………、値15の参照長インデッ
クスを長さ17バイトに夫々対応させているためであ
る。
デックスとは異なり、圧縮データの終了コードとして使
用される。伸長処理プログラム2Bは、この値0の位置
インデックスを取得すると、処理を終了する。長さイン
デックスにおいて、参照長さが2バイトであるのに、参
照長インデックスの値を0としているのは、長さ2バイ
トが参照長さの最小であり、4ビットの長さインデック
スを効率良く使うために、値0の参照長インデックスを
参照長さ2バイトに、………、値15の参照長インデッ
クスを長さ17バイトに夫々対応させているためであ
る。
【0043】後に詳細に説明するが、圧縮処理プログラ
ム2Aの実行による圧縮処理においては、上記従来技術
のように、履歴バッファ5上の履歴データ列と新規デー
タ列との比較結果に応じて、非参照識別子10と非参照
データ11、もしくは履歴参照識別子12と履歴参照イ
ンデックス13が得られ、これらが圧縮データ記憶バッ
ファ6に供給されて記録されるのであるが、これら識別
子10,12は第1の圧縮データ記憶バッファ6aに、
非参照データ11と履歴参照インデックス13とは第2
の圧縮データ記憶バッファ6bに夫々格納される。
ム2Aの実行による圧縮処理においては、上記従来技術
のように、履歴バッファ5上の履歴データ列と新規デー
タ列との比較結果に応じて、非参照識別子10と非参照
データ11、もしくは履歴参照識別子12と履歴参照イ
ンデックス13が得られ、これらが圧縮データ記憶バッ
ファ6に供給されて記録されるのであるが、これら識別
子10,12は第1の圧縮データ記憶バッファ6aに、
非参照データ11と履歴参照インデックス13とは第2
の圧縮データ記憶バッファ6bに夫々格納される。
【0044】また、これも後に詳細に説明するが、伸長
処理プログラム2Bの実行による伸長処理では、第1の
圧縮データ記憶バッファ6aに識別子10,12を、第
2の圧縮データ記憶バッファ6bに非参照データ11と
履歴参照インデックス13を夫々格納し、まず、第1の
圧縮データ記憶バッファ6aから識別子を読み取り、そ
の内容(非参照識別子10のときは“1”,履歴参照識
別子12のときは“0”)に応じて、次に第2の圧縮デ
ータ記憶バッファ6bから読み取るデータが非参照デー
タ11であるか、履歴参照インデックス13であるかを
判別する。
処理プログラム2Bの実行による伸長処理では、第1の
圧縮データ記憶バッファ6aに識別子10,12を、第
2の圧縮データ記憶バッファ6bに非参照データ11と
履歴参照インデックス13を夫々格納し、まず、第1の
圧縮データ記憶バッファ6aから識別子を読み取り、そ
の内容(非参照識別子10のときは“1”,履歴参照識
別子12のときは“0”)に応じて、次に第2の圧縮デ
ータ記憶バッファ6bから読み取るデータが非参照デー
タ11であるか、履歴参照インデックス13であるかを
判別する。
【0045】なお、以下の説明では、識別子に関して
“1”の出力や参照(判定)は非参照識別子52の出力
や参照(判定)を示し、“0”の出力や参照(判定)は
履歴参照識別子の出力や参照(判定)を示している。
“1”の出力や参照(判定)は非参照識別子52の出力
や参照(判定)を示し、“0”の出力や参照(判定)は
履歴参照識別子の出力や参照(判定)を示している。
【0046】次に、この実施例の動作(CPU1の処理
動作)を図2により概略的に説明する。ここで、同図
(b)は元のデータ列を示すものであり、図5(b)に
示したデータ列と同じものである。また、図2(a)は
この元のデータ列の圧縮データである。なお、ここで
は、説明を簡単にするため、1文字のビット数を8ビッ
ト(1バイト)とし、また、履歴参照インデックスは1
5ビットとしている。しかし、本発明は、これに限定さ
れるものではない 図2(b)に示す元のデータ列を圧縮処理プログラム2
Aによって圧縮処理する場合、かかるデータの2文字以
上が履歴バッファ5に既に格納されている履歴データの
うちで内容が一致する部分文字列があるか否かを判定
し、1番目の文字と2番目の文字については否であ
るとすると、これらが夫々非参照データ11となり、ま
た、夫々に“1”の非参照識別子10が生成される。そ
して、これら非参照識別子10は順に第1の圧縮データ
記憶バッファ6aに記憶され、文字と2番目の文字
に対する非参照データ11もその順に第2の圧縮データ
記憶バッファ6bに記憶される。
動作)を図2により概略的に説明する。ここで、同図
(b)は元のデータ列を示すものであり、図5(b)に
示したデータ列と同じものである。また、図2(a)は
この元のデータ列の圧縮データである。なお、ここで
は、説明を簡単にするため、1文字のビット数を8ビッ
ト(1バイト)とし、また、履歴参照インデックスは1
5ビットとしている。しかし、本発明は、これに限定さ
れるものではない 図2(b)に示す元のデータ列を圧縮処理プログラム2
Aによって圧縮処理する場合、かかるデータの2文字以
上が履歴バッファ5に既に格納されている履歴データの
うちで内容が一致する部分文字列があるか否かを判定
し、1番目の文字と2番目の文字については否であ
るとすると、これらが夫々非参照データ11となり、ま
た、夫々に“1”の非参照識別子10が生成される。そ
して、これら非参照識別子10は順に第1の圧縮データ
記憶バッファ6aに記憶され、文字と2番目の文字
に対する非参照データ11もその順に第2の圧縮データ
記憶バッファ6bに記憶される。
【0047】次に、図2(b)での3番目の文字と4番
目の文字からなる文字列は1番目の文字と2番目の文字
とからなる文字列と内容が一致するから、これらに対し
て“0”の履歴参照識別子12と15ビットの履歴参照
インデックス13とが生成され、履歴参照識別子12は
第1の圧縮データ記憶バッファ6aに、15ビットの履
歴参照インデックス13は第2の圧縮データ記憶バッフ
ァ6bに夫々先に記憶された非参照識別子10や非参照
データ11に続けて記憶されるが、この履歴参照インデ
ックス13の生成に際し、3番目の文字と4番目の文字
に続く5番目の文字には必ず非参照識別子10と非参
照データ11が対応するから、この5番目の文字に対
応する非参照識別子11も同じに生成して履歴参照イン
デックス13に最下位ビットとして付加し、履歴参照イ
ンデックス13を16ビット(=2バイト)にして第2
の圧縮データ記憶バッファ6bに記憶する。そして、次
の5番目の文字に対しては、非参照データ11のみを
生成し、これを第2の圧縮データ記憶バッファ6bに記
憶する。
目の文字からなる文字列は1番目の文字と2番目の文字
とからなる文字列と内容が一致するから、これらに対し
て“0”の履歴参照識別子12と15ビットの履歴参照
インデックス13とが生成され、履歴参照識別子12は
第1の圧縮データ記憶バッファ6aに、15ビットの履
歴参照インデックス13は第2の圧縮データ記憶バッフ
ァ6bに夫々先に記憶された非参照識別子10や非参照
データ11に続けて記憶されるが、この履歴参照インデ
ックス13の生成に際し、3番目の文字と4番目の文字
に続く5番目の文字には必ず非参照識別子10と非参
照データ11が対応するから、この5番目の文字に対
応する非参照識別子11も同じに生成して履歴参照イン
デックス13に最下位ビットとして付加し、履歴参照イ
ンデックス13を16ビット(=2バイト)にして第2
の圧縮データ記憶バッファ6bに記憶する。そして、次
の5番目の文字に対しては、非参照データ11のみを
生成し、これを第2の圧縮データ記憶バッファ6bに記
憶する。
【0048】このようにして、2以上の文字の新規デー
タ列が履歴データ列の部分データ列と内容が一致しない
場合には、1文字ずつ非参照データ11として第2の圧
縮データ記憶バッファ6bに記憶するとともに、各非参
照データ11毎に非参照識別子10を生成し、第1の圧
縮データ記憶バッファ6aに記憶するが、2以上の文字
の新規データ列が履歴データ列の部分データ列と内容が
一致する場合には、履歴参照識別子12を生成して第1
の圧縮データ記憶バッファ6aに記憶するとともに、履
歴参照インデックス13に次の非参照データ11に対す
る非参照識別子10を付加して2バイトのデータとし、
これを第2の圧縮データ記憶バッファ6bに記憶する。
タ列が履歴データ列の部分データ列と内容が一致しない
場合には、1文字ずつ非参照データ11として第2の圧
縮データ記憶バッファ6bに記憶するとともに、各非参
照データ11毎に非参照識別子10を生成し、第1の圧
縮データ記憶バッファ6aに記憶するが、2以上の文字
の新規データ列が履歴データ列の部分データ列と内容が
一致する場合には、履歴参照識別子12を生成して第1
の圧縮データ記憶バッファ6aに記憶するとともに、履
歴参照インデックス13に次の非参照データ11に対す
る非参照識別子10を付加して2バイトのデータとし、
これを第2の圧縮データ記憶バッファ6bに記憶する。
【0049】ここで、2文字以上の文字列の内容が一致
したとき、履歴参照インデックス13を用いるのは、履
歴参照インデックス13のビット数が15ビットであ
り、1個の文字のビット数よりも大きく、2文字の文字
列よりも小さいからであり、1文字に対しても履歴参照
インデックス13を用いるようにすると、却ってビット
数が増加してデータ圧縮とはならないからである。
したとき、履歴参照インデックス13を用いるのは、履
歴参照インデックス13のビット数が15ビットであ
り、1個の文字のビット数よりも大きく、2文字の文字
列よりも小さいからであり、1文字に対しても履歴参照
インデックス13を用いるようにすると、却ってビット
数が増加してデータ圧縮とはならないからである。
【0050】以上により、第2の圧縮データ記憶バッフ
ァ6bでは、図2(a)に示すように、1バイトずつ区
切ったとき、非参照データ11は1つずつ区切れ、履歴
参照インデックス13は2バイトに区切れる圧縮データ
を得ることができる。かかる圧縮データを記憶する第2
の圧縮データ記憶バッファ6bのアドレス単位が1バイ
トとすると、各非参照データ11は1アドレスに記憶す
ることができ、また、履歴参照インデックス13も2ア
ドレスに記憶することができて、1アドレスに異なる非
参照データ11が同時に記憶されるようなことがない
し、また、1アドレスに非参照データ11と履歴参照イ
ンデックス13が同時に記憶されるようなこともない。
ァ6bでは、図2(a)に示すように、1バイトずつ区
切ったとき、非参照データ11は1つずつ区切れ、履歴
参照インデックス13は2バイトに区切れる圧縮データ
を得ることができる。かかる圧縮データを記憶する第2
の圧縮データ記憶バッファ6bのアドレス単位が1バイ
トとすると、各非参照データ11は1アドレスに記憶す
ることができ、また、履歴参照インデックス13も2ア
ドレスに記憶することができて、1アドレスに異なる非
参照データ11が同時に記憶されるようなことがない
し、また、1アドレスに非参照データ11と履歴参照イ
ンデックス13が同時に記憶されるようなこともない。
【0051】なお、第1の圧縮データ記憶バッファ6a
もアドレス単位を1バイトとし、各アドレスに識別子が
1つずつ順に8つまで記憶される。
もアドレス単位を1バイトとし、各アドレスに識別子が
1つずつ順に8つまで記憶される。
【0052】図2(a)に示す圧縮データ列を伸長処理
プログラム2Bによって伸長処理する場合には、各識別
子が圧縮処理のときの順で第1の圧縮データ記憶バッフ
ァ6aまたはこれから移されたメモリに格納されてお
り、また、非参照データ11や履歴参照インデックス1
3などが圧縮処理のときの順で第2の圧縮データ記憶バ
ッファ6bまたはこれから移されたメモリに格納されて
いるが、ここでは、識別子が第1の圧縮データ記憶バッ
ファ6aに、また、非参照データ11や履歴参照インデ
ックス13などが第2の圧縮データ記憶バッファ6bに
夫々格納されているものとする。
プログラム2Bによって伸長処理する場合には、各識別
子が圧縮処理のときの順で第1の圧縮データ記憶バッフ
ァ6aまたはこれから移されたメモリに格納されてお
り、また、非参照データ11や履歴参照インデックス1
3などが圧縮処理のときの順で第2の圧縮データ記憶バ
ッファ6bまたはこれから移されたメモリに格納されて
いるが、ここでは、識別子が第1の圧縮データ記憶バッ
ファ6aに、また、非参照データ11や履歴参照インデ
ックス13などが第2の圧縮データ記憶バッファ6bに
夫々格納されているものとする。
【0053】次に、第1の圧縮データ記憶バッファ6a
から識別子を1つ読み取り、それが“1”か“0”かそ
の内容から、次に第2の圧縮データ記憶バッファ6bか
ら読み取られる、この識別子に対応した1バイト単位の
データの内容を判定する。図2(a)の場合、最初に読
み取られる識別子は“1”の非参照識別子10であるか
ら、第2の圧縮データ記憶バッファ6bから読み取るデ
ータは非参照データ11であり、これが1番目の文字
として伸長データ記憶バッファ7に記憶される。2番目
の文字についても同様である。
から識別子を1つ読み取り、それが“1”か“0”かそ
の内容から、次に第2の圧縮データ記憶バッファ6bか
ら読み取られる、この識別子に対応した1バイト単位の
データの内容を判定する。図2(a)の場合、最初に読
み取られる識別子は“1”の非参照識別子10であるか
ら、第2の圧縮データ記憶バッファ6bから読み取るデ
ータは非参照データ11であり、これが1番目の文字
として伸長データ記憶バッファ7に記憶される。2番目
の文字についても同様である。
【0054】なお、第1の圧縮データ記憶バッファ6a
のアドレス単位は1バイトであり、このため、1アドレ
スからは1バイトのデータ、即ち、8つの識別子が読み
出される。この実施例では、この8つの識別子を順次切
り出して処理するようにしている。
のアドレス単位は1バイトであり、このため、1アドレ
スからは1バイトのデータ、即ち、8つの識別子が読み
出される。この実施例では、この8つの識別子を順次切
り出して処理するようにしている。
【0055】第1の圧縮データ記憶バッファ6aから読
み取った識別子が“0”の履歴参照識別子12である場
合には、第2の圧縮データ記憶バッファ6bから2バイ
トの読み取りを行ない、これにより、“1”の非参照識
別子10が最下位ビットとして付加された履歴参照イン
デックス13が読み取られる。そして、かかる2バイト
のデータから1ビットの非参照識別子10と15ビット
の履歴参照インデックス13とが分離され、非参照識別
子10はCPU1にそのまま保持しておく。また、履歴
参照インデックス13から上記表2のように設定されて
いる参照位置と参照長さとを求め、これをもとに、伸長
データ記憶バッファ7に記憶されている伸長データの中
の対応する部分データ列を読み取り、これを伸長データ
記憶バッファ7に既に記憶されているデータに続けて記
憶する。この場合、かかる履歴参照インデックス13が
図2(a)で符号Aとして示されるものとすると、伸長
データ記憶バッファ7に既に記憶されている1番目の文
字と2番目の文字とが読み取られ、これらが夫々3
番目の文字,4番目の文字として伸長データ記憶バッフ
ァ7に記憶される。このようにして、履歴参照インデッ
クス13が伸長処理されて元の3番目の文字,4番目の
文字が得られる。
み取った識別子が“0”の履歴参照識別子12である場
合には、第2の圧縮データ記憶バッファ6bから2バイ
トの読み取りを行ない、これにより、“1”の非参照識
別子10が最下位ビットとして付加された履歴参照イン
デックス13が読み取られる。そして、かかる2バイト
のデータから1ビットの非参照識別子10と15ビット
の履歴参照インデックス13とが分離され、非参照識別
子10はCPU1にそのまま保持しておく。また、履歴
参照インデックス13から上記表2のように設定されて
いる参照位置と参照長さとを求め、これをもとに、伸長
データ記憶バッファ7に記憶されている伸長データの中
の対応する部分データ列を読み取り、これを伸長データ
記憶バッファ7に既に記憶されているデータに続けて記
憶する。この場合、かかる履歴参照インデックス13が
図2(a)で符号Aとして示されるものとすると、伸長
データ記憶バッファ7に既に記憶されている1番目の文
字と2番目の文字とが読み取られ、これらが夫々3
番目の文字,4番目の文字として伸長データ記憶バッフ
ァ7に記憶される。このようにして、履歴参照インデッ
クス13が伸長処理されて元の3番目の文字,4番目の
文字が得られる。
【0056】次に、符号Aで示す履歴参照インデックス
13に続く非参照データ11は、先に履歴参照インデッ
クス13の読取りの際に得られて保持されている非参照
識別子10により判定され、5番目の文字として伸長
データ記憶バッファ7に記憶される。また、次の符号B
として示す履歴参照インデックス13については、符号
Aとして示す履歴参照インデックス13の場合と同様で
ある。
13に続く非参照データ11は、先に履歴参照インデッ
クス13の読取りの際に得られて保持されている非参照
識別子10により判定され、5番目の文字として伸長
データ記憶バッファ7に記憶される。また、次の符号B
として示す履歴参照インデックス13については、符号
Aとして示す履歴参照インデックス13の場合と同様で
ある。
【0057】このようにして、伸長データ記憶バッファ
7に図2(b)に示す元のデータと同じ伸長データが得
られることになる。
7に図2(b)に示す元のデータと同じ伸長データが得
られることになる。
【0058】かかる伸長処理による復号化においては、
圧縮データを格納したメモリ、即ち、第2の圧縮データ
記憶バッファ6bのアドレス単位が1バイトである場
合、1バイトの非参照データ11は1回のアクセスで読
み取ることができ、上記従来技術に比べてアクセス時間
が短くて済むし、上記従来技術のような読取りデータの
切取りや合成などの処理が不要となる。
圧縮データを格納したメモリ、即ち、第2の圧縮データ
記憶バッファ6bのアドレス単位が1バイトである場
合、1バイトの非参照データ11は1回のアクセスで読
み取ることができ、上記従来技術に比べてアクセス時間
が短くて済むし、上記従来技術のような読取りデータの
切取りや合成などの処理が不要となる。
【0059】また、第2の圧縮データ記憶バッファ6b
から履歴参照インデックス13を読み取る場合も、2つ
のアドレスを続けて読み出せばよく、これらから読み取
られた2バイトのデータを単に繋ぎ合わせるだけでよ
い。この場合、2バイトのデータから1ビットの非参照
識別子10と15ビットの履歴参照インデックス13を
分離する必要があるが、この非参照識別子10は、この
2バイトのデータの最下位ビットであるから、2バイト
のデータに最下位ビットのみが“1”で他のビットが
“0”のデータを論理積処理し、下位1バイトの部分を
抽出することによって得ることができる、また、2バイ
トのデータを1ビットだけ最下位ビット側に右シフトす
ることにより、履歴参照インデックス13が得られ、非
常に簡単な処理である。
から履歴参照インデックス13を読み取る場合も、2つ
のアドレスを続けて読み出せばよく、これらから読み取
られた2バイトのデータを単に繋ぎ合わせるだけでよ
い。この場合、2バイトのデータから1ビットの非参照
識別子10と15ビットの履歴参照インデックス13を
分離する必要があるが、この非参照識別子10は、この
2バイトのデータの最下位ビットであるから、2バイト
のデータに最下位ビットのみが“1”で他のビットが
“0”のデータを論理積処理し、下位1バイトの部分を
抽出することによって得ることができる、また、2バイ
トのデータを1ビットだけ最下位ビット側に右シフトす
ることにより、履歴参照インデックス13が得られ、非
常に簡単な処理である。
【0060】先の表1に対応して、この実施例における
図2の例の場合でのアクセス容量を示すと、次の表3の
ようになる。
図2の例の場合でのアクセス容量を示すと、次の表3の
ようになる。
【0061】
【表3】
【0062】図2(a)に示す圧縮データを図2(b)
に示すように伸長処理する場合、第1の圧縮データ記憶
バッファ6aからは、1バイト単位のアクセスを4回行
なうことにより、4個の識別子の取得(読取り)を行な
うことになるから、この第1の圧縮データ記憶バッファ
6aでのアクセス容量は合計4バイトであり、また、第
2の圧縮データ記憶バッファ6bからは、1バイト単位
のアクセスを3回行なうことによって3個の非参照デー
タ11の取得(読取り)を行ない、2バイト単位のアク
セスを2回行なうことによって2個の履歴参照インデッ
クス13の取得(読取り)を行なうから、この第2の圧
縮データ記憶バッファ6bでのアクセス容量は合計7バ
イトである。従って、第1の圧縮データ記憶バッファ6
aでのアクセス容量を加えても、表1で示した従来の1
7バイトに比べると、充分小さい容量のアクセスで復号
することができ、従って、アクセスに要する時間が大幅
に短縮できることになる。
に示すように伸長処理する場合、第1の圧縮データ記憶
バッファ6aからは、1バイト単位のアクセスを4回行
なうことにより、4個の識別子の取得(読取り)を行な
うことになるから、この第1の圧縮データ記憶バッファ
6aでのアクセス容量は合計4バイトであり、また、第
2の圧縮データ記憶バッファ6bからは、1バイト単位
のアクセスを3回行なうことによって3個の非参照デー
タ11の取得(読取り)を行ない、2バイト単位のアク
セスを2回行なうことによって2個の履歴参照インデッ
クス13の取得(読取り)を行なうから、この第2の圧
縮データ記憶バッファ6bでのアクセス容量は合計7バ
イトである。従って、第1の圧縮データ記憶バッファ6
aでのアクセス容量を加えても、表1で示した従来の1
7バイトに比べると、充分小さい容量のアクセスで復号
することができ、従って、アクセスに要する時間が大幅
に短縮できることになる。
【0063】次に、この実施例の動作をさらに詳細に説
明するが、まず、圧縮処理プログラム2Aによる圧縮処
理を図1と図3を用いて説明する。なお、以下の説明で
は、上記と同様に、内容を比較するデータの単位を1バ
イトとし、この1バイトのデータを1文字と表現する
が、これに限るものではないことは明らかである。
明するが、まず、圧縮処理プログラム2Aによる圧縮処
理を図1と図3を用いて説明する。なお、以下の説明で
は、上記と同様に、内容を比較するデータの単位を1バ
イトとし、この1バイトのデータを1文字と表現する
が、これに限るものではないことは明らかである。
【0064】圧縮処理プログラム2Aは、起動すると、
まず、履歴バッファ5を初期化し(ステップ100)、
次いで、出力先制御フラグ8を“1”に設定する(ステ
ップ101)。この出力先制御フラグ8は、非参照識別
子10や履歴参照識別子12を第1の圧縮データ記憶バ
ッファ6a,第2の圧縮データ記憶バッファ6bのいず
れに格納するかを指示するものであって、“1”のとき
には、第1の圧縮データ記憶バッファ6aに記憶するこ
とを、“0”のときには、第2の圧縮データ記憶バッフ
ァ6bに記憶することを夫々指示しているものとする。
まず、履歴バッファ5を初期化し(ステップ100)、
次いで、出力先制御フラグ8を“1”に設定する(ステ
ップ101)。この出力先制御フラグ8は、非参照識別
子10や履歴参照識別子12を第1の圧縮データ記憶バ
ッファ6a,第2の圧縮データ記憶バッファ6bのいず
れに格納するかを指示するものであって、“1”のとき
には、第1の圧縮データ記憶バッファ6aに記憶するこ
とを、“0”のときには、第2の圧縮データ記憶バッフ
ァ6bに記憶することを夫々指示しているものとする。
【0065】しかる後、履歴バッファ5に符号化する入
力データをM文字分(但し、Mは1よりも大きい整数)
読み込む(ステップ102)。読込み元は管理プログラ
ム2Cからパラメータで与えられている。ここでは、履
歴参照インデックス13の長さインデックス(上記表2
参照)で表現できる最大長の文字数17をMとし、17
文字(17バイト)を履歴バッファ5に読み込む。ま
た、変数mをMの値に設定する(ステップ103)。こ
の変数mは比較する部分データ列の長さを示している。
力データをM文字分(但し、Mは1よりも大きい整数)
読み込む(ステップ102)。読込み元は管理プログラ
ム2Cからパラメータで与えられている。ここでは、履
歴参照インデックス13の長さインデックス(上記表2
参照)で表現できる最大長の文字数17をMとし、17
文字(17バイト)を履歴バッファ5に読み込む。ま
た、変数mをMの値に設定する(ステップ103)。こ
の変数mは比較する部分データ列の長さを示している。
【0066】以上の処理が終了すると、次に説明する一
連のステップによる処理に移るが、かかる処理は符号化
する文字列がなくなるまで繰り返される。まず、履歴バ
ッファ5上に読み込んだ最新のm文字とそれ以前に読み
込んだ履歴バッファ5上のデータ(履歴データ列)とを
比較し(ステップ104)、最長の一致文字列を求め
る。この比較は一般的な方法を用いて実現している。こ
の比較の後、一致文字長を評価し(ステップ105)、
2文字以上一致するならば、ステップ106〜ステップ
115を実行し、そうでなければ、ステップ116〜ス
テップ122あるいはステップ123を実行する。
連のステップによる処理に移るが、かかる処理は符号化
する文字列がなくなるまで繰り返される。まず、履歴バ
ッファ5上に読み込んだ最新のm文字とそれ以前に読み
込んだ履歴バッファ5上のデータ(履歴データ列)とを
比較し(ステップ104)、最長の一致文字列を求め
る。この比較は一般的な方法を用いて実現している。こ
の比較の後、一致文字長を評価し(ステップ105)、
2文字以上一致するならば、ステップ106〜ステップ
115を実行し、そうでなければ、ステップ116〜ス
テップ122あるいはステップ123を実行する。
【0067】ここで、2文字以上の一致の有無を判定す
るのは、履歴参照インデックス13は15ビットであ
り、1文字のビット数(8ビット)よりも大きく、1文
字のデータを履歴参照インデックスで表わすと、却って
ビット数が増加してデータ圧縮にはならず、データ圧縮
のためには、少なくとも2文字以上のデータでなければ
ならないからである。
るのは、履歴参照インデックス13は15ビットであ
り、1文字のビット数(8ビット)よりも大きく、1文
字のデータを履歴参照インデックスで表わすと、却って
ビット数が増加してデータ圧縮にはならず、データ圧縮
のためには、少なくとも2文字以上のデータでなければ
ならないからである。
【0068】まず、2文字以上一致する場合を説明する
と、出力先制御フラグ8を調べ(ステップ106)、こ
れが“1”であれば、“0”の履歴参照識別子12を第
1の圧縮データ記憶バッファ6aに書き込み(ステップ
107)、また、出力先制御フラグ8が“2”であれ
ば、“0”の履歴参照識別子12を第2の圧縮データ記
憶バッファ6bに書き込み(ステップ108)、しかる
後、いずれの場合も、出力先制御フラグ8を2に設定し
て(ステップ109)、一致文字列の比較元の文字列と
の相対距離を11ビット、長さを4ビットの固定長符号
で表わした履歴参照インデックス13を第2の圧縮デー
タ記憶バッファ6bに書き込む(ステップ110)。
と、出力先制御フラグ8を調べ(ステップ106)、こ
れが“1”であれば、“0”の履歴参照識別子12を第
1の圧縮データ記憶バッファ6aに書き込み(ステップ
107)、また、出力先制御フラグ8が“2”であれ
ば、“0”の履歴参照識別子12を第2の圧縮データ記
憶バッファ6bに書き込み(ステップ108)、しかる
後、いずれの場合も、出力先制御フラグ8を2に設定し
て(ステップ109)、一致文字列の比較元の文字列と
の相対距離を11ビット、長さを4ビットの固定長符号
で表わした履歴参照インデックス13を第2の圧縮デー
タ記憶バッファ6bに書き込む(ステップ110)。
【0069】その後、一致文字列の長さとまだ符号化処
理を行なっていない未符号化文字列の長さを比較し(ス
テップ111)、未符号化文字列の方が長ければ、変数
Cに一致文字長の値を代入し(ステップ112)、そう
でなければ、変数Cに未符号化文字長の値を代入する
(ステップ113)。しかる後、履歴バッファ5に符号
化する文字を変数Cの値の数だけ新たに履歴データ列と
して書き込み(ステップ114)、変数mに変数Cの値
を加えて一致文字長を引き算した値を再び変数mに代入
する(ステップ115)。
理を行なっていない未符号化文字列の長さを比較し(ス
テップ111)、未符号化文字列の方が長ければ、変数
Cに一致文字長の値を代入し(ステップ112)、そう
でなければ、変数Cに未符号化文字長の値を代入する
(ステップ113)。しかる後、履歴バッファ5に符号
化する文字を変数Cの値の数だけ新たに履歴データ列と
して書き込み(ステップ114)、変数mに変数Cの値
を加えて一致文字長を引き算した値を再び変数mに代入
する(ステップ115)。
【0070】ステップ105で2文字以上の一致がない
ときには、出力先制御フラグ8を調べ(ステップ11
6)、これが“1”であれば、“1”の非参照識別子1
0を第1の圧縮データ記憶バッファ6aに書き込み(ス
テップ117)、出力先制御フラグ8が“2”であれ
ば、“1”の非参照識別子10を第2の圧縮データ記憶
バッファ6bに書き込む(ステップ118)。しかる
後、出力先制御フラグ8を1に設定し(ステップ11
9)、履歴バッファ5上の最新のm文字のうちの先頭1
文字を非参照データ11として第2の圧縮データ記憶バ
ッファ6bに書き込む(ステップ120)。そして、未
符号化文字長が0よりも大きいかどうか調べ(ステップ
121)、0より大きい場合には、履歴バッファ5に符
号化するデータを1文字読み込み(ステップ122)、
そうでない場合には、変数mから1を減ずる(ステップ
123)。
ときには、出力先制御フラグ8を調べ(ステップ11
6)、これが“1”であれば、“1”の非参照識別子1
0を第1の圧縮データ記憶バッファ6aに書き込み(ス
テップ117)、出力先制御フラグ8が“2”であれ
ば、“1”の非参照識別子10を第2の圧縮データ記憶
バッファ6bに書き込む(ステップ118)。しかる
後、出力先制御フラグ8を1に設定し(ステップ11
9)、履歴バッファ5上の最新のm文字のうちの先頭1
文字を非参照データ11として第2の圧縮データ記憶バ
ッファ6bに書き込む(ステップ120)。そして、未
符号化文字長が0よりも大きいかどうか調べ(ステップ
121)、0より大きい場合には、履歴バッファ5に符
号化するデータを1文字読み込み(ステップ122)、
そうでない場合には、変数mから1を減ずる(ステップ
123)。
【0071】以上のようにしてステップ115,122
または123までの処理が終了すると、変数mが0より
も大きいかどうか調べ(ステップ124)、0よりも大
きければ、ステップ104に戻り、そうでなければ、第
2の圧縮データ記憶バッファ6bに、上記表2に示した
位置インデックスが0の15ビットの履歴参照インデッ
クス13を終了コードとして供給し(ステップ12
5)、圧縮処理プログラム2Aによる処理を終了する。
または123までの処理が終了すると、変数mが0より
も大きいかどうか調べ(ステップ124)、0よりも大
きければ、ステップ104に戻り、そうでなければ、第
2の圧縮データ記憶バッファ6bに、上記表2に示した
位置インデックスが0の15ビットの履歴参照インデッ
クス13を終了コードとして供給し(ステップ12
5)、圧縮処理プログラム2Aによる処理を終了する。
【0072】圧縮データ記憶バッファ6b上に記憶され
た上記圧縮データ(識別子も含む)は、管理プログラム
2Cの機能により、目的に応じた格納場所に移される。
例えば、演算結果を圧縮退避する場合には、管理プログ
ラム2CがRAM3上の演算結果の格納場所(図1に図
示せず)を読込み元として圧縮処理プログラム2Aを起
動し、圧縮処理プログラム2Aの終了後、RAM3上の
データ退避場所(図1に図示せず)に圧縮データ記憶バ
ッファ6の上記内容を転送する。
た上記圧縮データ(識別子も含む)は、管理プログラム
2Cの機能により、目的に応じた格納場所に移される。
例えば、演算結果を圧縮退避する場合には、管理プログ
ラム2CがRAM3上の演算結果の格納場所(図1に図
示せず)を読込み元として圧縮処理プログラム2Aを起
動し、圧縮処理プログラム2Aの終了後、RAM3上の
データ退避場所(図1に図示せず)に圧縮データ記憶バ
ッファ6の上記内容を転送する。
【0073】次に、伸長処理プログラム2Bの動作を図
1及び図4を用いて説明する。管理プログラム2Cは、
伸長処理プログラム2Bに対して、第1の入力と第2の
入力という2つの入力元のアドレスを与える。これは夫
々、圧縮処理プログラム2Aでの第1の圧縮データ記憶
バッファ6aの内容と第2の圧縮データ記憶バッファ6
bの内容とに対応している。即ち、管理プログラム2C
は、第1の圧縮データ記憶バッファ6aあるいはその内
容を移動した先のデータを第1の入力とし、第2の圧縮
データ記憶バッファ6bあるいはその内容を移動した先
のデータを第2の入力として伸長処理プログラム2Bに
与える。
1及び図4を用いて説明する。管理プログラム2Cは、
伸長処理プログラム2Bに対して、第1の入力と第2の
入力という2つの入力元のアドレスを与える。これは夫
々、圧縮処理プログラム2Aでの第1の圧縮データ記憶
バッファ6aの内容と第2の圧縮データ記憶バッファ6
bの内容とに対応している。即ち、管理プログラム2C
は、第1の圧縮データ記憶バッファ6aあるいはその内
容を移動した先のデータを第1の入力とし、第2の圧縮
データ記憶バッファ6bあるいはその内容を移動した先
のデータを第2の入力として伸長処理プログラム2Bに
与える。
【0074】伸長処理プログラム2Bは、起動すると、
まず、識別子取得フラグ9を「未取得」状態に設定する
(ステップ200)。以下に説明するこれ以降の処理
は、全ての圧縮データを復号し終わるまで繰り返され
る。なお、識別子取得フラグ9はCPU1(図1)に次
の識別子を既に取り込んでいるか否かを示すフラグであ
って、「未取得」状態にあるときには、まだ取り込んで
おらず、「取得済み」状態にあるときには、既に取り込
んで保持している状態を夫々示している。後者の場合、
CPU1は、この保持している識別子を用いて次に第2
の入力から取り込むデータが非参照データ11である
か、あるいは履歴参照インデックス13であるかを判定
する。
まず、識別子取得フラグ9を「未取得」状態に設定する
(ステップ200)。以下に説明するこれ以降の処理
は、全ての圧縮データを復号し終わるまで繰り返され
る。なお、識別子取得フラグ9はCPU1(図1)に次
の識別子を既に取り込んでいるか否かを示すフラグであ
って、「未取得」状態にあるときには、まだ取り込んで
おらず、「取得済み」状態にあるときには、既に取り込
んで保持している状態を夫々示している。後者の場合、
CPU1は、この保持している識別子を用いて次に第2
の入力から取り込むデータが非参照データ11である
か、あるいは履歴参照インデックス13であるかを判定
する。
【0075】まず、識別子取得フラグ9を調べ(ステッ
プ201)、これが「未取得」状態に設定されていれ
ば、識別子を上記の第1の入力から取り込む(ステップ
202)。そして、この識別子の内容が“0”かどうか
を判定し(ステップ203)、履歴参照識別子12であ
って“0”ならば、ステップ204〜ステップ209
を、そうでなければ(即ち、非参照識別子10であって
“1”ならば)、ステップ212〜ステップ214を夫
々実行する。
プ201)、これが「未取得」状態に設定されていれ
ば、識別子を上記の第1の入力から取り込む(ステップ
202)。そして、この識別子の内容が“0”かどうか
を判定し(ステップ203)、履歴参照識別子12であ
って“0”ならば、ステップ204〜ステップ209
を、そうでなければ(即ち、非参照識別子10であって
“1”ならば)、ステップ212〜ステップ214を夫
々実行する。
【0076】そこで、識別子の内容が“0”である場合
を説明すると、第2の入力から2バイト(2文字)のデ
ータを取り込み(ステップ204)、その16ビット目
から6ビット目までの11ビットを履歴参照インデック
ス13の位置インデックスとして切り出し(ステップ2
05)、次の5ビット目から2ビット目までの4ビット
を履歴参照インデックス13の長さインデックスとして
切り出し(ステップ206)、最後の1ビット目(即
ち、最下位ビット)を、次に第2の入力から取り込むべ
き非参照データ11もしくは履歴参照インデックス13
の識別子として、取得する(ステップ207)。
を説明すると、第2の入力から2バイト(2文字)のデ
ータを取り込み(ステップ204)、その16ビット目
から6ビット目までの11ビットを履歴参照インデック
ス13の位置インデックスとして切り出し(ステップ2
05)、次の5ビット目から2ビット目までの4ビット
を履歴参照インデックス13の長さインデックスとして
切り出し(ステップ206)、最後の1ビット目(即
ち、最下位ビット)を、次に第2の入力から取り込むべ
き非参照データ11もしくは履歴参照インデックス13
の識別子として、取得する(ステップ207)。
【0077】そして、さらに、識別子取得フラグ9を
「取得済み」状態に設定して(ステップ208)、履歴
参照インデックス13の位置インデックスが0かどうか
を調べ(ステップ209)、この位置インデックスが0
であれば、圧縮データの終了と判定して伸長処理プログ
ラム2Bによる処理を終了するが、この位置インデック
スが0でなければ、伸長データ記憶バッファ7から履歴
参照インデックス13の位置インデックス,長さインデ
ックスで表わされる一致文字列を取り込み(ステップ2
10)、伸長データ記憶バッファ7に格納されているデ
ータ末尾にこの一致文字列を追加して書き込み(ステッ
プ211)、ステップ201に戻る。
「取得済み」状態に設定して(ステップ208)、履歴
参照インデックス13の位置インデックスが0かどうか
を調べ(ステップ209)、この位置インデックスが0
であれば、圧縮データの終了と判定して伸長処理プログ
ラム2Bによる処理を終了するが、この位置インデック
スが0でなければ、伸長データ記憶バッファ7から履歴
参照インデックス13の位置インデックス,長さインデ
ックスで表わされる一致文字列を取り込み(ステップ2
10)、伸長データ記憶バッファ7に格納されているデ
ータ末尾にこの一致文字列を追加して書き込み(ステッ
プ211)、ステップ201に戻る。
【0078】ステップ203で識別子が“0”でないと
判定された場合には、第2の入力から1バイトのデータ
を取り出し(ステップ212)、これを1文字として伸
長データ記憶バッファ7に格納されている文字列の最後
に追加して書き込む(ステップ213)。そして、識別
子取得フラグ9を「取得済み」状態に設定し(ステップ
214)、ステップ201に戻る。
判定された場合には、第2の入力から1バイトのデータ
を取り出し(ステップ212)、これを1文字として伸
長データ記憶バッファ7に格納されている文字列の最後
に追加して書き込む(ステップ213)。そして、識別
子取得フラグ9を「取得済み」状態に設定し(ステップ
214)、ステップ201に戻る。
【0079】次に、図2に示したデータを例にして、圧
縮処理プログラム2Aによる処理を図1及び図3を用い
て説明する。但し、かかるデータは18バイトよりも充
分に長いものとする。
縮処理プログラム2Aによる処理を図1及び図3を用い
て説明する。但し、かかるデータは18バイトよりも充
分に長いものとする。
【0080】図3において、圧縮処理プログラム2Aが
起動されると、図3に示したステップ100からステッ
プ103までの一連の処理がなされた後、ステップ10
4で部分データ列の比較が行なわれる。図2(b)での
1バイト目の最初の文字のデータについては、ステッ
プ104の比較の結果は、履歴バッファ5に最新のm文
字より前に読み込んだデータがないため、一致データな
しとなり、ステップ116に移行する。このとき、ステ
ップ101で出力先制御フラグ8が1に設定されている
から、第1の圧縮データ記憶バッファ6aに“1”の非
参照識別子10が出力され(ステップ117)、第2の
圧縮データ記憶バッファ6bに1番目の文字に対応す
るバイトデータが非参照データ11として書き込まれる
(ステップ120)。ここで、圧縮する元のデータは充
分な長さを持つから、ステップ121の判定は常に
“y”となり、履歴バッファ5に1文字、即ち、最初の
文字が読み込まれ(ステップ122)、ステップ12
4を経由してステップ104に戻り、2番目の文字、
即ち、2バイト目のデータの処理に移る。
起動されると、図3に示したステップ100からステッ
プ103までの一連の処理がなされた後、ステップ10
4で部分データ列の比較が行なわれる。図2(b)での
1バイト目の最初の文字のデータについては、ステッ
プ104の比較の結果は、履歴バッファ5に最新のm文
字より前に読み込んだデータがないため、一致データな
しとなり、ステップ116に移行する。このとき、ステ
ップ101で出力先制御フラグ8が1に設定されている
から、第1の圧縮データ記憶バッファ6aに“1”の非
参照識別子10が出力され(ステップ117)、第2の
圧縮データ記憶バッファ6bに1番目の文字に対応す
るバイトデータが非参照データ11として書き込まれる
(ステップ120)。ここで、圧縮する元のデータは充
分な長さを持つから、ステップ121の判定は常に
“y”となり、履歴バッファ5に1文字、即ち、最初の
文字が読み込まれ(ステップ122)、ステップ12
4を経由してステップ104に戻り、2番目の文字、
即ち、2バイト目のデータの処理に移る。
【0081】2番目の文字に対しても、ステップ10
4の判定は一致データなしとなるので、ステップ116
に移行する。ここで、1番目の文字のデータのステッ
プ119での処理で出力先制御フラグ8が1に設定され
るため、ステップ117に進み、第1の圧縮データ記憶
バッファ6aに“1”の非参照識別子10が書き込まれ
る。そして、ステップ120で第2の圧縮データ記憶バ
ッファ6bに2番目の文字に対応するバイトデータが
非参照データ11として書き込まれる。上記と同様に、
ステップ121の判定は“y”となり、履歴バッファ5
に2番目の文字が書き込まれ(ステップ122)、ス
テップ124を経由してステップ104に戻り、3番目
の文字のデータの処理となる。
4の判定は一致データなしとなるので、ステップ116
に移行する。ここで、1番目の文字のデータのステッ
プ119での処理で出力先制御フラグ8が1に設定され
るため、ステップ117に進み、第1の圧縮データ記憶
バッファ6aに“1”の非参照識別子10が書き込まれ
る。そして、ステップ120で第2の圧縮データ記憶バ
ッファ6bに2番目の文字に対応するバイトデータが
非参照データ11として書き込まれる。上記と同様に、
ステップ121の判定は“y”となり、履歴バッファ5
に2番目の文字が書き込まれ(ステップ122)、ス
テップ124を経由してステップ104に戻り、3番目
の文字のデータの処理となる。
【0082】3番目の文字と4番目の文字のデータは夫
々1番目の文字と2番目の文字と一致するので、ス
テップ104の比較結果では2文字以上の一致となり、
ステップ106に移行する。ここで、2番目の文字の
データの上記処理でのステップ119で出力先制御フラ
グ8が1に設定されたため、ステップ107に進んで第
1の圧縮データ記憶バッファ6aに“0”の履歴参照識
別子12が書き込まれ、出力先制御フラグ8が2とされ
る(ステップ109)。そして、一致した部分データ列
の位置と長さを表わす履歴参照インデックス13が第2
の圧縮データ記憶バッファ6bに書き込まれる(ステッ
プ110)。これが図2(a)での符号Aである。この
場合には、現在の処理データ(即ち、3番目の文字のデ
ータ)の2バイト前から2バイトの長さ(即ち、文字
,)を参照するので、表2での2の位置インデック
スと0の長さインデックスとが組み合わされた15ビッ
トの符号Aが書き込まれる。
々1番目の文字と2番目の文字と一致するので、ス
テップ104の比較結果では2文字以上の一致となり、
ステップ106に移行する。ここで、2番目の文字の
データの上記処理でのステップ119で出力先制御フラ
グ8が1に設定されたため、ステップ107に進んで第
1の圧縮データ記憶バッファ6aに“0”の履歴参照識
別子12が書き込まれ、出力先制御フラグ8が2とされ
る(ステップ109)。そして、一致した部分データ列
の位置と長さを表わす履歴参照インデックス13が第2
の圧縮データ記憶バッファ6bに書き込まれる(ステッ
プ110)。これが図2(a)での符号Aである。この
場合には、現在の処理データ(即ち、3番目の文字のデ
ータ)の2バイト前から2バイトの長さ(即ち、文字
,)を参照するので、表2での2の位置インデック
スと0の長さインデックスとが組み合わされた15ビッ
トの符号Aが書き込まれる。
【0083】次のステップ111でデータ長が充分長い
と判定されるので、変数Cに一致文字列長の2がセット
され(ステップ112)、履歴バッファ5に3番目の文
字と4番目の文字が新たな履歴データとして追加書き込
まれる(ステップ114)。そして、変数mの値を更新
する(ステップ115)が、加算する変数Cの値と減算
する一致文字数が同じであるため、mの値は不変であ
る。その後、ステップ124を経由してステップ104
に戻り、5番目の文字のデータの処理と移る。
と判定されるので、変数Cに一致文字列長の2がセット
され(ステップ112)、履歴バッファ5に3番目の文
字と4番目の文字が新たな履歴データとして追加書き込
まれる(ステップ114)。そして、変数mの値を更新
する(ステップ115)が、加算する変数Cの値と減算
する一致文字数が同じであるため、mの値は不変であ
る。その後、ステップ124を経由してステップ104
に戻り、5番目の文字のデータの処理と移る。
【0084】5バイト目のデータ(即ち、文字のデー
タ)に対しては、ステップ104の判定は一致データな
しとなるので、ステップ116に移行する。このとき、
3番目の文字と4番目の文字のデータの処理でのステッ
プ109で出力先制御フラグ8が2に設定されるため、
第2の圧縮データ記憶バッファ6bに“1”の非参照識
別子10が書き込まれ(ステップ118)、これによ
り、上記の15ビットの履歴参照インデックス13(符
号A)に1ビットの非参照識別子10が加わって16ビ
ット(2バイト)のデータとなる。次いで、第2の圧縮
データ記憶バッファ6bに文字に対応するバイトデー
タが供給される(ステップ120)。そして、上記と同
様に、ステップ121の判定は“y”となり、履歴バッ
ファ5に1文字新たに読み込まれ(ステップ122)、
ステップ124を経由してステップ104に戻り、6番
目の文字のデータの処理に移る。
タ)に対しては、ステップ104の判定は一致データな
しとなるので、ステップ116に移行する。このとき、
3番目の文字と4番目の文字のデータの処理でのステッ
プ109で出力先制御フラグ8が2に設定されるため、
第2の圧縮データ記憶バッファ6bに“1”の非参照識
別子10が書き込まれ(ステップ118)、これによ
り、上記の15ビットの履歴参照インデックス13(符
号A)に1ビットの非参照識別子10が加わって16ビ
ット(2バイト)のデータとなる。次いで、第2の圧縮
データ記憶バッファ6bに文字に対応するバイトデー
タが供給される(ステップ120)。そして、上記と同
様に、ステップ121の判定は“y”となり、履歴バッ
ファ5に1文字新たに読み込まれ(ステップ122)、
ステップ124を経由してステップ104に戻り、6番
目の文字のデータの処理に移る。
【0085】6〜8番目の文字のデータは2〜4番目の
文字と内容が一致するので、ステップ104の比較結果
では2文字以上一致となり、ステップ106に移行す
る。このとき、5番目の文字のデータの処理でのステッ
プ119で出力先制御フラグ8が1に設定されているた
め、第1の圧縮データ記憶バッファ6aに“0”の履歴
参照識別子12が書き込まれる(ステップ107)。そ
して、出力先制御フラグ8が2に設定され(ステップ1
09)、一致した部分データ列の位置と長さを表わす履
歴参照インデックス13が第2の圧縮データ記憶バッフ
ァ6bに出力される(ステップ110)。これが図2
(a)での符号Bである。この場合には、現在の処理デ
ータの4文字(4バイト)前から3文字(3バイト)の
長さを参照するので、履歴参照インデックス13の位置
インデックスは4,長さインデックスは1である。次
に、ステップ111でデータ長が充分長いと判定される
ので、変数Cに一致文字列の文字数3がセットされ(ス
テップ112)、履歴バッファ5に6〜8番目の3文字
を書き込む(ステップ114)。そして、ステップ11
5で変数mの値を更新するが、加算する変数Cの値と減
算する一致文字数が同じため、mの値は不変である。そ
の後、ステップ124を経由してステップ104に戻
り、9番目の文字以降のデータの処理となる。
文字と内容が一致するので、ステップ104の比較結果
では2文字以上一致となり、ステップ106に移行す
る。このとき、5番目の文字のデータの処理でのステッ
プ119で出力先制御フラグ8が1に設定されているた
め、第1の圧縮データ記憶バッファ6aに“0”の履歴
参照識別子12が書き込まれる(ステップ107)。そ
して、出力先制御フラグ8が2に設定され(ステップ1
09)、一致した部分データ列の位置と長さを表わす履
歴参照インデックス13が第2の圧縮データ記憶バッフ
ァ6bに出力される(ステップ110)。これが図2
(a)での符号Bである。この場合には、現在の処理デ
ータの4文字(4バイト)前から3文字(3バイト)の
長さを参照するので、履歴参照インデックス13の位置
インデックスは4,長さインデックスは1である。次
に、ステップ111でデータ長が充分長いと判定される
ので、変数Cに一致文字列の文字数3がセットされ(ス
テップ112)、履歴バッファ5に6〜8番目の3文字
を書き込む(ステップ114)。そして、ステップ11
5で変数mの値を更新するが、加算する変数Cの値と減
算する一致文字数が同じため、mの値は不変である。そ
の後、ステップ124を経由してステップ104に戻
り、9番目の文字以降のデータの処理となる。
【0086】以上のような処理の流れにより、図2
(a)に示すような圧縮データが夫々第1の圧縮データ
記憶バッファ6a,第2の圧縮データ記憶バッファ6b
に得られる。
(a)に示すような圧縮データが夫々第1の圧縮データ
記憶バッファ6a,第2の圧縮データ記憶バッファ6b
に得られる。
【0087】次に、図2(a)に示す圧縮データから同
図(b)に示す伸長データ(元のデータ)を生成する処
理を図1及び図4を用いて説明する。
図(b)に示す伸長データ(元のデータ)を生成する処
理を図1及び図4を用いて説明する。
【0088】ここで、図1における第1の圧縮データ記
憶手段6aに上記一連の識別子が格納され、第2の圧縮
データ記憶手段6bに上記非参照データ11と履歴参照
インデックス13とからなる一連のデータが格納されて
いるものとすると、前者を第1の入力、後者を第2の入
力として伸長処理プログラム2Bを起動する。
憶手段6aに上記一連の識別子が格納され、第2の圧縮
データ記憶手段6bに上記非参照データ11と履歴参照
インデックス13とからなる一連のデータが格納されて
いるものとすると、前者を第1の入力、後者を第2の入
力として伸長処理プログラム2Bを起動する。
【0089】そこで、まず、ステップ200で識別子取
得フラグ9を「未取得」状態に設定するので、ステップ
201の判定の結果、ステップ202に移行して第1の
圧縮データ記憶手段6aから識別子を読み取る。図2
(a)の例では、最初の識別子は“1”の非参照識別子
10であるので、ステップ203の判定の結果、ステッ
プ212に移行して第2の圧縮データ記憶手段6bから
1番目の非参照データ11を読み取り、一番目の文字
として伸長データ記憶バッファ7に書き込む(ステップ
213)。そして、識別子取得フラグ9を「未取得」状
態に設定し(ステップ214)、ステップ201に戻っ
て次の符号の伸長処理に移る。
得フラグ9を「未取得」状態に設定するので、ステップ
201の判定の結果、ステップ202に移行して第1の
圧縮データ記憶手段6aから識別子を読み取る。図2
(a)の例では、最初の識別子は“1”の非参照識別子
10であるので、ステップ203の判定の結果、ステッ
プ212に移行して第2の圧縮データ記憶手段6bから
1番目の非参照データ11を読み取り、一番目の文字
として伸長データ記憶バッファ7に書き込む(ステップ
213)。そして、識別子取得フラグ9を「未取得」状
態に設定し(ステップ214)、ステップ201に戻っ
て次の符号の伸長処理に移る。
【0090】次の符号の伸長処理では、ステップ214
で識別子取得フラグ9が「未取得」状態に設定されてい
るので、上記と同様に、ステップ201の判定の結果、
ステップ202に移行し、第1の圧縮データ記憶手段6
aから識別子を読み取る。図2(a)では、2番目の識
別子も“1”の非参照識別子10であるので、ステップ
203の判定の結果、ステップ212に移行して第2の
圧縮データ記憶手段6bから第2番目の非参照データ1
1を読み取り、これを2番目の文字として伸長データ
記憶バッファ7に書き込む(ステップ213)。そし
て、識別子取得フラグ9を「未取得」状態に設定し(ス
テップ214)、ステップ201に戻ってさらに次の符
号の伸長処理に移る。
で識別子取得フラグ9が「未取得」状態に設定されてい
るので、上記と同様に、ステップ201の判定の結果、
ステップ202に移行し、第1の圧縮データ記憶手段6
aから識別子を読み取る。図2(a)では、2番目の識
別子も“1”の非参照識別子10であるので、ステップ
203の判定の結果、ステップ212に移行して第2の
圧縮データ記憶手段6bから第2番目の非参照データ1
1を読み取り、これを2番目の文字として伸長データ
記憶バッファ7に書き込む(ステップ213)。そし
て、識別子取得フラグ9を「未取得」状態に設定し(ス
テップ214)、ステップ201に戻ってさらに次の符
号の伸長処理に移る。
【0091】さらに次の符号の伸長処理では、上記のよ
うに、ステップ214で識別子取得フラグ9が「未取
得」状態に設定されているので、上記と同様に、ステッ
プ201の判定の結果、ステップ202に移行して第1
の圧縮データ記憶手段6aから識別子を読み取る。図2
(a)では、3番目の識別子は“0”の履歴参照識別子
12であるので、ステップ203の判定の結果、ステッ
プ204に移行して第2の圧縮データ記憶手段6bから
2バイトのデータを読み取る。図2(a)の例では、符
号Aで示される部分とそれに続く非参照識別子10の1
ビットがまとめて読み出され、ステップ205〜207
で位置インデックスが2,長さインデックスが0の履歴
参照インデックス13と“0”の非参照識別子10(こ
れが、次の4番目の処理の識別子となる)とが得られ
る。そして、識別子取得フラグ9が「取得済」状態に設
定される(ステップ208)。次のステップ209の判
定では、上記のように位置インデックスが0でないの
で、ステップ210に移行し、0の長さインデックスに
より、伸長データ記憶バッファ7でのデータの末尾の2
バイト手前から2バイトのデータ(即ち、図2(b)で
の「Aの参照範囲」として示す範囲の文字と文字)
を取得し、それらを、履歴複写データ,として、伸
長データ記憶バッファ7のデータの末尾に付加する。そ
して、ステップ201に戻り、さらに次の符号の伸長処
理に移る。
うに、ステップ214で識別子取得フラグ9が「未取
得」状態に設定されているので、上記と同様に、ステッ
プ201の判定の結果、ステップ202に移行して第1
の圧縮データ記憶手段6aから識別子を読み取る。図2
(a)では、3番目の識別子は“0”の履歴参照識別子
12であるので、ステップ203の判定の結果、ステッ
プ204に移行して第2の圧縮データ記憶手段6bから
2バイトのデータを読み取る。図2(a)の例では、符
号Aで示される部分とそれに続く非参照識別子10の1
ビットがまとめて読み出され、ステップ205〜207
で位置インデックスが2,長さインデックスが0の履歴
参照インデックス13と“0”の非参照識別子10(こ
れが、次の4番目の処理の識別子となる)とが得られ
る。そして、識別子取得フラグ9が「取得済」状態に設
定される(ステップ208)。次のステップ209の判
定では、上記のように位置インデックスが0でないの
で、ステップ210に移行し、0の長さインデックスに
より、伸長データ記憶バッファ7でのデータの末尾の2
バイト手前から2バイトのデータ(即ち、図2(b)で
の「Aの参照範囲」として示す範囲の文字と文字)
を取得し、それらを、履歴複写データ,として、伸
長データ記憶バッファ7のデータの末尾に付加する。そ
して、ステップ201に戻り、さらに次の符号の伸長処
理に移る。
【0092】さらに次の符号の処理では、1回前の処理
でのステップ208で識別子取得フラグ9が「取得済」
状態に設定されているので、ステップ201の判定の結
果、ステップ203に移行する。図2(a)の例では、
1回前の処理でのステップ207で取得した4番目の識
別子は“0”の非参照識別子10であるので、ステップ
203の判定の結果、ステップ212に移行して第2の
圧縮データ記憶手段6bから非参照データ11が読み取
られ、5番目の文字として伸長データ記憶バッファ7
に書き込まれる(ステップ213)。そして、ステップ
214で識別子取得フラグ9を「未取得」状態に設定し
てステップ201に戻り、さらに次の符号の伸長処理に
移る。
でのステップ208で識別子取得フラグ9が「取得済」
状態に設定されているので、ステップ201の判定の結
果、ステップ203に移行する。図2(a)の例では、
1回前の処理でのステップ207で取得した4番目の識
別子は“0”の非参照識別子10であるので、ステップ
203の判定の結果、ステップ212に移行して第2の
圧縮データ記憶手段6bから非参照データ11が読み取
られ、5番目の文字として伸長データ記憶バッファ7
に書き込まれる(ステップ213)。そして、ステップ
214で識別子取得フラグ9を「未取得」状態に設定し
てステップ201に戻り、さらに次の符号の伸長処理に
移る。
【0093】次の伸長処理では、識別子取得フラグ9が
「未取得」状態に設定されているので、ステップ201
の判定の結果、ステップ202に移行して第1の圧縮デ
ータ記憶手段6aから識別子を読み取る。図2(a)の
例では、5番目の識別子は“0”の履歴参照識別子12
であるので、ステップ203の判定の結果、ステップ2
04に移行して第2の圧縮データ記憶手段6bから2バ
イトのデータを読み取る。図2(a)の例では、符号B
で示される部分とそれに隣接した非参照識別子10の1
ビットがまとめて読み取られる。そして、ステップ20
5〜ステップ207で位置インデックスが4,長さイン
デックスが1の履歴参照インデックス13と“1”の非
参照識別子10とが得られる。次に、識別子取得フラグ
9を「取得済」状態に設定し、ステップ209の判定に
より、位置インデックスが0でないので、ステップ21
0に移行し、履歴参照インデックス13で示される伸長
データ記憶バッファ7のデータの末尾の4バイト手前か
ら3バイト(図2(a)での「Bの参照範囲」と示され
る範囲での非参照データ11である文字と履歴複写デ
ータである文字,)を取り込み、それを伸長データ
記憶バッファのデータ末尾に6番目,7番目,8番目の
文字として追加する。そして、ステップ201に戻り、
さらに次の符号の伸長処理に移る。
「未取得」状態に設定されているので、ステップ201
の判定の結果、ステップ202に移行して第1の圧縮デ
ータ記憶手段6aから識別子を読み取る。図2(a)の
例では、5番目の識別子は“0”の履歴参照識別子12
であるので、ステップ203の判定の結果、ステップ2
04に移行して第2の圧縮データ記憶手段6bから2バ
イトのデータを読み取る。図2(a)の例では、符号B
で示される部分とそれに隣接した非参照識別子10の1
ビットがまとめて読み取られる。そして、ステップ20
5〜ステップ207で位置インデックスが4,長さイン
デックスが1の履歴参照インデックス13と“1”の非
参照識別子10とが得られる。次に、識別子取得フラグ
9を「取得済」状態に設定し、ステップ209の判定に
より、位置インデックスが0でないので、ステップ21
0に移行し、履歴参照インデックス13で示される伸長
データ記憶バッファ7のデータの末尾の4バイト手前か
ら3バイト(図2(a)での「Bの参照範囲」と示され
る範囲での非参照データ11である文字と履歴複写デ
ータである文字,)を取り込み、それを伸長データ
記憶バッファのデータ末尾に6番目,7番目,8番目の
文字として追加する。そして、ステップ201に戻り、
さらに次の符号の伸長処理に移る。
【0094】このように、この実施例では、圧縮データ
の復号に際し、非参照データ11や履歴参照インデック
ス13は、メモリからバイト単位でアクセスして読み取
ることができる。また、識別子は1ビットの符号である
ので、複数ビットの符号の切出しのように複数バイトに
またがることがなく、容易に読み取ることができる。従
って、高速な伸長処理が実現できる。
の復号に際し、非参照データ11や履歴参照インデック
ス13は、メモリからバイト単位でアクセスして読み取
ることができる。また、識別子は1ビットの符号である
ので、複数ビットの符号の切出しのように複数バイトに
またがることがなく、容易に読み取ることができる。従
って、高速な伸長処理が実現できる。
【0095】なお、以上の説明では、入出力の単位を1
バイトあるいは1ビットとしたが、アクセスが高速に行
なえるメモリバウンダリであれば、何ビットであって
も、本発明による符号化及び復号化方式を適用可能であ
る。また、識別子のビット数も1ビット以上でもよい。
この場合、履歴参照インデックスは (メモリバウンダリ×n)−(識別子のビット数) ………(1) で与えられるビット数で構成すればよい。
バイトあるいは1ビットとしたが、アクセスが高速に行
なえるメモリバウンダリであれば、何ビットであって
も、本発明による符号化及び復号化方式を適用可能であ
る。また、識別子のビット数も1ビット以上でもよい。
この場合、履歴参照インデックスは (メモリバウンダリ×n)−(識別子のビット数) ………(1) で与えられるビット数で構成すればよい。
【0096】また、例えば、先に説明した冗長性が高い
データの場合のように、位置インデックスを12ビッ
ト,長さインデックスを4ビットとして履歴参照インデ
ックスを非参照データの2倍の16ビット構成とした場
合には、上記のように履歴参照インデックスに次の文字
列の識別子を付加するようなことは必要ない。
データの場合のように、位置インデックスを12ビッ
ト,長さインデックスを4ビットとして履歴参照インデ
ックスを非参照データの2倍の16ビット構成とした場
合には、上記のように履歴参照インデックスに次の文字
列の識別子を付加するようなことは必要ない。
【0097】さらに、図1に示したように、第2の圧縮
データ記憶バッファ6bには、履歴参照できなかったデ
ータ、言い換えれば、入力データ中で非冗長なデータが
出現順に記録される。従って、全く冗長を含まない文字
の列からなるデータを圧縮した場合、第1の圧縮データ
記憶バッファ6aには、非参照識別子10のみが圧縮デ
ータ数と同じ数だけ記憶され、また、第2の圧縮データ
記憶バッファ6bには、入力データそのものが記憶され
ることになる。
データ記憶バッファ6bには、履歴参照できなかったデ
ータ、言い換えれば、入力データ中で非冗長なデータが
出現順に記録される。従って、全く冗長を含まない文字
の列からなるデータを圧縮した場合、第1の圧縮データ
記憶バッファ6aには、非参照識別子10のみが圧縮デ
ータ数と同じ数だけ記憶され、また、第2の圧縮データ
記憶バッファ6bには、入力データそのものが記憶され
ることになる。
【0098】
【発明の効果】以上説明したように、本発明によれば、
符号の復号化のためのメモリアクセスが1ビットのアク
セスと1文字単位のアクセスの2種類でよいため、非常
に高速に行なうことができるし、また、伸長処理時の履
歴参照を伸長したデータそのものを利用して行なうた
め、履歴バッファが不要となり、処理が簡単化して高速
化される。
符号の復号化のためのメモリアクセスが1ビットのアク
セスと1文字単位のアクセスの2種類でよいため、非常
に高速に行なうことができるし、また、伸長処理時の履
歴参照を伸長したデータそのものを利用して行なうた
め、履歴バッファが不要となり、処理が簡単化して高速
化される。
【図1】本発明による符号化及び復号化方式の一実施例
を示すブロック図である。
を示すブロック図である。
【図2】図1に示した実施例での圧縮データと伸長デー
タ(元のデータ)との一具体例を示す図である。
タ(元のデータ)との一具体例を示す図である。
【図3】図1における圧縮処理プログラムの流れを示す
フローチャートである。
フローチャートである。
【図4】図1における伸長処理プログラムの流れを示す
フローチャートである。
フローチャートである。
【図5】従来の符号化及び復号化方式のでの圧縮データ
と伸長データ(元のデータ)との一具体例を示す図であ
る。
と伸長データ(元のデータ)との一具体例を示す図であ
る。
1 演算処理装置 2 読出し専用メモリ 2A 圧縮処理プログラム 2B 伸長処理プログラム 2C 管理プログラム 2D 演算処理プログラム 2E 演算処理データ 3 随時書込み読出しメモリ 4 システムバス 5 履歴バッファ 6 圧縮データ記憶バッファ 6a 第1の圧縮データ記憶バッファ 6b 第2の圧縮データ記憶バッファ 7 伸長データ記憶バッファ 8 出力先制御フラグ 9 識別子取得フラグ 10 非参照識別子 11 非参照データ 12 履歴参照識別子 13 履歴参照インデックス
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平4−76727(JP,A) 特開 平4−217021(JP,A) 特開 平6−178124(JP,A) 特開 平5−233212(JP,A) 特開 平6−274310(JP,A) (58)調査した分野(Int.Cl.7,DB名) H03M 7/46
Claims (5)
- 【請求項1】 シーケンシャルに入力された文字列をメ
モリに蓄積し、 蓄積された文字列の中で複数回繰り返し出現する部分文
字列を検索し、 2回目以降に出現する同じ内容の部分文字列を同じ内容
の先頭の部分文字列を指示する符号に変換して圧縮する
とともに、圧縮されない部分文字列と該符号毎に識別子
を生成し、 該圧縮されない部分文字列と該部分文字列を指示する符
号が入力順に配列されてなるデータと、該識別子が生成
順に配列されてなるデータとを別々に出力することを特
徴とするデータ符号化方式。 - 【請求項2】 シーケンシャルに入力された文字列を蓄
積する履歴バッファと、 1文字のデータバウンダリ単位で記憶する圧縮データ記
憶手段と、 1文字のデータバウンダリ単位で記憶する伸長データ記
憶手段と、 新たに入力された文字列と該履歴バッファ上の文字列を
比較し、2文字以上一致する文字列があるとき、履歴参
照識別子と、新たに入力された該文字列と一致する該履
歴バッファ上の文字列での部分文字列の位置及び長さを
示す履歴参照インデックスとを生成して圧縮データ記憶
手段に追加格納し、2文字以上一致する文字列がないと
きには、新たに入力された該文字列の先頭1文字を非参
照データとするとともに、非参照識別子を生成し、該非
参照データと該非参照識別子とを圧縮データ記憶手段に
追加格納する処理を繰り返し、該圧縮データ記憶手段に
履歴参照識別子,非参照識別子と履歴参照インデック
ス,非参照データとからなる圧縮データを得るようにし
た圧縮処理手段と、 該圧縮データの識別子を取り込み、取り込んだ該識別子
が非参照識別子であるときには、該圧縮データから該非
参照データ1個分のデータを取り込み、1文字のデータ
として該伸長データ記憶手段に追加格納し、該圧縮デー
タから取り込んだ識別子が履歴参照識別子であるときに
は、該圧縮データから履歴参照インデックス1個分のデ
ータを取り込み、その内容に基づいて、既に該伸長デー
タ記憶手段に格納されている文字列のうちの該履歴参照
インデックスで指示される部分文字列を取り込んで該伸
長データ記憶手段に追加格納する伸長処理手段とを有す
るデータ符号化及び復号化方式において、 前記圧縮データ記憶手段は、第1,第2の圧縮データ記
憶手段からなり、 前記圧縮処理手段は、該第1の圧縮データ記憶手段に前
記履歴参照識別子と非参照識別子とを格納し、該第2の
圧縮データ記憶手段に前記履歴参照インデックスと非参
照データとを格納することを特徴とするデータ符号化及
び復号化方式。 - 【請求項3】 請求項2において、 前記圧縮処理手段は、前記履歴参照インデックスに変換
される部分文字列に続く部分文字列に対して生成する識
別子を、前記第2の圧縮データ記憶手段で、前記履歴参
照インデックスに付加して格納し、 該識別子が付加された履歴参照インデックスのデータ長
を前記非参照データのデータ長の整数倍とすることを特
徴とするデータ符号化及び復号化方式。 - 【請求項4】 請求項2または3において、 第1の状態で識別子の前記第1の圧縮データ記憶手段へ
の出力を指示し、第2の状態で前記第2の圧縮データ記
憶手段への出力を指示する出力先制御フラグと、識別子
の「取得済み」か「未取得」かを示す識別子取得フラグ
とを設け、 前記圧縮処理手段は、 圧縮処理の開始時、該出力先制御フラグを第1の状態に
設定し、 圧縮処理時、前記履歴バッファ上の文字列中に入力され
る文字列と2文字以上一致する部分文字列がないときに
は、該出力先制御フラグの状態に応じて前記非参照識別
子を前記第1または第2の圧縮データ記憶手段に記憶し
た後、該出力先制御フラグを第1の状態に設定し、 圧縮処理時、前記履歴バッファ上の文字列中に入力され
る文字列と2文字以上一致する部分文字列があるときに
は、該出力先制御フラグの状態に応じて前記履歴参照識
別子を前記第1または第2の圧縮データ記憶手段に記憶
した後、該出力先制御フラグを第2の状態に設定し、 前記伸長処理手段は、 前記第1または第2の圧縮データ記憶手段から取り込ん
だ識別子の保持手段を有しており、 伸長処理の開始時、前記識別子取得フラグを「未取得」
状態に設定し、 前記識別子取得フラグが「未取得」状態にあるとき、前
記第1の圧縮データ記憶手段から識別子を取り込んで該
保持手段に保持し、これが非参照識別子であるとき、前
記第2の圧縮データ記憶手段から1バイト取り込んで復
号データとし、前記伸長データ記憶手段に格納するとと
もに、前記識別子取得フラグを「未取得」状態に設定
し、前記保持手段に保持された識別子が履歴参照識別子
であるときには、前記第2の圧縮データ記憶手段から取
り込まれる前記履歴参照インデックスから分離される識
別子を前記保持手段に保持するとともに前記識別子取得
フラグを「取得済み」状態に設定し、 前記識別子取得フラグが「取得済み」状態にあるときに
は、前記保持手段で保持されている前記識別子の内容に
応じて前記第2の圧縮データ記憶手段からデータの取込
みを行なうことを特徴とするデータ符号化及び復号化方
式。 - 【請求項5】 請求項2,3または4において、 前記伸長処理手段は、 前記圧縮データから取り込んだ前記履歴参照インデック
スで指示される位置,長さに基づいて前記伸長データ記
憶手段から部分データ列を取り込み、前記伸長データ記
憶手段でのデータ列の最後に続けて格納することを特徴
とするデータ符号化及び復号化方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP16713194A JP3202488B2 (ja) | 1994-07-19 | 1994-07-19 | データ符号化及び復号化方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP16713194A JP3202488B2 (ja) | 1994-07-19 | 1994-07-19 | データ符号化及び復号化方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0832454A JPH0832454A (ja) | 1996-02-02 |
JP3202488B2 true JP3202488B2 (ja) | 2001-08-27 |
Family
ID=15844011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP16713194A Expired - Fee Related JP3202488B2 (ja) | 1994-07-19 | 1994-07-19 | データ符号化及び復号化方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3202488B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9950313B2 (en) | 2015-03-31 | 2018-04-24 | Asahi Kasei Kabushiki Kaisha | Method for producing oxide catalyst, and method for producing unsaturated nitrile |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014097356A1 (ja) * | 2012-12-19 | 2014-06-26 | 富士通株式会社 | 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法および伸張装置 |
-
1994
- 1994-07-19 JP JP16713194A patent/JP3202488B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9950313B2 (en) | 2015-03-31 | 2018-04-24 | Asahi Kasei Kabushiki Kaisha | Method for producing oxide catalyst, and method for producing unsaturated nitrile |
Also Published As
Publication number | Publication date |
---|---|
JPH0832454A (ja) | 1996-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5870036A (en) | Adaptive multiple dictionary data compression | |
US6411227B1 (en) | Dual mode data compression for operating code | |
US5229768A (en) | Adaptive data compression system | |
KR100332709B1 (ko) | 스트링 검색이 포함되어 있는 즉각적인 사전 갱신을 갖춘 데이터 | |
US5485526A (en) | Memory circuit for lossless data compression/decompression dictionary storage | |
KR100527891B1 (ko) | 허프만 디코딩을 수행하는 방법 | |
JPH0869370A (ja) | データ圧縮方法およびシステム | |
JP3397431B2 (ja) | データ圧縮方法および装置ならびにデータ復元方法および装置 | |
JP2000315954A (ja) | 入力データストリームの圧縮方法とその装置 | |
WO2007050018A1 (en) | Method and system for compressing data | |
JP4156381B2 (ja) | 文字テーブルによって実施されるデータ圧縮の方法および装置 | |
JP2004260256A (ja) | データ圧縮装置及びデータ展開装置 | |
JP3202488B2 (ja) | データ符号化及び復号化方式 | |
US20200119747A1 (en) | Decompression Engine for Executable Microcontroller Code | |
WO2017039906A1 (en) | Modifying a compressed block of data | |
JP3038223B2 (ja) | データ圧縮方式 | |
JPH10261969A (ja) | データ圧縮方法および装置 | |
JP3242795B2 (ja) | データ処理装置及びデータ処理方法 | |
JP3236747B2 (ja) | データ伸長方式 | |
JPH05241776A (ja) | データ圧縮方式 | |
JP3088740B2 (ja) | データ圧縮及び復元方式 | |
JP3171510B2 (ja) | 辞書ベースのメモリ内のデータを圧縮および圧縮解除する方法 | |
JP2003318739A (ja) | データシーケンスを圧縮するシステム、方法、およびコンピュータ読み取り可能媒体 | |
JP3012679B2 (ja) | データ圧縮方法 | |
JP3012678B2 (ja) | データ圧縮方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |