(57)【要約】【課題】圧縮データを、元のデータに、高速に伸張する。【解決手段】出現頻度算出部１２２は、圧縮の対象データを、２バイト単位で、符号化の対象であるシンボルとして、シンボル値の出現頻度を算出し、符号化部１２６は、出現頻度が上位のシンボル値を１バイト符号に、出現頻度が次に上位のシンボル値を２バイト符号に、残りのシンボル値を３バイト符号に、シンボル値0x0000の２個の連続を１バイトの特定値0xFFに、それぞれ符号化する符号化処理を行う。本発明は、例えば、コンピュータが実行可能なプログラムを圧縮し、伸張する場合に適用できる。【選択図】図５
2008227949.tif 000002
【特許請求の範囲】
【請求項１】
データを圧縮して圧縮データを出力するデータ処理装置において、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段と、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
符号化処理を行う符号化手段と
を備えるデータ処理装置。
【請求項２】
前記１バイト符号の256個の符号値のうちの、前記特定値と、前記３バイト符号の符号値のプリフィクスとなる１バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である１バイト符号数を、X個とする場合において、
前記符号化手段は、
２バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値を、前記１バイト符号に符号化し、
前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値を、前記２バイト符号に符号化し、
残りの65536-X-(254-X)×256個の各シンボル値を、前記３バイト符号に符号化し、
前記１バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記３バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXを、前記１バイト符号数として算出する１バイト符号数算出手段をさらに備える
請求項１に記載のデータ処理装置。
【請求項３】
出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記１バイト符号のX個の符号値とを対応付ける１バイト符号対応表を作成する１バイト符号対応表作成手段と、
出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記２バイト符号の(254-X)×256個の符号値とを対応付ける２バイト符号対応表を作成する２バイト符号対応表作成手段と
をさらに備え、
前記符号化手段は、
前記１バイト符号対応表において前記１バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化し、
前記２バイト符号対応表において前記２バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化する
請求項２に記載のデータ処理装置。
【請求項４】
前記１バイト符号数Xと、前記１バイト符号対応表を作成するのに必要な１バイト符号情報と、前記２バイト符号対応表を作成するのに必要な２バイト符号情報とを含むヘッダ情報を生成するヘッダ生成手段と、
前記ヘッダ情報と、前記対象データをシンボル単位で符号化した符号値の系列とからなる前記圧縮データを生成する圧縮データ生成手段と
をさらに備える請求項３に記載のデータ処理装置。
【請求項５】
前記１バイト符号情報は、前記１バイト符号対応表において、前記１バイト符号の符号値に対応付けられているX個のシンボル値であり、
前記２バイト符号情報は、前記65536個の各シンボル値が、前記２バイト符号対応表において、前記２バイト符号の符号値に対応付けられているかどうかを表す情報である
請求項４に記載のデータ処理装置。
【請求項６】
前記対象データは、コンピュータが実行可能なプログラムである
請求項１に記載のデータ処理装置。
【請求項７】
データを圧縮して圧縮データを出力するデータ処理方法において、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
符号化処理を行う
ステップを含むデータ処理方法。
【請求項８】
データを圧縮して圧縮データを出力するデータ処理装置として、コンピュータを機能させるためのプログラムにおいて、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段と、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
符号化処理を行う符号化手段と
して、コンピュータを機能させるためのプログラム。
【請求項９】
データを圧縮して得られる圧縮データを伸張するデータ処理装置において、
前記圧縮データは、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
ことにより得られる、符号値の系列を含み、
前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、
前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する
復号処理を行う復号手段を備える
データ処理装置。
【請求項１０】
前記１バイト符号の256個の符号値のうちの、前記特定値と、前記３バイト符号の符号値のプリフィクスとなる１バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である１バイト符号数を、X個として、
２バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値が、前記１バイト符号に符号化され、
前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値が、前記２バイト符号に符号化され、
残りの65536-X-(254-X)×256個の各シンボル値が、前記３バイト符号に符号化されており、
前記１バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記３バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXが、前記１バイト符号数とされている場合において、
前記圧縮データは、
１バイト符号数Xと、
出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記１バイト符号のX個の符号値とを対応付ける１バイト符号対応表を作成するのに必要な１バイト符号情報と、
出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記２バイト符号の(254-X)×256個の符号値とを対応付ける２バイト符号対応表を作成するのに必要な２バイト符号情報と
をさらに含み、
前記１バイト符号対応表を作成する１バイト符号対応表作成手段と、
前記２バイト符号対応表を作成する２バイト符号対応表作成手段と
をさらに備え、
前記復号手段は、
前記１バイト符号対応表において前記シンボル値に対応付けられている前記１バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号し、
前記２バイト符号対応表において前記シンボル値に対応付けられている前記２バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号する
請求項９に記載のデータ処理装置。
【請求項１１】
前記１バイト符号情報は、前記１バイト符号対応表において、前記１バイト符号の符号値に対応付けられているX個のシンボル値であり、
前記２バイト符号情報は、前記65536個の各シンボル値が、前記２バイト符号対応表において、前記２バイト符号の符号値に対応付けられているかどうかを表す情報である
請求項１０に記載のデータ処理装置。
【請求項１２】
前記対象データは、コンピュータが実行可能なプログラムである
請求項９に記載のデータ処理装置。
【請求項１３】
電源がオンにされたとき、
前記復号手段は、前記復号処理を行い、
前記復号処理によって得られるプログラムを実行する
請求項１２に記載のデータ処理装置。
【請求項１４】
データを圧縮して得られる圧縮データを伸張するデータ処理方法において、
前記圧縮データは、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
ことにより得られる、符号値の系列を含み、
前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、
前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する
復号処理を行う
ステップを含むデータ処理方法。
【請求項１５】
データを圧縮して得られる圧縮データを伸張するデータ処理装置として、コンピュータを機能させるためのプログラムにおいて、
前記圧縮データは、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
ことにより得られる、符号値の系列を含み、
前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、
前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する
復号処理を行う復号手段
として、コンピュータを機能させるためのプログラム。
【請求項１６】
データを圧縮して得られる圧縮データのデータ構造において、
前記圧縮データは、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値を符号化した符号を含むデータであり、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化した符号値と、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化した符号値と、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化した符号値と、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化した、前記特定値である符号値と
を含むデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置、データ処理方法、プログラム、及びデータ構造に関し、特に、例えば、データを圧縮した圧縮データを、元のデータに、高速に伸張することができるようにするデータ処理装置、データ処理方法、プログラム、及びデータ構造に関する。
【背景技術】
【０００２】
データを圧縮する圧縮方法としては、種々の方法が知られている。広く普及している汎用の圧縮方法としては、例えば、zip形式やlzh形式に圧縮する方法がある。
【０００３】
また、データを圧縮した圧縮データを元のデータに伸張するのに要する処理時間を短縮する圧縮方法も提案されている（例えば、特許文献１や２を参照）。
【０００４】
【特許文献１】特開2002-353818号公報
【特許文献２】特表2004-507145号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来の汎用的な圧縮方法では、ハフマン符号化を代表とする可変長符号化を利用していることが多い。
【０００６】
一般に、可変長符号化を利用して得られる圧縮データの伸張、展開、又は解凍と呼ばれる処理（伸張処理）では、圧縮データを、ビット単位で処理する、ビットシフトその他のビット演算が中心となる。そして、ビット演算は、コンピュータ(CPU(Central Processing Unit))のアーキテクチャにもよるが、負荷が大きい演算であるため、ビット演算に起因して、伸張処理に、時間を要することになる。
【０００７】
そして、伸張処理に時間を要することは、例えば、ユーザに煩わしさを感じさせることになる。
【０００８】
すなわち、電気製品の、いわゆるソフトウェア化が進み、例えば、テレビジョン放送を受信するテレビジョン受像機（以下、適宜、TV（Televison）という）等の電気製品は、CPUを内蔵し、そのCPUがプログラムを実行することにより、ユーザの操作に応じて各種の処理を行う起動状態となる。
【０００９】
このようなTVでは、CPUが実行するプログラムが、例えば、不揮発性メモリに記憶されているが、不揮発性メモリの記憶容量の節約のために、プログラムは、圧縮されて、不揮発性メモリに記憶される。
【００１０】
そして、TVの電源がオンにされると、CPUが、不揮発性メモリに記憶されたプログラムを伸張し、その結果得られるプログラムを実行することで、TVは起動状態となる。
【００１１】
したがって、不揮発性メモリに記憶されたプログラムの伸張に時間を要すると、TVが、電源がオンにされてから起動状態となるまでの時間である起動時間が長くなり、ユーザに煩わしさを感じさせることになる。
【００１２】
本発明は、このような状況に鑑みてなされたものであり、データを圧縮した圧縮データを、元のデータに、高速に伸張することができるようにするものである。
【課題を解決するための手段】
【００１３】
本発明の第１の側面のデータ処理装置、又は、プログラムは、データを圧縮して圧縮データを出力するデータ処理装置、又は、データ処理装置として、コンピュータを機能させるプログラムであり、データ処理装置は、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段と、前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する符号化処理を行う符号化手段とを備える。
【００１４】
本発明の第１の側面のデータ処理方法は、データを圧縮して圧縮データを出力するデータ処理方法であり、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する符号化処理を行うステップを含む。
【００１５】
以上のような第１の側面においては、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとして、前記シンボルの値であるシンボル値の出現頻度が算出される。そして、前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する符号化処理が行われる。
【００１６】
本発明の第２の側面のデータ処理装置、又は、プログラムは、データを圧縮して得られる圧縮データを伸張するデータ処理装置、又は、データ処理装置として、コンピュータを機能させるプログラムであり、前記圧縮データは、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化することにより得られる、符号値の系列を含み、データ処理装置は、前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する復号処理を行う復号手段を備える。
【００１７】
本発明の第２の側面のデータ処理方法は、データを圧縮して得られる圧縮データを伸張するデータ処理方法であり、前記圧縮データは、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化することにより得られる、符号値の系列を含み、前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する復号処理を行うステップを含む。
【００１８】
以上のような第２の側面においては、前記圧縮データに含まれる前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する復号処理が行われる。
【００１９】
本発明の第３の側面のデータ構造は、データを圧縮して得られる圧縮データのデータ構造であり、前記圧縮データは、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値を符号化した符号を含むデータであり、前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化した符号値と、前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化した符号値と、前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化した符号値と、前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化した、前記特定値である符号値とを含む。
【００２０】
第３の側面のデータ構造においては、前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化した符号値と、前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化した符号値と、前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化した符号値と、前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化した、前記特定値である符号値とが含まれる。
【００２１】
なお、プログラムは、伝送媒体を介して伝送し、又は、記録媒体に記録して配布することができる。
【００２２】
また、データ処理装置は、独立した装置であっても良いし、１つの装置を構成している内部ブロックであっても良い。
【発明の効果】
【００２３】
本発明の第１ないし第３の側面によれば、データを圧縮した圧縮データを、元のデータに、高速に伸張することができる。
【発明を実施するための最良の形態】
【００２４】
以下に本発明の実施の形態を説明するが、本発明の構成要件と、明細書又は図面に記載の実施の形態との対応関係を例示すると、次のようになる。この記載は、本発明をサポートする実施の形態が、明細書又は図面に記載されていることを確認するためのものである。従って、明細書又は図面中には記載されているが、本発明の構成要件に対応する実施の形態として、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その構成要件に対応するものではないことを意味するものではない。逆に、実施の形態が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００２５】
本発明の第１の側面のデータ処理装置、又は、プログラムは、データを圧縮して圧縮データを出力するデータ処理装置（例えば、図５の圧縮装置１０１）、又は、データ処理装置として、コンピュータ（例えば、図１７のCPU１２）を機能させるプログラムであり、データ処理装置は、圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出する出現頻度算出手段（例えば、図５の出現頻度算出部１２２）と、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
符号化処理を行う符号化手段（例えば、図５の符号化部１２６）と
を備える。
【００２６】
前記１バイト符号の256個の符号値のうちの、前記特定値と、前記３バイト符号の符号値のプリフィクスとなる１バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である１バイト符号数を、X個とする場合において、
前記符号化手段には、
２バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値を、前記１バイト符号に符号化させ、
前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値を、前記２バイト符号に符号化させ、
残りの65536-X-(254-X)×256個の各シンボル値を、前記３バイト符号に符号化させることができ、
第１の側面のデータ処理装置には、
前記１バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記３バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXを、前記１バイト符号数として算出する１バイト符号数算出手段（例えば、図５の１バイト符号数算出部１２３）をさらに設けることができる。
【００２７】
また、第１の側面のデータ処理装置には、
出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記１バイト符号のX個の符号値とを対応付ける１バイト符号対応表を作成する１バイト符号対応表作成手段（例えば、図５の１バイト符号対応表作成部１２４）と、
出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記２バイト符号の(254-X)×256個の符号値とを対応付ける２バイト符号対応表を作成する２バイト符号対応表作成手段（例えば、図５の２バイト符号対応表作成部１２５）と
をさらに設けることができ、
前記符号化手段には、
前記１バイト符号対応表において前記１バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化させ、
前記２バイト符号対応表において前記２バイト符号の符号値に対応付けられているシンボル値を、そのシンボル値に対応付けられている符号値に符号化させることができる。
【００２８】
第１の側面のデータ処理装置には、
前記１バイト符号数Xと、前記１バイト符号対応表を作成するのに必要な１バイト符号情報と、前記２バイト符号対応表を作成するのに必要な２バイト符号情報とを含むヘッダ情報を生成するヘッダ生成手段（例えば、図５のヘッダ生成部１２７）と、
前記ヘッダ情報と、前記対象データをシンボル単位で符号化した符号値の系列とからなる前記圧縮データを生成する圧縮データ生成手段（例えば、図５の圧縮データ生成部１２９）と
をさらに設けることができる。
【００２９】
本発明の第１の側面のデータ処理方法は、
データを圧縮して圧縮データを出力するデータ処理方法であり、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し（例えば、図７のステップＳ１０１）、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
符号化処理を行う（例えば、図７のステップＳ１０６）ステップを含む。
【００３０】
本発明の第２の側面のデータ処理装置、又は、プログラムは、
データを圧縮して得られる圧縮データを伸張するデータ処理装置（例えば、図１３の伸張装置１０３）、又は、データ処理装置として、コンピュータを機能させるプログラムであり、
前記圧縮データは、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
ことにより得られる、符号値の系列を含み、
データ処理装置は、
前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、
前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する
復号処理を行う復号手段（例えば、図１３の復号部２０５）を備える。
【００３１】
前記１バイト符号の256個の符号値のうちの、前記特定値と、前記３バイト符号の符号値のプリフィクスとなる１バイトの値とを除く254個の符号値の中で、出現頻度が上位のシンボル値を割り当てる符号値の数である１バイト符号数を、X個として、
２バイトのシンボル値である65536個のシンボル値のうちの、出現頻度が上位X番目までの各シンボル値が、前記１バイト符号に符号化され、
前記65536個のシンボル値のうちの、出現頻度が、次に上位の(254-X)×256個の各シンボル値が、前記２バイト符号に符号化され、
残りの65536-X-(254-X)×256個の各シンボル値が、前記３バイト符号に符号化されており、
前記１バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和から、前記３バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和を減算した減算値を最大にするXが、前記１バイト符号数とされている場合において、
前記圧縮データが、
１バイト符号数Xと、
出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる前記１バイト符号のX個の符号値とを対応付ける１バイト符号対応表を作成するのに必要な１バイト符号情報と、
出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる前記２バイト符号の(254-X)×256個の符号値とを対応付ける２バイト符号対応表を作成するのに必要な２バイト符号情報と
をさらに含んでいるときには、
第２の側面のデータ処理装置には、
前記１バイト符号対応表を作成する１バイト符号対応表作成手段（例えば、図１３の１バイト符号対応表作成部２０３）と、
前記２バイト符号対応表を作成する２バイト符号対応表作成手段（例えば、図１３の２バイト符号対応表作成部２０４）と
をさらに設けることができ、
前記復号手段には、
前記１バイト符号対応表において前記シンボル値に対応付けられている前記１バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号させ、
前記２バイト符号対応表において前記シンボル値に対応付けられている前記２バイト符号の符号値を、その符号値に対応付けられているシンボル値に復号させることができる。
【００３２】
本発明の第２の側面のデータ処理方法は、
データを圧縮して得られる圧縮データを伸張するデータ処理方法であり、
前記圧縮データは、
圧縮の対象のデータである対象データを、２バイト単位で、符号化の対象であるシンボルとし、前記シンボルの値であるシンボル値の出現頻度を算出し、
前記対象データにおける出現頻度が上位のシンボル値を、１バイトの符号である１バイト符号に符号化し、
前記対象データにおける出現頻度が次に上位のシンボル値を、２バイトの符号である２バイト符号に符号化し、
前記対象データにおける残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、
前記対象データにおけるシンボル値のうちの、値0x0000の２個の連続を、前記１バイト符号の値である符号値のうちの、あらかじめ決定された符号値である特定値に符号化する
ことにより得られる、符号値の系列を含み、
前記符号値の系列のうちの、前記１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、１バイトのシンボル値に復号し、
前記符号値の系列のうちの前記特定値を、値0x0000の２個の連続に復号する
復号処理を行う（例えば、図１４のステップＳ２０６）
ステップを含む。
【００３３】
以下、図面を参照して、本発明の実施の形態について説明する。
【００３４】
図１は、本発明を適用した圧縮伸張システム（システムとは、複数の装置が論理的に集合した物をいい、各構成の装置が同一筐体中にあるか否かは、問わない）の一実施の形態の構成例を示している。
【００３５】
図１の圧縮伸張システムは、圧縮装置１０１、提供媒体１０２、及び伸張装置１０３で構成され、圧縮の対象のデータである対象データを圧縮して圧縮データを出力し、また、圧縮データを伸張して、元の対象データを出力するようになっている。
【００３６】
すなわち、圧縮装置１０１には、例えば、コンピュータが実行可能なプログラム（のコード）や、プログラムに似た、後述する性質を有するデータが、対象データとして供給される。
【００３７】
圧縮装置１０１は、そこに供給される対象データを圧縮して圧縮データを出力するデータ処理装置であり、圧縮装置１０１が出力する圧縮データは、提供媒体１０２を介して、伸張装置１０３に供給される。
【００３８】
提供媒体１０２は、例えば、インターネットや、CATV(Cable Television)網、衛星若しくは地上放送網等の伝送媒体、又は、半導体メモリや、磁気ディスク、光ディスク等の記録媒体であり、圧縮装置１０１からの圧縮データは、提供媒体１０２において伝送又は記録され、伸張装置１０３に提供される。
【００３９】
伸張装置１０３は、圧縮データを伸張するデータ処理装置であり、提供媒体１０２を介して提供される圧縮データを、元の対象データに伸張して出力する。
【００４０】
以上のように構成される圧縮伸張システムでは、圧縮装置１０１が、そこに供給される対象データを符号化することにより圧縮する圧縮処理を行い、圧縮データを出力する。圧縮装置１０１が出力する圧縮データは、提供媒体１０２を介して伝送されて、又は提供媒体１０２に記録されて、伸張装置１０３に供給される。伸張装置１０３は、提供媒体１０２から供給される圧縮データを復号することにより、元の対象データに伸張する伸張処理を行い、元の対象データを出力する。
【００４１】
次に、圧縮装置１０１は、所定の圧縮ルールに従って、対象データを符号化することにより圧縮する。
【００４２】
圧縮装置１０１が従う圧縮ルールは、対象データを圧縮して得られる圧縮データを、高速に、元の対象データに展開することができるルールであり、以下、この、圧縮装置１０１が従う圧縮ルールについて説明する。
【００４３】
まず、圧縮ルールの概要について説明する。
【００４４】
なお、対象データを符号化することにより圧縮する場合において、対象データの符号化は、所定のデータ長のデータ単位で行われる。この、符号化の対象となるデータ単位を、以下、適宜、シンボルという。また、シンボルの値を、シンボル値という。
【００４５】
対象データを圧縮するには、対象データにおいて、出現頻度の高いシンボル値を、そのシンボル値よりも短い符号長の符号に符号化する必要がある。
【００４６】
なお、出現頻度の高いシンボル値を、そのシンボル値よりも短い符号長の符号に符号化する場合には、出現頻度の低いシンボル値は、長い符号長の符号に符号化されることになり、結果として、可変長符号化が行われることになる。
【００４７】
一方、対象データを圧縮した圧縮データの伸張において、ビット演算を行う必要がある場合には、伸張処理に時間を要することになる。
【００４８】
したがって、伸張処理を、ビット演算なしで行うことができれば、すなわち、例えば、伸張処理において、圧縮データをバイト単位で扱えば済むのであれば、伸張を、高速に行うことができる。
【００４９】
伸張処理において圧縮データをバイト単位で扱うには、圧縮処理において、シンボルを符号化した符号の符号長の最小単位を１バイトにする必要がある。
【００５０】
例えば、いま、シンボルを符号化した符号の最小の符号長を、１バイトとすると、シンボルのデータ長（以下、シンボル長ともいう）は、１バイトよりも大の整数のバイト数とする必要がある。シンボル長が１バイトでは、そのようなシンボルを１バイトの符号に符号化しても、圧縮にならないからである。
【００５１】
そこで、いま、シンボル長を、１バイトよりも大の整数のバイト数である、例えば、２バイトとする。
【００５２】
ところで、対象データを、例えば、上述したように、コンピュータが実行可能なプログラムとした場合、そのプログラムにおいて現れる２バイトのシンボル値の出現頻度に、大きな偏りがないと、圧縮データのデータ量を、対象データのデータ量よりも十分小さくすることができず、圧縮を行う意味がなくなる。
【００５３】
そこで、図２は、あるプログラムのシンボル値の出現頻度の累積値（以下、累積頻度ともいう）を示している。
【００５４】
すなわち、図２は、MIPS(Microprocessor without Interlocked Pipeline Stages)アーキテクチャの、ある３２ビットプロセッサの、３２ビット固定長の命令セットで記述されたプログラムのシンボル値の累積頻度を示している。
【００５５】
ここで、図２において、横軸は、シンボル値の出現頻度の順位を表しており、縦軸は、累積頻度、すなわち、横軸の順位までのシンボル値の出現頻度の総和を表している。
【００５６】
なお、縦軸の累積頻度は、すべてのシンボル値の出現頻度の総和で、横軸の順位までのシンボル値の出現頻度の総和を正規化した値であり、したがって、横軸の順位が大（下位）になるにつれて、1.0に収束していく。
【００５７】
また、より上位の順位のシンボル値の出現頻度がより大で、それより下の順位のシンボル値の出現頻度がより小であるほど、すなわち、シンボル値の出現頻度に偏りがあるほど、累積頻度は、より速く1.0に収束する。
【００５８】
図２左は、シンボル長を１バイトとした場合の累積頻度を示しており、図２右は、シンボル長を２バイトとした場合の累積頻度を示している。
【００５９】
図２左によれば、１バイトのシンボル値の出現頻度には、ある程度の大きな偏りがあることが分かる。また、図２右によれば、２バイトのシンボル値の出現頻度には、１バイトのシンボル値の出現頻度よりも大きな偏りがあることが分かる。
【００６０】
したがって、図２に示した出現頻度の偏りがある対象データについては、シンボル長を１バイトとするよりも、２バイトとする方が、圧縮率、すなわち、ここでは、対象データのデータ量Ｐから圧縮データのデータ量Ｑを減算した減算値Ｐ−Ｑを、対象データのデータ量Ｐで除算した値（Ｐ−Ｑ）／Ｐを大にすることができる。
【００６１】
なお、３２ビット固定長の命令セットで記述されたプログラムにおいて、１バイトのシンボル値の出現頻度よりも、２バイトのシンボル値の出現頻度の方に大きな偏りがあるのは、３２ビット固定長の命令セットには、その上位又は下位１６ビット（２バイト）の位置に区切りがあることが多いためである。
【００６２】
以上から、圧縮ルールの第１のルールとして、シンボル長を２バイトとする。そして、出現頻度が大（高）の２バイトのシンボル値には、それより短い符号長の１バイトの符号を、出現頻度が中の２バイトのシンボル値には、それと同一の符号長の２バイトの符号を、出現頻度が小（低）の２バイトのシンボル値には、それより長い符号長の３バイトの符号を、それぞれ割り当て、各シンボル値を符号化することとする。
【００６３】
ここで、符号長が１バイトの符号を、１バイト符号という。同様に、符号長が２バイト又は３バイトの符号を、それぞれ、２バイト符号又は３バイト符号という。
【００６４】
第１のルールによれば、１バイト符号に割り当てられるシンボル値の出現頻度の総和が、３バイト符号に割り当てられるシンボル値の出現頻度の総和よりも大であるほど、圧縮率は、大になる。
【００６５】
次に、図３は、３２ビット固定長の命令セットで記述されたあるプログラムを対象として、２バイトのシンボル値である値0x0000（0xは、その後に続く値が１６進数であることを表す）が出現する出現頻度と、シンボル値0x0000が２個以上の各個数だけ連続することが出現する出現頻度とを調査した調査結果を示している。
【００６６】
なお、調査の対象としたプログラムにおいて、２バイトのシンボルの数は、1807707個だけ存在し、したがって、プログラムのデータ量は、1807707×2バイトである。
【００６７】
調査の対象としたプログラムの1807707個のシンボルの中で、シンボル値0x0000が１個だけ単独で出現する出現頻度、すなわち、プログラムに存在するシンボル値0x0000のうちの、直前と直後のシンボルが0x0000でないシンボル値0x0000の出現頻度は、図３に示したように、49092回（個）であった。
【００６８】
ここで、シンボル値は２バイト（１６ビット）であるから、シンボル値の総数（種類）は、65536(=216)個であり、その65536個の各シンボル値の出現頻度の中で、シンボル値0x0000が１個だけ単独で出現する出現頻度（以下、適宜、１個のシンボル値0x0000の出現頻度という）は、上位であった。
【００６９】
したがって、圧縮処理において、出現頻度が上位のシンボル値0x0000は、ほとんどの場合、最短の符号長の１バイト符号に符号化されることが予想される。
【００７０】
また、シンボル値0x0000の２個の連続(0x0000,0x0000)の出現頻度、すなわち、プログラムにおいて、２個だけ連続したシンボル値0x0000が出現する出現頻度は、図３に示したように、38243回であった。
【００７１】
シンボル値0x0000の２個の連続では、２つのシンボル値0x0000が連続して存在するから、１つのシンボル値0x0000と、他の１つのシンボル値0x0000とのそれぞれとして符号化することができる。
【００７２】
いま、仮に、上述したように、１個のシンボル値0x0000が、１バイト符号に符号化されるとすると、シンボル値0x0000の２個の連続は、２つの１バイト符号に符号化されることになり、この場合、４バイトが２バイトに圧縮されることになる。
【００７３】
しかしながら、図３に示したように、0x0000の２個の連続の出現頻度は、１個の0x0000の出現頻度ほどではないが、それでも、１個の0x0000の出現頻度と同一のオーダ（１万台）となっている。
【００７４】
したがって、シンボル値0x0000の２個の連続については、１個ずつのシンボル値0x0000に分けて、その１個ずつのシンボル値0x0000を１バイト符号に符号化するのではなく、シンボル値0x0000の２個の連続の全体を、最小の符号長の１バイト符号に符号化することにより、圧縮率が向上することが予想される。
【００７５】
また、図３によれば、シンボル値0x0000の３個以上の各個数の連続の出現頻度は、その個数が大になるにつれ、徐々に減少する傾向にあるが、それでも、３個以上の各個数の連続の出現頻度の総和は、ある程度大になる。
【００７６】
したがって、シンボル値0x0000の３個以上の各個数の連続については、１個ずつのシンボル値0x0000に分けて、その１個ずつのシンボル値0x0000を１バイト符号に符号化するのではなく、シンボル値0x0000の３個以上の個数の連続の全体に、他の符号を割り当てて、その符号に符号化することにより、圧縮率が向上することが予想される。
【００７７】
そこで、圧縮ルールの第２のルールとして、シンボル値0x0000の２個の連続に、最小の符号長の１バイト符号を割り当てることとする。
【００７８】
さらに、第２のルールとして、シンボル値0x0000の３個以上の連続には、いままでに割り当てが決まっている最大の符号長の符号である３バイト符号より符号長が大の最小のバイト数の符号、すなわち、符号長が４バイトの符号（以下、適宜、４バイト符号という）を割り当て、シンボル値0x0000の３個以上の連続は、４バイト符号に符号化することとする。
【００７９】
なお、４バイト符号としては、例えば、３バイトのプレフィクス(prefix)と、シンボル値0x0000が連続する個数を表す１バイトとの合計４バイトを採用する。
【００８０】
圧縮装置１０１では、以上のような、シンボル長を２バイトとし、出現頻度が大の２バイトのシンボル値には１バイト符号を、出現頻度が中のシンボル値には２バイト符号を、出現頻度が小のシンボル値には３バイト符号を、それぞれ割り当てる第１のルール、及び、シンボル値0x0000の２個の連続には１バイト符号を割り当て、シンボル値0x0000の３個以上の連続には４バイト符号を割り当てる第２のルールからなる圧縮ルールに従って圧縮処理が行われる。
【００８１】
次に、圧縮装置１０１が従う具体的な圧縮ルールについて説明する。
【００８２】
第２のルールによれば、シンボル値0x0000の２個の連続に、１バイト符号が割り当てられるが、本実施の形態では、シンボル値0x0000の２個の連続に対して、１バイト符号の符号値0x00ないし0xFFのうちの、例えば、符号値0xFFを割り当てることとする。ここで、シンボル値0x0000の２個の連続に対して割り当てられる１バイト符号の符号値0xFFを、以下、適宜、特定値ともいう。
【００８３】
また、第２のルールによれば、シンボル値0x0000の３個以上の連続には４バイト符号が割り当てられるが、本実施の形態では、シンボル値0x0000の３個以上の連続に対して割り当てる４バイト符号として、３バイトのプリフィクスを上位３バイトとし、シンボル値0x0000が連続する個数を表す１バイトを下位１バイトとする４バイトを採用する。なお、４バイト符号の上位３バイトのプリフィクスとしては、例えば、0xFE,0x00,0x00(0xFE0000)を採用する。
【００８４】
第１のルールによれば、出現頻度が小のシンボル値には、３バイト符号が割り当てられるが、本実施の形態では、出現頻度が小のシンボル値に対して割り当てる３バイト符号として、１バイトのプリフィクスを上位１バイトとし、２バイトのシンボル値そのものを下位２バイトとする３バイトを採用する。なお、３バイト符号の上位１バイトのプリフィクスとしては、例えば、４バイト符号の上位３バイトのプリフィクス0xFE,0x00,0x00の上位１バイトである0xFEを採用する。
【００８５】
ここで、シンボル値0x0000の３個以上の連続に対して、0xFE,0x00,0x00を上位３バイトのプリフィクスとする４バイト符号を割り当てること、及び、出現頻度が小のシンボル値に対して、0xFEを上位１バイトのプリフィクスとするとともに、２バイトのシンボル値そのものを下位２バイトとする３バイト符号を割り当てることは、シンボル値0x0000が、１バイト符号に割り当てられるか、最悪でも、２バイト符号に割り当てられ、３バイト符号には割り当てられないことを前提とする。
【００８６】
シンボル値0x0000が３バイト符号に割り当てられると、その符号値は、0xFE,0x00,0x00となり、４バイト符号の上位３バイトのプレフィクス0xFE,0x00,0x00と区別することができなくなるからである。
【００８７】
なお、対象データとしてのプログラムにおける１個の0x0000の出現頻度は、図３に示したように大であるので、上述の前提は、ほとんどの場合、成り立つ。言い換えれば、上述の前提が成り立たない対象データは、圧縮装置１０１による圧縮に適さない。
【００８８】
次に、第１のルールによれば、シンボル長を２バイトとして、出現頻度が大のシンボル値には１バイト符号が、出現頻度が中のシンボル値には２バイト符号が、出現頻度が小のシンボル値には３バイト符号が、それぞれ割り当てられるが、１バイト符号、２バイト符号、又は３バイト符号がそれぞれ割り当てられるシンボル値の個数は、以下のように決定される。
【００８９】
すなわち、まず、出現頻度が上位X番目までの各シンボル値、つまり、X個のシンボル値に対して、１バイト符号を割り当てるとすると、１バイト符号の256個の符号値0x00ないし0xFFのうちの、特定値である符号値0xFFと、プリフィクスに用いられる符号値0xFEとの２個は、シンボル値の符号値として使用することができないため、シンボル値に割り当てることができる符号値は、0x00ないし0xFDの254個である。したがって、１バイト符号に割り当てることができるシンボル値の個数Xは、（１以上）254個以下となる。
【００９０】
上述のように、出現頻度が、254以下の上位X番目までの各シンボル値に対して、１バイト符号が割り当てられる場合、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値に、２バイト符号が割り当てられる。
【００９１】
すなわち、２バイト符号の上位１バイトの256個の値0x00ないし0xFFのうちの、特定値として用いられる値0xFFと、プリフィクスに用いられる値0xFEとの２個は、２バイト符号の上位１バイトには使用することができない。さらに、２バイト符号の上位１バイトの256個の値0x00ないし0xFFのうちの、出現頻度が上位X番目までのシンボル値に割り当てられる１バイト符号の符号値に用いられるX個の値も、２バイト符号の上位１バイトには使用することができない。
【００９２】
したがって、２バイト符号の上位１バイトに使用することができるのは、１バイトで表現することができる256個の値から、特定値として用いられる値0xFF、プリフィクスに用いられる値0xFE、及び、１バイト符号の符号値に用いられるX個の値を除いた、例えば、値Xないし0xFDの254-X個の値となる。
【００９３】
また、２バイト符号の下位１バイトとしては、１バイトで表現することができる256個の値すべてを使用することができる。
【００９４】
以上から、２バイト符号の符号値として使用することができる値の個数は、(254-X)×256個となり、その(254-X)×256個の２バイト符号の符号値が、出現頻度が上位X+1番目から(254-X)×256個の各シンボル値に割り当てられる。
【００９５】
以上のように、出現頻度が、254以下の上位X番目までの各シンボル値に対して、１バイト符号が割り当てられ、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値に、２バイト符号が割り当てられると、符号が割り当てられていないシンボル値の個数は、65536-X-(254-X)×256個となり、この、65536-X-(254-X)×256個のシンボルに対して、３バイト符号が割り当てられる。
【００９６】
すなわち、２バイト（１６ビット）のシンボル値の総数は、65536(=216)個であり、そのうちの、X個のシンボル値に、１バイト符号が割り当てられ、(254-X)×256個のシンボル値に、２バイト符号が割り当てられるから、符号が割り当てられていないシンボル値は、２バイトのシンボル値の総数である65536個から、１バイト符号が割り当てられるシンボル値の個数であるX個と、２バイト符号が割り当てられるシンボル値の個数である(254-X)×256個とを減算した65536-X-(254-X)×256個となる。この、65536-X-(254-X)×256個のシンボルに対して、３バイト符号が割り当てられる。
【００９７】
いま、１バイト符号が割り当てられる、出現頻度が上位X番目までの各シンボル値の出現頻度の総和をC1と表すとともに、３バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和をC2と表すこととすると、総和C1から総和C2を減算した減算値C1-C2を最大にするXが、圧縮率を最も高くするXとなり、このXが、１バイト符号が割り当てられるシンボル値の数（以下、適宜、１バイト符号数という）として決定される。なお、１バイト符号数Xは、上述したように254以下（かつ１以上）の値である。
【００９８】
さらに、(254-X)×256が、２バイト符号が割り当てられるシンボル値の数として決定され、65536-X-(254-X)×256が、３バイト符号が割り当てられるシンボル値の数として決定される。
【００９９】
次に、図４を参照して、以上の圧縮ルールに従った、圧縮装置１０１（図１）による圧縮処理の概要について説明する。
【０１００】
なお、ここでは、１バイト符号数Xと、対象データにおける２バイトのシンボルの各シンボル値の出現頻度とが、既に求まっていることとし、さらに、上述したように、シンボル値0x0000は、１バイト符号に割り当てられるか、最悪でも、２バイト符号に割り当てられ、３バイト符号には割り当てられないこととする。
【０１０１】
出現頻度が上位X番目までのシンボル値については、そのシンボル値を、１バイト符号の符号値0x00ないしX-1のうちのいずれかに符号化する１バイト符号化が行われる。
【０１０２】
ここで、１バイト符号化は、図４に示すように、出現頻度が上位X番目までの各シンボル値と、１バイト符号の符号値0x00ないしX-1とを対応付ける対応表である１バイト符号対応表が作成され、その１バイト符号対応表に従って行われる。
【０１０３】
なお、出現頻度が上位X番目までの各シンボル値と、１バイト符号の符号値0x00ないしX-1とを、どのように対応付けるか、つまり、出現頻度が上位X番目までの各シンボル値に対して、１バイト符号の符号値のうちのいずれを割り当てるかは、特に限定されるものではないが、例えば、出現頻度がより上位のシンボル値と、より値が小さい符号値とを対応付けることができる。
【０１０４】
出現頻度が上位X+1番目から、(254-X)×256個のシンボル値については、そのシンボル値を２バイト符号に符号化する２バイト符号化が行われる。
【０１０５】
ここで、２バイト符号化は、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値と、２バイト符号の符号値とを対応付ける対応表である２バイト符号対応表が作成され、その２バイト符号対応表に従って行われる。
【０１０６】
なお、２バイト符号の符号値は、上述したように、上位１バイトが、値Xないし0xFDの範囲の値をとり、下位１バイトが0x00ないし0xFFの範囲の値をとる。そして、２バイト符号対応表としては、図４に示すように、上位１バイトがとるXないし0xFDの範囲の各値ごとに、下位１バイトがとる値0x00ないし0xFFの範囲の各値と、シンボル値とを対応付ける、0xFD-X+1個の対応表が作成される。
【０１０７】
ここで、0xFD-X+1個の２バイト符号対応表のうちの、上位バイトがn（n=X,X+1,・・・,0xFD）の２バイト符号対応表を、２バイト符号対応表#nとも記載する。
【０１０８】
なお、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値と、２バイト符号の符号値との対応付け、つまり、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値に対する、２バイト符号の符号値の割り当ては、圧縮データの後述するヘッダ情報のデータ量を少なくするために、例えば、出現頻度順の(254-X)×256個のシンボル値を、昇順に並べ替え、より小さい値のシンボル値と、より値が小さい符号値とを対応付けるように行われる。
【０１０９】
２バイトの65536個のシンボル値のうちの、出現頻度が上位X番目までのシンボル値と、出現頻度が上位X+1番目から(254-X)×256個のシンボル値とを除いた、残りの65536-X-(254-X)×256個のシンボル値については、そのシンボル値を３バイト符号に符号化する３バイト符号化が行われる。
【０１１０】
３バイト符号化は、図４に示すように、１バイトのプレフィクス0xFEに続けて、２バイトのシンボル値を付加することにより行われる。
【０１１１】
シンボル値0x0000の２個以上の個数の連続のうちの、シンボル値0x0000の２個の連続については、そのシンボル値0x0000の２個の連続を、１バイト符号の符号値のうちの特定値0xFFに符号化する１バイト符号化が行われ、シンボル値0x0000の３個以上のk個の連続については、そのシンボル値0x0000のk個の連続を、４バイト符号に符号化する４バイト符号化が行われる。
【０１１２】
４バイト符号化は、図４に示すように、１バイトの値0xFEに続けて２バイトの0x00,0x00を付加した３バイトのプレフィクス0xFE,0x00,0x00に、さらに、シンボル値0x0000が連続する個数kを表す１バイトを、下位バイトとして付加することにより行われる。
【０１１３】
なお、４バイト符号において、シンボル値0x0000が連続する個数kを表す下位バイトは１バイトであるため、255を越える値は、表すことができない。そこで、シンボル値0x0000が、255を越える個数kだけ連続する場合には、その、シンボル値0x0000のk個の連続は、シンボル値0x0000の255個の連続と、シンボル値0x0000のk-255個の連続とに分けられ、それぞれ４バイト符号化される。k-255が、255を越える場合には、シンボル値0x0000のk-255個の連続が、さらに、シンボル値0x0000の255個の連続と、シンボル値0x0000のk-255-255個の連続とに分けられ、それぞれ４バイト符号化される。
【０１１４】
また、上述の場合には、説明を簡単にするために、シンボル値0x0000の３個以上のk個の連続については、そのシンボル値0x0000のk個の連続を、４バイト符号に符号化する４バイト符号化を行うようにしたが、値kが小の場合には、シンボル値0x0000のk個の連続は、４バイト符号に符号化するのではなく、１個のシンボル値0x0000と、シンボル値0x0000の２個の連続とに分けて、又は、複数の、シンボル値0x0000の２個の連続に分けて、１バイト符号化を行うようにすることができる。
【０１１５】
このように、値kが小の場合に、シンボル値0x0000のk個の連続を、１個のシンボル値0x0000と、シンボル値0x0000の２個の連続とに分けて、又は、複数の、シンボル値0x0000の２個の連続に分けて、１バイト符号化を行うことにより、シンボル値0x0000のk個の連続を、４バイト符号化する場合に比較して、圧縮率を向上させることができる。
【０１１６】
すなわち、例えば、値kが８以下の、例えば、８である場合、シンボル値0x0000の８個の連続を４バイト符号化すると、３バイトのプレフィクス0xFE,0x00,0x00を上位３バイトとし、かつ、シンボル値0x0000が連続する個数である８を表す１バイト0x08を下位１バイトとする４バイトの符号値0xFE,0x00,0x00,0x08に符号化される。
【０１１７】
４バイト符号化では、値kが、８以下（かつ３以上）の他の値である７，６，５，４，３である場合も、同様に、シンボル値0x0000のk個の連続は、４バイトに符号化される。
【０１１８】
一方、シンボル値0x0000の８個の連続は、例えば、４個の、シンボル値0x0000の２個の連続に分けることができるが、この４個の、シンボル値0x0000の２個の連続それぞれを１バイト符号化すると、４つの特定値0xFF,0xFF,0xFF,0xFF、つまり、４バイトに符号化される。
【０１１９】
また、例えば、シンボル値0x0000の７個の連続は、例えば、１個のシンボル値0x0000と、３個の、シンボル値0x0000の２個の連続に分けることができる。
【０１２０】
そして、いま、説明を簡単にするために、１個のシンボル値0x0000が、例えば、１バイト符号の符号値0x00に符号化されることとすると、シンボル値0x0000の７個の連続を分けて得られる１個のシンボル値0x0000と、３個の、シンボル値0x0000の２個の連続とは、それぞれ、符号値0x00,0xFF,0xFF,0xFFに符号化、つまり、４バイトに符号化される。
【０１２１】
さらに、例えば、シンボル値0x0000の６個の連続は、例えば、３個の、シンボル値0x0000の２個の連続に分けることができるが、この３個の、シンボル値0x0000の２個の連続それぞれを１バイト符号化すると、３つの特定値0xFF,0xFF,0xFF、つまり、３バイトに符号化される。
【０１２２】
以下、同様に、値kが８以下の場合には、シンボル値0x0000のk個の連続を、１個のシンボル値0x0000と、シンボル値0x0000の２個の連続とに分けて、又は、複数の、シンボル値0x0000の２個の連続に分けて、１バイト符号化を行うことにより、その符号化結果は、シンボル値0x0000のk個の連続を、４バイト符号化した場合の符号化結果である４バイト以下のバイト数となり、圧縮率を向上させること（４バイト符号化の場合よりも、圧縮率を劣化させないこと）ができる。
【０１２３】
なお、言い換えれば、値kが８より大の場合には、シンボル値0x0000のk個の連続を、１個のシンボル値0x0000と、シンボル値0x0000の２個の連続とに分けて、又は、複数の、シンボル値0x0000の２個の連続に分けて、１バイト符号化を行うより、シンボル値0x0000のk個の連続を、そのまま４バイト符号化する方が、ランレングス符号化のように、圧縮率を向上させることができる。
【０１２４】
次に、図５は、図１の圧縮装置１０１の構成例を示すブロック図である。
【０１２５】
図５において、圧縮装置１０１は、記憶部１２１、出現頻度算出部１２２、１バイト符号数算出部１２３、１バイト符号対応表作成部１２４、２バイト符号対応表作成部１２５、符号化部１２６、ヘッダ生成部１２７、記憶部１２８、及び圧縮データ生成部１２９等から構成される。
【０１２６】
記憶部１２１には、対象データが供給されるようになっている。記憶部１２１は、そこに供給される対象データを一時記憶する。
【０１２７】
出現頻度算出部１２２は、記憶部１２１に記憶された対象データを、その先頭から、２バイトのシンボル単位で、順次、読み出し、シンボルの各シンボル値の出現頻度を算出して、１バイト符号数算出部１２３、１バイト符号対応表作成部１２４、及び、２バイト符号対応表作成部１２５に供給する。
【０１２８】
１バイト符号数算出部１２３は、出現頻度算出部１２２からの各シンボル値の出現頻度に基づき、上述した１バイト符号数Xを算出して、１バイト符号対応表作成部１２４、２バイト符号対応表作成部１２５、及び、ヘッダ生成部１２７に供給する。
【０１２９】
すなわち、１バイト符号数算出部１２３は、出現頻度算出部１２２からの各シンボル値の出現頻度に基づき、１バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和C1を算出するとともに、３バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和C2を算出する。さらに、１バイト符号数算出部１２３は、１バイト符号に割り当てられるX個の各シンボル値の出現頻度の総和C1から、３バイト符号に割り当てられる65536-X-(254-X)×256個の各シンボル値の出現頻度の総和C2を減算した減算値C1-C2を最大にするXを、１バイト符号数として算出する。
【０１３０】
１バイト符号対応表作成部１２４は、出現頻度算出部１２２からの各シンボル値の出現頻度と、１バイト符号数算出部１２３からの１バイト符号数Xとに基づき、出現頻度が上位X番目までの各シンボル値と、シンボル値に割り当てる１バイト符号のX個の符号値とを対応付ける、図４で説明した１バイト符号対応表を作成して、符号化部１２６、及びヘッダ生成部１２７に供給する。
【０１３１】
２バイト符号対応表作成部１２５は、出現頻度算出部１２２からの各シンボル値の出現頻度と、１バイト符号数算出部１２３からの１バイト符号数Xとに基づき、出現頻度が、次に上位の(254-X)×256個の各シンボル値と、シンボル値に割り当てる２バイト符号の(254-X)×256個の符号値とを対応付ける、図４で説明した２バイト符号対応表を作成して、符号化部１２６、及びヘッダ生成部１２７に供給する。
【０１３２】
符号化部１２６は、１バイト符号対応表作成部１２４からの１バイト符号対応表と、２バイト符号対応表作成部１２５からの２バイト符号対応表とを参照し、記憶部１２１に記憶された対象データにおけるシンボルのうちの、出現頻度が上位のシンボル値（のシンボル）を、１バイト符号に符号化し、出現頻度が次に上位のシンボル値を、２バイト符号に符号化し、残りのシンボル値を、３バイトの符号である３バイト符号に符号化し、シンボル値0x0000の３個以上の各個数の連続を、１バイト符号の符号値のうちの、あらかじめ決定された特定値0xFFに符号化、又は４バイト符号化する。
【０１３３】
すなわち、符号化部１２６は、１バイト符号対応表作成部１２４からの１バイト符号対応表において１バイト符号の符号値に対応付けられている、出現頻度が上位X番目までの各シンボル値を、１バイト符号対応表でシンボル値に対応付けられている１バイト符号の符号値に符号化する。
【０１３４】
また、符号化部１２６は、２バイト符号対応表作成部１２５からの２バイト符号対応表において２バイト符号の符号値に対応付けられている、出現頻度が、次に上位の(254-X)×256個の各シンボル値を、２バイト符号対応表でシンボル値に対応付けられている２バイト符号の符号値に符号化する。
【０１３５】
さらに、符号化部１２６は、１バイト符号対応表作成部１２４からの１バイト符号対応表にも、２バイト符号対応表作成部１２５からの２バイト符号対応表にもない、残りの65536-X-(254-X)×256個の各シンボル値を、３バイト符号の符号値に符号化する。
【０１３６】
また、符号化部１２６は、シンボル値0x0000の２個の連続を、１バイト符号の符号値のうちの、あらかじめ決定された特定値0xFFに符号化する。
【０１３７】
さらに、符号化部１２６は、シンボル値0x0000の３個以上のk個の連続を、上位３バイトをプリフィクス0xFE,0x00,0x00とし、下位１バイトをkとする４バイト符号の符号値に符号化する。
【０１３８】
そして、符号化部１２６は、記憶部１２１に記憶された対象データをシンボルごとに符号化することにより得られる符号値の系列を、記憶部１２８に供給する。
【０１３９】
ヘッダ生成部１２７は、１バイト符号数算出部１２３からの１バイト符号数X、１バイト符号対応表作成部１２４からの１バイト符号対応表、及び、２バイト符号対応表作成部１２５からの２バイト符号対応表に基づき、１バイト符号数Xと、１バイト符号対応表を作成するのに必要な１バイト符号情報と、２バイト符号対応表を作成するの必要な２バイト符号情報とを含むヘッダ情報を生成し、圧縮データ生成部１２９に供給する。
【０１４０】
記憶部１２８は、符号化部１２６からの符号値の系列を記憶する。
【０１４１】
圧縮データ生成部１２９は、記憶部１２８に記憶された符号値の系列に、ヘッダ生成部１２７からのヘッダ情報を付加することにより、ヘッダ情報と、対象データをシンボル単位で符号化した符号値の系列とからなる圧縮データを生成して出力する。
【０１４２】
図６は、図５の圧縮装置１０１で得られる圧縮データのフォーマットを示している。
【０１４３】
圧縮データは、ヘッダ部とボディ部とからなる。圧縮データにおいて、ヘッダ部には、ヘッダ生成部１２７で生成されたヘッダ情報が配置され、ボディ部には、符号化部１２６で得られて記憶部１２８に記憶された符号値の系列が配置される。
【０１４４】
ヘッダ情報は、その先頭から、１バイト符号数X、１バイト符号情報、及び２バイト符号情報が順次配置されて構成される。
【０１４５】
すなわち、ヘッダ生成部１２７（図５）において、ヘッダ情報の先頭から１バイト目には、１バイト符号数算出部１２３で算出された１バイト符号数Xが配置される。
【０１４６】
また、ヘッダ生成部１２７では、ヘッダ情報の、１バイト符号数Xに続いて、2×Xバイトの１バイト符号情報が配置される。
【０１４７】
すなわち、ヘッダ生成部１２７は、１バイト符号対応表作成部１２４からの１バイト符号対応表において、１バイト符号の１番目の符号値0x00に対応付けられている２バイトのシンボル値（以下、１番目のシンボル値という）を、１バイト符号数Xに続いて配置する。
【０１４８】
さらに、ヘッダ生成部１２７は、１バイト符号対応表作成部１２４からの１バイト符号対応表において、１バイト符号の２番目の符号値0x01に対応付けられている２バイトのシンボル値を、１番目のシンボル値に続いて配置し、以下、同様にして、１バイト符号のX番目の符号値X-1に対応付けられている２バイトのシンボル値までを、１バイト符号情報として配置する。
【０１４９】
したがって、１バイト符号情報は、１バイト符号対応表において、１バイト符号に対応付けられているX個のシンボル値である。
【０１５０】
１バイト符号情報では、１バイト符号の符号値0x00ないしX-1に割り当てられたX個のシンボル値が、符号値0x00ないしX-1に割り当てられた順に並んでいるので、１バイト符号情報及び１バイト符号数Xから、元の１バイト符号対応表を復元することができる。
【０１５１】
ここで、シンボル値は２バイトであり、１バイト符号対応表作成部１２４に存在するシンボル値の数、すなわち、１バイト符号化されるシンボル値の数は、１バイト符号数であるX個であるから、１バイト符号情報のデータ量は、上述したように、2×Xバイトとなる。
【０１５２】
ヘッダ情報において、１バイト符号情報の後には、２バイト符号情報が配置される。
【０１５３】
すなわち、ヘッダ生成部１２７は、２バイトのシンボル値の総数に等しい65536ビット（８kバイト）のビット列の各ビットを、２バイト符号対応表に基づいて、0又は1にセットし、その結果得られる65536ビットのビット列を、２バイト符号情報として、１バイト符号情報の後に配置する。
【０１５４】
具体的には、ヘッダ生成部１２７は、２バイト符号対応表において、シンボル値0x0000が２バイト符号（の符号値）に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭から１ビット目を、0又は1にセットする。例えば、シンボル値0x0000が２バイト符号に対応付けられている場合には、１ビット目は、1にセットされ、シンボル値0x0000が２バイト符号に対応付けられていない場合には、１ビット目は、0にセットされる。
【０１５５】
また、ヘッダ生成部１２７は、２バイト符号対応表において、シンボル値0x0001が２バイト符号に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭から２ビット目を、0又は1にセットし、以下、同様に、２バイト符号対応表において、シンボル値N-1が２バイト符号に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭からNビット目を、0又は1にセットする。
【０１５６】
そして、ヘッダ生成部１２７は、２バイト符号対応表において、シンボル値0xFFFFが２バイト符号に対応付けられているかどうかに応じて、65536ビットのビット列のうちの、先頭から65536ビット目を、0又は1にセットし、その65536ビットのビット列を、２バイト符号情報として、１バイト符号情報の後に配置する。
【０１５７】
したがって、２バイト符号情報は、２バイトの各シンボル値、つまり、65536個の各シンボル値が、２バイト符号対応表において、２バイト符号に対応付けられているかどうかを表す。
【０１５８】
以上のように、２バイト符号情報の先頭からNビット目は、シンボル値N-1が２バイト符号に対応付けられているかどうかを表す。
【０１５９】
また、出現頻度が上位X+1番目から、(254-X)×256個の各シンボル値と、２バイト符号の符号値との対応付けは、より小さい値のシンボル値と、２バイト符号の、より小さい符号値とを対応付けるように行われる。
【０１６０】
そして、２バイト符号の符号値の最小値αは、上位１バイトが値Xで、下位１バイトが値0x00の２バイトである。
【０１６１】
したがって、２バイト符号情報の先頭からNビット目が1である場合、つまり、シンボル値N-1が２バイト符号に対応付けられている場合に、そのシンボル値N-1に対応付けられている２バイト符号の符号値を求めることができる。
【０１６２】
すなわち、２バイト符号情報の先頭からNビット目が1である場合に、そのNビット目の1が、２バイト符号情報の先頭から１のみをカウントしたときのβ個目の1であるとすると、シンボル値N-1に対応付けられている２バイト符号の符号値は、２バイト符号の符号値の最小値αに、β-1を加算した値α+β-1となる。
【０１６３】
したがって、２バイト符号情報及び１バイト符号数Xから、元の２バイト符号対応表を復元することができる。
【０１６４】
なお、１バイト符号情報として、１バイト符号対応表そのものを採用し、２バイト符号情報として、２バイト符号対応表そのものを採用することも可能であるが、その場合、図６で説明した１バイト符号情報及び２バイト符号情報を採用する場合に比較して、ヘッダ情報、ひいては、圧縮データ全体のデータ量が増加する。
【０１６５】
次に、図７のフローチャートを参照して、図５の圧縮装置１０１が行う圧縮処理について説明する。
【０１６６】
対象データが、記憶部１２１に供給され、記憶部１２１が、そこに供給される対象データを記憶すると、圧縮装置１０１は、圧縮処理を開始する。
【０１６７】
すなわち、圧縮処理では、ステップＳ１０１において、出現頻度算出部１２２は、記憶部１２１に記憶された対象データを、その先頭から、２バイトのシンボル単位で、順次、読み出し、２バイトのシンボルの65536個の各シンボル値の出現頻度を算出して、１バイト符号数算出部１２３、１バイト符号対応表作成部１２４、及び、２バイト符号対応表作成部１２５に供給する。
【０１６８】
その後、処理は、ステップＳ１０１からステップＳ１０２に進み、１バイト符号数算出部１２３は、出現頻度算出部１２２からの各シンボル値の出現頻度に基づき、１バイト符号数X、すなわち、圧縮率を最も高くする、１バイト符号化するシンボル値の数Xを、上述したように算出し、１バイト符号対応表作成部１２４、２バイト符号対応表作成部１２５、及び、ヘッダ生成部１２７に供給して、処理は、ステップＳ１０３に進む。
【０１６９】
ステップＳ１０３では、１バイト符号対応表作成部１２４が、出現頻度算出部１２２からの各シンボル値の出現頻度と、１バイト符号数算出部１２３からの１バイト符号数Xとに基づき、１バイト符号対応表を作成し、符号化部１２６、及びヘッダ生成部１２７に供給して、処理は、ステップＳ１０４に進む。
【０１７０】
ステップＳ１０４では、２バイト符号対応表作成部１２５が、出現頻度算出部１２２からの各シンボル値の出現頻度と、１バイト符号数算出部１２３からの１バイト符号数Xとに基づき、２バイト符号対応表を作成し、符号化部１２６、及びヘッダ生成部１２７に供給して、処理は、ステップＳ１０５に進む。
【０１７１】
ステップＳ１０５では、ヘッダ生成部１２７が、１バイト符号数算出部１２３からの１バイト符号数X、１バイト符号対応表作成部１２４からの１バイト符号対応表、及び、２バイト符号対応表作成部１２５からの２バイト符号対応表に基づき、１バイト符号数Xと、１バイト符号対応表を作成するのに必要な１バイト符号情報と、２バイト符号対応表を作成するの必要な２バイト符号情報とを含む、図６の圧縮データのヘッダ部に配置されるヘッダ情報を生成し、圧縮データ生成部１２９に供給して、処理は、ステップＳ１０６に進む。
【０１７２】
ステップＳ１０６では、符号化部１２６が、１バイト符号対応表作成部１２４からの１バイト符号対応表と、２バイト符号対応表作成部１２５からの２バイト符号対応表とを参照し、記憶部１２１に記憶された対象データにおける各シンボルのシンボル値を、１バイト符号、２バイト符号、３バイト符号、若しくは４バイト符号に符号化する符号化処理を行い、その符号化処理によって得られる符号値の系列を、記憶部１２８に供給して記憶させて、処理は、ステップＳ１０７に進む。
【０１７３】
ステップＳ１０７では、圧縮データ生成部１２９が、ヘッダ生成部１２７からのヘッダ情報を、ヘッダ部に配置するとともに、記憶部１２８に記憶された符号値の系列を、ボディ部に配置した図６の圧縮データを生成して出力する。
【０１７４】
次に、図８のフローチャートを参照して、図７のステップＳ１０１において、出現頻度算出部１２２（図５）が行う、シンボル値の出現頻度を算出する処理について説明する。
【０１７５】
まず最初に、ステップＳ１２１において、出現頻度算出部１２２は、内蔵するメモリ（図示せず）に記憶されたシンボル出現頻度表を初期化する。
【０１７６】
ここで、図９は、シンボル出現頻度表を示している。
【０１７７】
シンボル出現頻度表は、２バイトの各シンボル値、すなわち、65536個のシンボル値0x0000ないし0xFFFFのそれぞれと、出現頻度とが対応付けられた対応表であり、出現頻度算出部１２２は、内蔵するメモリに、シンボル出現頻度表を記憶している。
【０１７８】
ステップＳ１２１のシンボル出現頻度表の初期化では、シンボル出現頻度表のシンボル値が、例えば、昇順にソートされ、出現頻度が0にリセットされる。
【０１７９】
図８に戻り、ステップＳ１２１の後、処理は、ステップＳ１２２に進み、出現頻度算出部１２２が、記憶部１２１に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出して、処理は、ステップＳ１２３に進む。
【０１８０】
ステップＳ１２３では、出現頻度算出部１２２は、出現頻度表（図９）において、注目シンボルのシンボル値に対応付けられている出現頻度を１だけインクリメントして、処理は、ステップＳ１２４に進む。
【０１８１】
ステップＳ１２４では、出現頻度算出部１２２は、記憶部１２１に記憶された対象データの最後のシンボルまでを、注目シンボルとしたかどうかを判定する。
【０１８２】
ステップＳ１２４において、記憶部１２１に記憶された対象データの最後のシンボルまでを、まだ、注目シンボルとしていないと判定された場合、すなわち、記憶部１２１に記憶された対象データにおいて、まだ、注目シンボルとしていないシンボルがある場合、処理は、ステップＳ１２２に戻り、出現頻度算出部１２２は、上述したように、記憶部１２１に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出し、以下、同様の処理を行う。
【０１８３】
また、ステップＳ１２４において、記憶部１２１に記憶された対象データの最後のシンボルまでを、注目シンボルとしたと判定された場合、処理は、ステップＳ１２５に進み、出現頻度算出部１２２は、出現頻度表（図９）のシンボル値及び出現頻度のセットを、例えば、出現頻度の大きい順に並べ替えて、その並べ替え後の出現頻度表を、１バイト符号数算出部１２３、１バイト符号対応表作成部１２４、及び、２バイト符号対応表作成部１２５に供給して、処理は、リターンする。
【０１８４】
なお、図９に示した出現頻度表には、便宜上、シンボル値及び出現頻度のセットを、出現頻度の大きい順に並べ替えた後の、出現頻度の順位も、図示してある。
【０１８５】
次に、図１０のフローチャートを参照して、図７のステップＳ１０６において、符号化部１２６（図５）が行う符号化処理について説明する。
【０１８６】
符号化処理では、ステップＳ１３１において、符号化部１２６が、シンボル値0x0000が連続する個数（回数）をカウントする変数ZEROに、初期値としての0をセットして、処理は、ステップＳ１３２に進む。
【０１８７】
ステップＳ１３２では、符号化部１２６が、記憶部１２１に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出して、処理は、ステップＳ１３３に進む。
【０１８８】
ステップＳ１３３では、符号化部１２６が、注目シンボルのシンボル値が、値0x0000であるかどうかを判定する。
【０１８９】
ステップＳ１３３において、注目シンボルのシンボル値が、値0x0000であると判定された場合、処理は、ステップＳ１３４に進み、符号化部１２６が、変数ZEROを１だけインクリメントする。
【０１９０】
そして、処理は、ステップＳ１３４からステップＳ１３２に戻り、符号化部１２６が、記憶部１２１に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出し、以下、ステップＳ１３３において、注目シンボルのシンボル値が、値0x0000でないと判定されるまで、ステップＳ１３２ないしＳ１３４の処理が繰り返される。
【０１９１】
ここで、以上のように、ステップＳ１３２ないしＳ１３４の処理が繰り返されることにより、変数ZEROを用いて、シンボル値0x0000が連続する個数がカウントされる。
【０１９２】
ステップＳ１３３において、注目シンボルのシンボル値が、値0x0000でないと判定された場合、処理は、ステップＳ１３５に進み、符号化部１２６は、変数ZEROが０より大であるかどうかを判定する。
【０１９３】
ステップＳ１３５において、変数ZEROが０より大であると判定された場合、すなわち、対象データにおいて、注目シンボル以前に、注目シンボルを含んで、シンボル値が値0x0000のシンボルが、ZERO個だけ連続している場合、処理は、ステップＳ１３６に進み、符号化部１２６は、そのZERO個だけ連続するシンボル値0x0000の符号化を行い、処理は、ステップＳ１３７に進む。ここで、ステップＳ１３６で行われる、シンボル値0x0000の符号化の処理の詳細については、図１１を参照して後述する。
【０１９４】
一方、ステップＳ１３５において、変数ZEROが０より大でないと判定された場合、処理は、ステップＳ１３７に進み、符号化部１２６は、値0x0000以外の値のシンボル値の符号化を行い、処理は、ステップＳ１３８に進む。ここで、ステップＳ１３７で行われる、値0x0000以外の値のシンボル値の符号化の処理の詳細については、図１２を参照して後述する。
【０１９５】
ステップＳ１３８では、符号化部１２６は、記憶部１２１に記憶された対象データの最後のシンボルまでを、注目シンボルとしたかどうかを判定する。
【０１９６】
ステップＳ１３８において、記憶部１２１に記憶された対象データの最後のシンボルまでを、まだ、注目シンボルとしていないと判定された場合、すなわち、記憶部１２１に記憶された対象データにおいて、まだ、注目シンボルとしていないシンボルがある場合、処理は、ステップＳ１３１に戻り、符号化部１２６は、上述したように、記憶部１２１に記憶された対象データから、まだ、注目シンボルとしていないシンボルのうちの、対象データの、より先頭の方向に位置するシンボルを、注目シンボルとして読み出し、以下、同様の処理を行う。
【０１９７】
また、ステップＳ１３８において、記憶部１２１に記憶された対象データの最後のシンボルまでを、注目シンボルとしたと判定された場合、すなわち、記憶部１２１に記憶された対象データのすべてが、シンボル単位で符号化され、その符号化によって得られる符号値の系列が、記憶部１２８（図５）に記憶された場合、処理は、リターンする。
【０１９８】
次に、図１１のフローチャートを参照して、図１０のステップＳ１３６において、符号化部１２６（図５）が行う、シンボル値0x0000の符号化の処理について説明する。
【０１９９】
ここで、シンボル値0x0000の符号化の処理が行われる場合というのは、図１０で説明したように、対象データにおいて、注目シンボル以前に、注目シンボルを含んで、シンボル値が値0x0000のシンボルが、ZERO個だけ連続しており、シンボル値0x0000の符号化の処理では、そのZERO個だけ連続するシンボル値0x0000（シンボル値0x0000のZERO個の連続）の符号化が行われる。
【０２００】
また、ここでは、説明を簡単にするために、対象データにおいて、シンボル値0x0000の出現頻度が高く、シンボル値0x0000は、１バイト符号の符号値0x00に符号化される、すなわち、図７のステップＳ１０３で１バイト符号対応表作成部１２４が作成する１バイト符号対応表において、符号値0x00に対応付けられていることとする。
【０２０１】
符号化部１２６は、ステップＳ１５１において、変数ZEROが、１バイトで表すことができる最大値255より大であるかどうかを判定する。
【０２０２】
ステップＳ１５１において、変数ZEROが値255より大であると判定された場合、ステップＳ１５２に進み、符号化部１２６は、ZERO個だけ連続するシンボル値0x0000のうちの、先頭から255個のシンボル値0x0000を、４バイト符号0xFE,0x00,0x00,0xFF(255)に符号化し、すなわち、ZERO個だけ連続するシンボル値0x0000のうちの、先頭から255個のシンボル値0x0000の符号化結果として、４バイト符号0xFE,0x00,0x00,0xFFを出力し、記憶部１２８に供給して記憶させる。
【０２０３】
ここで、４バイト符号に符号化することができるのは、最大で255個だけ連続するシンボル値0x0000であるため、255個を越えて連続するシンボル値0x0000は、まず、その先頭から255個のシンボル値0x0000が、プリフィクス0xFE,0x00,0x00である上位３バイトと、シンボル値0x0000が連続する個数である255(=0xFF)を表す下位１バイトとからなる４バイト符号0xFE,0x00,0x00,0xFFに符号化される。
【０２０４】
ステップＳ１５２の後、処理は、ステップＳ１５３に進み、符号化部１２６は、変数ZEROから、直前のステップＳ１５２で符号化されたシンボル値0x0000の255個の連続における、シンボル0x0000が連続する個数である255を減算し、その減算値を、変数ZEROにセットして、処理は、ステップＳ１５１に戻る。
【０２０５】
したがって、以下、直前のステップＳ１５２で行われた符号化の対象となっていない、シンボル値0x0000の連続を対象に、ステップＳ１５１以降の処理が行われる。
【０２０６】
一方、ステップＳ１５１において、変数ZEROが値255より大でないと判定された場合、すなわち、１回以上行われたステップＳ１５３の処理によって、変数ZEROが値255以下となるか、又は、変数ZEROが、元から、値255以下である場合、処理は、ステップＳ１５４に進み、符号化部１２６は、変数ZEROが８より大であるかどうかを判定する。
【０２０７】
ステップＳ１５４において、変数ZEROが８より大であると判定された場合、すなわち、図４で説明したように、シンボル値0x0000のZERO個の連続を、そのまま４バイト符号化した方が、１個のシンボル値0x0000と、シンボル値0x0000の２個の連続とに分けて、又は、複数の、シンボル値0x0000の２個の連続に分けて、１バイト符号化を行うよりも、圧縮率を向上させることができる場合、処理は、ステップＳ１５５に進み、符号化部１２６は、シンボル値0x0000のZERO個の連続を、プリフィクス0xFE,0x00,0x00である上位３バイトと、シンボル値0x0000が連続する個数ZEROを表す下位１バイトとからなるである４バイト符号0xFE,0x00,0x00,ZEROに符号化し、すなわち、シンボル値0x0000のZERO個の連続の符号化結果として、４バイト符号0xFE,0x00,0x00,ZEROを出力し、記憶部１２８に供給して記憶させる。そして、その後、処理は、リターンする。
【０２０８】
また、ステップＳ１５４において、変数ZEROが８より大でないと判定された場合、すなわち、シンボル値0x0000のZERO個の連続を、１個のシンボル値0x0000と、シンボル値0x0000の２個の連続とに分けて、若しくは、複数の、シンボル値0x0000の２個の連続に分けて、１バイト符号化した方が、そのまま４バイト符号化するよりも圧縮率を向上させることができる場合、又は、変数ZEROが１であり、したがって、現在の符号化の対象が、１個のシンボル値0x0000である場合、処理は、ステップＳ１５６に進み、符号化部１２６は、変数ZEROが奇数であるかどうかを判定する。
【０２０９】
ステップＳ１５６において、変数ZEROが奇数であると判定された場合、処理は、ステップＳ１５７に進み、符号化部１２６は、１バイト符号対応表作成部１２４からの１バイト符号対応表、さらには、必要に応じて、２バイト符号対応表作成部１２５からの２バイト符号対応表を参照し、対象データにおいて、注目シンボルからZERO-1個だけ前のシンボルのシンボル値0x0000を符号化する。
【０２１０】
ここで、いまの場合、シンボル値0x0000は、１バイト符号対応表において、符号値0x00に対応付けられていることとしているので、ステップＳ１５７では、符号化部１２６は、１バイト符号対応表を参照することにより、注目シンボルからZERO-1個だけ前のシンボルのシンボル値0x0000を、１バイト符号対応表においてシンボル値0x0000と対応付けられている符号値0x00に符号化する。
【０２１１】
そして、符号化部１２６は、注目シンボルからZERO-1個だけ前のシンボルのシンボル値0x0000を符号化した符号値0x00を、記憶部１２８に供給して記憶させ、処理は、ステップＳ１５７からステップＳ１５８に進む。
【０２１２】
一方、ステップＳ１５６において、変数ZEROが奇数でないと判定された場合、すなわち、変数ZEROが偶数である場合、処理は、ステップＳ１５７をスキップして、ステップＳ１５８に進み、符号化部１２６は、変数ZEROを２で除算した除算値（但し、小数点以下切り捨て）を、変数iにセットすることにより、シンボル値0x0000のZERO個の連続を、１個のシンボル値0x0000と、シンボル値0x0000の２個の連続とに分けた場合、又は、シンボル値0x0000の２個の連続だけに分けた場合に得られる、シンボル値0x0000の２個の連続の個数i、つまり、シンボル値0x0000のZERO個の連続に含まれる、シンボル値0x0000の２個の連続の個数iを求めて、処理は、ステップＳ１５９に進む。
【０２１３】
ステップＳ１５９では、符号化部１２６は、変数iが０であるかどうかを判定する。
【０２１４】
ステップＳ１５９において、変数iが０でないと判定された場合、処理は、ステップＳ１６０に進み、符号化部１２６は、対象データにおいて、注目シンボルから２×i-1個だけ前のシンボルと、その次のシンボルとからなる、シンボル値0x0000の２個の連続を、１バイト符号の特定値である符号値0xFFに符号化し、すなわち、シンボル値0x0000の２個の連続の符号化結果として、符号値0xFFを出力し、記憶部１２８に供給して記憶させる。
【０２１５】
その後、処理は、ステップＳ１６０からステップＳ１６１に進み、符号化部１２６は、変数iを１だけデクリメントし、処理は、ステップＳ１５９に戻る。
【０２１６】
そして、ステップＳ１５９において、変数iが０であると判定された場合、すなわち、シンボル値0x0000の符号化の処理において符号化の対象であった、シンボル値0x0000のZERO個の連続の符号化がすべて終了した場合、処理は、リターンする。
【０２１７】
次に、図１２のフローチャートを参照して、図１０のステップＳ１３７において、符号化部１２６（図５）が行う、値0x0000以外の値のシンボル値の符号化の処理について説明する。
【０２１８】
ステップＳ１８１において、符号化部１２６は、注目シンボルのシンボル値が、１バイト符号対応表作成部１２４からの１バイト符号対応表にあるかどうかを検索し、処理は、ステップＳ１８２に進む。
【０２１９】
ステップＳ１８２では、符号化部１２６は、ステップＳ１８１での１バイト符号対応表の検索の結果に基づき、１バイト符号対応表に、注目シンボルのシンボル値があったかどうかを判定する。
【０２２０】
ステップＳ１８２において、１バイト符号対応表に、注目シンボルのシンボル値があったと判定された場合、処理は、ステップＳ１８３に進み、符号化部１２６は、注目シンボルのシンボル値を、１バイト符号対応表において、そのシンボル値に対応付けられている１バイト符号の符号値に符号化する。さらに、符号化部１２６は、注目シンボルのシンボル値を符号化した符号値を、記憶部１２８に供給して記憶させ、処理は、リターンする。
【０２２１】
また、ステップＳ１８２において、１バイト符号対応表に、注目シンボルのシンボル値がなかったと判定された場合、処理は、ステップＳ１８４に進み、符号化部１２６は、注目シンボルのシンボル値が、２バイト符号対応表作成部１２５からの２バイト符号対応表にあるかどうかを検索して、処理は、ステップＳ１８５に進む。
【０２２２】
ステップＳ１８５では、符号化部１２６は、ステップＳ１８４での２バイト符号対応表の検索の結果に基づき、２バイト符号対応表に、注目シンボルのシンボル値があったかどうかを判定する。
【０２２３】
ステップＳ１８５において、２バイト符号対応表に、注目シンボルのシンボル値があったと判定された場合、処理は、ステップＳ１８６に進み、符号化部１２６は、注目シンボルのシンボル値を、２バイト符号対応表において、そのシンボル値に対応付けられている２バイト符号の符号値に符号化する。さらに、符号化部１２６は、注目シンボルのシンボル値を符号化した符号値を、記憶部１２８に供給して記憶させ、処理は、リターンする。
【０２２４】
ここで、２バイト符号対応表としては、図４で説明したように、２バイト符号の上位１バイトがとるXないし0xFDの範囲の各値ごとに、下位１バイトがとる値0x00ないし0xFFの範囲の各値と、シンボル値とを対応付ける、0xFD-X+1個の対応表が存在する。
【０２２５】
いま、注目シンボルのシンボル値があった２バイト符号対応表が、0xFD-X+1個の２バイト符号対応表のうちの、２バイト符号の上位バイトがn（n=X,X+1,・・・,0xFD）の２バイト符号対応表#nであったとすると、注目シンボルのシンボル値は、値nを上位１バイトとし、２バイト符号対応表#nにおいて注目シンボルのシンボル値と対応付けられている１バイトを下位１バイトとする２バイトが、注目シンボルの符号化した符号値となる。
【０２２６】
一方、ステップＳ１８５において、２バイト符号対応表に、注目シンボルのシンボル値がなかったと判定された場合、処理は、ステップＳ１８７に進み、符号化部１２６は、注目シンボルを、１バイトのプレフィクス0xFEを上位１バイトとし、注目シンボルの２バイトのシンボル値を下位２バイトとする３バイト符号に符号化する。そして、符号化部１２６は、注目シンボルのシンボル値を符号化した符号値を、記憶部１２８に供給して記憶させ、処理は、リターンする。
【０２２７】
次に、図１３は、図１の伸張装置１０３の構成例を示すブロック図である。
【０２２８】
図１３において、伸張装置１０３は、記憶部２０１、読み出し制御部２０２、１バイト符号対応表作成部２０３、２バイト符号対応表作成部２０４、復号部２０５、及び記憶部２０６等から構成される。
【０２２９】
記憶部２０１には、図５の圧縮装置１０１が出力する圧縮データが提供媒体１０２（図１）を介して供給される。記憶部２０１は、そこに供給される圧縮データを順次記憶する。
【０２３０】
読み出し制御部２０２は、記憶部２０１に記憶された圧縮データ（図６）を、その先頭から、１バイトを最小単位として読み出し、１バイト符号対応表作成部２０３、２バイト符号対応表作成部２０４、又は復号部２０５に、必要に応じて供給する。
【０２３１】
すなわち、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおける先頭の１バイトの１バイト符号数X（図６）を読み出し、１バイト符号対応表作成部２０３、２バイト符号対応表作成部２０４、及び復号部２０５に供給する。
【０２３２】
また、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおける、１バイト符号数Xの直後の２×Xバイトの１バイト符号情報（図６）を読み出し、１バイト符号対応表作成部２０３に供給する。
【０２３３】
さらに、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおける、１バイト符号情報の直後の８kバイトの２バイト符号情報（図６）を読み出し、２バイト符号対応表作成部２０４に供給する。
【０２３４】
また、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおける、２バイト符号情報の直後のボディ部に配置された符号値の系列を、１バイトずつ読み出し、復号部２０５に供給する。
【０２３５】
１バイト符号対応表作成部２０３は、読み出し制御部２０２からの１バイト符号数Xと１バイト符号情報とを用い、図４で説明した１バイト符号対応表を復元することにより作成して、復号部２０５に供給する。
【０２３６】
２バイト符号対応表作成部２０４は、読み出し制御部２０２からの１バイト符号数Xと２バイト符号情報とを用い、図４で説明した２バイト符号対応表を復元することにより作成して、復号部２０５に供給する。
【０２３７】
復号部２０５は、読み出し制御部２０２からの１バイト符号数X、１バイト符号対応表作成部２０３からの１バイト符号対応表、及び、２バイト符号対応表作成部２０４からの２バイト符号対応表に基づき、読み出し制御部２０２から、１バイトずつ供給される符号値の系列を、シンボル値（の系列）に復号する復号処理を行い、復号処理によって得られるシンボル値を、記憶部２０６に供給する。
【０２３８】
すなわち、復号部２０５は、１バイト符号数X、及び１バイト符号対応表、さらには、必要に応じて、２バイト符号対応表を参照し、読み出し制御部２０２から、１バイトずつ供給される符号値の系列における、１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、１バイトのシンボル値に復号する。
【０２３９】
また、復号部２０５は、１バイト符号の符号値のうちの特定値0xFFを、シンボル値0x0000の２個の連続に復号する。さらに、復号部２０５は、４バイト符号の符号値を、下位１バイトが表す個数だけのシンボル値0x0000の連続に復号する。
【０２４０】
記憶部２０６は、復号部２０５から供給されるシンボル値を順次記憶することにより、元の対象データを再構成して出力する。
【０２４１】
次に、図１４のフローチャートを参照して、図１３の伸張装置１０３が行う伸張処理について説明する。
【０２４２】
圧縮データ（図６）が、記憶部２０１に供給され、記憶部２０１が、そこに供給される圧縮データを記憶すると、伸張装置１０３は、伸張処理を開始する。
【０２４３】
すなわち、伸張処理では、ステップＳ２０１において、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおける先頭の１バイトの１バイト符号数X（図６）を読み出し、１バイト符号対応表作成部２０３、２バイト符号対応表作成部２０４、及び復号部２０５に供給して、処理は、ステップＳ２０２に進む。
【０２４４】
ステップＳ２０２では、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおける、１バイト符号数Xの直後の２×Xバイトの１バイト符号情報（図６）を読み出し、１バイト符号対応表作成部２０３に供給して、処理は、ステップＳ２０３に進む。
【０２４５】
ステップＳ２０３では、１バイト符号対応表作成部２０３は、読み出し制御部２０２からの１バイト符号数Xと１バイト符号情報とを用い、図４で説明した１バイト符号対応表を復元することにより作成して、復号部２０５に供給し、処理は、ステップＳ２０４に進む。
【０２４６】
ステップＳ２０４では、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおける、１バイト符号情報の直後の８kバイトの２バイト符号情報（図６）を読み出し、２バイト符号対応表作成部２０４に供給して、処理は、ステップＳ２０５に進む。
【０２４７】
ステップＳ２０５では、２バイト符号対応表作成部２０４は、読み出し制御部２０２からの１バイト符号数Xと２バイト符号情報とを用い、図４で説明した２バイト符号対応表、すなわち、0xFD-X+1個の２バイト符号対応表#X,#X+1,・・・,#0xFDを復元することにより作成して、復号部２０５に供給し、処理は、ステップＳ２０６に進む。
【０２４８】
ステップＳ２０６では、読み出し制御部２０２が、記憶部２０１に記憶された圧縮データにおける、２バイト符号情報の直後のボディ部に配置された符号値の系列を、１バイトずつ読み出して、復号部２０５に供給し、復号部２０５が、読み出し制御部２０２からの１バイト符号数X、１バイト符号対応表作成部２０３からの１バイト符号対応表、及び、２バイト符号対応表作成部２０４からの２バイト符号対応表に基づき、読み出し制御部２０２から、１バイトずつ供給される符号値の系列を、シンボル値に復号する復号処理を行う。そして、記憶部２０６が、復号部２０５の復号処理によって得られるシンボル値を順次記憶することにより、元の対象データを再構成して出力し、処理は、終了する。
【０２４９】
次に、図１５のフローチャートを参照して、復号部２０５が行う復号処理を含む、図１４のステップＳ２０６の処理の詳細について説明する。
【０２５０】
ステップＳ２２１において、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおいて、まだ読み出していない、より先頭側に位置する１バイトを、注目バイトαとして読み出し、復号部２０５に供給して、処理は、ステップＳ２２２に進む。
【０２５１】
ステップＳ２２２では、復号部２０５は、読み出し制御部２０２から注目バイトαが、特定値0xFFであるかどうかを判定する。
【０２５２】
ステップＳ２２２において、注目バイトαが特定値0xFFであると判定された場合、処理は、ステップＳ２２３に進み、復号部２０５は、注目バイトαである特定値0xFFを、シンボル値0x0000の２個の連続に復号し、すなわち、復号結果として、値0x0000を２つだけ連続して出力し、記憶部２０６に供給して記憶させる。
【０２５３】
一方、ステップＳ２２２において、注目バイトαが特定値0xFFでないと判定された場合、処理は、ステップＳ２２４に進み、復号部２０５は、注目バイトαが符号値0xFEであるかどうかを判定する。
【０２５４】
ステップＳ２２４において、注目バイトαが符号値0xFEであると判定された場合、すなわち、注目バイトαが、３バイト符号の上位１バイトのプリフィクス0xFEであるか、又は、４バイト符号の上位３バイトのプリフィクス0xFE,0x00,0x00のうちの上位１バイトである場合、処理は、ステップＳ２２５に進み、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおいて、注目バイトαの次に位置する１バイトβと、さらに次に位置する１バイトγとの２バイトを読み出し、復号部２０５に供給して、処理は、ステップＳ２２６に進む。
【０２５５】
ステップＳ２２６では、復号部２０５が、読み出し制御部２０２からの１バイトβが値0x00であり、かつ、読み出し制御部２０２からの１バイトγが値0x00であるかどうかを判定する。
【０２５６】
ステップＳ２２６において、バイトβ又はγのうちの少なくとも一方が、値0x00でないと判定された場合、すなわち、注目バイトα、その次の１バイトβ、及びさらに次の１バイトγの３バイトが、４バイト符号の上位３バイトのプリフィクス0xFE,0x00,0x00を構成しておらず、したがって、注目バイトα、その次の１バイトβ、及びさらに次のバイトγの３バイトが３バイト符号である場合、処理は、ステップ２２７に進み、復号部２０５は、注目バイトα、その次の１バイトβ、及びさらに次の１バイトγの３バイトからなる３バイト符号を、バイトβとγに復号し、すなわち、復号結果として、バイトβとγを順次出力し、記憶部２０６に供給して記憶させる。
【０２５７】
また、ステップＳ２２６において、バイトβ及びγが、いずれも、値0x00であると判定された場合、すなわち、注目バイトα、その次の１バイトβ、及びさらに次の１バイトγの３バイトが、４バイト符号の上位３バイトのプリフィクス0xFE,0x00,0x00を構成し、したがって、注目バイトα、バイトβ、及びバイトγの３バイトに、バイトγの次の１バイトδを加えた４バイトが、４バイト符号を構成している場合、処理は、ステップ２２８に進み、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおいて、バイトγの次に位置する１バイトδを読み出し、復号部２０５に供給して、処理は、ステップＳ２２９に進む。
【０２５８】
ステップＳ２２９では、復号部２０５は、注目バイトα、バイトβ，γ，δの４バイト符号を、シンボル値0x0000のδ個の連続に復号し、すなわち、復号結果として、値0x0000をδ個だけ連続して出力し、記憶部２０６に供給して記憶させる。
【０２５９】
一方、ステップＳ２２４において、注目バイトαが符号値0xFEでないと判定された場合、すなわち、注目バイトαが、特定値0xFF、及びプリフィクス0xFEのいずれでもない場合、処理は、ステップＳ２３０に進み、復号部２０５は、注目バイトαが、読み出し制御部２０２からステップＳ２０１（図１４）で供給された１バイト符号数Xより小さいかどうかを判定する。
【０２６０】
ステップＳ２３０において、注目バイトαが、１バイト符号数Xより小さいと判定された場合、すなわち、注目バイトαが、値X-1以下の値、つまり、１バイト符号の符号値である場合、処理は、ステップＳ２３１に進み、復号部２０５は、１バイト符号である注目バイトαを、１バイト符号対応表作成部２０３からステップＳ２０３（図１４）で供給された１バイト符号対応表で対応付けられているシンボル値に復号し、すなわち、復号結果として、１バイト符号対応表において、注目バイトαに対応付けられているシンボル値を出力し、記憶部２０６に供給して記憶させる。
【０２６１】
また、ステップＳ２３０において、注目バイトαが、１バイト符号数Xより小さくないと判定された場合、すなわち、注目バイトαと、その次の１バイトεとの２バイトが、２バイト符号を構成している場合、処理は、ステップ２３２に進み、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおいて、注目バイトαの次に位置する１バイトεを読み出し、復号部２０５に供給して、処理は、ステップＳ２３３に進む。
【０２６２】
ステップＳ２３３では、復号部２０５は、２バイト符号である注目バイトαと次の１バイトεとを、２バイト符号対応表作成部２０４からステップＳ２０５（図１４）で供給された２バイト符号対応表で対応付けられているシンボル値に復号する。
【０２６３】
すなわち、図１４で説明したように、２バイト符号対応表作成部２０４は、ステップＳ２０５において、0xFD-X+1個の２バイト符号対応表#X,#X+1,・・・,#0xFD（図４）を、復号部２０５に供給する。
【０２６４】
復号部２０５は、ステップＳ２３３において、２バイト符号対応表作成部２０４からの0xFD-X+1個の２バイト符号対応表#Xないし#0xFD（図４）のうちの、注目バイトαに対応する２バイト符号対応表#αを選択し、その２バイト符号対応表#αにおいて、注目バイトαと次の１バイトεとからなる２バイト符号の下位１バイトεと対応付けられているシンボル値を、復号結果として出力し、記憶部２０６に供給して記憶させる。
【０２６５】
ステップＳ２２３，Ｓ２２７，Ｓ２２９，Ｓ２３１、又はＳ２３３の後、処理は、ステップＳ２３４に進み、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データすべてを読み出したかどうかを判定する。
【０２６６】
ステップＳ２３４において、記憶部２０１に記憶された圧縮データすべてを、まだ、読み出していないと判定された場合、処理は、ステップＳ２２１に戻り、読み出し制御部２０２は、記憶部２０１に記憶された圧縮データにおいて、まだ読み出していない、より先頭側に位置する１バイトを、注目バイトαとして読み出して、復号部２０５に供給し、以下、同様の処理が繰り返される。
【０２６７】
また、ステップＳ２３４において、記憶部２０１に記憶された圧縮データすべてを読み出したと判定された場合、すなわち、記憶部２０６に、記憶部２０１に記憶された圧縮データを伸張した対象データが記憶された場合、処理は、リターンする。
【０２６８】
以上のように、圧縮装置１０１において、対象データを、２バイト単位で、符号化の対象であるシンボルとして、シンボル値の出現頻度を算出し、出現頻度が上位のシンボル値を１バイト符号に、出現頻度が次に上位のシンボル値を２バイト符号に、残りのシンボル値を３バイト符号に、シンボル値0x0000の２個の連続を１バイトの特定値0xFFに、それぞれ符号化する符号化処理を行うので、伸張装置１０３では、その符号化処理で得られる符号値の系列のうちの、１バイト符号、２バイト符号、又は３バイト符号それぞれの符号値を、２バイトのシンボル値に復号し、特定値0xFFを、0x0000の２個の連続に復号する復号処理を行うことで、圧縮データを元の対象データに伸張することができる。
【０２６９】
すなわち、伸張装置１０３では、圧縮データを、バイト単位で扱い、ビット演算をすることなく、伸張処理をすることができる。したがって、ビット演算を要する伸張処理を行う場合に比較して、処理の負荷が小さく、処理に要する時間を短縮することができる。つまり、圧縮データを、元の対象データに、高速に伸張することができる。
【０２７０】
ここで、以下、適宜、圧縮装置１０１による圧縮の方式、及び、伸張装置１０３による伸張の方式を、バイト方式という。
【０２７１】
図１６は、３２ビット固定長の命令セットで記述されたプログラムを対象データとして、その対象データを、バイト方式と、gzip(GNU zip)方式とのそれぞれで圧縮した圧縮データを伸張したシミュレーションの結果を示している。
【０２７２】
なお、シミュレーションは、伸張処理を行うプロセッサとして、２つのCPU#1と#2それぞれを用いて行った。
【０２７３】
圧縮データのデータ量は、図１６に示すように、バイト方式では、2492327であり、gzip方式では、1460510になった。したがって、バイト方式は、gzip方式と比較して、圧縮率が多少劣る。
【０２７４】
一方、伸張処理に要する時間は、図１６に示すように、バイト方式では、CPU#1による場合は0.080で、CPU#2による場合は0.80であり、gzip方式では、CPU#1による場合は0.130で、CPU#2による場合は1.53であった。したがって、バイト方式は、gzip方式と比較して、伸張処理に要する時間が格段に短い。
【０２７５】
以上から、バイト方式は、圧縮率は多少劣るものの、圧縮データを、高速に伸張することができることが分かる。
【０２７６】
次に、図１７は、本発明を適用したTVの一実施の形態の構成例を示している。
【０２７７】
図１７において、TVは、バス１１を介して相互に接続されているCPU１２，ROM(Read Only Memory)１３，RAM(Random Access Memory)１４、HD(Hard Disk)（HDドライブ）１５、不揮発性メモリ１６、ドライブ１７、受信部１９、チューナ２１、デスクランブラ２２、デマルチプレクサ(Demux)２３、デコーダ２４、出力制御部２５、および出力装置２６から構成されている。
【０２７８】
CPU１２は、ROM１３や、HD１５、不揮発性メモリ１６に記憶されたプログラムをバス１１を介して読み出して実行することにより、TVを構成する各ブロックを制御する。
【０２７９】
ROM１３は、CPU１２が実行するプログラム等を記憶している。RAM１４は、CPU１２が実行するプログラムや、CPU１２の動作上必要なデータを一時的に記憶する。HD１５には、CPU１２が実行するプログラムや、プログラムを実行する上で必要なデータ等が記録される。
【０２８０】
不揮発性メモリ１６は、例えば、TVの電源がオフにされても保持する必要のあるデータを記憶する。ここで、TVの電源がオフにされても保持する必要のあるデータとしては、例えば、電源がオフにされる直前にチューナ２１で選択（選局）されていたチャンネルを表すデータや、電源がオフにされる直前の音量を表すデータなどがある。TVの電源が次にオンにされたとき、不揮発性メモリに記憶されたデータに基づき、チャンネルの選択や音量の設定等が行われる。
【０２８１】
さらに、不揮発性メモリ１６は、CPU１２が実行する各種のプログラムを記憶する。図１７では、ブートローダ、OS(Operating System)、その他のアプリケーションプログラムが、不揮発性メモリ１６に記憶されている。
【０２８２】
ここで、不揮発性メモリ１６において、ブートローダは、圧縮せずに記憶されているが、OS、及びアプリケーションプログラムは、バイト方式で圧縮され、圧縮データの状態で記憶されている。また、ブートローダは、CPU１２を、図１３の伸張装置として機能させるプログラムを含んでいる。
【０２８３】
なお、不揮発性メモリ１６は、その他、例えば、デスクランブラ２２でのデスクランブルに使用される鍵などのデータも必要に応じて記憶する。
【０２８４】
ドライブ１７には、例えば、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory)，MO(Magneto Optical)ディスク，DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリなどのリムーバブル記録媒体１８の着脱が可能になっている。ドライブ１７は、そこに装着されたリムーバブル記録媒体１８に対するデータ等の読み書きを行う。
【０２８５】
受信部１９は、リモートコマンダ３１から赤外線等によって送信されてくる操作信号を受信する。即ち、リモートコマンダ３１は、ユーザによって操作されると、その操作に対応した操作信号を、例えば赤外線等の無線によって送信するようになっており、受信部１９は、このようにしてリモートコマンダ３１から送信されてくる操作信号を受信し、バス１１を介して、CPU１２に供給する。ここで、CPU１２は、受信部１９からの操作信号に応じて、チューナ２１によるチャンネルの選択等を制御する。
【０２８６】
チューナ２１には、図示せぬアンテナで受信されたディジタル放送の放送信号が供給される。チューナ２１は、バス１１を介してのCPU１２の制御にしたがい、そこに供給される放送信号から所望のチャンネルの放送信号を復調し、その復調の結果得られるパケット（の列）を、デスクランブラ２２に供給する。
【０２８７】
デスクランブラ２２は、バス１１を介してのCPU１２の制御にしたがい、チューナ２１から供給されるパケットにスクランブルがかけられている場合に、そのスクランブルを解くデスクランブルを必要に応じて行い、そのデスクランブル後のパケットを、デマルチプレクサ２３に供給する。
【０２８８】
デマルチプレクサ２３は、バス１１を介してのCPU１２の制御にしたがい、デスクランブラ２２から供給されるパケット（の列）から、必要なパケットを抽出し、画像データを含むパケットと音声データを含むパケットを、デコーダ２４に供給するとともに、データ放送のデータを含むパケットを、バス１１を介してCPU１２に供給する。
【０２８９】
デコーダ２４は、ビデオデコーダ２４Ｖとオーディオデコーダ２４Ａとを有し、バス１１を介してのCPU１２の制御にしたがい、デマルチプレクサ２３からのパケットに含まれるデータを、例えば、MPEG(Moving Picture Experts Group)方式等にしたがってデコードして、出力制御部２５に供給する。
【０２９０】
即ち、デコーダ２４において、ビデオデコーダ２４Ｖは、デマルチプレクサ２３からのパケットに含まれる画像データをデコードし、出力制御部２５の出力画像制御部２５Ｖに供給する。また、オーディオデコーダ２４Ａは、デマルチプレクサ２３からのパケットに含まれる音声データをデコードし、出力制御部２５の出力音声制御部２５Ａに供給する。
【０２９１】
出力制御部２５は、出力画像制御部２５Ｖと出力音声制御部２５Ａとを有し、バス１１を介してのCPU１２の制御にしたがい、出力装置２６への画像データと音声データの出力を制御する。
【０２９２】
即ち、出力画像制御部２５Ｖは、バス１１を介してのCPU１２の制御にしたがい、ビデオデコーダ２４Ｖからの画像データを処理して、出力装置２６の画像表示装置２６Ｖに供給する。
【０２９３】
出力音声制御部２５Ａは、バス１１を介してのCPU１２の制御にしたがい、オーディオデコーダ２４Ａからの音声データのレベルの調整等を行って、出力装置２６の音声出力装置２６Ａに供給する。
【０２９４】
出力装置２６は、画像表示装置２６Ｖと音声出力装置２６Ａとを有し、出力制御部２５からの画像データに対応する画像を表示するとともに、出力制御部２５からの音声データに対応する音声を出力する。
【０２９５】
即ち、画像表示装置２６Ｖは、例えば、CRT(Cathode Ray Tube)やLCD(Liquid Crystal Display)等のディスプレイで構成され、出力画像制御部２５Ｖからの画像データに対応する画像を表示する。
【０２９６】
音声出力装置２６Ａは、例えば、D/A(Digital/Analog)変換器とスピーカ等で構成され、出力音声制御部２５Ａからの音声データに対応する音声を出力する。
【０２９７】
以上のように構成されるTVでは、TVの電源がオンにされると、CPU１２が、不揮発性メモリ１６に記憶されたブートローダを実行する。CPU１２は、ブートローダを実行することにより、図１３の伸張装置１０３として機能して、復号処理を含む図１４で説明した処理を行うことにより、圧縮データとなっているOS、及び必要なアプリケーションプログラムを伸張し、そのOS、さらには、必要なアプリケーションプログラムを実行して、TVは起動状態となる。
【０２９８】
TVが起動状態となると、チューナ２１が、そこに供給される放送信号から所望のチャンネルの放送信号を復調し、その復調の結果得られるパケットを、デスクランブラ２２に供給する。デスクランブラ２２は、チューナ２１から供給されるパケットに対し、必要に応じて、デスクランブル処理を施し、デマルチプレクサ２３に供給する。
【０２９９】
デマルチプレクサ２３は、デスクランブラ２２から供給されるパケットから、必要なパケットを抽出し、画像データを含むパケットをビデオデコーダ２４Ｖに、音声データを含むパケットをオーディオデコーダ２４Ａに、データ放送のデータを含むパケットをCPU１２に、それぞれ供給する。
【０３００】
ビデオデコーダ２４Ｖは、デマルチプレクサ２３からのパケットに含まれる画像データをデコードし、出力画像制御部２５Ｖに供給する。オーディオデコーダ２４Ａは、デマルチプレクサ２３からのパケットに含まれる音声データをデコードし、出力音声制御部２５Ａに供給する。
【０３０１】
出力画像制御部２５Ｖは、所定の画面モードで画像が表示されるように、ビデオデコーダ２４Ｖからの画像データを処理し、画像表示装置２６Ｖに供給する。これにより、画像表示装置２６Ｖでは、画像が表示される。
【０３０２】
また、出力音声制御部２５Ａは、オーディオデコーダ２４Ａからの音声データを処理し、音声出力装置２６Ａに供給する。これにより、音声出力装置２６Ａでは、音声が出力される。
【０３０３】
上述したように、バイト方式の伸張処理は高速に行うことができるので、電源がオンにされてから、TVが起動状態となるまでの起動時間が短くなり、ユーザに煩わしさを感じさせることを防止することができる。
【０３０４】
ここで、CPU１２に実行させるプログラムは、ROM１３や、HD１５、不揮発性メモリ１６に予め記録しておくことができる他、リムーバブル記録媒体１８に、一時的あるいは永続的に格納（記録）し、いわゆるパッケージソフトウエアとして提供することができる。
【０３０５】
また、プログラムは、上述したようなリムーバブル記録媒体１８からTVにインストールする他、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、TVに無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、TVに有線で転送し、TVでは、そのようにして転送されてくるプログラムを、図示せぬ通信インタフェースで受信し、内蔵するハードディスク１５や不揮発性メモリ１６にインストールすることができる。
【０３０６】
ここで、本明細書において、コンピュータとしてのCPU１２に各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしも、後述するフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理（例えば、並列処理あるいはオブジェクトによる処理）も含むものである。
【０３０７】
また、プログラムは、１つのCPUにより処理されるものであっても良いし、複数のCPUによって分散処理されるものであっても良い。
【０３０８】
さらに、バイト方式の圧縮処理も、バイト方式の伸張処理と同様に、CPU１２を圧縮装置１０１として機能させるプログラムを、CPU１２に実行させることによって行うことが可能である。
【０３０９】
なお、バイト方式は、TVの他、例えば、STB(Set Top Box)等の、いわゆるディジタル家電その他の電気製品のブートローダで利用することができる。
【０３１０】
また、バイト方式は、ブートローダの他、圧縮率を多少犠牲にしても、圧縮したプログラムその他のデータを高速に伸張することを優先したい用途に、特に有用である。
【０３１１】
ここで、不揮発性メモリの記憶容量は、一般に、8MB(Mega Byte), 16MB, 32MB, ・・・といった２の累乗の値である。したがって、プログラム等を圧縮して、不揮発性メモリに記憶させる場合において、圧縮したプログラム等のサイズが、例えば、9MBであっても、16MBであっても、そのプログラム等を記憶させるには、16MBの不揮発性メモリが必要となる。
【０３１２】
つまり、圧縮率は高いが、伸張にビット演算が必要な従来の圧縮方式で圧縮したプログラム等のサイズが、例えば、9MBである場合において、バイト方式で圧縮したプログラム等のサイズが、9MBよりも多少大きい、例えば、10MBや11MB等となっても、プログラム等を記憶させるためには、16MBの不揮発性メモリが必要となることに変わりはない。したがって、バイト方式は、圧縮率を多少犠牲にするが、そのことに起因して、圧縮後のプログラム等を記憶させるのに、必ずしも、容量の大きい不揮発性メモリが必要になるとは限らない。
【０３１３】
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【０３１４】
すなわち、例えば、本実施の形態では、対象データとして、３２ビット固定長の命令セットで記述されたプログラムを採用したが、対象データとしては、その他、３２ビット固定長の命令セットで記述されたプログラムのように、シンボル長を２バイトとした場合に、１個のシンボル値0x0000の出現頻度が高く、かつ、シンボル値0x0000の２個の連続の出現頻度も高い性質を有するデータを採用することができる。
【図面の簡単な説明】
【０３１５】
【図１】本発明を適用した圧縮伸張システムの一実施の形態の構成例を示すブロック図である。
【図２】プログラムにおける各シンボル値の出現頻度の累積値（累積頻度）を示す図である。
【図３】プログラムにおける１個のシンボル値0x0000の出現頻度と、シンボル値0x0000が複数個だけ連続することが出現する出現頻度とを調査した調査結果を示す図である。
【図４】１バイト符号対応表と２バイト符号対応表とを示す図である。
【図５】圧縮装置１０１の構成例を示すブロック図である。
【図６】圧縮データのフォーマットを示す図である。
【図７】圧縮処理を説明するフローチャートである。
【図８】シンボル値の出現頻度を算出する処理を説明するフローチャートである。
【図９】シンボル出現頻度表を示す図である。
【図１０】符号化処理を説明するフローチャートである。
【図１１】シンボル値0x0000の符号化の処理を説明するフローチャートである。
【図１２】値0x0000以外の値のシンボル値の符号化の処理を説明するフローチャートである。
【図１３】伸張装置１０３の構成例を示すブロック図である。
【図１４】伸張処理を説明するフローチャートである。
【図１５】復号処理を説明するフローチャートである。
【図１６】シミュレーションの結果を示す図である。
【図１７】本発明を適用したTVの一実施の形態の構成例を示すブロック図である。
【符号の説明】
【０３１６】
１１  バス，  １２  CPU，  １３  ROM，  １４  RAM，  １５  HD，  １６  不揮発性メモリ，  １７  ドライブ，  １８  リムーバブル記録媒体，  １９  受信部，  ２１
チューナ，  ２２  デスクランブラ，  ２３  デマルチプレクサ，  ２４  デコーダ，
２４Ａ  オーディオデコーダ，  ２４Ｖ  ビデオデコーダ，  ２５  出力制御部，  ２５Ａ  出力音声制御部，  ２５Ｖ  出力画像制御部，  ２６  出力装置，  ２６Ａ  音声出力装置，  ２６Ｖ  画像表示装置，  ３１  リモートコマンダ，  １０１  圧縮装置，  １０２  提供媒体，  １０３  伸張装置，  １２１  記憶部，  １２２  出現頻度算出部，  １２３  １バイト符号数算出部，  １２４  １バイト符号対応表作成部，  １２５  ２バイト符号対応表作成部，  １２６  符号化部，  １２７  ヘッダ生成部，  １２８  記憶部，  １２９  圧縮データ生成部，  ２０１  記憶部，  ２０２  読み出し制御部，  ２０３  １バイト符号対応表作成部，  ２０４  ２バイト符号対応表作成部，  ２０５  復号部，  ２０６  記憶部
【図１】
2008227949.tif 000003
【図２】
2008227949.tif 000004
【図３】
2008227949.tif 000005
【図４】
2008227949.tif 000006
【図５】
2008227949.tif 000007
【図６】
2008227949.tif 000008
【図７】
2008227949.tif 000009
【図８】
2008227949.tif 000010
【図９】
2008227949.tif 000011
【図１０】
2008227949.tif 000012
【図１１】
2008227949.tif 000013
【図１２】
2008227949.tif 000014
【図１３】
2008227949.tif 000015
【図１４】
2008227949.tif 000016
【図１５】
2008227949.tif 000017
【図１６】
2008227949.tif 000018
【図１７】
2008227949.tif 000019