(57)【特許請求の範囲】
【請求項１】
記号列の中から所定の長さの第１の記号列に一致する第２の記号列を検出する記号列検出手段と、
前記第１の記号列に続く第３の記号列と前記第２の記号列に続く第４の記号列との一致長を検出する一致長検出手段と、
前記第１と第２の記号列の対応関係に基づき、第３の記号列の符号語として第４の記号列との一致長を用いることで、前記入力された記号列の符号化を行う符号化手段とを備えることを特徴とする符号化装置。
【請求項２】
記号列の出現位置を所定のコードに関連付けて記憶する出現位置記憶手段と、
第１の記号列に対応するコードに関連づけられた第２の記号列の出現位置を前記出現位置記憶手段から検索する出現位置検索手段と、
前記第１の記号列に続く第３の記号列と前記第２の記号列に続く第４の記号列との一致長を検出する一致長検出手段と、
前記第４の記号列は、第２の記号列の出現位置に第２の記号列の長さを足した位置から、（前記一致長・１）だけ移動した範囲に相当することにより、
前記一致長検出手段で検出された一致長を符号化することにより、前記第３の記号列の符号化を行う一致長符号化手段とを備えることを特徴とする符号化装置。
【請求項３】
前記一致長の長さが所定値以下の場合、その記号列については一致長による符号化を行わないようにすることを特徴とする請求項１または２に記載の符号化装置。
【請求項４】
所定の長さの第１の記号列に続く第３の記号列の一致長に基づいて符号化された符号化データを取得する符号化データ取得手段と、
前記第１の記号列と一致する第２の記号列を検出する記号列検出手段と、
前記第１の記号列を示す符号に続く符号から一致長を求め、前記第２の記号列に続く前記一致長分の第４の記号列を前記第３の記号列として復号する復号手段とを備えることを特徴とする復号化装置。
【請求項５】
所定の長さの第１の記号列に続く第３の記号列の一致長に基づいて符号化された符号化データを取得する符号化データ取得手段と、
復号化された記号列の出現位置を所定のコードに関連づけて記憶する出現位置記憶手段と、
前記第１の記号列に対応するコードに関連づけられた第２の記号列の出現位置を前記出現位置記憶手段から検索する出現位置検索手段と、
前記第１の記号列を示す符号に続く符号から一致長を求め、前記第２の記号列に続く前記一致長分の第４の記号列を前記第３の記号列として復号する復号手段とを備えることを特徴とする復号化装置。
【請求項６】
記号列を入力する入力手段と、
入力された記号列の中から所定の長さの第１の記号列に一致する第２の記号列を検出する第１の記号列検出手段と、
前記第１の記号列に続く第３の記号列と前記第２の記号列に続く第４の記号列との一致長を検出する一致長検出手段と、
前記記号列検出手段で検出された記号列及び前記一致長検出手段で検出された一致長に基づいて、前記入力された記号列の符号化を行う符号化手段と、
前記符号化手段で符号化された符号化データを送信する符号化データ送信手段と、
前記第１の記号列及び前記第３の記号列の一致長に基づいて符号化された符号化データを受信する符号化データ受信手段と、
前記第１の記号列と一致する前記第２の記号列を前記符号化データの復号結果から検出する第２の記号列検出手段と、
前記第２の記号列に続く前記第４の記号列を、前記第３の記号列として復号する復号手段とを備えることを特徴とするデータ伝送装置。
【請求項７】
被圧縮データ列を保持する入力バッファを持ち、前記入力バッファにおいて既に圧縮済みの部分をＬｅｍｐｅｌバッファ、前記入力バッファのこれから圧縮する部分を格納している部分をＺｉｖバッファとしたときに、
前記Ｌｅｍｐｅｌバッファ内にあるｎ（ｎ≧１）文字列の出現位置の一部もしくは全てを保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が前記出現位置保持手段に保持されているかどうか調査する出現有無調査手段と、
前記出現位置保持手段に前記出現位置が保持されている場合、前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を前記出現位置保持手段から取得する出現位置取得手段と、
前記出現位置以降の文字列とＺｉｖバッファの先頭以降の文字列との一致長を検出する一致長検出手段と、
前記出現有無調査手段において、前記Ｚｉｖバッファの直前ｎ文字列の出現位置の保持が確認された場合、前記出現位置以降の文字列と一致する部分を前記一致長で符号化する一致長符号化手段とを備えることを特徴とするデータ圧縮装置。
【請求項８】
直前の０〜（ｍ−１）（ｍ≧１）文字列を文脈として、次に出現する文字の符号を保持する文脈付文字符号保持手段と、
直前の０〜（ｍ−１）文字列を文脈として、次に続く文字を前記文脈付文字符号保持手段から検索する文脈付文字検索手段と、
前記文脈付文字検索手段で検索された文字を、前記文脈付文字符号保持手段に保持されている符号に従って符号化する文脈付文字符号化手段と、
前記一致長符号化手段による符号化と前記文脈付文字符号化手段による符号化とを切り替える切り替え手段とを備えることを特徴とする請求項７に記載のデータ圧縮装置。
【請求項９】
長さがｎ−１の文脈と次に続く文字とを合わせたｎ文字列を、前記出現位置保持手段におけるｎ文字列の出現位置とリンクさせるリンク手段と、
前記文脈付文字符号化手段において符号化した文字の文脈の長さがｎ−１かどうかを調査する文脈長調査手段と、
前記文脈の長さがｎ−１の場合、前記出現位置保持手段に前記出現位置が保持されていることを、前記出現有無調査手段に通知する通知手段とを備えることを特徴とする請求項８に記載のデータ圧縮装置。
【請求項１０】
長さ１〜ｍの文字または文字列に対応する符号を保持する文字／文字列符号保持手段と、
前記被圧縮データと最長一致する文字または文字列を前記文字／文字列符号保持手段に保持されている文字または文字列から検索する文字／文字列検索手段と、
前記文字／文字列検索手段で検索された文字または文字列を、前記文字／文字列符号保持手段に保持されている符号に従って符号化する文字／文字列符号化手段と、
前記一致長符号化手段による符号化と前記文字／文字列符号化手段による符号化とを切り替える切り替え手段とを備えることを特徴とする請求項７に記載のデータ圧縮装置。
【請求項１１】
前記文字／文字列符号保持手段に保持されているｎ文字列を、前記出現位置保持手段におけるｎ文字列の出現位置とリンクさせるリンク手段と、
前記文字／文字列符号化手段において符号化した文字または文字列の長さがｎかどうかを調査する文脈長調査手段と、
前記文字または文字列の長さがｎの場合、前記出現位置保持手段に前記出現位置が保持されていることを、前記出現有無調査手段に通知する通知手段とを備えることを特徴とする請求項１０に記載のデータ圧縮装置。
【請求項１２】
前記ｎ文字列と同じ文字列のＬｅｍｐｅｌバッファ内での出現位置以降の一致部分をその一致長を表す符号に置き換えて保持し、他の部分は被圧縮データをそのまま保持する中間バッファと、
直前の０〜（ｍ−１）文字列を文脈として、次に出現する文字の符号を保持する文脈付文字符号保持手段と、
直前の０〜（ｍ−１）文字列を文脈として、次に続く文字を前記文脈付文字符号保持手段から検索する文脈付文字検索手段と、
前記文脈付文字検索手段で検索された文脈付文字を、前記文脈付文字符号保持手段に保持されている符号に従って符号化する文脈付文字符号化手段とを備えることを特徴とする請求項７に記載のデータ圧縮装置。
【請求項１３】
直前ｎ文字列と同じ文字列のＬｅｍｐｅｌバッファ内での出現位置以降の一致部分をその一致長を表す符号に置き換えて保持し、他の部分は被圧縮データをそのまま保持する中間バッファと、
長さ１〜ｍの文字または文字列と対応する符号を保持する文字／文字列符号保持手段と、
前記中間バッファに保持されているデータと最長一致する文字または文字列を、前記文字／文字列符号保持手段に保持されている文字または文字列から検索する文字／文字列検索手段と、
前記文字／文字列検索手段で検索された文字または文字列を、前記文字／文字列符号保持手段に保持されている符号に従って符号化する文字／文字列符号化手段とを備えることを特徴とする請求項７に記載のデータ圧縮装置。
【請求項１４】
被圧縮データを保持する入力バッファを持ち、前記入力バッファにおいて既に圧縮済みの部分をＬｅｍｐｅｌバッファ、これから圧縮する部分をＺｉｖバッファとした時に、
長さｎの文字列からハッシュコードを生成するハッシュコード生成手段と、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列から生成されたハッシュコードに関連づけて、前記Ｌｅｍｐｅｌバッファ内での前記ｎ文字列の出現位置を保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列から生成したハッシュコードを前記出現位置保持手段から検索することにより、前記ハッシュコードに関連づけられた出現位置を前記出現位置保持手段から取得する出現位置取得手段と、
上記出現位置以降の文字列とＺｉｖバッファの先頭以降の文字列の一致を比較し、その一致長を求める一致長取得手段と、
前記Ｚｉｖバッファの先頭以降の文字列を前記一致長で符号化する一致長符号化手段とを備えることを特徴とするデータ圧縮装置。
【請求項１５】
前記出現位置取得手段により特定されたＬｅｍｐｅｌバッファ内の文字列と、前記Ｚｉｖバッファの直前にある長さｐの文字列とを比較するハッシュ衝突確認手段を備え、
前記一致長符号化手段は、前記ｐ個の文字が全て一致している時にのみ、前記Ｚｉｖバッファの先頭以降の文字列を前記一致長で符号化することを特徴とする請求項１４に記載のデータ圧縮装置。
【請求項１６】
ｎ＝３、かつ、ｐ＝０または２であることを特徴するとする請求項１５に記載のデータ圧縮装置。
【請求項１７】
被圧縮データを保持する入力バッファを持ち、前記入力バッファにおいて既に圧縮済みの部分をＬｅｍｐｅｌバッファ、これから圧縮する部分をＺｉｖバッファとした時に、
前記Ｌｅｍｐｅｌバッファ内の長さｎの文字列の出現位置の一部もしくは全てを保持する出願位置保持手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列と同じ文字列のＬｅｍｐｅｌバッファ内での出現位置を保持しているかどうかを調査する出現有無調査手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列のＬｅｍｐｅｌバッファ内での出現位置を取得する出現位置取得手段と、
上記出現位置以降の文字列と前記Ｚｉｖバッファの先頭以降の文字列との一致を比較し、その一致長を求める一致長取得手段と、
前記一致長を符号化する一致長符号化手段と、
前記一致長取得手段により求めた一致長が０の場合、不一致情報を前記ｎ文字列と関連づけて保持する不一致情報保持手段と、
前記Ｚｉｖバッファの直前の長さｎの文字列に前記不一致情報が関連づけられてない場合、前記Ｚｉｖバッファの先頭以降の文字列を前記一致長で符号化する一致長符号化手段とを備えることを特徴とするデータ圧縮装置。
【請求項１８】
前記Ｚｉｖバッファの直前の長さｑの文字列の各文字全てが同じ文字であるかどうかを求める同文字連続確認手段を備え、
前記不一致情報保持手段は、直前の長さｑの文字列が全て同じ文字の場合、前記一致長が０の場合でも、前記ｎ文字列に前記不一致情報を与えないようにすることを特徴とする請求項１７に記載のデータ圧縮装置。
【請求項１９】
ｑ＝２であることを特徴とする請求項１８に記載のデータ圧縮装置。
【請求項２０】
被圧縮データを保持する入力バッファを持ち、前記入力バッファにおいて既に圧縮済みの部分をＬｅｍｐｅｌバッファ、これから圧縮する部分をＺｉｖバッファとした時に、
前記Ｌｅｍｐｅｌバッファ内の長さｎの文字列の出現位置の一部もしくは全てを保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置を保持しているかどうかを調査する出現有無調査手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置を取得する出現位置取得手段と、
前記出現位置以降の文字列と前記Ｚｉｖバッファの先頭以降の文字列の一致を比較し、その一致長を求める一致長取得手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置が前記出現位置取得手段に保持されている場合、前記Ｚｉｖバッファの先頭以降の文字列を前記一致長で符号化する一致長符号化手段と、
直前１文字または直前１文字から特徴を抜き出したものを文脈として、次に出現する文字の符号を保持する文脈付文字符号保持手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置が前記出現位置取得手段に保持されていない場合、前記符号に従って文字を符号化する文脈付文字符号化手段とを備えることを特徴とするデータ圧縮装置。
【請求項２１】
圧縮データを復元した元の被圧縮データを保持する出力バッファを持ち、前記出力バッファにおいて、既に復元済みデータを格納する部分をＬｅｍｐｅｌバッファ、これから復元したデータを格納する部分をＺｉｖバッファとしたときに、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が前記出現位置保持手段に保持されているかどうか調査する出現有無調査手段と、
前記出現位置保持手段に前記出現位置が保持されている場合、前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を前記出現位置保持手段から取得する出現位置取得手段と、
圧縮データから一致長を復元する一致長復元手段と、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列に続く前記一致長分の文字列を、前記Ｚｉｖバッファの直前のｎ文字列の次の復元結果とする文字列復元手段とを備えることを特徴とするデータ復元装置。
【請求項２２】
直前の０〜（ｍ−１）文字列を文脈として、次に出現する文字の符号を保持する文脈付文字符号保持手段と、
直前の０〜（ｍ−１）文字列を文脈とする符号を、前記文脈付文字符号保持手段から検索する文脈検索手段と、
前記文脈検索手段で検索された符号から文字を復元する文脈付文字復元手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が前記出現位置保持手段に保持されていない場合、前記文脈付文字復元手段に文字を復元させる切り替え手段とを備えることを特徴とする請求項２１に記載のデータ復元装置。
【請求項２３】
長さ１〜ｍの文字または文字列に対応する符号を保持する文字／文字列符号保持手段と、
前記文字／文字列符号保持手段に保持されている符号に従って、文字または文字列を復元する文字／文字列復元手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が前記出現位置保持手段に保持されていない場合、前記文字／文字列復元手段に文字または文字列を復元させる切り替え手段とを備えることを特徴とする請求項２１に記載のデータ復元装置。
【請求項２４】
直前の０〜（ｍ−１）文字列を文脈として、次に出現する文字の符号を保持する文脈付文字符号保持手段と、
直前の０〜（ｍ−１）文字列を文脈とする符号を検索する文脈検索手段と、
前記文脈付文字符号保持手段に保持されている符号に従って、圧縮データから文字を復元する文脈付文字復元手段と、
前記文脈付文字復元手段で復元されたデータを保持する中間コードバッファと、
前記中間コードバッファに保持されているデータを入力データとした時の復元したデータを格納する出力バッファを持ち、前記出力バッファにおいて、既に復元済みのデータを格納する部分をＬｅｍｐｅｌバッファ、これから復元するデータを格納する部分をＺｉｖバッファとしたときに、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が前記出現位置保持手段に保持されているかどうか調査する出現有無調査手段と、
前記出現位置保持手段に前記出現位置が保持されている場合、前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を前記出現位置保持手段から取得する出現位置取得手段と、
中間コードから一致長を復元する一致長復元手段と、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列に続く前記一致長分の文字列を、
前記Ｚｉｖバッファの直前のｎ文字列の次の復元結果とする文字列復元手段と、
前記出現位置保持手段に前記出現位置が保持されていない場合、前記中間コードを復元結果としてそのまま出力する出力手段とを備えることを特徴とするデータ復元装置。
【請求項２５】
長さ１〜ｍの文字または文字列に対応する符号を保持する文字／文字列符号保持手段と、
前記文字／文字列符号保持手段に保持されている符号に従って、文字または文字列を復元する文字／文字列復元手段と、
前記文字／文字列復元手段で復元されたデータを保持する中間コードバッファと、
前記中間コードバッファに保持されているデータを入力データとした時の復元したデータを格納する出力バッファを持ち、前記出力バッファにおいて、既に復元済みのデータを格納する部分をＬｅｍｐｅｌバッファ、これから復元するデータを格納する部分をＺｉｖバッファとしたときに、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が前記出現位置保持手段に保持されているかどうか調査する出現有無調査手段と、
前記出現位置保持手段に前記出現位置が保持されている場合、前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を前記出現位置保持手段から取得する出現位置取得手段と、
中間コードから一致長を復元する一致長復元手段と、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列に続く前記一致長分の文字列を、
前記Ｚｉｖバッファの直前のｎ文字列の次の復元結果とする文字列復元手段と、
前記出現位置保持手段に前記出現位置が保持されていない場合、前記中間コードを復元結果としてそのまま出力する出力手段とを備えることを特徴とするデータ復元装置。
【請求項２６】
復元された元の被圧縮データを保持する出力バッファを持ち、前記出力バッファにおいて、既に復元済みの部分をＬｅｍｐｅｌバッファ、これから復元する部分をＺｉｖバッファとした時に、
長さｎの文字列からハッシュコードを生成するハッシュコード生成手段と、
前記Ｌｅｍｐｅｌバッファ内にあるｎ文字列から生成されたハッシュコードに関連づけて、前記Ｌｅｍｐｅｌバッファ内での前記ｎ文字列の出現位置を保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列から生成したハッシュコードと関連づけられた出現位置を取得する出現位置取得手段と、
前記Ｚｉｖバッファ内の先頭の符号から一致長を復元する一致長復元手段と、
前記Ｌｅｍｐｅｌバッファ内での前記出現位置以降の前記一致長分の長さの文字列を、前記Ｚｉｖバッファ内の先頭の符号の復元結果とする文字復元手段とを備えることを特徴とするデータ復元装置。
【請求項２７】
前記出現位置取得手段により特定された前記Ｌｅｍｐｅｌバッファ内の文字列と、前記Ｚｉｖバッファの直前にある長さｐの文字列とを比較するハッシュ衝突確認手段を備え、
前記文字復元手段は、前記ｐ個の文字全てが一致している場合にのみ、前記Ｌｅｍｐｅｌバッファ内での前記出現位置以降の前記一致長分の長さの文字列を、前記Ｚｉｖバッファ内の先頭の符号の復元結果とすることを特徴とする請求項２６に記載のデータ復元装置。
【請求項２８】
復元された元の被圧縮データを保持する出力バッファを持ち、前記出力バッファにおいて、既に復元済みの部分をＬｅｍｐｅｌバッファ、これから復元する部分をＺｉｖバッファとした時に、
前記Ｌｅｍｐｅｌバッファ内の長さｎの文字列の出現位置の一部もしくは全てを保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置を保持しているかどうかを調査する出現有無調査手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置を取得する出現位置取得手段と、
前記Ｚｉｖバッファ内の先頭の符号から一致長を復元する一致長復元手段と、
前記一致長取得手段により求めた一致長が０の場合、不一致情報を前記ｎ文字列と関連づけて保持する不一致情報保持手段と、
前記Ｚｉｖバッファの直前の長さｎの文字列に前記不一致情報が関連づけられてない場合、前記Ｌｅｍｐｅｌバッファ内での前記出現位置以降の前記一致長分の長さの文字列を、前記Ｚｉｖバッファ内の先頭の符号の復元結果とする文字復元手段とを備えることを特徴とするデータ復元装置。
【請求項２９】
復元された元の被圧縮データを保持する出力バッファを持ち、前記出力バッファにおいて、既に復元済みの部分をＬｅｍｐｅｌバッファ、これから復元する部分をＺｉｖバッファとした時に、
前記Ｌｅｍｐｅｌバッファ内の長さｎの文字列の出現位置の一部もしくは全てを保持する出現位置保持手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置を保持しているかどうかを調査する出現有無調査手段と、
前記Ｚｉｖバッファの直前にある長さｎの文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置を取得する出現位置取得手段と、
前記Ｚｉｖバッファ内の先頭の符号から一致長を復元する一致長復元手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置が前記出現位置取得手段に保持されている場合、前記Ｌｅｍｐｅｌバッファ内での前記出現位置以降の前記一致長分の長さの文字列を、前記Ｚｉｖバッファ内の先頭の符号の復元結果とする文字復元手段と、
直前１文字または、直前１文字から特徴を抜き出したものを文脈として、次に出現する文字の符号を保持する文脈付文字符号保持手段と、
前記Ｚｉｖバッファの直前のｎ文字列と同じ文字列の前記Ｌｅｍｐｅｌバッファ内での出現位置が前記出現位置取得手段に保持されていない場合、前記符号に従って文字を復元する文脈付文字符号復元手段とを備えることを特徴とするデータ復元装置。
【請求項３０】
過去に出現した第２の文字列の出現位置を記憶しておくステップと、
第３の文字列の直前の第１の文字列を検出するステップと、
前記第１の文字列と各文字が一致する前記第２の文字列の出現位置を前記記憶結果から取得するステップと、
前記第２の文字列に続く第４の文字列と前記第３の文字列との一致長を検出するステップと、
前記第４の記号列は、第２の記号列の出現位置に第２の記号列の長さを足した位置から、（前記一致長・１）だけ移動した範囲に相当することにより、
前記第３の文字列を前記一致長で符号化するステップとを備えることを特徴とするデータ圧縮方法。
【請求項３１】
所定の長さの第２の記号列と一致する第１の記号列を符号化したデータ構造と、
前記第１の記号列に続く第３の記号列を、前記第２の記号列に続く第４の記号列との一致長で符号化したデータ構造とを備え、
前記第４の記号列は、第２の記号列の出現位置に第２の記号列の長さを足した位置から、（前記一致長・１）だけ移動した範囲に相当する
ことを特徴とするコンピュータ読み取り可能な記憶媒体。
【請求項３２】
記号列の中から所定の長さの第１の記号列に一致する第２の記号列を検出する機能と、
前記第１の記号列に続く第３の記号列と前記第２の記号列に続く第４の記号列との一致長を検出する機能と、
前記第４の記号列は、第２の記号列の出現位置に第２の記号列の長さを足した位置から、  （前記一致長・１）だけ移動した範囲に相当することにより、
前記第３の記号列と前記第４の記号列の一致長に基づいて、前記第３の記号列の符号化を行う機能とを少なくともコンピュータで実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、符号化装置及び復号化装置に関し、ＣＡＤデータ、文書データ等幅広いデータの圧縮や復元に適用して好適なものである。
【０００２】
【従来の技術】
近年、文字コード、画像データ等の様々な種類のデータがコンピュータで扱われるようになってきており、取り扱われるデータ量も増大している。このような大量のデータを記憶したり、遠隔地へ伝送したりする場合、記憶容量を減らしたり、伝送速度を向上させたりするために、データ中の冗長な部分を省いて圧縮することが一般的に行われている。
【０００３】
データ圧縮方式には、データ系列の類似性を利用した辞書型符号化方式と、データ列の出現頻度を利用した確率統計型符号化方式がある。
辞書型符号化方式の代表的な例として、ＬＺ７７方式とＬＺ７８方式とがある。
【０００４】
ＬＺ７７方式は、一定のバッファを設け、このバッファ内の過去の入力データから最長一致する過去のデータの位置を検索し、一致した位置とその一致長の２つを符号として用いる方式である。
【０００５】
図２６は、従来のＬＺ７７方式の符号化方法を説明する図である。
図２６において、被圧縮データとして、‘ａｂａｂｃｄｅｆａｂｃｄｅｆｇｈ・・・’という文字列が入力されたものとし、被圧縮データの各文字には、出現位置を示す入力番号が付されているものとする。
【０００６】
まず、入力番号１の‘ａ’が入力された場合、それ以前には文字がないので、文字‘ａ’がそのまま符号化される。次に、入力番号２の文字‘ｂ’が入力された場合、それ以前に入力された文字と比較されるが、文字‘ｂ’と一致する文字はないので、文字‘ｂ’がそのまま符号化される。さらに、入力番号３，４の文字列‘ａｂ’が入力された場合、それ以前に入力された文字列と比較される。この結果、この文字列は入力番号１，２の文字列‘ａｂ’と一致するので、入力番号３，４の文字列‘ａｂ’を一致位置及び一致長で符号化する。ここで、一致位置は入力番号１の文字‘ａ’の位置、一致長は２となるので、入力番号３，４の文字列‘ａｂ’の符号として、（１、２）が符号化される。
【０００７】
次に、入力番号５の文字‘ｃ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｃ’がそのまま符号化され、入力番号６の文字‘ｄ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｄ’がそのまま符号化され、入力番号７の文字‘ｅ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｅ’がそのまま符号化され、入力番号８の文字‘ｆ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｆ’がそのまま符号化される。
【０００８】
次に、入力番号９〜１４の文字列‘ａｂｃｄｅｆ’が入力された場合、この文字列は入力番号３〜８の文字列‘ａｂｃｄｅｆ’と一致するので、入力番号９〜１４の文字列‘ａｂｃｄｅｆ’を一致位置及び一致長で符号化する。ここで、一致位置は入力番号３の文字‘ａ’の位置、一致長は６となるので、入力番号９〜１４の文字列‘ａｂｃｄｅｆ’の符号として、（３、６）が符号化される。
【０００９】
次に、入力番号１５の文字‘ｇ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｇ’がそのまま符号化され、入力番号１６の文字‘ｈ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｈ’がそのまま符号化される。
【００１０】
一方、ＬＺ７８方式は、過去に出現した文字列を辞書に登録し、登録入力番号を符号化する方式である。
ＬＺ７７方式の方がＬＺ７８方式に比べ、長い文字列の繰り返しがあるデータで高い圧縮性能を持ち、ＬＺ７８方式の方がＬＺ７７方式に比べ、比較的短い文字列の繰り返しがあるデータで高い圧縮率を得ることができる。なお、ＬＺ７７方式とＬＺ７８方式は、例えば、文献“文書データ圧縮アルゴリズム入門”植松友彦著、ＣＱ出版社に記載されている。
【００１１】
確率統計型符号化方式の代表的な方式として、算術符号化やハフマン符号化方式がある。算術符号化もハフマン符号も、各文字の統計的な出現頻度に従い、出現確率の高い文字に対して短い符号長を割り振ることによって、圧縮効果を得る方式である。
【００１２】
なお、算術符号化は、例えば、文献“Ａｒｉｔｈｍｅｔｉｃ  ｃｏｄｉｎｇ
ｒｅｖｉｓｉｔｅｄ“  Ａｌｉｓｔｅｒ  Ｍｏｆｆａｔ  他著１９９５  ＩＥＥＥ  Ｄａｔａ  Ｃｏｍｐｒｅｓｓｉｏｎ  Ｃｏｎｆｅｒａｎｃｅ，  ｐ２０２−２１１に記載されている。また、ハフマン符号化方式は、例えば、文献“文書データ圧縮アルゴリズム入門”植松友彦著、ＣＱ出版社に記載されている。
【００１３】
また、一層の圧縮効果を得るために、一文字の出現確率（Ｐ（Ｘｔ））ではなく、入力文字と直前の文字との依存関係（以下、文脈と称する）を取り入れた条件付き出現確率（Ｐ［Ｘｔ｜Ｘｔ−１］）に基づいて可変長符号化する方法が提案されている。なお、この方法は、例えば、文献“Ｕｎｂｏｕｎｄｅｄ  Ｌｅｎｇｔｈ  Ｃｏｎｔｅｘｔｓ  ｆｏｒ  ＰＰＭ  ”Ｊｏｈｎ  Ｇ．Ｃｌｅａｒｙ
他著１９９５  ＩＥＥＥ  Ｄａｔａ  Ｃｏｍｐｒｅｓｓｉｏｎ  Ｃｏｎｆｅｒａｎｃｅ，  ｐ５２−６１に記載されている。
【００１４】
確率統計型符号化方式はＬＺ７８方式と同様、比較的短い文字列の繰り返しがあるデータで高い圧縮率を得ることができる。一般的に、ＬＺ７８の方が確率統計型方式より早い処理速度が得られ、確率統計型方式の方がＬＺ７８方式より高い圧縮率が得られる。
【００１５】
【発明が解決しようとする課題】
しかしながら、ＬＺ７８方式及び確率統計型符号化方式では、比較的短い文字列の繰り返しがあるデータで高い圧縮率を得ることができるが、長い文字列の繰り返しがあるデータではあまりよい圧縮率を得ることができなかった。
【００１６】
一方、ＬＺ７７方式では、長い文字列の繰り返しがあるデータでは高い圧縮率を得ることができるが、比較的短い文字列の繰り返しがあるデータではあまりよい圧縮率を得ることができなかった。
【００１７】
このため、従来の圧縮方式では、様々なデータを圧縮対象とした場合に、長い文字列及び比較的短い文字列の双方が繰り返し出るデータに対しては、高い圧縮率を達成することが困難であった。
【００１８】
そこで、本発明の目的は、長い文字列及び短い文字列の双方に対して、効率よく圧縮することが可能なデータ符号化装置を提供することである。
【００１９】
【課題を解決するための手段】
上述した課題を解決するために、本発明によれば、入力された記号列の中から所定の長さの第１の記号列に一致する第２の記号列を検出する記号列検出手段と、前記第１の記号列に続く第３の記号列と前記第２の記号列に続く第４の記号列との一致長を検出する一致長検出手段と、前記記号列検出手段で検出された記号列及び前記一致長検出手段で検出された一致長に基づいて、前記入力された記号列の符号化を行う符号化手段とを備えている。
【００２０】
このことにより、長い記号列が繰り返し出る入力データに対しては、一致する記号列の一部を一致長で符号化することが可能となることから、長い記号列が繰り返し出る入力データを効率よく圧縮することが可能となる。さらに、一致位置を検出するための符号として一致する記号列の残りの一部が用いられるため、一致位置を検出するための符号を新たに挿入することなく一致位置を検出することが可能となることから、短い記号列が繰り返し出る入力データを一致長で符号化する場合においても、一致位置を検出するための新たな符号が多数挿入されて、圧縮効率が悪化することを防止することが可能となる。
【００２１】
また、本発明の一態様によれば、所定の長さの第２の記号列と一致する第１の記号列が出現した場合、前記第１の記号列に続く第３の記号列を、第２の記号列に続く第４の記号列との一致長で符号化し、一致長で符号化されない部分については、直前の記号列を文脈とした時の次に出現する記号の符号を用いて符号化するようにしている。
【００２２】
このことにより、長い記号列が繰り返し出る入力データに対しては、一致する記号列を一致長で符号化することが可能となるとともに、短い記号列が繰り返し出る入力データに対しては、出現確率の高い記号列に短い符号長を割り振ることによって符号化を行うことが可能となり、長い記号列が繰り返し出るデータに対しても、短い記号列が繰り返し出るデータに対しても、高い圧縮率を達成することが可能となる。
【００２３】
また、本発明の一態様によれば、所定の長さの第２の記号列と一致する第１の記号列が出現した場合、前記第１の記号列に続く第３の記号列を、第２の記号列に続く第４の記号列との一致長で符号化し、一致長で符号化されない部分については、過去に出現した記号列を符号語に対応させて登録した辞書から、現在の記号列に対応する符号語を検索することにより、符号化を行うようにしている。
【００２４】
このことにより、長い記号列が繰り返し出る入力データに対しては、一致する記号列を一致長で符号化することが可能となるとともに、短い記号列が繰り返し出る入力データに対しては、ＬＺ７８方式によって符号化を行うことが可能となり、長い記号列が繰り返し出るデータに対しても、短い記号列が繰り返し出るデータに対しても、高い圧縮率を達成することが可能となる。
【００２５】
また、本発明の一態様によれば、所定の長さの第２の記号列と一致する第１の記号列が出現した場合、前記第１の記号列に続く第３の記号列を、第２の記号列に続く第４の記号列との一致長で符号化し、その一致長で符号化されたデータに対し、直前の記号列を文脈とした時の次に出現する記号の符号を用いてさらに符号化を行うようにしている。
【００２６】
このことにより、長い記号列が繰り返し出る入力データに対しては、一致する記号列を一致長で符号化することが可能となることから、長い記号列が繰り返し出るデータを効率よく圧縮することが可能となるとともに、一致長で符号化された圧縮データに短い記号列が繰り返し出現する場合、出現確率の高い記号列に短い符号長を割り振ることにより、一致長で符号化された圧縮データをさらに圧縮することが可能となり、高い圧縮率を達成することが可能となる。
【００２７】
また、本発明の一態様によれば、所定の長さの第２の記号列と一致する第１の記号列が出現した場合、前記第１の記号列に続く第３の記号列を、第２の記号列に続く第４の記号列との一致長で符号化し、その一致長で符号化されたデータに対し、過去に出現した記号列を符号語に対応させて登録した辞書から、現在の記号列に対応する符号語を検索することにより、さらに符号化を行うようにしている。
【００２８】
このことにより、長い記号列が繰り返し出る入力データに対しては、一致する記号列を一致長で符号化することが可能となることから、長い記号列が繰り返し出るデータを効率よく圧縮することが可能となるとともに、一致長で符号化された圧縮データをＬＺ７８方式によってさらに圧縮することが可能となり、長い記号列が繰り返し出るデータに対しても、短い記号列が繰り返し出るデータに対しても、高い圧縮率を達成することが可能となる。
【００２９】
また、本発明の一態様によれば、過去に出現した記号列の出現位置を所定のコードに対応させて記憶しておき、一致長で符号化する記号列の直前の記号列に対応するコードが記憶されているかどうかを調べることにより、一致長で符号化する際の比較対象となる過去の記号列の出現位置を調べるようにしている。
【００３０】
このことにより、一致長の比較対象となる過去の記号列の出現位置を調べる場合、一致長で符号化する記号列の直前の記号列一致する記号列が見つかるまで過去の記号列を１つ１つさかのぼって調べる必要がなくなり、処理を高速化することが可能となる。
【００３１】
また、本発明の一態様によれば、一致長の長さが所定値以下の場合、その記号列については一致長による符号化を行わないようにしている。
このことにより、一致長の長さが短い場合には、一致長を示す符号が余分に付加され、圧縮率が却って低下することを防止することが可能となり、一致長による符号化の圧縮率を改善することが可能となる。
【００３２】
【発明の実施の形態】
以下、本発明の実施例に係わる符号化装置について図面を参照しながら説明する。
【００３３】
図１は、本発明の第１実施例に係わる符号化装置の構成を示すブロック図である。
図１において、記号列検出手段１は、入力された記号列の中から所定の長さｎの第１の記号列に一致する第２の記号列を検出する。一致長検出手段２は、第１の記号列に続く第３の記号列と前記第２の記号列に続く第４の記号列との一致長ｋを検出する。符号化手段３は、記号列検出手段１で検出された記号列及び一致長検出手段２で検出された一致長ｋに基づいて、入力された記号列の符号化を行う。
【００３４】
このことにより、第３の記号列を一致長ｋで符号化する場合、第３の記号列に対応する第４の記号列の出現位置を第１の記号列を用いて見つけることが可能となり、第４の記号列の出現位置を示すための符号を余分に挿入する必要がなくなることから、長い記号列の繰り返し対する高い圧縮率を維持しつつ、短い記号列の繰り返しに対する圧縮率を劣化を防止することが可能となる。
【００３５】
図２は、本発明の第１実施例に係わる符号化方法及び復号化方法を示す図である。
図２において、入力データとして、長さｎの第２の記号列が入力され、この第２の記号列が入力された後に、長さｎの第１の記号列が入力されたものとする。ここで、第１の記号列と第２の記号列とが一致するものとすると、第１の記号列と過去に入力された記号列とを順次比較し、第１の記号列と第２の記号列との一致を検出することにより、第２の記号列の出現位置を特定することができる。
【００３６】
第２の記号列の出現位置が特定されると、第１の記号列に連続する第３の記号列と第２の記号列に連続する第４の記号列との一致長ｋを調べ、第３の記号列をこの一致長ｋで符号化する。
【００３７】
この結果、符号化データとして、入力データの第１の記号列に対応する符号、入力データの第３の記号列に対応する符号、入力データの第２の記号列に対応する符号及び一致長ｋの符号を生成することができる。
【００３８】
この符号化データを復号する場合、第２の記号列に対応する符号、第４の記号列に対応する符号及び第１の記号列に対応する符号を復号する。そして、第１の記号列に一致する記号列を復号結果から検索し、第１の記号列に一致する記号列として第２の記号列が見つかると、第１の記号列の符号に続く一致長ｋの符号を復号して一致長ｋを求める。一致長ｋが求まると、第２の記号列に連続する一致長ｋの長さの第４の記号列を、第３の記号列の復号結果として出力する。
【００３９】
このように、第１の記号列と第２の記号列とが一致する場合、第３の記号列を一致長ｋで符号化することにより、長い記号列が繰り返して出現する場合に、この長い記号列の繰り返し部分を一致長ｋで符号化することが可能となることから、データを効率よく圧縮することが可能となる。また、第１の記号列をその記号列で符号化することにより、一致長ｋで符号化された第３の記号列を復元する際に必要となる第４の記号列を、第１の記号列を用いて見つけることが可能となることから、第４の記号列を見つけるための識別記号を符号化データに挿入する必要がなくなり、短い記号列が繰り返して出現する場合においても、データを効率よく圧縮することが可能となる。
【００４０】
図３は、本発明の第２実施例に係わるデータ圧縮方法を示す図である。この第２実施例では、過去の入力データの中からｎ文字列を検索し、ｎ＋１文字目から一致した部分との一致長ｋで現在の入力データを符号化する。なお、以下の実施例では、文字列が入力された場合を例にとって説明するが、本発明は文字コードの圧縮に限らず、様々なデータに適用でき、情報論理に基づき、データの１ＷＯＲＤ単位を文字（アルファベット）といい、データが任意ＷＯＲＤ繋がったものを文字列と呼ぶ。
【００４１】
図３において、被圧縮データとして、‘ａｂａｂｃｄｅｆａｂｃｄｅｆｇｈ・・・’という文字列が入力されたものとし、被圧縮データの各文字には、出現位置を示す入力番号が付されているものとする。また、ｎ＝３とし、過去の入力データの中から３文字列を検索し、４文字目から一致した部分の一致長ｋで現在の入力データを符号化するものとする。
【００４２】
まず、入力番号１の‘ａ’が入力された場合、それ以前には文字がないので、文字‘ａ’がそのまま符号化される。次に、入力番号２の文字‘ｂ’が入力された場合、それ以前に入力された文字と比較されるが、文字‘ｂ’と一致する文字はないので、文字‘ｂ’がそのまま符号化される。さらに、入力番号３，４の文字列‘ａｂ’が入力された場合、それ以前に入力された文字列と比較される。この結果、入力番号１，２の文字列‘ａｂ’と一致するが、文字列‘ａｂ’の長さは２で、ｎ＝３に満たないので、入力番号３，４の文字列‘ａｂ’はそのまま符号化される。
【００４３】
次に、入力番号５の文字‘ｃ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｃ’がそのまま符号化され、入力番号６の文字‘ｄ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｄ’がそのまま符号化され、入力番号７の文字‘ｅ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｅ’がそのまま符号化され、入力番号８の文字‘ｆ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｆ’がそのまま符号化される。
【００４４】
次に、入力番号９〜１１の文字列‘ａｂｃ’が入力された場合、入力番号３〜５の文字列‘ａｂｃ’と一致し、ｎ＝３となるので、入力番号９〜１１の文字列‘ａｂｃ’をそのまま符号化し、入力番号１２以降の文字列を入力番号６以降の文字列との一致長ｋで符号化する。ここで、入力番号６〜８の文字列‘ｄｅｆ’と入力番号１２〜１４の文字列‘ｄｅｆ’とが一致し、一致長ｋ＝３となるため、入力番号１２〜１４の文字列‘ｄｅｆ’を一致長３で符号化する。
【００４５】
次に、入力番号１５の文字‘ｇ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｇ’がそのまま符号化され、入力番号１６の文字‘ｈ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、文字‘ｈ’がそのまま符号化される。
【００４６】
この結果、‘ａｂａｂｃｄｅｆａｂｃｄｅｆｇｈ・・・’という被圧縮データに対し、‘ａｂａｂｃｄｅｆａｂｃ３ｇｈ・・・’という符号化データが得られる。
【００４７】
このように、入力番号９〜１１の文字列‘ａｂｃ’については、入力番号３〜５の文字列‘ａｂｃ’と一致する場合においても、入力番号９〜１１の文字列‘ａｂｃ’については、一致長で符号化することなく、文字列‘ａｂｃ’の符号化を行い、入力番号９〜１１の文字列‘ａｂｃ’に続く入力番号１２〜１４の文字列‘ｄｅｆ’を一致長で符号化する。
【００４８】
次に、‘ａｂａｂｃｄｅｆａｂｃ３ｇｈ・・・’という符号化データを復号する場合、まず、‘ａｂａｂｃｄｅｆ’という文字列が復号される。そして、‘ａｂａｂｃｄｅｆ’という文字列に続いて、一致長３の符号の直前の‘ａｂｃ’という文字列が復号される。そして、この‘ａｂｃ’という文字列に続く一致長３の符号を復号する時に、この‘ａｂｃ’という文字列と一致する過去の文字列を、それ以前に復号された‘ａｂａｂｃｄｅｆ’という文字列の中から検索する。‘ａｂａｂｃｄｅｆ’という文字列の中から‘ａｂｃ’という過去の文字列が見つかると、次の符号が一致長を現すことが分かり、この‘ａｂｃ’という過去の文字列に続く３つの文字列‘ｄｅｆ’という文字列が求まり、‘ａｂｃ’という文字列に続く一致長３の符号を復号結果として、‘ｄｅｆ’という文字列を出力する。
【００４９】
このように、図３の実施例では、ＬＺ７７方式と違い、一致長のみを符号として用いるため、一致位置の符号が不要となり、短い文字列が繰り返し出現する場合においても、データ圧縮を効率的に行うことが可能となる。
【００５０】
図４は、本発明の第２実施例に係わるデータ圧縮装置の構成を示すブロック図である。
図４（ａ）において、入力バッファ１１には、図４（ｂ）の被圧縮データの既に圧縮済みの部分を格納するＬｅｍｐｅｌバッファ１８と、被圧縮データのこれから圧縮する部分を格納するＺｉｖバッファ１９とが設けられ、出現位置保持手段１３は、Ｌｅｍｐｅｌバッファ１８内にある長さｎの文字列（以下、ｎ文字列という）の出現位置の一部もしくは全てを保持する。
【００５１】
出現有無調査手段１４は、Ｚｉｖバッファ１９の直前のｎ文字列と同じ過去のｎ文字列の出現位置が出現位置保持手段１３に保持されているかどうかを調査し、その調査結果を切り替え手段１２に伝える。切り替え手段１２は、Ｚｉｖバッファ１９の直前のｎ文字列と同じ過去のｎ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファ１９の直前のｎ文字列と同じ過去のｎ文字列の出現位置を出現位置取得手段１５に取得させる。
【００５２】
出現位置取得手段１５がＺｉｖバッファ１９の直前のｎ文字列と同じ過去のｎ文字列の出現位置を取得すると、一致長取得手段１６は、Ｌｅｍｐｅｌバッファ１８内の過去のｎ文字列の出現位置以降の文字列とＺｉｖバッファ１９の先頭以降の文字列との一致長ｋを求める。一致長ｋが求まると、一致長符号化手段１７は、Ｚｉｖバッファ１９の先頭以降の文字列のうち、Ｌｅｍｐｅｌバッファ１８内の過去のｎ文字列の出現位置以降の文字列と一致する部分を一致長ｋで符号化する。
【００５３】
一方、切り替え手段１２は、Ｚｉｖバッファ１９の直前のｎ文字列と同じ過去のｎ文字列の出現位置が保持されていないという通知を受け取った場合、Ｚｉｖバッファ１９の先頭以降の文字列をそのまま符号化して出力バッファに出力する。
【００５４】
なお、出現位置保持手段１３は、Ｌｅｍｐｅｌバッファ１８内にある同じｎ文字列のうち、最も最近出現した出現位置のみを保持するようにしてもよい。
図５は、本発明の第２実施例に係わるデータ復元装置の構成を示すブロック図である。
【００５５】
図５（ａ）において、出力バッファ２７には、図５（ｂ）の圧縮データの既に復元済みの部分を格納するＬｅｍｐｅｌバッファ２８と、圧縮データのこれから復元する部分を格納するＺｉｖバッファ２９とが設けられ、出現位置保持手段２３は、Ｌｅｍｐｅｌバッファ２８内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【００５６】
出現有無調査手段２２は、Ｚｉｖバッファ２９の直前のｎ文字列と同じ過去のｎ文字列の出現位置が出現位置保持手段２３に保持されているかどうかを調査し、その調査結果を切り替え手段２１に伝える。切り替え手段２１は、Ｚｉｖバッファ２９の直前のｎ文字列と同じ過去のｎ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファ２９の直前のｎ文字列と同じ過去のｎ文字列の出現位置を出現位置取得手段２４に取得させる。
【００５７】
出現位置取得手段２４がＺｉｖバッファ２９の直前のｎ文字列と同じ過去のｎ文字列の出現位置を取得すると、一致長復元手段２５は、Ｚｉｖバッファ２９の直前のｎ文字列の次の符号から一致長ｋを復元する。一致長ｋが復元されると、コピー手段２６は、Ｌｅｍｐｅｌバッファ２８内にある過去のｎ文字列に続くその一致長ｋ分の文字列をコピーし、このコピー結果をＺｉｖバッファ２９の直前のｎ文字列の次の符号の復元結果として出力バッファに出力する。
【００５８】
一方、切り替え手段２１は、Ｚｉｖバッファ２９の直前のｎ文字列と同じ過去のｎ文字列の出現位置が保持されていないという通知を受け取った場合、入力される符号化データをそのまま出力バッファに出力する。
【００５９】
図６は、本発明の第３実施例に係わるデータ圧縮方法を示す図である。この第３実施例では、被圧縮データを図３の方法で符号化するとともに、一致長で置き換えない部分については、文脈を利用した確率統計型方式で符号化するようにしたものである。
【００６０】
図６において、被圧縮データとして、‘ａｂａｂｃｄｅｆａｂｃｄｅｆｇｈ・・・’という文字列が入力されたものとし、被圧縮データの各文字には、出現位置を示す入力番号が付されているものとする。また、ｎ＝３とし、過去の入力データの中から３文字列を検索し、４文字目から一致した部分との一致長で現在の入力データを符号化するものとする。
【００６１】
また、文字の符号表３１、文脈ａに続いて出現する文字の符号表３２、文脈ｂに続いて出現する文字の符号表３３、文脈ｃに続いて出現する文字の符号表３４及び文脈ａｂに続いて出現する文字の符号表３５が設けられているものとする。ここで、符号表３１では、文字‘ａ’に対して符号‘１１１’が割り当てられ、文字‘ｂ’に対して符号‘１１０’が割り当てられ、文字‘ｃ’に対して符号‘１０１’が割り当てられ、文字‘ｄ’に対して符号‘１００’が割り当てられ、文字‘ｅ’に対して符号‘０１１’が割り当てられ、文字‘ｆ’に対して符号‘０１０’が割り当てられ、文字‘ｇ’に対して符号‘００１’が割り当てられ、文字‘ｈ’に対して符号‘０００’が割り当てられているものとする。
【００６２】
また、符号表３２では、文脈ａに続いて文字‘ｂ’が出現した時に、符号‘１’が割り当てられ、文脈ａに続いて文字‘ｂ’以外の文字が出現した時に、符号‘０’が割り当てられ、符号表３３では、文脈ｂに続いて文字‘ａ’が出現した時に、符号‘１１’が割り当てられ、文脈ｂに続いて文字‘ｃ’が出現した時に、符号‘１０’が割り当てられ、文脈ｂに続いて文字‘ａ’または‘ｃ’以外の文字が出現した時に、符号‘０１’が割り当てられ、符号表３４では、文脈ｃに続いて文字‘ｄ’が出現した時に、符号‘１’が割り当てられ、文脈ｃに続いて文字‘ｄ’以外の文字が出現した時に、符号‘０’が割り当てられ、符号表３５では、文脈ａｂに続いて文字‘ａ’が出現した時に、符号‘１１’が割り当てられ、文脈ａｂに続いて文字‘ｃ’が出現した時に、符号‘１０’が割り当てられ、文脈ａｂに続いて文字‘ａ’または‘ｃ’以外の文字が出現した時に、符号‘０１’が割り当てられているものとする。
【００６３】
まず、入力番号１の文字‘ａ’が入力された場合、符号表３１を参照することにより、文字‘ａ’に対応する符号として‘１１１’を出力する。次に、入力番号２の文字‘ｂ’が入力された場合、入力番号２の文字‘ｂ’の直前の文字‘ａ’を文脈として符号表３２を参照し、入力番号２の文字‘ｂ’に対応する符号として‘１’を出力する。次に、入力番号３の文字‘ａ’が入力された場合、入力番号３の文字‘ａ’の直前の文字‘ｂ’を文脈として符号表３３を参照し、入力番号３の文字‘ａ’に対応する符号として‘１１’を出力する。次に、入力番号４の文字‘ｂ’が入力された場合、入力番号４の文字‘ｂ’の直前の文字‘ａ’を文脈として符号表３２を参照し、入力番号４の文字‘ｂ’に対応する符号として‘１’を出力する。次に、入力番号５の文字‘ｃ’が入力された場合、入力番号５の文字‘ｃ’の直前の文字列‘ａｂ’を文脈として符号表３５を参照し、入力番号５の文字‘ｃ’に対応する符号として‘１０’を出力する。次に、入力番号６の文字‘ｄ’が入力された場合、入力番号６の文字‘ｄ’の直前の文字‘ｃ’を文脈として符号表３４を参照し、入力番号６の文字‘ｄ’に対応する符号として‘１’を出力する。
【００６４】
次に、入力番号７の文字‘ｅ’が入力された場合、符号表３１を参照することにより、文字‘ｅ’に対応する符号として‘０１１’を出力する。次に、入力番号８の文字‘ｆ’が入力された場合、符号表３１を参照することにより、文字‘ｆ’に対応する符号として‘０１０’を出力する。次に、入力番号９の文字‘ａ’が入力された場合、符号表３１を参照することにより、文字‘ａ’に対応する符号として‘１１１’を出力する。次に、入力番号１０の文字‘ｂ’が入力された場合、入力番号１０の文字‘ｂ’の直前の文字‘ａ’を文脈として符号表３２を参照し、入力番号２の文字‘ｂ’に対応する符号として‘１’を出力する。次に、入力番号１１の文字‘ｃ’が入力された場合、入力番号１１の文字‘ｃ’の直前の文字列‘ａｂ’を文脈として符号表３５を参照し、入力番号１１の文字‘ｃ’に対応する符号として‘１０’を出力する。
【００６５】
ここで、入力番号９〜１１の文字列‘ａｂｃ’は、入力番号３〜５の文字列‘ａｂｃ’と一致し、ｎ＝３となるので、入力番号１２以降の文字列を入力番号６以降の文字列との一致長で符号化する。ここで、入力番号６〜８の文字列‘ｄｅｆ’と入力番号１２〜１４の文字列‘ｄｅｆ’とが一致し、一致長が３となるため、入力番号１２〜１４の文字列‘ｄｅｆ’を一致長３で符号化し、一致長３に対応する符号として‘００１１’を出力する。
【００６６】
次に、入力番号１５の文字‘ｇ’が入力された場合、符号表３１を参照することにより、文字‘ｇ’に対応する符号として‘００１’を出力する。次に、入力番号１６の文字‘ｈ’が入力された場合、符号表３１を参照することにより、文字‘ｈ’に対応する符号として‘０００’を出力する。
【００６７】
なお、上述した実施例では、一致長符号を４ビットで表したが、何ビットで表現してもよく、また、一致長のために符号表を準備し、符号表に従って一致長を符号化してもよい。
【００６８】
図７は、本発明の第３実施例に係わるデータ圧縮装置の構成を示すブロック図である。
図７において、入力バッファ４１には、被圧縮データの既に圧縮済みの部分を格納するＬｅｍｐｅｌバッファと、被圧縮データのこれから圧縮する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段４３は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【００６９】
出現有無調査手段４４は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段４３に保持されているかどうかを調査し、その調査結果を切り替え手段４２に伝える。切り替え手段４２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段４５に取得させる。
【００７０】
出現位置取得手段４５がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長取得手段４６は、Ｌｅｍｐｅｌバッファ内のその出現位置以降の文字列とＺｉｖバッファの先頭以降の文字列との一致長ｋを求める。一致長ｋが求まると、一致長符号化手段４７は、Ｚｉｖバッファの先頭以降の文字列のうち、その出現位置以降の文字列と一致する部分を一致長ｋで符号化する。
【００７１】
一方、切り替え手段４２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、文脈付文字検索手段４８に対し、直前の０〜（ｍ−１）文字列を文脈として、次に続く文字を被圧縮データから受け取り、文脈付文字符号保持手段４９から検索させる。文脈付文字符号保持手段４９には、直前の０〜（ｍ−１）（ｍ≧１）文字列を文脈として、次に出現する各種文字に対応する符号が保持され、文脈付文字検索手段４８が文脈付き文字を検索すると、文脈付文字符号化手段５０は、その文脈付き文字に対応する符号を文脈付文字符号保持手段４９から取得する。
【００７２】
なお、長さがｎ−１の文脈と次に続く文字とを合わせたｎ文字列を、出現位置保持手段４３におけるｎ文字列の出現位置とリンクさせ、文脈付文字検索手段４８が調べた文脈の長さがｎ−１の場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていることを、出現有無調査手段４４に通知するようにしてもよい。
【００７３】
図８は、本発明の第３実施例に係わるデータ復元装置の構成を示すブロック図である。
図８において、出力バッファ７０には、圧縮データの既に復元済みの部分を格納するＬｅｍｐｅｌバッファと、圧縮データのこれから復元する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段６３は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【００７４】
出現有無調査手段６２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段６３に保持されているかどうかを調査し、その調査結果を切り替え手段６１に伝える。切り替え手段６１は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段６４に取得させる。
【００７５】
出現位置取得手段６４がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長復元手段６５は、入力された符号から一致長ｋを復元する。一致長ｋが復元されると、コピー手段６６は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列に続くその一致長ｋ分の文字列をコピーし、このコピー結果をＺｉｖバッファの直前のｎ文字列の次の符号の復元結果として出力バッファに出力する。
【００７６】
一方、切り替え手段６１は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、文脈検索手段６７に対し、直前の０〜（ｍ−１）文字列を文脈とする符号を、文脈付文字符号保持手段６８から検索させる。文脈付文字符号保持手段６８には、直前の０〜（ｍ−１）文字列を文脈として、次に出現する文字の符号が保持され、文脈付文字復元手段６９は、文脈検索手段６７で検索された符号から文字を復元する。
【００７７】
図９は、本発明の第４実施例に係わるデータ圧縮方法を示す図である。この第４実施例は、被圧縮データを図３の方法で符号化するとともに、一致長で置き換えない部分については、ＬＺ７８方式で符号化するようにしたものである。
【００７８】
図９において、被圧縮データとして、‘ａｂａｂｃｄｅｆａｂｃｄｅｆｇｈ・・・’という文字列が入力されたものとし、被圧縮データの各文字には、出現位置を示す入力番号が付されているものとする。また、ｎ＝３とし、過去の入力データの中から３文字列を検索し、４文字目から一致した部分との一致長で現在の入力データを符号化するものとする。
【００７９】
また、文字‘ａ’〜‘ｈ’を登録した辞書８１が設けられ、各文字‘ａ’〜‘ｈ’にはそれぞれ参照番号１〜８が付されているものとする。
まず、入力番号１の文字‘ａ’が入力された場合、辞書８１を参照することにより、入力番号１の文字‘ａ’に対応する符号として、参照番号１を出力する。次に、入力番号２の文字‘ｂ’が入力された場合、辞書８１を参照し、入力番号２の文字‘ｂ’に対応する符号として、参照番号２を出力する。ここで、入力番号１、２の文字列‘ａｂ’が辞書８１に登録され、辞書８１が辞書８２に更新される。そして、文字列‘ａｂ’の参照番号として９が登録される。
【００８０】
次に、入力番号３，４の文字列‘ａｂ’が入力されると、辞書８２を参照し、入力番号３、４の文字列‘ａｂ’に対応する符号として、参照番号９を出力する。
【００８１】
次に、入力番号５の文字‘ｃ’が入力された場合、辞書８２を参照し、入力番号５の文字‘ｃ’に対応する符号として、参照番号３を出力する。ここで、入力番号３〜５の文字列‘ａｂｃ’が辞書８３に登録され、文字列‘ａｂｃ’の参照番号として１０が登録される。
【００８２】
次に、入力番号６の文字‘ｄ’が入力された場合、辞書８２を参照し、入力番号６の文字‘ｄ’に対応する符号として、参照番号４を出力する。次に、入力番号７の文字‘ｅ’が入力された場合、辞書８２を参照し、入力番号７の文字‘ｅ’に対応する符号として、参照番号５を出力する。ここで、文字列‘ｄｅ’が辞書８３に登録され、参照番号として１１が登録される。次に、入力番号８の文字‘ｆ’が入力された場合、辞書８２を参照し、入力番号８の文字‘ｆ’に対応する符号として、参照番号６を出力する。ここで、文字列‘ｅｆ’が辞書８３に登録され、参照番号として１２が登録される。
【００８３】
次に、入力番号９〜１１の文字列‘ａｂｃ’が入力された場合、入力番号９〜１１の文字列‘ａｂｃ’を、辞書８３に登録されている参照番号１０で符号化する。また、入力番号９〜１１の文字列‘ａｂｃ’は過去の入力番号３〜５の文字列‘ａｂｃ’と一致し、ｎ＝３となるので、入力番号１２以降の文字列を入力番号６以降の文字列との一致長で符号化する。この結果、入力番号６〜８の文字列‘ｄｅｆ’と入力番号１２〜１４の文字列‘ｄｅｆ’とが一致し、一致長ｋ＝３となるため、入力番号１２〜１４の文字列‘ｄｅｆ’を一致長３で符号化する。
【００８４】
次に、入力番号１５の文字‘ｇ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、辞書８３を参照し、入力番号１５の文字‘ｇ’に対応する符号として、参照番号７を出力する。次に、入力番号１６の文字‘ｈ’が入力された場合、それ以前に入力された文字のいずれとも一致しないので、辞書８３を参照し、入力番号１６の文字‘ｈ’に対応する符号として、参照番号８を出力する。
【００８５】
このように、初期的な辞書として出現可能な文字全てに符号を割り振ったものを持ち、順次符号化しながら辞書に登録していき、辞書に登録された文字／文字列で最長一致したものに割り振られた符号を出力する（ＬＺ７８符号）。また、過去に出現したｎ文字列と同じ文字列が出現したら（ポイント３）、ｎ＋１文字列以降の一致長を符号化して出力し、次はまた、ＬＺ７８符号に戻る。この一致した頭の部分をその文字列のまま扱って、ＬＺ７８方式または確率統計型方式で符号化することにより、次の符号が一致長符号であるか否かを示す符号を必要とせず、長い文字列の繰り返しには、一致長符号を用いた高い圧縮率を達成することが可能となるとともに、短い文字列の繰り返しには、ＬＺ７８方式や確率統計型方式の高い圧縮率をそのまま生かすことが可能となる。
【００８６】
図１０は、本発明の第４実施例に係わるデータ圧縮装置の構成を示すブロック図である。
図１０において、入力バッファ９１には、被圧縮データの既に圧縮済みの部分を格納するＬｅｍｐｅｌバッファと、被圧縮データのこれから圧縮する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段９３は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【００８７】
出現有無調査手段９４は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段９３に保持されているかどうかを調査し、その調査結果を切り替え手段９２に伝える。切り替え手段９２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段９５に取得させる。
【００８８】
出現位置取得手段９５がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長取得手段９６は、Ｌｅｍｐｅｌバッファ内のその出現位置以降の文字列とＺｉｖバッファの先頭以降の文字列との一致長ｋを求める。一致長ｋが求まると、一致長符号化手段９７は、Ｚｉｖバッファの先頭以降の文字列のうち、その出現位置以降の文字列と一致する部分を一致長ｋで符号化する。
【００８９】
一方、文字／文字列符号保持手段９９には、長さ１〜ｍの文字または文字列に対応する符号が保持され、切り替え手段９２が、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、文字／文字列検索手段９８において、被圧縮データと最長一致する文字または文字列を文字／文字列符号保持手段９９に保持されている文字または文字列から検索させる。そして、文字／文字列符号化手段１００は、文字／文字列検索手段９８で検索された文字または文字列を、文字／文字列符号保持手段９９に保持されている符号に従って符号化する。
【００９０】
なお、文字／文字列符号保持手段９９に保持されている長さｎの文字列を、出現位置保持手段９３におけるｎ文字列の出現位置とリンクさせ、文字／文字列符号化手段１００において符号化した文字または文字列の長さがｎの場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていることを、出現有無調査手段９４に通知するようにしてもよい。
【００９１】
図１１は、本発明の第４実施例に係わるデータ復元装置の構成を示すブロック図である。
図１１において、出力バッファ１１１には、圧縮データの既に復元済みの部分を格納するＬｅｍｐｅｌバッファと、圧縮データのこれから復元する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段１１３は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【００９２】
出現有無調査手段１１２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段１１３に保持されているかどうかを調査し、その調査結果を切り替え手段１１１に伝える。切り替え手段１１１は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段１１４に取得させる。
【００９３】
出現位置取得手段１１４がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長復元手段１１５は、入力符号から一致長ｋを復元する。一致長ｋが復元されると、コピー手段１１６は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列に続くその一致長ｋ分の文字列をコピーし、このコピー結果をＺｉｖバッファの直前のｎ文字列の次の符号の復元結果として出力バッファに出力する。
【００９４】
一方、文字／文字列符号保持手段１１７には、長さ１〜ｍの文字または文字列に対応する符号が保持され、切り替え手段１１１が、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、文字／文字列復元手段１１８に対し、文字／文字列符号保持手段１１７に保持されている符号に従って、文字または文字列を復元させる。
【００９５】
このように、直前ｎ文字列が出現位置保持手段において保持されていない場合、そのまま出力するのではなく、確率統計型方式、またはＬＺ７８方式で符号化することにより、被圧縮データ列中の短い文字列の繰り返しに対しては、ＬＺ７８方式、または確率統計型方式の高い圧縮率を得ることができ、長い文字列に対しても、一致長符号を用いた高い圧縮率を得ることができる。
【００９６】
図１２（ａ）は、本発明の第５実施例に係わる符号化方法を示す図である。
図１２（ａ）において、入力データに対し、第１の符号化１２１を行った後、第２の符号化１２２を行うことにより、入力データの２段階の符号化を行う。
【００９７】
ここで、第１の符号化１２１として、互いに一致する記号列の一部を一致長で符号化し、第２の符号化１２２として、第１の符号化１２１で符号化された記号列を確率統計型符号化方式でさらに符号化することができる。なお、確率統計型符号として、シャノン・ファノ符号、ハフマン符号、算術符号、Ｊｏｎｅｓ符号、適応型ハフマン符号、適応型算術符号、または文脈モデルを用いた上記符号などを用いることができる。
【００９８】
また、第１の符号化１２１として、互いに一致する記号列の一部を一致長で符号化し、第２の符号化１２２として、第１の符号化１２１で符号化された記号列を辞書型符号化方式でさらに符号化することができる。なお、辞書型符号として、ＬＺ７８符号、ＬＺＷ符号、ＬＺＣ符号、ＬＺＹ符号、ＬＺＴ符号、またはＬＺＦＧ符号などを用いることができる。
【００９９】
図１２（ｂ）は、本発明の第５実施例に係わる復号化方法を示す図である。
図１２（ｂ）において、符号化データに対し、第１の復号化１２３を行った後、第２の復号化１２４を行うことにより、符号化データの２段階の復号を行う。図１３は、本発明の第６実施例に係わるデータ圧縮装置の構成を示すブロック図である。この第６実施例は、被圧縮データを図３の方法で符号化し、この図３の方法で符号化されたデータをさらに文脈を利用した確率統計型方式で符号化するようにしたものである。
【０１００】
図１３において、入力バッファ１３１には、被圧縮データの既に圧縮済みの部分を格納するＬｅｍｐｅｌバッファと、被圧縮データのこれから圧縮する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段１３３は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【０１０１】
そして、出現有無調査手段１３４は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段１３３に保持されているかどうかを調査し、その調査結果を切り替え手段１３２に伝える。切り替え手段１３２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段１３５に取得させる。
【０１０２】
出現位置取得手段１３５がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長取得手段１３６は、Ｌｅｍｐｅｌバッファ内のその出現位置以降の文字列とＺｉｖバッファの先頭以降の文字列との一致長ｋを求める。一致長ｋが求まると、一致長符号化手段１３７は、Ｚｉｖバッファの先頭以降の文字列のうち、その出現位置以降の文字列と一致する部分を一致長ｋで符号化して、中間バッファ１３８に出力する。。
【０１０３】
一方、切り替え手段１３２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、Ｚｉｖバッファの先頭以降の文字列をそのまま中間バッファ１３８に出力する。
【０１０４】
中間バッファ１３８は、一致長符号化手段１３７から送られてきた一致長を表す符号を保持するとともに、切り替え手段１３２から送られてきた被圧縮データをそのまま保持する。
【０１０５】
文脈付文字符号保持手段１３９には、直前の０〜（ｍ−１）文字列を文脈として、次に出現する文字の符号が保持され、文脈付文字検索手段１４０は、直前の０〜（ｍ−１）文字列を文脈として、次に続く文字を文脈付文字符号保持手段１３９から検索する。文脈付文字符号化手段１４１は、文脈付文字検索手段１４０で文脈付き文字が検索されると、文脈付文字符号保持手段１３９に保持されている符号に従って、文脈付き文字を符号化する。
【０１０６】
図１４は、本発明の第６実施例に係わるデータ復元装置の構成を示すブロック図である。
図１４において、文脈付文字符号保持手段１５１には、直前の０〜（ｍ−１）文字列を文脈として、次に出現する文字の符号が保持され、文脈検索手段１５２は、直前の０〜（ｍ−１）文字列を文脈とする符号を文脈付文字符号保持手段１５１から検索する。文脈付文字復元手段１５３は、文脈付文字符号保持手段１５１から検索された符号から文字を復元する。
【０１０７】
中間バッファ１５４は、文脈付文字復元手段１５３で復元されたデータを保持する。出力バッファ１６１には、中間バッファ１５４に保持されているデータを入力データとした時の既に復元済みの部分を格納するＬｅｍｐｅｌバッファと、中間バッファ１５４に保持されているデータを入力データとした時のこれから復元する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段１５７は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【０１０８】
出現有無調査手段１５６は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段１５７に保持されているかどうかを調査し、その調査結果を切り替え手段１５５に伝える。切り替え手段１５５は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段１５８に取得させる。
【０１０９】
出現位置取得手段１５８がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長復元手段１５９は、中間バッファに保持された符号から一致長ｋを復元する。一致長ｋが復元されると、コピー手段１６０は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列に続くその一致長ｋ分の文字列をコピーし、このコピー結果をＺｉｖバッファの直前のｎ文字列の次の符号の復元結果として出力バッファに出力する。
【０１１０】
一方、切り替え手段１５５は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、中間バッファの文字列をそのまま出力する。
【０１１１】
図１５は、本発明の第７実施例に係わるデータ圧縮装置の構成を示すブロック図である。この第７実施例は、被圧縮データを図３の方法で符号化し、この図３の方法で符号化されたデータをさらにＬＺ７８方式で符号化するようにしたものである。
【０１１２】
図１５において、入力バッファ１７１には、被圧縮データの既に圧縮済みの部分を格納するＬｅｍｐｅｌバッファと、被圧縮データのこれから圧縮する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段１７３は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【０１１３】
出現有無調査手段１７４は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段１７３に保持されているかどうかを調査し、その調査結果を切り替え手段１７２に伝える。切り替え手段１７２は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段１７５に取得させる。
【０１１４】
出現位置取得手段１７５がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長取得手段１７６は、Ｌｅｍｐｅｌバッファ内のその出現位置以降の文字列とＺｉｖバッファの先頭以降の文字列との一致長ｋを求める。一致長ｋが求まると、一致長符号化手段１７７は、Ｚｉｖバッファの先頭以降の文字列のうち、その出現位置以降の文字列と一致する部分を一致長ｋで符号化して、中間バッファ１７８に出力する。
【０１１５】
一方、切り替え手段１７２が、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、Ｚｉｖバッファの先頭以降の文字列をそのまま中間バッファ１７８に出力する。
【０１１６】
中間バッファ１７８は、一致長符号化手段１７７から出力された一致長を表す符号を保持するとともに、切り替え手段１７２から出力された被圧縮データをそのまま保持する。
【０１１７】
文字／文字列符号保持手段１７９は、長さ１〜ｍの文字または文字列と対応する符号を保持し、文字／文字列検索手段１８０は、中間バッファ１７８に保持されているデータと最長一致する文字または文字列を文字／文字列符号保持手段１７９に保持されている文字または文字列から検索する。
【０１１８】
文字／文字列符号化手段１８１は、文字／文字列検索手段１８０で検索された文字または文字列を、文字／文字列符号保持手段１７９に保持されている符号に従って符号化する。
【０１１９】
図１６は、本発明の第７実施例に係わるデータ復元装置の構成を示すブロック図である。
図１６において、文字／文字列符号保持手段１９１には、長さ１〜ｍの文字または文字列に対応する符号が保持され、文字／文字列復元手段１９２は、文字／文字列符号保持手段１９１に保持されている符号に従って、文字または文字列を復元する。中間バッファ１９３は、文字／文字列復元手段１９２で復元されたデータを保持する。
【０１２０】
出力バッファ２００には、中間バッファ１９３に保持されているデータを入力データとした時の既に復元済みの部分を格納するＬｅｍｐｅｌバッファと、中間バッファ１９３に保持されているデータを入力データとした時のこれから復元する部分を格納するＺｉｖバッファとが設けられ、出現位置保持手段１９６は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列の出現位置の一部もしくは全てを保持する。
【０１２１】
出現有無調査手段１９５は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が出現位置保持手段１９６に保持されているかどうかを調査し、その調査結果を切り替え手段１９４に伝える。切り替え手段１９４は、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されているという通知を受け取った場合、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を出現位置取得手段１９７に取得させる。
【０１２２】
出現位置取得手段１９７がＺｉｖバッファの直前のｎ文字列と同じ文字列の出現位置を取得すると、一致長復元手段１９８は、中間バッファの符号から一致長ｋを復元する。一致長ｋが復元されると、コピー手段１９９は、Ｌｅｍｐｅｌバッファ内にあるｎ文字列に続くその一致長ｋ分の文字列をコピーし、このコピー結果をＺｉｖバッファの直前のｎ文字列の次の符号の復元結果として出力バッファに出力する。
【０１２３】
一方、切り替え手段１９４が、Ｚｉｖバッファの直前のｎ文字列と同じ文字列の出現位置が保持されていないという通知を受け取った場合、中間バッファの文字列をそのまま出力する。
【０１２４】
このように、直前ｎ文字列が出現位置保持手段において保持されている場合、一致長で符号化したデータを一旦中間バッファに保持し、確率統計型方式、またはＬＺ７８方式によってさらに符号化することにより、既存の圧縮アプリケーションをそのまま利用して、長い文字列に効果的に符号を割り当てることができる。
【０１２５】
なお、確率統計型方式、またはＬＺ７８方式に使用する符号は、予め定めた符号を最初から最後まで使用する静的符号化でもいいし、また符号化したデータに従って順次符号を更新する動的符号化でもどちらでもよい。
【０１２６】
以上説明したように、上述した実施例では、次の符号が一致長符号であるか否かを示す符号を不要とすることができる。また、ＬＺ７８方式及び確率統計型符号化方式をベースに、長い文字列が繰り返された場合のみＬＺ７７方式と同様に過去の文字列との一致長を符号として出力することができるので、長い文字列の繰り返しの場合には一致長符号による高い圧縮率を達成することが可能となるとともに、短い文字列の繰り返しにはＬＺ７８方式または確率統計型方式による高い圧縮率を達成することが可能となり、短い文字列及び長い文字列の双方に対して高い圧縮率を得ることが可能となる。
【０１２７】
図１７は、本発明の第８実施例に係わる符号化装置の構成を示すブロック図である。図２の実施例では、直前の長さｎの記号列をキーに、過去に同じ記号列が出現した場合に、続く記号列を一致長符号で符号化している。この場合、長さｎの記号列の過去の出現位置の検索の時間が符号化処理の大半を占める。そこで、この第８実施例では、長さｎの過去の記号列の出現位置をコード化して記憶しておき、この記憶結果から長さｎの過去の記号列の出現位置を求めるようにしている。このことにより、長さｎの記号列の過去の出現位置の検索の時間を短縮することができる。
【０１２８】
図１７において、出現位置記憶手段２１１は、入力された記号列の出現位置をコード化して記憶する。出現位置検索手段２１２は、所定の長さｎの第１の記号列に対応するコードが出現位置記憶手段２１１に記憶されているかどうかを調べ、そのコードが記憶されている場合、そのコードに関連づけられた第２の記号列の出現位置を取得する。ここで、第１の記号列と第２の記号列とは必ずしも一致している必要はなく、第１の記号列から第２の記号列の出現位置を特定できれば、第１の記号列と第２の記号列とは異なっていてもよい。ただし、第１の記号列と第２の記号列とが一致している方が、圧縮率を高くすることができる。これは、第１の記号列と第２の記号列とが一致している場合、第１の記号列に続く第３の記号列と第２の記号列に続く第４の記号列との一致長ｋがより長くなる確率が高くなるからである。
【０１２９】
第２の記号列の出現位置が見つかると、一致長検出手段２１３は、第２の記号列に続く第４の記号列を第１の記号列に続く第３の記号列と比較することにより、第４の記号列と第３の記号列との一致長ｋを検出する。一致長ｋが検出されると、一致長符号化手段２１４は第３の記号列を一致長ｋで符号化する。
【０１３０】
図１８は、本発明の第８実施例に係わる符号化方法を示す図である。
図１８において、入力データが入力されると、長さｎの記号列に対してハッシュコードを割り当て、記号列の出現位置を記憶部２１５に記憶しておく。ここで、過去に出現した長さｎの第２の記号列に対してハッシュコードＢが割り当てられ、そのハッシュコードＢに対応して第２の記号列の出現位置Ａが記憶部２１５に記憶されているものとする。
【０１３１】
次に、長さｎの第１の記号列が入力されると、第１の記号列に対応するハッシュコードを生成し、第１の記号列に対応するハッシュコードが記憶部２１５に記憶されているかどうか調べる。ここで、第１の記号列に対してハッシュコードＢが割り当てられているものとすると、ハッシュコードＢに対応して記憶されている出現位置Ａを記憶部２１５から読み出す。出現位置Ａが求まると、第１の記号列以降の第３の記号列と出現位置Ａ以降の第４の記号列との一致長ｋを求め、第３の記号列を一致長ｋで符号化する。
【０１３２】
ここで、第１の記号列及び第２の記号列は、第３の記号列を一致長ｋで符号化するために用いる第４の記号列の位置を特定するために用いられており、第１の記号列及び第２の記号列を用いて、第３の記号列を一致長ｋで符号化するために用いる第４の記号列の位置を特定できればよく、第１の記号列と第２の記号列とは必ずしも一致している必要はない。
【０１３３】
図１９は、本発明の第９実施例に係わるデータ圧縮方法を示す図である。この第９実施例では、これから符号化する文字列の直前の３文字からハッシュコードを生成し、得られたハッシュコードから比較に用いる過去の文字列の出現位置を求めるようにしている。
【０１３４】
図１９において、被圧縮データとして、‘ａｂｃｄｅｆａｂｑａａｂｃｄａａｂｄｅａｂｃｄａａａｑ・・・’という文字列が入力されたものとし、‘ａｂｃｄｅｆａｂｑａａｂｃｄａａｂｄｅａｂｃ’の部分が既に符号化されているものとする。この場合、符号化済みの文字列のうちウインドウ２２１内の３文字からハッシュコードを生成し、符号化済みの３文字ごとの出現位置を格納部２２６に記憶しておく。例えば、‘ａｂｃ’という文字列２２２に対応して、ハッシュコードＢがハッシュコード生成部２２４で生成され、ハッシュコードＢに対応して出現位置Ａが格納部２２６に格納されているものとする。
【０１３５】
次に、符号化済みの文字列以降の文字列‘ｄａａａｑ・・・’を符号化するため、これから符号化する文字列‘ｄａａａｑ・・・’の直前の‘ａｂｃ’という３文字２２３に注目し、‘ａｂｃ’という３文字２２３のハッシュコードを求める。ここで、‘ａｂｃ’という３文字にはハッシュコードＢが割り当てられているので、‘ａｂｃ’という３文字２２３のハッシュコードとしてハッシュコードＢが生成される。
【０１３６】
次に、ハッシュコードＢが格納部２２６に格納されているかどうかを調べ、ハッシュコードＢが格納部２２６に格納されている場合、そのハッシュコードＢに対応した出現位置を求める。ここでは、ハッシュコードＢは既に格納部２２６に格納されているので、‘ａｂｃ’という３文字２２３に対応する過去の３文字２２２の出現位置として出現位置Ａが求まる。出現位置Ａが求まると、これから符号化する文字列‘ｄａａａｑ・・・’と出現位置Ａ以降の文字列‘ｄａａｂｄｅａｂｃ’とを比較し、これらの文字列の一致長を求める。ここでは、‘ｄａａ’という３文字分が一致しているので、一致長は３となる。一致長３が求まると、これから符号化する文字列‘ｄａａ’の部分を一致長３で符号化する。
【０１３７】
このように、過去の文字列２２２の出現位置をハッシュコードＢと関連づけて記憶しておき、ハッシュ検索により文字列２２３に対応する過去の文字列２２２の出現位置を求めることにより、過去の文字列２２２の出現位置の探索時間を短縮することが可能となる。
【０１３８】
なお、ハッシュ検索では、同じハッシュコードが生成される文字列が複数ある。つまり、ハッシュコードと関連づけられた過去の出現位置の文字列と、ハッシュコードを生成した元の文字列と、異なる場合がある（異なる文字列から同じハッシュコードが生成されることを衝突という）。このため、通常、ハッシュ検索を使用するときは、元のキーと一致するかどうか確認を行う。しかし、この実施例では、ハッシュ検索は次の文字列を一致長符号で符号化するか否かのキーとして使用しており、ハッシュ検索に用いた文字列は一致長の符号の中に含まれないため、元のキーと一致しなくてもよい。このため、ハッシュ検索による処理速度の向上に加え、一致確認の処理を省くことによるさらなる処理速度の改善を行うことができる。
【０１３９】
ただし、元のキーと完全に一致していた方が圧縮率は高い。このため、直前ｍ文字の一致確認を取るようにしてもよい。例えば、ハッシュコードの生成に使用する直前文字列の長さｎを３文字、ハッシュでの衝突のための一致確認に使用する直前文字列の長さｍを２文字とすることができる。
【０１４０】
また、異なる文字列には異なるハッシュコードを割り当てるようにして、衝突が起こることを防止するようにしてもよい。
図２０は、本発明の第１０実施例に係わるデータ圧縮方法を示すフローチャートである。この第１０実施例では、一致長で符号化する文字列に対応する過去の文字列の出現位置をハッシュ検索で求め、ハッシュ検索に失敗した場合は、その文字列を統計型符号またはＬＺ７８符号で符号化するものである。
【０１４１】
図２０において、過去のｎ文字列の出現位置をハッシュコード化して記憶する配列アドレスを初期化する（ステップＳ１）。次に、これから符号化しようとする文字列の直前のｎ文字列のハッシュコードを生成し（ステップＳ２）、そのハッシュコードに対応した出現位置が配列アドレスに格納されているかどうかを調べる（ステップＳ３）。ここで、そのハッシュコードに対応した出現位置が配列アドレスに格納されている場合、これから符号化しようとする文字列の直前のｎ文字列に対応する過去のｎ文字列の出現位置を、配列アドレスから得る。そして、それらのｎ文字列以降の文字列の一致長を調べ、これから符号化しようとする文字列をその一致長で符号化する（ステップＳ４）。
【０１４２】
一方、そのハッシュコードに対応した出現位置が配列アドレスに格納されていない場合、これから符号化しようとする文字または文字列を統計型符号またはＬＺ７８符号で符号化する（ステップＳ５）。
【０１４３】
次に、符号化した文字列の直前のｎ文字列のハッシュコードに対応させて、そのｎ文字列の出現位置を配列アドレスに格納する（ステップＳ６）。次に、入力データの最後まで符号化処理が終了したかどうかを判断し（ステップＳ７）、符号化処理が終了していない場合、ステップＳ２に戻って、以上の処理を繰り返す。
【０１４４】
このように、一致長で符号化する文字列に対応する過去の文字列の出現位置をハッシュ検索で求めることにより、文字列検索時間を短縮することができ、実用レベルの処理速度を実現することができる。
【０１４５】
図２１は、本発明の第１１実施例に係わるデータ圧縮方法を示すフローチャートである。図２０の実施例では、これから符号化しようとする文字列の直前のｎ文字列と、そのｎ文字列に対応する過去のｎ文字列との一致を確認することなく、一致長による符号化を行う場合について示したが、図２１の実施例では、直前ｐ文字の一致確認を取る場合を示す。なお、図２１の実施例のステップＳ１〜Ｓ７の処理は、図２０の実施例と同様の処理を行うので説明は省略し、図２０の実施例と異なる部分についてのみ説明する。
【０１４６】
図２１において、これから符号化しようとする文字列の直前のｎ文字列のハッシュコードが配列アドレスに格納されている場合（ステップＳ３）、これから符号化しようとする文字列の直前のｐ文字列と、ハッシュ検索により検索された出現位置の過去のｐ文字列とが一致するかどうかを調べる（ステップＳ１１）。そして、これから符号化しようとする文字列の直前のｍ文字列と、ハッシュ検索により検索された出現位置の過去のｐ文字列とが一致する場合、これから符号化しようとする文字列を一致長で符号化する（ステップＳ４）。一方、これから符号化しようとする文字列の直前のｐ文字列と、ハッシュ検索により検索された出現位置の過去のｐ文字列とが一致しない場合、これから符号化しようとする文字または文字列を統計型符号またはＬＺ７８符号で符号化する（ステップＳ５）。
【０１４７】
このように、一致長で符号化する文字列を探索するための文字列と過去の文字列との一致を確認することにより、一致長のより長い過去の文字列を探索することが可能となり、圧縮率を向上させることが可能となる。
【０１４８】
なお、ｎ＝３、ｐ＝２に設定することが望ましく、このような値に設定することにより、探索時間が長くなることを抑制しながら、圧縮率を向上させることが可能となる。
【０１４９】
図２２は、本発明の第１２実施例に係わるデータ圧縮方法を示すフローチャートである。上述した実施例では、これから符号化しようとする文字列の直前のｎ文字列を用いることにより過去の文字列を探索し、過去の文字列と一致する部分を一致長で符号化する場合について説明した。しかし、繰り返される文字列の長さが丁度ｎのものが多い場合、一致長０を示す符号が多く付加され、圧縮率が低下する。そこで、図２２の実施例では、過去の文字列の検索に用いるｎ文字列に続く文字列が、過去の文字列と全く一致しなかった場合（この場合、一致長＝０）、次にその文字列が出現しても、その文字列を一致長で符号化しないようにする。このことにより、一致長０を示す符号が付加されることを防止することが可能となり、圧縮率が低下することを防止することが可能となる。
【０１５０】
図２２において、過去のｎ文字列の出現位置をハッシュコード化して記憶する配列アドレスを初期化し（ステップＳ２１）、これから符号化しようとする文字列の直前のｎ文字列のハッシュコードを生成する（ステップＳ２２）。次に、そのハッシュコードで特定される配列アドレスの内容が‘ＮＯＴ＿ＬＥＮ’かどうかを調べ、配列アドレスの内容が‘ＮＯＴ＿ＬＥＮ’の場合、これから符号化しようとする文字または文字列を統計型符号またはＬＺ７８符号で符号化する（ステップＳ２４）。一方、配列アドレスの内容が‘ＮＯＴ＿ＬＥＮ’でない場合、そのハッシュコードに対応した出現位置が配列アドレスに格納されているかどうかを調べる（ステップＳ２５）。ここで、そのハッシュコードに対応した出現位置が配列アドレスに格納されている場合、これから符号化しようとする文字列の直前のｎ文字列に対応する過去のｎ文字列の出現位置を、配列アドレスから得る。そして、それらのｎ文字列以降の文字列の一致長を調べ、これから符号化しようとする文字列をその一致長で符号化する（ステップＳ２６）。
【０１５１】
一方、そのハッシュコードに対応した出現位置が配列アドレスに格納されていない場合、これから符号化しようとする文字または文字列を統計型符号またはＬＺ７８符号で符号化する（ステップＳ２７）。
【０１５２】
次に、ステップＳ２６で算出された一致長が０かどうかを調べ（ステップＳ２８）、一致長が０の場合、そのハッシュコードで特定される配列アドレスに‘ＮＯＴ＿ＬＥＮ’を格納する（ステップＳ２９）。一方、一致長が０でない場合、そのハッシュコードで特定される配列アドレスにｎ文字列の出現位置を格納する（ステップＳ３０）。次に、入力データの最後まで符号化処理が終了したかどうかを判断し（ステップＳ３１）、符号化処理が終了していない場合、ステップＳ２２に戻って、以上の処理を繰り返す。
【０１５３】
なお、上述した実施例では、一致長が０の場合にのみ一致長による符号化を行わないようにしたが、一致長は０以外の値でもよい。
また、現在の文字列と過去の文字列との一致長が所定の値以上かどうかを判別し、現在の文字列と過去の文字列との一致長が長い場合には、ＬＺ７７符号で符号化を行い、現在の文字列と過去の文字列との一致長が短い場合には、ＬＺ７８符号または確率統計型符号で符号化を行うようにしてもよい。
【０１５４】
図２３は、本発明の第１３実施例に係わるデータ圧縮方法を示すフローチャートである。図２２の実施例では、ｎ文字列以降の一致長が０の場合、次にそのｎ文字列が出現しても、それ以降の文字列を一致長で符号化しない場合について説明した。しかし、同じ文字の繰返し（例えば、‘００００’や‘ＦＦＦＦ’など）が長く続く可能性が高いデータには、一致長による符号化に制限を加えない方がよい。そこで、図２３の実施例では、直前文字列が同じ文字の繰り返しからなっている場合には、一致長符号への切替えを制限しない場合を示す。このことにより、同じ文字の繰り返しが長く続く可能性の高いデータに対して圧縮率を向上させることが可能となる。なお、図２３の実施例のステップＳ２１〜Ｓ３１の処理は、図２２の実施例と同様の処理を行うので説明は省略し、図２２の実施例と異なる部分についてのみ説明する。
【０１５５】
図２３において、ステップＳ２８で一致長が０と判断された場合、これから符号化しようとする文字列の直前文字と直々前文字とが一致するかどうかを調べる（ステップＳ４１）。そして、直前文字と直々前文字とが不一致の場合、その文字列のハッシュコードで特定される配列アドレスに‘ＮＯＴ＿ＬＥＮ’を格納する（ステップＳ２９）。一方、直前文字と直々前文字とが一致する場合、その文字列のハッシュコードで特定される配列アドレスにｎ文字列の出現位置を格納する（ステップＳ３０）。
【０１５６】
なお、図２３の実施例では、これから符号化しようとする文字列の直前の長さ２の文字列の文字が同じ時に一致長符号への切替えを制限しない場合について説明したが、直前の文字列の長さは２以上でもよい。
【０１５７】
図２４は、本発明の第１４実施例に係わるデータ圧縮装置の構成を示すブロック図である。通常、確率統計型符号化方式を用いてデータ圧縮を行う場合、長さ５の文字列を最大文脈（５次文脈と呼ぶ）とすると最も圧縮率がよい（例えば、上記文献“Ｕｎｂｏｕｎｄｅｄ  Ｌｅｎｇｔｈ  Ｃｏｎｔｅｘｔｓ  ｆｏｒ  ＰＰＭ”を参照）。しかし、５次文脈を取ると処理速度が遅い。そこで、図２４の実施例では、一致長符号と固定１次文脈の確率統計型符号化方式を組合せて符号化を行う。一致長符号と固定１次文脈の確率統計型符号化方式とを組合せることにより、確率統計型符号化方式の圧縮対象を２文字列〜３文字列と短い文字列に絞って処理を簡略しても、高い圧縮率を得ることが可能となるとともに、５次文脈のみを用いて符号化を行う場合に比べて、処理速度を改善することが可能となる。
【０１５８】
図２４において、統計型符号化部２３１と一致長符号化部２３７とが設けられている。統計型符号化部２３１は固定１次文脈を用いて符号化を行うもので、直前文字に対応した２５６個の符号テーブル２３３〜２３５が符号テーブル保持部２３２に保持されている。
【０１５９】
元データは、統計型符号化部２３１及び一致長符号化部２３７に入力される。ここで、統計型符号化部２３１は、元データが入力されると、入力された文字列の直前文字に対応した符号テーブル２３３〜２３５を選択する。そして、符号化部２３６は、選択された符号テーブル２３３〜２３５に登録されている符号でその文字列を符号化して出力する。また、一致長符号化部２３７は、元データが入力されると、入力された文字列を一致長で符号化して出力する。
【０１６０】
なお、図２４の例では、符号テーブル２３３〜２３５が１バイト２５６種類全ての文字に対応して設けられているが、直前文字から抜き出した特徴に対応させて符号テーブルを設けることにより、符号テーブルの数を減らしてもよい。例えば、文字データの最上位ビットを除き、文字データの残り７ビットに対応させて符号テーブルを設けるようにしてもよい。
【０１６１】
図２５は、本発明の一実施例に係わる符号化装置及び復号化装置（またはデータ圧縮装置及びデータ復元装置）のシステム構成を示すブロック図である。
図２５おいて、２４１は全体的な処理を行う中央演算処理ユニット（ＣＰＵ）、２４２はリードオンリメモリ（ＲＯＭ）、２４３はランダムアクセスメモリ（ＲＡＭ）、２４４は通信インターフェイス、２４５は通信ネットワーク、２４６は入出力インターフェイス、２４７は文書データなどを表示するディスプレイ、２４８は文書データなどを印刷するプリンタ、２４９はスキャナ２５０により読み取られた文書データなどを一時的に格納するメモリ、２５０は入力画像などを読み取るスキャナ、２５１はキーボード、２５２はマウスなどのポインティングデバイス、２５３は記憶媒体を駆動するドライバ、２５４はハードディスク、２５５はＩＣメモリカード、２５６は磁気テープ、２５７はフロッピーディスク、２５８はＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどの光ディスク、２５９はバスである。
【０１６２】
データ圧縮を行うプログラム、データ復元を行うプログラム、被圧縮データ及び圧縮データなどは、ハードディスク２５４、ＩＣメモリカード２５５、磁気テープ２５６、フロッピーディスク２５７、光ディスク２５８などの記憶媒体に格納される。そして、データ圧縮を行うプログラム及び被圧縮データを、これらの記憶媒体からＲＡＭ２４３に読み出すことにより、データ圧縮を行うことができる。また、データ復元を行うプログラム及び圧縮データを、これらの記憶媒体からＲＡＭ２４３に読み出すことにより、データ復元を行うことができる。また、データ圧縮を行うプログラム及びデータ復元を行うプログラムなどを、ＲＯＭ２４２に格納しておくこともできる。
【０１６３】
さらに、データ圧縮を行うプログラム、データ復元を行うプログラム、被圧縮データ及び圧縮データなどを、通信インターフェイス２４４を介して通信ネットワーク２４５から取り出すこともできる。通信インターフェイス２４４に接続される通信ネットワーク２４５として、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、アナログ電話網、デジタル電話網（ＩＳＤＮ：Ｉｎｔｅｇｒａｌ  Ｓｅｒｖｉｃｅ  Ｄｉｇｉｔａｌ  Ｎｅｔｗｏｒｋ）、ＰＨＳ（パーソナルハンディシステム）や衛星通信などの無線通信網を用いることができる。
【０１６４】
ＣＰＵ２４１は、データ圧縮を行うプログラムが起動されると、ハードディスク２５４などの記憶媒体、または通信ネットワーク２４５などから被圧縮データを取得する。そして、取得した被圧縮データを図３、図６、図９、図１９〜図２３などに示した方法で圧縮し、この圧縮されたデータをハードディスク２５４などの記憶媒体に格納したり、通信ネットワーク２４５を介して送信したりする。
【０１６５】
ここで、データ圧縮を行うことにより、ハードディスク２５４などの記憶媒体にデータを格納する際の記憶容量を低減したり、通信ネットワーク２４５を介してデータを送信する際の送信時間を低減したりすることが可能となる。
【０１６６】
また、過去に出現した記号列をハッシュコード化してＲＡＭ２４３に記憶しておき、一致長による符号化を行う際に参照する過去の記号列の探索をハッシュ検索により行うことにより、圧縮時間を短縮することが可能となる。
【０１６７】
また、ＣＰＵ２４１は、データ復元を行うプログラムが起動されると、ハードディスク２５４などの記憶媒体、または通信ネットワーク２４５などから圧縮データを取得する。そして、取得した圧縮データを復元し、この復元したデータをハードディスク２５４などの記憶媒体に格納したり、通信ネットワーク２４５を介して送信したり、ディスプレイ２４７に表示させたり、プリンタ２４８で印刷させたりする。
【０１６８】
【発明の効果】
以上説明したように、本発明によれば、一致する記号列の一部を一致長で符号化することにより、長い記号列が繰り返し出る入力データを効率よく圧縮することが可能となるとともに、一致する記号列の残りの部分を用いて一致位置を検出することが可能となり、一致位置を検出するための符号を新たに挿入する必要がなくなることから、短い記号列が繰り返し出る入力データを一致長で符号化する場合においても、一致位置を検出するための符号が多数挿入されて、圧縮効率が悪化することを防止することが可能となる。
【０１６９】
また、本発明の一態様によれば、一致する記号列の一部を一致長で符号化し、一致長で符号化されない部分については、直前の記号列を文脈とした時の次に出現する記号の符号を用いて符号化することにより、長い記号列が繰り返し出る入力データに対しては、一致する部分を一致長で符号化することが可能となるとともに、短い記号列が繰り返し出る入力データに対しては、出現確率の高い記号に短い符号長を割り振ることによって符号化を行うことが可能となり、長い記号列が繰り返し出るデータに対しても、短い記号列が繰り返し出るデータに対しても、高い圧縮率を達成することが可能となる。
【０１７０】
また、本発明の一態様によれば、一致する記号列の一部を一致長で符号化し、一致長で符号化されない部分については、過去に出現した記号列を符号語に対応させて登録した辞書から、現在の記号列に対応する符号語を検索することにより、符号化を行うことにより、長い記号列が繰り返し出る入力データに対しては、一致する部分を一致長で符号化することが可能となるとともに、短い記号列が繰り返し出る入力データに対しては、ＬＺ７８方式によって符号化を行うことが可能となり、長い記号列が繰り返し出るデータに対しても、短い記号列が繰り返し出るデータに対しても、高い圧縮率を達成することが可能となる。
【０１７１】
また、本発明の一態様によれば、一致する記号列の一部を一致長で符号化し、その符号化されたデータに対し、直前の記号列を文脈とした時の次に出現する記号の符号を用いてさらに符号化を行うことにより、長い記号列が繰り返し出る入力データに対しては、一致する部分を一致長で符号化することが可能となることから、長い記号列が繰り返し出るデータを効率よく圧縮することが可能となるとともに、その圧縮データに短い記号列が繰り返し出現する場合、出現確率の高い記号に短い符号長を割り振ることによってその圧縮データをさらに圧縮することが可能となり、高い圧縮率を達成することが可能となる。
【０１７２】
また、本発明の一態様によれば、一致する記号列の一部を一致長で符号化し、その符号化されたデータに対し、過去に出現した記号列を符号語に対応させて登録した辞書から、現在の記号列に対応する符号語を検索することにより、さらに符号化を行うことにより、長い記号列が繰り返し出る入力データに対しては、一致する部分を一致長で符号化することが可能となることから、長い記号列が繰り返し出るデータを効率よく圧縮することが可能となるとともに、その圧縮データをＬＺ７８方式によってさらに圧縮することが可能となり、長い記号列が繰り返し出るデータに対しても、短い記号列が繰り返し出るデータに対しても、高い圧縮率を達成することが可能となる。
【０１７３】
また、本発明の一態様によれば、一致長の比較対象となる過去の記号列の出現位置を調べるための検索に使用する記号列の出現位置を記憶しておくことにより、一致する記号列が見つかるまで過去の記号列を１つ１つさかのぼることなく、一致長の比較対象となる過去の記号列を見つけることが可能となり、一致長による符号化処理及び復号化処理を高速化することが可能となる。
【０１７４】
また、本発明の一態様によれば、一致長の長さが所定値以下の記号列の一致長による符号化を行わないようにすることにより、一致長の長さが短い場合には、一致長による符号化を行うことによって、却って圧縮率が低下することを防止することが可能となり、一致長による符号化の圧縮率を改善することが可能となる。
【図面の簡単な説明】
【図１】本発明の第１実施例に係わる符号化装置の構成を示すブロック図である。
【図２】本発明の第１実施例に係わる符号化方法及び復号化方法を示す図である。
【図３】本発明の第２実施例に係わるデータ圧縮方法を示す図である。
【図４】本発明の第２実施例に係わるデータ圧縮装置の構成を示すブロック図である。
【図５】本発明の第２実施例に係わるデータ復元装置の構成を示すブロック図である。
【図６】本発明の第３実施例に係わるデータ圧縮方法を示す図である。
【図７】本発明の第３実施例に係わるデータ圧縮装置の構成を示すブロック図である。
【図８】本発明の第３実施例に係わるデータ復元装置の構成を示すブロック図である。
【図９】本発明の第４実施例に係わるデータ圧縮方法を示す図である。
【図１０】本発明の第４実施例に係わるデータ圧縮装置の構成を示すブロック図である。
【図１１】本発明の第４実施例に係わるデータ復元装置の構成を示すブロック図である。
【図１２】本発明の第５実施例に係わる符号化方法及び復号化方法を示す図である。
【図１３】本発明の第６実施例に係わるデータ圧縮装置の構成を示すブロック図である。
【図１４】本発明の第６実施例に係わるデータ復元装置の構成を示すブロック図である。
【図１５】本発明の第７実施例に係わるデータ圧縮装置の構成を示すブロック図である。
【図１６】本発明の第７実施例に係わるデータ復元装置の構成を示すブロック図である。
【図１７】本発明の第８実施例に係わる符号化装置の構成を示すブロック図である。
【図１８】本発明の第８実施例に係わる符号化方法を示す図である。
【図１９】本発明の第９実施例に係わるデータ圧縮方法を示す図である。
【図２０】本発明の第１０実施例に係わるデータ圧縮方法を示すフローチャートである。
【図２１】本発明の第１１実施例に係わるデータ圧縮方法を示すフローチャートである。
【図２２】本発明の第１２実施例に係わるデータ圧縮方法を示すフローチャートである。
【図２３】本発明の第１３実施例に係わるデータ圧縮方法を示すフローチャートである。
【図２４】本発明の第１４実施例に係わるデータ圧縮装置の構成を示すブロック図である。
【図２５】本発明の一実施例に係わる符号化装置及び復号化装置のシステム構成を示すブロック図である。
【図２６】従来のＬＺ７７符号を用いた符号化方法を示す図である。
【符号の説明】
１  記号列検出手段
２  一致長検出手段
３  符号化手段
１１、４１、９１、１３１、１７１  入力バッファ
１２、２１、４２、６１、９２、１１１、１３２、１５５、１７２  切り替え手段
１３、２３、４３、６３、９３、１１３、１３３、１５７、１７３、１９６
出現位置保持手段
１４、２２、４４、６２、９４、１１２、１３４、１５６、１７４、１９５
出現有無調査手段
１５、２４、４５、６４、９５、１１４、１３５、１５８、１７５、１９７
出現位置取得手段
１６、４６、９６、１３６、１７６  一致長取得手段
１７、４７、９７、１３７、１７７  一致長符号化手段
１８、２８  Ｌｅｍｐｅｌバッファ
１９、２９  Ｚｉｖバッファ
２５、６５、１１５、１５９、１９８  一致長復元手段
２６、６６、１１６、１６０、１９９  コピー手段
２７、７０、１１９、１６１、２００  出力バッファ
４８、１４０  文脈付文字符号検索手段
４９、６８、１３９、１５１  文脈付文字符号保持手段
５０、１４１  文脈付文字符号化手段
６７、１５２  文脈検索手段
６９、１５３  文脈付文字復元化手段
９８、１８０  文字／文字列検索手段
９９、１１７、１７９、１９１  文字／文字列符号保持手段
１００、１８１  文字／文字列符号化手段
１１８、１９２  文字／文字列復元化手段
１２１  第１の符号化
１２２  第２の符号化
１２３  第１の復号化
１２４  第２の復号化
１３８、１５４、１７８、１９３  中間バッファ
２１１  出現位置記憶手段
２１２  出現位置検索手段
２１３  一致長検出手段
２１４  一致長符号化手段
２４１  ＣＰＵ
２４２  ＲＯＭ
２４３  ＲＡＭ
２４４  通信インターフェイス
２４５  通信ネットワーク
２４６  入出力インターフェイス
２４７  ディスプレイ
２４８  プリンタ
２４９  メモリ
２５０  スキャナ
２５１  キーボード
２５２  ポインティングデバイス
２５３  ドライバ
２５４  ハードディスク
２５５  ＩＣメモリカード
２５６  磁気テープ
２５７  フロッピーディスク
２５８  光ディスク
２５９  バス
【図１】
0003541930.tif 000002
【図２】
0003541930.tif 000003
【図３】
0003541930.tif 000004
【図４】
0003541930.tif 000005
【図５】
0003541930.tif 000006
【図６】
0003541930.tif 000007
【図７】
0003541930.tif 000008
【図８】
0003541930.tif 000009
【図９】
0003541930.tif 000010
【図１０】
0003541930.tif 000011
【図１１】
0003541930.tif 000012
【図１２】
0003541930.tif 000013
【図１３】
0003541930.tif 000014
【図１４】
0003541930.tif 000015
【図１５】
0003541930.tif 000016
【図１６】
0003541930.tif 000017
【図１７】
0003541930.tif 000018
【図１８】
0003541930.tif 000019
【図１９】
0003541930.tif 000020
【図２０】
0003541930.tif 000021
【図２１】
0003541930.tif 000022
【図２２】
0003541930.tif 000023
【図２３】
0003541930.tif 000024
【図２４】
0003541930.tif 000025
【図２５】
0003541930.tif 000026
【図２６】
0003541930.tif 000027