JP5521064B1 - Id付与装置、方法、及びプログラム - Google Patents

Id付与装置、方法、及びプログラム Download PDF

Info

Publication number
JP5521064B1
JP5521064B1 JP2013009404A JP2013009404A JP5521064B1 JP 5521064 B1 JP5521064 B1 JP 5521064B1 JP 2013009404 A JP2013009404 A JP 2013009404A JP 2013009404 A JP2013009404 A JP 2013009404A JP 5521064 B1 JP5521064 B1 JP 5521064B1
Authority
JP
Japan
Prior art keywords
node
bit
key
byte
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013009404A
Other languages
English (en)
Other versions
JP2014142703A (ja
Inventor
潤 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2013009404A priority Critical patent/JP5521064B1/ja
Application granted granted Critical
Publication of JP5521064B1 publication Critical patent/JP5521064B1/ja
Publication of JP2014142703A publication Critical patent/JP2014142703A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】入力された可変長のキーに対して長さを抑制した固定長のIDを付与する。
【解決手段】ノード追加部34により、入力された可変長のバイト列からなる複数のキーに基づいて、キーの共通する接頭辞部分のバイトを結合して複数のキーを表現するトライ木構造を構築し、フラグ付与部36により、トライ木構造のノードの各々について、ノードがキー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、非負整数値ID付与部38により、ビット配列における、キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、ビット配列におけるビット値の相対インデックス値を入力として、最小完全ハッシュ関数により、固定長の非負整数値を算出し、ノードが末端のバイトの情報を保持するキーに対して、IDとして付与する。
【選択図】図1

Description

本発明は、ID付与装置、方法、プログラムに係り、特に、入力されたキーに対してIDを付与するID付与装置、方法、プログラムに関する。
従来、データベースの基本はリレーショナルデータベースが使われてきた。リレーショナルデータベースでは、理論的な枠組みが存在し、多種多様なデータベースをリレーショナルデータベースという一つの枠組みで表現できるといった汎用性や、比較的自由な表現力とSQLを用いた汎用性の高い検索の仕組みがあるといった利便性の高さがあるため、多くの場面で利用されている。
一方、近年、webデータの急速な増大などの影響で、扱うべきデジタルデータも急速に増大している現状がある。リレーショナルデータベースで扱うデータ量が多くなると、その汎用性のため多少犠牲になっている情報格納容量や検索速度の問題が顕在化し、実用が難しくなるという現象が散見されるようになってきた。
そこで、キーバリューストアと呼ばれる単純にキーと値のペアのみのデータを対象としてコンパクトにデータを保持し、高速に検索できる仕組みが利用される場面が増えてきた。
これは、大量のデータを効率的に処理するために、複雑かつ汎用的なデータベースではなく、データの構造を限定し、データの格納とキーに対する値の検索という必要最小限の機能に特化した形で、より大きな効果を得るための方法論といえる。
実際に考えられるキーと値のペアの簡単な例は図10に示すように、住所と名前の対応を表すデータ、商品名と値段のペアのデータ、web上のURLとそのURLの実際のページが格納されている計算機上のアドレスなどが挙げられる。
図10に示した例のように、キーは基本的に重複しないことを前提とするが、値は重複があってもよい。これら以外にも、計算機上で扱われる多くのデータは簡単化すると、このキーと値のペアの形に落とし込むことができる。
また、可変長バイト列のキー(主に文字列)と非負整数値のペアのデータは、ある可変長キーの情報が計算機内のどこに格納されているか検索する際に多く利用されてきた。これらの可変長キーと非負整数値がペアとなったデータの集合を保持する方法として、これまでに様々なデータの保持の仕方が考案されてきた。可変長キーの容量を圧縮して保存する方法には、トライ木構造に代表される共通接頭辞でまとめて表現する方法が広く使われている。
これにより、一般的に、キーを単純に連結した容量よりも小さく圧縮して同じキー情報を保持することができる。具体的な例として、パトリシア木(非特許文献1)、ダブル配列(非特許文献2)、簡潔木構造(非特許文献3、非特許文献4)などが挙げられる。
Donald R. Morrison. PATRICIA: Practical Algorithm To Retrieve Information Coded in Alphanumeric Journal of the ACM (JACM), Volume 15 Issue 4, Pages 514 - 534, Oct. 1968. 青江順一. ダブル配列による高速ディジタル検索アルゴリズム電気情報通信学会, 論文誌D Vol, J71-D, No. 9, 1988. 定兼邦彦. 単純なRank/Select 辞書電気情報通信学会, 技術報告, 2006. Sadakane, K., R. Grossi. Squeezing succinct data structures into entropy bounds. Proceedings of the seven-teenth annual ACM-SIAM symposium on Discrete algorithm, pp. 1230 - 1239, 2006
しかしながら、上述のように、近年、webデータの急速な増大などの影響で、扱うべきデータも急速に増大している現状がある。データ量が膨大になる場合には、1キーを保持するのに必要なビット数を1bitでも減らすことができれば全体として大きな効果をもたらすことができる。
例えば、キーの数が10億あるとする。この時に1キーあたりを保持するのに必要なビット数を1減らすと、全体として10億bit分の削減となる。つまり、1,000,000,000bit = 1Gbit = 125MB の削減となる。このように、特にデータ量が大きい場面では、キーあたりの削減で大きな効果が得られる。
また、与えられたキーに非負整数値のユニークなIDを付与することを対象とする場合、例えば、各URLにIDを振り、URLを検索キーとしてどこにデータが格納されているか示すIDを引くといった使い方をする場合、URLが30億あるデータを持っているとすると、ユニークなIDを付与するためには、単純な実装では各URLに対して整数の値を割り振るだけで 32bit × 3,000,000,000 / 8 = 12GB もの容量が必要となってしまう。
実際には、これにキーの容量が必要であり、キーの保持はキーの長さに依存するため、全体としてこの倍以上の容量が必要となることが容易に起こる。そうすると、現在の一般的な計算機の主記憶容量が8GBや16GBと考えると、容易にそれを上回ることになってしまう。
また、仮に、主記憶容量が64GBや128GB以上が主流になったとしても、高速な検索を実現するためや、ほかのプロセスに影響を及ぼさないためにも、記憶容量の占有を極力減らしたほうがいいのは自明である。
また、値のデータを可変長で記述して容量を減らすといった処理は可能であるが、値の数が30億もある状況では現実的な処理ではないという問題がある。
本発明では、上記問題点を解決するために成されたものであり、入力された可変長のキーに対して、長さを抑制した固定長のIDを付与することができるID付与装置、方法、及びプログラムを提供することを目的とする。
上記目的を達成するために、本発明の第1のID付与装置は、入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築するノード追加部と、前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成するフラグ付与部と、前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列における前記ビット値の相対インデックス値を入力として、最小完全ハッシュ関数により、固定長の非負整数値を算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する非負整数値ID付与部と、を含んで構成されている。
本発明の第1のID付与方法は、ノード追加部と、フラグ付与部と、非負整数値ID付与部とを含む、ID付与装置におけるID付与方法において、前記ノード追加部により、入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築し、前記フラグ付与部により、前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、前記非負整数値ID付与部により、前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列における前記ビット値の相対インデックス値を入力として、最小完全ハッシュ関数により、固定長の非負整数値を算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する。
第1の発明によれば、入力された可変長のバイトからなる複数のキーに基づいて、トライ木構造を構築し、トライ木のノードの各々について、キー末端のバイトの情報を保持するノードか否かを示すビット値を付与したビット配列を作成する。
そして、ビット配列における、キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、ビット値の相対インデックス値を入力として最小完全ハッシュ関数により、固定長の非負整数値を算出し、ノードが末端のバイトの情報を保持するキーに対してIDとして付与する。
このように、複数のキーを表現するトライ木構造を構築し、キーの末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、ビット配列における、キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、ビット値の相対インデックス値を入力として最小完全ハッシュ関数により、固定長の非負整数値を算出し、ノードが末端のバイトの情報を保持するキーに対してIDとして付与することにより、入力された可変長のキーに対して、長さを抑制した固定長のIDを付与することができる。
本発明の第2のID付与装置は、入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築するノード追加部と、前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成するフラグ付与部と、前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列の先頭から前記ビット値までにおける、前記キーの末端のバイトの情報を保持するノードであることを示すビット値の数をカウントし、カウントされた値を固定長の非負整数値として算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する非負整数値ID付与部と、を含んで構成されている。
本発明の第2のID付与方法は、ノード追加部と、フラグ付与部と、非負整数値ID付与部とを含む、ID付与装置におけるID付与方法において、前記ノード追加部により、入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築し、前記フラグ付与部により、前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、前記非負整数値ID付与部により、前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列の先頭から前記ビット値までにおける、前記キーの末端のバイトの情報を保持するノードであることを示すビット値の数をカウントし、カウントされた値を固定長の非負整数値として算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する。
第2の発明によれば、入力された可変長のバイト列からなる複数のキーに基づいて、トライ木構造を構築し、トライ木のノードの各々について、キー末端のバイトの情報を保持するノードか否かを示すビット値を付与したビット配列を作成する。
そして、ビット配列における、キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、ビット配列の先頭からノードのビット値までにおける、キーの末端のバイトの情報を保持するノードであることを示すビット値の数をカウントし、カウントされた値を固定長の非負整数値として算出し、ノードが末端のバイトの情報を保持するキーに対してIDとして付与することができる。
このように、複数のキーを表現するトライ木構造を構築し、キーの末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、キーの末端のバイトの情報を保持するノードの各々について、ビット配列の先頭からビット値までにおける、キーの末端のバイトの情報を保持するノードであることを示すビット値の数をカウントし、カウントされた値を固定長の非負整数値として算出し、キーに対してIDとして付与することにより、入力された可変長のキーに対して、長さを抑制した固定長のIDを付与することができる。
また、本発明のプログラムは、コンピュータを、請求項1又は請求項2に記載の木構造構築装置を構成する各部として機能させるためのプログラムである。
以上、説明したように、本発明のID付与装置、方法、及びプログラムによれば、入力された可変長のキーに対して、長さを抑制した固定長のIDを付与することができる。
本発明の実施の形態のID付与装置の機能的構成を示すブロック図である。 単語の集合の例を示す図である。 物理メモリ上の配列と相対インデックスの関係の例を示す図である。 各キーを分割する例を示す図である。 各キーの各バイトをトライ木のノードとして追加する例を示す図である。 各キーの末端に相当するノードに値を付与するためのフラグをセットする例を示す図である。 非負整数値IDを付与する例を示す図である。 本発明の第1の実施の形態のID付与装置におけるID付与処理ルーチンの内容を示すフローチャートである。 本発明の第2の実施の形態のID付与装置におけるID付与処理ルーチンの内容を示すフローチャートである。 キーと値のペアで表されるデータの例を示す図である。
以下、発明の原理について詳細に説明する。
本発明では、与えられたキーに非負整数値のユニークなIDを付与することを対象とする。例えば、各URLにIDを振り、URLを検索キーとしてどこにデータが格納されているかを示すIDを引くといった使い方が可能となる。
可変長キーに関しては従来よく用いられるやり方と同様に、トライ木を用いて共通接頭辞を共有して効率的に情報を保持する方法を用いることとする。このとき各キーの末尾にあたるトライ木中の値を保持すべきノードの計算機上の相対アドレスを利用し、各キーに連続した非負整数値のユニークなIDを付与する。
本発明では、トライ木中のノードが値をどの程度保持する必要があるかに応じて2つの処理方法を提案する。一つ目の処理方法は、トライ木中のノードの多くが値を持つような状況の時に有効な処理方法であり、各ノード毎に対応する1bitを付与したbit配列を準備し、そのbit配列から、値を持つノードに対するID(連続した非負整数値)を計算する。
2つ目の処理方法は、逆にトライ木中のノードのほとんどが値を持たないような場合に有効な方法であり、値を持つノードの相対アドレスから完全最小ハッシュを構築し、そのハッシュによって与えられる非負整数値を、値を持つノードのIDとする。
最終的に、ノードに与えられたIDを、ルートからそのノードまで辿ったときに得られるキーに対するIDとする。
以下、図面を参照して本発明の実施の形態を詳細に説明する。本実施の形態では、web上に出現する単語をキーとして、それらに連続したユニークな非負整数値IDを付与し、その情報をなるべく少ない容量で保持し、かつ、高速に検索可能なデータ構造を構築する処理を行う状況を想定する。これは、実際にあるキーワードなどを入力して、その語に結びつく情報を抽出する際などに必要とされる処理であり、様々な情報処理システムで利用される重要度の高い処理である。この場合、単語は可変長バイト列(可変長文字列)で表されるため、キーの長さは可変となる。また、付与したい非負整数値IDとは、単語がn個あったとすると、0からn−1までの非負の連続した整数値のことである。つまり、各単語に0からn−1の中から一つの値を付与する処理に相当する。
また、本実施の形態では、対象とする問題をより明確化、かつ、簡単化するために、値を0以上の連続した整数値に限定する。これは、実際の値の情報は、通常計算機上のメモリやストレージに格納されているので、値の情報そのものではなくて、値が保持されている計算機上の番地を値として代用することで、値の情報の形式に依存せず単一の方法で実現することができる。
<ID付与装置の構成>
本発明の第1の実施の形態に係るID付与装置について説明する。図1に示すように、本発明の第1の実施の形態に係るID付与装置100は、入力部10と、後述するID付与処理ルーチンを実行する演算部20と、出力部50と、を備えている。
入力部10は、キーボードなどの入力装置から、可変長バイト列のキーの集合として、図2に示すような単語の集合を受け付ける。なお、入力部10は、ネットワーク等を介して外部から入力されたものを受け付けるようにしてもよい。
演算部20は、CPU(Central Processing Unit)と、RAM(Random Access Memory)と、後述するID付与処理ルーチンを実行するためのプログラムを記憶したROM(Read Only Memory)とを備えたコンピュータで構成されている。このコンピュータは、機能的には、図1に示すように、トライ木構造構築部30と、非負整数値ID付与部38とを含んだ構成で表すことができる。
トライ木構造構築部30は、入力部10において受け付けた可変長文字列である単語の集合に基づいて、共通する接頭辞部分の文字を結合して単語の集合を表現するトライ木構造(または接尾辞木構造)を構築する。トライ木構造は、各キーで共通する接頭辞部分を結合して情報を保持することができることから、同じ接頭辞を多く含むデータ集合ではより効率的にデータを圧縮できる。このトライ木構造構築部30は、図1に示すように、分割部32と、ノード追加部34と、フラグ付与部36とを含んだ構成で表すことができる。なお、トライ木構造の各ノードが保持する情報は図3に示すように、相対インデックスが付与された物理メモリ上の配列に格納される。
分割部32は、図4に示すように、入力部10において受け付けた単語の集合の各単語を1文字単位にそれぞれ分割する。
ノード追加部34は、図5に示すように、分割部32において分割された各単語の各文字を保持するノードを、トライ木のノードとして順次追加する。このとき、図5に示すように、順次追加する各々のノードに対して、すでに存在するノードが保持する文字列と接頭辞部分が一致する場合はとくに処理をおこなわない。ただし、まだ未出現の文字列を保持する各ノードであれば新規ノードとして追加して、単語に対応する文字列を保持するノードを有するトライ木を作成する。また、トライ木構造の各ノードが保持する文字情報を、相対インデックスが付与された物理メモリ上の配列に格納する。なお、トライ木構造の作成方法は、従来既知の手法と同様であるため、さらに詳細な説明を省略する。
フラグ付与部36は、図6に示すように、ノード追加部34において構築されたトライ木の各単語の末端に相当するノードの各々に値を各々付与するためのフラグをセットする。そのため、フラグ付与部36においては、ノード追加部34において作成されたトライ木の各ノード毎に、各ノードの文字情報が格納されている物理メモリ上の配列の相対インデックスが付与され、かつ、各ノードに対して1bitを割り当てたbit配列を作成する。これは、トライ木中のノード数がmとすると、mbitの長さの配列となる。各ノードへ割り当てられる1bitの位置は、物理メモリ上のノードの文字情報の格納位置の相対位置と同じ位置とする。あるノードが、ある単語の末尾の文字を保持するノードに相当する場合は、その単語に対応する値を付与する必要があるので、bit配列において、値を持つことを意味する1を付与し、何れの単語の末尾の文字を保持しないノードである場合は、値を付与する必要がないので、bit配列において、値を持たないことを意味する0を付与する。キー検索時には、bit配列において、ノードの文字情報の格納位置の相対位置を示す相対インデックスの番号と同一位置のbit位置を見ることで、そのノードが値を持つかどうかを容易に判定することができる。
非負整数値ID付与部38は、図7に示すように、トライ木構造構築部30において構築されたトライ木構造及びbit配列に基づいて、連続した固定長の非負整数値IDを算出し、単語の集合の各単語に対して、連続した固定長の非負整数値IDを付与するように、各単語の末尾の文字を保持するノードの各々に、算出された非負整数値IDを対応づける。
上述のとおり、フラグ付与部36において、各ノード毎に1bitを割り当てたbit配列が作成され、bit配列では、ある単語の末尾の文字を保持するノードに対して1が付与され、そうでないノードに対して0が付与されている。
このbit配列を利用して、ノードに付与する値を決定する。bit値1が付与されたbit配列のbit位置各々について、フラグ付与部36において作成したノードが値を持つか否かを示すbit配列の先頭から、当該bit位置までの範囲で、1が出現した数を数えてその数をそのまま非負整数値IDとして付与する。この計算は、下記(1)式で示すような、簡潔データ構造(succinct data structure)で使われるrank関数の計算と等価である。よって、簡潔データ構造で使われている技術をそのまま利用することができる。
Figure 0005521064

上記(1)式の関数は、インデックス0からi番目までの1の数を数え上げるということを意味する。つまり、インデックスiのbit値が1であることが確定している場合は、rankq=1(i)は、0からn−1までの連続した非負整数値のいずれかの値に必ずなり、重複することはないことが保証できる。ここで、nは単語の集合における単語の数である。つまり、ノードが値を持つかどうかを示すbit配列があれば、同時にそのノードに対する非負整数値IDも表していることになる。
ただし、単純なbit配列だけでは、検索時にrankを効率的に計算するのは難しい。そこで、フラグ付与部36は、実際によく用いられる処理方法として、任意固定長のブロック毎に、1の数を事前に計算しておき値を保持するようにしてもよい。これにより、直近の保持された値とそこからのrank計算で実際にほしいrank計算が可能となり、より高速に計算することができる。
固定長ブロックの長さcに関しては、例えばc=256等とする。この場合、事前に計算した値を保持するのに32bit必要だと仮定すると、前述のようにbit配列のbit数(あるいはノード数)をmとするとm/256×32=m/8bitの容量が必要となる。また、よくある実装方法としては、256bitのブロックを更に32bit毎に分割し、値を計算したものを8bitの容量に記憶する手続きをとる。これにより、最終的には32bitのbit列に対してrank計算をし、それに対象ブロックの値を加算したものを非負整数値IDとして使えば良い。最終的に、2つの事前に計算した値を記憶するのに3m/8bitの追加の容量が必要となる。
出力部50は、トライ木構造構築部30において構築されたトライ木構造及びbit配列と、非負整数値ID付与部38において各単語の末尾のノードに対応付けられた非負整数値IDとを出力する。
出力されたトライ木構造及び非負整数値IDを用いることにより、可変長文字列である単語に対して、固定長の非負整数値IDを付与することができる。具体的には、上記の単語の集合に含まれる1つの単語が入力され、当該単語の各文字に沿って、トライ木構造のノードを辿って、末尾の文字を保持するノードに対応付けられた固定長の非負整数値IDを取得することにより、入力された単語に対して付与された固定長の非負整数値IDを得ることができる。
<ID付与装置の作用>
次に、本発明の第1の実施の形態に係るID付与装置100の作用について説明する。まず、入力部10により、可変長文字列である単語の集合が入力されると、ID付与装置100のROMに記憶されたプログラムを、CPUが実行することにより、図8に示すID付与処理ルーチンが実行される。
次に、ステップS100において、トライ木構造が表現する対象となる単語の集合を受け付ける。
次に、ステップS102において、ステップS100において受け付けた単語の集合の各単語を1文字単位にそれぞれ分割する。
次に、ステップS104において、ステップS102において分割された各単語の各文字を保持するノードを、トライ木のノードとして順次追加し、トライ木構造を構築する。
次に、ステップS106において、ステップS104において構築されたトライ木構造の各ノード毎に1bitを割り振ったbit配列を作成し、ステップS100において受け付けた単語の集合の各単語の末尾の文字を保持するノードに対応するbit配列のbit位置に、値を持つことを意味する1を付与し、何れの単語の末尾の文字を保持しないノードに対応するbit配列のbit位置には、値を持たないことを意味する0を付与する。
次に、ステップS108において、1が付与されたbit位置の各々について、ステップS106において作成されたbit配列の先頭から当該bit位置までの範囲で、bit値1が出現した数を数えて固定長の非負整数値IDを算出し、固定長の非負整数値IDを各単語に対して付与するように、各単語の末尾の文字を保持するノードに対応づける。
次に、ステップS110において、ステップS106において作成されたトライ木構造及びbit配列と、ステップS108においてノードに対応付けられた固定長の非負整数値IDとを出力して処理を終了する。
以上、説明したように、本発明の第1の実施の形態に係るID付与装置によれば、単語の集合を表現するトライ木構造を構築し、単語の末尾の文字を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、単語の末尾の文字を保持するノードの各々について、ビット配列の先頭から当該ノードのビット位置までにおける、ビット値1の数をカウントして固定長の非負整数値を算出し、単語に対してIDとして付与することにより、入力された可変長の文字列である単語に対して、長さを抑制した固定長の非負整数値IDを付与することができる。
次に、第2の実施の形態について説明する。なお、第1の実施の形態と同様の構成となる部分については、同一符号を付して説明を省略する。
第2の実施の形態では、bit配列において1が付与されているbit位置を示す相対インデックスの番号を入力として、最小完全ハッシュ関数により、固定長の非負整数値IDを算出し、当該bit位置に対応する単語に付与する点が第1の実施の形態と異なっている。
<ID付与装置の構成>
非負整数値ID付与部38は、bit配列においてbit値1が付与されているbit位置の各々の相対インデックスに基づいて最小完全ハッシュ関数を構築する。なお、最小完全ハッシュ関数の構築方法については、従来既知の手法を用いればよいため、説明を省略する。
また、非負整数値ID付与部38は、図7に示すように、トライ木構造構築部30において構築されたトライ木構造及びbit配列に基づいて、最小完全ハッシュ関数を用いて、連続した固定長の非負整数値IDを算出し、単語の集合の各単語に対して連続した固定長の非負整数値IDを付与するように、各単語の末尾の文字を保持するノードに、固定長の非負整数値IDを対応づける。
上述のとおり、フラグ付与部36において、各ノード毎に1bitを割り当てたbit配列が作成され、bit配列では、ある単語の末尾の文字を保持するノードに対して1が付与され、そうでないノードに対して0が付与されている。
非負整数値ID付与部38は、bit配列において1が付与されているbit位置の各々について、当該bit位置の相対インデックス(すなわち、当該bit位置に対応するノードが保持する文字情報を格納した物理メモリ上の配列の相対インデックス)の値を入力として、最小完全ハッシュ関数に基づいて、連続した固定長の非負整数値IDを算出し、当該bit位置に対応するノードが末尾の文字を保持する単語に対して付与するように、各単語の末尾の文字を保持するノードに、付与された固定長の非負整数値IDを対応づける。
<ID付与装置の作用>
次に、本発明の第2の実施の形態に係るID付与装置100の作用について説明する。なお、第1の実施の形態と同様の処理については、同一符号を付して詳細な説明を省略する。
まず、入力部10により、可変長文字列である単語の集合が入力されると、ID付与装置100のROMに記憶されたプログラムを、CPUが実行することにより、図9に示すID付与処理ルーチンが実行される。
次に、ステップS100において、トライ木構造が表現する対象となる単語の集合を受け付ける。
次に、ステップS102において、ステップS100において受け付けた単語の集合の各単語を1文字単位にそれぞれ分割する。
次に、ステップS104において、ステップS102において分割された各単語の各文字を保持するノードを、トライ木のノードとして順次追加し、トライ木構造を構築する。
次に、ステップS106において、ステップS104において構築されたトライ木構造の各ノード毎に1bitを割り当てたbit配列を作成し、ステップS100において受け付けた単語の集合の各単語の末尾の文字を保持するノードに対応するbit配列のbit位置に、値を持つことを意味する1を付与し、何れの単語の末尾の文字を保持しないノードに対応するbit配列のbit位置には、値を持たないことを意味する0を付与する。
次に、ステップS107において、ステップS106において1が付与されたbit位置の各々の相対インデックスに基づいて最小完全ハッシュ関数を構築する。
次に、ステップS108において、1が付与されたbit位置の各々の相対インデックスについて、ステップS107において構築された最小完全ハッシュ関数を用いて、連続した固定長の非負整数値IDを算出し、固定長の非負整数値IDを各単語に対して付与するように、各単語の末尾の文字を保持するノードに対応づける。
次に、ステップS110において、ステップS106において作成されたトライ木と、bit配列と、ステップS108においてノードに対応付けられた固定長の非負整数値IDとを出力して処理を終了する。
以上、説明したように、本発明の第2の実施の形態に係るID付与装置によれば、単語の集合を表現するトライ木構造を構築し、単語の末尾の文字を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、単語の末尾の文字を保持するノードの各々について、ビット配列におけるノードに対応する相対インデックス値を入力として最小完全ハッシュ関数により、固定長の非負整数値を算出し、単語に対してIDとして付与することにより、入力された可変長の文字列である単語に対して、長さを抑制した固定長のIDを付与することができる。
第2の実施の形態に係るID付与装置において、例えば、非特許文献(非特許文献5:Botelho, F.C., Pagh, R. and Ziviani, N. Simple and Space-Efficient Minimal Perfect Hash Functions. 10th International Workshop on Algorithms and Data Structures (WADS07), pp. 139-150, August 2007.)において用いられている最小完全ハッシュ関数の構築手順を利用すると、各単語毎に2.6bit程度でID情報を保持することができる。よって、値を保持しているノード数をbとしたときに、単純計算で7b<mであれば、第1の実施の形態で説明したrank関数を用いるよりも最小完全ハッシュ関数を利用するほうが効率的である。ただし、実際の実装では、最小完全ハッシュ関数を構築するのに、4bbit程度の容量を必要とする。よって、おおよそ10.7b<mであれば、第2の実施の形態におけるID付与装置を用いたほうがトライ木の値を保持する容量を抑えることができる。そのため、トライ木のノード数に対して値を持つノードの割合が大きい場合には第1の実施の形態に係るID付与装置の方が効率的にトライ木の値を保持する容量を抑えることができ、ノード数に対して値を持つノードの割合が小さい場合には第2の実施の形態に係るID付与装置の方が効率的にトライ木の値を保持する容量を抑えることができる。
第1及び第2の実施の形態に係るID付与装置を用いることにより、トライ木の値を保持する容量を抑えることができる。上述の通り、第1の実施の形態に係る非負整数値ID付与部38においては、トライ木中のノード数mに対して、おおよそ3m/8bitで値を表現でき、第2の実施の形態に係る非負整数値ID付与部38においては、値を持つノードの数bに対して約4bbit程度の容量で値を表現することができる。
単純な実装では、単語数がn個であれば、一つの値を保持するのに32bit使うと仮定すると、32nbitの容量が必要となる。通常、b=nであるため、第2の実施の形態に係る非負整数値ID付与部38を用いれば約8分の1程度の容量となる。また、第1の実施の形態に係る非負整数値ID付与部38における処理においては、効率的に使う条件が、多くのノードが値を持つ場合なので、nとmが非常に近い値ということになるため、おおよそ85分の1程度の容量となる。
ただし、単語数が非常に小さい場合(例えばn<256)は、単純な実装でも1単語あたり8bitで記述できるため、上記の実施の形態で説明した手法の効果は小さくなり、逆に、単語数が大きくなれば、それだけ効果が大きくなる。
また、本実施の形態において出力されたトライ木構造と、各単語の末尾の文字を保持するノードに対応付けられた非負整数値IDとを用いることで、可変長文字列である単語と、その単語に対応する値がペアになったデータが大量に存在するとき、それらを効率的に保持し、かつ、高速に単語に対応する値を検索することができ、情報検索、検索インデックス作成、キーバリューストアといった技術に利用することができる。
また、複数の単語をトライ木構造として表現することにより、単語の集合を圧縮して効率的に保持することができる。
なお、本発明は、上記の実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
上記の実施の形態では、文字列からなる単語をキーとして入力しているが、これに限定されるものではなく、文字列以外の可変長バイト列をキーとして入力してもよい。この場合には、バイト列をバイト単位に分割し、各バイトを保持する各ノードを追加するようにトライ木構造を構築するようにすればよい。
また、上記の実施の形態では、トライ木構造の各ノードが保持する情報が1文字または1バイトで説明されているがこれに限定されるものではなく、各ノードが2つ以上の文字またはバイトを情報として保持するようにトライ木構造を構築してもよい。
上述のID付与装置100は内部にコンピュータシステムを有しているが、「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)を含むものとする。
また、本願明細書中において、プログラムが予めインストールされている実施形態として説明したが、当該プログラムを、コンピュータ読み取り可能な記録媒体に格納して提供することも可能であるし、ネットワークを介して提供することも可能である。また、本実施の形態のID付与装置100の各部をハードウエアにより構成してもよい。
10 入力部
20 演算部
30 トライ木構造構築部
32 分割部
34 ノード追加部
36 フラグ付与部
38 非負整数値ID付与部
50 出力部
100 ID付与装置

