特許第6123088号(P6123088)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 楽天株式会社の特許一覧

特許6123088ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法
<>
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000002
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000003
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000004
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000005
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000006
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000007
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000008
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000009
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000010
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000011
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000012
  • 特許6123088-ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】6123088
(24)【登録日】2017年4月14日
(45)【発行日】2017年5月10日
(54)【発明の名称】ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法
(51)【国際特許分類】
   H03M 7/30 20060101AFI20170424BHJP
   G06F 17/30 20060101ALI20170424BHJP
【FI】
   H03M7/30 Z
   G06F17/30 230A
【請求項の数】16
【全頁数】23
(21)【出願番号】特願2016-560607(P2016-560607)
(86)(22)【出願日】2016年2月25日
(86)【国際出願番号】JP2016055583
【審査請求日】2016年9月30日
【新規性喪失の例外の表示】特許法第30条第2項適用 ▲1▼刊行物名:研究報告アルゴリズム(AL) 発行者:情報処理学会 発行日:平成27月9月21日 ▲2▼学会名:情報処理学会 第154回アルゴリズム研究会 公開場所: 九州大学西新プラザ(福岡県福岡市早良区西新2−16−23) 開催日:平成27年9月28日 公開者:金田 悠作 掲載アドレス:http://www.ipsj−sigal.or.jp/prog27/prog154.htmlで発表
【早期審査対象出願】
(73)【特許権者】
【識別番号】399037405
【氏名又は名称】楽天株式会社
(74)【代理人】
【識別番号】100205659
【弁理士】
【氏名又は名称】齋藤 拓也
(74)【代理人】
【識別番号】100154748
【弁理士】
【氏名又は名称】菅沼 和弘
(72)【発明者】
【氏名】金田 悠作
【審査官】 北村 智彦
(56)【参考文献】
【文献】 国際公開第2015/151444(WO,A1)
【文献】 国際公開第2015/173870(WO,A1)
【文献】 金田悠作,実用的な圧縮Rank/Select辞書,情報処理学会研究報告アルゴリズム(AL),2015年 9月21日,Vol.2015-AL-154,No.1,pp.1-6
【文献】 定兼 邦彦,大規模データ処理のための簡潔データ構造,情報処理 ,2007年 8月,Vol.48,No.8,pp.899-902
(58)【調査した分野】(Int.Cl.,DB名)
H03M 3/00−11/00
G06F 17/30
IEEE Xplore
CiNii
(57)【特許請求の範囲】
【請求項1】
1以上のプロセッサと、
プログラムを記憶した1以上のメモリと
を備えるブロック符号化装置であって、
前記プログラムは、前記1以上のプロセッサにより実行された場合に、前記1以上のプロセッサに
入力ビット列を第1のブロック長の複数のブロックに分割して処理対象ブロックを生成し、
処理対象ブロックのビット列に含まれる1の値の数から、処理対象ブロックの第1の重みを決定し、
前記処理対象ブロックを第2のブロック長の小ブロックに分割し、小ブロック毎の重みと値とに基づき、前記第1のブロック長と前記第1の重みとを有する所定のビット列を所定の順序で配列した集合における前記処理対象ブロックの第1の順序を決定し、
前記処理対象ブロックのビット列を、前記決定された第1の重みと第1の順序との値に変換してブロック符号化データを生成する
動作を実行させることを特徴とするブロック符号化装置。
【請求項2】
前記所定の順序は、前記集合に含まれる前記所定のビット列を前記第2のブロック長の小ブロックに分割した場合に、最上位ビットを含む第1の小ブロック側から順に小ブロック毎の重み及び値がより小さいビット列がより先頭側に位置するように決定されていることを特徴とする請求項1に記載のブロック符号化装置。
【請求項3】
前記プログラムは、前記1以上のプロセッサにより実行され、前記1以上のプロセッサに前記第1の順序を決定させる場合に、
前記第1のブロック長、前記第1の重みを有するビット列が前記第2のブロック長の小ブロック内で取り得る重みの大きさごとに、前記集合において、ビット列の前記第1の小ブロックについてより小さい重みを有するビット列の数を登録する第1のテーブルを参照させ、
前記集合において、ビット列の前記第1の小ブロックにつき前記処理対象ブロックの前記第1の小ブロックのビット列が有する重みよりも小さい重みを有し、かつ、前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の第1の数を算出させる
動作を実行させることを特徴とする請求項2に記載のブロック符号化装置。
【請求項4】
前記プログラムは、前記1以上のプロセッサにより実行され、前記1以上のプロセッサに前記第1の順序を決定させる場合に、
前記第2のブロック長の小ブロックが取り得る重みの大きさごとに前記小ブロックが取り得るビット列のパターン数を登録する第2のテーブルと、前記第2のブロック長の小ブロックが取り得る重みの大きさごとに前記小ブロックが取り得るビット列のパターン同士の間で定められる順序を登録する第3のテーブルとを参照させ、
前記集合において、前記処理対象ブロックの前記第1の小ブロックのビット列と重みが同一で値の異なるビット列の第1の小ブロックを有し、かつ、前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の第2の数を算出させる
動作を実行させることを特徴とする請求項3に記載のブロック符号化装置。
【請求項5】
前記プログラムは、前記1以上のプロセッサにより実行され、前記1以上のプロセッサに前記第1の順序を決定させる場合に、
前記第3のテーブルを参照させ、前記集合において、前記処理対象ブロックの前記第1の小ブロックと同一の値のビット列の第1の小ブロックを有し、かつ、前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の第3の数を算出させ、
前記第1の数、前記第2の数、前記第3の数を加算して前記第1の順序を決定する
動作を実行させることを特徴とする請求項4に記載のブロック符号化装置。
【請求項6】
1以上のプロセッサと、
プログラムを記憶した1以上のメモリと、
を備えるブロック復号化装置であって、
前記プログラムは、前記1以上のプロセッサにより実行された場合に、前記1以上のプロセッサに、第1の重みを有する第1のブロック長の処理対象ブロックのビット列をブロック符号化して生成されたブロック符号化データから前記処理対象ブロックのビット列を復号する動作を実行させ、
前記ブロック符号化データは、前記第1の重みと、前記第1のブロック長と前記第1の重みとを有する所定のビット列を所定の順序で配列した集合における前記処理対象ブロックの第1の順序とを含み、
前記復号する動作には、
前記処理対象ブロックを第2のブロック長の小ブロックで分割した場合の、前記処理対象ブロックの最上位ビットを含む第1の小ブロックが有する第2の重みを決定し、
前記集合において、ビット列の第1の小ブロックにつき前記第2の重みよりも小さい重みを有し、かつ、前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の第1の数を決定し、
前記集合において、前記第1の順序と前記第1の数との差分に基づき、前記処理対象ブロックの前記第1の小ブロックが有するビット列と、前記処理対象ブロックの前記第1の小ブロックと重みが同じで値の異なる第1の小ブロックを有するビット列の第2の数とを決定し、
前記第1の重みと前記第2の重みとの差分と、前記集合において、前記第1の順序と前記第1の数及び前記第2の数との差分とに基づいて、前記処理対象ブロックの第2の小ブロックが有するビット列を決定する
動作が含まれる、ことを特徴とするブロック復号化装置。
【請求項7】
前記所定の順序は、前記集合に含まれる前記所定のビット列を前記第2のブロック長の小ブロックに分割した場合に、最上位ビットを含む第1の小ブロック側から順に小ブロック毎の重み及び値がより小さいビット列がより先頭側に位置するように決定されていることを特徴とする請求項6に記載のブロック復号化装置。
【請求項8】
前記プログラムは、前記1以上のプロセッサにより実行され、前記1以上のプロセッサに前記処理対象ブロックの前記第1の小ブロックの第2の重みを決定させる場合に、
前記第1のブロック長、前記第1の重みのビット列が前記第2のブロック長の小ブロック内で取り得る重みの大きさごとに、前記集合において、ビット列の前記第1の小ブロックについてより小さい重みを有するビット列の数を登録する第1のテーブルを参照させ、
前記第1のテーブルに登録されている重みのうち、前記第1の重みよりも値が小さく、かつ、該登録されている重みと関連づけられているビット列の数が前記第1の順序の数を超えない重みを選択し、
前記1以上のプロセッサに前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の前記第1の数を決定させる場合に、
前記第1のテーブルにおいて前記第2の重みと関連づけられているビット列の数を選択する
動作を実行させることを特徴とする請求項7に記載のブロック復号化装置。
【請求項9】
前記プログラムは、前記1以上のプロセッサにより実行され、前記1以上のプロセッサに前記処理対象ブロックの前記第1の小ブロックが有するビット列を決定させる場合に、
前記第2のブロック長の小ブロックが取り得る重みの大きさごとに前記小ブロックが取り得るビット列のパターン数を登録する第2のテーブルと、前記第2のブロック長の小ブロックが取り得る重みの大きさと、前記小ブロックが取り得るビット列のパターン同士の間で定められる順序との組み合わせに対応するビット列を登録する第3のテーブルとを参照させ、
前記第1の順序と前記第1の数との差分と、前記第2のテーブルにおいて前記第2の重みと関連づけて登録されたパターン数とに基づき、前記第3のテーブルにおいてビット列を選択するための第2の順序を算出し、前記第3のテーブルにおいて前記第2の重みと前記第2の順序との組み合わせに対応するビット列を前記第1の小ブロックが有するビット列に決定する
動作を実行させることを特徴とする請求項8に記載のブロック復号化装置。
【請求項10】
前記プログラムは、前記1以上のプロセッサにより実行され、前記1以上のプロセッサに前記第2の数を決定させる場合に、
前記第1の順序と前記第1の数との差分と、前記第2のテーブルにおいて前記第2の重みと関連づけて登録されたパターン数とに基づき、前記集合において、前記処理対象ブロックの前記第1の小ブロックと重みが同じで値の異なる第1の小ブロックを有し、かつ、前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の数を算出させる
動作を実行させることを特徴とする請求項9に記載のブロック復号化装置。
【請求項11】
前記プログラムは、前記1以上のプロセッサにより実行され、前記1以上のプロセッサに前記処理対象ブロックの第2の小ブロックが有するビット列を決定させる場合に、
前記第1の順序と前記第1の数及び前記第2の数との差分に基づき、前記第3のテーブルにおいてビット列を選択するための第3の順序を算出し、前記第3のテーブルにおいて前記第1の重みと前記第2の重みとの差分が表す重みと、前記第3の順序との組み合わせに対応するビット列を前記第2の小ブロックが有するビット列に決定する
動作を実行させることを特徴とする請求項10に記載のブロック復号化装置。
【請求項12】
請求項1乃至5のいずれか1項に記載のブロック符号化装置と、
請求項6乃至11のいずれか1項に記載のブロック復号化装置と
を備えることを特徴とする情報処理装置。
【請求項13】
コンピュータに、請求項1乃至5のいずれか1項に記載のブロック符号化装置の1以上のプロセッサの動作を実行させるためのプログラム。
【請求項14】
コンピュータに、請求項6乃至11のいずれか1項に記載のブロック復号化装置の1以上のプロセッサの動作を実行させるためのプログラム。
【請求項15】
1以上のプロセッサと、プログラムを記憶した1以上のメモリとを備えるブロック符号化装置が、前記1以上のプロセッサが前記プログラムを実行することにより実行するブロック符号化方法であって、
入力ビット列を第1のブロック長の複数のブロックに分割して処理対象ブロックを生成することと、
処理対象ブロックのビット列に含まれる1の値の数から、処理対象ブロックの第1の重みを決定することと、
前記処理対象ブロックを第2のブロック長の小ブロックに分割し、小ブロック毎の重みと値とに基づき、前記第1のブロック長と前記第1の重みとを有する所定のビット列を所定の順序で配列した集合における前記処理対象ブロックの第1の順序を決定することと、
前記処理対象ブロックのビット列を、前記決定された第1の重みと第1の順序との値に変換してブロック符号化データを生成することと
を含む、ことを特徴とするブロック符号化方法。
【請求項16】
1以上のプロセッサと、プログラムを記憶した1以上のメモリとを備えるブロック復号化装置が、前記1以上のプロセッサが前記プログラムを実行することにより、第1の重みを有する第1のブロック長の処理対象ブロックのビット列をブロック符号化して生成されたブロック符号化データから前記処理対象ブロックのビット列を復号するブロック復号化方法であって、
前記ブロック符号化データは、前記第1の重みと、前記第1のブロック長と前記第1の重みとを有する所定のビット列を所定の順序で配列した集合における前記処理対象ブロックの第1の順序とを含み、
前記方法は、
前記処理対象ブロックを第2のブロック長の小ブロックで分割した場合の、前記処理対象ブロックの最上位ビットを含む第1の小ブロックが有する第2の重みを決定することと、
前記集合において、ビット列の第1の小ブロックにつき前記第2の重みよりも小さい重みを有し、かつ、前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の第1の数を決定することと、
前記集合において、前記第1の順序と前記第1の数との差分に基づき、前記処理対象ブロックの前記第1の小ブロックが有するビット列と、前記処理対象ブロックの前記第1の小ブロックと重みが同じで値の異なる第1の小ブロックを有するビット列の第2の数とを決定することと、
前記第1の重みと前記第2の重みとの差分と、前記集合において、前記第1の順序と前記第1の数及び前記第2の数との差分とに基づいて、前記処理対象ブロックの第2の小ブロックが有するビット列を決定することと
を含む、ことを特徴とするブロック復号化方法。
【発明の詳細な説明】
【技術分野】
【0001】
本願発明は、ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法に関する。
【背景技術】
【0002】
大規模なデータを扱うアプリケーションでは、速度とともに作業領域の大きさも問題となる。作業領域が主記憶に収まらない場合、スワッピングが発生し、大幅な速度低下を招くこととなる。そのためデータ構造には、高速に検索を可能とするだけでなく、作業領域量が小さいことが求められている。
【0003】
そこで近年、二次記憶装置(ハードディスク等)を参照することなく主記憶上での高速な大規模データ処理を目的に,データを情報理論的下限に近いサイズで表現したまま高速な操作を実現する簡潔データ構造,および,データをエントロピーに近いサイズに圧縮したまま高速な操作を実現する圧縮データ構造が理論・実用の両面から研究されている。
【0004】
Rank/Select 辞書は,入力ビット列B[0..n-1] 上のrankb(x,B) (B[0..x] 中のb∈{0,1}の個数を求める操作) とselectb(i,B) (Bの先頭からi番目のb∈{0,1}の位置を求める操作) を実現するデータ構造である。Ramanらは,入力ビット列を圧縮したまま上述の操作を定数時間で実現するデータ構造(RRR)を提案した(非特許文献1)。このデータ構造は,入力ビット列を長さlog(n)/2の固定長ブロックに分割し,各ブロックを重み(ブロック中の1の個数を表す固定長整数)と順序(同じ重みのブロック群に一意に割り振られた可変長整数)の組として符号化する。
【0005】
このブロック符号化とその逆操作であるブロック復号化は,理論的には漸近的にnより小さい補助領域を用いて定数時間で実現できる。一方,実用的にはこの補助領域は無視できないほど大きい。したがって,効率良いブロック符号化・ブロック復号化の実現は,上述のデータ構造を実装する上で重要な課題である。
【0006】
また、RRR の実用的な実装方法として、Navarro とProvidel の実装方法(以降、RRR-NP という)が提案されている(非特許文献2)。非特許文献2の提案手法では、RRR の実性能はブロック圧縮の実現方法に大きく依存している。
【先行技術文献】
【非特許文献】
【0007】
【非特許文献1】R. Raman, V. Raman, S. R. Satti: Succinct indexable dictionaries with applications to encoding k-ary trees, prefix sums and multisets. ACM Transactions on Algorithms, Volume 3, Number 4,
【非特許文献2】G. Navarro, E. Providel: Fast, small, simple rank/select on bitmaps, In Proc. 11th SEA, pp. 295{306, 2012.
【発明の概要】
【発明が解決しようとする課題】
【0008】
RRRの実用的な実装のために、ブロック圧縮に対する効率良い符号化法と復号化法の提供を目的とし、高速で省領域な符号化法と復号化法を与え、密なビット列に対しても高速に動作するRRR 実装を提供する。
【課題を解決するための手段】
【0009】
上記課題を解決するための発明の実施形態の一つに対応するブロック符号化装置は、
1以上のプロセッサと、
プログラムを記憶した1以上のメモリと
を備え、
前記プログラムは、前記1以上のプロセッサにより実行された場合に、前記1以上のプロセッサに
入力ビット列を第1のブロック長の複数のブロックに分割して処理対象ブロックを生成し、
処理対象ブロックのビット列に含まれる1の値の数から、処理対象ブロックの第1の重みを決定し、
前記処理対象ブロックを第2のブロック長の小ブロックに分割し、小ブロック毎の重みと値とに基づき、前記第1のブロック長と前記第1の重みとを有する所定のビット列を所定の順序で配列した集合における前記処理対象ブロックの第1の順序を決定し、
前記処理対象ブロックのビット列を、前記決定された第1の重みと第1の順序との値に変換してブロック符号化データを生成する動作を実行させる。
【0010】
上記課題を解決するための発明の実施形態の一つに対応するブロック復号化装置は、
1以上のプロセッサと、
プログラムを記憶した1以上のメモリと、
を備え、
前記プログラムは、前記1以上のプロセッサにより実行された場合に、前記1以上のプロセッサに、第1の重みを有する第1のブロック長の処理対象ブロックのビット列をブロック符号化して生成されたブロック符号化データから前記処理対象ブロックのビット列を復号する動作を実行させ、
前記ブロック符号化データは、前記第1の重みと、前記第1のブロック長と前記第1の重みとを有する所定のビット列を所定の順序で配列した集合における前記処理対象ブロックの第1の順序とを含み、
前記復号する動作には、
前記処理対象ブロックを第2のブロック長の小ブロックで分割した場合の、前記処理対象ブロックの最上位ビットを含む第1の小ブロックが有する第2の重みを決定し、
前記集合において、ビット列の第1の小ブロックにつき前記第2の重みよりも小さい重みを有し、かつ、前記所定の順序において前記処理対象ブロックよりも前に位置するビット列の第1の数を決定し、
前記集合において、前記第1の順序と前記第1の数との差分に基づき、前記処理対象ブロックの前記第1の小ブロックが有するビット列と、前記処理対象ブロックの前記第1の小ブロックと重みが同じで値の異なる第1の小ブロックを有するビット列の第2の数とを決定し、
前記第1の重みと前記第2の重みとの差分と、前記集合において、前記第1の順序と前記第1の数及び前記第2の数との差分とに基づいて、前記処理対象ブロックの第2の小ブロックが有するビット列を決定する動作が含まれる。
【発明の効果】
【0011】
本発明によれば、高速で省領域な符号化法と復号化法を与え、密なビット列に対しても高速に動作するRRR 実装を提供することができる。これにより、主記憶内に収容するデータ量を増やして速度低下を防止し、データ処理の高速化を実現することができる。
【図面の簡単な説明】
【0012】
図1】発明の実施形態に対応する、システム全体の構成例を示す図。
図2A】発明の実施形態に対応する、クライアント101のハードウェア構成の一例を示すブロック図。
図2B】発明の実施形態に対応する、サーバ103のハードウェア構成の一例を示すブロック図。
図3】発明の実施形態に対応する、サーバ103の機能構成の一例を示すブロック図。
図4A】発明の実施形態に対応する、圧縮データ構造を適用可能な木構造で表現される情報を説明するための図。
図4B】発明の実施形態に対応する、圧縮データ構造を適用可能な木構造で表現される情報を説明するための図。
図4C】発明の実施形態に対応する、圧縮データ構造を適用可能な木構造で表現される情報を説明するための図。
図5】発明の実施形態に対応する、ブロック符号化処理の一例を示すフローチャート。
図6】発明の実施形態に対応する、ブロック符号化処理の対象のビット列の配列順序を説明するための図。
図7】発明の実施形態に対応する、ブロック符号化処理及びブロック復号化処理において参照する各テーブルを説明するための図。
図8】発明の実施形態に対応する、順序OD(X)の決定処理の一例を示すフローチャート。
図9】発明の実施形態に対応する、ブロック復号化処理の一例を示すフローチャート。
【発明を実施するための形態】
【0013】
以下、図面を用いて、本願発明に係る実施形態について説明する。なお、以下に示す実施形態は一例であり、これに限定するものではない。そのため、本願発明の特徴的構成を適用できれば他の構成であってもよい。説明する構成要素のうち同一機能を有するものには同じ符号を付し、その説明を省略する。以下では主に、XMLなどの半構造テキストフォーマットのデータとそのインデックスを配信し、受信側でそのデータを処理するシステムを説明する。
【0014】
<システム構成>
図1は、本実施形態に対応する情報処理システムの全体構成を示すブロック図である。当該情報処理システムは、ユーザ端末であるクライアント101a、101b、101c(以下、これらを総称して「クライアント101」という。)及びサーバ103がインターネット102に接続され相互通信が可能に構成されている。サーバ103には、データベース104が接続されている。
【0015】
クライアント101は、ユーザが操作するユーザ端末、或いは、情報処理装置である。クライアント101は、ユーザ操作に応じてサーバ103が提供するサイトにアクセス可能である。クライアント101はサイト情報(ウェブページ情報)をサーバ103に要求する(「アクセス要求」ともいう)ことができる。当該要求に応じてサーバ103から送信されたサイト情報を受信すると、クライアント101は受信したサイト情報をディスプレイに表示する。
【0016】
クライアント101は、例えば、ノートパソコン、デスクトップパソコン、携帯情報端末、携帯電話、スマートフォン、タブレット端末等を含む。クライアント101には、所謂インターネット・ブラウザのソフトウェア(プラグインでストリーミング・コンテンツを再生可能)がインストールされているものとする。
【0017】
クライアント101は、無線LAN、LTE等の無線データ通信手段によってインターネット102に接続されている。尚、イーサネット(登録商標)等のネットワークケーブルを含むLANにより、ネットワーク102へアクセス可能に更に構成されていてもよい。インターネット102は、世界中のネットワークが互いに接続されたネットワークであるが、例えば、イントラネットのように特定の組織内においてのみ接続可能なネットワークであってもよい。
【0018】
サーバ103はオンラインショッピングサイトのようなポータルサイトでXMLファイルを提供する情報処理装置であってもよい。クライアント101のユーザは当該ポータルサイトの登録ユーザであってもよい(以下、登録ユーザのことを単にユーザともいう。)。サーバ103は、各種サイト情報が登録されたデータベース104を管理し、クライアント101からのアクセスを受け付ける。
【0019】
データベース104は、それぞれ所定のデータベース・ソフトウェアがインストールされた情報処理装置であり、各種データの管理を行う。データベース104は、所定のウェブサイトをインターネット102に公開するための文書ファイルの情報を管理する。文書ファイルには、HTMLファイル、PDFファイルの他、特定アプリケーションで利用されるファイル(例えば、MSワードなど)が含まれる。データベース104は、随時更新され最新の情報が格納される。
【0020】
尚、本明細書では、便宜上、サーバ103及びデータベース104は、それぞれ物理的に独立した情報処理装置によって実現されるものとして説明するが、本発明の実施形態はこれに限られるものではない。例えば、これらが単一の情報処理装置によって実現されてもよい。その一方で、認証サーバ103等の各装置が複数台の情報処理装置により冗長構成、或いは分散構成されても良い。また、データベース104は、サーバ103とLAN等によって接続されているものとして説明するが、例えば、インターネット102や非図示のイントラネット経由でサーバ103と通信可能な形態をとってもよい。
【0021】
<装置のハードウェア構成>
次に、本実施形態に対応する情報処理システムを構成する各装置のハードウェア構成について説明する。図2Aは、クライアント101のハードウェア構成の一例を示すブロック図である。上述した情報処理装置としての、データベース104も、同様或いは同等のハードウェア構成として構成しても良い。
【0022】
図2Bは、発明の実施形態に対応する情報処理装置としてのサーバ103のハードウェア構成の一例を示すブロック図である。CPU、ROM、RAM、外部記憶ドライブ、メディア、HD、指示入力装置、出力装置、I/F、システムバスの機能及び用途、更には、これらの関係は、図2Aを用いて説明するものと同様或いは同等である。図2Bでは、データベース210がシステムバス209Bに接続されていることに留意する。ここで、データベース210は、データベース104に相当する。以下、図2A及び図2Bの各構成要素についてまとめて説明する。
【0023】
図2A及び図2Bにおいて、CPU200A(200B)は、ハードディスク装置(以下、HDと呼ぶ)205A(205B)に格納されているアプリケーションプログラム、オペレーティングシステム(OS)や制御プログラム等を実行し、RAM202A(202B)にプログラムの実行に必要な情報、ファイル等を一時的に格納する制御を行う。CPU200A(200B)は、単一のプロセッサであっても良いし、複数のプロセッサから構成されても良い。サーバ103から受信し、RAM202Aに記憶されたサイト情報(XMLファイル)を展開し、出力装置207Aのディスプレイに表示可能な形式のデータに変換する。さらには、インターフェイス208A(208B)を介した外部装置とのデータ送受信を制御するとともに、外部装置から受信したデータの分析・処理を実行し、また外部装置へ送信するデータ(処理要求やデータ要求を含む)の生成を行う。なお、後述する図3から図8を参照して説明する処理もCPU200A(200B)が対応する処理プログラムを実行することにより装置全体を制御して実現される。
【0024】
ROM201A(201B)は、内部に基本I/Oプログラム、種々のアプリケーションプログラム等の各種データを記憶する。RAM202A(202B)は各種データを一時記憶し、CPU200A(200B)の主メモリ、ワークエリア等として機能する。
【0025】
外部記憶ドライブ203A(203B)は、記録媒体へのアクセスを実現するための外部記憶ドライブであり、メディア(記録媒体)204A(204B)に記憶されたプログラム等を本コンピュータシステムにロードすることができる。尚、メディア204A(204B)は、例えば、フロッピー(登録商標)ディスク(FD)、CD−ROM、CD−R、CD−RW、PCカード、DVD、Blu−ray(登録商標)、ICメモリカード、MO、メモリスティック等を利用することができる。
【0026】
外部記憶装置205A(205B)は、本実施形態では大容量メモリとして機能するHD(ハードディスク)を用いている。HD205A(205B)には、アプリケーションプログラム、OS、制御プログラム、関連プログラム等が格納される。なお、ハードディスクの代わりに、フラッシュ(登録商標)メモリ等の不揮発性記憶装置を用いても良い。
【0027】
指示入力装置206A(206B)は、キーボードやポインティングデバイス(マウス等)、タッチパネル等がこれに相当する。指示入力装置206A(206B)を用いて、ユーザは、クライアント101に対して、装置を制御するコマンド等を入力指示する。出力装置207A(207B)は、指示入力装置206A(206B)から入力したコマンドや、それに対するクライアント101やサーバ103の応答出力等を出力する。出力装置207A(207B)にはディスプレイ、スピーカ、ヘッドフォン端子等が含まれる。システムバス209A(209B)は、情報処理装置内のデータの流れを司る。
【0028】
インターフェイス(以下、I/Fという)208A(208B)は、外部装置とのデータのやり取りを仲介する役割を果たす。例えば、クライアント101にとって、外部装置はサーバ103等であり、サーバ103にとって、外部装置はクライアント101等となる。具体的に、I/F208A(208B)は、無線通信モジュールを含むことができ、当該モジュールはアンテナシステム、RF送受信器、1つ以上の増幅器、同調器、1つ以上の発振器、デジタル信号プロセッサ、CODECチップセット、加入者識別モジュールカード、メモリなどを含む、周知の回路機構を含むことができる。また、有線接続のための有線通信モジュールを含むことができる。有線通信モジュールは1つ以上の外部ポートを介して他のデバイスとの通信を可能とする。また、データを処理する様々なソフトウェアコンポーネントを含むことができる。外部ポートは、イーサーネット、USBやIEEE1394等を介して、直接的に、又はネットワークを介して間接的に他のデバイスと結合する。尚、以上の各装置と同等の機能を実現するソフトウェアにより、ハードウェア装置の代替として構成することもできる。
【0029】
本実施形態に対応する処理を実行するために対応するプログラムを動作させる度に、既にプログラムがインストールされているHD205A(205B)からRAM202A(202B)にロードするようにしてもよい。また、本実施形態に係るプログラムをROM201A(201B)に記録しておき、これをメモリマップの一部をなすように構成し、直接CPU200A(200B)で実行することも可能である。さらに、メディア204A(204B)から対応プログラム及び関連データを直接RAM202A(202B)にロードして実行させることもできる。
【0030】
図3は、本実施形態に係るサーバ103の機能ブロック図である。ここに示す各ブロックは、サーバ103が備えるROM201A、RAM202B、HD205Bに保持された所定のプログラムがサーバ103のCPU200Bにより実行されることで実現される各種の制御及び処理機能を表している。
【0031】
ブロック符号化部301は、入力ビット列をブロック長nのビット列からなるブロックに分割し、各ブロックを重みwと順序Oとの値に変換するブロック符号化処理を行う。ブロック符号化データはRAM202Bのワークエリアに格納される。ブロック符号化処理の詳細は図5から図7を参照して後述する。
【0032】
ブロック復号化部302は、ブロック符号化部301におけるブロック符号化処理により得られ、RAM202Bのワークエリアに格納されているブロック符号化データを復号し、元のビット列を復元するブロック復号化処理を行う。ブロック復号化処理の詳細は図7から図8を参照して後述する。
【0033】
テーブル生成部303は、ブロック符号化部301及びブロック復号化部302において実行されるブロック符号化処理及びブロック復号化処理において参照されるテーブルの情報を生成する。テーブル情報の生成については図5を参照して後述する。
【0034】
テーブル保持部304は、ブロック符号化部301及びブロック復号化部302において実行されるブロック符号化処理及びブロック復号化処理において参照されるテーブルの情報を保持する。テーブル情報及びその利用方法の詳細については図5から図8を参照して後述する。
【0035】
次に発明の実施形態に対応する圧縮データ構造を適用可能な木構造で表現される情報について説明する。図4Aから図4CはXMLやJSON等の木構造で表現されるデータの一例を示す図である。図4Aは、半構造テキストデータの一例を示す図である。図4Aに示す半構造テキストデータは、JSON形式のデータを例示している。半構造テキストデータは、一般的に複数のノードを含む木構造と対応することが知られている。半構造テキストデータでは、複数のノードのそれぞれは半構造テキストデータのうちそれぞれの始点から終点までの文字列により表される。例えば、この始点や終点がシンボル(図4Aの例ではそれぞれ「{」と「}」)により表されてもよいし、ほかの何らかの構文上の規則によって始点と終点が示されていてもよい。また、あるノードの文字列の中に、そのノードの子ノードの文字列が入れ子構造で含まれていてもよい。また子ノードの文字列に孫ノードなどのさらに下位のノードの文字列が含まれていてもよい。図4Aにおける丸付き数字および破線は半構造テキストデータを説明するための符号および線であり、丸付き数字は破線を介して接続される括弧の位置に対応するノードの番号を示している。
【0036】
図4B図4Aの半構造テキストデータに対応する木構造を示す図である。番号0のノードは最上位のノードであり、その子ノードは番号1および4のノードである。また番号1のノードの子ノードは番号2であり、番号2の子ノードは番号3のノードである。番号4のノードの子ノードは番号5および6のノードであり、番号6の子ノードは番号7のノードである。
【0037】
図4C図4Bに示した木構造を括弧木表現(BP表現)及びビット列として示したテーブルである。このビット列は本実施形態における処理対象のデータであり、ノード位置、ビット位置、BP表現はそのビット列を説明するためのものである。
【0038】
図4Cに示すビット列は、XMLやJSON等の木構造で表現されるテキストデータに基づいて生成することができる。BP表現の行の「(」「)」(以下では単に「括弧」と記載した場合、この括弧木表現の括弧を示す)はそれぞれテキストデータの各ノードの始点と終点を示す。したがって、ビット列の「1」「0」はそれぞれ対応するノードの始点、終点を表す。なお図4Cではビット位置は0から始まる番号としている。一方、本実施形態では入力ビット列を固定長nの処理対象ブロックに分割するが、図4Cでは1ブロックを8ビットとし、ブロック番号は0から始まる番号としている。1ブロックに含まれるビット数は8以外の2のべき乗の数であってもよいし、それ以外の任意の数であっても良い。以下では、ブロックのビット数のことをブロック長と呼ぶ。
【0039】
図4CのBP表現における開き括弧とその開き括弧に対応する閉じ括弧とはノードを示している。図4Cのノード位置はそのビット位置を始点とするするノードの番号を示し、このノード位置は図4Bの木構造のノード番号に対応する。ここで、図4Cに示すビット列では左から右にビット位置が大きくなっているが、RAMやCPUのレジスタに格納される物理的なブロックのデータでは、ビット位置の番号が大きくなるにつれてRAMやレジスタの上位の桁のビットに順に配置されるようにビットが配置されている。図4Cに示すビット列では、右になるほどRAMやレジスタの上位の桁に格納される。
【0040】
<ブロック符号化処理>
以下、本実施形態に対応するバイナリデータのブロック符号化処理について説明する。ブロック符号化処理は、本実施形態においてはブロック長nの任意のビット列で構成される処理対象ブロックXを、当該ブロックXに含まれる重みwと、処理対象ブロックの順序ODとの値に変換する処理を言う。数式では以下のように表現する。
ENCODE(X)= (w, OD) (式1)
ここで、重みとはビット列内に含まれる「1」の個数をいう。また、順序とは重みw、ブロック長nのビット列の集合(BITS(n、w))において処理対象ブロックXが位置する順番を示す値をいう。
【0041】
図5は、ブロック符号化処理の一例を示すフローチャートである。当該フローチャートに対応する処理は、ブロック符号化部301、テーブル生成部303及びテーブル保持部304により実行される。
【0042】
まず、S501では、テーブル生成部303が処理対象ブロックのブロック長n、処理対象ブロックを構成する各小ブロックのブロック長k、及び処理対象ブロックの重みwを設定する。本実施形態では、ブロック長nの処理対象ブロックは、ブロック長kの小ブロックにより等分される。重みwは、ブロック長nのバイナリデータの全体についての重みであって、小ブロック毎の重みは限定しない。重みwの範囲は0≦w≦nとなる。例えば重みwが2の場合、処理対象ブロック内には「1」が2個含まれることになる。
【0043】
次に、S502では、テーブル生成部303がS501で決定されたブロック長n、重みwのバイナリデータにつき、存在し得るビット列の集合BITS(n,w)を決定する。このときBITS(n,w)に含まれるビット列の個数をIとする。Iは以下の式により求めることができる。
I=C(n、w) (式2)
ここで、C(n、w)は、n個の中からw個を選択する組み合わせを表す。
【0044】
続くS503では、テーブル生成部303がS502で決定したBITS(n,w)におけるバイナリデータの順序OD(Yi)を決定する。ここで、Yiは、BITS(n,w)に含まれる任意のビット列を示し、iは0以上I未満の整数で表される(0≦i<I)。このとき同時に0≦OD(Yi)<Iも成立する。次にS504では、テーブル生成部303が、S503で決定された順序のBITS(n,w)ビット列について、ブロック符号化処理において参照すべきテーブルを作成し、テーブル保持部304に保持する。
【0045】
次に、S505では、ブロック符号化部301が入力ビット列をS501で設定されたブロック長nのブロックに分割し処理対象ブロックXを生成する。続くS506では、ブロック符号化部301が処理対象ブロックXをブロック長kの小ブロックに分割する。
【0046】
続くS507では、ブロック符号化部301が、処理対象ブロックXのビット列に含まれる「1」の数に基づき重みwを決定する。続くS508では、ブロック符号化部301が、テーブル保持部304が保持するテーブルを参照して処理対象ブロックXの順序OD(X)を決定する。OD(X)は、S503で決定されたBITS(n,w)におけるバイナリデータの順序OD(Yi)のうち、X=Yiとなる順序OD(Yi)を特定すればよい。またXの順序OD(X)は、OD(X)>OD(Yi)を満たすBITS(n、w)内のYi個数に相当する。S509では、ブロック符号化部301がOD(X)と重みwに基づき、処理対象ブロックXのブロック符号化結果(ENCODE(X)=(w、OD))を出力する。
【0047】
上記ステップのうちS501からS504までの処理は、入力ビット列が入力される以前に想定されるn、k、wの任意の組み合わせについて予め実行されていてもよい。
【0048】
以下、図5のフローチャートに従ったブロック符号化処理の具体例につき、図6及び図7を参照して説明する。図6は、ブロック符号化処理の対象となるビット列の配列順序を説明するための図であり、図7は、ブロック符号化処理及びブロック復号化処理において参照する各テーブルを説明するための図である。
【0049】
まず、S501における処理につき、以下の具体例ではブロック長n=6、小ブロックのブロック長k=3、重みw=2とする。なお、これらの数値はあくまで例示のために用いるものであって、より大きな値を用いても良い。
【0050】
S502における処理につき、ブロック長nを6とした場合に存在し得るビット列YiのパターンBITS(6,2)は図6の左表601に示すとおりである。6ビットの処理対象ブロックに「1」が2個含まれるようなビット列の個数Iは、I=C(6,2)=15となる。ビット列Yiは、YからY14までが存在し、図6の左表601では「1」が最下位ビット側から存在する順序でデータを昇順で示している。当該順序はビット列Yiの大きさ順に相当する。表の左脇に示す0から14までの数字は、表に示す各バイナリデータに対して割り当てられる順序を示している。ここでは、「1」の位置は6ビットのブロック全体について判定されている。
【0051】
これに対し、本実施形態では、S503における処理にて15個のビット列Yiの並びをブロック長k=3の小ブロック(Yi−0、Yi−1)毎の値に基づいて入れ替え、順序OD(Yi)を決定する。図6の右表602はブロックの順序を入れ替えた結果を示している。ここでは0番目から8番目までの順序は不変であるが、9から12番目の順序が入れ替わっている。右表602では処理対象ブロックの順序は、最上位ビット側から小ブロック単位のビットが有する重み及び値に基づき昇順で決定されている。ここでは重みwに基づく順序はw=0、1、2の順となる。また、値に基づく順序は例えば重み1ならば「001」、「010」、「100」であり、重み2であれば「011」、「101」、「110」となる。図6の例では、「000」という重み0のグループと、「001」、「010」及び「100」という重み1のグループと、「011」、「101」、「110」という重み2のグループとが生成されるので、これらの順に順序が決定される。
【0052】
図6では、処理対象ブロックのブロック長nが6ビットの場合を示したが、上述の順序決定方法は、ブロック長n、小ブロック長k、重みwが変った場合も同様に適用可能である。例えば、ブロック長nがより長くなった場合であっても、最上位ビット側に位置する小ブロックから順に重みが小さく、値の小さい順序で昇順に配列される。
【0053】
続くS504では、S503で決定された順序のビット列について、ブロック符号化処理にて参照されるテーブルをテーブル生成部303が生成する。テーブル生成部303は図7に示すような5種類のテーブルを生成することができる。
【0054】
図7に示す第1のテーブル(T1)701は、最上位ビット側の小ブロックYi−0につき、より小さい重みを有するYiの個数をブロックYi−0の重みwごとに登録する。まず、重み0よりも小さい重みはないため、T1の先頭のエントリの値は0となる。次に重み1より小さい重み0を有するビット列Yiは3個あるため、重み1のためのT1のエントリの値は3となる。同様に重み2より小さい重み0及び重み1を有するビット列Yiは12個あるため、重み2のためのT1のエントリの値は12となる。また、図7の例では重み3は存在しないので値として無効であるが、仮に重み3が存在する場合には、対応する値が登録される。
【0055】
図7では、ブロック長n=6、小ブロック長k=3の場合について記載したが、これよりも長いブロック長についてT1を生成する場合は、最上位ビット側からn/k−1個分の小ブロックのそれぞれについて、より小さい重みを有するYiの個数を重みwごとに登録する。各値は以下の式より求めることができる。
T1[x][y][z] = Σv in [0..z] C(k,v) × C(k×x, y-v)、x in [0..n/k)、y in [0..w]、z in [0..k] (式3)
【0056】
次に、第2のテーブル(T2)702は、重みwの値に基づく小ブロック(小ブロック長k)内での組み合わせ数を登録する。ここでは、重みw=2であるので、小ブロック内に存在し得る「1」の数は、「0」、「1」、「2」のいずれかである。また、小ブロック長k=3である。これに基づきT2の先頭のエントリはC(3,0)であり、小ブロックを構成する3ビットのブロックにおいて「1」が存在しないことを示す。このような組み合わせの数は「000」の1通りしか存在しないので、登録される値は「C(3,0)=1」となる。次に、小ブロックを構成する3ビットのブロックにおいて「1」が1つ存在する場合、「001」、「010」、「100」の3通りがあるので、登録される値は「C(3,1)=3」となる。同様に、小ブロックを構成する3ビットのブロックにおいて「1」が2つ存在する場合、「011」、「101」、「110」の3通りがあるので「C(3,2)=3」となる。
【0057】
また、発明の実施形態はこの例に限定されることなく、T2には、ブロック長n、小ブロック長k及び重みwの大きさに合わせた値が登録される。各値は以下の式より求めることができる。
C(k×x、y)(x in [0..n/k]、y in [0..w]) (式4)
【0058】
次に第3のテーブル(T3)703は、小ブロック長kについて、重みによって異なるビットパターンに割り当てられる順序の値を登録する。T3に登録される同一重みにおける順序としてビット列Xの順序をODsw(X)で表す。ここではk=3の場合を説明するが、例えば、重み0と重み3の場合は「000」、「111」しか存在しないため値を登録する必要はない、或いはODsw(000)=0、ODsw(111)=0を登録しておく。また、重み1及び重み2の場合は3ビットのブロック内で「1」を取り得る位置に応じてビットパターンが異なる。重み1の場合「001」、「010」、「100」の3パターンが存在し、重み2の場合「011」、「101」、「110」の3パターンがやはり存在する。これらはその順序で「0」、「1」、「2」の値が割り当てられる。例えば、ODsw(001)=0、ODsw(010)=1、ODsw(100)=2となる。また、ODsw(011)=0、ODsw(101)=1、ODsw(110)=2となる。
【0059】
この順序ODsw(X)の値は、当該順序が割り当てられたビット列の小ブロックよりも前に存在し、かつ、重みが同じ小ブロックの数を示している。例えば、「001」に割り当てられる順序は「0」であるが、これは「001」の小ブロックの前には同一重みの小ブロックが存在しないことを意味する。また、「100」に割り当てられる順序は「2」であるが、これは「100」の小ブロックの前には同一重みの小ブロックが2つ(「001」と「0101」のこと)存在することを意味する。また、発明の実施形態はこの例に限定されることなく、T3には、小ブロック長k及び重みwの大きさに合わせた値が登録され、同一の重みの場合、順序は値の大きさに基づき昇順で決定される。
【0060】
次に第4のテーブルT4(704)は、小ブロック長kのビット列につき、同一重み内で与えられる順位と重みの値との組み合わせに対応するビット列を登録する。図7ではk=3のビット列Xについての組み合わせに対応するビット列と、その登録順序が関連づけて登録されており、本実施形態ではこのビット列をBITsk=3(w、ODsw)で表すこととする。この場合、重みwは0から3の値を取ることができ、存在し得るビット列のパターンは8通りである。各ビット列は、重みの値(0から3)と、同一重み内で割り当てられた順序ODsw(0から2)とで一意に特定可能となっている。例えば、重み0の場合、BITsk=3(0、0)=000となる。また、重み1の場合、取り得るビット列は「001」、「010」、「100」のいずれかとなるが、このうちから1つのビット列を順序の値に基づいて特定する。例えば順序ODsw=1の場合、BITsk=3(1、1)=010となる。ここで同一重みごとにビット列Xに与えられる順序ODswは、テーブルT3と同様にビット列の値の大きさの順になる。
【0061】
また、図7には示していないが、重みwの値に基づき同一重みで順序ODswが先頭のビット列をテーブルT4内で特定するためのテーブルT4における登録順序を示す値が、テーブルT4に予め登録されているか、又はテーブル保持部304により保持されていても良い。当該値は、BITsk=3(w、ODsw)につきOD=Σ(3,w−1)で求めることができる(但し、w=0の場合は0)。例えば、k=3の場合、取り得る重みは0から3であるので、重み0の場合は、ODw=0=0、重み1の場合ODw=1=C(3、0)=1、重み2の場合ODw=2=C(3、0)+C(3、1)=4、重み3の場合ODw=3=C(3、0)+C(3、1)+C(3、2)=7となる。このうち、重みwが2の場合はODw=2=4だから、テーブルT4の登録順序が「4」の位置から重み2に対応するビット列が登録されていることが分かる。図7では、登録順序が4から6の「011」から「110」までが重み2に対応する。そして、当該同一重みにおける先頭エントリ「011」から順序ODswの値に従ってビット列を特定することができる。例えば、順序ODsw=2であれば、先頭から2番目のエントリ(110)が特定すべきビット列となる。
【0062】
以上をまとめると、例えば(w、ODsw)=(2、1)の場合、テーブルT4の登録順序をODw=2+ODsw=4+1=5と求めることで、BITsk=3(2、1)=101を選択することができる。
【0063】
次に、第5のテーブルT5(705)は、小ブロック長kのビット列が有する重みの値を登録する。図7ではk=3のビット列Xについて示しており、本実施形態では順序をWk=3(X)で表すとする。例えば、重み0のビット列「000」はWk=3(000)=0であり、重み2のビット列「101」はWk=3(101)=2となる。このようにして生成したテーブルT1からT5は、テーブル保持部304が保持する。
【0064】
次に、ブロック符号化部301が処理対象ブロックXのBITS(6,2)における順序OD(X)を決定するS508における処理を、まず概念的に説明する。具体的に、ブロック符号化部301は、BITS(6,2)においてS503で決定した順序で処理対象ブロックXよりも前に位置するビット列Yiの個数を計算する。このとき、処理対象ブロックXを構成する小ブロックをX及びXで表し、BITS(6,2)に含まれる処理対象ブロックX以外の任意のビット列Yiの小ブロックをYi-0とYi-1とで表すこととする。
【0065】
まず、小ブロックXでOD(X)>OD(Yi―0)を満たすYiの個数を計算する。例えば図6右表602に示されるビット列のうち、処理対象ブロックXを順序「12」の「011000」とすると、Xは「011」であり、図6右表の例でOD(X)>OD(Yi−0)を満たすYiの個数は12個になる。そして、X=Yi−0を満たす他のYiは存在しないため「12」がそのまま処理対象ブロックXの順序となる。
【0066】
また、処理対象ブロックXを順序「10」の「100010」とすると、Xは「100」であり、図6右表602の例でOD(X)>OD(Yi−0)を満たすYiの個数は9個になる。そして、X=Yi−0を満たすYは3つ存在し、そのうちOD(X)>OD(Yi−1)を満たすYiの個数を求めるとYiの個数は1であるから、9+1により、BITS(6,2)において処理対象ブロックXよりも小さいビット列Yiの個数は10となる。よって、ブロック符号化部301は処理対象ブロックXの順序OD(X)を「10」と求めることができる。
【0067】
このように、本実施形態における処理対象ブロックXの順序OD(X)は、最上位ビット側から小ブロック毎に重み、及び値の順で決定される。次に、上記の概念に基づいて実行される、図7の5つのテーブルT1からT5のいずれかを参照したS508における順序OD(X)の決定処理の一例を図8のフローチャートを参照して更に説明する。
【0068】
以下では、順序「10」が割り当てられたY10=100010を処理対象ブロックXとして処理する場合を説明する。まず、S801では、ブロック符号化部301は処理対象ブロックXの各小ブロックの位置を表すパラメータhを0に初期化する。hは、0≦h<n/k-1の範囲を取る整数値である。図6のビット列602の例では、hは0、1の値をとる。また、S507で決定した処理対象ブロックXの重みwの値で、パラメータw'を初期化する。図6の例では、重みw=2であるから、パラメータw'は2に初期化される。
【0069】
次にS802にて、ブロック符号化部301は小ブロックXの値から重みwを算出する。ここでX=Y10−0は「100」であるから重みw=1となる。このとき図7のテーブルT5を参照しても良い。続くS803では、重みwが0であるか否かを判定する。もし、重みwが0の場合(S803で「YES」)、S804に移行してhを1つ更新して次の小ブロックついてS802の処理を行う。一方、重みwが0でなかった場合(S803で「NO」)、S805に移行する。図6の例では、w=1で、0ではないからS805に移行する。
【0070】
S805では、パラメータw'の値をw'−wの値で更新する。これにより処理対象ブロックXに対して割り当てられた重みの値が、各小ブロックが有する重みにより減算されていく。図6の例では、2−1=1でw'の値が1に更新される。続くS806では、w'が0と一致するか否かを判定する。もし、w'が0と一致する場合(S806で「YES」)、S814に移行する。S814では、テーブルT3より重みwと同一重みを有する値の内でXの順序OD(X)を決定し、S815に移行する。一方、w'が0と一致しない場合(S806で「NO」)、S807に移行する。図6では、w'=1で0ではないから、S807に移行する。
【0071】
S807では、ブロック符号化部301が、小ブロックXが有する重みwよりも小さい重みの小ブロックYi−hを有するYの数(N)を、テーブルT1から取得する。ここでテーブルT1は、小ブロックの位置h毎に用意されているものとし(0≦h<n/k-1)、図7のテーブル701はh=0の場合を示している。但し、図7では添え字hを省略している。図6のビット列602の例では、X=Y10−0は重みw=1であり、重み1よりも小さい重み、即ち重み0を有するビット列Yiの個数として、h=0のテーブルT1から「3」を得る。続くS808では、小ブロックXの値と、重みwとに基づき、テーブルT3より、同一重み内でのXの順序ODsw(X)を決定する。図6の例では、「100」の順序ODsw(100)=2と分かる。その後S809にて、重みがwで処理対象ブロックの順序OD(X)よりも小さい順序OD(Yi)であるYiの数(N')を以下の式で算出する。
'=ODsw(X)×C(k(n/k―h―1)、w') (式5)
【0072】
図6の例では、ODsw(100)=2、k(n/k−h−1)=3(6/3−0−1)=3、w'=1であるから、N'=2×C(3、1)=2×3=6となる。なお、C(k(n/k―h―1)、w')の値は、テーブルT2に予め登録されている値を用いることができる。
この計算により図6の例では、Y10−0=「100」より前に存在する重み1でYi−0が「001」、「010」であるビット列Yiの個数が判明した。
【0073】
次に、S810で小ブロックXの順序OD(X)を以下の式に基づき算出する。
OD(X)=N+N' (式6)
図6の例では、N=3、N'=6であったから、OD0(X0)=9と求めることができる。続くS811ではhを1つ更新し、次のS812にて次の小ブロックが処理対象ブロックにおける未処理の最後の小ブロックであるか否かを判定する。最後の小ブロックで無かった場合(S812で「NO」)、S802に戻って以上の処理を繰り返す。最後の小ブロックであった場合(S812で「YES」)、S813に移行する。図6の例では、h=1となり、最後の小ブロックとなるので、S813に移行する。
【0074】
S813では、S805で計算された最新の重みw'の値に基づき、テーブルT3より、同一重み内でXの順序OD(X)を決定しS815に移行する。図6の例では、ビット列「010」の小ブロックXの順序OD(010)は、テーブルT3より「1」と特定される。次に、S815では、S810と、S813又はS814とで各小ブロックXについて計算された順序OD(X)を合計して、処理対象ブロックXの順序OD(X)を算出する。図6の例では、OD(X)+OD(X)=9+1=10であるから、処理対象ブロックX(100010)の順序OD(X)=10と求めることができる。ブロック符号化の場合にはこの順序の値の他に重みwの値を付随する。上述の例ではw=2である。よって、S509にてブロック符号化部301は、ENCODE(X)= (2,10)とブロック符号化を行うことができる。
【0075】
なお、ブロック長n及び小ブロック長kは、符号側と復号側との間において既知の値であれば符号化する必要がないが、既知でない場合はそれらの値も同時に符号化される。本実施形態ではn、kの値が既知であるとして説明している。
【0076】
<ブロック復号化処理>
以下、本実施形態に対応するブロック復号化部302による、ブロック符号化データを復号するブロック復号化処理について説明する。ブロック復号化処理は、本実施形態においてはブロック符号化結果の重みwと処理対象ブロックXの順序ODとの値から、元のブロック長nのビット列で構成される処理対象ブロックXを復号する処理をいう。数式では以下のように表現する。
DECODE(w、OD)= X (式7)
【0077】
以下、本実施形態におけるブロック復号化処理の具体例を、図6及び図7を参照しながら図9のフローチャートに基づきより詳細に説明する。当該フローチャートに対応する処理は、ブロック復号化部302、テーブル生成部303及びテーブル保持部304により実行される。
【0078】
まず、S901にて、ブロック復号化部302は小ブロックの位置を表すパラメータhを0に初期化する。hは、0≦h<n/k-1の範囲を取る整数値である。
【0079】
次にS902にて、ブロック復号化部302は小ブロックXの重みwを算出する。ここでの算出式は以下の通りである。
w = MAX{v in [0..k]|T1[n/k-h-1][w][v] ≦ OD} (式8)
【0080】
より具体的に、例えばhを初期化した直後(h=0)であれば、ここでは復号対象の先頭の小ブロックXの重みwを算出する。図6のようにブロック長が6ビット、小ブロック長が3ビットの場合、小ブロックはXとXの2つがあるが、まず、Xの重みw0=weight(X0)を計算する。その場合(式8)の計算式は以下のように示される。
0 = MAX{ j in [0..k] | T1[j] ≦ 10 } = 1 (kは小ブロックのブロック長を表す) (式8−1)
【0081】
図7の例では、テーブルT1に登録されている重みのうち、重み0の場合T1[0]=0、重み1の場合T1[1]=3、重み2の場合P[2]=12で、順序OD(X)=10以下の値を有するのはT1[1]であるから、重みは1と決定される。
【0082】
また、発明の実施形態はこの例に限定されることなく、重みの算出処理は、ブロック長n、小ブロック長k及び重みwの大きさに応じて実行することができる。
【0083】
次に、S903では、算出した重みwが0であるか否かを判定する。重みが0の場合(S903で「YES」)には次の小ブロックを処理対象とすべくS904にてhの値を1つ更新してS902に戻って、再度重みの計算を行う。重みが0でない場合(S903で「NO」)、S905に移行する。
【0084】
S905では小ブロックXの順序OD=OD(X)を計算する。ここでの算出式は以下の通りである。
OD=(OD-T1[n/k-h-1][w][w])/T2[n/k-h-1][w-w] (式9)
【0085】
より具体的に、ここでは小ブロックXは重み1であるから、取り得る値は「001」、「010」、「100」のいずれかであり、このいずれであるかを順序OD(X)に基づき決定する。小ブロックXの順序ODは、復号対象のブロックが有する順序OD(X)=10から重み0のビット列の数(3)を除いた数に含まれる、重み1のビットパターンの組み合わせ数(C(3,1)=3)で求められる。このとき計算結果の小数点以下は切り捨てる。その場合、式9は以下のように示される。
OD= (OD(X)-T1[w])/C(3,1) = (10−3)/3=2 (式9−1)
【0086】
次に、S906では、S902及びS906で算出された重みw、ODとに基づき、小ブロックXのビット列を決定する。S905の計算から、小ブロックXは、重さ1のビット列において順序2のパターンであることが分かっている。よって、図7のテーブルT4との関連で(w、ODsw)=(1、2)につき、テーブルT4の登録順序はODw=1+ODsw=1+2=3と分かるから、テーブルT4からBITsk=3(1、2)=100が選択され、小ブロックXのビットパターンを100と決定することできる。
【0087】
次に、S907にて、次の小ブロックを処理対象とすべくhの値を1つ更新し、S908でhがn/k−1と一致したかどうか、即ち、最下位ビットを含む小ブロックが処理対象となったか否かを判定する。最下位ビットを含む小ブロックが処理対象となった場合(S908で「YES」)はS909に移行し、それ以外の場合(S908で「NO」)はS902に戻って処理を継続する。
【0088】
S909では、それまでの小ブロックに割り当てられた重みをブロック符号化データに含まれるブロックX全体の重みwから減算して重みw(h=n/k−1)を求める。また、それまでの小ブロックに割り当てられた順序をブロック符号化データに含まれるブロックX全体の順序OD(X)から減算して順序OD(h=n/k−1)を求める。
【0089】
例えば図6のビット列602の例では、小ブロックXの重みwを算出する。重みwは、w=w−w=1で算出することができる。また、小ブロックXの順位OD=OD(X)を計算する。小ブロックXも重み1であるから、取り得る値は「001」、「010」、「100」のいずれかであり、このいずれであるかを順序OD(X)に基づき決定する。小ブロックX1の順序ODは、復号対象のブロックが有する順位10から重み0のビット列の数(3)と、順序2よりも前のビットパターン「001」、「010」を有するビット列の数(OD×C(3,1))とを引いた数で求められる。これを式で表すと以下のようになる。
OD1 = (OD-T1[w]-OD×C(3,1)) = 10−3−2×3=1 (式10)
【0090】
よって、重さ1のビットパターンにおいて順序1のパターンであるから、(w、ODsw)=(1、1)につき、テーブルT4の登録順序はODw=1+ODsw=1+1=2と分かるから、テーブルT4からBITsk=3(1、1)=010が選択され、Xのビットパターンを010と決定することできる。
【0091】
以上により、復号結果として得られるブロックX=「100010」と決定することができる。
【0092】
以上により、所定のブロック長n、小ブロック長k、重さwの処理対象ブロックについて、ブロック符号化及びブロック復号化を行うことができる。このような演算はk=lg(n)と設定した場合、n3+o(n3)ビット領域の表を用いて、符号化:O(n/lg(n))時間、復号化:O(n lglg(n)/lg(n))時間 で計算が可能である。具体的に、ブロック長n=64、kを8の場合と16の場合とで長さ228のランダムなビット列につき、1の個数を0.5×228とした密な入力ビット列と、1の個数を0.01×228とした疎な入力ビット列とについて処理した場合、小ブロックに分割しない既存の手法に比べてRANK/SELECT操作について20%程度高速化することができる。これにより、密な入力ビット列に対するクエリ性能の高速化が可能であり、より安定したクエリ性能を提供することができる。
【0093】
[その他の実施形態]
本発明は上記実施の形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。また本発明に係る情報処理装置は、1以上のコンピュータを該情報処理装置として機能させるプログラムによっても実現可能である。該プログラムは、コンピュータが読み取り可能な(非一時的)記録媒体に記録されることにより、あるいは電気通信回線を通じて、提供/配布することができる。
【要約】
RRRの実用的な実装のために、ブロック圧縮に対する効率良い符号化法と復号化法の提供を目的とし、高速で省領域な符号化法と復号化法を与え、密なビット列に対しても高速に動作するRRR 実装を提供する。
ブロック符号化装置は、入力ビット列を第1のブロック長の複数のブロックに分割して処理対象ブロックを生成し、処理対象ブロックのビット列に含まれる1の値の数から処理対象ブロックの第1の重みを決定し、前記処理対象ブロックを第2のブロック長の小ブロックに分割し、小ブロック毎の重みと値とに基づき前記第1のブロック長と前記第1の重みとを有する所定のビット列を所定の順序で配列した集合における前記処理対象ブロックの第1の順序を決定し、前記処理対象ブロックのビット列を、前記決定された第1の重みと第1の順序との値に変換してブロック符号化データを生成する。
図1
図2A
図2B
図3
図4A
図4B
図4C
図5
図6
図7
図8
図9