(57)【特許請求の範囲】
【請求項１】
データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出部と、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与部と、
前記構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換する符号化処理部と、
前記符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、前記符号の第２のシーケンスを生成する順列変換処理部と、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理部と、
前記データ格納部に格納されている、並び替え後の構造データに対して圧縮処理を実施する圧縮処理部と、
を有する圧縮装置。
【請求項２】
前記符号付与部が、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせを特定する処理部と、
特定された前記頻出値又は前記頻出値の組み合わせが、前記符号表データ格納部に未登録であれば、当該頻出値又は頻出値の組み合わせである頻出値集合に対して未使用の符号を付与し、当該頻出値集合と当該符号とを対応付けて前記符号表データ格納部に格納する処理部と、
を含む請求項１記載の圧縮装置。
【請求項３】
前記所定の規則が、
前記構造データにおける前記処理対象行を並べ替えても変化することがない指標に基づき前記頻出値集合を順序づけ、当該順序に応じて大きくなるように符号を順に対応付けるという規則である
請求項１記載の圧縮装置。
【請求項４】
前記符号付与部が、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせである頻出値集合を特定すると共に、特定された前記頻出値集合の出現頻度を計数する計数部と、
前記出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、前記符号表データ格納部に格納する第１付与部と、
直前に符号が付与された前記頻出値集合と前記頻出値についての類似度が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された前記頻出値集合に付与し、前記符号表データ格納部に格納する第２付与部と、
を含む請求項１記載の圧縮装置。
【請求項５】
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記頻出値抽出部、前記符号付与部、前記符号化処理部、前記順列変換処理部及び前記並び替え処理部に、異なる処理対象列に対して複数回処理させる
請求項１乃至４のいずれか１つ記載の圧縮装置。
【請求項６】
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納する解凍処理部と、
前記データ格納部に格納されている前記構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出部と、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、前記構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与部と、
前記構造データにおける各前記処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換する符号化処理部と、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成する順列逆変換処理部と、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを第２データ格納部に格納する並び替え処理部と、
を有する解凍装置。
【請求項７】
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納する解凍処理部と、
前記データ格納部に格納されている前記構造データにおける各処理対象行を、前記構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号に変換する符号化処理部と、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成する順列逆変換処理部と、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理部と、
を有する解凍装置。
【請求項８】
データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、前記符号の第２のシーケンスを生成する順列変換ステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並べ替え処理ステップと、
前記データ格納部に格納されている、並び替え後の構造データに対して圧縮処理を実施するステップと、
を、コンピュータに実行させるための圧縮プログラム。
【請求項９】
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、前記構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各前記処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理ステップと、
をコンピュータに実行させるための解凍プログラム。
【請求項１０】
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける各処理対象行を、前記構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号に変換する変換ステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納するステップと、
をコンピュータに実行させるための解凍プログラム。
【請求項１１】
データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並べ替え処理ステップと、
前記データ格納部に格納されている、並び替え後のデータに対して圧縮処理を実施するステップと、
を含み、コンピュータに実行される圧縮方法。
【請求項１２】
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、前記構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各前記処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理ステップと、
を含み、コンピュータに実行される解凍方法。
【請求項１３】
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける各処理対象行を、前記構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号と同一符号間における識別子との組み合わせに変換する変換ステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納するステップと、
を含み、コンピュータに実行される解凍方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、圧縮技術に関する。
【背景技術】
【０００２】
ＤａａＳ（Database as a Service）といったように、インターネット等のネットワーク経由で、データベースの利用環境を提供するサービスが普及し始めている。このようなサービスでは、データベースにおけるメモリ効率を高めるために、複数のテーブルを保持せずに全ての顧客のデータを１つのテーブルで保持する場合がある。図１に例を示す。図１の例では、ＴＩＤがテナントＩＤ、すなわち顧客識別情報であり、ここでは３つの顧客のデータが１つのテーブルで管理されるようになっている。図１の例では、Ｔｅｎａｎｔ３という顧客は、ＥＰｈｏｎｅ、ＥＳａｌａｒｙ及びＥＯｆｆｉｃｅという列を使用しておらず、Ｔｅｎａｎｔ２１という顧客は、ＥＡｇｅ、ＥＳａｌａｒｙという列を使用しておらず、Ｔｅｎａｎｔ３３という顧客は、ＥＰｈｏｎｅという列を使用していないので、該当セルには「ＮＵＬＬ」が登録されている。このように多数の「ＮＵＬＬ」が分散して登録されるような場合や、同じ値が多数行に散在するような場合がある。
【０００３】
また、このようなデータベースのデータに加え、様々な業務の膨大なログデータや、ＸＭＬ（eXtensible Markup Language）やＣＳＶ（Comma Separated Values）などといった構造を有するデータを保存する必要が出てきている。
【０００４】
これに対して、利用する列の位置を表すビット列を生成して利用しない列を削除してしまうような技術や、ＮＵＬＬを少なくするようにテーブルを分割する技術、ＸＭＬ処理（例えばＳＡＸ（Simple API for XML），ＤＯＭ（Document Object Model））可能なままデータ圧縮を行うような技術が存在しているが、十分な圧縮が行われているわけではない。
【０００５】
また、以下のような技術も存在している。すなわち、複数の配列要素のシンボルに対して各配列の先頭から順番に注目し、その注目位置のシンボルに基づいて複数の配列要素を複数のグループに分け、各グループの配列要素を整列する処理を第１の整列処理と定義する。そして、その整列後の配列に対して第１の整列処理を回帰的に実施した上で圧縮を行うものである。
【０００６】
さらに、圧縮効率を高める技術には以下のようなものもある。すなわち、エントロピー符号化部に、当りやすい符号表と当りにくい符号表というように複数の符号表を準備する。そして、ブロックソート変換部からのソート済み最終文字列をＭＴＦ（Move to Front）変換部で変換したＭＴＦ符号列につき、エントロピー符号化部は、不連続部分で符号表を切り替えてエントロピー符号化する。またＭＴＦ変換に使用する参照リストを使用文字の種類分、参照リスト格納部に格納し、ＭＴＦ変換部は、ブロックソート済み最終文字列の先頭文字により参照リストを選択してＭＴＦ変換するものである。
【０００７】
また、データベースの圧縮のための技術も存在している。具体的には、レコード形式単位に各データ形式に応じた初期値を設定したマスクテーブルファイルを作成しておく。格納要求されたレコード受渡しエリアとマスクテーブル常駐エリアとの排他的論理和をとり、値が一致する項目全てをゼロ「００」にし、同一文字の連続性を大幅に高めた後、連続同一文字の部分を圧縮制御情報に置換し、データベースファイルに格納するというものである。
【０００８】
なお、ユニバーサル符号化（例えばＬＺ７８、ＬＺ７７）やエントロピー符号化（Huffman符号、算術符号）といった一般的なデータ圧縮技術は多数存在している。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】M. Hui, et al.,"Supporting Database Applications as a Service,"In Proc. Of Int’l Conf. on Data Engineering, 2009
【非特許文献２】S. Aulbach,"Multi-Tenant Database for Software as a Service: Schema-Mapping Technique,"SIGMOD 2008
【非特許文献３】D. Adjeroh, T. Bell, A. Mukherjee,"The Burronws-Wheeler Transform Data Compression, Suffix Arrays, and Pattern Matching," Springer, ISBN-13: 978-0-387-78908-8, 2008
【特許文献】
【００１０】
【特許文献１】特開平６−３３７７６２号公報
【特許文献２】特開平９−２１４３５３号公報
【特許文献３】特開２０００−２９６６７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上で述べた従来技術では、行と列とを有する構造データ（Structured Data）に対する圧縮率は必ずしも十分とは言えない。
【００１２】
従って、本技術の目的は、行と列とを有する構造データに対して高い圧縮率を可能とする圧縮技術を提供することである。
【課題を解決するための手段】
【００１３】
本技術の第１の態様に係る圧縮方法は、（Ａ）データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、（Ｂ）頻出値格納部に格納されている頻出値又は構造データにおける特定の行内に出現する頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、頻出値集合と符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、（Ｃ）構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、（Ｄ）符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、符号の第２のシーケンスを生成する順列変換ステップと、（Ｅ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納する並べ替え処理ステップと、（Ｆ）データ格納部に格納されている並び替え後の構造データに対して圧縮処理を実施するステップとを含む。
【００１４】
本技術の第２の態様に係る解凍方法は、（Ａ）圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、（Ｂ）データ格納部に格納されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、（Ｃ）頻出値格納部に格納されている頻出値又は構造データにおける特定の行内に出現する頻出値の組み合わせである頻出値集合に対して、構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、頻出値集合と符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、（Ｄ）構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、（Ｅ）符号の第１のシーケンスに対して、上記構造データに施された所定の順列変換処理の逆処理を実施し、符号の第２のシーケンスを生成するステップと、（Ｆ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納する並び替え処理ステップとを含む。
【００１５】
本技術の第３の態様に係る解凍方法は、（Ａ）圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、（Ｂ）データ格納部に格納されている構造データにおける各処理対象行を、構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号に変換する変換ステップと、（Ｃ）符号の第１のシーケンスに対して、上記構造データに施された所定の順列変換処理の逆処理を実施し、符号の第２のシーケンスを生成するステップと、（Ｄ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納するステップとを含む。符号表が圧縮されたデータに付加されている場合にはこのような処理を行うことによって高速に元のデータを復元できる。
【発明の効果】
【００１６】
行と列とを有する構造データに対して高い圧縮率が可能となる。
【図面の簡単な説明】
【００１７】
【図１】図１は、従来の問題について説明するための図である。
【図２】図２は、本実施の形態に係る圧縮装置の機能ブロック図である。
【図３】図３は、本実施の形態に係る圧縮処理の処理フローを示す図である。
【図４】図４は、圧縮すべきデータの一例を示す図である。
【図５】図５は、頻出値表の一例を示す図である。
【図６】図６は、コード付与処理の処理フローを示す図である。
【図７】図７は、頻出値集合表の一例を示す図である。
【図８】図８は、符号表の第１の例を示す図である。
【図９】図９は、符号決定処理の第２の例に係る処理フローを示す図である。
【図１０】図１０は、符号決定処理の第２の例における仮の符号表を表す図である。
【図１１】図１１は、符号表の第２の例を示す図である。
【図１２】図１２は、符号決定処理の第３の例に係る処理フローを示す図である。
【図１３】図１３は、符号決定処理の第３の例におけるコード表を表す図である。
【図１４】図１４は、符号表の第３の例を示す図である。
【図１５Ａ】図１５Ａは、符号決定処理の第１及び第２の例で生成された符号表に基づき割り当てられた符号列の例を示す図である。
【図１５Ｂ】図１５Ｂは、符号決定処理の第３の例で生成された符号表に基づき割り当てられた符号列の例を示す図である。
【図１６Ａ】図１６Ａは、順列変換処理として単純なソーティング処理を採用した場合の処理を説明する図である。
【図１６Ｂ】図１６Ｂは、単純なソーティング処理を実施した場合に圧縮データに保持すべきデータの一例を示す図である。
【図１７】図１７は、符号表の第１及び第２の例を用いた場合におけるブロックソーティングを説明するための図である。
【図１８Ａ】図１８Ａは、符号表の第１及び第２の例を用いた場合におけるブロックソーティングを説明するための図である。
【図１８Ｂ】図１８Ｂは、符号列格納部に格納されるデータの一例を示す図である。
【図１９】図１９は、符号表の第３の例を用いた場合におけるブロックソーティングを説明するための図である。
【図２０Ａ】図２０Ａは、符号表の第３の例を用いた場合におけるブロックソーティングを説明するための図である。
【図２０Ｂ】図２０Ｂは、符号列格納部に格納されるデータの一例を示す図である。
【図２１】図２１は、ブロックソーティング後の符号列に併せて行の並び替えを行った場合の第１の例を示す図である。
【図２２】図２２は、ブロックソーティング後の符号列に併せて行の並び替えを行った場合の第２の例を示す図である。
【図２３】図２３は、解凍装置の機能ブロック図である。
【図２４】図２４は、解凍処理の処理フローを示す図である。
【図２５】図２５は、符号表の第１及び第２の例を用い且つ解凍処理を実施する際に割り当てられる符号列の一例を示す図である。
【図２６】図２６は、符号表の第３の例を用い且つ解凍処理を実施する際に割り当てられる符号列の一例を示す図である。
【図２７Ａ】図２７Ａは、逆ブロックソーティングを説明するための図である。
【図２７Ｂ】図２７Ｂは、逆ブロックソーティングの結果として符号列格納部に格納されるデータを示す図である。
【図２８Ａ】図２８Ａは、逆ブロックソーティングを説明するための図である。
【図２８Ｂ】図２８Ｂは、逆ブロックソーティングの結果として符号列格納部に格納されるデータを示す図である。
【図２９Ａ】図２９Ａは、復元後の構造データの第１の例を示す図である。
【図２９Ｂ】図２９Ｂは、復元後の構造データの第２の例を示す図である。
【図３０】図３０は、コンピュータの機能ブロック図である。
【図３１】図３１は、圧縮装置の機能ブロック図である。
【図３２】図３２は、解凍装置の機能ブロック図である。
【図３３】図３３は、解凍装置の機能ブロック図である。
【発明を実施するための形態】
【００１８】
図２に本技術の実施の形態に係る圧縮装置１００の機能ブロック図を示す。本実施の形態に係る圧縮装置１００は、（Ａ）テーブルやＣＳＶファイルなどの行及び列を有する構造データを格納するデータ格納部１０と、（Ｂ）データ格納部１０に格納されているデータについて処理を実施する頻出値抽出部１１と、（Ｃ）頻出値抽出部１１の処理結果である頻出値表を格納する頻出値表格納部１２と、（Ｄ）データ格納部１０及び頻出値表格納部１２に格納されているデータを用いて処理を行う符号付与部１３と、（Ｅ）符号付与部１３による処理結果を格納する符号表格納部１４と、（Ｆ）データ格納部１０及び符号表格納部１４に格納されているデータを用いて処理を行う符号化処理部２０と、（Ｇ）符号化処理部２０の処理結果などを格納する符号列格納部１６と、（Ｈ）符号列格納部１６に格納されているデータを用いて処理を行う順列変換処理部１５と、（Ｉ）データ格納部１０及び符号列格納部１６に格納されているデータを用いて処理を行う並び替え処理部１７と、（Ｊ）データ格納部１０に格納されている、並び替え後の構造データに対して圧縮処理を実施する圧縮処理部１８と、（Ｋ）圧縮処理部１８の処理結果である圧縮データを格納する圧縮データ格納部１９と、（Ｌ）頻出値抽出部１１などに指示を入力する入力部１とを有する。
【００１９】
次に、図２に示した圧縮装置１００の処理内容について図３乃至図２２を用いて説明する。なお、例えばユーザなどによって、圧縮すべき構造データがデータ格納部１０に格納されているものとする。また、ユーザは、当該圧縮すべき構造データを入力部１を介して指定して圧縮処理の実行を指示する。入力部１は、例えばユーザから特定の構造データについて圧縮の指示を受け付けると、当該指示を頻出値抽出部１１に出力する。
【００２０】
頻出値抽出部１１は、指示を受けると、圧縮すべき構造データにおける処理対象列の各値の出現回数を計数し、頻出値表格納部１２に格納する（図３：ステップＳ１）。例えば図４に示すようなテーブルを一例として処理するものとする。ここでは、図４の例では、発行日の列、出版社の列、分類の列、著者の列、タイトルの列などが含まれるようになっている。以下では、出版社の列、分類の列及び著者の列が処理対象列であるものとする。本実施の形態では、テーブルだけではなく、ＣＳＶファイルであってもよい。また、ＸＭＬファイルなどであっても、テーブルやＣＳＶファイルに変換すれば処理可能である。
【００２１】
次に、頻出値抽出部１１は、所定回数以上出現した値を頻出値として特定し、頻出値表格納部１２に格納する（ステップＳ３）。ステップＳ３では、例えば図５に示すようなデータが頻出値表格納部１２に格納される。図５の例では、２回以上出現した値を頻出値として特定し、出現回数と共に頻出値表格納部１２に格納した例である。但し、出現回数自体については格納せずとも良い。また、２回以上の回数を閾値として採用する場合もある。
【００２２】
次に、符号付与部１３は、頻出値表格納部１２及びデータ格納部１０に格納されているデータを用いて、コード付与処理を実施し、処理結果である頻出値集合表を符号表格納部１４に格納する（ステップＳ５）。コード付与処理については、図６及び図７を用いて説明する。
【００２３】
符号付与部１３は、データ格納部１０に格納されている、圧縮すべき構造データにおいて未処理の行を読み出す（図６：ステップＳ２１）。特定の行のうち処理対象列の値のみを読み出すようにしても良い。そして、符号付与部１３は、読み出された行に含まれる項目値から、頻出値表格納部１２に格納されている頻出値表に登録済みの項目値のみを抽出し、抽出された項目値を頻出値集合Ｘにセットする（ステップＳ２３）。そして、符号付与部１３は、頻出値集合Ｘが頻出値集合表に登録済みであるか判断する（ステップＳ２５）。符号付与処理における頻出値集合表は、例えば図７に示すような表である。すなわち、コードと頻出値又は頻出値の組み合わせである頻出値集合とが対応付けて登録されている表である。
【００２４】
そして、符号付与部１３は、頻出値集合Ｘが頻出値集合表に登録済みである場合には、登録する必要がないのでステップＳ２９に移行する。一方、頻出値集合Ｘが頻出値集合表に未登録である場合には、符号付与部１３は、頻出値集合Ｘに未使用のコードｓiを割り当て、コードｓiに対応付けて頻出値集合Ｘを頻出値集合表に登録する（ステップＳ２７）。ｉは例えば１ずつインクリメントされる。
【００２５】
ステップＳ２７の後又はステップＳ２５で登録済みと判断された場合には、符号付与部１３は、圧縮すべき構造データの全ての行について処理したか判断する（ステップＳ２９）。未処理の行が存在する場合にはステップＳ２１に戻る。一方、全ての行について処理した場合には元の処理に戻る。
【００２６】
図４の例では、図５に示すような頻出値が特定されているので、１行目を見ると、「Ａ社」及び「ビジネス」という頻出値が含まれているので、これに対してコードｓ1を割り当てる。次に、２行目を見ると、「Ａ社」「ビジネス」及び「○○○夫」という頻出値が含まれているので、これに対してコードｓ2を割り当てる。３行目を見ると、「Ｂ社」という頻出値が含まれているので、これに対してコードｓ3を割り当てる。このような処理を繰り返すことによって、図７に示すような頻出値集合表が得られることになる。なお、コードは、仮に付されたマークであって、このあと順序付き符号に変換される。
【００２７】
図３の処理の説明に戻って、次に、符号付与部１３は、符号表格納部１４に格納されている頻出値集合表及びデータ格納部１０に格納されている、圧縮すべき構造データを用いて、符号決定処理を実施する（ステップＳ７）。この符号決定処理については、幾つかの方法を採用可能なので、それぞれについて説明する。
【００２８】
（Ａ）出現した順番に従って小さい順（すなわち優先度の降順）に符号を付与する方法
図６に示したコード付与処理を実施すると、出現した順番にコードが付与されることになる。ステップＳ７では、コードを付与した順番に従って小さい順に符号を付与する。すなわち、ｓ1を一番小さい符号に変換し、ｓ2を二番目に小さい符号に変換し、ｓ3を三番目に小さい符号に変換する。例えば、符号にアルファベットを採用する場合、符号の順番はアルファベット順に従う。但し、他の基準にて順序が決まるようにしてもよい。
【００２９】
例えばアルファベット順が採用されるとすると、一番小さいコードは符号「Ａ」に変換され、二番目に小さいコードは符号「Ｂ」に変換され、三番目に小さいコードは符号「Ｃ」に変換される。頻度表に２７以上の頻出値が登録されている場合には、「ＡＡ」といったように複数の符号にて対処できる。
【００３０】
従って、本方法を採用する場合には、図６の処理フローのステップＳ２７でコードではなく、アルファベットの符号を順番に付与するようにしても良いし、本ステップにおいて、アルファベットの符号に変換するようにしても良い。例えば図８に示すような符号表が得られて、符号表格納部１４に格納されることになる。図８の例では、図７のコードの列における各コードがアルファベットの符号に変換されている。
【００３１】
（Ｂ）出現頻度に従って小さい順に符号を付与する方法
例えば図９に示すような処理を行う。まず、符号付与部１３は、圧縮すべき構造データの処理対象列において、頻出値集合表に登録されている各頻出値集合の出現回数を計数し、符号表格納部１４に格納する（図９：ステップＳ３１）。例えば、図１０に示すようなデータが得られる。すなわち、コード及び頻出値集合の組み合わせに対応して出現回数が登録される。なお、例えば図６の処理フローにおいて、コードを付与すると共に同じ頻出値集合Ｘが検出されるとカウンタを１増加させるといった手法にて、頻出値集合毎に出現回数を計数するようにしてもよい。
【００３２】
そして、符号付与部１３は、出現回数の降順に頻出値集合をソートする（ステップＳ３３）。図１０では既にソートされた状態になっている。なお、符号付与部１３は、出現回数が同数の頻出値集合が存在する場合には、それらの頻出値集合については、通常の辞書への登録順に並べるものとする。すなわち、第１ソートキーに出現回数を採用し、第２ソートキーに頻出値集合に含まれる項目値を文字列として連結される文字列を採用する。図１０の例では、出現回数が２回の頻出値集合が複数存在し、さらに出現回数が１回の頻出値集合が複数存在する。従って、コードｓ2が付与されている頻出値集合と、コードｓ3が付与されている頻出値集合とについては、辞書登録順に従って並べる。同様に、コードｓ4が付与されている頻出値集合とコードｓ5が付与されている頻出値集合とについても、辞書登録順に従って並べる。図１０の例では、既に並び替え済みであるものとする。
【００３３】
ここで、符号付与部１３は、カウンタｉに対して１を設定し（ステップＳ３７）、ｉ番目の頻出値集合にｉ番目に小さい符号を付与する（ステップＳ３９）。１番目の頻出値集合であれば１番小さい符号「Ａ」を付与し、２番目の頻出値集合であれば２番目に小さい符号「Ｂ」を付与する。
【００３４】
そして、符号付与部１３は、ｉが頻出値集合の数以上となったか判断する（ステップＳ４１）。ｉが頻出値集合の数未満であれば、符号付与部１３は、ｉを１インクリメントして（ステップＳ４３）、ステップＳ３９に戻る。一方、ｉが頻出値集合の数以上であれば元の処理に戻る。
【００３５】
このような処理を行うことによって、図１０に示したようなデータは、図１１に示すような符号表に変換される。符号は、上から順番にＡ、Ｂ、Ｃ、Ｄ、Ｅといったように付与される。
【００３６】
図９に示した処理は、行の並びを入れ替えても項目値が変化しない限り同じ結果を得ることができる。
【００３７】
（Ｃ）Jaccord係数を用いる方法
この方法では、まず、符号付与部１３は、コードｓiの集合Σと、１から｜Σ｜（すなわち集合Σに属する要素の数）の数の集合Ｘとを設定する（図１２：ステップＳ５１）。具体的には、集合Σに、全てのコードｓiを入れて、集合Ｘに１から｜Σ｜の数を入れる。
【００３８】
そして、符号付与部１３は、カウンタｉを１に初期化する（ステップＳ５３）。その後、符号付与部１３は、圧縮すべき構造データの処理対象列において各頻出値集合の出現回数を計数し、出現回数の降順に頻出値集合をソートする（ステップＳ５５）。これはステップＳ３３及びＳ３５と同じ処理である。そして、符号付与部１３は、最上位の頻出値集合のコードｓjを特定する（ステップＳ５６）。
【００３９】
その後、符号付与部１３は、ｃiに、コードｓjを設定すると共に、集合Ｘからコードｓjの添え字ｊを除去する（ステップＳ５７）。ｉ＝１の場合には、ステップＳ５６で特定されたコードｓjがｃ1に設定される。また、符号付与部１３は、ｉを１インクリメントして（ステップＳ５９）、ｉが｜Σ｜を超えたか判断する（ステップＳ６１）。超えていない場合には、符号付与部１３は、以下の式に基づきｊの値を決定する（ステップＳ６３）。
ｊ＝argmaxj∈ＸJaccord（ｃi-1，ｓj）  （１）
Jaccord（ａ，ｂ）＝|Ｓｅｔ（ａ）∩Ｓｅｔ（ｂ）｜／｜Ｓｅｔ（ａ）∪Ｓｅｔ（ｂ）｜    （２）
Ｓｅｔ（ａ）は、符号ａが表す頻出値集合であり、｜Ｓｅｔ（ａ）｜は、符号ａが表す頻出値集合に含まれる頻出値の数を表す。
【００４０】
（２）式で定義されるJaccord係数は２つの集合間の類似度（頻出値の重複度合いでもある）を表す係数である。また、（１）式は、符号が割り付けられていない頻出値集合の集合Ｘ中で、直前に特定されたｃi-1に対応する頻出値集合と最も類似度が高い頻出値集合のコードｓjの添え字ｊを特定するものである。そして、処理はステップＳ５７に戻る。
【００４１】
一方、ｉが｜Σ｜を超えた場合には、符号付与部１３は、ｃ1＜ｃ2＜ｃ3＜・・・＜ｃ|Σ|の順番で最終的な符号（例えばアルファベット順のアルファベット）を設定する（ステップＳ６５）。
【００４２】
例えば図１０に示すような頻出値集合についての出現回数が得られた場合には、まずｓ1がｃ1に設定される。また、コードｓ1の頻出値集合に含まれる頻出値に対して類似度が高い頻出値集合のコードを探すと、コードｓ2が得られる。すなわち、ｓ2がｃ2に設定される。さらに、コードｓ2の頻出値集合に含まれる頻出値に対して類似度が高い頻出値集合のコードを探すと、コードｓ4が得られて、ｃ3に設定される。その後、コードｓ4の頻出集合に含まれる頻出値に対して類似度が高い頻出値集合のコードを探すと、コードｓ5が得られて、ｃ4に設定される。最後に、コードｓ5の頻出値集合に含まれる頻出値に対して類似度が高い頻出値集合のコードを探すと、図１０の例では０を超えるものはない。従って、残りの頻出値集合について、頻出値集合に含まれる項目値（要素とも呼ぶ）を文字列として連結して得られる文字列の辞書登録順で最も優先されるものを選択する。なお、符号が割り付けられていない頻出値集合の集合Ｘの中から、出現回数が最も多い頻出値集合を選択するようにしてもよい。なお、図１０の例では、ここでは１つしか残っていないので、コードｓ3が得られて、ｃ5に設定される。よって、図１３のようなデータが得られる。最終的に、ステップＳ６５ではアルファベットに変換するので、図１４に示すような符号表が得られる。
【００４３】
図１４を見ると、「Ａ社」、「ビジネス」や「○○○夫」といった頻出値を含む頻出値集合が優先度が高い符号にまとまって対応付けられており、アルファベット順で符号をソートすると、同一又は類似の頻出値集合がまとまることが期待される。
【００４４】
図３のステップＳ７については、上で述べた（Ａ）（Ｂ）（Ｃ）のいずれか、若しくは同等の他の手法を用いて符号表を生成し、符号表格納部１４に格納する。
【００４５】
図３の処理の説明に戻って、符号化処理部２０は、符号表格納部１４に格納されている符号表に従って、圧縮すべき構造データにおける各行に対して符号を割り当てることによって符号列を生成し、符号列格納部１６に格納する（ステップＳ９）。ステップＳ９では、各行について、処理対象列の項目値と頻出値集合とを比較して該当する符号を特定して符号列を生成する。本実施の形態のように、頻出値集合を符号に変換するのではなく、行（以下で述べるように行の一部の場合を含む）を符号化するのは、以下で述べるような行自体の並び替えによって、同一又は類似の頻出値集合を含む行をまとまりやすくするためである。
【００４６】
なお、符号表に登録されていない項目値のみを含む行については、例えば未使用の同一符号を付すと以下の処理で効率よく処理できる。
【００４７】
図８及び図１１に示したような符号表が得られた場合、図４に示したテーブルは、図１５Ａに示すように符号が付与される。すなわち符号Ａ乃至Ｅが付与されている。なお、これ以降の説明の都合上、同一符号が付された各行を識別するためにシリアル番号が付加されている。例えば、符号Ａについては、シリアル番号０乃至４が付与されており、符号Ｂについてはシリアル番号０及び１が付与されており、符号Ｃについてはシリアル番号０及び１が付与されている。符号Ｄ及びＥについては、シリアル番号が付与されていないが、１つだけなのでシリアル番号０が省略されている。
【００４８】
一方、図１４に示したような符号表が得られた場合、図４に示したテーブルは、図１５Ｂに示すように符号が付与される。この場合、図１５Ａとは異なり、符号Ａについては、シリアル番号０乃至４が付与されており、符号Ｂについてはシリアル番号０及び１が付与されており、符号Ｅについてはシリアル番号０及び１が付与されている。符号Ｃ及びＤについては、シリアル番号が付与されていないが、１つだけなのでシリアル番号０が省略されている。
【００４９】
本ステップでは、図１５Ａ又は図１５Ｂの符号の列のデータが、符号列格納部１６に格納される。
【００５０】
次に、順列変換処理部１５は、符号列格納部１６に格納されている符号列に対して、同一符号が連続するように順列変換処理を実施する（ステップＳ１１）。同一符号が連続するように符号の並び替えを行う処理であるから、この目的を達成することができるいずれの方法をも採用可能である。但し、解凍処理において順列変換処理後の符号列から元の符号列を復元しなければならないので、（Ａ）復元のためのデータを保存する必要のある方法と、（Ｂ）復元のためのデータを保存する必要がない方法とが存在する。前者の方法としては、単純なソーティング処理が存在する。後者の方法としては、ブロックソーティングという方法が存在する。
【００５１】
単純なソーティング処理であれば、図１５Ａの例の場合には、単純なソーティング処理を実施すると図１６Ａに示すような順列変換が行われる。すなわち、左側に示した符号列Ｓ「Ａ0Ｂ0Ｃ0Ａ1ＤＡ2ＥＡ3Ｂ1Ｃ1Ａ4」は、右側に示した順列変換後の符号列Ｆ「Ａ0Ａ1Ａ2Ａ3Ａ4Ｂ0Ｂ1Ｃ0Ｃ1ＤＥ」に変換され、符号列格納部１６に格納される。
【００５２】
符号列Ｆから符号列Ｓを復元するのは、符号列Ｆのみでは無理なので、例えば図１６Ｂに示すようなデータを、以下に述べる圧縮データに添付する。図１６Ｂのデータは、図１６Ａの処理の逆処理を示しているデータである。すなわち、符号列Ｆの１番目の符号を「１」番目に配置し、符号列Ｆの２番目の符号を「４」番目に配置し、符号列Ｆの３番目の符号を「６」番目に配置し、符号列Ｆの４番目の符号を「８」番目に配置し、符号列Ｆの５番目の符号を「１１」番目に配置し、符号列Ｆの６番目の符号を「２」番目に配置し、符号列Ｆの７番目の符号を「９」番目に配置し、符号列Ｆの８番目の符号を「３」番目に配置し、符号列Ｆの９番目の符号を「１０」番目に配置し、符号列Ｆの１０番目の符号を「５」番目に配置し、符号列Ｆの１１番目の符号を「７」番目に配置する。このようなデータについては、図１６Ａの処理を行う際に、符号列Ｓにおける移動元の位置番号を、符号列Ｆにおける対応位置に配置して生成して、圧縮処理部１８に出力する。また、このようなデータは、符号列格納部１６にも格納される。
【００５３】
一方、ブロックソーティングは、D. Adjeroh, T. Bell, A. Mukherjee,"The Burronws-Wheeler Transform Data Compression, Suffix Arrays, and Pattern Matching," Springer, ISBN-13: 978-0-387-78908-8, 2008に開示されている。
【００５４】
以下、簡単にブロックソーティングについて説明する。まず、図１５Ａの場合には、図１７に示すように、符号列の最後に末尾を表す終了符号「＄」を付加した後、当該符号「＄」が先頭に来るまで、先頭の符号を末尾に移動させる操作を符号「＄」以外の符号の個数回だけ繰り返し実施する。図１７のように１１個の符号の場合には、１２の符号列が生成される。なお、１行目の符号列は、最終符号の列にも出現する。また、各行の符号列は、符号「＄」の位置がずれているので、ユニークである。すなわち、符号列Ｓに含まれる各符号は、その行の符号列で識別可能である。
【００５５】
そして、各行の符号列を、小さい順にソートする。アルファベットを符号に用いているので、アルファベット順に並び替える。但し、「＄」はＡよりも小さいものとする。そうすると、図１５Ａの場合には図１８Ａに示すように並び替えられる。並び替えられた後のこの符号群における最終符号列Ｌが、変換後の符号列となる。すなわち、符号列Ｓ「Ａ0Ｂ0Ｃ0Ａ1ＤＡ2ＥＡ3Ｂ1Ｃ1Ａ4＄」は、符号列Ｌ「Ａ4Ｃ1Ｅ＄Ｃ0ＤＡ3Ａ0Ｂ1Ｂ0Ａ1Ａ2」に変換され、符号列Ｌは符号列格納部１６に格納される。
【００５６】
ブロックソーティングによれば、シリアル番号なしでも図１７の各行の符号列はユニークなので、図１７の各行の符号列が図１８Ａのどの行に移動したかを特定できる。具体的には、図１８Ｂに示すように、図１８Ａの第１行目の移動元は図１７の「１２」行目であり、図１８Ａの第２行目の移動元は図１７の「１１」行目であり、図１８Ａの第３行目の移動元は図１７の「８」行目であり、図１８Ａの第４行目の移動元は図１７の「１」行目であり、図１８Ａの第５行目の移動元は図１７の「４」行目であり、図１８Ａの第６行目の移動元は図１７の「６」行目であり、図１８Ａの第７行目の移動元は図１７の「９」行目であり、図１８Ａの第８行目の移動元は図１７の「２」行目であり、図１８Ａの第９行目の移動元は図１７の「１０」行目であり、図１８Ａの第１０行目の移動元は図１７の「３」行目であり、図１８Ａの第１１行目の移動元は図１７の「５」行目であり、図１８Ａの第１２行目の移動元は図１７の「７」行目である。
【００５７】
ブロックソーティングの場合、このようなデータを、解凍時に用いることはないので圧縮処理部１８に出力することはないが、符号列格納部１６に格納する。
【００５８】
また、図１５Ｂの場合には、上で述べたような処理を実施すると、図１９に示すように符号列Ｓは、１２の符号列に展開される。
【００５９】
そして、図１５Ｂの場合には図２０Ａに示すように並び替えられる。この並び替えられた後の符号群における最終符号列Ｌが、変換後の符号列となる。すなわち、符号列Ｓ「Ａ0Ｂ0Ｅ0Ａ1ＣＡ2ＤＡ3Ｂ1Ｅ1Ａ4＄」は、符号列Ｌ「Ａ4Ｅ1Ｄ＄Ｅ0ＣＡ3Ａ0Ａ1Ａ2Ｂ1Ｂ0」に変換され、符号列格納部１６に格納される。
この場合にも、移動元の行の位置データが生成できる。具体的には、図２０Ｂに示すように、図２０Ａの符号列Ｌの各行の移動元は、先頭から順番に「１２」「１１」「８」「１」「４」「６」「９」「２」「５」「７」「１０」「３」行目となる。このような移動元の行の位置データも、符号列格納部１６に格納される。
【００６０】
このように元の符号列が異なるので、ブロックソーティングを実施しても異なる符号列に変換される。
【００６１】
図３の処理の説明に戻って、並び替え処理部１７は、符号列格納部１６に格納されている、ブロックソーティング後の符号列又は移動元の行の位置データに従って、圧縮すべき構造データの行を並び替えて、処理後の構造データをデータ格納部１０に格納する（ステップＳ１３）。なお、符号「＄」の位置は、解凍処理に必要となるので、当該符号「＄」の位置のデータを、データ格納部１０に格納する。
【００６２】
図１５Ａの場合、例えばブロックソーティング前の符号列における第１の符号Ａ0は、ブロックソーティング後では符号「＄」以外の符号で７番目に並び替えられている。従って、図４のテーブルの第１行は第７行に移動される。同様に、ブロックソーティング前の符号列における第２の符号Ｂ0は、ブロックソーティング後では符号「＄」以外の符号で９番目に並び替えられている。従って、図４のテーブルの第２行は第９行に移動される。ブロックソーティング前の符号列における第３の符号Ｃ0は、ブロックソーティング後では符号「＄」以外の符号で４番目に並び替えられている。従って、図４のテーブルの第３行は第４行に移動される。以下同様に処理されて、図２１に示すような、並び替え後のテーブルが得られる。
【００６３】
図１５Ａの場合、頻出値が２行以上連続するブロックが、黒太線で囲んだ３箇所で合計１１個のセルにとどまる。またブロックは分離されている。これに対して、図２１の場合、頻出値が２行以上連続するブロックが、黒太線で囲んだ３箇所で合計１４個のセルになってセル数は増加している。またブロックは連続している。従って、既存の圧縮アルゴリズムで、効率的に圧縮されることが期待される。
【００６４】
一方、図１５Ｂの場合、例えばブロックソーティング前の符号列における第１の符号Ａ0は、ブロックソーティング後では符号「＄」以外の符号で７番目に並び替えられている。従って、図４のテーブルの第１行は第７行に移動される。同様に、ブロックソーティング前の符号列における第２の符号Ｂ0は、ブロックソーティング後では符号「＄」以外の符号で１１番目に並び替えられている。従って、図４のテーブルの第２行は第１１行に移動される。ブロックソーティング前の符号列における第３の符号Ｅ0は、ブロックソーティング後では符号「＄」以外の符号で４番目に並び替えられている。従って、図４のテーブルの第３行は第４行に移動される。以下同様に処理されて、図２２に示すような、並び替え後のテーブルが得られる。
【００６５】
図１５Ｂの場合、頻出値が２行以上連続するブロックが、黒太線で囲んだ３箇所で合計１１個のセルにとどまる。またブロックは分離されている。これに対して、図２２の場合、頻出値が２行以上連続するブロックが、黒太線で囲んだ２箇所で合計１４個のセルになってセル数は増加している。またブロックは連続して個数も減っている。従って、既存の圧縮アルゴリズムで、効率的に圧縮されることが期待される。
【００６６】
そして、ここまで処理すると、圧縮処理部１８は、よく知られた圧縮アルゴリズムでデータ格納部１０に格納されている、並び替え後の構造データを圧縮する処理を実施し、圧縮後のデータを圧縮データ格納部１９に格納する（ステップＳ１５）。圧縮アルゴリズムは、ユニバーサル符号化（例えばＬＺ７８、ＬＺ７７）やエントロピー符号化（Huffman符号、算術符号）といった一般的なデータ圧縮技術のいずれであってもよい。
【００６７】
なお、解凍に必要な符号「＄」の位置データについても、データ格納部１０から読み出して、圧縮データ格納部１９における圧縮後のデータに付加しておく。さらに、ステップＳ７の符号決定処理に（Ａ）のアルゴリズムを採用した場合には、圧縮処理部１８は、符号表格納部１４に格納されている符号表を圧縮後のデータに添付しておく。また、順列変換処理に単純なソーティング処理など、並び替え後の構造データから元の構造データを復元できないアルゴリズムを採用した場合には、移動元の行の位置データも圧縮データに添付する。
【００６８】
以上のような処理を実施することによって、高圧縮率が実現できるようになる。なお、上で述べたように、本手法は、従来手法で必要となるような構造データ由来のデータ（例えばスキーマや行番号など）を必要としない。
【００６９】
次に、図２３を用いて解凍装置２００について説明する。解凍装置２００は、（Ａ）圧縮された構造データなどを格納する圧縮データ格納部２１０と、（Ｂ）圧縮データ格納部２１０に格納されている圧縮データに対して解凍処理を実施する解凍処理部２１２と、（Ｃ）ユーザからの指示を受け付け解凍処理部２１２に処理開始を指示する入力部２１１と、（Ｄ）解凍処理部２１２の処理結果を格納するデータ格納部２１３と、（Ｅ）データ格納部２１３に格納されているデータを用いて処理を行う頻出値抽出部２１４と、（Ｆ）頻出値抽出部２１４の処理結果である頻度表を格納する頻出値表格納部２１５と、（Ｇ）データ格納部２１３及び頻出値表格納部２１５に格納されているデータを用いて処理を実施する符号付与部２１６と、（Ｈ）符号付与部２１６の処理結果である符号表を格納する符号表格納部２１７と、（Ｉ）符号表格納部２１７及びデータ格納部２１３に格納されているデータを用いて処理を実施する符号化処理部２１８と、（Ｊ）符号化処理部２１８の処理結果である符号列を格納する符号列格納部２１９と、（Ｋ）符号列格納部２１９に格納されているデータを用いて圧縮時に行った順列変換処理の逆処理を実施する順列逆変換処理部２２０と、（Ｌ）符号列格納部２１９及びデータ格納部２１３に格納されているデータを用いて処理を実施する並び替え処理部２２１とを有する。
【００７０】
次に、図２４乃至図２９Ｂを用いて解凍装置２００の処理について説明する。まず、入力部２１１は、ユーザから解凍すべきデータの指定を受け付け、解凍処理部２１２に、解凍すべきデータの指定を出力する。解凍処理部２１２は、入力部２１１からの指示に応じて、ステップＳ１５で実施された圧縮処理とは逆の解凍処理を実施する（図２４：ステップＳ７１）。この解凍処理については、従来と同じなのでこれ以上述べない。なお、解凍後の構造データが、データ格納部２１３に格納される。
【００７１】
また、解凍処理部２１２は、圧縮データ格納部２１０に、解凍すべきデータに符号表が添付されているか判断する（ステップＳ７３）。圧縮処理のステップＳ７で（Ａ）のアルゴリズムを採用した場合には、圧縮後のデータから符号表を復元できないので、符号表が圧縮後のデータに添付される。この符号表が添付されていれば、解凍処理部２１２は、圧縮データ格納部２１０から符号表を読み出し、符号表格納部２１７に格納する（ステップＳ７５）。そして処理はステップＳ８５に移行する。
【００７２】
一方、符号表が存在しない場合には、例えば、解凍処理部２１２は、頻出値抽出部２１４に対して処理開始を指示し、頻出値抽出部２１４は、解凍後の構造データにおける処理対象列の各値の出現回数を計数し、頻出値表格納部２１５に格納する（ステップＳ７７）。この処理は圧縮処理におけるステップＳ１と同じである。
【００７３】
また、頻出値抽出部２１４は、所定回数以上出現した値を頻出値として特定し、頻出値表格納部２１５に格納する（ステップＳ７９）。この処理も圧縮処理におけるステップＳ３と同じである。
【００７４】
さらに、符号付与部２１６は、頻出値表格納部２１５及びデータ格納部２１３に格納されているデータを用いて、コード付与処理を実施し、処理結果を符号表格納部２１７に格納する（ステップＳ８１）。この処理も圧縮処理におけるステップＳ５と同じである。
【００７５】
次に、符号付与部２１６は、符号表格納部２１７に格納されている頻出値集合表及びデータ格納部２１３に格納されている、解凍後の構造データを用いて、符号決定処理を実施する（ステップＳ８３）。この処理も圧縮処理におけるステップＳ７と同じである。（Ｂ）の場合には、図１１に示すような符号表が得られ、（Ｃ）の場合には、図１４に示すような符号表が得られる。なお、ステップＳ７５から遷移してきた場合には、図８に示すような符号表が符号表格納部２１７に格納される。
【００７６】
そして、符号化処理部２１８は、符号表格納部２１７に格納されている符号表に従って、解凍後の構造データにおける各行に対して符号を設定し、終了符号「＄」を、データ格納部２１３に格納されている終了符号「＄」の位置データに従って挿入し、生成された符号列を符号列格納部２１９に格納する（ステップＳ８５）。本ステップでは、各行について、処理対象列の項目値と頻出値集合とを比較して該当する符号を特定する。
【００７７】
ステップＳ７で（Ａ）及び（Ｂ）の方法を採用した場合には図２５に示すような符号列が生成される。図２１に示したブロックソーティング後の符号列と比較すると、符号自体については順番も同じであるが、シリアル番号はステップＳ８５で振り直されているので異なっている。但し、シリアル番号自体は、以下で述べるように説明の都合で付与されたものであって、シリアル番号を付与しなくとも別の方法で同一符号間の識別を行うことができる。なお、図示していないが、終了符号「＄」は、３番目の符号の後に挿入される。
【００７８】
同様に、ステップＳ７で（Ｃ）の方法を採用した場合には図２６に示すような符号列が生成される。図２２に示したブロックソーティング後の符号列と比較すると、符号部分については順番も同じであるが、シリアル番号はステップＳ８５で振り直されているので異なっている。なお、図示していないが、終了符号「＄」は、３番目の符号の後に挿入される。
【００７９】
そして、順列逆変換処理部２２０は、符号列格納部２１９に格納されている符号列に対して順列逆変換処理を実施し、符号列格納部２１９に格納する（ステップＳ８７）。
【００８０】
圧縮処理時に単純なソーティング処理を採用した場合には、移動元の行の位置データが圧縮データに添付されているので、順列逆変換処理部２２０は、データ格納部２１３から当該移動元の行の位置データ（例えば図１６Ｂ）を読み出して、当該データに従って符号列に含まれる符号列を並び替えて、符号列格納部２１９に格納する。移動元の行の位置データが得られれば、ステップＳ８５で生成された符号列の先頭の符号から順番に、移動元の行の位置を特定して、その位置に配置する。
【００８１】
次に、逆ブロックソーティングについて図２７Ａ乃至図２８Ｂを用いて説明する。図２５に示すような符号列を取り扱う場合、図２７Ａ右側に示すように、符号列Ｌに含まれる符号を小さい順にソートして符号列Ｆを生成する。本実施の形態の場合にはアルファベット順にソートする。この際、同一符号における符号の順番は元の符号列の順番が維持される。従って、図２７Ａ右側に示すように、符号「Ａ」「Ｂ」「Ｃ」はシリアル番号「０」から順番に並ぶ。なお、ブロックソーティングの時と同様に終了符号「＄」は最も小さいものとする。
【００８２】
次に、符号列Ｌにおける終了符号「＄」を開始点として、符号列Ｆにおいて同じ順番の符号を特定し、順番に当該符号を配置する。図２７Ａ右側では、符号列Ｌにおける終了符号「＄」から真横に移動して符号列Ｆの４番目の符号Ａ2（符号Ａについて３番目の符号）を特定し、この符号Ａ2を最終的な符号列の「０」番目に配置する。次に、符号列Ｆの符号Ａ2と同じ符号が出現する順番を符号列Ｌにおいて特定する。図２７Ａ右側では、符号Ａとして３番目（０から数えて３番目の意味）に出現する符号Ａ2は、符号列Ｌの７番目（０から数えて７番目の意味）に存在しているので、「７」を特定する。すなわち、移動元の符号位置が「７」であることが分かるので、これを保持する。
【００８３】
次に、符号列Ｆにおいて順番「７」の符号を特定し、次の順番の位置に当該符号を配置する。図２７Ａ右側では、符号列Ｌにおける符号Ａ2から真横に移動して符号列Ｆの７番目の符号Ｂ1を特定し、この符号を最終的な符号列の「１」番目に配置する。次に、符号列Ｆの符号Ｂ1と同じ符号が出現する順番を符号列Ｌにおいて特定する。図２７Ａ右側では、符号Ｂとして２番目（０から数えて２番目の意味）に出現する符号Ｂ1は、符号列Ｌの９番目に存在しているので、「９」を特定する。すなわち、移動元の符号位置が「９」であることが分かるので、これを保持する。
【００８４】
さらに、符号列Ｆにおいて順番「９」の符号を特定し、次の順番の位置に当該符号を配置する。図２７Ａ右側では、符号列Ｌにおける符号Ｂ1から真横に移動して符号列Ｆの９番目の符号Ｃ1を特定し、この符号を最終的な符号列の「２」番目に配置する。次に、符号列Ｆの符号Ｃ1と同じ符号が出現する順番を符号列Ｌにおいて特定する。図２７Ａ右側では、符号Ｃとして２番目（０から数えて２番目の意味）に出現する符号Ｃ1は、符号列Ｌの４番目に存在しているので、「４」を特定する。すなわち、移動元の符号位置が「４」であることが分かるので、これを保持する。
【００８５】
このような処理を図２７Ａ右側の矢印で示すように繰り返し、符号列Ｆにおいて終了符号「＄」に到達すれば処理は終了する。
【００８６】
このような処理を実施すれば、図２７Ａ左側に示すように、逆ブロックソーティング後の符号列が得られる。すなわち符号列Ｌ「Ａ0Ｃ0Ｅ＄Ｃ1ＤＡ1Ａ2Ｂ0Ｂ1Ａ3Ａ4」は、符号列「Ａ2Ｂ1Ｃ1Ａ3ＤＡ4ＥＡ1Ｂ0Ｃ0Ａ0」に変換される。このような符号列は、符号列格納部２１９に格納される。
【００８７】
さらに、図２７Ｂに示すように、符号の移動元の位置データも生成されるので、これも符号列格納部２１９に格納する。なお、移動元の位置「３」が存在していないが、これは「＄」なので意味をなさないためである。但し、構造データの行を並び替える場合には、構造データの３行目が移動元の位置の「４」に相当する。
【００８８】
また、図２６に示すような符号列を取り扱う場合、図２８Ａ右側に示すように、符号列Ｌに含まれる符号の小さい順にソートして符号列Ｆを生成する。次に、符号列Ｌにおける終了符号「＄」を開始点として、符号列Ｆにおいて同じ順番の符号を特定し、順番に当該符号を配置する。その後、符号列Ｆにおいて特定された符号と同じ符号が符号列Ｌにおいて出現する順番を特定する。この際には、同一符号内の順番を考慮して特定する。例えば、符号列Ｆにおいて２番目に出現する符号Ａであれば、符号列Ｌにおいても２番目に出現する符号Ａを探索する。また、符号列Ｌにおいて特定された順番は、保持しておく。このような処理を、符号列Ｆにおいて終了符号「＄」に到達するまで繰り返す。
【００８９】
そうすると、図２８Ａ左側に示すように、Ａ2、Ｂ1、Ｅ1、Ａ3、Ｃ、Ａ4、Ｄ、Ａ1、Ｂ0、Ｅ0、Ａ0の順番で符号が配置され、最終的な符号列として符号列格納部２１９に格納される。さらに、図２８Ｂに示すような移動元の位置データについても、符号列格納部２１９に格納される。
【００９０】
図２４の処理の説明に戻って、並び替え処理部２２１は、符号列格納部２１９に格納されている、逆ブロックソーティング後の符号の順番又は移動元の位置データに従って、データ格納部２１３に格納されている、解凍後の構造データの行を並び替えて、処理後の構造データをデータ格納部２１３に格納する（ステップＳ８９）。
【００９１】
図２５の場合、例えば逆ブロックソーティング前の符号列における第１の符号Ａ0は、逆ブロックソーティング後では１１番目（１から数えて１１番目）に並び替えられている。従って、図２５のテーブルの第１行は第１１行に移動される。同様に、逆ブロックソーティング前の符号列における第２の符号Ｃ0は、逆ブロックソーティング後では１０番目に並び替えられている。従って、図２５のテーブルの第２行は第１０行に移動される。逆ブロックソーティング前の符号列における第３の符号Ｅは、逆ブロックソーティング後では７番目に並び替えられている。従って、図２５のテーブルの第３行は第７行に移動される。以下同様に処理されて、図２９Ａに示すような、並び替え後のテーブルが得られる。図２９Ａは、図４と同じテーブルとなっている。すなわち、完全に元のテーブルに復元されている。
【００９２】
なお、図２７Ｂに示すようなデータを保持していれば、番号「２」までであればその順番の行をそのまま並べ、符号「＄」の番号「３」より後ろの番号については「−１」した順番の行を並べればよい。具体的には、図２５において０から数えて６（＝７−１）行目を０行目に移動させ、８（＝９−１）行目を１行目に移動させ、３（＝４−１）行目を２行目に移動させ、９（＝１０−１）行目を３行目に移動させ、４（＝５−１）行目を４行目に移動させ、１０（＝１１−１）行目を５行目に移動させ、２行目を６行目に移動させ、５（＝６−１）行目を７行目に移動させ、７（＝８−１）行目を８行目に移動させ、１行目を９行目に移動させ、０行目を１０行目に移動させる。最終的な処理結果は図２９Ａと同じになる。
【００９３】
一方、図２６の場合、例えば逆ブロックソーティング前の符号列における第１の符号Ａ0は、逆ブロックソーティング後では１１番目に並び替えられている。従って、図２５のテーブルの第１行は第１１行に移動される。同様に、逆ブロックソーティング前の符号列における第２の符号Ｅ0は、逆ブロックソーティング後では１０番目に並び替えられている。従って、図２５のテーブルの第２行は第１０行に移動される。逆ブロックソーティング前の符号列における第３の符号Ｄは、逆ブロックソーティング後では７番目に並び替えられている。従って、図２５のテーブルの第３行は第７行に移動される。以下同様に処理されて、図２９Ｂに示すような、並び替え後のテーブルが得られる。図２９Ｂは、図４と同じテーブルとなっている。すなわち、完全に元のテーブルに復元されている。
【００９４】
図２８Ｂに示すようなデータを保持していれば、番号「２」までであればその順番の行をそのまま並べ、符号「＄」の番号「３」より後ろの番号については「−１」した順番の行を並べればよい。最終的な処理結果は、図２９Ｂと同じになる。
【００９５】
以上のような処理を実施することによって圧縮及び解凍が行われる。
【００９６】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、図２及び図２３の機能ブロック図は一例であって、必ずしも実際のプログラムモジュール構成と一致するものではない。また、データテーブルの構成も一例であり、図示したものに限定されるものではない。
【００９７】
さらに、上で述べた例では、処理対象列が３つで行全体を並び替える例を示した。これは１例であり、例えば１回目の処理（図３におけるステップＳ１乃至Ｓ１１。図２４におけるステップＳ７７乃至Ｓ８９。符号表がある場合にはステップＳ８５乃至Ｓ８９。）では１つの処理対象列に着目して、その列だけを並び替えるようにして、２回目の処理では他の１つの処理対象列に着目して、その列だけを並び替える、といったような処理を行っても良い。このような場合、行全体ではなく行の該当列部分（ここでは処理対象行と呼ぶ）を並び替える。なお、１列だけを並び替える場合にはステップＳ７で示した（Ｃ）の方法は適用が難しい。このようにする場合、列毎に並列処理が可能である。
【００９８】
さらに、１列毎ではなく複数の列毎に並び替えを行うようにしても良い。すなわち、１回目の処理では２つの処理対象列に着目してそれらの列だけを並び替え、２回目の処理では他の３つの処理対象列に着目してそれらの列だけを並び替える、といったような処理を行っても良い。さらに、３回目の処理では他の１の処理対象列に着目してその列だけを並び替える場合もある。この場合も、処理対象行が並び替えられる。このようにする場合、一度に処理する列のグループ毎に並列処理が可能である。
【００９９】
さらに、処理対象列ではないが処理対象列に連動して並び替えられる列を指定しても良い。この場合も、行における処理対象列の該当部分に加え、連動して並び替えられる列の該当部分が、処理対象行として並び替えられる。
【０１００】
また、テーブルの行と列とは入れ替え可能であり、本実施の形態では、列方向に同じ属性の値が登録されることを前提にしている。従って、行方向に同じ属性の値が登録されるようなテーブルでは、上で述べた処理を列ではなく行として処理を行う。
【０１０１】
なお、上で述べたように、ＸＭＬなどのデータについては、行と列とが規定されている構造データに変換できれば、同じように取り扱える。解凍時にも、構造データを元のＸＭＬなどのデータに逆変換できれば、本実施の形態で取り扱うことができる。
【０１０２】
なお、上で述べた圧縮装置１００及び解凍装置２００は、コンピュータ装置であって、図３０に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１０３】
以上述べた本実施の形態をまとめると、以下のようになる。
【０１０４】
本実施の形態の第１の態様に係る圧縮方法は、（Ａ）データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、（Ｂ）頻出値格納部に格納されている頻出値又は構造データにおける特定の行内に出現する頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、頻出値集合と符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、（Ｃ）構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、（Ｄ）符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、符号の第２のシーケンスを生成する順列変換ステップと、（Ｅ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納する並べ替え処理ステップと、（Ｆ）データ格納部に格納されている並び替え後の構造データに対して圧縮処理を実施するステップとを含む。
【０１０５】
このような処理を行うことによって、頻出値がテーブル内でまとまるように行が並び替えられるので、高圧縮率が実現されるようになる。なお、構造データにおける各処理対象行を符号に変換する処理は本実施の形態における新規な着想の一つであり、この処理を実施することによって構造データの構造を有効活用した圧縮が可能となる。
【０１０６】
なお、順列変換ステップは、例えばブロックソーティングにより実現される場合もあれば、単純なソーティング処理により実現される場合もある。単純なソーティング処理の場合には、第１及び第２のシーケンスの符号の対応関係を表すデータを圧縮データに添付して解凍時に用いる。
【０１０７】
また、上で述べた符号付与ステップが、構造データにおける各処理対象行に含まれる頻出値又は頻出値の組み合わせを特定するステップと、特定された頻出値又は頻出値の組み合わせが、符号表データ格納部に未登録であれば、当該頻出値又は頻出値の組み合わせである頻出値集合に対して未使用の符号を付与し、当該頻出値集合と当該符号とを対応付けて符号表データ格納部に格納するステップとを含むようにしてもよい。この方法は、処理が簡単で高速に符号を付与することができる。
【０１０８】
さらに、上で述べた所定の規則が、構造データにおける処理対象行を並べ替えても変化することがない指標に基づき頻出値集合を順序づけ、当該順序に応じて大きくなるように符号を順に対応付けるというルールである場合もある。このようにすれば、符号表を圧縮データに添付する必要が無くなり、実質的な圧縮率を高めることができるようになる。
【０１０９】
さらに、上で述べた符号付与ステップが、（ｂ１）構造データにおける各処理対象行に含まれる頻出値又は頻出値の組み合わせである頻出値集合を特定すると共に、特定された頻出値集合の出現頻度を計数するステップと、（ｂ２）出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、符号表データ格納部に格納するステップと、（ｂ３）直前に符号が付与された頻出値集合と頻出値についての類似度（例えば、上記頻出値の重複度合い）が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された頻出値集合に付与し、符号表データ格納部に格納するステップとを含むようにしても良い。この手法を採用すれば、より頻出値がテーブル内でまとまりやすくなる場合がある。さらに、符号表を圧縮データに添付する必要がない。
【０１１０】
また、第１の態様において、符号表データ格納部に格納されている頻出値集合と対応する符号とを、圧縮されたデータと共に第２データ格納部に格納するステップをさらに含むようにしてもよい。解凍時の処理が高速化される。
【０１１１】
また、各処理対象行が、行全体又は処理対象列と交差する部分を含む、行の一部である場合もある。行全体を並び替える場合もあれば、行の一部分だけを並び替えるようにしても効果を得られる。
【０１１２】
さらに、各処理対象行が、処理対象列と交差する部分を含む、行の一部である場合もある。その場合、頻出値抽出ステップから並べ替え処理ステップを、異なる処理対象列に対して複数回実施するようにしてもよい。このようにすれば、より頻出値がテーブル内でまとまりやすくなるので、高圧縮率が実現される。
【０１１３】
本実施の形態の第２の態様に係る解凍方法は、（Ａ）圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、（Ｂ）データ格納部に格納されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、（Ｃ）頻出値格納部に格納されている頻出値又は構造データにおける特定の行内に出現する頻出値の組み合わせである頻出値集合に対して、構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、頻出値集合と符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、（Ｄ）構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、（Ｅ）符号の第１のシーケンスに対して、上記構造データに施された所定の順列変換処理の逆処理を実施し、符号の第２のシーケンスを生成するステップと、（Ｆ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納する並び替え処理ステップとを含む。
【０１１４】
このようにすれば、上記圧縮方法で圧縮された構造データを解凍することができる。
【０１１５】
また、上で述べた符号付与ステップが、（ｃ１）構造データにおける各処理対象行に含まれる頻出値又は頻出値の組み合わせである頻出値集合を特定すると共に、特定された頻出値集合の出現頻度を計数するステップと、（ｃ２）出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、符号表データ格納部に格納するステップと、（ｃ３）直前に符号が付与された頻出値集合と頻出値についての類似度（例えば、上記頻出値の重複度合い）が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された頻出値集合に付与し、符号表データ格納部に格納するステップとを含むようにしてもよい。圧縮時に使用されているアルゴリズムに応じてこのような処理を実施する場合もある。
【０１１６】
さらに、解凍方法において、各処理対象行が、処理対象列と交差する部分を含む、行の一部である場合もある。そして、頻出値抽出ステップから並べ替え処理ステップを、異なる処理対象列に対して複数回実施するようにしてもよい。
【０１１７】
本実施の形態の第３の態様に係る解凍方法は、（Ａ）圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、（Ｂ）データ格納部に格納されている構造データにおける各処理対象行を、構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号に変換する変換ステップと、（Ｃ）符号の第１のシーケンスに対して、上記構造データに施された所定の順列変換処理の逆処理を実施し、符号の第２のシーケンスを生成するステップと、（Ｄ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納するステップとを含む。符号表が圧縮されたデータに付加されている場合にはこのような処理を行うことによって高速に元のデータを復元できる。
【０１１８】
なお、第２及び第３の態様において、各処理対象行が、行全体又は処理対象列と交差する部分を含む、行の一部である場合もある。
【０１１９】
さらに、第３の態様において、各処理対象行が、処理対象列と交差する部分を含む、行の一部である場合がある。その際、変換ステップから並べ替え処理ステップを、異なる処理対象列に対して複数回実施するようにしてもよい。
【０１２０】
本実施の形態の第４の態様に係る圧縮装置（図３１）は、（Ａ）データ格納部（図３１：１００２）に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部（図３１：１００３）に格納する頻出値抽出部（図３１：１００１）と、（Ｂ）頻出値格納部に格納されている頻出値又は構造データにおける特定の行内に出現する頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、頻出値集合と符号とを対応付けて符号表格納部（図３１：１００５）に格納する符号付与部（図３１：１００４）と、（Ｃ）構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換する符号化処理部（図３１：１００６）と、（Ｄ）符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、符号の第２のシーケンスを生成する順列変換処理部（図３１：１００７）と、（Ｅ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納する並び替え処理部（図３１：１００８）と、（Ｆ）データ格納部に格納されている、並び替え後の構造データに対して圧縮処理を実施する圧縮処理部（図３１：１００９）とを有する。
【０１２１】
本実施の形態の第５の態様に係る解凍装置（図３２）は、（Ａ）圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部（図３２：２００２）に格納する解凍処理部（図３２：２００１）と、（Ｂ）データ格納部に格納されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部（図３２：２００４）に格納する頻出値抽出部（図３２：２００３）と、（Ｃ）頻出値格納部に格納されている頻出値又は構造データにおける特定の行内に出現する頻出値の組み合わせである頻出値集合に対して、構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、頻出値集合と符号とを対応付けて符号表格納部（図３２：２００６）に格納する符号付与部（図３２：２００５）と、（Ｄ）構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換する符号化処理部（図３２：２００７）と、（Ｅ）符号の第１のシーケンスに対して、上記構造データに施された所定の順列変換処理の逆処理を実施し、符号の第２のシーケンスを生成する順列逆変換処理部（図３２：２００８）と、（Ｆ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納する並び替え処理部（図３２：２００９）とを有する。
【０１２２】
さらに、本実施の形態の第６の態様に係る解凍装置（図３３）は、（Ａ）圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部（図３３：３００２）に格納する解凍処理部（図３３：３００１）と、（Ｂ）データ格納部に格納されている構造データにおける各処理対象行を、構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号に変換する符号化処理部（図３３：３００３）と、（Ｃ）符号の第１のシーケンスに対して、上記構造データに施された所定の順列変換処理の逆処理を実施し、符号の第２のシーケンスを生成する順列逆変換処理部（図３３：３００４）と、（Ｄ）第１及び第２のシーケンスの符号の対応関係に従って、構造データにおける処理対象行を並び替え、並び替え後の構造データをデータ格納部に格納する並び替え処理部（図３３：３００５）とを有する。
【０１２３】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【０１２４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２５】
（付記１）
データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、前記符号の第２のシーケンスを生成する順列変換ステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並べ替え処理ステップと、
前記データ格納部に格納されている、並び替え後の構造データに対して圧縮処理を実施するステップと、
を、コンピュータに実行させるための圧縮プログラム。
【０１２６】
（付記２）
前記符号付与ステップが、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせを特定するステップと、
特定された前記頻出値又は前記頻出値の組み合わせが、前記符号表データ格納部に未登録であれば、当該頻出値又は頻出値の組み合わせである頻出値集合に対して未使用の符号を付与し、当該頻出値集合と当該符号とを対応付けて前記符号表データ格納部に格納するステップと、
を含む付記１記載の圧縮プログラム。
【０１２７】
（付記３）
前記所定の規則が、
前記構造データにおける前記処理対象行を並べ替えても変化することがない指標に基づき前記頻出値集合を順序づけ、当該順序に応じて大きくなるように符号を順に対応付けるという規則である
付記１記載の圧縮プログラム。
【０１２８】
（付記４）
前記符号付与ステップが、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせである頻出値集合を特定すると共に、特定された前記頻出値集合の出現頻度を計数するステップと、
前記出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、前記符号表データ格納部に格納するステップと、
直前に符号が付与された前記頻出値集合と前記頻出値についての類似度が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された前記頻出値集合に付与し、前記符号表データ格納部に格納するステップと、
を含む付記１記載の圧縮プログラム。
【０１２９】
（付記５）
前記符号表データ格納部に格納されている前記頻出値集合と対応する前記符号とを、圧縮されたデータと共に第２データ格納部に格納するステップ
をさらに前記コンピュータに実行させるための付記２記載の圧縮プログラム。
【０１３０】
（付記６）
各前記処理対象行が、行全体又は前記処理対象列と交差する部分を含む、行の一部である
付記１乃至５のいずれか１つ記載の圧縮プログラム。
【０１３１】
（付記７）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記頻出値抽出ステップから前記並べ替え処理ステップを、異なる処理対象列に対して複数回実施する
付記１乃至５のいずれか１つ記載の圧縮プログラム。
【０１３２】
（付記８）
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、前記構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各前記処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理ステップと、
をコンピュータに実行させるための解凍プログラム。
【０１３３】
（付記９）
前記符号付与ステップが、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせである頻出値集合を特定すると共に、特定された前記頻出値集合の出現頻度を計数するステップと、
前記出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、前記符号表データ格納部に格納するステップと、
直前に符号が付与された前記頻出値集合と前記頻出値についての類似度が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された前記頻出値集合に付与し、前記符号表データ格納部に格納するステップと、
を含む付記８記載の解凍プログラム。
【０１３４】
（付記１０）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記頻出値抽出ステップから前記並び替え処理ステップを、異なる処理対象列に対して複数回実施する
付記８又は９記載の解凍プログラム。
【０１３５】
（付記１１）
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける各処理対象行を、前記構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号に変換する変換ステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納するステップと、
をコンピュータに実行させるための解凍プログラム。
【０１３６】
（付記１２）
各前記処理対象行が、行全体又は前記処理対象列と交差する部分を含む、行の一部である
付記８乃至１１のいずれか１つ記載の解凍プログラム。
【０１３７】
（付記１３）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記変換ステップから前記並び替え処理ステップを、異なる処理対象列に対して複数回実施する
付記１１記載の解凍プログラム。
【０１３８】
（付記１４）
データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並べ替え処理ステップと、
前記データ格納部に格納されている、並び替え後のデータに対して圧縮処理を実施するステップと、
を含み、コンピュータに実行される圧縮方法。
【０１３９】
（付記１５）
前記符号付与ステップが、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせを特定するステップと、
特定された前記頻出値又は前記頻出値の組み合わせが、前記符号表データ格納部に未登録であれば、当該頻出値又は頻出値の組み合わせである頻出値集合に対して未使用の符号を付与し、当該頻出値集合と当該符号とを対応付けて前記符号表データ格納部に格納するステップと、
を含む付記１４記載の圧縮方法。
【０１４０】
（付記１６）
前記所定の規則が、
前記構造データにおける前記処理対象行を並べ替えても変化することがない指標に基づき前記頻出値集合を順序づけ、当該順序に応じて大きくなるように符号を順に対応付けるという規則である
請求項１４記載の圧縮方法。
【０１４１】
（付記１７）
前記符号付与ステップが、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせである頻出値集合を特定すると共に、特定された前記頻出値集合の出現頻度を計数するステップと、
前記出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、前記符号表データ格納部に格納するステップと、
直前に符号が付与された前記頻出値集合と前記頻出値についての類似度が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された前記頻出値集合に付与し、前記符号表データ格納部に格納するステップと、
を含む付記１４記載の圧縮方法。
【０１４２】
（付記１８）
前記符号表データ格納部に格納されている前記頻出値集合と対応する前記符号とを、圧縮されたデータと共に第２データ格納部に格納するステップ
をさらに含む付記１５記載の圧縮方法。
【０１４３】
（付記１９）
各前記処理対象行が、行全体又は前記処理対象列と交差する部分を含む、行の一部である
付記１４乃至１８のいずれか１つ記載の圧縮方法。
【０１４４】
（付記２０）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記頻出値抽出ステップから前記並べ替え処理ステップを、異なる処理対象列に対して複数回実施する
付記１４乃至１８のいずれか１つ記載の圧縮方法。
【０１４５】
（付記２１）
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出ステップと、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、前記構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与ステップと、
前記構造データにおける各前記処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換するステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理ステップと、
を含み、コンピュータに実行される解凍方法。
【０１４６】
（付記２２）
前記符号付与ステップが、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせである頻出値集合を特定すると共に、特定された前記頻出値集合の出現頻度を計数するステップと、
前記出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、前記符号表データ格納部に格納するステップと、
直前に符号が付与された前記頻出値集合と前記頻出値についての類似度が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された前記頻出値集合に付与し、前記符号表データ格納部に格納するステップと、
を含む付記２１記載の解凍方法。
【０１４７】
（付記２３）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記頻出値抽出ステップから前記並び替え処理ステップを、異なる処理対象列に対して複数回実施する
付記２１又は２２のいずれか１つ記載の解凍方法。
【０１４８】
（付記２４）
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記構造データにおける各処理対象行を、前記構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号と同一符号間における識別子との組み合わせに変換する変換ステップと、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成するステップと、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納するステップと、
を含み、コンピュータに実行される解凍方法。
【０１４９】
（付記２５）
各前記処理対象行が、行全体又は前記処理対象列と交差する部分を含む、行の一部である
付記２１乃至２４のいずれか１つ記載の解凍方法。
【０１５０】
（付記２６）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記変換ステップから前記並び替え処理ステップを、異なる処理対象列に対して複数回実施する
付記２４記載の解凍方法。
【０１５１】
（付記２７）
データ格納部に格納されており且つ行と列とが規定されている構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出部と、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、所定の規則に従って符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与部と、
前記構造データにおける各処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換する符号化処理部と、
前記符号の第１のシーケンスに対して、同一符号が連続するように順列変換処理を実施し、前記符号の第２のシーケンスを生成する順列変換処理部と、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理部と、
前記データ格納部に格納されている、並び替え後の構造データに対して圧縮処理を実施する圧縮処理部と、
を有する圧縮装置。
【０１５２】
（付記２８）
前記符号付与部が、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせを特定する処理部と、
特定された前記頻出値又は前記頻出値の組み合わせが、前記符号表データ格納部に未登録であれば、当該頻出値又は頻出値の組み合わせである頻出値集合に対して未使用の符号を付与し、当該頻出値集合と当該符号とを対応付けて前記符号表データ格納部に格納する処理部と、
を含む付記２７記載の圧縮装置。
【０１５３】
（付記２９）
前記所定の規則が、
前記構造データにおける前記処理対象行を並べ替えても変化することがない指標に基づき前記頻出値集合を順序づけ、当該順序に応じて大きくなるように符号を順に対応付けるという規則である
付記２７記載の圧縮装置。
【０１５４】
（付記３０）
前記符号付与部が、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせである頻出値集合を特定すると共に、特定された前記頻出値集合の出現頻度を計数する計数部と、
前記出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、前記符号表データ格納部に格納する第１付与部と、
直前に符号が付与された前記頻出値集合と前記頻出値についての類似度が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された前記頻出値集合に付与し、前記符号表データ格納部に格納する第２付与部と、
を含む付記２７記載の圧縮装置。
【０１５５】
（付記３１）
前記符号表データ格納部に格納されている前記頻出値集合と対応する前記符号とを、圧縮されたデータと共に第３データ格納部に格納する処理部
をさらに含む付記２８記載の圧縮装置。
【０１５６】
（付記３２）
各前記処理対象行が、行全体又は前記処理対象列と交差する部分を含む、行の一部である
付記２７乃至３１のいずれか１つ記載の圧縮装置。
【０１５７】
（付記３３）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記頻出値抽出部、前記符号付与部、前記符号化処理部、前記順列変換処理部及び前記並び替え処理部に、異なる処理対象列に対して複数回処理させる
付記２７乃至３１のいずれか１つ記載の圧縮装置。
【０１５８】
（付記３４）
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納する解凍処理部と、
前記データ格納部に格納されている前記構造データにおける処理対象列において出現する値の出現回数を計数し、当該出現回数に基づき頻出値を抽出し、頻出値格納部に格納する頻出値抽出部と、
前記頻出値格納部に格納されている前記頻出値又は前記構造データにおける特定の行内に出現する前記頻出値の組み合わせである頻出値集合に対して、前記構造データにおける処理対象行を並べ替えても変化しない指標を基に符号を付与し、前記頻出値集合と前記符号とを対応付けて符号表データ格納部に格納する符号付与部と、
前記構造データにおける各前記処理対象行を、当該処理対象行に含まれる値と同一の頻出値集合に対応付けられている符号に変換する符号化処理部と、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成する順列逆変換処理部と、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを第２データ格納部に格納する並び替え処理部と、
を有する解凍装置。
【０１５９】
（付記３５）
前記符号付与部が、
前記構造データにおける各前記処理対象行に含まれる前記頻出値又は前記頻出値の組み合わせである頻出値集合を特定すると共に、特定された前記頻出値集合の出現頻度を計数する処理部と、
前記出現頻度が最も大きい頻出値集合に対して最も小さい符号を付与し、前記符号表データ格納部に格納する処理部と、
直前に符号が付与された前記頻出値集合と前記頻出値についての類似度が最も高く且つ符号が付与されていない頻出値集合を特定し、直前に付与された符号より大きい符号を、特定された前記頻出値集合に付与し、前記符号表データ格納部に格納する処理部と、
を含む付記３４記載の解凍装置。
【０１６０】
（付記３６）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記頻出値抽出部、前記符号付与部、前記符号化処理部、前記順列逆変換処理部及び前記並び替え処理部に、異なる処理対象列に対して複数回処理させる
付記３４又は３５記載の解凍装置。
【０１６１】
（付記３７）
圧縮されたデータを解凍することで行と列とが規定されている構造データを生成し、データ格納部に格納する解凍処理部と、
前記データ格納部に格納されている前記構造データにおける各処理対象行を、前記構造データに出現する値又は値の組み合わせである値集合と符号とが対応付けて登録されている符号表において当該処理対象行に含まれる値と同一の値集合が対応付けている符号に変換する符号化処理部と、
前記符号の第１のシーケンスに対して、前記構造データに施された所定の順列変換処理の逆処理を実施し、前記符号の第２のシーケンスを生成する順列逆変換処理部と、
前記第１及び第２のシーケンスの符号の対応関係に従って、前記構造データにおける前記処理対象行を並び替え、並び替え後の前記構造データを前記データ格納部に格納する並び替え処理部と、
を有する解凍装置。
【０１６２】
（付記３８）
各前記処理対象行が、行全体又は前記処理対象列と交差する部分を含む、行の一部である
付記３４乃至３７のいずれか１つ記載の解凍装置。
【０１６３】
（付記３９）
各前記処理対象行が、前記処理対象列と交差する部分を含む、行の一部であり、
前記符号化処理部と前記順列逆変換処理部と前記並び替え処理部とに、異なる処理対象列に対して複数回処理させる
付記３７記載の解凍装置。
【符号の説明】
【０１６４】
１０  データ格納部    １１  頻出値抽出部
１２  頻出値表格納部    １３  符号付与部
１４  符号表格納部    １５  順列変換処理部
１６  符号列格納部    １７  並び替え処理部
１８  圧縮処理部    １９  圧縮データ格納部
２０  符号化処理部
２１０  圧縮データ格納部    ２１１  入力部
２１２  解凍処理部    ２１３  データ格納部
２１４  頻出値抽出部    ２１５  頻出値表格納部
２１６  符号付与部    ２１７  符号表格納部
２１８  符号化処理部    ２１９  符号列格納部
２２０  順列逆変換処理部
２２１  並び替え処理部
【図１】
0005487985.tif 000002
【図２】
0005487985.tif 000003
【図３】
0005487985.tif 000004
【図４】
0005487985.tif 000005
【図５】
0005487985.tif 000006
【図６】
0005487985.tif 000007
【図７】
0005487985.tif 000008
【図８】
0005487985.tif 000009
【図９】
0005487985.tif 000010
【図１０】
0005487985.tif 000011
【図１１】
0005487985.tif 000012
【図１２】
0005487985.tif 000013
【図１３】
0005487985.tif 000014
【図１４】
0005487985.tif 000015
【図１５Ａ】
0005487985.tif 000016
【図１５Ｂ】
0005487985.tif 000017
【図１６Ａ】
0005487985.tif 000018
【図１６Ｂ】
0005487985.tif 000019
【図１７】
0005487985.tif 000020
【図１８Ａ】
0005487985.tif 000021
【図１８Ｂ】
0005487985.tif 000022
【図１９】
0005487985.tif 000023
【図２０Ａ】
0005487985.tif 000024
【図２０Ｂ】
0005487985.tif 000025
【図２１】
0005487985.tif 000026
【図２２】
0005487985.tif 000027
【図２３】
0005487985.tif 000028
【図２４】
0005487985.tif 000029
【図２５】
0005487985.tif 000030
【図２６】
0005487985.tif 000031
【図２７Ａ】
0005487985.tif 000032
【図２７Ｂ】
0005487985.tif 000033
【図２８Ａ】
0005487985.tif 000034
【図２８Ｂ】
0005487985.tif 000035
【図２９Ａ】
0005487985.tif 000036
【図２９Ｂ】
0005487985.tif 000037
【図３０】
0005487985.tif 000038
【図３１】
0005487985.tif 000039
【図３２】
0005487985.tif 000040
【図３３】
0005487985.tif 000041