Claims (5)

  1. 入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築するノード追加部と、
    前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成するフラグ付与部と、
    前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列における前記ビット値の相対インデックス値を入力として、最小完全ハッシュ関数により、固定長の非負整数値を算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する非負整数値ID付与部と、
    を含むID付与装置。
  2. 入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築するノード追加部と、
    前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成するフラグ付与部と、
    前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列の先頭から前記ビット値までにおける、前記キーの末端のバイトの情報を保持するノードであることを示すビット値の数をカウントし、カウントされた値を固定長の非負整数値として算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する非負整数値ID付与部と、
    を含むID付与装置。
  3. ノード追加部と、フラグ付与部と、非負整数値ID付与部とを含む、ID付与装置におけるID付与方法において、
    前記ノード追加部により、入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築し、
    前記フラグ付与部により、前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、
    前記非負整数値ID付与部により、前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列における前記ビット値の相対インデックス値を入力として、最小完全ハッシュ関数により、固定長の非負整数値を算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する
    ID付与方法。
  4. ノード追加部と、フラグ付与部と、非負整数値ID付与部とを含む、ID付与装置におけるID付与方法において、
    前記ノード追加部により、入力された可変長のバイト列からなる複数のキーに基づいて、前記キーの共通する接頭辞部分のバイトを結合して前記複数のキーを表現するトライ木構造を構築し、
    前記フラグ付与部により、前記トライ木構造のノードの各々について、前記ノードが前記キー末端のバイトの情報を保持するノードであるか否かを示すビット値を付与したビット配列を作成し、
    前記非負整数値ID付与部により、前記ビット配列における、前記キーの末端のバイトの情報を保持するノードであることを示すビット値各々について、前記ビット配列の先頭から前記ビット値までにおける、前記キーの末端のバイトの情報を保持するノードであることを示すビット値の数をカウントし、カウントされた値を固定長の非負整数値として算出し、前記ノードが末端のバイトの情報を保持する前記キーに対して、IDとして付与する
    ID付与方法。
  5. コンピュータを、請求項1又は請求項2に記載のID付与装置を構成する各部として機能させるためのプログラム。
