(57)【要約】  符号化・復号化装置（１０）の符号化部（４０）が有する生成部（４２）は、符号化対象の数値を、８進数表現の数値符号に符号化すると共に、符号化対象の数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。
2017056327.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）の数値符号に符号化すると共に、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する
処理を実行させることを特徴とする符号化プログラム。
【請求項２】
前記生成する処理は、桁数の順に、先頭のビットから各ビットに桁数が対応付けられ、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項３】
前記コンピュータに、
複数の前記符号化対象の数値をそれぞれ２ｎ進数表現した桁数ごとに出現頻度を算出する処理をさらに実行させ、
前記生成する処理は、前記算出された出現頻度の多い桁数の順に、先頭のビットから桁数が対応付けられ、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項４】
コンピュータが、
符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）の数値符号に符号化すると共に、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する
処理を実行することを特徴とする符号化方法。
【請求項５】
符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）の数値符号に符号化すると共に、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する生成部
を有することを特徴とする符号化装置。
【請求項６】
コンピュータに、
符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）で符号化した数値符号と共に、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号が付加された符号データの前記瞬時符号から２ｎ進数表現での桁数を識別し、
識別した桁数に応じて、前記数値符号をｎビット単位で数値に復号化する
処理を実行させることを特徴とする復号化プログラム。
【請求項７】
コンピュータが、
符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）で符号化した数値符号と共に、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号が付加された符号データの前記瞬時符号から２ｎ進数表現での桁数を識別し、
識別した桁数に応じて、前記数値符号をｎビット単位で数値に復号化する
処理を実行させることを特徴とする復号化方法。
【請求項８】
符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）で符号化した数値符号と共に、前記符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号が付加された符号データの前記瞬時符号から２ｎ進数表現での桁数を識別する識別部と、
前記識別部により識別された桁数に応じて、前記数値符号をｎビット単位で数値に復号化する復号部と、
を有することを特徴とする復号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置に関する。
【背景技術】
【０００２】
例えば、可変長のビット表現で数値を表す技術がある。可変長のビット表現で数値を表す場合、数値の大きさと有効桁数に応じて、数値を表すデータの符号長が決まる。例えば、数値のビット表現の単位をｎビット単位とし、数値を表すデータの先頭ｍビットを有効桁数とした場合、２ｎ進数による２ｍ−１桁で数値を表すことができる。例えば、数値のビット表現の単位を３ビット単位（８進数）とし、数値を表すデータの先頭３ビットを有効桁数として、数値を表す場合を考える。０〜７の数値は、８進数の１桁で表現できる。よって、０〜７の数値は、数値を表すデータの符号長が、有効桁数を１桁とした先頭の３ビット（001）と数値部分の３ビットの合計６ビットになる。一方、有効桁数を７桁とした場合、８進数で７桁の数値を表現できる。８進数で７桁の数値は、数値を表すデータの符号長が、有効桁数を７桁とした先頭の３ビット（111）と、数値部分の２１ビットの合計２４ビットになる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−２７３６６１号公報
【特許文献２】特開昭６３−２６９６２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、一般的に、数値は、文書等に出現する出現頻度が数値の大きさに反比例する傾向がある。例えば、数値は、「１」などの１桁の数値の出現頻度が高く、数値の桁数が大きくなるほど出現頻度が低くなる。このため、小さい数値を短い符号長で表現できると、データを小さく圧縮できる。【０００５】
しかしながら、上述した従来技術では、数値を圧縮したデータに有効桁数を表すｍビットが付加されるため、小さい数値の符号長が長くなり、データを高い圧縮率で圧縮できない場合がある。【０００６】
一つの側面では、データを高い圧縮率で圧縮できる符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
第１の案では、符号化プログラムは、コンピュータに、符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）の数値符号に符号化すると共に、符号化対象の数値を２ｎ進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。
【発明の効果】
【０００８】
本発明の１実施態様によれば、データを高い圧縮率で圧縮できるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、数値の符号化の流れを概略的に示した図である。
【図２】図２は、数値の復号化の流れを概略的に示した図である。
【図３】図３は、実施例１に係る符号化・復号化装置の構成の一例を示す図である。
【図４Ａ】図４Ａは、本実施例の符号化の手法により数値を８進数表現で符号化した一例を示す図である。
【図４Ｂ】図４Ｂは、従来技術の可変長のビット表現により数値を符号化した一例を示す図である。
【図５】図５は、数値の出現頻度の変化を概略的に示した図である。
【図６】図６は、瞬時符号の判定に用いるハフマン木の一例を示す図である。
【図７】図７は、瞬時符号の判定に用いるハフマン木の一例を示す図である。
【図８Ａ】図８Ａは、実施例１に係る符号化処理の手順の一例を示すフローチャートである。
【図８Ｂ】図８Ｂは、実施例１に係る復号化処理の手順の一例を示すフローチャートである。
【図９】図９は、実施例２に係る符号化・復号化装置の構成の一例を示す図である。
【図１０】図１０は、瞬時符号の判定に用いるハフマン木の一例を示す図である。
【図１１Ａ】図１１Ａは、実施例２に係る符号化処理の手順の一例を示すフローチャートである。
【図１１Ｂ】図１１Ｂは、実施例２に係る復号化処理の手順の一例を示すフローチャートである。
【図１２】図１２は、本実施例の符号化の手法により数値を４進数表現で符号化した一例を示す図である。
【図１３】図１３は、本実施例の符号化の手法により数値を１６進数表現で符号化した一例を示す図である。
【図１４】図１４は、符号化プログラムを実行するコンピュータの一例を示す図である。
【図１５】図１５は、復号化プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの権利範囲が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１１】
［符号化処理］
最初に、図１を用いて、実施例１に係る符号化・復号化装置１０が実施する数値の符号化処理の概要について説明する。図１は、数値の符号化の流れを概略的に示した図である。対象ファイル３０は、複数の数値のデータが含まれている。例えば、対象ファイル３０は、所定の区切り文字により区切られて複数の数値のデータが記憶されている。図１の例では、符号化・復号化装置１０が、圧縮処理の対象である対象ファイル３０に含まれる「・・・，１，７，４０９６，・・・」を符号化する場合を例に説明する。図１の例では、対象ファイル３０に記憶された数値を１０進数表記で示している。対象ファイル３０には、区切り文字「，」（カンマ）により「１」、「７」、「４０９６」の数値が区切られて記憶されている。なお、図１に示した対象ファイル３０は、一例であり、これに限定されるものではない。【００１２】
符号化・復号化装置１０の符号化部４０は、対象ファイル３０から数値を順に読み出す（図１（１））。図１の例では、「１」、「７」、「４０９６」の数値をそれぞれ順に読み出す。符号化部４０は、読み出した数値をそれぞれ符号に変換する（図１（２））。例えば、符号化部４０は、数値のビット表現の単位を３ビット単位とした８進数表現の数値符号に数値を符号化すると共に、数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データに変換する。例えば、符号化部４０は、１０進数の数値を８進数の数値に変換する。図１の例では、１０進数の数値「１」は、８進数で数値「１」となる。１０進数の数値「７」は、８進数で数値「７」となる。１０進数の数値「４０９６」は、８進数で数値「１００００」となる。１０進数の数値「１」、「７」は、８進数でも１桁となる。一方、１０進数の数値「４０９６」は、８進数で５桁となる。符号化部４０は、８進数の数値をビットに符号化する。例えば、符号化部４０は、８進数の数値のそれぞれの桁の値を３ビットに符号化する。図１の例では、８進数の数値「１」は、「００１」となる。８進数の数値「７」は、「１１１」となる。８進数の数値「１００００」は、「００１００００００００００００」となる。符号化部４０は、数値を符号化した数値符号の先頭に、８進数での数値の桁数を示した瞬時符号を付加する。本実施例では、瞬時符号には、桁数の順に、先頭のビットから各ビットに桁数を対応付ける。瞬時符号は、８進数での数値の桁数分のビット数とされ、数値の桁数に対応したビットに「０」がセットされ、数値の桁数に対応しないビットに「１」がセットされる。これにより、瞬時符号は、先頭ビットから順に「０」が出現するまでのビット数をカウントすることにより、「０」が出現したタイミングで桁数を識別できる。例えば、図１では、１０進数の数値「１」、「７」は、８進数で１桁であるため、瞬時符号が「０」とされている。一方、１０進数の数値「４０９６」は、８進数で５桁であるため、瞬時符号が「１１１１０」とされている。瞬時符号は、先頭からビットの値を判別し、「０」が出現したビット数から桁数を識別できる。例えば、１ビット目に「０」が出現した場合、数値が１桁であると識別できる。また、先頭から５ビット目に「０」が出現した場合、数値が５桁であると識別できる。符号化部４０は、数値を符号化した数値符号の前に、当該数値の瞬時符号を付加する。図１の例では、１０進数の数値「１」は、「００１」の前に、瞬時符号「０」が付加されて「０００１」と符号化される。１０進数の数値「７」は、「１１１」の前に、瞬時符号「０」が付加されて「０１１１」と符号化される。１０進数の数値「４０９６」は、「００１００００００００００００」の前に、瞬時符号「１１１１０」が付加されて「１１１１０００１００００００００００００」と符号化される。このように、１０進数の数値「１」や「７」は、瞬時符号の１ビットと数値部分の３ビットの合計４ビットに符号化される。また、１０進数の数値「４０９６」は、瞬時符号の５ビットと数値部分の１５ビットの合計２０ビットに符号化される。符号化部４０は、８進数の数値を符号化した数値符号の前に、瞬時符号を付加した符号データを出力する（図１（３））。図１の例では、符号化部４０は、それぞれの符号データを符号化ファイル３１に格納する。このように、符号化部４０は、小さい数値を短い符号長の符号に圧縮できる。これにより、符号化部４０は、データを高い圧縮率で圧縮できる。【００１３】
［復号化処理］
次に、図２を用いて、実施例１に係る符号化・復号化装置１０が実施する数値の復号化処理の概要について説明する。図２は、数値の復号化の流れを概略的に示した図である。符号化・復号化装置１０の復号化部５０は、符号化ファイル３１から数値の符号データを順に読み出す（図２（１））。図２の例では、図１にて符号化された「０００１」、「０１１１」、「１１１１０００１００００００００００００」をそれぞれ読み出す。復号化部５０は、読み出した各符号データを復号化する（図２（２））。例えば、復号化部５０は、読み出した各符号データをそれぞれ先頭のビットから順に「０」が出現するまでのビット数をカウントして、瞬時符号の桁数を識別する。図２の例では、「０００１」は、先頭の１ビット目が「０」であることから１桁と識別される。「０１１１」も、先頭の１ビット目が「０」であることから１桁と識別される。「１１１１０００１００００００００００００」は、先頭から５ビット目が「０」であることから５桁と識別される。復号化部５０は、符号データから瞬時符号を分離して数値部分の符号を抽出し、瞬時符号から識別した桁数に応じたビット単位で数値部分の符号を数値に復号化する。図２の例では、「０００１」は、先頭の瞬時符号「０」を除いて数値部分の符号「００１」が分離され、８進数の数値「１」や１０進数の数値「１」に復号化される。「０１１１」は、先頭の瞬時符号「０」を除いて数値部分の符号「１１１」が分離され、８進数の数値「７」や１０進数の数値「７」に復号化される。「１１１１０００１００００００００００００」は、先頭の瞬時符号「１１１１０」を除いて数値部分の符号「００１００００００００００００」が分離され、８進数の数値「１００００」や１０進数の数値「４０９６」に復号化される。このように、復号化部５０は、短い符号長に符号化された符号データを元の数値に復元できる。【００１４】
［装置構成］
次に、符号化・復号化装置１０の構成について説明する。図３は、実施例１に係る符号化・復号化装置の構成の一例を示す図である。符号化・復号化装置１０は、対象ファイル３０の圧縮などの符号化、および、圧縮されたデータの復号化を行う装置である。符号化・復号化装置１０は、例えば、パーソナルコンピュータ、サーバコンピュータなどのコンピュータや、タブレット端末、スマートフォンなどの情報処理装置である。符号化・復号化装置１０は、１台のコンピュータとして実装してもよく、また、複数台のコンピュータによるクラウドとして実装することもできる。なお、本実施例では、符号化・復号化装置１０を１台のコンピュータとした場合を例として説明する。図３に示すように、符号化・復号化装置１０は、記憶部２０と、制御部２１とを有する。なお、符号化・復号化装置１０は、コンピュータや情報処理装置が有する上記の機器以外の他の機器を有してもよい。【００１５】
記憶部２０は、ハードディスク、ＳＳＤ（Solid  State  Drive）、光ディスクなどの記憶装置である。なお、記憶部２０は、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ、ＮＶＳＲＡＭ（Non  Volatile  Static  Random  Access  Memory）などのデータを書き換え可能な半導体メモリであってもよい。【００１６】
記憶部２０は、制御部２１で実行されるＯＳ（Operating  System）や各種プログラムを記憶する。例えば、記憶部２０は、後述する圧縮処理を行うプログラムを記憶する。さらに、記憶部２０は、制御部２１で実行されるプログラムで用いられる各種データを記憶する。例えば、記憶部２０は、対象ファイル３０と、符号化ファイル３１とを記憶する。【００１７】
対象ファイル３０は、符号化対象の数値が記憶されたファイルである。符号化ファイル３１は、対象ファイル３０の数値を符号化処理したデータである。【００１８】
制御部２１は、符号化・復号化装置１０を制御するデバイスである。制御部２１としては、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等の電子回路や、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路を採用できる。制御部２１は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部２１は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、制御部２１は、符号化部４０と、復号化部５０とを有する。【００１９】
符号化部４０は、対象ファイル３０から数値を抽出し、抽出した数値単位に、数値を符号化した符号化ファイル３１を生成する。符号化部４０は、抽出部４１と、生成部４２と、出力部４３とを有する。【００２０】
抽出部４１は、対象ファイル３０の数値の抽出を行う。例えば、抽出部４１は、対象ファイル３０からデータを読み出し、読み出したデータから数値を抽出する。【００２１】
生成部４２は、抽出部４１により抽出された各数値に対応した符号データを生成する。例えば、生成部４２は、抽出された数値を８進数表現の数値符号に数値を符号化すると共に、数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。例えば、生成部４２は、抽出された数値を８進数の数値に変換する。生成部４２は、８進数の数値のそれぞれの桁の値を３ビットに符号化する。生成部４２は、８進数の数値を符号化した数値符号の先頭に、８進数での数値の桁数を示した瞬時符号を付加して符号データを生成する。【００２２】
出力部４３は、生成部４２により生成された符号データを出力する。例えば、出力部４３は、抽出部４１により抽出された各数値に対応して、生成部４２により生成された符号データを符号化ファイル３１に出力して格納する。【００２３】
復号化部５０は、符号化ファイル３１の復号化を行う。復号化部５０は、識別部５１と、復号部５２とを有する。【００２４】
識別部５１は、符号化ファイル３１に格納された符号データを順に読み出す。識別部５１は、読み出した各符号データをそれぞれ先頭のビットから順に「０」が出現するまでのビット数をカウントして、瞬時符号の桁数を識別する。このように瞬時符号の桁数を識別することにより、識別部５１は、「０」が出現したタイミングで以降のビットを確認することなく、桁数を識別できる。【００２５】
復号部５２は、符号化ファイル３１から読み出した各符号データの数値を復元する。例えば、復号部５２は、符号データから瞬時符号を分離して数値部分の符号を抽出する。そして、復号部５２は、瞬時符号から識別した桁数に応じて、数値部分の符号を３ビット単位で数値に復号化する。【００２６】
ここで、数値を記憶領域に記憶する形式には、整数型などのデータ型がある。例えば、数値に対してデータ型を定義してメモリなどの記憶領域に記憶させる場合、記憶領域には、データ型に応じたサイズの領域が確保される。例えば、３２ビットの整数型で数値「１」を記憶させる場合、数値ごとに３２ビットの記憶領域が使用される。また、数値に対してデータ型を定義する場合、データ型に対応した範囲の数値しか記憶できない。例えば、符号なしの３２ビットの整数型では、０〜４２９４９６７２９５の範囲の数値しか記憶できない。３２ビットの整数型の範囲より大きい数値を記憶する場合、よりビット数の多い整数型で数値を記憶させることになり、数値ごとにより多くの記憶領域が使用される。一般的に、数値は、文書等に出現する出現頻度が数値の大きさに反比例する傾向がある。しかし、最大の数値に合わせて数値のデータ型を定めた場合、数値で使用される記憶領域が無駄に大きくなってしまう。例えば、複数出現する数値の１つの数値が３２ビットの整数型の範囲に入らないため、数値を６４ビットの整数型とした場合、数値ごとに６４ビットの領域が確保されるため、数値用に確保される記憶領域のサイズが無駄に大きくなる。【００２７】
一方、本実施例の符号化の手法では、小さい数値を短い符号に符号化でき、データサイズを圧縮できる。図１の例では、１０進数の数値「１」〜「７」を４ビットで記憶できる。また、本実施例の符号化の手法では、瞬時符号により桁数を変えることができる。このため、数値は、数値の大きさに応じた符号長の符号に変換される。すなわち、本実施例の符号化の手法では、小さい数値が短い符号長の符号に変換され、大きい数値ほど長い符号長の符号に変換される。よって、本実施例の符号化の手法では、数値用に確保される記憶領域のサイズが無駄に大きくなることを抑制できる。さらに、本実施例の符号化の手法では、瞬時符号で表現できる桁数に上限が無い。よって、本実施例の符号化の手法では、符号化可能な数値に上限がない。すなわち、どのように大きい数値でも符号化して記憶できる。【００２８】
次に、本実施例の符号化の手法と、従来技術の可変長のビット表現で数値を符号化する場合を比較する。図４Ａは、本実施例の符号化の手法により数値を８進数表現で符号化した一例を示す図である。図４Ａの例は、数値のビット表現の単位を３ビット単位とした８進数表現の数値符号に数値を符号化し、数値を８進数表現した際の桁数を示した瞬時符号を付加して符号化した符号が示されている。図４Ａの例は、８進数で１桁の数値は、４ビットに符号化される。例えば、８進数の数値「７」は、瞬時符号「０」と数値部分の符号「１１１」の合計４ビットに符号化される。８進数で２桁の数値は、８ビットに符号化される。例えば、８進数の数値「７７」は、瞬時符号「１０」と数値部分の符号「１１１１１１」の合計８ビットに符号化される。８進数で３桁の数値は、１２ビットに符号化される。例えば、８進数の数値「７７７」は、瞬時符号「１１０」と数値部分の符号「１１１１１１１１１」の合計１２ビットに符号化される。８進数で４桁の数値は、１６ビットに符号化される。例えば、８進数の数値「７７７７」は、瞬時符号「１１１０」と数値部分の符号「１１１１１１１１１１１１」の合計１６ビットに符号化される。８進数で５桁の数値は、２０ビットに符号化される。例えば、８進数の数値「７７７７７」は、瞬時符号「１１１１０」と数値部分の符号「１１１１１１１１１１１１１１１」の合計２０ビットに符号化される。８進数で６桁の数値は、２４ビットに符号化される。例えば、８進数の数値「７７７７７７」は、瞬時符号「１１１１１０」と数値部分の符号「１１１１１１１１１１１１１１１１１１」の合計２４ビットに符号化される。８進数で７桁の数値は、２８ビットに符号化される。例えば、８進数の数値「７７７７７７７」は、瞬時符号「１１１１１１０」と数値部分の符号「１１１１１１１１１１１１１１１１１１１１１」の合計２８ビットに符号化される。【００２９】
一方、図４Ｂは、従来技術の可変長のビット表現により数値を符号化した一例を示す図である。図４Ｂの例は、先頭３ビットを有効桁数として、８進数表現の数値符号に数値を符号化した符号が示されている。図４Ｂの例は、８進数で１桁の数値は、６ビットに符号化される。例えば、８進数の数値「７」は、有効桁数が１桁であることを示した先頭の３ビット「００１」と数値部分の符号「１１１」の合計６ビットに符号化される。８進数で２桁の数値は、９ビットに符号化される。例えば、８進数の数値「７７」は、有効桁数が２桁であることを示した先頭の３ビット「０１０」と数値部分の符号「１１１１１１」の合計９ビットに符号化される。８進数で３桁の数値は、１２ビットに符号化される。例えば、８進数の数値「７７７」は、有効桁数が３桁であることを示した先頭の３ビット「０１１」と数値部分の符号「１１１１１１１１１」の合計１２ビットに符号化される。８進数で４桁の数値は、１５ビットに符号化される。例えば、８進数の数値「７７７７」は、有効桁数が３桁であることを示した先頭の３ビット「１００」と数値部分の符号「１１１１１１１１１１１１」の合計１５ビットに符号化される。８進数で５桁の数値は、１８ビットに符号化される。例えば、８進数の数値「７７７７７」は、有効桁数が３桁であることを示した先頭の３ビット「１０１」と数値部分の符号「１１１１１１１１１１１１１１１」の合計１８ビットに符号化される。８進数で６桁の数値は、２１ビットに符号化される。例えば、８進数の数値「７７７７７７」は、有効桁数が３桁であることを示した先頭の３ビット「１１０」と数値部分の符号「１１１１１１１１１１１１１１１１１１」の合計２１ビットに符号化される。８進数で７桁の数値は、２４ビットに符号化される。例えば、８進数の数値「７７７７７７７」は、有効桁数が３桁であることを示した先頭の３ビット「１１１」と数値部分の符号「１１１１１１１１１１１１１１１１１１１１１」の合計２４ビットに符号化される。【００３０】
図４Ａ、４Ｂに示すように、本実施例の符号化の手法は、８進数で数値の有効桁数１桁、２桁の場合、従来技術の符号化の手法よりも符号が短くなる。一方、本実施例の符号化の手法は、８進数で数値の有効桁数４桁以上の場合、従来技術の符号化の手法よりも符号が長くなる。【００３１】
ところで、一般的に、数値は、文書等に出現する出現頻度が数値の大きさに反比例する傾向がある。図５は、数値の出現頻度の変化を概略的に示した図である。図５に示すように、数値は、「１」などの１桁の数値の出現頻度が高く、数値の桁数が大きくなるほど出現頻度が低くなる。データの圧縮では、出現頻度の高いデータに短い符号を割当てると、圧縮率が高くなる。よって、本実施例の符号化の手法により、出現頻度の高い、小さい数値を短い符号に変換することにより、全体としてデータを小さく圧縮できる。【００３２】
なお、本実施例では、瞬時符号の各ビットについて、数値の桁数に対応したビットに「０」をセットし、数値の桁数に対応しないビットに「１」をセットする場合について説明したが、瞬時符号はこれに限定されるものではない。例えば、特定のビット数において、数値の桁数に対応したビットに「１」をセットし、数値の桁数に対応しないビットに「０」をセットしてもよい。図６は、瞬時符号の判定に用いるハフマン木の一例を示す図である。図６に示すハフマン木に従って、瞬時符号の先頭ビットから順に各ビットの値を判定して桁数を判定する。例えば、瞬時符号の１ビット目が「０」の場合、ハフマン木では、最初の葉に到達するため、桁数が１桁と判定される。瞬時符号の１ビット目が「１」の場合、ハフマン木では、最初の節に到達し、１ビット目が「０」であるか「１」であるかを判定する。瞬時符号の２ビット目が「０」の場合、ハフマン木では、２番目の葉に到達して、桁数が２桁と判定される。このハフマン木において、特定のビット数において、数値の桁数に対応したビットを「１」とし、数値の桁数に対応しないビットに「０」として判定を行うことにより、桁数を判別できる。【００３３】
また、瞬時符号は、表現可能な桁数に上限を設け、最上位のビットに２桁を対応付けてもよい。図７は、瞬時符号の判定に用いるハフマン木の一例を示す図である。図７の例は、表現可能な桁数の上限を７桁とした場合を示している。瞬時符号は、数値の桁数が６桁の場合、上位から６ビット目を「０」とし、数値の桁数が７桁の場合、上位から６ビット目を「１」とすることで、６ビットで７桁までを表すことができる。このように、瞬時符号に表現可能な桁数に上限を設け、瞬時符号の上限桁数−１番目のビットに、上限桁数−１桁と、上限桁数とを対応付けることにより、上限桁数に対応する瞬時符号を１ビット短くできる。【００３４】
［処理の流れ］
実施例１に係る符号化・復号化装置１０が対象ファイル３０を符号化して圧縮する符号化処理の流れについて説明する。図８Ａは、実施例１に係る符号化処理の手順の一例を示すフローチャートである。この符号化処理は、所定のタイミング、例えば、対象ファイル３０を指定して符号化開始を指示する所定操作が行われたタイミングで実行される。【００３５】
図８Ａに示すように、抽出部４１は、対象ファイル３０からデータを読み出し、読み出したデータから数値を抽出する（Ｓ１０）。生成部４２は、抽出した数値に対応した符号データを生成する（Ｓ１１）。例えば、生成部４２は、抽出した数値を８進数表現の数値符号に符号化すると共に、数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。出力部４３は、生成した符号データを出力する（Ｓ１２）。例えば、出力部４３は、数値に対応して生成された符号データを符号化ファイル３１に出力して格納する。【００３６】
抽出部４１は、対象ファイル３０から全データの読み出しが完了したか否かを判定する（Ｓ１３）。読み出しが完了していない場合（Ｓ１３否定）、上述のＳ１０へ移行する。【００３７】
一方、読み出しが完了した場合（Ｓ１３肯定）、処理を終了する。【００３８】
次に、実施例１に係る符号化・復号化装置１０が符号化ファイル３１に記憶された符号データを復号化する復号化処理の流れについて説明する。図８Ｂは、実施例１に係る復号化処理の手順の一例を示すフローチャートである。この復号化処理は、所定のタイミング、例えば、符号化ファイル３１を指定して復号化開始を指示する所定操作が行われたタイミングで実行される。【００３９】
図８Ｂに示すように、識別部５１は、符号化ファイル３１に格納された符号データを読み出す（Ｓ３０）。識別部５１は、読み出した符号データをそれぞれ先頭のビットから順に「０」が出現するまでのビット数をカウントして、瞬時符号の桁数を識別する（Ｓ３１）。【００４０】
復号部５２は、符号データから瞬時符号を分離し、分離した数値部分の符号を識別した桁数に応じて３ビット単位で数値に復号化する（Ｓ３２）。【００４１】
識別部５１は、符号化ファイル３１から全データの読み出しが完了したか否かを判定する（Ｓ３３）。読み出しが完了していない場合（Ｓ３３否定）、上述のＳ３０へ移行する。【００４２】
一方、読み出しが完了した場合（Ｓ３３肯定）、処理を終了する。【００４３】
［効果］
上述してきたように、本実施例に係る符号化・復号化装置１０は、符号化対象の数値を、８進数表現の数値符号に符号化すると共に、符号化対象の数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。これにより、符号化・復号化装置１０は、小さい数値を短い符号長の符号に圧縮できる。これにより、符号化・復号化装置１０は、データを高い圧縮率で圧縮できる。【００４４】
また、本実施例に係る符号化・復号化装置１０は、桁数の順に、先頭のビットから各ビットに桁数が対応付けられ、符号化対象の数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。これにより、符号化・復号化装置１０は、８進数表現で桁数の小さい数値に対して、短い符号長の瞬時符号を生成できる。【００４５】
また、本実施例に係る符号化・復号化装置１０は、符号データの瞬時符号から８進数表現での桁数を識別する。符号化・復号化装置１０は、識別した桁数に応じて、符号データの数値符号を３ビット単位で数値に復号化する。これにより、符号化・復号化装置１０は、符号データとして符号化された数値を復元できる。
【実施例２】
【００４６】
次に、実施例２ついて説明する。図９は、実施例２に係る符号化・復号化装置の構成の一例を示す図である。なお、上述の実施例１に係る符号化・復号化装置１０と同一の部分については、同一の符号を付して、主に異なる部分について説明する。【００４７】
符号化部４０は、算出部４４をさらに有する。算出部４４は、対象ファイル３０に含まれる数値をそれぞれ８進数表現した桁数ごとに出現頻度を算出する。例えば、算出部４４は、抽出部４１により抽出された各数値を８進数表現に変換して、８進数での数値の桁数ごとに、出現回数をカウントする。例えば、算出部４４は、対象ファイル３０に、８進数表現で１桁の数値が１００個、８進数表現で２桁の数値が１０００個含まれる場合、１桁の数値の出現回数を１００回、２桁の数値の出現回数を１０００回とカウントする。【００４８】
生成部４２は、抽出部４１により抽出された数値を８進数表現の数値符号に符号化する。また、生成部４２は、算出部４４により算出された出現頻度の多い桁数の順に、先頭のビットから桁数が対応付けられ、符号化対象の数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。例えば、１桁の数値の出現回数が１００回、２桁の数値の出現回数が１０００回の場合、生成部４２は、２桁に対して瞬時符号を「０」とし、１桁に対して瞬時符号を「１０」として符号データを生成する。これにより、例えば、８進数で２桁の数値は、瞬時符号の１ビットと数値部分の６ビットの合計７ビットに符号化される。また、８進数で１桁の数値は、瞬時符号の２ビットと数値部分の３ビットの合計５ビットに符号化される。【００４９】
このように、出現頻度の多い桁数に短い瞬時符号を割当てると、圧縮率が高くなる。よって、本実施例の符号化の手法により、出現頻度の高い桁数を短い瞬時符号で表すことにより、全体としてデータを小さく圧縮できる。【００５０】
生成部４２は、瞬時符号の各ビットと桁数との対応を示した桁数情報を生成する。例えば、生成部４２は、瞬時符号の判定に用いるハフマン木の情報を桁数情報として生成する。図１０は、瞬時符号の判定に用いるハフマン木の一例を示す図である。図１０の例では、瞬時符号の１ビット目が「０」の場合、桁数が２桁と判定され、瞬時符号の１ビット目が「１」で、２ビット目が「０」の場合、桁数が１桁と判定される。【００５１】
出力部４３は、抽出部４１により抽出された各数値に対応して、生成部４２により生成された符号データを符号化ファイル３１に出力して格納する。また、出力部４３は、生成部４２により生成された桁数情報を符号化ファイル３１に出力して格納する。例えば、出力部４３は、桁数情報を符号化ファイル３１のヘッダやフッダに格納する。【００５２】
符号化ファイル３１を復元する場合、桁数情報に基づいて、瞬時符号から桁数が識別される。例えば、復号化部５０の識別部５１は、符号化ファイル３１の桁数情報から生成される図１０に示すハフマン木に従い、瞬時符号の桁数を識別する。【００５３】
［処理の流れ］
次に、実施例２に係る符号化・復号化装置１０が対象ファイル３０を符号化して圧縮する符号化処理の流れについて説明する。図１１Ａは、実施例２に係る符号化処理の手順の一例を示すフローチャートである。この符号化処理は、所定のタイミング、例えば、対象ファイル３０を指定して符号化開始を指示する所定操作が行われたタイミングで実行される。【００５４】
図１１Ａに示すように、抽出部４１は、対象ファイル３０からデータを読み出し、読み出したデータから数値を抽出する（Ｓ５０）。算出部４４は、抽出部４１により抽出された各数値を８進数表現に変換して、８進数での数値の桁数ごとに、出現回数をカウントする（Ｓ５１）。抽出部４１は、対象ファイル３０から全データの読み出しが完了したか否かを判定する（Ｓ５２）。読み出しが完了していない場合（Ｓ５２否定）、上述のＳ５０へ移行する。【００５５】
一方、読み出しが完了した場合（Ｓ５２肯定）、抽出部４１は、対象ファイル３０から再度データを読み出し、読み出したデータから数値を抽出する（Ｓ５３）。生成部４２は、抽出した数値を８進数表現の数値符号に符号化する（Ｓ５４）。生成部４２は、算出部４４により算出された出現頻度の多い桁数の順に、先頭のビットから桁数が対応付けられ、符号化対象の数値を８進数表現した際の桁数を示した瞬時符号を生成する（Ｓ５５）。そして、生成部４２は、符号化した数値の符号の前に、瞬時符号を付加した符号データを生成する（Ｓ５６）。【００５６】
出力部４３は、生成した符号データを出力する（Ｓ５７）。例えば、出力部４３は、数値に対応して生成された符号データを符号化ファイル３１に出力して格納する。【００５７】
抽出部４１は、対象ファイル３０から全データの読み出しが完了したか否かを判定する（Ｓ５８）。読み出しが完了していない場合（Ｓ５８否定）、上述のＳ５３へ移行する。【００５８】
一方、読み出しが完了した場合（Ｓ５８肯定）、出力部４３は、桁数情報を符号化ファイル３１に格納して、処理を終了する。【００５９】
次に、実施例２に係る符号化・復号化装置１０が符号化ファイル３１に記憶された符号データを復号化する復号化処理の流れについて説明する。図１１Ｂは、実施例２に係る復号化処理の手順の一例を示すフローチャートである。この復号化処理は、所定のタイミング、例えば、符号化ファイル３１を指定して復号化開始を指示する所定操作が行われたタイミングで実行される。【００６０】
図１１Ｂに示すように、識別部５１は、符号化ファイル３１に格納された桁数情報を読み出す（Ｓ８０）。識別部５１は、符号化ファイル３１から符号データを読み出す（Ｓ８１）。識別部５１は、読み出した符号データをそれぞれ先頭のビットから順に「０」が出現するまでのビット数をカウントし、桁数情報に基づき、瞬時符号の桁数を識別する（Ｓ８２）。【００６１】
復号部５２は、符号データから瞬時符号を分離し、分離した数値部分の符号を識別した桁数に応じて３ビット単位で数値に復号化する（Ｓ８３）。【００６２】
識別部５１は、符号化ファイル３１から全データの読み出しが完了したか否かを判定する（Ｓ８４）。読み出しが完了していない場合（Ｓ８４否定）、上述のＳ８１へ移行する。【００６３】
一方、読み出しが完了した場合（Ｓ８４肯定）、処理を終了する。【００６４】
［効果］
上述してきたように、本実施例に係る符号化・復号化装置１０は、複数の前記符号化対象の数値をそれぞれ８進数表現した桁数ごとに出現頻度を算出する。符号化・復号化装置１０は、算出された出現頻度の多い桁数の順に、先頭のビットから桁数が対応付けられ、符号化対象の数値を８進数表現した際の桁数を示した瞬時符号を付加した符号データを生成する。これにより、符号化・復号化装置１０は、８進数表現した際の出現頻度の多い桁数の数値の瞬時符号を短くでき、短い符号長の符号に圧縮できる。これにより、符号化・復号化装置１０は、データをより高い圧縮率で圧縮できる。
【実施例３】
【００６５】
さて、これまで開示の装置に関する実施例について説明したが、開示の技術は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。【００６６】
例えば、上記の実施例では、符号化対象の数値を、８（＝２３）進数表現の数値符号に符号化する場合について説明したが、これに限定されない。符号化対象の数値を、２ｎ進数表現（ｎは１以上の自然数）の何れの数値符号に符号化してもよい。例えば、符号化対象の数値を、４（＝２２）進数表現の数値符号に符号化してもよい。図１２は、本実施例の符号化の手法により数値を４進数表現で符号化した一例を示す図である。図１２に示すように、４進数で１桁の数値は、３ビットに符号化される。例えば、４進数の数値「３」は、瞬時符号「０」と数値部分の符号「１１」の合計３ビットに符号化される。４進数で２桁の数値は、６ビットに符号化される。例えば、４進数の数値「３３」は、瞬時符号「１０」と数値部分の符号「１１１１」の合計６ビットに符号化される。対象ファイル３０に１０進数で「１」〜「３」の数値が多く出現する場合は、４進数表現で符号化をすることにより、データを小さく圧縮できる。また、例えば、符号化対象の数値を、１６（＝２４）進数表現の数値符号に符号化してもよい。図１３は、本実施例の符号化の手法により数値を１６進数表現で符号化した一例を示す図である。図１３に示すように、１６進数で１桁の数値は、５ビットに符号化される。例えば、１６進数の数値「Ｆ」は、瞬時符号「０」と数値部分の符号「１１１１」の合計５ビットに符号化される。１６進数で２桁の数値は、１０ビットに符号化される。例えば、１６進数の数値「ＡＡ」は、瞬時符号「１０」と数値部分の符号「１１１１１１１１」の合計１０ビットに符号化される。対象ファイル３０に１０進数で「１」〜「１５」の数値が多く出現する場合は、１６進数表現で符号化をすることにより、データを小さく圧縮できる。【００６７】
また、符号化・復号化装置１０は、符号化対象の数値ごとの出現頻度を求め、データがトータルで小さくなるように２ｎ進数表現のｎを求めて、データを圧縮してもよい。例えば、算出部４４は、符号化対象の数値ごとの出現頻度を算出する。そして、算出部４４は、ｎを１から順に、例えば、１〜５など、所定の変更範囲で変えて２ｎ進数表現で、対象ファイル３０の各数値を圧縮した場合の数値の符号長の合計をそれぞれ算出する。例えば、算出部４４は、数値ごとに、数値を２ｎ進数表現したビット数に出現頻度を乗算して、各数値を圧縮した場合の数値の符号長を求める。そして、算出部４４は、各数値を圧縮した場合の数値の符号長を合計して全数値の符号長を求める。生成部４２は、合計が最も小さい２ｎ進数表現で圧縮してもよい。これにより、生成部４２は、対象ファイル３０をより小さく圧縮できる。この場合、符号化ファイル３１には、使用した２ｎ進数表現のｎを記録する。【００６８】
符号化ファイル３１を復元する場合、復号化部５０の復号部５２は、符号化ファイル３１からｎの値に基づいて、ｎビット単位に数値部分の符号を数値に復号化する。例えば、復号化部５０の復号部５２は、ｎ＝２の場合、４進数表現として、２ビット単位に数値部分の符号を復元する。【００６９】
例えば、上記の実施例では、符号化・復号化装置１０によりデータの符号化およびデータの復号化を行う場合について説明するが、データの符号化とデータの復号化は、別な装置で行ってもよい。例えば、符号化・復号化装置１０は、符号化部４０を有し、データの符号化を行う符号化装置と、復号化部５０を有し、データの復号化を行う復号化装置に分けてもよい。【００７０】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、符号化・復号化装置１０の符号化部４０（抽出部４１、生成部４２、出力部４３、算出部４４）や、復号化部５０（識別部５１、復号部５２）の各処理部が適宜統合されてもよい。また、符号化・復号化装置１０の上記各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。【００７１】
［符号化プログラム］
また、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。最初に、圧縮処理を行う符号化プログラムについて説明する。図１４は、符号化プログラムを実行するコンピュータの一例を示す図である。【００７２】
図１４に示すように、コンピュータ４００は、ＣＰＵ（Central  Processing  Unit）４１０、ＨＤＤ（Hard  Disk  Drive）４２０、ＲＡＭ（Random  Access  Memory）４４０を有する。これら４００〜４４０の各部は、バス５００を介して接続される。【００７３】
ＨＤＤ４２０には上記の抽出部４１、生成部４２、出力部４３および算出部４４と同様の機能を発揮する符号化プログラム４２０ａが予め記憶される。尚、符号化プログラム４２０ａについては、適宜分離しても良い。【００７４】
また、ＨＤＤ４２０は、各種情報を記憶する。例えば、ＨＤＤ４２０は、ＯＳや圧縮に用いる各種データを記憶する。【００７５】
そして、ＣＰＵ４１０が、符号化プログラム４２０ａをＨＤＤ４２０から読み出して実行することで、実施例の各処理部と同様の動作を実行する。すなわち、符号化プログラム４２０ａは、抽出部４１、生成部４２、出力部４３および算出部４４と同様の動作を実行する。【００７６】
尚、上記した符号化プログラム４２０ａについては、必ずしも最初からＨＤＤ４２０に記憶させることを要しない。【００７７】
［復号化プログラム］
次に、復号化を行う復号化プログラムについて説明する。図１５は、復号化プログラムを実行するコンピュータの一例を示す図である。なお、図１４と同一の部分については同一の符号を付して、説明を省略する。【００７８】
図１５に示すように、ＨＤＤ４２０には上記の識別部５１および復号部５２と同様の機能を発揮する復号化プログラム４２０ｂが予め記憶される。尚、復号化プログラム４２０ｂについては、適宜分離しても良い。【００７９】
また、ＨＤＤ４２０は、各種情報を記憶する。例えば、ＨＤＤ４２０は、ＯＳや復号化に用いる各種データを記憶する。【００８０】
そして、ＣＰＵ４１０が、復号化プログラム４２０ｂをＨＤＤ４２０から読み出して実行することで、実施例の各処理部と同様の動作を実行する。すなわち、復号化プログラム４２０ｂは、識別部５１および復号部５２と同様の動作を実行する。【００８１】
尚、上記した復号化プログラム４２０ｂについても、必ずしも最初からＨＤＤ４２０に記憶させることを要しない。【００８２】
また、例えば、圧縮プログラム４２０ａおよび復号化プログラム４２０ｂは、コンピュータ４００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に記憶させても良い。そして、コンピュータ４００がこれらからプログラムを読み出して実行するようにしても良い。【００８３】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ４００に接続される「他のコンピュータ（又はサーバ）」などにプログラムを記憶させておく。そして、コンピュータ４００がこれらからプログラムを読み出して実行するようにしても良い。【００８４】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ４００に接続される「他のコンピュータ（又はサーバ）」などにプログラムを記憶させておく。そして、コンピュータ４００がこれらからプログラムを読み出して実行するようにしても良い。
【符号の説明】
【００８５】
１０  符号化・復号化装置
２０  記憶部
２１  制御部
３０  対象ファイル
３１  符号化ファイル
４０  符号化部
４１  抽出部
４２  生成部
４３  出力部
４４  算出部
５０  復号化部
５１  識別部
５２  復号部
【図１】
2017056327.tif 000003
【図２】
2017056327.tif 000004
【図３】
2017056327.tif 000005
【図４Ａ】
2017056327.tif 000006
【図４Ｂ】
2017056327.tif 000007
【図５】
2017056327.tif 000008
【図６】
2017056327.tif 000009
【図７】
2017056327.tif 000010
【図８Ａ】
2017056327.tif 000011
【図８Ｂ】
2017056327.tif 000012
【図９】
2017056327.tif 000013
【図１０】
2017056327.tif 000014
【図１１Ａ】
2017056327.tif 000015
【図１１Ｂ】
2017056327.tif 000016
【図１２】
2017056327.tif 000017
【図１３】
2017056327.tif 000018
【図１４】
2017056327.tif 000019
【図１５】
2017056327.tif 000020
【国際調査報告】
2017056327.tif 000021
2017056327.tif 000022