(57)【要約】効率の良いデータ圧縮率を維持できるデータ圧縮装置等を提供する。  データ圧縮装置６００は、圧縮部６０１と、監視部６０２と、タイミング制御部６０３と、辞書生成部６０４とを有している。圧縮部６０１は、圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮する機能を備えている。監視部６０２は、圧縮部６０１が前記データを圧縮する場合における前記辞書データの使用頻度を算出する機能を備えている。タイミング制御部６０３は、算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出す機能を備えている。辞書生成部６０４は、その指示を受けて、圧縮部１０２が圧縮したデータを利用して前記辞書データを新規に生成する機能を備えている。
2011105463.tif 000002
【特許請求の範囲】
【請求項１】
圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮する圧縮手段と、
前記圧縮手段が前記データを圧縮する場合における前記辞書データの使用頻度を算出する監視手段と、
算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出すタイミング制御手段と、
前記指示を受けて、前記圧縮手段が圧縮したデータに基づいて前記辞書データを新規に生成する辞書生成手段と
を有するデータ圧縮装置。
【請求項２】
前記圧縮手段が圧縮したデータを、前記辞書データを利用して、展開する展開手段を、さらに、有し、
前記辞書生成手段は、前記展開手段が展開したデータを利用して、前記辞書データを新規に生成する請求項１記載のデータ圧縮装置。
【請求項３】
前記監視手段は、前記辞書データの使用回数を、圧縮前の前記データの総容量で除算することによって、前記使用頻度を算出する請求項１又は請求項２記載のデータ圧縮装置。
【請求項４】
前記データを記憶するリソースの空き容量を検知するリソース監視手段と、
前記リソースの空き容量に応じて前記タイミング制御手段が使用する前記閾値を可変設定する調整手段と
を、さらに、有する請求項１又は請求項２又は請求項３記載のデータ圧縮装置。
【請求項５】
前記辞書データを新規に生成する場合に要するコストと、前記辞書データを新規に生成した場合に当該新規の辞書データに基づいて前記圧縮手段が圧縮した前記データの圧縮率とを推定する見積もり手段を、さらに、有し、
前記タイミング制御手段は、前記閾値に加えて、前記見積もり手段により推定された前記コストと前記圧縮率をも利用して、前記辞書データを更新する前記指示を出すか否かを判断する請求項１乃至請求項４の何れか一つに記載のデータ圧縮装置。
【請求項６】
予め設定した複数の圧縮アルゴリズムのそれぞれに関し、圧縮前の前記データの量と圧縮に要する時間との比である圧縮コストを推定すると共に、圧縮した前記データの圧縮率を推定する見積もり手段と、
前記圧縮コストと前記圧縮率に基づいて、前記複数の圧縮アルゴリズムの中から切り替え後の圧縮アルゴリズムを選択する切り替え手段と
を、さらに、有する請求項１乃至請求項４の何れか一つに記載のデータ圧縮装置。
【請求項７】
複数の前記辞書データを格納している記憶手段から、前記使用頻度が所定値よりも低下した前記辞書データを削除する削除手段を、さらに、有し、
前記辞書生成手段は、前記圧縮手段が圧縮した前記データの一部を利用して前記辞書データを新規に生成する請求項１乃至請求項６の何れか一つに記載のデータ圧縮装置。
【請求項８】
圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮し、
前記データを圧縮する場合における前記辞書データの使用頻度を算出し、
算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出し、
前記指示を受けて、圧縮した前記データに基づいて前記辞書データを新規に生成するデータ圧縮方法。
【請求項９】
圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮する処理と、
前記データを圧縮する場合における前記辞書データの使用頻度を算出する処理と、
算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出す処理と、
前記指示を受けて、圧縮した前記データに基づいて前記辞書データを新規に生成する処理とをデータ圧縮装置に実行させるコンピュータプログラムを記憶しているプログラム記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮装置、データ圧縮方法およびプログラム記憶媒体に関する。
【背景技術】
【０００２】
辞書式圧縮法を利用してデータを圧縮するデータ圧縮装置が、特開２００１−０４４８５０号公報（特許文献１）に示されている。このデータ圧縮装置は、データを圧縮する際に、データ圧縮に利用する最適な辞書が生成されるまで辞書の更新を繰り返す。そして、このデータ圧縮装置は、最適な辞書が生成された段階でその辞書を用いてデータを圧縮する。
図２４は、そのデータ圧縮装置の構成例を示すブロック図である。データ圧縮装置１２は、辞書生成更新部１３と、辞書保持部１５と、辞書出力部１６と、データ圧縮部１７と、圧縮データ出力部１８とを備えている。辞書生成更新部１３は、圧縮する対象である全データ列１１に基づいて辞書１４を生成する機能と辞書１４を更新する機能を有する。辞書保持部１５は、辞書１４を保持する機能を有する。辞書出力部１６は、辞書１４を出力する機能を有する。データ圧縮部１７は、辞書１４に基づいて全データ列１１を圧縮する機能を有する。圧縮データ出力部１８は、データ圧縮部１７による圧縮データ１９を出力する機能を有する。ここでの辞書１４とは、全データ列１１と登録番号との組合せを示すデータである。データ圧縮装置１２は、その辞書１４に基づいて全データ列１１を登録番号に置き換えることでデータを圧縮する。
データ圧縮装置１２は、全データ列１１を登録番号に置き換える際に、頻出回数の多いデータを優先的に辞書１４の登録番号に置き換えることにより、データ圧縮率を高めることができる。ただし、このようにして生成された辞書１４は登録数が非常に多くなる場合がある。このため、データ圧縮装置１２は、辞書１４の中から使用頻度の低い登録データを削除することによって辞書の更新を行う。そして、データ圧縮装置１２は、辞書１４の登録数が所定数になった段階で辞書１４が最適になったと判断する。データ圧縮装置１２は、このようにして得られた辞書１４に基づき全データ列１１を圧縮することによって、データ圧縮率を高めている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−０４４８５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、データ圧縮装置１２は、データが連続して入力している状態では辞書１４の更新を行わない。このため、次のような場合に、データ圧縮装置１２によるデータ圧縮率が低下する虞がある。例えば、データ圧縮装置１２に、「Ａ」、「Ｂ」、「Ｃ」を多く含む文字列のデータが入力している状態から、「Ａ」、「Ｂ」、「Ｃ」を殆ど含まない文字列のデータが入力する状態に傾向が変わる場合がある。このような場合には、データ圧縮装置１２は、傾向が変わる前は「Ａ」、「Ｂ」、「Ｃ」を多く含んだ辞書１４を用いてデータ圧縮を行う。しかし、入力データの傾向が変わって入力データに「Ａ」、「Ｂ」、「Ｃ」が殆ど含まれなくなると、データ圧縮装置１２が辞書１４を使用する頻度が低下する。これにより、データ圧縮装置１２によるデータ圧縮率が低下する。
本発明は上記課題を解決するためになされている。すなわち、本発明の主な目的は、効率の良いデータ圧縮を維持できるデータ圧縮装置、データ圧縮方法およびプログラム記憶媒体を提供することである。
【課題を解決するための手段】
【０００５】
本発明のデータ圧縮装置は、
圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮する圧縮手段と、
前記圧縮手段が前記データを圧縮する場合における前記辞書データの使用頻度を算出する監視手段と、
算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出すタイミング制御手段と、
前記指示を受けて、前記圧縮手段が圧縮したデータに基づいて前記辞書データを新規に生成する辞書生成手段と
を有する。
本発明のデータ圧縮方法は、
圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮し、
前記データを圧縮する場合における前記辞書データの使用頻度を算出し、
算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出し、
前記指示を受けて、圧縮した前記データに基づいて前記辞書データを新規に生成する。
本発明のプログラム記憶媒体は、
圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮する処理と、
前記データを圧縮する場合における前記辞書データの使用頻度を算出する処理と、
算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出す処理と、
前記指示を受けて、圧縮した前記データに基づいて前記辞書データを新規に生成する処理とをデータ圧縮装置に実行させるコンピュータプログラムを記憶している。
なお、本発明の上記した主な目的は、上記構成のデータ圧縮装置に対応するデータ圧縮方法によっても達成される。さらに、本発明の上記した主な目的は、上記データ圧縮装置およびデータ圧縮方法をコンピュータによって実現するコンピュータプログラムが格納されているプログラム記憶媒体によっても達成される。
【発明の効果】
【０００６】
本発明によれば、効率の良いデータ圧縮を維持できる。
【図面の簡単な説明】
【０００７】
図１は、本発明に係る第１実施形態のデータ圧縮装置の構成を示すブロック図である。
図２は、辞書式圧縮法によるデータ圧縮の一例を説明する図である。
図３は、図２中のデータＤ００１において、隣り合う２文字の出現回数をカウントした結果を表す図である。
図４は、図２中のデータＤ００２において、隣り合う２文字の出現回数をカウントした結果を表す図である。
図５は、図２中のデータＤ００３において、隣り合う２文字の出現回数をカウントした結果を表す図である。
図６は、辞書データの一例を示す図である。
図７Ａは、圧縮に使用した辞書データとその使用回数とが対になったデータのイメージを表した図である。
図７Ｂは、圧縮したデータの総容量の一例を示す図である。
図８は、辞書データの使用頻度を示すデータの一例を表す図である。
図９Ａは、圧縮データの一例を示す図である。
図９Ｂは、辞書データの一例を示す図である。
図１０は、辞書式圧縮法で圧縮されたデータを展開する手法の一例を説明する図である。
図１１は、図１０に引き続き、辞書式圧縮法で圧縮されたデータを展開する手法の一例を説明する図である。
図１２は、さらに引き続いて、辞書式圧縮法で圧縮されたデータを展開する手法の一例を説明する図である。
図１３は、本発明に係る第１実施形態のデータ圧縮装置の動作例を示すフローチャートである。
図１４は、本発明に係る第２実施形態のデータ圧縮装置の構成を示すブロック図である。
図１５は、本発明に係る第２実施形態のデータ圧縮装置の動作例を示すフローチャートである。
図１６は、本発明に係る第２実施形態のデータ圧縮装置を構成する調整部の具体的な動作例を示すフローチャートである。
図１７は、本発明に係る第３実施形態のデータ圧縮装置の構成を示すブロック図である。
図１８は、本発明に係る第３実施形態のデータ圧縮装置の動作例を示すフローチャートである。
図１９は、本発明に係る第４実施形態のデータ圧縮装置の構成を示すブロック図である。
図２０は、本発明に係る第４実施形態のデータ圧縮装置の動作例を示すフローチャートである。
図２１は、本発明に係る第５実施形態のデータ圧縮装置の構成を示すブロック図である。
図２２は、本発明に係る第５実施形態のデータ圧縮装置の動作例を示すフローチャートである。
図２３は、その他の実施形態を説明する図である。
図２４は、特許文献１に記載されているデータ圧縮装置の構成を示すブロック図である。
【発明を実施するための形態】
【０００８】
以下、本発明に係る実施形態を図面を参照して説明する。
（第１実施形態）
図１は、本発明に係る第１実施形態のデータ圧縮装置（データ圧縮システム）の構成を示すブロック図である。このデータ圧縮装置１００は、制御装置１０１と、第１記憶部１０３と、第２記憶部１０４と、第３記憶部１０８とを有する。第１記憶部１０３と、第２記憶部１０４と、第３記憶部１０８とは、記憶装置により構成される。その記憶装置は、データを格納（記憶）する記憶媒体（例えば、ハードディスク装置や、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）など）を有する。この第１実施形態では、第１記憶部１０３は、後述する圧縮データを記憶する圧縮データ記憶部（圧縮データ記憶手段）として機能する。第２記憶部１０４は、後述する辞書データを記憶する辞書データ記憶部（辞書データ記憶手段）として機能する。第３記憶部１０８は、後述する展開データを記憶する展開データ記憶部（展開データ記憶手段）として機能する。
制御装置１０１は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含むコンピュータである。当該制御装置１０１は、コンピュータが読み取り可能な記憶媒体に格納されている各種コンピュータプログラムを適宜に実行することによって、データ圧縮装置１００の全体的な動作を司る。
この第１実施形態では、制御装置１０１は、データ発生部１１０により発生するデータを辞書式圧縮法により圧縮する機能を有する。さらに、制御装置１０１は、データを圧縮する際に参照する辞書データを生成する機能と辞書データを更新する機能を有する。すなわち、制御装置１０１は、コンピュータプログラムに従って動作することによって、次のような機能ブロックを実現する。その機能ブロックとは、圧縮部１０２と、監視部（辞書使用頻度監視手段）１０５と、タイミング制御部（辞書更新タイミング手段）１０６と、展開部（圧縮データ展開手段）１０７と、辞書生成部（辞書構築手段）１０９とを含む。なお、データ発生部１１０が発生するデータは、どのような種類のデータであってもよいが、ここでは、説明を分かり易くするために、文字列データとする。
圧縮部（圧縮手段）１０２は、第２記憶部１０４に記憶されている後述するような辞書データに基づいて、データを辞書式圧縮法により圧縮する機能（データ圧縮機能）を有する。その圧縮するデータとは、データ発生部１１０から入力するデータや、第３記憶部１０８に記憶されている後述するような展開データである。なお、辞書式圧縮法には、ＬＺＷ（Ｌｅｍｐｅｌ−Ｚｉｖ  ａｎｄ  Ｗｅｌｃｈ）やＬＺ７７（Ｌｅｍｐｅｌ−Ｚｉｖ  ７７）などの様々な種類がある。圧縮部１０２が採用する辞書式圧縮法の種類は、特に限定しなくてよい。ただし、第１実施形態では、説明を分かり易くするために、圧縮部１０２は、ＢＰＥ（Ｂｙｔｅ  Ｐａｉｒ  Ｅｎｃｏｄｉｎｇ）法と呼ばれる辞書式圧縮法によりデータを圧縮することとする。
そのＢＰＥ法は、出現頻度が高い２バイトデータを１バイトデータに置き換えていくことを繰り返して対象データを圧縮するアルゴリズムである。図２は、ＢＰＥ法によるデータ圧縮の一例を説明する図である。圧縮部１０２は、ＢＰＥ法により次のようにデータを圧縮する。
例えば、第２記憶部１０４は、図６に示すような複数の辞書データを保持している。辞書データは、置き換え前の文字列と、当該文字列に対応する置き換え後の文字との関係を表すデータである。図６に示す辞書データの一つは、置き換え前の文字列「ＡＢ」と、当該文字列に対応する置き換え後の文字「Ｇ」との関係を表すデータである。図６に示す別の辞書データの一つは、置き換え前の文字列「ＤＥ」と、当該文字列に対応する置き換え後の文字「Ｈ」との関係を表すデータである。図６に示すさらに別の辞書データの一つは、置き換え前の文字列「ＧＣ」と、当該文字列に対応する置き換え後の文字「Ｉ」との関係を表すデータである。このような辞書データは、辞書生成部１０９によって後述のように生成される。
圧縮部１０２は、例えば、図２に示すような文字列であるデータＤ００１が入力すると、第２記憶部１０４の辞書データを参照して、データＤ００２のように圧縮する。すなわち、圧縮部１０２は、辞書データに基づき、データＤ００１における隣り合う２文字「ＡＢ」を１文字「Ｇ」に置き換える。これにより、圧縮部１０２は、データＤ００１を圧縮したデータＤ００２を作成する。さらに、圧縮部１０２は、辞書データに基づき、データＤ００２における隣り合う２文字「ＤＥ」を１文字「Ｈ」に置き換える。これにより、圧縮部１０２は、データＤ００２を圧縮したデータＤ００３を作成する。さらに、圧縮部１０２は、辞書データに基づき、データＤ００３における隣り合う２文字「ＧＣ」を１文字「Ｉ」に置き換える。これにより、圧縮部１０２は、データＤ００３を圧縮したデータＤ００４を作成する。さらに、圧縮部１０２は、データＤ００４に関しても上記同様に圧縮しようとする。しかし、データＤ００４は、辞書データに対応する文字列「ＡＢ」、「ＤＥ」、「ＧＣ」の何れも有していない。このため、圧縮部１０２は、データＤ００４を圧縮できない。このことから、圧縮部１０２は、データを圧縮する処理（データ圧縮処理）を終了する。
圧縮部１０２は、上記したようなデータ圧縮機能に加えて、さらに、最終的に得られたデータＤ００４を第１記憶部１０３に書き込む機能を有する。なお、データ圧縮装置１００が稼動を開始した以後の稼働初期では、第２記憶部１０４には辞書データが記憶されていない。このため、圧縮部１０２は圧縮動作を行わず、データ発生部１１０から入力したデータをそのまま第１記憶部１０３に書き込む。
さらに、圧縮部１０２は、後述するように、第２記憶部１０４に格納されている辞書データが新たな辞書データに置換された場合に、第３記憶部１０８に格納されている全ての展開データを、新規の辞書データに基づいて圧縮する機能を有する。さらに、圧縮部１０２は、第３記憶部１０８に記憶されている全ての展開データを圧縮し終えると、第３記憶部１０８に格納されている全ての展開データを削除する機能を有している。
さらに、圧縮部１０２は、データ圧縮処理における辞書データの使用状況に関するデータ（使用状況データ）と、そのデータ圧縮処理で処理した圧縮前のデータの総容量を示すデータ（総容量データ）を作成する機能を有する。さらに、圧縮部１０２は、それらデータを一時保持した後、当該データを監視部１０５に出力する機能を有する。
図７Ａは、使用状況データの一例を示す。図７Ｂは、総容量データの一例を示す。図７Ａの例では、使用状況データは、辞書データとその使用回数が対となったデータである。図７Ａの使用状況データによれば、「ＡＢ」を「Ｇ」に置き換えるという辞書データは１０回使用されている。また、「ＤＥ」を「Ｈ」に置き換えるという辞書データは２０回使用されている。さらに、「ＧＣ」を「Ｉ」に置き換えるという辞書データは５回使用されている。
また、図７Ｂによれば、総容量データは１５３０００Ｂｙｔｅである。なお、圧縮部１０２から監視部１０５にデータを出力するタイミングは、圧縮部１０２がデータ発生部１１０から入力したデータを圧縮する毎であってもよいし、予め設定した時間間隔毎でもよい。
また、データ圧縮装置１００が稼動を開始した以後の稼働初期では、圧縮部１０２は、前記の如くデータ圧縮処理を行わないため、データ発生部１１０から入力したデータの総容量だけを監視部１０５に出力する。
辞書生成部（辞書生成手段）１０９は、辞書データを生成する機能と、生成した辞書データを第２記憶部１０４に格納する機能とを有する。当該辞書生成部１０９が辞書データを生成する手順は、圧縮部１０２が採用している辞書式圧縮法の種類に応じて設定される。すなわち、この第１実施形態で採用している辞書式圧縮法の種類は、ＢＰＥ法である。このため、辞書式生成部１０９は、ＢＰＥ法に応じた手順によって、辞書データを生成する。
例えば、辞書式生成部１０９は、後述する展開部１０７から動作を開始する指示（動作指示）を受けた場合に、第３記憶部１０８に格納されている全てのデータに基づいて、辞書データを次のように生成する。なお、データ圧縮装置１００が稼動を開始した以後の稼働初期では、後述するように、データ発生部１１０から入力したデータが、そのまま、圧縮部１０２と第１記憶部１０３と展開部１０７を介して、第３記憶部１０８に格納されている。
すなわち、辞書式生成部１０９は、まず、図２に示すような文字列である入力データＤ００１中の隣り合う２文字（文字列）の出現回数をカウントする。データＤ００１の場合には、隣り合う２文字として、最初に「ＡＢ」が現れる。これにより、辞書式生成部１０９は、「ＡＢ」のカウント値を“１”とする。次の隣り合う２文字は、「ＢＤ」である。これにより、辞書式生成部１０９は、「ＢＤ」のカウント値を“１”とする。次の隣り合う２文字は、「ＤＡ」である。これにより、辞書式生成部１０９は、「ＤＡ」のカウント値を“１”とする。さらに次の隣り合う２文字は、「ＡＢ」である。当該「ＡＢ」は既に現れているから、辞書式生成部１０９は、その「ＡＢ」のカウント値を“１”増加して“２”とする。以降、辞書式生成部１０９は、同様の処理（カウント処理）を繰り返す。
図３に示される表は、データＤ００１中における隣り合う２文字の出現回数（カウント値）を示す表である。その出現回数（カウント値）は、辞書式生成部１０９が上記のような処理を行うことによって得た値である。図３に示す表に基づくと、データＤ００１において、出現回数の最も多い隣り合う２文字は、「ＡＢ」であり、その「ＡＢ」の出現回数（カウント値）は４回である。
次に、辞書式生成部１０９は、上記のようなカウント処理により得られた結果に基づいて、出現回数の最も多い隣り合う２文字「ＡＢ」に対応する別の１文字（例えば「Ｇ」）を置換文字として設定する。その置換文字（置き換える文字）は、入力データＤ００１に含まれていない文字である。それというのは、入力データＤ００１に含まれている文字を置換文字として設定してしまうと、圧縮後のデータを元通りに復元できないからである。なお、置換文字は、数字や記号であってもよい。
そして、辞書式生成部１０９は、隣り合う２文字「ＡＢ」と、置換文字「Ｇ」とが対応しているデータを、辞書データとして、作成（生成）する。
さらに、辞書式生成部１０９は、入力データＤ００１において、「ＡＢ」を置換文字「Ｇ」に置き換える。これにより、辞書式生成部１０９は、データＤ００２を作成する。
次に、辞書式生成部１０９は、データＤ００２に対しても、入力データＤ００１と同様に、隣り合う２文字の出現回数をカウントする。これにより、辞書式生成部１０９は、図４に示されるような情報を得ることができる。図４に示す表は、データＤ００２中における隣り合う２文字の出現回数（カウント値）を示す表である。図４に示す表に基づくと、データＤ００２において、出現回数の最も多い隣り合う２文字は、「ＤＥ」であり、その「ＤＥ」の出現回数（カウント値）は３回である。このことから、辞書式生成部１０９は、前記同様に、出現回数の最も多い隣り合う２文字「ＤＥ」を置き換える置換文字（「Ｈ」）を設定する。これにより、辞書式生成部１０９は、隣り合う２文字「ＤＥ」と置換文字「Ｈ」が対応しているデータを、辞書データとして、作成する。また、辞書式生成部１０９は、データＤ００２中の「ＤＥ」を置換文字「Ｈ」に置き換えることによって、データＤ００３を作成する。
さらに、辞書式生成部１０９は、データＤ００３に対しても、入力データＤ００１等と同様に、隣り合う２文字（文字列）の出現回数をカウントする。図５に示す表は、データＤ００３中における隣り合う２文字の出現回数（カウント値）を示す表である。図５に示す表に基づくと、データＤ００３において、出現回数の最も多い隣り合う２文字は、「ＧＣ」であり、その「ＧＣ」の出現回数（カウント値）は２回である。このことから、辞書式生成部１０９は、前記同様に、出現回数の最も多い隣り合う２文字「ＧＣ」を置き換える置換文字（「Ｉ」）を設定する。これにより、辞書式生成部１０９は、隣り合う２文字「ＧＣ」と置換文字「Ｉ」が対応しているデータを、辞書データとして、作成する。また、辞書式生成部１０９は、データＤ００３中の「ＧＣ」を置換文字「Ｉ」に置き換えることによって、データＤ００４を作成する。
さらに、辞書式生成部１０９は、データＤ００４に関しても、上記同様の処理を行う。すなわち、辞書式生成部１０９は、データＤ００４に対しても、隣り合う２文字の出現回数をカウントする。この処理により、辞書式生成部１０９は、データＤ００４において、隣り合う２文字の何れも１回しか出現しないことを検知する。これにより、辞書式生成部１０９は、上記したような隣り合う２文字の出現回数をカウントする処理、および、置換文字を設定する処理、つまり、辞書データを生成する処理を終了する。そして、辞書式生成部１０９は、生成した新規の辞書データ（図６参照）を第２記憶部１０４に格納する。なお、第２記憶部１０４に既に辞書データが格納されている場合には、辞書式生成部１０９は、その古い辞書データを削除してから、新規の辞書データを第２記憶部１０４に格納する。
さらに、辞書式生成部１０９は、新規の辞書データを第２記憶部１０４に格納し終えた以降に、新規の辞書データを第２記憶部１０４に格納したことを圧縮部１０２に通知する機能を有する。
監視部（監視手段）１０５は、圧縮部１０２から受け取った使用状況データおよび総容量データに基づき、辞書データの使用頻度を計算する機能を有する。例えば、監視部１０５は、次式（１）を利用して、辞書データの使用頻度を計算する。
使用頻度＝（辞書データの使用回数）÷（データの総容量）・・・・・（１）
監視部１０５は、さらに、算出した使用頻度を示すデータ（使用頻度データ）を、タイミング制御部１０６に出力する機能を有する。図８は、監視部１０５がタイミング制御部１０６に出力する使用頻度データの一例を示す。図８に示されている使用頻度データは、辞書データと使用頻度との関係を示すデータである。
なお、データ圧縮装置１００が稼動を開始した以後の稼働初期では、前述したように、圧縮部１０２が監視部１０５に出力するデータは、総容量データだけである。このため、監視部１０５は、辞書データの使用頻度の計算を行わず、総容量データをそのままタイミング制御部１０６に出力する。
タイミング制御部（タイミング制御手段）１０６は、監視部１０５から受け取る使用頻度データに基づいて、辞書データの使用頻度が低下していることを検知した場合に、展開部１０７に、動作を開始する指示を出力する機能を有している。具体的には、タイミング制御部１０６は、受け取った使用頻度データの使用頻度を合計した値（合計値）が、予め設定された閾値よりも小さくなった場合に、辞書データの使用頻度が低下したと判断し、展開部１０７に動作開始を指示する。なお、ここで用いる閾値を、ユーザーが適宜に設定できるようにしてもよい。
なお、データ圧縮装置１００が稼動を開始した以後の稼働初期では、タイミング制御部１０６は、監視部１０５から、使用頻度データではなく、総容量データを受け取る。このような場合には、タイミング制御部１０６は、例えば、監視部１０５から受け取る総容量データの容量値が、予め設定された値以上であることを検知した場合に、展開部１０７に動作開始を指示する。あるいは、タイミング制御部１０６は、監視部１０５から総容量データを受け取った回数が予め設定した回数に達した場合に、展開部１０７に動作開始を指示してもよい。あるいは、タイミング制御部１０６は、監視部１０５から総容量データを最初に受け取ってから、予め設定された時間を経過した後に、展開部１０７に動作開始を指示してもよい。
展開部（展開手段）１０７は、タイミング制御部１０６から、動作を開始する指示を受け取った場合に、第１記憶部１０３に記憶されている圧縮データを展開する機能を有している。なお、展開部１０７が圧縮データを展開する手法は、圧縮部１０２が採用している圧縮法に応じた手法である。第１実施形態では、ＢＰＥ法を用いているので、展開部１０７は、第２記憶部１０４に記憶されている辞書データに基づいて、次のように、データを展開する。
例えば、ここでは、展開部１０７は、図９Ａに示すような圧縮データＴ０１２を、図９Ｂに示す辞書データを参照しながら展開（データ展開）するとする。なお、図９Ａの圧縮データＴ０１２は図２のデータＤ００４に対応する。また、図９Ｂの辞書データは図６の辞書データに対応する。図１０〜図１２は、データ展開の流れを説明する図である。
展開部１０７は、まず、適当な大きさのバッファ１１１（図１０参照）を用意する。そして、展開部１０７は、そのバッファ１１１の先頭に圧縮データＴ０１２の先頭のデータ「Ｇ」を、図１０に示すＢ００１のように入力する。このバッファ１１１の先頭データ「Ｇ」は、辞書データを参照すると、「ＡＢ」に対応する。このため、展開部１０７は、バッファ１１１における「Ｇ」を、図１０に示すＢ００２のように、「ＡＢ」に置き換える。次に、バッファ１１１の先頭にあるデータ「Ａ」に対応する２文字（文字列）は、辞書データに登録されていない。このような場合には、展開部１０７は、そのデータ「Ａ」を、バッファ１１１から出力データとして取り出す。これにより、バッファ１１１の先頭のデータは図１０に示すＢ００３のように、「Ｂ」となる。また、出力データは、図１０に示すＴ１０１のように「Ａ」となる。
バッファ１１１の先頭にあるデータ「Ｂ」に対応する２文字（文字列）は、辞書データに登録されていない。このことから、展開部１０７は、上記同様に、バッファ１１１からデータ「Ｂ」を出力データとして取り出す。これにより、出力データは、図１１に示すＴ１０２のように「ＡＢ」となる。
上記「Ｂ」の取り出しにより、バッファ１１１は空になる。これにより、展開部１０７は、圧縮データＴ０１２の２番目のデータ「Ｄ」を、図１１に示すＢ００４のようにバッファ１１１に入力する。そのデータ「Ｄ」に対応する２文字（文字列）は、辞書データに登録されていない。このことから、上記同様に、展開部１０７は、バッファ１１１からデータ「Ｄ」を出力データとして取り出す。これにより、出力データは、図１１に示すＴ１０３のように「ＡＢＤ」となる。
上記「Ｄ」の取り出しにより、バッファ１１１は、再び空になる。これにより、展開部１０７は、圧縮データＴ０１２の３番目のデータ「Ｉ」を、図１１に示すＢ００５のようにバッファ１１１に入力する。そのデータ「Ｉ」は、辞書データを参照すると「ＧＣ」に対応する。このため、展開部１０７は、バッファ１１１における「Ｉ」を、図１１に示すＢ００６のように、「ＧＣ」に置き換える。
さらに、展開部１０７は、上記同様に、バッファ１１１の先頭のデータ「Ｇ」を、辞書データに基づいて、図１２に示すＢ００７のように、データ「ＡＢ」に置き換える。これにより、バッファ１１１の先頭のデータは、データ「Ａ」となる。このデータ「Ａ」に対応する２文字（文字列）は、辞書データに登録されていない。このため、展開部１０７は、上記同様に、バッファ１１１からデータ「Ａ」を出力データとして取り出す。これにより、出力データは、図１２に示すＴ１０４のように「ＡＢＤＡ」となる。
データ「Ａ」の取り出しにより、バッファ１１１の先頭のデータは図１２に示すＢ００８のように、データ「Ｂ」となる。このデータ「Ｂ」に対応する２文字（文字列）は、辞書データに登録されていない。このため、展開部１０７は、上記同様に、そのデータ「Ｂ」を、バッファ１１１から出力データとして取り出す。これにより、出力データは、図１２に示すＴ１０５のように「ＡＢＤＡＢ」となる。
データ「Ｂ」の取り出しにより、バッファ１１１の先頭のデータは図１２に示すＢ００９のようにデータ「Ｃ」となる。展開部１０７は、上記のような処理（動作）を繰り返して、データＴ０１２を展開する。つまり、バッファ１１１から取り出されたデータ（出力データ）が展開データである。
展開部１０７は、上記のように展開されたデータ（展開データ）を第３記憶部１０８に格納する機能を有する。さらに、展開部１０７は、第１記憶部１０３に記憶されている全ての圧縮データを展開し終えた以降に、第１記憶部１０３に記憶されている全ての圧縮データを削除する機能を備えている。さらに、展開部１０７は、第１記憶部１０３における圧縮データを削除し終え、かつ、展開データを第３記憶部１０８に格納し終えた以降に、辞書生成部１０９に、動作を開始する指示を出力する機能を有している。これにより、辞書生成部１０９は、前記の如く、その指示を受けて、第３記憶部１０８に記憶されている展開データを利用して、新規の辞書データを生成する。
なお、データ圧縮装置１００が稼動を開始した以後の稼働初期において、前記の如く、第２記憶部１０４は辞書データを保持していない。また、辞書データが第２記憶部１０４に格納されなければ、圧縮部１０２は、データを圧縮する動作（処理）を行わない。この場合、第１記憶部１０３に記憶されているデータは、圧縮されていないデータ（非圧縮データ）である。さらに、展開部１０７は、辞書データが第２記憶部１０４に格納されなければ、データを展開することができない。このため、展開部１０７は、第１記憶部１０３に格納されている非圧縮データをそのまま第３記憶部１０８に移す機能を備えている。
この第１実施形態では、辞書生成部１０９が辞書データを生成する動作を開始したときに第３記憶部１０８に記憶されているデータは、データ圧縮装置１００が稼働を開始した以後の稼働初期、あるいは、前回辞書データが生成された以降に記憶されたデータである。辞書生成部１０９は、そのようなデータを用いて、辞書データを生成するので、辞書データを生成した時点において、最もデータ圧縮率を高くできる辞書データを生成できる。
なお、実際は辞書データを生成する処理には時間がかかる。このため、辞書データを生成している間にもデータ発生部１１０からデータが入力する場合がある。この場合に、その入力したデータを、第２記憶部１０４に記憶されている古い辞書データに基づいて、圧縮部１０２が圧縮すると、次のような不都合が生じる。つまり、新規の辞書データを生成している間に古い辞書データに基づいて圧縮した圧縮データと、新規の辞書データを生成した後に当該新規の辞書データに基づいて圧縮した圧縮データとが整合しない。そこで、第１実施形態では、辞書データを生成している間には、圧縮部１０２は、データを圧縮しない構成となっている。具体的には、圧縮部１０２はバッファ（図示せず）を有する。また、圧縮部１０２は、辞書生成部１０９が動作している期間中には、データ発生部１１０から入力するデータを上記のバッファに蓄積しておく。そして、前記の如く、辞書生成部１０９が、生成した新規の辞書データを第２記憶部１０４に格納した以降に、圧縮部１０２はバッファに蓄積されているデータを、新たな辞書データを参照しながら圧縮する。
以下に、第１実施形態のデータ圧縮装置１００の動作例（データ圧縮方法）を、図１３のフローチャートを参照して説明する。図１３のフローチャートは、データ圧縮装置１００における制御装置（ＣＰＵ）１０１が実行するコンピュータプログラムの処理手順を示す。そのコンピュータプログラムは、データ圧縮装置１００が有するメモリやハードディスク等の記憶装置の記憶媒体（例えば、不揮発性の記憶媒体）に格納されている。また、当該コンピュータプログラムは、例えば、コンパクトディスク（ＣＤ）やメモリカード等の可搬タイプの記憶媒体に格納された後に、当該可搬タイプの記憶媒体からデータ圧縮装置１００の記憶装置の記憶媒体に格納される場合がある。
まず、データ発生部１１０からデータが入力すると（ステップＳ０１０）、圧縮部１０２は、第２記憶部１０４に記憶されている辞書データに基づいて、入力したデータを圧縮する（ステップＳ０２０）。また、圧縮部１０２は、圧縮後のデータである圧縮データを第１記憶部１０３に格納する。続いて、監視部１０５は、圧縮部１０２から出力される使用状況データ（圧縮に使用した辞書データとその使用回数を示すデータ）、及び、総容量データ（データ発生部１１０から圧縮部１０２に入力したデータの総容量を示すデータ）に基づき、辞書使用頻度を計算する（ステップＳ０３０）。そして、監視部１０５は、その計算結果をタイミング制御部１０６に出力する。
次に、タイミング制御部１０６は、監視部１０５から入力した使用頻度を合計した値（合計値）が、設定された閾値以下に低下したか否かを判定する（ステップＳ０４０）。タイミング制御部１０６は、上記合計値が閾値以下でない場合には（ステップＳ０４０におけるＮＯ）、何もしない。そして、データ圧縮装置１００はステップＳ０２０以降の動作を繰り返す。一方、タイミング制御部１０６は、上記合計値が閾値以下である場合には（ステップＳ０４０におけるＹＥＳ）、展開部１０７に動作開始を指示する。
これにより、展開部１０７は、第１記憶部１０３に記憶されている圧縮データを、第２記憶部１０４に記憶されている辞書データを参照しながら展開し、展開後のデータである展開データを第３記憶部１０８に格納する（ステップＳ０５０）。さらに続いて、展開部１０７は、第１記憶部１０３に記憶されている圧縮データを削除すると共に、辞書生成部１０９に動作開始を指示する。
これにより、辞書生成部１０９は、第３記憶部１０８に記憶されている展開データを、所定の種類の辞書式圧縮法（第１実施形態では、ＢＰＥ法）に従って辞書データを生成する。そして、辞書生成部１０９は、その生成した新規の辞書データを第２記憶部１０４に格納（更新）する（ステップＳ０６０）。つまり、辞書生成部１０９は、新規の辞書データを生成する。そして、辞書生成部１０９は、第２記憶部１０４にそれまで記憶されていた古い辞書データを削除し、当該第２記憶部１０４に新規に生成した辞書データを格納する。また、辞書生成部１０９は、第２記憶部１０４に新規の辞書データを格納（更新）した後に、圧縮部１０２に向けて、展開データを圧縮する指示を出す。
これにより、圧縮部１０２は、第３記憶部１０８に記憶されている展開データを、第２記憶部１０４に記憶された新規の辞書データを参照しながら圧縮する（ステップＳ０７０）。そして、圧縮部１０２は、圧縮後のデータである圧縮データを第１記憶部１０３に格納する。その後、データ圧縮装置１００は、前記ステップＳ０２０以降の動作を繰り返す。
なお、データ圧縮装置１００が稼働初期（すなわち、第２記憶部１０４に辞書データが記憶されていない状態）である場合には、データ圧縮装置１００は、次のように動作する。
例えば、圧縮部１０２は、データ発生部１１０からデータが入力すると、そのデータをそのまま第１記憶部１０３に格納すると共に、そのデータの総容量を示すデータ（総容量データ）を監視部１０５に出力する。監視部１０５は、その総容量データをそのまま、タイミング制御部１０６に出力する。タイミング制御部１０６は、データ発生部１１０から入力した総容量、あるいは、総容量データが入力した回数、あるいは、最初に総容量データが入力してからの経過時間等に基づいたタイミングで、展開部１０７に動作開始を指示する。これにより、展開部１０７は、第１記憶部１０３に記憶されているデータをそのまま第３記憶部１０８に格納する。そして、辞書生成部１０９が、第３記憶部１０８に格納されているデータを利用して辞書データを生成し、生成した新規の辞書データを第２記憶部１０４に格納する。その後、辞書生成部１０９は、圧縮部１０２に動作開始を指示する。これにより、圧縮部１０２は、第３記憶部１０８に格納されているデータを圧縮し、圧縮後のデータ（圧縮データ）を第１記憶部１０３に格納する。このような動作により、辞書データが生成され第２記憶部１０４に格納された以降には、データ圧縮装置１００は、図１３のフローチャートに示すような動作を繰り返す。
以上のように、この第１実施形態によれば、データ圧縮装置１００は、監視部１０５と、タイミング制御部１０６を有している。その監視部１０５は、データ発生部１１０から入力したデータを圧縮部１０２が圧縮する場合に、第２記憶部１０４に格納されている辞書データを圧縮部１０２がどれくらい使用しているかを監視する。そして、タイミング制御部１０６は、監視部１０５の監視結果に基づいて、辞書データの使用頻度が低下してきた（換言すれば、第２記憶部１０４に格納されている辞書データの有効度が下がってきた）場合に、辞書生成部１０９に、新たな辞書データを生成する指示を出す。この指示を受けて辞書生成部１０９が生成する新規の辞書データは、第３記憶部１０８に蓄積されている全ての展開データに基づいたデータである。このため、新規の辞書データは、当該辞書データを生成した時点において最も使用頻度の高い（つまり、圧縮効果の高い）辞書データとなる。
上記のように、この第１実施形態のデータ圧縮装置１００は、辞書データの使用頻度（有効度）が低下した場合に、有効度を高めた辞書データを生成でき、圧縮に使用する辞書データをその新規の辞書データに更新できる。これにより、データ発生部１１０から入力するデータの傾向が変化した場合に、データ圧縮装置１００は、傾向が変化した以降のデータに基づいて新規の辞書データを生成し、当該新規の辞書データ基づいてデータを圧縮できる。このため、データ圧縮装置１００は、データ発生部１１０から入力するデータの傾向が変化する場合にも、そのデータを常に効率良く圧縮できる。換言すれば、データ圧縮装置１００は、効率の良い圧縮率を維持できる。
（第２実施形態）
以下に、本発明に係る第２実施形態を、図面を参照して説明する。
図１４は、第２実施形態のデータ圧縮装置の構成を示すブロック図である。なお、この第２実施形態の説明において、第１実施形態と同様な構成部分には同一符号を付し、その重複説明を省略する。
第２実施形態のデータ圧縮装置（データ圧縮システム）２００は、第１実施形態のデータ圧縮装置１００の構成に加えて、さらに、リソース監視部（リソース監視手段）２０１と調整部（パラメータ調整手段）２０２を有している。また、データ圧縮装置２００は、第１実施形態で示したタイミング制御部１０６に代えて、タイミング制御部（辞書更新タイミング制御手段）２０３を有している。
前述した第１実施形態のデータ圧縮装置１００は、辞書データの使用頻度が低下した場合に辞書データを更新することによって、効率良い圧縮率を維持できる。これにより、データ圧縮装置１００は、メモリやディスク等の記憶媒体（例えば、第３記憶部１０８等を構成している記憶媒体など）の使用量を抑えることができる。一方で、辞書データを更新（生成）する動作は、データ圧縮装置１００の負荷が大きくなるので、頻繁に辞書データを更新することは望ましくない。このことから、メモリやディスクの容量に余裕がある場合には、圧縮率を高くすることよりも、データ圧縮装置１００の負荷を下げることを優先した方が良い場合もある。
このことを考慮して、第２実施形態のデータ圧縮装置２００は、前述したように、リソース監視部２０１と調整部２０２を有している。
リソース監視部２０１は、リソース（例えば、第３記憶部１０８等を構成する記憶媒体）の空き容量を監視（検知）し、監視結果を調整部２０２に出力する機能を有している。リソース監視部２０１が監視結果を調整部２０２に出力するタイミングは、例えば、予め定めた時間間隔毎である。
調整部（調整手段）２０２は、リソース監視部２０１から受け取った監視結果に基づき、タイミング制御部２０３で用いる閾値を調整する機能を有している。つまり、前記監視結果が、リソースの空き容量に余裕があることを示していれば、辞書データの有効度（使用頻度）が低くても直ぐにリソースを圧迫することはない。このことから、調整部２０２は、辞書データの更新頻度が低くなるように閾値を小さな値に調整する（設定する）。逆に、前記監視結果が、リソースの空き容量に余裕がないことを示していれば、辞書データの有効度が低くなると直ぐにリソースを圧迫してしまう。このことから、調整部２０２は、辞書データの更新頻度が高くなるように閾値を大きな値に調整する（設定する）。
より具体的には、例えば、調整部２０２は、リソースの空き容量（残り容量）が８０％以上である場合には、閾値を「０．５」に調整する（設定する）。また、調整部２０２は、リソースの空き容量が８０％未満、５０％以上である場合には、閾値を「０．７」に調整する。さらに、調整部２０２は、リソースの空き容量が５０％未満である場合には、閾値を「１．０」とする。このように、調整部２０２は、リソースの空き容量に応じて、閾値を段階的に設定してもよい。あるいは、調整部２０２は、リソースの空き容量に応じて、閾値を連続的に設定してもよい。なお、調整部２０２が閾値を設定する手法は、リソースの空き容量に応じて閾値を設定する手法であれば、どのような手法を採用してもよい。
タイミング制御部２０３は、上記のように設定される閾値を利用して、第１実施形態におけるタイミング制御部１０６と同様に、辞書データを更新するタイミングを決定する機能を有している。このタイミング制御部２０３は、調整部２０２により設定される閾値を利用する以外は、タイミング制御部１０６と同様の機能を有する。
この第２実施形態のデータ圧縮装置２００は、上記のように、リソースの空き容量に応じて辞書データの更新タイミングを変更できる。これにより、リソースに余裕がある場合には、データ圧縮装置２００は、辞書データを更新する回数（辞書更新回数）を減らすことができるため、当該装置の負荷を下げることができる。これに対して、リソースに余裕がない場合には、データ圧縮装置２００は、辞書更新回数を増やすことができるため、リソースの使用量（消費）を抑えることができる。
次に、リソース監視部２０１と調整部２０２の動作例を、図１５及び図１６を参照して説明する。図１５は、リソース監視部２０１と調整部２０２の動作例を示すフローチャートである。図１６は、調整部２０２のさらに具体的な動作例を示すフローチャートである。なお、図１５及び図１６のフローチャートに示される動作は、図１３のフローチャートに示される動作とは非同期に実行される。
図１５と図１６のフローチャートは、図１３のフローチャートと同様に、データ圧縮装置２００における制御装置（ＣＰＵ）１０１が実行するコンピュータプログラムの処理手順を示す。そのコンピュータプログラムは、前記同様に、データ圧縮装置２００が有するメモリやハードディスク等の記憶装置の記憶媒体（例えば、不揮発性の記憶媒体）に格納されている。また、当該コンピュータプログラムは、例えば、コンパクトディスク（ＣＤ）やメモリカード等の可搬タイプの記憶媒体に格納された後に、当該可搬タイプの記憶媒体からデータ圧縮装置２００の記憶装置の記憶媒体に格納される場合がある。
リソース監視部２０１は、例えば、予め設定された時間間隔毎に、データ圧縮装置２００が有するコンピュータのメモリやディスク等のリソースの空き容量を監視し、その監視結果を調整部２０２に出力する（図１５のステップＳ１１０）。続いて、調整部２０２は、その監視結果に基づいて、リソースの空き容量が大きい場合には、タイミング制御部２０３が利用する閾値を小さな値に設定する。反対に、調整部２０２は、リソースの空き容量が小さい場合には、上記閾値を大きな値に設定する（ステップＳ１２０）。
ここで、上記閾値を設定する動作例を図１６を参照して説明する。なお、図１６に示すステップＳ１１０の動作は、図１５に示すステップＳ１１０の動作と同様とする。
例えば、調整部２０２は、リソース監視部２０１から受け取った監視結果に基づいて、リソースの空き容量が８０％以上であるか否かを判定する（ステップＳ１２１）。リソースの空き容量が８０％以上である場合は、調整部２０２は、リソースの空き容量に余裕があると判断し、タイミング制御部２０３で利用する閾値を「０．５」に設定する（ステップＳ１２３）。
調整部２０２は、ステップＳ１２１において、リソースの空き容量が８０％以上でないと判定した場合には、リソースの空き容量が５０％以上であるか否かを判定する（ステップＳ１２２）。リソースの空き容量が５０％以上である場合には、調整部２０２は、前記閾値を「０．７」に設定する（ステップＳ１２４）。
調整部２０２は、ステップＳ１２２において、リソースの空き容量が５０％以上でないと判定した場合には、リソースの空き容量に余裕がないと判断し、前記閾値を「１．０」に設定する（ステップＳ１２５）。このように、第２実施形態では、調整部２０２は、リソースの空き容量に応じて前記閾値を調整する（設定する）。
なお、図１６に示すフローチャート（動作例）は、前記閾値を調整する手法の一例を示しているだけであり、前記閾値を調整する手法は、上記した手法に限定されない。
例えば、閾値を調整する段階は、８０％以上、８０％未満５０％以上、５０％未満の３段階でなく、もっと多くの段階であってもよい。また、調整される閾値は、「０．５」、「０．７」、「１．０」に限定されない。
（第３実施形態）
以下に、本発明に係る第３実施形態を、図面を参照して説明する。
図１７は、第３実施形態におけるデータ圧縮装置の構成を示すブロック図である。なお、第３実施形態の説明において、第１実施形態と同様な構成部分には同一符号を付し、その重複説明を省略する。
第３実施形態のデータ圧縮装置（データ圧縮システム）３００は、第１実施形態のデータ圧縮装置１００の構成に加えて、さらに、コスト見積もり部（辞書構築コスト見積もり手段）３０１と圧縮率見積り部（圧縮率見積もり手段）３０２を有している。また、当該データ圧縮装置３００は、第１実施形態のデータ圧縮装置１００におけるタイミング制御部１０６に代えて、後述するようなタイミング制御部（辞書更新タイミング制御手段）３０３を有している。
第２実施形態でも述べたように、第１実施形態のデータ圧縮装置１００は、辞書データの使用頻度が低下した場合に辞書データを更新することによって、効率良い圧縮率を維持できる。これにより、データ圧縮装置１００は、メモリやディスク等の記憶媒体の使用量を抑えることができる。一方で、辞書データを更新する動作は、データ圧縮装置１００の負荷が大きくなるので、頻繁に辞書データを更新することは望ましくない。このことから、メモリやディスクの容量に余裕がある場合には、圧縮率を高くすることよりも、データ圧縮装置１００の負荷を下げることを優先した方が良い場合もある。
このことを考慮して、第３実施形態のデータ圧縮装置３００は、コスト見積もり部３０１と圧縮率見積もり部３０２を有している。そして、データ圧縮装置３００は、第２実施形態とは異なる手法でもって、辞書データを更新するタイミングを変更する。
コスト見積り部（コスト見積り手段）３０１は、辞書データを新規に生成する際に要するコストを見積もる（推定する）機能を有する。すなわち、コスト見積もり部３０１は、タイミング制御部（タイミング制御手段）３０３から、動作を開始する指示を受けると、動作を開始する。その指示を受けるタイミングは、タイミング制御部３０３が、第１実施形態におけるタイミング制御部１０６と同様の動作によって辞書データの使用頻度が低下したと判断したタイミングである。コスト見積り部３０１は、第１記憶部１０３に記憶されている圧縮データのデータ量と、第２記憶部１０４に記憶されている辞書データのデータ量とに基づいて、辞書データを新規に生成する際に要するコストを見積もる。
第１実施形態で述べたように、辞書を生成するためには、まず、展開部１０７が、第１記憶部１０３に記憶されている圧縮データの全てについて、第２記憶部１０４に記憶されている辞書データを参照しながら展開して第３記憶部１０８に記憶する。続いて、辞書生成部１０９が、第３記憶部１０８に記憶されている展開データの全てについて隣り合う２文字の出現回数をカウントする動作（処理）と、一番カウント数が多かった隣り合う２文字を別の１文字で置き換える動作（処理）とを、繰り返す。このような動作は、データにおける隣り合う２文字の出現回数が全て１回になるまで行われる。このため、辞書を生成する際に要するコストは、第１記憶部１０３に記憶されているデータ量と、第２記憶部１０４に記憶されている辞書データのデータ量に比例したコストとなる。
このため、コスト見積り部３０１は、例えば、次式（２）を用いて、辞書データを生成する際に要するコストを算出する。
Ｃ＝Ｗ１×Ｄ１＋Ｗ２×Ｄ２・・・・・（２）
なお、式（２）において、Ｃは辞書データを生成する際に要するコストを示す。Ｄ１は第１記憶部１０３に記憶されている圧縮データのデータ量を示す。Ｄ２は第２記憶部１０４に記憶されている辞書データのデータ量を示す。さらに、Ｗ１とＷ２は重み定数を示す。これらＷ１とＷ２は、適宜な値に設定される。
コスト見積り部３０１は、前記コストＣを算出し終わると、算出結果である前記コストＣをタイミング制御部３０３に出力する。
なお、式（２）は前記コストを算出する算出式の一例である。コスト見積り部３０１は、第１記憶部１０３に記憶されている圧縮データのデータ量と、第２記憶部１０４に記憶されている辞書データのデータ量とを利用して、前記コストを算出する手法であれば、どのような手法を採用してもよい。
圧縮率見積り部３０２は、新規の辞書データに更新した以降の圧縮率を見積もる（推定する）機能を有している。すなわち、圧縮率見積り部３０２は、タイミング制御部３０３から、動作を開始する指示を受けると、動作を開始する。その指示を受けるタイミングは、タイミング制御部３０３が、前記同様に辞書データの使用頻度が低下したと判断したタイミングである。圧縮率見積り部３０２は、第１記憶部１０３に記憶されている圧縮データの一部を、第２記憶部１０４に記憶されている辞書データを用いて展開する。
その圧縮率見積り部３０２が展開するデータ量は、予め定めた固定のデータ量であってもよいし、あるいは、第１記憶部１０３に記憶されている全データ量の１０％に相当するデータ量というような、第１記憶部１０３の全データ量に比例するデータ量であってもよい。
そして、圧縮率見積り部３０２は、展開したデータを用いて新たな辞書データを生成し、当該辞書データを生成する際に用いた展開データをその新規の辞書データを利用して圧縮する。そして、圧縮率見積り部３０２は、その圧縮したデータの圧縮率を算出する。ここでの圧縮率とは、圧縮前のデータ量に対して圧縮後のデータ量がどれぐらい小さくなっているかを示す指標である。例えば、圧縮前のデータ量が１００ＭＢであり、圧縮後のデータ量が５０ＭＢである場合には、圧縮率は５０％となる。圧縮率見積り部３０２は、圧縮率を算出した後に、その圧縮率を示すデータを、タイミング制御部３０３に出力する。
この第３実施形態では、上記のように、圧縮率見積り部３０２は、第１記憶部１０３に記憶されているデータの全てではなく、一部のデータのみを展開している。さらに、圧縮率見積り部３０２は、その展開したデータに基づいて、辞書データを生成し、さらに、圧縮率を算出している（辞書データの評価を行っている）。これにより、圧縮率見積もり部３０２は、データ圧縮装置３００に大きな負荷をかけず、圧縮効果（圧縮率）を見積もる（算出する）ことができる。
タイミング制御部３０３は、前記同様にして辞書データの使用頻度が低下したと判断した場合には、動作を開始する指示を、第１実施形態とは異なり、展開部１０７ではなく、コスト見積り部３０１及び圧縮率見積り部３０２に対して出力する。
また、タイミング制御部３０３は、コスト見積り部３０１により算出されたコストと、圧縮率見積り部３０２により算出された圧縮率とに基づいて、辞書データを更新（生成）するか否かを判断する。
その判断は、例えば、前記コストをスコア化したデータと、圧縮率をスコア化したデータとを用いて行うことができる。ここで、下式（３）は、上記コストをスコア化したデータを算出する数式である。また、式（４）は、上記圧縮率をスコア化したデータを算出する数式である。
Ｓ１＝Ｗ３×Ｃ・・・・・（３）
Ｓ２＝Ｗ４×Ｒ・・・・・（４）
式（３）において、Ｓ１はコストをスコア化したデータを示す。Ｗ３は重み定数を示す。Ｃは式（２）により算出されるコストを示す。また、式（４）において、Ｓ２は圧縮率をスコア化したデータを示す。Ｗ４は重み定数を示す。Ｒは圧縮率見積もり部３０２が算出した圧縮率を示す。なお、式（３）と式（４）を用いて前記スコア化したデータを算出する手法は、前記スコア化したデータを算出する手法の一例である。前記スコア化したデータを算出する手法は上記手法に限定されない。
タイミング制御部３０３は、データ（圧縮率をスコア化したデータ）Ｓ２の方が、データ（コストをスコア化したデータ）Ｓ１より大きな値である場合には、新規の辞書データを生成する（辞書データを更新する）タイミングであると判断する。
換言すれば、データ（コストをスコア化したデータ）Ｓ１がデータ（圧縮率をスコア化したデータ）Ｓ２よりも大きい値である場合は、新規に辞書データを生成する（辞書データを更新する）タイミングではない。これにより、データ圧縮装置３００は、圧縮率が小さいにも拘わらず、辞書データを更新するという負荷の大きい動作（処理）を行わなくなる。このため、データ圧縮装置３００は、当該装置の負荷を軽減し、無駄を省くことができる。
以下に、第３実施形態のデータ圧縮装置３００の動作例を、図１８のフローチャートを参照して説明する。なお、図１８において、図１３に示した動作と同様の動作を示す部分には図１３と同一符号を付し、その重複説明を省略する。
図１８のフローチャートは、図１３のフローチャートと同様に、データ圧縮装置３００における制御装置（ＣＰＵ）１０１が実行するコンピュータプログラムの処理手順を示す。そのコンピュータプログラムは、前記同様に、データ圧縮装置３００が有するメモリやハードディスク等の記憶装置の記憶媒体（例えば、不揮発性の記憶媒体）に格納されている。また、当該コンピュータプログラムは、例えば、コンパクトディスク（ＣＤ）やメモリカード等の可搬タイプの記憶媒体に格納された後に、当該可搬タイプの記憶媒体からデータ圧縮装置３００の記憶装置の記憶媒体に格納される場合がある。
図１８のステップＳ０４３において、タイミング制御部３０３は、監視部１０５から受け取った使用頻度の合計値が、設定された閾値以下に低下したか否かを判定する。そして、タイミング制御部３０３は、使用頻度の合計値が閾値以下でなければ（ステップＳ０４３のＮＯ）、何もしない。そして、データ圧縮装置３００はステップＳ０２０以降の動作を繰り返す。これに対して、タイミング制御部３０３は、使用頻度の合計値が閾値以下である場合には（ステップＳ０４３のＹＥＳ）、コスト見積り部３０１及び圧縮率見積り部３０２に、それぞれ、動作を開始する指示を出す。
タイミング制御部３０３から指示を受けると、コスト見積り部３０１は前記コストを算出し、また、圧縮率見積り部３０２は前記圧縮率を算出する（ステップＳ２１０）。すなわち、ステップＳ２１０において、コスト見積り部３０１は、第１記憶部１０３に記憶されている圧縮データのデータ量と、第２記憶部１０４に記憶されている辞書データのデータ量とに基づいて、例えば式（２）式を利用して、コストＣを見積る（算出する）。そして、コスト見積り部３０１は、そのコストＣをタイミング制御部３０３に出力する。一方、圧縮率見積り部３０２は、第１記憶部１０３に記憶されている圧縮データの一部を、第２記憶部１０４に記憶されている辞書データを用いて展開する。そして、圧縮率見積り部３０２は、その展開されたデータを用いて新規の辞書データを生成し、さらにその新規の辞書データを利用して当該新規の辞書データを生成する際に利用した展開データを圧縮する。さらに、圧縮率見積り部３０２は、その圧縮したデータ（圧縮後のデータ）と、圧縮前のデータとを利用して、圧縮率（圧縮率＝（圧縮後のデータ量）÷（圧縮前のデータ量））を算出する。そして、圧縮率見積り部３０２は、その算出した圧縮率をタイミング制御部３０３に出力する。
続いて、タイミング制御部３０３は、コスト見積り部３０１から受け取ったコストＣを、式（３）を利用して、スコア化する。つまり、タイミング制御部３０３は、スコア化したデータＳ１を生成する。また、タイミング制御部３０３は、式（４）を利用して、圧縮率見積り部３０２から受け取った圧縮率Ｒをスコア化する。つまり、タイミング制御部３０３は、スコア化したデータＳ２を生成する。そして、タイミング制御部３０３は、データＳ１とデータＳ２を比較して、圧縮率の方がコストより大きいか否かを判定する（ステップＳ２２０）。タイミング制御部３０３は、圧縮率がコスト以下であるときには（ステップＳ２２０のＮＯ）、何もしない。そして、データ圧縮装置３００は、ステップＳ０２０以降の動作を繰り返す。一方、タイミング制御部３０３は、圧縮率がコストよりも大きい場合には（ステップＳ２２０のＹＥＳ）、展開部１０７に動作を開始する指示を出す。そして、データ圧縮装置３００は、前記したステップＳ０５０，Ｓ０６０，Ｓ０７０の動作を行った後に、ステップＳ０２０以降の動作を繰り返す。
この第３実施形態のデータ圧縮装置３００は、上記のように辞書データを更新するタイミングを変更できるため、圧縮効果が小さいにも拘わらず、負荷の大きい動作（辞書データを更新する動作）を行うことがなくなる。これにより、データ圧縮装置３００は、第１実施形態の効果に加えて、装置の負荷を軽減でき、かつ、無駄を省くことができるという効果が得られる。
（第４実施形態）
以下に、本発明に係る第４実施形態を、図面を参照して説明する。
図１９は、第４実施形態のデータ圧縮装置の構成を示すブロック図である。なお、第４実施形態の説明において、第１実施形態と同様な構成部分には同一符号を付し、その重複説明を省略する。
第４実施形態のデータ圧縮装置（データ圧縮システム）４００は、第１実施形態の構成に加えて、さらに、削除部（辞書データ削除手段）４０３を有する。また、データ圧縮装置４００は、第１実施形態で示した展開部１０７に代えて、部分展開部（圧縮データ一部展開手段）４０２を有し、また、第１実施形態で示したタイミング制御部１０６に代えて、タイミング制御部（辞書更新タイミング制御手段）４０１を有する。
前述した第１実施形態のデータ圧縮装置１００は、辞書データの使用頻度が低下してきた場合に辞書データを更新することによって、常に圧縮率の高い辞書データを有することができる。しかしながら、データ圧縮装置１００は、辞書データを更新する際には、毎回、全ての辞書データを作り直し、第２記憶部１０４に格納されている辞書データを一新する。このために、次のような問題が発生する。つまり、辞書データ全体の使用頻度が下がってきていたとしても、一部の辞書データに関しては、使用頻度がそれほど下がっていない、もしくは使用頻度が上がっている場合もある。このような場合に、全ての辞書データを作り直すことは無駄である。また、辞書データを更新する動作は負荷が高い。これらのことを考慮すると、データ圧縮装置は、辞書データを更新するタイミングの度に、全ての辞書データを作り直すのではなく、一部の辞書データを作り直すだけで済む場合には、その一部の辞書データだけを作り直すことが好ましい。そのように、一部の辞書データだけを作り直す場合には、データ圧縮装置１００は、負荷を軽減でき、かつ、辞書データを更新する処理速度を上げることができる。
そこで、第４実施形態のデータ圧縮装置４００は、辞書データを更新するタイミングにおいて、使用頻度が予め定めた設定値以下に低下した辞書データのみを削除し、次に述べるように新規の辞書データを生成する。
例えば、タイミング制御部４０１は、前記同様に、辞書データを更新すると判断した場合に、部分展開部４０２に動作を開始する指示を出す。このとき、タイミング制御部４０１は、図８に示したような使用頻度データに基づき、使用頻度が設定値以下に低下した辞書データを抽出する。そして、タイミング制御部４０１は、その抽出した辞書データを部分展開部４０２と削除部４０３に出力する。なお、上記のように辞書データを抽出する際に用いる設定値は、固定値でもよいし、稼働中に任意に変更できるようにしておいてもよい。
部分展開部（部分展開手段）４０２は、第１記憶部１０３に記憶されている圧縮データの一部を展開する機能を有する。すなわち、部分展開部４０２は、タイミング制御部４０１から受け取った辞書データを用いて、第１記憶部１０３に記憶されている圧縮データを展開し、展開した展開データを第３記憶部１０８に格納する。なお、タイミング制御部４０１が部分展開部４０２に出力する辞書データは、基本的には第２記憶部１０４に記憶されている辞書データの全てではなく一部である。このため、部分展開部４０２は、第１記憶部１０３に記憶されている一部の圧縮データだけを展開することになる。
また、タイミング制御部４０１が部分展開部４０２に出力する辞書データは、前記の如く、使用頻度が低下している辞書データである。このため、部分展開部４０２は、第１記憶部１０３に記憶されている圧縮データのうち、圧縮率があまり高くない圧縮データだけを展開し、圧縮率が高い圧縮データは展開しない。
部分展開部４０２は、上記のような圧縮データを展開する動作（処理）を終えると、第１記憶部１０３に記憶されている圧縮データを全て削除する。また、部分展開部４０２は、展開したデータを第３記憶部１０８に格納し終えると、辞書生成部１０９に動作を開始する指示を出力する。
削除部（削除手段）４０３は、タイミング制御部４０１から受け取った辞書データに該当する辞書データを第２記憶部１０４から削除する機能を有する。
辞書生成部１０９は、部分展開部４０２から前記指示を受け取ると、第３記憶部１０８に記憶されている展開データに基づいて、前記同様に、辞書データを生成する。そして、辞書生成部１０９は、新規に生成した辞書データを、第２記憶部１０４に格納（追記）する。辞書生成部１０９における上記機能（動作）以外の機能は、第１実施形態と同様である。
上記のように、第４実施形態のデータ圧縮装置４００は、使用頻度が低下している辞書データだけを削除し、一部の辞書データだけを更新できる。このため、データ圧縮装置４００は、全ての辞書データを作り直す場合に比べて、装置の負荷を軽減でき、また、辞書データを更新する処理速度を上げることができる。
以下に、第４実施形態のデータ圧縮システム４００の動作例（データ圧縮方法）を図２０のフローチャートを参照して説明する。なお、図２０において、図１３に示した動作と同様の動作を示す部分には図１３と同一符号を付し、その重複説明を省略する。
図２０のフローチャートは、図１３のフローチャートと同様に、データ圧縮装置４００における制御装置（ＣＰＵ）１０１が実行するコンピュータプログラムの処理手順を示す。そのコンピュータプログラムは、前記同様に、データ圧縮装置４００が有するメモリやハードディスク等の記憶装置の記憶媒体（例えば、不揮発性の記憶媒体）に格納されている。また、当該コンピュータプログラムは、例えば、コンパクトディスク（ＣＤ）やメモリカード等の可搬タイプの記憶媒体に格納された後に、当該可搬タイプの記憶媒体からデータ圧縮装置４００の記憶装置の記憶媒体に格納される場合がある。
図２０のステップＳ０４５において、タイミング制御部４０１は、監視部１０５から受け取った使用頻度の合計値が、設定された閾値以下に低下したか否かを判定する。そして、タイミング制御部４０１は、使用頻度の合計値が閾値以下でなければ（ステップＳ０４５のＮＯ）、何もしない。そして、データ圧縮装置４００は、ステップＳ０２０以降の動作を繰り返す。一方、タイミング制御部４０１は、使用頻度の合計値が閾値以下のときには（ステップＳ０４５のＹＥＳ）、監視部１０５から受け取った使用頻度データに基づき、使用頻度が設定値以下に低下した辞書データを抽出する。そして、タイミング制御部４０１は、部分展開部４０２に、その抽出した辞書データを出力すると共に、動作を開始する指示を出す。また、タイミング制御部４０１は、削除部４０３にも、抽出した辞書データを出力すると共に、動作を開始する指示を出す。
続いて、部分展開部４０２は、タイミング制御部４０１から前記指示を受け取ると、圧縮データの一部を展開する（ステップＳ３１０）。つまり、このステップＳ３１０では、部分展開部４０２は、第１記憶部１０３に記憶されている圧縮データのうち、使用頻度が設定値以下に低下した辞書データで圧縮されている圧縮データだけを、タイミング制御部４０１から受け取った辞書データを用いて展開する。そして、部分展開部４０２は、展開したデータを第３記憶部１０８に格納する。
また、ステップＳ３１０において、部分展開部４０２は、第１記憶部１０３に記憶されている圧縮データを展開し終えると、第１記憶部１０３に記憶されている圧縮データを全て削除する。また、部分展開部４０２は、展開したデータを第３記憶部１０８に格納し終えると、辞書生成部１０９に、動作を開始する指示を出す。
一方、削除部４０３は、タイミング制御部４０１から受け取った辞書データに該当するデータを第２記憶部１０４から削除する（ステップＳ３２０）。続いて、辞書生成部１０９は、辞書データを生成して第２記憶部１０４の辞書データを更新する（ステップＳ０６５）。このステップＳ０６５では、辞書生成部１０９は、第３記憶部１０８に記憶されている展開データに基づいて、辞書データを生成する。そして、辞書生成部１０９は、辞書データを生成し終えると、生成した新規の辞書データを第２記憶部１０４に格納（追記）する。
続いて、圧縮部１０２が、第３記憶部１０８に記憶されている展開データを圧縮する（ステップＳ０７５）。このステップＳ０７５では、圧縮部１０２は、新規に生成された辞書データを含む辞書データを参照しながら、展開データを圧縮する。圧縮部１０２は、圧縮したデータ（圧縮データ）を第１記憶部１０３に格納する。
以上のように、第４実施形態のデータ圧縮装置４００は、全ての辞書データを作り直すのではなく、使用頻度が下がっている辞書データだけを削除し、辞書データを更新できる。このため、データ圧縮装置４００は、全ての辞書データを１から作り直す場合に比べて、辞書データを生成する負荷を軽減でき、かつ、辞書データを更新する処理に要する時間を短縮できる（処理速度を上げることができる）という効果が得られる。
（第５実施形態）
以下に、本発明に係る第５実施形態を、図面を参照して説明する。
図２１は、本発明に係る第５実施形態のデータ圧縮装置の構成を示すブロック図である。なお、第５実施形態の説明において、第１実施形態と同一構成部分には同一符号を付し、その重複説明を省略する。
第５実施形態のデータ圧縮装置（データ圧縮システム）５００を構成する制御装置１０１は、圧縮部１０２と、切り替え部（圧縮アルゴリズム切り替え手段）５０１と、圧縮コスト見積り部（圧縮コスト見積り手段）５０２と、圧縮率見積り部（圧縮率見積り手段）５０３と、更新部（切り替え情報更新手段）５０４とを備える。
前述した各実施形態では、圧縮部１０２は、何れの場合にも、辞書式圧縮アルゴリズム（辞書式圧縮法）によりデータを圧縮している。これに対して、第５実施形態では、圧縮部１０２は、辞書式圧縮アルゴリズム以外の圧縮アルゴリズムでもデータを圧縮できる機能を備えている。また、圧縮部１０２は、辞書式圧縮アルゴリズム以外の圧縮アルゴリズムによりデータを圧縮している場合には、圧縮前のデータに対する圧縮後のデータの圧縮率を求める機能を備えている。
圧縮部１０２は、辞書式圧縮アルゴリズム以外の圧縮アルゴリズムによりデータを圧縮している場合には、総容量データ（データ発生部１１０から受け取ったデータの総容量を示すデータ）と、データ発生部１１０からデータを受け取ってからの経過時間を示すデータと、圧縮率を示すデータとを切り替え部５０１に出力する。なお、切り替え部５０１に出力する圧縮率は、圧縮部１０２が前回、切り替え部５０１に圧縮率を出力した以降にデータ発生部１１０から受け取ったデータを圧縮部１０２が圧縮した場合の圧縮率である。
圧縮部１０２は、辞書式圧縮アルゴリズムによりデータを圧縮している場合には、前述した使用状況データ（辞書データがどの程度使用されているかを示すデータ）と、総容量データ（データ発生部１１０から受け取ったデータの総容量を示すデータ）と、データ発生部１１０からデータを受け取ってからの経過時間を示すデータ（経過時間データ）とを、切り替え部５０１に出力する。
切り替え部（切り替え手段）５０１は、圧縮部１０２から受け取った各種データに基づいて、単位時間当たりのデータの流量を、例えば次式（５）を用いて計算する。
データの流量＝｛（今回の入力データの総容量）−（前回の入力データの総容量）｝÷｛（今回の経過時間）−（前回の経過時間）｝・・・・・（５）
切り替え部５０１は、上記のような計算を行うために、圧縮部１０２から受け取った総容量データと経過時間データを記憶しておく。そして、切り替え部５０１は、圧縮部１０２から新たに総容量データと経過時間データを受け取ると、古い総容量データと経過時間データを削除する。また、切り替え部５０１は、圧縮部１０２から初めて総容量データと経過時間データを受け取った場合には、データの流量を次式（６）を利用して計算する。
データの流量＝（今回の入力データの総容量）÷（今回の経過時間）・・・・・（６）
そして、切り替え部５０１は、算出したデータの流量が、所定の閾値Ｔ１以下に低くなった場合、あるいは、閾値Ｔ１よりも大きい所定の閾値Ｔ２以上に高くなった場合には、圧縮コスト見積り部５０２と圧縮率見積り部５０３に、動作を開始する指示を出す。
圧縮コスト見積り部（圧縮コスト見積り手段）５０２は、データを圧縮する際に要するコストを見積もる（推定する）機能を有する。すなわち、圧縮コスト見積り部５０２は、切り替え部５０１から指示を受けると、動作を開始する。圧縮コスト見積り部５０２は、予め設定されている複数の圧縮アルゴリズムのそれぞれでもって、データを圧縮する。そして、圧縮コスト見積り部５０２は、そのデータを圧縮する処理に要する計算量（コスト）を算出する。具体的には、圧縮コスト見積り部５０２は、第１記憶部１０３に記憶されている圧縮データの一部を、第２記憶部１０４に記憶されている辞書データを利用して展開し、これにより、圧縮前のデータを生成する。なお、圧縮コスト見積り部５０２が展開するデータのデータ量は、第１記憶部１０３に記憶されている圧縮データ全体に対する予め設定した割合に対応するデータ量であってもよいし、予め定めた固定量であってもよい。
圧縮コスト見積り部５０２は、上記のように生成した圧縮前のデータに対して、予め設定されている複数の圧縮アルゴリズムのそれぞれについて、次式（７）を利用して、計算量ＡＣを算出する。
ＡＣ＝（圧縮対象のデータ量）÷（圧縮にかかった時間）・・・・・（７）
なお、式（７）において、「圧縮対象のデータ量」は、圧縮コスト見積り部５０２が上記のように展開して得られた圧縮前のデータのデータ量を示す。また、「圧縮にかかった時間」は、その圧縮対象のデータを圧縮するのに要する時間を示す。
そして、圧縮コスト見積り部５０２は、計算量ＡＣを、例えば式（８）あるいは式（９）を利用して、スコア化し、スコア化したデータを、切り替え部５０１に出力する。
ＳＡ１＝Ｗ１１×ＡＣ１・・・・・（８）
ＳＡ２＝Ｗ１２×ＡＣ２・・・・・（９）
式（８）において、ＳＡ１は圧縮アルゴリズム１を利用してデータを圧縮した場合に要するコストをスコア化したデータ（圧縮コストスコア）を示す。Ｗ１１は重み定数を示す。ＡＣ１は圧縮アルゴリズム１に対応する前記計算量ＡＣを示す。式（９）において、ＳＡ２は圧縮アルゴリズム２を利用してデータを圧縮した場合に要するコストをスコア化したデータ（圧縮コストスコア）を示す。Ｗ１２は重み定数を示す。ＡＣ２は圧縮アルゴリズム２に対応する前記計算量ＡＣを示す。
なお、スコア化したデータを式（８）又は式（９）を利用して得る手法は、データをスコア化する手法の一例にすぎない。圧縮コスト見積り部５０２がデータをスコア化する手法は、計算量ＡＣを用いて算出する手法であれば、特に限定されない。
圧縮率見積り部（圧縮率見積り手段）５０３は、新規の辞書データを生成した場合における圧縮率を見積もる（推定する）機能を有する。すなわち、圧縮率見積り部５０３は、切り替え部５０１から指示を受け取ると、動作を開始する。圧縮率見積り部５０３は、圧縮率を算出する。具体的には、例えば、圧縮率見積り部５０３は、圧縮コスト見積り部５０２と同様に、第１記憶部１０３に記憶されている圧縮データの一部を利用して、圧縮前のデータを生成する。そして、圧縮率見積り部５０３は、圧縮前のデータに対して、予め設定されている複数の圧縮アルゴリズムのそれぞれについて、圧縮前のデータ量に対して圧縮後のデータ量がどの程度小さくなっているかを示す指標である圧縮率を算出する。そして、圧縮率見積り部５０３は、その算出した圧縮率を例えば式（１０）や式（１１）を利用してスコア化し、スコア化したデータを切り替え部５０１に出力する。
ＳＢ１＝Ｗ１３×Ｒ１・・・・・（１０）
ＳＢ２＝Ｗ１４×Ｒ２・・・・・（１１）
式（１０）において、ＳＢ１は圧縮アルゴリズム１を利用して圧縮したデータの圧縮率をスコア化したデータ（圧縮率スコア）を示す。Ｗ１３は重み定数を示す。Ｒ１は圧縮アルゴリズム１に対応する前記圧縮率を示す。式（１１）において、ＳＢ２は圧縮アルゴリズム２を利用して圧縮したデータの圧縮率をスコア化したデータ（圧縮率スコア）を示す。Ｗ１４は重み定数を示す。Ｒ２は圧縮アルゴリズム１に対応する前記圧縮率を示す。
スコア化したデータを式（１０）又は式（１１）を利用して得る手法は、データをスコア化する手法の一例にすぎない。圧縮率見積り部５０３がデータをスコア化する手法は、圧縮率を用いて算出する手法であれば、特に限定されない。
切り替え部５０１は、圧縮コスト見積り部５０２と圧縮率見積り美５０３からそれぞれ受け取ったデータに基づいて、圧縮アルゴリズムを切り替えるか、あるいは、どの圧縮アルゴリズムに切り替えるかを判断する機能を有する。
具体的には、辞書データの使用頻度が低下してきていることに起因して圧縮率が低下している場合には、より圧縮率の高いアルゴリズムに切り替えることが必要である。この場合には、切り替え部５０１は、現在の圧縮率スコアよりも高い圧縮率スコア、および、現在の圧縮コストスコアよりも高い圧縮コストスコアを有する圧縮アルゴリズムを選択する。切り替え候補の圧縮アルゴリズムが複数ある場合には、切り替え部５０１は、例えば、次式（１２）を利用して総合スコアを算出する。
ＳＣ１＝Ｗ１５×ＳＡ１＋Ｗ１６×ＳＢ１・・・・・（１２）
式（１２）において、ＳＣ１は圧縮アルゴリズム１に対応する総合スコアを示す。Ｗ１５、Ｗ１６は重み定数を示す。ＳＡ１は圧縮アルゴリズム１に対応する圧縮コストスコアを示す。ＳＢ１は圧縮アルゴリズム１に対応する圧縮率スコアを示す。重み定数Ｗ１５、Ｗ１６の値は予め設定される。当該重み定数Ｗ１５、Ｗ１６の値は、圧縮コスト（実施コスト）を重視するか、圧縮率を重視するかに応じて、適宜に調整される。つまり、圧縮率よりも圧縮コストを重視する場合には、重み定数Ｗ１５は大きく設定される。これに対して、圧縮コストよりも圧縮率を重視する場合には、重み定数Ｗ１６が大きく設定される。
一方、データの流量が閾値Ｔ１以下に低くなった場合には、データの流量が少なくなっているので、次のような圧縮アルゴリズムを採用することが好ましい。その圧縮アルゴリズムとは、圧縮に時間を要する高負荷な圧縮アルゴリズムであるが、圧縮率が高い圧縮アルゴリズムである。
切り替え部５０１は、そのような場合には、圧縮コストスコアが低くても、圧縮率スコアが高い圧縮アルゴリズムを選択する。具体的には、切り替え部５０１は、式（１２）と同様の数式を利用して、各圧縮アルゴリズムについてそれぞれ総合スコアを算出する。なお、その数式における重み定数Ｗ１６を大きく設定することによって、圧縮率スコアが圧縮コストスコアよりも重視される。
切り替え部５０１は、それら総合スコアを比較した結果に基づいて、どの圧縮アルゴリズムに切り替えるかを決定する。
また、データの流量が閾値Ｔ２以上に多くなった場合には、データの流量が大きくなっているので、次のような圧縮アルゴリズムを採用することが好ましい。その圧縮アルゴリズムとは、圧縮率が低くとも低負荷な圧縮アルゴリズムである。
そのような場合には、切り替え部５０１は、圧縮率スコアが低くても、圧縮コストスコアが高い圧縮アルゴリズムを選択する。具体的には、切り替え部５０１は、式（１２）と同様の数式を利用して、各圧縮アルゴリズムについてそれぞれ総合スコアを算出する。なお、その数式における重み定数Ｗ１５を大きく設定することによって、圧縮コストスコアが圧縮率スコアよりも重視される。
切り替え部５０１は、上記のように選択した圧縮アルゴリズムを、圧縮部１０２で使用している新たな圧縮アルゴリズムとして設定する。つまり、切り替え部５０１は、データを圧縮する際に利用する圧縮アルゴリズムを切り替える。また、切り替え部５０１は、更新部５０４に向けて、動作を開始する指示を出すと共に、切り替え後の圧縮アルゴリズムを示す情報を出力する。
更新部（更新手段）５０４は、切り替え部５０１から指示を受けると動作を開始する。更新部５０４は、第１記憶部１０３に記憶されているデータのどこからどこまでがどの圧縮アルゴリズムで圧縮されたデータであるかを示す情報を更新する。また、更新部５０４は、第２記憶部１０４に記憶されている辞書データのどこからどこまでがどの圧縮アルゴリズムで使用している辞書データであるのかという情報を更新する。
具体的には、更新部５０４が切り替え手段５０１から受け取った圧縮アルゴリズムの情報は、少なくとも圧縮アルゴリズム名の情報を含む。そして、更新部５０４は、第１記憶部１０３及び第２記憶部１０４のそれぞれに、どのデータがどの圧縮アルゴリズムに関連するデータであるのかが分かるように、圧縮アルゴリズムの情報を記憶（付加）する。
例えば、第１記憶部１０３に記憶されているデータは、以下のように、圧縮アルゴリズム毎に分類される。
［第１記憶部１０３］
圧縮アルゴリズムＡ
ＡＢＣＡＢＡＢＣ
ＤＡＣＥＦＤＡＳ
ＡＸＭＣＡＬＤＡ
圧縮アルゴリズムＢ
ＡＮＳＫＡＮＣＸ
ＣＩＫＡＤＬＡＬ
圧縮アルゴリズムＣ
ＤＫＬＡＢＮＫＣ
ＡＬＫＤＫＡＪＤ
ＳＬＤＫＪＡＬＬ
第２記憶部１０４に関しても同様である。
なお、圧縮部１０２が最初に採用する圧縮アルゴリズムは予め設定されている。また、この第５実施形態においては、圧縮部１０２は、データを圧縮する機能に加えて、辞書データを生成し、かつ、生成後の辞書データを第２記憶部１０４に登録する機能をも有する。
以下に、第５実施形態のデータ圧縮装置５００の動作例（データ圧縮方法）を、図２２のフローチャートを参照して説明する。なお、図２２において、図１８に示した動作と同様の動作を示す部分には図１８と同一符号を付し、その重複説明を省略する。
図２２のフローチャートは、図１３のフローチャートと同様に、データ圧縮装置５００における制御装置（ＣＰＵ）１０１が実行するコンピュータプログラムの処理手順を示す。そのコンピュータプログラムは、前記同様に、データ圧縮装置５００が有するメモリやハードディスク等の記憶装置の記憶媒体（例えば、不揮発性の記憶媒体）に格納されている。また、当該コンピュータプログラムは、例えば、コンパクトディスク（ＣＤ）やメモリカード等の可搬タイプの記憶媒体に格納された後に、当該可搬タイプの記憶媒体からデータ圧縮装置５００の記憶装置の記憶媒体に格納される場合がある。
図２２に示すステップＳ０４０において切り替え部５０１が辞書データの使用頻度が低下していないと判断した場合には、当該切り替え部５０１は、データの流量を計算する（ステップＳ４１０）。つまり、切り替え部５０１は、圧縮部１０２から受け取った総容量データおよび経過時間データに基づいて、前記式（６）を利用してデータ流量を算出する。そして、切り替え部５０１は、算出したデータ流量が閾値Ｔ１以下に低くなっているか、あるいは、データ流量が閾値Ｔ２以上に多くなっているかを判定する。これにより、切り替え部５０１は、データの流量が閾値Ｔ１以下もしくは閾値Ｔ２以上であると判断した場合には、圧縮コスト見積り部５０２と圧縮率見積り部５０３に動作を開始する指示を出す。
これにより、圧縮コスト見積り部５０２と圧縮率見積り部５０３が動作を開始する（ステップＳ４２０）。つまり、圧縮コスト見積り部５０２は、予め設定されている複数の圧縮アルゴリズムのそれぞれについて、前述したように、圧縮コストスコアを算出する。また、圧縮率見積り部５０３は、予め設定されている複数の圧縮アルゴリズムのそれぞれについて、前述したように、圧縮率スコアを算出する。
切り替え部５０１は、算出された圧縮コストスコアと圧縮率スコアに基づいて、圧縮アルゴリズムを切り替えるか否か（現在使用している圧縮アルゴリズムよりも適切な圧縮アルゴリズムが有るか否か）を判定する（ステップＳ４３０）。
切り替え部５０１は、圧縮アルゴリズムを切り替えると判定した場合には、前述したように、切り替え後の圧縮アルゴリズムを選択する。そして、切り替え部５０１は、データを圧縮する際に利用する圧縮アルゴリズムを、選択した圧縮アルゴリズムに切り替える（ステップＳ４４０）。また、切り替え部５０１は、第１記憶部１０３および第２記憶部１０４のそれぞれに、どのデータがどの圧縮アルゴリズムに関連するデータであるのかが分かるように、圧縮アルゴルリズムの情報を記憶（付加）する。
このように、第５実施形態によれば、切り替え部５０１は、データの流量が閾値Ｔ１以下である場合には、圧縮率を重視して、圧縮アルゴリズムを選択する。また、切り替え部５０１は、データの流量が閾値Ｔ２以上である場合には、圧縮コストを重視して、圧縮アルゴリズムを選択する。このように、切り替え部５０１は、圧縮コストと圧縮率に基づいて圧縮アルゴリズムを選択する。これにより、切り替え部５０１は、辞書式圧縮アルゴリズム以外の圧縮アルゴリズムをも含む複数の圧縮アルゴリズムの中から、有効度の高い圧縮アルゴリズムを選択できる。つまり、切り替え部５０１は、適切なタイミングで、有効度の高い圧縮アルゴリズムに切り替えることができる。このため、第５実施形態のデータ圧縮装置５００は、効率の良いデータ圧縮を維持できる。
なお、本発明は上記した各実施形態に限定されるものではなく、様々な実施の形態を採り得る。例えば、データ圧縮装置は、図２３に示すような構成を有していてもよい。すなわち、このデータ圧縮装置６００は、圧縮部（圧縮手段）６０１と、監視部（監視手段）６０２と、タイミング制御部（タイミング制御手段）６０３と、辞書生成部（辞書生成手段）６０４とを有している。圧縮部６０１は、圧縮対象のデータを、予め与えられている辞書データに基づいて圧縮する機能を備えている。監視部６０２は、圧縮部６０１が前記データを圧縮する場合における前記辞書データの使用頻度を算出する機能を備えている。タイミング制御部６０３は、算出した前記使用頻度が予め設定された閾値よりも低下した場合に、前記辞書データを更新する指示を出す機能を備えている。辞書生成部６０４は、その指示を受けて、圧縮部１０２が圧縮したデータを利用して前記辞書データを新規に生成する機能を備えている。
このデータ圧縮装置６００においても、前記各実施形態と同様に、効率の良いデータ圧縮率を維持できる。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
なお、この出願は、２０１０年２月２３日に出願された日本出願の特願２０１０−０３６８０６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
さらに、上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が設定された閾値より低下したときに、辞書の更新を指示する辞書更新タイミング制御ステップと、
前記圧縮ステップで得られた前記圧縮データを、圧縮前のデータに展開するデータ展開ステップと、
前記辞書更新タイミング制御ステップによる前記辞書の更新の指示に従って、前記データ展開ステップで得られた前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築ステップと
を含むデータ圧縮方法。
（付記２）
前記辞書使用頻度監視ステップは、前記圧縮ステップで前記圧縮対象のデータを圧縮する際に用いた前記辞書データと、その辞書データ毎の使用回数と、前記圧縮対象のデータの総量とを入力として受け、各辞書データ毎に前記使用回数を前記圧縮対象のデータの総量で除算して、前記使用頻度の計算結果を得る付記１記載のデータ圧縮方法。
（付記３）
前記辞書更新タイミング制御ステップは、前記辞書使用頻度監視ステップにより得られた全ての前記辞書データの使用頻度の計算結果の合計値が前記閾値よりも小さいときに、前記辞書の更新を指示する付記１又は２記載のデータ圧縮方法。
（付記４）
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が閾値より低下したときに、辞書の更新を指示する辞書更新タイミング制御ステップと、
前記圧縮ステップで得られる前記圧縮データを、圧縮前のデータに展開するデータ展開ステップと、
使用するリソースの空き容量を出力するリソース監視ステップと、
前記リソース監視ステップで出力される前記リソースの空き容量に応じて、前記辞書更新タイミング制御ステップで使用する前記閾値の値を可変設定するパラメータ調整ステップと、
前記辞書更新タイミング制御ステップによる前記辞書の更新の指示に従って、前記データ展開ステップで得られる前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築ステップと
を含むデータ圧縮方法。
（付記５）
前記パラメータ調整ステップは、前記リソース監視ステップからの前記リソースの空き容量が大きいほど前記辞書更新タイミング制御ステップで使用する前記閾値を小さな値に可変設定し、前記リソースの空き容量が小さいほど前記閾値を大きな値に可変設定する付記４記載のデータ圧縮方法。
（付記６）
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が閾値より低下したときに、前記圧縮データのデータ量と前記辞書データ記憶手段に記憶されている前記辞書データのデータ量とに応じた辞書構築コストを見積る辞書構築コスト見積りステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が閾値より低下したときに、前記辞書データを更新した際の圧縮率を見積る圧縮率見積りステップと、
前記辞書コストと前記圧縮率とを比較し、その比較結果に応じて新たな辞書の構築を行うか否かを決定する辞書更新タイミング制御ステップと、
前記圧縮ステップから出力される前記圧縮データを、圧縮前のデータに展開するデータ展開ステップと、
前記辞書更新タイミング制御ステップにより前記新たな辞書を構築する決定がなされたときに、前記データ展開ステップで得られる前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築ステップと
を含むデータ圧縮方法。
（付記７）
前記圧縮率見積りステップは、前記圧縮データの一部を前記辞書データ記憶手段に記憶されている前記辞書データを用いて展開した圧縮前のデータと、その圧縮前のデータを用いて構築した新たな辞書を用いて圧縮した圧縮後のデータとの比率を前記圧縮率として見積る付記６記載のデータ圧縮方法。
（付記８）
前記辞書更新タイミング制御ステップは、前記辞書コストをスコア化した第１の値と、前記圧縮率をスコア化した第２の値とを比較し、前記第２の値の方が前記第１の値よりも大きいときにのみ、前記新たな辞書の構築を行うことを決定する付記６又は７記載のデータ圧縮方法。
（付記９）
前記データ展開ステップは、
前記圧縮手段から出力される前記圧縮データを記憶する圧縮データ記憶ステップと、
前記辞書更新タイミング制御ステップによる前記辞書の更新の指示に従って、前記圧縮データ記憶ステップで記憶された前記圧縮データを、前記辞書データ記憶手段に記憶されている前記辞書データを参照しながら展開して圧縮前のデータである展開データを得る圧縮データ展開ステップと、
前記圧縮データ展開ステップにより得られた前記展開データを記憶する展開データ記憶ステップと
を備え、前記辞書構築ステップは、前記圧縮データ展開ステップにより前記圧縮データ記憶ステップで記憶された全ての前記圧縮データの展開終了により動作を開始し、前記展開データ記憶で記憶された前記圧縮前のデータである前記展開データに基づき、前記新たな辞書データを構築する付記１乃至８のうち、いずれか一項に記載のデータ圧縮方法。
（付記１０）
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を各辞書データ毎に計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップにより計算された各辞書データ毎の前記使用頻度のうち、設定された閾値より低下している使用頻度に対応した辞書データを抽出して出力する辞書更新タイミング制御ステップと、
前記辞書更新タイミング制御ステップにより得られた前記辞書データを用いて、前記圧縮で得られる前記圧縮データの一部を、圧縮前のデータに展開するデータ一部展開ステップと、
前記辞書更新タイミング制御ステップにより得られた前記辞書データを、前記辞書データ記憶手段に記憶されている複数の辞書データの中から削除する辞書データ削除ステップと、
前記データ一部展開ステップから出力される一部の前記圧縮前のデータから新たな辞書データを構築して、この新たな辞書データを前記辞書データ記憶手段に追記する辞書構築ステップと
を含むデータ圧縮方法。
（付記１１）
前記データ一部展開ステップは、
前記圧縮ステップで得られた前記圧縮データを記憶する圧縮データ記憶ステップと、
前記辞書更新タイミング制御ステップで得られた前記辞書データを用いて、前記圧縮データ記憶ステップで記憶された前記圧縮データの一部を展開して一部の圧縮前のデータを得る圧縮データ一部展開ステップと、
前記圧縮データ一部展開ステップにより得られた前記一部の圧縮前のデータを記憶する展開データ記憶ステップと
を備え、
前記辞書構築ステップは、前記圧縮データ一部展開ステップにより前記圧縮データ記憶ステップで記憶された前記圧縮データの一部の展開終了により動作を開始し、前記展開データ記憶ステップで記憶された前記一部の圧縮前のデータに基づき、前記新たな辞書データを構築する付記１０記載のデータ圧縮方法。
（付記１２）
逐次的に入力される圧縮対象のデータを、指定された圧縮アルゴリズムに従い圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップによる圧縮前のデータに対して、予め設定されている複数の圧縮アルゴリズムのそれぞれにより圧縮して、圧縮前のデータ量と圧縮にかかった時間の比である圧縮コストを、前記複数の圧縮アルゴリズムのそれぞれについて見積る圧縮コスト見積りステップと、
前記圧縮ステップによる圧縮前のデータに対して、予め設定されている前記複数の圧縮アルゴリズムのそれぞれにより圧縮したときの圧縮率を算出する圧縮率見積りステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する辞書データの使用頻度が閾値より低下したときに、前記圧縮コスト見積りステップで得られた前記圧縮コストと前記圧縮率見積りステップで得られた前記圧縮率とに基づいて、前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも圧縮率及び圧縮コストが高い圧縮アルゴリズムを前記圧縮ステップで用いる圧縮アルゴリズムに選択する圧縮アルゴリズム切り替えステップと
を含むデータ圧縮方法。
（付記１３）
前記圧縮アルゴリズム切り替えステップは、前記圧縮ステップにより圧縮される前記圧縮対象のデータのデータ流量を算出し、そのデータ流量が第１の閾値以下、又は前記第１の閾値より大なる第２の閾値以上となったときに、前記圧縮コスト見積りステップで得られた前記圧縮コストと前記圧縮率見積りステップで得られた前記圧縮率とに基づいて、前記データ流量が前記第１の閾値以下のときには前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも少なくとも前記圧縮率の高い圧縮アルゴリズムを前記圧縮ステップで用いる圧縮アルゴリズムに選択し、前記データ流量が前記第２の閾値以上のときには前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも少なくとも前記圧縮コストの高い圧縮アルゴリズムを前記圧縮ステップで用いる圧縮アルゴリズムに選択する付記１２記載のデータ圧縮方法。
（付記１４）
圧縮のための辞書データを記憶する辞書データ記憶手段と、
逐次的に入力される圧縮対象のデータを、前記辞書データ記憶手段に記憶されている前記辞書データを参照しながら圧縮して、圧縮データを出力する圧縮手段と、
前記圧縮手段から出力される前記圧縮データを、圧縮前のデータに展開するデータ展開手段と、
前記圧縮手段が前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視手段と、
前記辞書使用頻度監視手段による前記使用頻度の計算結果が設定された閾値より低下したときに、辞書の更新を指示する辞書更新タイミング制御手段と、
前記辞書更新タイミング制御手段から出力された前記辞書の更新の指示に従って、前記データ展開手段から出力される前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築手段と
を有するデータ圧縮システム。
（付記１５）
前記辞書使用頻度監視手段は、前記圧縮手段が前記圧縮対象のデータを圧縮する際に用いた前記辞書データと、その辞書データ毎の使用回数と、前記圧縮対象のデータの総量とを前記圧縮手段から入力として受け、各辞書データ毎に前記使用回数を前記圧縮対象のデータの総量で除算して、前記使用頻度の計算結果を得る付記１４記載のデータ圧縮システム。
（付記１６）
前記辞書更新タイミング制御手段は、前記辞書使用頻度監視手段から入力された全ての前記辞書データの使用頻度の計算結果の合計値が前記閾値よりも小さいときに、前記辞書の更新を指示する付記１４又は１５記載のデータ圧縮システム。
（付記１７）
圧縮のための辞書データを記憶する辞書データ記憶手段と、
逐次的に入力される圧縮対象のデータを、前記辞書データ記憶手段に記憶されている前記辞書データを参照しながら圧縮して、圧縮データを出力する圧縮手段と、
前記圧縮手段から出力される前記圧縮データを、圧縮前のデータに展開するデータ展開手段と、
前記圧縮手段が前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視手段と、
前記辞書使用頻度監視手段による前記使用頻度の計算結果が閾値より低下したときに、辞書の更新を指示する辞書更新タイミング制御手段と、
使用するリソースの空き容量を出力するリソース監視手段と、
前記リソース監視手段からの前記リソースの空き容量に応じて、前記辞書更新タイミング制御手段で使用する前記閾値の値を可変設定するパラメータ調整手段と、
前記辞書更新タイミング制御手段から出力された前記辞書の更新の指示に従って、前記データ展開手段から出力される前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築手段と
を有するデータ圧縮システム。
（付記１８）
前記パラメータ調整手段は、前記リソース監視手段からの前記リソースの空き容量が大きいほど前記辞書更新タイミング制御手段で使用する前記閾値を小さな値に可変設定し、前記リソースの空き容量が小さいほど前記閾値を大きな値に可変設定する付記１７記載のデータ圧縮システム。
（付記１９）
圧縮のための辞書データを記憶する辞書データ記憶手段と、
逐次的に入力される圧縮対象のデータを、前記辞書データ記憶手段に記憶されている前記辞書データを参照しながら圧縮して、圧縮データを出力する圧縮手段と、
前記圧縮手段から出力される前記圧縮データを、圧縮前のデータに展開するデータ展開手段と、
前記圧縮手段が前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視手段と、
前記圧縮データのデータ量と前記辞書データ記憶手段に記憶されている前記辞書データのデータ量とに応じた辞書構築コストを見積もる辞書構築コスト見積り手段と、
前記辞書データを更新した際の圧縮率を見積もる圧縮率見積り手段と、
前記辞書使用頻度監視手段による前記使用頻度の計算結果が閾値より低下したときに、前記辞書構築コスト見積り手段及び前記圧縮率見積り手段のそれぞれに動作を指示することにより得られた、前記辞書構築コスト構築手段からの前記辞書コストと前記圧縮率見積り手段からの前記圧縮率とを比較し、その比較結果に応じて新たな辞書の構築を行うか否かを決定する辞書更新タイミング制御手段と、
前記辞書更新タイミング制御手段により前記新たな辞書を構築する決定がなされたときに、前記データ展開手段から出力される前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築手段と
を有するデータ圧縮システム。
（付記２０）
前記圧縮率見積り手段は、前記圧縮データの一部を前記辞書データ記憶手段に記憶されている前記辞書データを用いて展開した圧縮前のデータと、その圧縮前のデータを用いて構築した新たな辞書を用いて圧縮した圧縮後のデータとの比率を前記圧縮率として見積もる付記１９記載のデータ圧縮システム。
（付記２１）
前記辞書更新タイミング制御手段は、前記辞書構築コスト構築手段からの前記辞書コストをスコア化した第１の値と、前記圧縮率見積り手段からの前記圧縮率をスコア化した第２の値とを比較し、前記第２の値の方が前記第１の値よりも大きいときにのみ、前記新たな辞書の構築を行うことを決定する付記１９又は２０記載のデータ圧縮システム。
（付記２２）
前記データ展開手段は、
前記圧縮手段から出力される前記圧縮データを記憶する圧縮データ記憶手段と、
前記辞書更新タイミング制御手段から出力された前記辞書の更新の指示に従って、前記圧縮データ記憶手段に記憶されている前記圧縮データを、前記辞書データ記憶手段に記憶されている前記辞書データを参照しながら展開して圧縮前のデータである展開データを得る圧縮データ展開手段と、
前記圧縮データ展開手段により得られた前記展開データを記憶する展開データ記憶手段と
を備え、前記辞書構築手段は、前記圧縮データ展開手段により前記圧縮データ記憶手段に記憶されている全ての前記圧縮データの展開終了により動作を開始し、前記展開データ記憶手段に記憶されている前記圧縮前のデータである前記展開データに基づき、前記新たな辞書データを構築する付記１４乃至２１のうち、いずれか一項記載のデータ圧縮システム。
（付記２３）
圧縮のための複数の辞書データを記憶する辞書データ記憶手段と、
逐次的に入力される圧縮対象のデータを、前記辞書データ記憶手段に記憶されている前記辞書データを参照しながら圧縮して、圧縮データを出力する圧縮手段と、
前記圧縮手段が前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を各辞書データ毎に計算する辞書使用頻度監視手段と、
前記辞書使用頻度監視手段による各辞書データ毎の前記使用頻度のうち、設定された閾値より低下している使用頻度に対応した辞書データを抽出して出力する辞書更新タイミング制御手段と、
前記辞書更新タイミング制御手段から出力された前記辞書データを用いて、前記圧縮手段から出力される前記圧縮データの一部を、圧縮前のデータに展開するデータ一部展開手段と、
前記辞書更新タイミング制御手段から出力された前記辞書データを、前記辞書データ記憶手段に記憶されている複数の辞書データの中から削除する辞書データ削除手段と、
前記データ一部展開手段から出力される一部の前記圧縮前のデータから新たな辞書データを構築して、この新たな辞書データを前記辞書データ記憶手段に追記する辞書構築手段と
を有するデータ圧縮システム。
（付記２４）
前記データ一部展開手段は、
前記圧縮手段から出力される前記圧縮データを記憶する圧縮データ記憶手段と、
前記辞書更新タイミング制御手段から出力された前記辞書データを用いて、前記圧縮データ記憶手段に記憶されている前記圧縮データの一部を展開して一部の圧縮前のデータを得る圧縮データ一部展開手段と、
前記圧縮データ一部展開手段により得られた前記一部の圧縮前のデータを記憶する展開データ記憶手段と
を備え、
前記辞書構築手段は、前記圧縮データ一部展開手段により前記圧縮データ記憶手段に記憶されている前記圧縮データの一部の展開終了により動作を開始し、前記展開データ記憶手段に記憶されている前記一部の圧縮前のデータに基づき、前記新たな辞書データを構築する付記２３記載のデータ圧縮システム。
（付記２５）
圧縮アルゴリズムが辞書式のときに用いられる辞書データを記憶する辞書データ記憶手段と、
逐次的に入力される圧縮対象のデータを、指定された圧縮アルゴリズムに従い圧縮して、圧縮データを出力する圧縮手段と、
前記圧縮手段の圧縮前のデータに対して、予め設定されている複数の圧縮アルゴリズムのそれぞれにより圧縮して、圧縮前のデータ量と圧縮にかかった時間の比である圧縮コストを、前記複数の圧縮アルゴリズムのそれぞれについて見積もる圧縮コスト見積り手段と、
前記圧縮手段の圧縮前のデータに対して、予め設定されている前記複数の圧縮アルゴリズムのそれぞれにより圧縮したときの圧縮率を算出する圧縮率見積り手段と、
前記圧縮手段が前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度が閾値より低下したときに、前記圧縮コスト見積り手段と前記圧縮率見積り手段に動作を指示することにより得られた、前記圧縮コスト見積り手段からの前記圧縮コストと前記圧縮率見積り手段からの前記圧縮率とに基づいて、前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも圧縮率及び圧縮コストが高い圧縮アルゴリズムを前記圧縮手段で用いる圧縮アルゴリズムに選択する圧縮アルゴリズム切り替え手段と
を有するデータ圧縮システム。
（付記２６）
前記圧縮アルゴリズム切り替え手段は、前記圧縮手段に入力される前記圧縮対象のデータのデータ流量を算出し、そのデータ流量が第１の閾値以下、又は前記第１の閾値より大なる第２の閾値以上となったときに、前記圧縮コスト見積り手段と前記圧縮率見積り手段に動作を指示することにより得られた、前記圧縮コスト見積り手段からの前記圧縮コストと前記圧縮率見積り手段からの前記圧縮率とに基づいて、前記データ流量が前記第１の閾値以下のときには前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも少なくとも前記圧縮率の高い圧縮アルゴリズムを前記圧縮手段で用いる圧縮アルゴリズムに選択し、前記データ流量が前記第２の閾値以上のときには前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも少なくとも前記圧縮コストの高い圧縮アルゴリズムを前記圧縮手段で用いる圧縮アルゴリズムに選択する付記２５記載のデータ圧縮システム。
（付記２７）
データ圧縮を行うコンピュータに、
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が設定された閾値より低下したときに、辞書の更新を指示する辞書更新タイミング制御ステップと、
前記圧縮ステップで得られた前記圧縮データを、圧縮前のデータに展開するデータ展開ステップと、
前記辞書更新タイミング制御ステップによる前記辞書の更新の指示に従って、前記データ展開ステップで得られた前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築ステップと
を実行させるデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記２８）
前記辞書使用頻度監視ステップは、前記圧縮ステップで前記圧縮対象のデータを圧縮する際に用いた前記辞書データと、その辞書データ毎の使用回数と、前記圧縮対象のデータの総量とを入力として受け、各辞書データ毎に前記使用回数を前記圧縮対象のデータの総量で除算して、前記使用頻度の計算結果を得る付記２７記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記２９）
前記辞書更新タイミング制御ステップは、前記辞書使用頻度監視ステップにより得られた全ての前記辞書データの使用頻度の計算結果の合計値が前記閾値よりも小さいときに、前記辞書の更新を指示する付記２７又は２８記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３０）
データ圧縮を行うコンピュータに、
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が閾値より低下したときに、辞書の更新を指示する辞書更新タイミング制御ステップと、
前記圧縮ステップで得られる前記圧縮データを、圧縮前のデータに展開するデータ展開ステップと、
使用するリソースの空き容量を出力するリソース監視ステップと、
前記リソース監視ステップで出力される前記リソースの空き容量に応じて、前記辞書更新タイミング制御ステップで使用する前記閾値の値を可変設定するパラメータ調整ステップと、
前記辞書更新タイミング制御ステップによる前記辞書の更新の指示に従って、前記データ展開ステップで得られる前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築ステップと
を実行させるデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３１）
前記パラメータ調整ステップは、前記リソース監視ステップからの前記リソースの空き容量が大きいほど前記辞書更新タイミング制御ステップで使用する前記閾値を小さな値に可変設定し、前記リソースの空き容量が小さいほど前記閾値を大きな値に可変設定する付記３０記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３２）
データ圧縮を行うコンピュータに、
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が閾値より低下したときに、前記圧縮データのデータ量と前記辞書データ記憶手段に記憶されている前記辞書データのデータ量とに応じた辞書構築コストを見積る辞書構築コスト見積りステップと、
前記辞書使用頻度監視ステップによる前記使用頻度の計算結果が閾値より低下したときに、前記辞書データを更新した際の圧縮率を見積る圧縮率見積りステップと、
前記辞書コストと前記圧縮率とを比較し、その比較結果に応じて新たな辞書の構築を行うか否かを決定する辞書更新タイミング制御ステップと、
前記圧縮ステップから出力される前記圧縮データを、圧縮前のデータに展開するデータ展開ステップと、
前記辞書更新タイミング制御ステップにより前記新たな辞書を構築する決定がなされたときに、前記データ展開ステップで得られる前記圧縮前のデータから新たな辞書データを構築して、前記辞書データ記憶手段に記憶されていた辞書データを、構築した前記新たな辞書データに置き換える辞書構築ステップと
を実行させるデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３３）
前記圧縮率見積りステップは、前記圧縮データの一部を前記辞書データ記憶手段に記憶されている前記辞書データを用いて展開した圧縮前のデータと、その圧縮前のデータを用いて構築した新たな辞書を用いて圧縮した圧縮後のデータとの比率を前記圧縮率として見積る付記３２記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３４）
前記辞書更新タイミング制御ステップは、前記辞書コストをスコア化した第１の値と、前記圧縮率をスコア化した第２の値とを比較し、前記第２の値の方が前記第１の値よりも大きいときにのみ、前記新たな辞書の構築を行うことを決定する付記３２又は３３記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３５）
前記データ展開ステップは、
前記圧縮手段から出力される前記圧縮データを記憶する圧縮データ記憶ステップと、
前記辞書更新タイミング制御ステップによる前記辞書の更新の指示に従って、前記圧縮データ記憶ステップで記憶された前記圧縮データを、前記辞書データ記憶手段に記憶されている前記辞書データを参照しながら展開して圧縮前のデータである展開データを得る圧縮データ展開ステップと、
前記圧縮データ展開ステップにより得られた前記展開データを記憶する展開データ記憶ステップと
を備え、前記辞書構築ステップは、前記圧縮データ展開ステップにより前記圧縮データ記憶ステップで記憶された全ての前記圧縮データの展開終了により動作を開始し、前記展開データ記憶で記憶された前記圧縮前のデータである前記展開データに基づき、前記新たな辞書データを構築する付記２７乃至３４のうち、いずれか一項記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３６）
データ圧縮を行うコンピュータに、
逐次的に入力される圧縮対象のデータを、辞書データ記憶手段に記憶されている辞書データを参照しながら圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する前記辞書データの使用頻度を各辞書データ毎に計算する辞書使用頻度監視ステップと、
前記辞書使用頻度監視ステップにより計算された各辞書データ毎の前記使用頻度のうち、設定された閾値より低下している使用頻度に対応した辞書データを抽出して出力する辞書更新タイミング制御ステップと、
前記辞書更新タイミング制御ステップにより得られた前記辞書データを用いて、前記圧縮で得られる前記圧縮データの一部を、圧縮前のデータに展開するデータ一部展開ステップと、
前記辞書更新タイミング制御ステップにより得られた前記辞書データを、前記辞書データ記憶手段に記憶されている複数の辞書データの中から削除する辞書データ削除ステップと、
前記データ一部展開ステップから出力される一部の前記圧縮前のデータから新たな辞書データを構築して、この新たな辞書データを前記辞書データ記憶手段に追記する辞書構築ステップと
を実行させるデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３７）
前記データ一部展開ステップは、
前記圧縮ステップで得られた前記圧縮データを記憶する圧縮データ記憶ステップと、
前記辞書更新タイミング制御ステップで得られた前記辞書データを用いて、前記圧縮データ記憶ステップで記憶された前記圧縮データの一部を展開して一部の圧縮前のデータを得る圧縮データ一部展開ステップと、
前記圧縮データ一部展開ステップにより得られた前記一部の圧縮前のデータを記憶する展開データ記憶ステップと
を備え、
前記辞書構築ステップは、前記圧縮データ一部展開ステップにより前記圧縮データ記憶ステップで記憶された前記圧縮データの一部の展開終了により動作を開始し、前記展開データ記憶ステップで記憶された前記一部の圧縮前のデータに基づき、前記新たな辞書データを構築する付記３６記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３８）
データ圧縮を行うコンピュータに、
逐次的に入力される圧縮対象のデータを、指定された圧縮アルゴリズムに従い圧縮して、圧縮データを出力する圧縮ステップと、
前記圧縮ステップによる圧縮前のデータに対して、予め設定されている複数の圧縮アルゴリズムのそれぞれにより圧縮して、圧縮前のデータ量と圧縮にかかった時間の比である圧縮コストを、前記複数の圧縮アルゴリズムのそれぞれについて見積る圧縮コスト見積りステップと、
前記圧縮ステップによる圧縮前のデータに対して、予め設定されている前記複数の圧縮アルゴリズムのそれぞれにより圧縮したときの圧縮率を算出する圧縮率見積りステップと、
前記圧縮ステップで前記圧縮対象のデータを圧縮する際に参照する辞書データの使用頻度が閾値より低下したときに、前記圧縮コスト見積りステップで得られた前記圧縮コストと前記圧縮率見積りステップで得られた前記圧縮率とに基づいて、前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも圧縮率及び圧縮コストが高い圧縮アルゴリズムを前記圧縮ステップで用いる圧縮アルゴリズムに選択する圧縮アルゴリズム切り替えステップと
を実行させるデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
（付記３９）
前記圧縮アルゴリズム切り替えステップは、前記圧縮ステップにより圧縮される前記圧縮対象のデータのデータ流量を算出し、そのデータ流量が第１の閾値以下、又は前記第１の閾値より大なる第２の閾値以上となったときに、前記圧縮コスト見積りステップで得られた前記圧縮コストと前記圧縮率見積りステップで得られた前記圧縮率とに基づいて、前記データ流量が前記第１の閾値以下のときには前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも少なくとも前記圧縮率の高い圧縮アルゴリズムを前記圧縮ステップで用いる圧縮アルゴリズムに選択し、前記データ流量が前記第２の閾値以上のときには前記複数の圧縮アルゴリズムのうち現在使用している圧縮アルゴリズムよりも少なくとも前記圧縮コストの高い圧縮アルゴリズムを前記圧縮ステップで用いる圧縮アルゴリズムに選択する付記３８記載のデータ圧縮プログラムを記憶するコンピュータプログラム記憶媒体。
【産業上の利用可能性】
【０００９】
本発明は、サーバが出力するログデータやセンサが出力するデータ等の、逐次的に発生するデータを辞書式圧縮法によって圧縮する装置（システム）には有効である。
【符号の説明】
【００１０】
１００、２００、３００、４００、５００  データ圧縮装置
１０２  圧縮部
１０５  監視部
１０６，２０３，３０３，４０１  タイミング制御部
１０７  展開部
１０９  辞書生成部
２０１  リソース監視部
２０２  調整部
３０１  コスト見積り部
３０２，５０３  圧縮率見積り部
４０２  部分展開部
４０３  削除部
５０１  切り替え部
５０２  圧縮コスト見積り部
５０４  更新部
【図１】
2011105463.tif 000003
【図２】
2011105463.tif 000004
【図３】
2011105463.tif 000005
【図４】
2011105463.tif 000006
【図５】
2011105463.tif 000007
【図６】
2011105463.tif 000008
【図７Ａ】
2011105463.tif 000009
【図７Ｂ】
2011105463.tif 000010
【図８】
2011105463.tif 000011
【図９Ａ】
2011105463.tif 000012
【図９Ｂ】
2011105463.tif 000013
【図１０】
2011105463.tif 000014
【図１１】
2011105463.tif 000015
【図１２】
2011105463.tif 000016
【図１３】
2011105463.tif 000017
【図１４】
2011105463.tif 000018
【図１５】
2011105463.tif 000019
【図１６】
2011105463.tif 000020
【図１７】
2011105463.tif 000021
【図１８】
2011105463.tif 000022
【図１９】
2011105463.tif 000023
【図２０】
2011105463.tif 000024
【図２１】
2011105463.tif 000025
【図２２】
2011105463.tif 000026
【図２３】
2011105463.tif 000027
【図２４】
2011105463.tif 000028
【国際調査報告】
2011105463.tif 000029
2011105463.tif 000030
2011105463.tif 000031
2011105463.tif 000032