JP2013009404A 2013-01-22 2013-01-22 Id付与装置、方法、及びプログラム Active JP5521064B1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013009404A JP5521064B1 (ja) 2013-01-22 2013-01-22 Id付与装置、方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013009404A JP5521064B1 (ja) 2013-01-22 2013-01-22 Id付与装置、方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP5521064B1 true JP5521064B1 (ja) 2014-06-11
JP2014142703A JP2014142703A (ja) 2014-08-07

Family

ID=51031354

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013009404A Active JP5521064B1 (ja) 2013-01-22 2013-01-22 Id付与装置、方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP5521064B1 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07200622A (ja) * 1993-12-28 1995-08-04 Fujitsu Ltd 情報管理システム
JPH117451A (ja) * 1997-06-18 1999-01-12 Fuji Xerox Co Ltd 単語検索装置及び単語検索プログラムを記録した媒体

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07200622A (ja) * 1993-12-28 1995-08-04 Fujitsu Ltd 情報管理システム
JPH117451A (ja) * 1997-06-18 1999-01-12 Fuji Xerox Co Ltd 単語検索装置及び単語検索プログラムを記録した媒体

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSND200701457005; 岡野原 大輔: '大規模データを高速・コンパクトに処理するデータ構造' WEB+DB PRESS Vol.42 , 20080201, pp.33-41, (株)技術評論社 *
JPN6014012858; 岡野原 大輔: '大規模データを高速・コンパクトに処理するデータ構造' WEB+DB PRESS Vol.42 , 20080201, pp.33-41, (株)技術評論社 *

Also Published As

Publication number Publication date
JP2014142703A (ja) 2014-08-07

Similar Documents

Publication Publication Date Title
Policriti et al. LZ77 computation based on the run-length encoded BWT
CN107153647B (zh) 进行数据压缩的方法、装置、系统和计算机程序产品
Belazzougui et al. Composite repetition-aware data structures
CN106326475B (zh) 一种高效的静态哈希表实现方法及系统
KR20130062889A (ko) 데이터 압축 방법 및 시스템
US20090063465A1 (en) System and method for string processing and searching using a compressed permuterm index
US9916314B2 (en) File extraction method, computer product, file extracting apparatus, and file extracting system
CN104268157A (zh) 一种数据搜索中的纠错装置及其方法
JP6726690B2 (ja) 基本データシーブを用いて無損失削減されたデータに対する多次元検索、コンテンツ連想的な取出し、ならびにキーワードベースの検索および取出しの実行
CN108628907B (zh) 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法
US8140546B2 (en) Computer system for performing aggregation of tree-structured data, and method and computer program product therefor
CN112463784A (zh) 数据去重方法、装置、设备及计算机可读存储介质
US9397696B2 (en) Compression method, compression device, and computer-readable recording medium
Policriti et al. From LZ77 to the run-length encoded burrows-wheeler transform, and back
US8392433B2 (en) Self-indexer and self indexing system
Fuketa et al. Compression of double array structures for fixed length keywords
Sinaga et al. Development of word-based text compression algorithm for Indonesian language document
CN107077481B (zh) 信息处理装置、信息处理方法和计算机可读存储介质
CN111078652A (zh) 物流箱码的归档压缩方法及装置
JP5521064B1 (ja) Id付与装置、方法、及びプログラム
US8976048B2 (en) Efficient processing of Huffman encoded data
JP2008192157A (ja) コンパクトデシジョンダイアグラムを用いた効率的インデックス付け
Mishra et al. Fast pattern matching in compressed text using wavelet tree
JP5736589B2 (ja) 数列データ検索装置、数列データ検索方法及びプログラム
CN109657108B (zh) 一种域名资产数据存储和查询方法和系统

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140401

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140407

R150 Certificate of patent or registration of utility model

Ref document number: 5521064

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150