JPWO2006080268A1 - ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム - Google Patents

ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム Download PDF

Info

Publication number
JPWO2006080268A1
JPWO2006080268A1 JP2007500493A JP2007500493A JPWO2006080268A1 JP WO2006080268 A1 JPWO2006080268 A1 JP WO2006080268A1 JP 2007500493 A JP2007500493 A JP 2007500493A JP 2007500493 A JP2007500493 A JP 2007500493A JP WO2006080268 A1 JPWO2006080268 A1 JP WO2006080268A1
Authority
JP
Japan
Prior art keywords
node
array
nodes
vertex
identifier
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.)
Granted
Application number
JP2007500493A
Other languages
English (en)
Other versions
JP4653157B2 (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.)
Turbo Data Laboratories Inc
Original Assignee
Turbo Data Laboratories Inc
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 Turbo Data Laboratories Inc filed Critical Turbo Data Laboratories Inc
Publication of JPWO2006080268A1 publication Critical patent/JPWO2006080268A1/ja
Application granted granted Critical
Publication of JP4653157B2 publication Critical patent/JP4653157B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造において、効率よくかつ高速にツリーを検索、集計、ソートする。ツリー型データ構造のトポロジーを検索する方法において、検索キーとなるツリーを表現する検索キー配列として、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する配列をメモリ中に生成し、検索キー配列中のノード識別子にオフセットを与え、オフセットが与えられたノード識別子と、オフセットにしたがった、C−P配列中の部分に含まれる、対応するノード識別子とを比較し、比較により全てが一致したC−P配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、記憶装置中に生成する。

Description

本発明は、記憶装置上に構築された、ツリー型データ構造を表現する配列から、ツリーを検索、集計、ソートする方法、当該方法を実現する情報処理装置、および、ツリーを検索、集計、ソートするためのプログラムに関する。
データベースは種々の用途に用いられているが、中規模ないし大規模システムにおいては、論理的な矛盾が排除できるリレーショナルデータベース(RDB)の使用が主流となっている。たとえば、RDBは飛行機の座席予約等のシステムに利用されている。この場合、キー項目を指定することにより、(多くの場合1件の)ターゲットを迅速に検索することもでき、或いは、予約の確定、キャンセル或いは変更などを行うことができる。また、各便の座席数はせいぜい数百であるため、特定の航空便の空席数を求めることも可能である。
このようなRDBは、表形式データの取り扱いに適しているが、ツリー形式データの取り扱いには適していないことが知られている(例えば、非特許文献1を参照。)。
更に、アプリケーションの中には、表形式による表現よりもツリー形式による表現の方が適しているものが存在する。特に、近年、イントラネットやインターネットのアプリケーションのデータ標準として、ツリー型データ構造を採用するXMLが普及している(XMLの詳細については、例えば、非特許文献2を参照。)。
しかし、ツリー型データ構造の取り扱い、例えば、ツリー形式データの検索は、一般に、大変効率が悪い。この効率の悪さの第1の理由は、データが各所のノードに分散して存在するため、データの存在すべき場所を直ちに特定することが困難である点にある。RDBでは、例えば、「年齢」というデータは、あるテーブルの「年齢」という項目だけに格納されている。しかし、ツリー型データ構造では、「年齢」というデータを保持するノードが各所に散在しているので、一般的には、ツリー型データ構造の全体を調べなければ、該当するデータを検索することができない。
効率の悪さの第2の理由は、検索の結果を表現するために時間がかかるという点にある。検索にヒットしたノード群を表現しようとすると、屡々、そのノードの子孫にあたるノードも表現しなければならないが、RDBMSとは異なりデータ構造が非定型であるため、子孫ノードを表現するために時間がかかる。
そこで、データベースの主流であるRDBの利点をいかすため、従来、ツリー型データ構造をデータベース化するとき、ツリー形式データをRDB化する方法(例えば、特許文献1を参照。)が提案されている。RDBでは、データはテーブル(表)に分解して保持される。そのため、実際のツリー形式データをRDB化するには、ツリー形式データをテーブルに押し込める必要がある。しかし、様々のツリー型データ構造を取り扱うためには、その構造毎に個別にデータをテーブルに押し込め、システム設計を行わなければならない。したがって、RDBに基づくシステム構築は非常に手間のかかる作業である。
これに対して、ツリー形式データ、特に、XMLデータをそのままの形でデータベース化する方法も提案されている。ツリー型データ構造の場合、一つのノードに子孫ノードをぶら下げることができ、多様な表現が可能であるため、システム設計の手間を大幅に削減することができる。したがって、XMLのようなツリー構造を取り扱える技術を核として、ツリー構造データを処理することへのニーズが高まっている。
XMLデータをそのままの形でデータベース化する方法の一例のアプローチは、ツリー構造に記入されているデータのコピーを取り出し、例えば、「年齢」という項目であれば、「年齢」の検索用インデックスデータを別途保持する(例えば、特許文献2を参照。)。これにより、データ自身に属性を付加できるというXMLデータのメリットを十分に活用すると共に、タグを用いて表現された各項目の関係構造をそのまま記憶できるようにしている。
特開2003−248615号公報 特開2001−195406号公報 株式会社セック、"Karearea WhitePaper"、[online]、[平成16年2月19日検索]、インターネット<URL:http://www.sec.co.jp/products/karearea/> W3C、"Extensible Markup Language (XML) 1.0 (ThirdEdition)"、[online]、2004年2月4日、[平成16年2月19日検索]、インターネット<URL:http://www.w3.org/TR/2004/REC-xml-20040204/>
しかし、検索用インデックスデータを別途保持するようなアプローチでは、少なくともデータは二重に保持され、かつ、インデックスを作成するコスト及びインデックスを格納するためのデータ領域が必要となり、大規模なデータを保持する上で不利である。
実際、このようなメカニズムによって、実際に検索を行い、ノードを特定したとしても、そのノードを表現するためには時間がかかる。また、このメカニズムは、ノード間の関係を問題とする検索(例えば、祖先に「60歳」という「年齢」を含み、子孫に「1歳」という「年齢」を含むツリーの抽出)には利用できない。
このような従来技術の根本的な問題点は、個々のデータのみに着目し、データを蓄えたノード間をポインタで接続することによりツリー型データ構造が表現されているため、データ間の関係、例えば、親子、祖先、子孫、兄弟(シブリング)、世代などの関係を効率的にトレースすることができないことにある。換言すると、ポインタは、その値が一定しないため、データの格納アドレスを示すという用途にしか使用できず、ノード間の関係を直接的に表現することができない。
そこで、本発明は、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造において、効率よくかつ高速にツリーを検索、集計、ソートする方法を提供することを目的とする。また、本発明は、上記ツリー型データ構造において、ツリーを検索、集計、ソートする情報処理装置、および、検索、集計、ソートプログラムを提供することを目的とする。
本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが特定のノードおよびその子孫ノードを含む1以上のノード群である部分ツリーを表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した頂点ノードリストを、記憶装置中に生成するステップと、
前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、を備えたことを特徴とする配列の生成方法により達成される。
好ましい実施態様においては、前記第1の配列中の部分を特定するステップが、頂点ノードのノード識別子が示す前記第1の配列中の位置から、ノード識別子が増大する方向に、前記第1の配列中の値が、前記頂点ノード識別子が示す前記第1の配列中の値より大きい範囲を特定するステップを含む。
また、好ましい実施態様においては、前記標準形式の第2の配列を生成するステップが、前記第1の配列の部分と同一サイズの配列の領域であって、その格納位置番号として、前記ルート・ノードのノード識別子を初期値とする連続する整数が与えられた領域を、前記記憶装置中に確保するステップと、
前記第1の配列の部分に格納された値から、頂点ノードのノード識別子を減じた値を、それぞれ、前記領域に格納するステップと、を含む。
また、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
前記第1の配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する、部分ツリーを検索する方法であって、
検索キーとなるツリーを表現する検索キー配列として、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する配列を、記憶装置中に生成するステップと、
前記検索キー配列中のノード識別子にオフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記第1の配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を備えたことを特徴とする検索方法により達成される。
好ましい実施態様においては、前記ノード識別子の全てが一致した場合に、当該第1の配列中の部分の末尾の次のノード識別子を参照して、当該ノード識別子に対応するノードが、前記頂点ノードにより特定される部分ツリーに含まれるか否かを判断するステップと、
前記部分ツリーに含まれない場合に、前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置に生成するステップと、を備えている。
また、別の好ましい実施態様においては、前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
さらに、前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を備えている。
また、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
第1の配列により特定されるツリーの部分ツリーを集計する方法であって、
前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
前記生成された第2の配列を参照して、第2の配列の種別ごとに、生成された配列数をカウントし、配列数を前記第2の配列の種別と関連付けて、前記記憶装置中に記憶するステップと、を備えたことを特徴とする集計方法により達成される。
さらに、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
前記第1の配列により特定されるツリーの部分ツリーの順序をソートする方法であって、
前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
前記生成された第2の配列を参照して、設定された評価基準にしたがって、前記頂点ノードのノード識別子の順序を入れ替えるステップと、を備えたことを特徴とするソート方法により達成される。
また、本発明の目的は、ツリー型データ構造を記憶装置中に構築する方法であって、
同じ世代よりも子ノードを優先して、ルート・ノードを含むノードに、ノード識別子として、固有の連続する整数を付与するステップと、
子ノードをもつノードについて、それぞれのノード識別子と、当該子ノードをもつノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、前記記憶装置中に生成するステップと、を備えたことを特徴とするツリー型データ構造の構築方法によっても達成される。
さらに、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
前記第1の配列中のノード識別子と、前記第1の配列においてノード識別子が出現する数を示す出現数との組を、前記第1の配列中のノード識別子の順に配置した昇順形式の集計配列を、前記記憶装置中に生成するステップを備えたことを特徴とする配列の生成方法によっても達成される。
ある好ましい実施態様において、上述した集計配列に基づき、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列を生成する方法は、
前記集計配列中の出現数に基づき、ノード識別子を格納位置番号とする第1の配列のための領域を、前記記憶装置中に確保するステップと、
前記集計配列および第1の配列のそれぞれにおいて、第1のポインタおよび第2のポインタを初期位置に配置するステップと、
前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致する場合に、前記第1のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第1のポインタが示す出現数を「1」だけ減じ、かつ、第1のポインタおよび第2のポインタを、その格納位置番号が増大するように移動させるステップと、
前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致しない場合に、前記集計配列において、前記第1のポインタに初期的に配置される第3のポインタを、その格納位置番号を減じるように移動させて、最初に、集計配列において、その出現数が「0」とならない位置を特定して、当該第3のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第3のポインタが示す出現数を「1」だけ減じ、かつ、第2のポインタを、その格納位置番号が増大するように移動させるステップと、を備えている。
また、好ましい実施態様において、上述した集計配列から、頂点ノードおよびその子孫ノードを含む部分ツリーを表わす部分配列を生成する方法は、
前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子と前記関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、を備えている。
より好ましい実施態様においては、さらに、前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップを備えている。
また、別の好ましい実施態様において、上述した集計配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する部分ツリーを検索する方法は、
前記検索キーとなるツリーを表現する検索キー配列として、子ノードをもつノードについて、それぞれのノード識別子と、当該ノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、記憶装置中に生成するステップと、
前記検索キー配列中のノード識別子に、オフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記集計配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
前記比較により全てが一致した集計配列の部分のノード識別子とその出現数とを含む、検索結果を示す集計配列を、前記記憶装置中に格納するステップと、を備えている。
好ましい実施態様においては、前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
さらに、前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記集計配列中の部分のノード識別子とその出現数とを含む、検索結果を表わす集計配列を、前記記憶装置中に生成するステップと、を備えている。
また、好ましい実施態様においては、上述した集計配列に基づき、当該集計配列により特定されるツリーの部分ツリーを集計する方法は、
前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子とおよび関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、
前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップと、
前記生成された標準形式の部分配列を参照して、前記標準形式の部分配列の種別ごとに、生成された配列数をカウントし、配列数を前記種別と関連付けて、前記記憶装置中に記憶するステップと、を備えている。
また、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、部分ツリーを表わす配列を生成するために、前記コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
それぞれが特定のノードおよびその子孫ノードを含む1以上のノード群である部分ツリーを表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した頂点ノードリストを、記憶装置中に生成するステップと、
前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラムによっても達成される。
好ましい実施態様においては、前記第1の配列中の部分を特定するステップにおいて、
頂点ノードのノード識別子が示す前記第1の配列中の位置から、ノード識別子が増大する方向に、前記第1の配列中の値が、前記頂点ノード識別子が示す前記第1の配列中の値より大きい範囲を特定するステップを、前記コンピュータに実行させる。
また、別の好ましい実施態様においては、前記標準形式の第2の配列を生成するステップにおいて、
前記第1の配列の部分と同一サイズの配列の領域であって、その格納位置番号として、前記ルート・ノードのノード識別子を初期値とする連続する整数が与えられた領域を、前記記憶装置中に確保するステップと、
前記第1の配列の部分に格納された値から、頂点ノードのノード識別子を減じた値を、それぞれ、前記領域に格納するステップと、を前記コンピュータに実行させる。
また、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
前記第1の配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する、部分ツリーを検索するために、前記コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
検索キーとなるツリーを表現する検索キー配列として、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する配列を、記憶装置中に生成するステップと、
前記検索キー配列中のノード識別子にオフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記第1の配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラムによっても達成される。
好ましい実施態様においては、前記コンピュータに、
前記ノード識別子の全てが一致した場合に、当該配列の部分の末尾の次のノード識別子を参照して、当該ノード識別子に対応するノードが、前記頂点ノードにより特定される部分ツリーに含まれるか否かを判断するステップと、
前記部分ツリーに含まれない場合に、前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を実行させる。
また、別の好ましい実施態様においては、前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
さらに、前記コンピュータに、
前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置に生成するステップと、を実行させる。
また、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
第1の配列により特定されるツリーの部分ツリーを集計するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
前記生成された第2の配列を参照して、第2の配列の種別ごとに、生成された配列数をカウントし、配列数を前記第2の配列の種別と関連付けて、前記記憶装置中に記憶するステップと、実行させることを特徴とするコンピュータプログラムによっても達成される。
さらに、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
前記第1の配列により特定されるツリーの部分ツリーの順序をソートするために、前記コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
前記生成された第2の配列を参照して、設定された評価基準にしたがって、前記頂点ノードのノード識別子の順序を入れ替えるステップと、を実行させることを特徴とするコンピュータプログラムによっても達成される。
また、本発明の目的は、ツリー型データ構造を、コンピュータの記憶装置中に構築するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
前記コンピュータに、
同じ世代よりも子ノードを優先して、ルート・ノードを含むノードに、ノード識別子として、固有の連続する整数を付与するステップと、
子ノードをもつノードについて、それぞれのノード識別子と、当該子ノードをもつノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、前記記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラムによっても達成される。
さらに、本発明の目的は、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、前記ツリー型データ構造を、当該コンピュータの記憶装置中に構築するために、前記コンピュータにより読み出し可能な実行させるコンピュータプログラムであって、
前記コンピュータに、
前記第1の配列中のノード識別子と、当該値の出現する数である出現数との組を、前記第1の配列中のノード識別子の順に配置した昇順形式の集計配列を生成し、当該集計配列を、前記記憶装置に格納するステップを実行させることを特徴とするコンピュータプログラムによっても達成される。
好ましい実施態様においては、上記集計配列に基づき、ノード間の親子関係を表現する、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列を生成するために、コンピュータにより読み出し可能なコンピュータプログラムは、
前記コンピュータに、
前記集計配列中の出現数に基づき、ノード識別子を格納位置番号とする第1の配列のための領域を、前記記憶装置中に確保するステップと、
前記集計配列および第1の配列のそれぞれにおいて、第1のポインタおよび第2のポインタを初期位置に配置するステップと、
前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致する場合に、前記第1のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第1のポインタが示す出現数を「1」だけ減じ、かつ、第1のポインタおよび第2のポインタを、その格納位置番号が増大するように移動させるステップと、
前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致しない場合に、前記集計配列において、前記第1のポインタに初期的に配置される第3のポインタを、その格納位置番号を減じるように移動させて、最初に、集計配列において、その出現数が「0」とならない位置を特定して、当該第3のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第3のポインタが示す出現数を「1」だけ減じ、かつ、第2のポインタを、その格納位置番号が増大するように移動させるステップと、を実行させる。
別の好ましい実施態様においては、上記集計配列から、頂点ノードおよびその子孫ノードを含む部分ツリーを表わす部分配列を生成するために、コンピュータにより読み出し可能なコンピュータプログラムは、
前記コンピュータに、
前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子と前記関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、を実行させる。
より好ましい実施態様においては、さらに、前記コンピュータに、
前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップを実行させる。
さらに別の好ましい実施態様において、上記集計配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する部分ツリーを検索するために、コンピュータにより読み出し可能なコンピュータプログラムは、
前記コンピュータに、
前記検索キーとなるツリーを表現する検索キー配列として、子ノードをもつノードについて、それぞれのノード識別子と、当該ノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、記憶装置中に生成するステップと、
前記検索キー配列中のノード識別子に、オフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記集計配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
前記比較により全てが一致した集計配列中の部分のノード識別子とその出現数とを含む、検索結果を示す集計配列を、前記記憶装置中に生成するステップと、を実行させる。
好ましい実施態様においては、前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
さらに、前記コンピュータに、
前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記集計配列中の部分のノード識別子とその出現数とを含む、検索結果を表わす集計配列を、前記記憶装置に生成するステップと、を実行させる。
また、別の好ましい実施態様においては、上記集計配列に基づき、当該集計配列により特定されるツリーの部分ツリーを集計するために、コンピュータにより読み出し可能なコンピュータプログラムは、
前記コンピュータに、
前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子とおよび関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、
前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップと、
前記生成された標準形式の部分配列を参照して、前記標準形式の部分配列の種別ごとに、生成された配列数をカウントし、配列数を前記種別と関連付けて、前記記憶装置中に記憶するステップと、を実行させる。
本発明によれば、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造において、効率よくかつ高速にツリーを検索、集計、ソートする方法を提供することを目的とする。また、本発明によれば、上記ツリー型データ構造において、ツリーを検索、集計、ソートする情報処理装置、および、検索、集計、ソートプログラムを提供することが可能となる。
以下、添付図面を参照して、本発明の実施の形態について説明する。
[コンピュータシステム構成]
図1は、本発明の実施の形態にかかるツリー型データ構造を取り扱うコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。図1に示すように、このコンピュータシステム10は、通常のものと同様の構成であり、プログラムを実行することによりシステム全体および個々の構成部分を制御するCPU12、ワークデータなどを記憶するRAM(Random Access Memory)14、プログラム等を記憶するROM(Read Only Memory)16、ハードディスク等の固定記憶媒体18、CD−ROM19をアクセスするためのCD−ROMドライバ20、CD−ROMドライバ20や外部ネットワーク(図示せず)と接続された外部端子との間に設けられたインタフェース(I/F)22、キーボードやマウスからなる入力装置24、CRT表示装置26を備えている。CPU12、RAM14、ROM16、外部記憶媒体18、I/F22、入力装置24および表示装置26は、バス28を介して相互に接続されている。
本実施の形態にかかる、ツリー型データ構造を記憶装置上に構築するプログラム、及び、ツリー型データ構造を記憶装置上で変換するプログラムは、CD−ROM19に収容され、CD−ROMドライバ20に読取られても良いし、ROM16に予め記憶されていても良い。また、いったんCD−ROM19から読み出したものを、外部記憶媒体18の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク(図示せず)、外部端子およびI/F22を経て外部から供給されるものであっても良い。
また、本発明の実施の形態にかかる情報処理装置は、コンピュータシステム10にツリー型データ構造を記憶装置上に構築するプログラム、及び、ツリー型データ構造を記憶装置上で変換するプログラムを実行させることにより実現される。
[ツリー型データ構造]
図2Aは、ツリー形式データの一例であるPOSデータの説明図であり、図2Aは、このツリー形式データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した一例であり、図2Bは、同じツリー形式データをXML形式で表現した一例である。図2に示されるようにツリー型データ構造は、ルート・ノード(本例では、POSデータ)から始めて、各ノードで枝分かれしてリーフ・ノード(端点)に至るノードとアークの組み合わせによって表現される。各ノードには、項目名情報、すなわち、ノードのタイプと、項目値情報、すなわち、ノードの値が関連付けられ、図2A、Bの例では、XML形式の
<shopName>フランス店</shopName>
に対応したノードは、「shopName(=店名)」というノードタイプと「フランス店」というノード値が関連付けられている。この関連付けは、例えば、ノードタイプ及びノード値を記述する情報が格納されたノード情報格納領域へのポインタを、ノード識別子に随伴させることによって実現することができる。しかし、本発明は、ツリー型データ構造の実体的な値の取り扱い方によって限定されないことに注意する必要がある。
これに対して、ツリー型データ構造のデータの検索、集計、ソートを効率的に実行するためには、ツリー型データ構造のトポロジーを表現する手法、すなわち、記憶装置に展開する手法が非常に重要な役割を果たす。そこで、以下では、主として、ツリー型データ構造のトポロジーに関して説明する。
従来、このようなツリー型データ構造は、データを蓄えたノード間をポインタで接続することによって表現されている。しかし、ポインタ表現は、ポインタ値に必然性がないという欠点がある。即ち、ある場合には特定のノードAがある番地(例えば、100番地)に格納され、別の場合には同じノードAが別の番地(例えば、200番地)に格納されるので、ポインタ値が一定ではなく、ポインタ値は、本質的にノードの格納アドレスを表現するに過ぎない。そのため、例えば、ノードが深さ優先の規則に従ってポインタで接続されている場合、これらのノードを幅優先の規則に従ってポインタで再接続することは困難である。
これに対して、本発明者は、ツリー型データ構造のトポロジーがアークリストによって記述可能であることに着目した。アークリストとは、ノード間の親子関係を表すアークのリストである。図3A〜Cは、アークリストを用いたツリー型データ構造の表現形式の一例の説明図である。図3Aの例では、0、10、20、30、40、50、60、70、80、90、100及び110のノード識別子(ID)が付与された12個のノードからなるツリー型データ構造が示されている。図3Aはツリー型データ構造の全体を示している。図3Aにおいて、丸形、ハート形などの図形の中央に記載された数字は、ノードIDを表し、矢印と矢印の側に記載された<0,10>などの数字の対は、アークを表している。尚、ノードIDは、文字列には限られず、数値、特に、整数でもよい。図3Bは、親ノード(From−ID)から子ノード(To−ID)へのアークリストを示し、図3Cは、ノードIDとノードTypeの対のリストからなるノードリストを示す。尚、ツリー型データ構造を表現するだけの目的のためにはノードリストが無くても構わない。原理的には、このようなアークリストを用いることによって、ノード間の関係をポインタによらずに直接的に記述することが可能である。
[「子→親」関係に基づく表現]
図3A〜Cの例では、アークリストは、親ノードに子ノードを対応付ける「親→子」関係に基づいて記述されている。そのため、一つの親ノード、例えば、ルート・ノード0には、3個の子ノード10、60及び80が存在するため、アークリストのFrom−IDには、同じノードIDの0が3回出現している。つまり、親ノードを特定しても子ノードを特定することができないので、アークリストは、要素From−IDの配列と要素To−IDの配列により構成される。アークリストを使用する場合、あるノードは、From−IDの配列と、To−IDの配列の両方の配列に出現する。
これに対して、親子関係は、「子→親」関係によっても表現することが可能である。この場合、ノード間の親子関係は、ルート・ノード以外のノードである非ルート・ノードの各々と、関連付けられた親ノードと、の組の配列によって表現される。この「子→親」関係によって親子関係を表現する場合、「親→子」関係の場合には得られなかった重要な性質がある。即ち、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。つまり、アークリストは、実際には、要素To−IDの配列だけを準備すればよい。この結果として、アークリストを格納するための記憶容量が削減される。この記憶容量の削減は、メモリへのアクセス回数が低減するという効果があるので、結果的に、処理の高速化が実現できる。
図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。図4Aはツリー全体の説明図であり、図4Bは「子→親」関係に基づくアークリストである。図4Bのアークリストは、ルート・ノードに対する親ノードの格納領域を含んでいるので、ルート・ノードの親ノードとして、便宜的に"−"が設定されている。但し、ルート・ノードに対応する親ノードは存在しないので、図4Cに示されるように、「子→親」関係に基づくアークリストからルート・ノードに対する親ノードの格納領域を除いても構わない。このように本発明の一実施例では、ルート・ノード以外のノードである非ルート・ノードの各々に対して、非ルート・ノードの親ノードを関連付けることによりノード間の親子関係を表現する。そして、「子→親」表現された子のノードから親のノードのリストを辿ることでツリーのトポロジーを表現することができる。
このような「子→親」関係に基づくツリー型データ構造は、本発明の一実施例によれば、図5に示されるように、図1に示されたコンピュータシステム10に、ルート・ノードを含むノードに固有のノード識別子を付与するノード定義ステップ501と、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付ける親子関係定義ステップ502と、を実行させることによってRAM14上に構築される。このように、最初に、文字列、浮動小数、整数などの任意の識別情報によってノードにノード識別子を付与し、次に、「子→親」表現に基づいて親子関係を定義することによって、子ノードのノード識別子から親ノードのノード識別子を引く(ルックアップする)ことでツリーのトポロジーを表現することができる。
[ノード識別子]
好ましい一実施例によれば、ノード定義ステップはノード識別子として数値を使用し、より好ましくは、連続する整数を使用し、更に好ましくは、0又は1からの整数連番を使用する。これにより、ノード識別子から、そのノードに対応する親ノードのノード識別子が格納されているアドレスを簡単に取得することができるので、子ノードのノード識別子から親ノードのノード識別子を引く処理を高速化することができる。
ツリー型データ構造のノードにノード識別子として順序付きの番号を付与してノード間の親子関係を表現する場合、番号の付与順序に規則を定めることによって、その後のツリー型データ構造の取り扱いが容易になるという利点がある。本発明によれば、この番号の付与順序の規則として、同じ世代のノードよりも子ノードを優先する深さ優先モードと、子ノードよりも同じ世代のノードを優先する幅優先モードが利用される。
図6A〜Cは、本発明の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図6Aには、各ノードにID番号が付与されたツリー構造型データが示され、図6Bには、変換規則が示され、図6Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、深さ優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、兄弟ノードよりも子ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
また、図7A〜Cは、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図7Aには、各ノードにID番号が付与されたツリー構造型データが示され、図7Bには、変換規則が示され、図7Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、幅優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、子ノードよりも兄弟ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
このようにノード識別子として番号を使用すると、ノード番号から直ちに、即ち、O(1)のオーダーで、そのノードに関する格納値が格納されているアドレスを引くことができる。また、親子関係を「子→親」表現することによって、子ノードから親ノードを直ちに、即ち、O(1)のオーダーで引くことができる。
[深さ優先モード]
本発明の一実施例によれば、図6Cに示されるような深さ優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは深さ優先で連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に
最初にルート・ノードに番号を付与するステップ801と、
既に番号が付与されたあるノードに唯一の子ノードが存在する場合には、当該子ノードに当該あるノードに付与された番号の次の番号を付与するステップ802と、
既に番号が付与されたあるノードに複数の子ノードが存在する場合には、当該複数の子ノードの間の兄弟関係に従って、弟ノードは直上の兄ノードの全ての子孫ノードに番号が付与された後に次の番号が付与されるように、一番上の兄ノードから一番下の弟ノードまで番号を付与するステップ803と、
を実行させる。これにより、深さ優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
図9は、本発明の一実施例により図6Cに示された深さ優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。同図にサブツリー1又はサブツリー2として示されているように、深さ優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子孫ノードが連続領域に出現するという優れた性質が得られる。
本発明の一実施例では、深さ優先モードの優れた性質を利用することにより、配列から、あるノードに付与された整数以上の値が格納されている連続領域を抽出することにより、あるノードの全ての子孫ノードを特定する。これにより、あるノードの子孫ノードを表すノード群が配列内の連続ブロックとして獲得できる。例えば、連続ブロックのサイズを「m」とすると、あるノードの全ての子孫ノードを特定するための処理速度は、O(m)のオーダーになる。
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図10は、図6Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。一つの親ノードに対して複数の子ノードが存在し得るので、親子関係の配列は、各ノードに対する子ノードの番号が格納されている領域を示すための配列Aggrと、子ノードの番号が格納されている配列P→Cの二つの配列により構成される。例えば、配列Aggrの先頭から2番目の要素Aggr[1]の値は”3”であり、これは、ノード[1]に対する子ノードの番号は、配列P→Cの要素P→C[3]以降に格納されていることを表している。これにより、ノード[0]、即ち、ルート・ノードに対する子ノードは、配列P→Cの先頭から3個の要素、P→C[0]の1、P→C[1]の6、及びP→C[2]の8であることがわかる。
この「親→子」表現に基づく親子関係の配列の求め方を説明する。
(1)ノードの番号が配列P→Cの最大の添字(=11)と一致する場合、このノードに属する子ノードは存在しない。したがって、処理は継続されない。
(2)同図に太字で表された親ノードの番号からAggr値を求める。このAggr値は、配列P→Cの開始点を表す。
(3)太字で表された親ノード番号+1に対応するAggr値を求める。このAggr値−1が配列P→Cの終了点である。
例えば、ノード0の子ノードの開始点は、Aggr[0]、即ち、0であり、終了点は、Aggr[1]−1、即ち、3−1=2である。したがって、ノード0の子ノードは、配列P→Cの0〜2番目の要素、即ち、1、6及び8である。
或いは、「親→子」表現に基づく親子関係は、より単純に、親ノード番号の配列と、対応する子ノード番号の配列と、の二つの配列により表現することも可能である。しかし、この配列を利用して親子関係を見つけるためには、親ノードの番号を検索しなければならないので、即ち、log(n)のアクセス時間を要するので効率が悪い。
[幅優先モード]
本発明の一実施例によれば、図7Cに示されるような幅優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは幅優先モードで連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図11は、本発明の一実施例による幅優先に基づくノード定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に、
各ノードがルート・ノードから何世代目のノードであるか、及び、各世代に含まれるノード数を算出するステップ1101と、
最初にルート・ノードに番号を付与するステップ1102と、
ある世代に含まれる全てのノードに番号が付与されたならば、当該ある世代の次の世代にノードが存在しなくなるまで、当該次の世代に含まれる全てのノードに対して、親ノードが異なる場合には、当該親ノードに番号が付与された順番に当該ノードに番号を付与し、当該親ノードが同一である場合には、当該親ノードから派生した複数の子ノードの間に兄弟関係を定義し、一番上の兄ノードから一番下の弟ノードまで直前に付与された番号の次の番号から連続的に変化する固有の整数を順に付与するステップ1013と、
を実行させる。これにより、幅優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
図12は、本発明の一実施例により図7Cに示された幅優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。同図に示されているように、幅優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子ノードは連続領域に出現するという優れた性質が得られる。これは、幅優先モードで連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、親ノードに付与された番号が配列中に順序付き(昇順又は降順)で出現することによる。
したがって、本発明の一実施例では、幅優先モードの優れた性質を利用することにより、配列から、あるノードに付与された整数と同じ値が格納されている連続領域を抽出することにより、あるノードの全ての子ノードを特定する。これにより、あるノードの子ノードを、例えば、二分探索などの手法を用いて検索することが可能であり、即ち、O(log(n))のオーダーで検索することが可能になる。
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図13は、図7Cに示された幅優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。図13に示すように、一つの親ノードに対して複数の子ノードが存在し得るので、親子関係の配列は、各ノードに対する子ノードの番号が格納されている領域を示すための配列Aggrと、子ノードの番号が格納されている配列P→Cの二つの配列により構成される。例えば、配列Aggrの先頭から2番目の要素Aggr[1]の値は”3”であり、これは、ノード[1]に対する子ノードの番号は、配列P→Cの要素P→C[3]以降に格納されていることを表している。これにより、ノード[0]、即ち、ルート・ノードに対する子ノードは、配列P→Cの先頭から3個の要素、P→C[0]の1、P→C[1]の2、及び、P→C[2]の3であることがわかる。
この「親→子」表現に基づく親子関係の配列の求め方を説明する。
(1)ノードの番号が配列P→Cの最大の添字(=11)と一致する場合、このノードに属する子ノードは存在しない。したがって、処理は継続されない。
(2)同図に太字で表された親ノードの番号からAggr値を求める。このAggr値は、配列P→Cの開始点を表す。
(3)太字で表された親ノード番号+1に対応するAggr値を求める。このAggr値−1が配列P→Cの終了点である。
例えば、ノード0の子ノードの開始点は、Aggr[0]、即ち、0であり、終了点は、Aggr[1]−1、即ち、3−1=2である。したがって、ノード0の子ノードは、配列P→Cの0〜2番目の要素、即ち、1、2及び3である。
[頂点ノードおよび部分ツリー群]
ツリー型データ構造のデータを検索、集計、ソートする際に、ツリーデータの全体の中で特定の部分を処理の対象、例えば、検索の対象範囲とする場合がある。本発明者は、複数のノードを含む特定の部分を代表する一つのノードを導入することにより、種々の処理を効率化する手法を提案した。次に、この手法について詳述する。
ツリー型データ構造をもつツリーデータにおいて、ルート・ノードに最も近いノードの値で、当該ノードおよびそのノードから枝分かれしてリーフ・ノード(端点)に至るまでの全てのノードを表現することを考える。ここで、あるノードおよびそのノードから枝分かれしてリーフ・ノードに至るまでのノード群を、部分ツリーと称する。また、上記ノード(ルート・ノード)に最も近いノードを頂点ノードと称する。
図14Aは、前述した幅優先モードに基づくツリー型データ構造、図14Bは、当該ツリー型データ構造を、「子→親」表現に基づく親子関係の配列を示す図である。たとえば、頂点ノード[4]は、ノード識別子{4,8,9}を含み、頂点ノード[6]は、ノード識別子{6}を含み、また、頂点ノード[3]は、ノード識別子{3,7,10,11}を含む。このような、複数の頂点ノードからなる配列を、頂点ノードリストと称する。頂点ノードリストにより複数の部分ツリーを指定でき、指定された複数の部分ツリーを部分ツリー群と称する。
以下、頂点ノードリストを、[a,b,・・・]と表す。ここに、「a」、「b」、・・・は、頂点ノードに対応するノード識別子である。頂点ノードリストを構成する頂点ノードの各々を展開して、当該頂点ノードを頂点とする部分ツリーに含まれるすべてのノードのノード識別子を求めることを考える。求められたノード識別子のリストにおいて、あるノード識別子は1つしか存在しない場合、すなわち、ノード識別子が重複して出現しない場合、このような部分ツリー群を、「正規部分ツリー群」と称する。そうでないような部分ツリー群を、「非正規部分ツリー群」と称する。
正規部分ツリー群であっても、非正規部分ツリー群であっても、頂点ノードリストによって、頂点ノードおよびその子孫ノードからなる部分ツリー群を特定することができる。たとえば、図15Aに示すように、頂点ノードリスト[4,6,3]により、図15Bに示すような部分ツリー群(部分ツリー{4,8,9}、{6}、{3,7,10,11})が特定される。
頂点ノードリストにより特定される部分ツリー群は、検索、集計、ソート、集合演算の対象とすることができる。
たとえば、図15A、Bの例で、「ハート形」のノードを含む部分ツリーを検索すると、図16Bに示すような部分ツリー群が得られる。図16Aは、この部分ツリー群を表わす頂点ノードリストである。
また、各部分ツリーに属するノード数を集計すると、図17Bに示すようになる。図17Aにおいて、配列1701は頂点ノードリスト、配列1702は、各頂点ノードにより特定される部分ツリーに属するノード数を示す配列である。
たとえば、ソートとして、各部分ツリーに属するノード数によるソートを考えることができる。図18A中、配列1801は、ソートされた頂点ノードリスト、配列1802は、頂点ノードリストにより特定される部分ツリーに属するノード数を示す配列である。また、図18Bは、部分ツリーがノード数にしたがってソートされた状態を示す。
さらに、複数の部分ツリー群の間の集合演算として、論理積について説明する。図14A、Bに示すツリーにおいて、図19Bに示す部分ツリー群(対応する頂点ノードリストを図19Aに示す)と、図19Dに示す部分ツリー群(対応する頂点ノードリストを図19Cに示す)との論理積を考える。
図19Bにおける、ノード識別子「4」の頂点ノードにて特定される部分ツリー1901と、図19Dにおける、ノード識別子「1」の頂点ノード識別子にて特定される部分ツリー1911とを比較すると、部分ツリー1901は、部分ツリー1902に包含される。図19Bにおける部分ツリー1902と包含関係をもつような部分ツリーは、図19Dに示す部分ツリー群には存在しない。また、図19Bにおけるノード識別子「3」の頂点ノードにて特定される部分ツリー1903と、図19Dにおける、ノード識別子「7」にて特定される部分ツリー1913とを比較すると、部分ツリー1913は、部分ツリー1903に包含される。その結果、論理積演算の結果を示す頂点ノードリストは、図20Aに示すように、[4,7]となる。図20Bは、論理積演算の結果に対応する部分ツリー群である。
図16A〜図20Bにより理解できるように、頂点ノードリスト(集計においては、これに加えて、頂点ノードリストと同一サイズの、集計結果(ノード数)を格納する配列)によって、それぞれの処理や演算の結果を表わすことができる。
[標準形式]
あるノードおよびそのノードから枝分かれしてリーフ・ノードに至る部分ツリー群における、ノードおよびその間の接続関係を、本明細書において「トポロジー」と称する。たとえば、図21に示すツリーがあり、このツリー2100の構造は、深さ優先モードの「子→親」表現に基づく親子関係の配列(符号2101参照:図面においては、「C−>P」と表記するが、明細書においては、以下、「C−P配列」と称する。)により表わされると考える。
頂点ノードリスト2102により特定される部分ツリーを考える。図22において、部分ツリーA〜C(符号2201〜2203)が、ぞれぞれ、図21の頂点ノードリスト2102により特定される部分ツリーに相当する。これら部分ツリー群において、部分ツリーA(符号2201参照)および部分ツリーB(符号2202参照)は、そのノードおよびノード間の接続関係において同一、つまり、トポロジーが同一であるということができる。また、頂点ノード2102で表わされる部分ツリー群には、2種類のトポロジーが含まれるということができる。
このようにトポロジーを比較し、トポロジーの同一性を判断するためには、上記部分ツリーのトポロジーを標準化して表現するのが望ましい。以下、部分ツリーのトポロジーの標準化について説明する。ここに、標準化されたトポロジーの表現を、本明細書において「標準形式」と称する。
図23Aに示すように、部分ツリーA(符号2201参照)と部分ツリーB(符号2202参照)とは、明らかに同一のトポロジーを有している。しかしながら、C−P配列2103を参照すると、部分ツリーAを表現する部分の要素は、[1,2,2]であり、その一方、部分ツリーBを表現する部分の要素は、[7,8,8]であり、これらは一致しない。そこで、部分ツリーを、その頂点ノードを、ルート・ノードとして、深さ優先モードの「子→親」表現に基づく親子関係の配列として表現すれば(図23Bの符号2301、2302参照)、配列の要素を比較することで、双方のトポロジーが同一であると判断することができる。このように、部分ツリーを、その頂点ノードを、ルート・ノードとして、深さ優先モードの「子→親」表現に基づく親子関係の配列として表現することを標準化と称する。
以下、標準化の際に実行される処理について説明する。標準化は、概略的には、
それぞれが特定のノードおよびその子孫ノードを含む1以上のノード群である部分ツリーを表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した頂点ノードリストを、記憶装置中に生成するステップと、
頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、第1の配列中の部分を特定するステップと、
第1の配列中の部分のそれぞれについて、部分ツリーの頂点ノードが、ルート・ノードとなるように、ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、記憶装置中に生成するステップと、を備える。ここで、第1の配列とは、C−P配列をいう。
より詳細には、図24に示すように、CPU12は、RAM14などのメモリに格納されたC−P配列を参照して、当該C−P配列中、処理対象となる部分ツリーに相当する部分配列を特定する(ステップ2401)。より具体的には、C−P配列において、部分ツリーの頂点ノードが示す位置を初期位置としたポインタを一つずつ下方(ノード識別子が増大する方向)に移動し、ポインタが示すC−P配列の値が、頂点ノードに対応するC−P配列の値よりも大きければ、そのポインタが示すノード識別子に対応するノードは、部分ツリーに含まれる(図25の符号2501参照)。
次いで、CPU12は、部分配列において、頂点ノードの親のノード識別子を示す、先頭の要素を、「−1」に変換する(ステップ2402)。
次いで、CPU12は、2番目以降の要素の値から、それぞれ、頂点ノードのノード識別子の値をオフセットとして差し引いた値を算出し、これを、当該要素の値として、部分配列に格納する(ステップ2403)。ステップ2403の処理は、部分配列において2番目以降の全ての要素に対して実行される(ステップ2404、2405参照)。これにより、図25の例では、[7,8,8]という要素を持っていた部分配列が、標準化により[−1,0,0]という部分配列に変換される(符号2510参照)。CPU12は、標準化された部分配列を、RAM14などのメモリに格納する。
なお、図24の処理において、ステップ2402を省略し、ステップ2403において、部分配列の先頭の要素から、順次、その値に頂点ノードのノード識別子を減算しても良い。
[昇順形式]
また、それぞれの親ノードが、何個の子ノードを持つかを示す配列を考えることができる。この配列を昇順形式の配列と称する。昇順形式の配列には、以下のような利点がある。
(1)昇順形式の配列においては、親ノードの番号順に昇順で並べられているため、ルート・ノードに近い側から親ノードのノード識別子が出現し、昇順形式相互の比較では、よりルート・ノードに近い側から比較される。
2つの昇順形式の配列を先頭から比較すると、よりルートに近い側から比較されることになる。
(2)比較が効率的に行える。
第1に、1つの親ノードに2つ以上の子ノードが付属することが多い場合に、配列のサイズを小さくすることができるからである。
第2に、昇順の配列は比較しやすいことによる。
このため、昇順形式は、後述するトポロジーのソートを行うのに適する。特に、トポロジーのソートに適する最大の理由は、昇順形式はルート・ノードに近い側から記述されるため、より重要であるルート・ノードに近い側の特長が優先されて、トポロジーの大小が決定されるからである。
上述した昇順形式の配列を、記憶装置中に構築するためには、
同じ世代よりも子ノードを優先して、ルート・ノードを含むノードに、ノード識別子として、固有の連続する整数を付与するステップと、
子ノードをもつノードについて、それぞれのノード識別子と、当該子ノードをもつノードを親ノードとする子ノードの出現数との組を、ノード識別子の順に配置した昇順形式の集計配列を、記憶装置中に生成するステップと、を備えることで実現できる。
また、C−P配列(第1の配列)から昇順形式の配列を生成するためには、第1の配列中のノード識別子と、第1の配列においてノード識別子が出現する数を示す出現数との組を、第1の配列中のノード識別子の順に配置した昇順形式の集計配列を、記憶装置中に生成するステップを備えることで実現することができる。
図26は、昇順形式の配列を説明するための図である。図26において、標準化された部分ツリー(図22における部分ツリーCに相当)2601の「子→親」表現を表わす親子関係の配列(標準化されたC−P配列)は、符号2602に示すようなものとなる。CPU12は、C−P配列の要素を参照して、出現値(ノード識別子)と出現回数との組からなる集計配列を作成する(ステップ2611)。ここで、集計配列において、出現値は昇順に格納される。これにより、集計配列2603ができる。「出現値=−1」については、常に、その出現数は「1」であるため、CPU12は、「出現値=−1」と「出現数=1」との組を配列から削除する(ステップ2622)。このような処理の結果、集計配列2604を得ることができる。CPU12は、得られた集計配列2604を、RAM14などのメモリに格納する。
標準化されたC−P配列と、昇順形式の集計配列とは1対1に対応し、相互に変換することができる。標準化されたC−P配列から集計配列への変換(集計配列の生成)は上述した通りである。集計配列から標準化されたC−P配列への変換(集計配列に基づくC−P配列の生成)について、以下に述べる。
図27において、ツリー2701は、出現値と出現回数の組からなる昇順形式の集計配列2702を用いて表現され得る。また、これは、C−P配列2703を用いても表現され得る。集計配列からC−P配列への変換処理においては、「主流」という概念を導入する。「主流」とは、C−P配列において、先頭の要素(ノード識別子に相当する格納位置番号=0の要素)を除き、自己の格納位置番号より「1」だけ少ない格納値を持つような、連続したブロックをいう。たとえば、C−P配列において、符号2711、2712にて示すブロックが、主流となる。ツリー2701において、上記符号2711、2712で示すブロックを構成するノードを連結するアークを破線で示している。また、自己の格納位置番号より「1」だけ少ない格納値をもつノードでない場合は、主流の先頭ノードであると考えることができる。
集計配列からC−P配列(第1の配列)への変換は、概略的には、
集計配列中の出現数に基づき、ノード識別子を格納位置番号とする第1の配列のための領域を、記憶装置中に確保するステップと、
集計配列および第1の配列のそれぞれにおいて、第1のポインタおよび第2のポインタを初期位置に配置するステップと、
集計配列中、第1のポインタが示すノード識別子と、第2のポインタが示す格納位置番号から「1」を減じた値とが一致する場合に、第1のポインタが示すノード識別子を、第1の配列において、第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、第1のポインタが示す出現数を「1」だけ減じ、かつ、第1のポインタおよび第2のポインタを、その格納位置番号が増大するように移動させるステップと、
集計配列中、第1のポインタが示すノード識別子と、第2のポインタが示す格納位置番号から「1」を減じた値とが一致しない場合に、集計配列において、第1のポインタに初期的に配置される第3のポインタを、その格納位置番号を減じるように移動させて、最初に、集計配列において、その出現数が「0」とならない位置を特定して、当該第3のポインタが示すノード識別子を、第1の配列において、第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、第3のポインタが示す出現数を「1」だけ減じ、かつ、第2のポインタを、その格納位置番号が増大するように移動させるステップと、を備えている。
図28は、集計配列からC−P配列への変換処理を示すフローチャートである。図28に示すように、CPU12は、RAM14などのメモリ上に、C−P配列のための領域を確保し、C−P配列の先頭の要素として「−1」を格納する(ステップ2801)。次いで、CPU12は、昇順形式の集計配列の先頭に第1のポインタをセットするとともに、C−P配列の2番目の格納位置(格納位置番号=1)に第2のポインタをセットする(ステップ2802)。図29Aは、ステップ2801およびステップ2802の処理が終了した状態を示す図である。図29Aおよび以後説明に引用する図面において、第1のポインタは「矢印1」と表記され、また、第2のポインタは「矢印2」と表記される。また、後述する第3のポインタは、「矢印3」と表記される。また、C−P配列の先頭の要素として「−1」が格納される。
CPU12は、C−P配列において、第2のポインタが示す格納位置番号(ノード識別子)に「1」を減じた値が、第1のポインタが示す集計配列中の出現値と等しいか否かを判断する(ステップ2803)。ステップ2803でイエス(Yes)と判断された場合には、CPU12は、第1のポインタが示す集計配列中の出現値を、C−P配列中、第2のポインタが示す位置に格納する(ステップ2804)。次いで、CPU12は、第1のポインタが示す集計配列中の出現回数を「1」だけ減じるとともに(ステップ2805)、第1のポインタおよび第2のポインタを、1つだけ下方に移動する(つまり、ポインタが示す格納位置番号が「1」だけ増大するように移動する)(ステップ2806)。第2のポインタの位置が、C−P配列の末尾を超えていなければ(ステップ2807でノー(No))、ステップ2803に戻る。
図29Bに示すように、第2のポインタ(矢印2)が示すC−P配列の格納位置番号は「1」であり、その値に「1」を減じると、第1のポインタが示す集計配列中の出現値「0」と等しい。したがって、ステップ2803でイエス(Yes)と判断されて、第1のポインタが示す集計配列中の出現値「0」が、C−P配列中、第2のポインタが示す位置に格納され、かつ、集計配列中、第1のポインタが示す出現回数が「1」だけ減じられる。その後、第1のポインタおよび第2のポインタが、それぞれ、格納位置番号が「1」だけ増大するように下方に移動される。
図30A、Bは、図29Bに示すC−P配列への値の格納に引き続く処理の状況を示す。これらの場合においても、ステップ2804〜2806の処理が実行される。
図31Aの場合には、第2のポインタが示すC−P配列の格納位置番号は「4」であり、その値に「1」を減じると「3」となる。その一方、第1のポインタが示す集計配列中の出現値は「7」であるため、これらは一致しない(ステップ2803でノー(No))。
この場合には、CPU12は、集計配列の位置を特定する第3のポインタを生成し、そのポインタを、第1のポインタの位置から、遡らせて(つまり、格納位置番号を減じる方向に移動させ)、最初に、「出現回数≠0」となるような位置を特定する(ステップ2808)。図31Aの例では、第3のポインタを、第1のポインタの位置から、1つだけ格納位置番号を減じる方向に移動させると、当該第3のポインタが示す出現回数は、「2」となるため、第3のポインタは、この位置で停止する。
次いで、CPU12は、第3のポインタが示す集計配列中の出現値を、C−P配列中、第2のポインタが示す位置に格納する(ステップ2809)。CPU12は、第3のポインタが示す集計配列中の出現回数を「1」だけ減じるとともに(ステップ2810)、第2のポインタを、1つだけ下方に移動する(つまり、ポインタが示す格納位置番号が「1」だけ増大するように移動する)(ステップ2811)。
図31B、図32A、Bに示す場合には、ステップ2803でノー(No)と判断され、ステップ2808〜2811が実行され、C−P配列中、第2のポインタが示す位置に、第3のポインタが示す集計配列中の出現値が格納される。
引き続く図33A、Bに示す場合には、ステップ2803でイエス(Yes)と判断され、ステップ2804〜2806が実行され、C−P配列中、第2のポインタが示す位置に、第1のポインタが示す集積配列中の出現値が格納される。さらに引き続く図34A、Bに示す場合には、ステップ2803でノー(No)と判断され、ステップ2808〜2811が実行され、C−P配列中、第2のポインタが示す位置に、第3のポインタが示す集計配列中の出現値が格納される。たとえば、図34Bに関して、ステップ2808〜2811の処理の後、第2のポインタは、C−P配列の末尾を超えた位置に移動する。このため、この時点で処理は終了する。
このようにして、昇順形式の集計配列に基づいて、標準化されたC−P配列を生成することが可能となる。また、昇順形式の集計配列と、標準化されたC−P配列とは、表現形態が異なるだけで、同じ情報(ツリーの構造の情報)を含むことがわかる。したがって、以下に説明する検索、集計、ソート処理において、使い易い方を採用して、処理を進めることが可能となる。
[昇順形式の部分ツリー]
上述した昇順形式の集計配列においては、末端のノード(リーフ・ノード)のノード識別子は、出現値として出現しない。たとえば、図48Aに示すツリーは、昇順形式の集計配列を利用して、図48Bのように表わされる(符号4800参照)。図48Aから理解できるように、このツリーにおいて、リーフ・ノードのノード識別子は、「3」、「5」、「6」、「10」および「11」となる。図48Bに示す部分配列の出現値の項目を参照すると、上記ノード識別子「3」、「5」、「6」、「10」および「11」は出現していない。また、図48Bに示す部分配列を参照すれば理解できるように、出現回数の総和は、「全てのノード数−1」に等しい。
以下、昇順形式の部分ツリーの範囲の特定、および、昇順形式の部分ツリーの標準形式について説明する。
昇順形式の配列において部分ツリーを特定する方法は、概略的に、
集計配列において、頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
集計配列において、格納位置番号が増大するように、ノード識別子を参照し、ノード識別子に対応するノードが、頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、子孫ノードのノード識別子を更新するステップと、
頂点ノードの子孫ノードとなると判断されたノードのノード識別子と関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、を備える。
図49は、昇順形式の集計配列に基づいて、ある頂点ノードの部分ツリーを特定する処理を示すフローチャートである。図49に示すように、CPU12は、RAM14などメモリに記憶された頂点ノードリストから、頂点ノードを取り出す(ステップ4901)。次いで、CPU12は、集計配列において、取り出した頂点ノードが示す出現値および出現回数を参照して、初期的な算出値「出現値+出現回数+1」を算出する(ステップ4902)。この算出値は、以下のような意味を有する。
昇順形式の集計配列において、出現値は、ノード識別子に相当し、かつ、出現回数は、C−P配列において、そのノード識別子が幾つ出現したかを示す。したがって、少なくとも、頂点ノードリストにおいて、次の頂点ノードのノード識別子は(言い換えれば次の部分ツリーの頂点ノードのノード識別子は)、少なくとも算出値以上であることがわかる。
なお、後述するステップ4908で明らかになるように、集計配列において、該出現値の次の行の出現値(ノード識別子)が、この算出値以上の番号を持たない場合、さらに次行の出現回数を加算することで該行での算出値を補正することが出来る。このように次行の出現値が算出値に満たない場合、算出値に次行の出現回数を加算し、さらにその次の行の出現値と比較することを繰り返すうちに、算出値以上の出現値を発見することで、部分ツリーを特定することが出来る。
図50A〜Cは、図48Aに示すツリーにおいて、ある頂点ノード(ノード識別子=2)の部分ツリーを特定する処理の具体例を説明する図である。図50Aは、集計配列において、頂点ノードに対応する格納位置番号を、ポインタがさしている状態を示す。図50A〜Cにおいて、黒い矢印は頂点ノードに対応する格納位置番号を指している。また、白抜きの矢印は、後述する移動ポインタを示す。
この状態において、上述した算出値は、「2+2+1=5」となる。したがって、次の部分ツリーの頂点ノードのノード識別子は、「5」以上であることがわかる。
次いで、CPU12は、移動ポインタを、頂点ノードが示す格納位置番号に配置する(ステップ4903)。この位置が移動ポインタの初期位置となる。CPU12は、移動ポインタを、次の格納位置番号に移動し(ステップ4904)、集計配列において、移動ポインタが示す出現値を参照する(ステップ4905)。CPU12は、ステップ4902で算出した算出値と、ステップ4903で参照した出現値とを比較し、「算出値>出現値」であれば(ステップ4906でイエス(Yes))、移動ポインタが示す格納位置番号の出現値に関するノードが頂点ノードに属すること、を示す情報を生成し、メモリ中に記憶する(ステップ4907)。たとえば、上記情報を格納するために、上記出現値を格納した配列をメモリ中に生成しても良いし、或いは、集計配列において、上記情報として、格納位置番号に関連付けてフラグをセットしても良い。
その後、CPU12は、算出値を、「もとの算出値+ポインタが示す出現回数」に更新する(ステップ4908)。
図50Bに示すように、移動ポインタが格納位置番号「3」を示す状態では、その出現値は「4」となる。算出値「5」と出現値「4」とを比較すると、「算出値5>出現値4」であるため、ステップ4904でイエス(Yes)と判断され、出現値「4」、つまり、ノード識別子が「4」であるノードは、ノード識別子が「2」である頂点ノードに属し、その情報が、メモリ中に記憶される。また、算出値は、「5(もとの算出値)+1(ポインタが示す出現回数)=6」に更新される。
ステップ4906でノード判断された場合には、当該頂点ノードに関する部分ツリーの特定処理は終了する。図50Cに示すように、移動ポインタが格納位置番号「4」を示す状態では、その出現値は「7」となる。更新された算出値「6」と出現値「7」とを比較すると、「算出値6<出現値7」であるため、ステップ4906でノー(No)と判断される。よって、頂点ノード「2」の部分ツリーは、符号5001で示される範囲と特定される。
次に、昇順形式の集計配列によって表わされるツリーや部分ツリーの標準形式について説明する。これは、集計配列において、全ての出現値から、先頭の格納位置番号の出現値を減じればよい。図51は、図50A〜Cに示す処理で特定された、部分ツリーの昇順形式の集計配列を示す図である。ここでは、昇順形式の集計配列(符号5101参照)の出現値の各々から、先頭の格納位置番号の出現値「2」を減じる(符号5102参照)。これにより、標準化された昇順形式の集計配列を得ることができる(符号5103参照)。
末端ノードにおける昇順形式の集計配列を考える。図48Aに示す例において、末端ノードのノード識別子は、「3」、「5」、「6」、「10」および「11」となる。したがって、末端ノードのそれぞれを昇順形式の集計配列で表わすと、図51の符号5201のようになる。たとえば、最初の集計配列は、出現値「3」については(末端ノードであるため)、その出現回数が「0(ゼロ)」であることが示される。ここでも、標準化においては、それぞれの配列において、出現値に出現値を減じる、つまり、出現値を「0(ゼロ)」とすれば良い(符号5202参照)。
[トポロジー検索]
ツリー全体において、或いは、ある頂点ノードにより特定される部分ツリーにおいて、ツリー或いは部分ツリーと同じ接続態様、つまり、同一のトポロジーを有する部分ツリーを見出すことを考える。たとえば、図35Bに示すツリーにおいて、図35Aに示すツリーと同一のトポロジーを有する部分ツリーを探すと、図35Bにおいて点線で示す部分ツリーを特定することができる。これを、トポロジー検索と称する。トポロジー検索において、その検索結果は、検索により特定された部分ツリーの頂点ノードのノード識別子を含む配列(頂点ノードリスト)で表わすことができる。図35A、Bの例では、検索結果は、[7]となる。
ツリー全体から、検索キーとなるツリーと同一トポロジーの部分ツリーを見出す場合も、頂点ノードリストにより特定される部分ツリー群から、検索キーとなるツリーと同一トポロジーの部分ツリーを見出す場合も、アルゴリズムとしては同一であるため、以下の説明では区別することなく扱う。
なお、以下の説明において、検索キーとなるツリーを、検索トポロジーとも称する。トポロジーの検索は、概略的には、
検索キーとなるツリーを表現する検索キー配列として、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する配列を、記憶装置中に生成するステップと、
検索キー配列中のノード識別子にオフセットを与え、オフセットが与えられたノード識別子と、オフセットにしたがった第1の配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
比較により全てが一致した第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、記憶装置中に生成するステップと、を備える。
図36は、本実施の形態にかかるトポロジー検索処理を示すフローチャートである。図36に示すように、CPU12は、RAM14などのメモリに格納された検索トポロジーを表わすC−P配列を参照して、先頭の要素を削除した、検索キー配列を生成する(ステップ3601)。次いで、CPU12は、検索キー配列の値に加算するオフセット値を「0(ゼロ)」に初期化し(ステップ3602)、かつ、検索キー配列と、検索対象となるC−P配列との間の比較をすべき位置を示すポインタを初期位置に配置する(ステップ3603)。ステップ3603においては、ポインタは、C−P配列中、オフセット値に「1」を加えた位置に、初期的に位置する。たとえば、図37Aに示すように、初期的には、非各位置を示すポインタは、C−P配列中、「オフセット値(0)+1=1」を示す。このため、後述するように、検索キー配列の先頭の要素が、ポインタの示すC−P配列の格納位置番号「1」の要素と比較されることになる。
CPU12は、検索キー配列の要素のそれぞれにオフセット値を加算し、かつ、オフセット値が加算された検索キー配列の要素と、ポインタに示されるC−P配列の部分中、当該検索キー配列の要素に対応する要素とを比較し(ステップ3604)、それぞれの要素が一致するか否かを判断する(ステップ3605)。ステップ3605でイエス(Yes)と判断された場合には、CPU12は、比較対象となったC−P配列の部分の末尾のさらに次、つまり、末尾の格納位置番号に「1」を加えた格納位置番号の要素を参照し、当該要素が、比較対象となったC−P配列の部分により特定されるツリーと同一ブロックに属するか否かを判断する(ステップ3606)。具体的には、CPU12は、比較対象となったC−P配列の部分の末尾のさらに次の要素が、オフセット値以上であるか否かを調べ、オフセット値以上であれば、同一ブロックに属すると判断する。
ステップ3606でノー(No)と判断された場合には、オフセット値を、検索結果を格納するためのメモリ上に生成した頂点ノードリストに格納する(ステップ3607)。その後、CPU12は、ポインタを1つだけ下側、つまり、格納位置番号が「1」だけ増大するように移動するとともに(ステップ3608)、オフセット値を「1」だけ増大させる(ステップ3609)。ポインタの移動にともなって、新たにC−P配列において、比較対象となる部分が存在するか否かを判断し(ステップ3610)、存在する場合(ステップ3610でイエス(Yes))には、ステップ3604に戻る。
図37Aの例(オフセット値=0の例)では、検索キー配列の要素と、比較対象となったC−P配列の部分の要素(格納位置番号「1」〜「4」の要素)とは部分的に一致しないため、ステップ3605でノー(No)と判断される。図37Bの例(オフセット値=1の例)では、検索キー配列の要素と、比較対象となったC−P配列の部分の要素(格納位置番号「2」〜「5」の要素)とは全て一致する。しかしながら、比較対象となったC−P配列の末尾(格納位置番号=5)のさらに次(格納位置番号=6)の要素が、「1」であり、オフセット「1」以上である。したがって、ステップ3606でイエス(Yes)と判断される。図38A、Bの例(それぞれ、オフセット値=2,3の例)においても、ステップ3605でノー(No)と判断される。図39の例(オフセット値=7)の例では、ステップ3605でイエス(Yes)、ステップ3606でノー(No)と判断され、その結果、オフセット値「7」が頂点ノードリストに格納される。なお、図39の例では、比較対象となったC−P配列の末尾(格納位置番号=11)のさらに次の要素が存在しないため、ブロックの継続のチェック(つまり、次の要素とオフセットとの比較)は不要である。
[他のトポロジー検索]
たとえば、トポロジーに加えて、そのノードのタイプ(図2A,Bを参照して説明したノードの項目名情報)の一致も、検索条件とする場合も考えられる。この場合には、上記処理において、上記ステップ3606の後に、比較された各要素に対応するノードのタイプを比較し、当該タイプが一致した場合には、オフセット値を頂点ノードリストに格納すればよい。
[昇順形式の集計配列を利用したトポロジー検索]
トポロジー検索は、昇順形式の集計配列を利用しても実現できる。基本的には、検索キーとなるツリー(検索トポロジー)を表現した、標準化された昇順形式の集計配列と、ツリーの昇順形式の集計配列とを比較する。図53は、本実施の形態にかかる昇順形式を利用したトポロジー検索の処理を示すフローチャートである。図53の処理は、図36の処理(C−P配列を用いたトポロジー検索処理)とほぼ同様である。図36の処理においては、比較対象部分の次の要素が、当該比較対象部分と同一ブロックに属するかどうかの判断(ステップ3606)がされていたが、昇順形式の集計配列を利用すると、このステップを省略することができる。
昇順形式の集計配列を利用したトポロジー検索は、概略的には、
検索キーとなるツリーを表現する検索キー配列として、子ノードをもつノードについて、それぞれのノード識別子と、当該ノードを親ノードとする子ノードの出現数との組を、ノード識別子の順に配置した昇順形式の集計配列を、記憶装置中に生成するステップと、
検索キー配列中のノード識別子に、オフセットを与え、オフセットが与えられたノード識別子と、オフセットにしたがった集計配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
比較により全てが一致した集計配列の部分のノード識別子とその出現数とを含む、検索結果を示す集計配列を、記憶装置中に格納するステップと、を備える。
より詳細には、CPU12は、RAM14などのメモリに格納された検索トポロジーを表わす昇順形式の集計配列を参照して、検索キー配列を生成する(ステップ5301)。この検索キー配列は、標準化された昇順形式の集計配列である。次いで、CPU12は、検索キー配列と、検索対象となる集計配列との間の比較すべき位置を示すポインタを初期位置に配置する(ステップ5302)。ステップ5303においては、ポインタは、集計配列の格納位置番号「0(ゼロ)」の位置に配置される。また、CPU12は、検索キー配列の出現値に加算するオフセット値を、検索キー配列の先頭の出現値およびオフセット値の和と、比較対象部分の先頭の出現値とが一致するように、初期化する(ステップ5303)。図54Aの場合、検索キー配列の先頭の出現値は「0(ゼロ)」であり、かつ、比較対象部分の先頭の出現値は「0(ゼロ)」であるため、オフセット値も「0(ゼロ)」となる。
次いで、CPU12は、検索キー配列と、ポインタで示される集計配列の比較対象部分とを比較する(ステップ5304)。ここでは、ポインタで示される位置が、比較対象部分の先頭となる。
たとえば、図55Aに示すように、初期的には、検索キー配列の格納位置番号「0(ゼロ)」と、集計配列の格納位置番号「0+0(後者の0(ゼロ)はオフセット値)」とを揃えるように比較位置が決められる。
次いで、CPU12は、検索キー配列の出現値のそれぞれにオフセット値を加算し、かつ、オフセット値が加算された検索キー配列の出現値、および、出現回数の組と、比較対象部分の対応する位置の出現値、および、出現回数の組とを比較する(ステップ5304)。それぞれの要素の全てが一致した場合には(ステップ5305でイエス(Yes))、オフセット値を、検索結果を格納するためにメモリ上に生成した頂点ノードリストに格納する(ステップ5306)。その後、CPU12は、ポインタを1つだけ下側、つまり、格納位置番号が「1」だけ増大するように移動するとともに(ステップ5307)、オフセット値を、検索キー配列の先頭の出現値およびオフセット値の和が、ポインタ移動後の比較対象部分の先頭の出現値と一致するように増分する(ステップ5308)。ポインタの移動にともなって、新たに集計配列において、比較対象となる部分が存在するか否かを判断し(ステップ5309)、存在する場合(ステップ5309でイエス(Yes))には、ステップ5304に戻る。
図54Aの例(オフセット値=0の例)では、検索キー配列においてオフセット値が加えられた出現値と、比較対象部分の出現値とは一致するが、出現回数が一致しない。したがって、ステップ5305でノー(No)と判断される。図54Bの例(オフセット値=1の例)においても、出現値は一致するが、出現回数が一致しない。さらに、図55Aの例(オフセット値=2の例)では、出現値が不一致となる。
これに対して、図55Bの例(では、出現値および出現回数が全て一致する。したがって、検索結果を表わす頂点ノードリストは、[7]となる。
昇順形式の集計配列を利用すると、検索キー配列と比較対象部分との間の比較処理の回数を少なくすることができる。また、比較処理において、同一ブロックの判断処理(図36のステップ3606)を省略することができる。
[トポロジー集計]
次に、トポロジー集計について説明する。トポロジー集計とは、以下のような2つの態様を考えることができる。
(1)トポロジーを次元として、ツリーにおいて、そのトポロジー種の件数を求める。
(2)トポロジーを次元として、ツリーにおいて、そのトポロジー種に属する指定の測度(たとえば、年齢、体重など)の件数、最大値、最小値、合計値、平均値などを求める。
基本的に、(1)の集計(「第1のトポロジー」と称する。)集計を実行すれば、(2)の集計(「第2のトポロジー集計」と称する。)、つまり、そのトポロジー種に属する測度の演算は容易である。したがって、まず、第1のトポロジー集計について説明する。
ここで、測度について簡単に説明する。図2A、Bを参照して説明したように、実際のノードにおいて、項目名情報、すなわち、ノードのタイプと、項目値情報、すなわち、ノードの値が関連付けられている。上記ノードにおける、項目名情報(ノードのタイプ)および項目値情報(ノードの実際の値)が、上記測度になる場合がある。
[第1のトポロジー集計]
図40Aに示すツリーを考える。ここで、頂点ノードリスト[2,7,8]で特定される部分ツリー群において、トポロジー種ごとの件数を求めることを考える。その結果、トポロジー4011が、頂点ノードリスト[2,8]で示される2つの部分ノードとして現れる。また、トポロジー4012は、頂点ノードリスト[7]で示される1つの部分ノードとして現れる。したがって、トポロジー4011が2件、トポロジー4012が1件というトポロジー集計結果が得られる(図40B参照)。
トポロジー集計は、概略的には、
部分ツリーの頂点ノードを格納した頂点ノードリストを、記憶装置中に生成するステップと、
頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、第1の配列中の部分を特定するステップと、
第1の配列中の部分のそれぞれについて、部分ツリーの頂点ノードが、ルート・ノードとなるように、ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、記憶装置中に生成するステップと、
生成された第2の配列を参照して、第2の配列の種別ごとに、生成された配列数をカウントし、配列数を第2の配列の種別と関連付けて、記憶装置中に記憶するステップと、を備える。
より具体的に、本実施の形態にかかる情報処理装置における第1のトポロジー集計処理について説明する。図41に示すように、CPU12は、RAM14などのメモリに記憶された頂点ノードリストを参照して、その値(頂点ノードのノード識別子)を取り出す(ステップ4101)。次いで、CUP12は、C−P配列中、頂点ノードで指定される部分ツリーの範囲を特定する(ステップ4102)。これは、たとえば、図42に示す処理により実現できる。
図42に示すように、CPU12は、まず、C−P配列中、頂点ノードのノード識別子に「1」を加えた格納位置番号が示す要素を参照する(ステップ4201)。次いで、参照されたC−P配列中の要素が、頂点ノードのノード識別子以上であるか否かが判断される(ステップ4202)。ステップ4202でイエス(Yes)と判断された場合には、この要素に関する格納位置番号に相当するノードは、頂点ノードで特定される部分ツリーに属するため、CPU12は、この格納位置番号をメモリ中に一時的に記憶する(ステップ4203)。次いで、CPU12は、C−P配列中の参照すべき格納位置番号を「+1」し、当該格納位置番号が、C−P配列の末尾の格納位置番号を超えない限り(ステップ4205でノー(No))、CPU12は、ステップ4202〜4204の処理を繰り返す。これにより、頂点ノードの部分ツリーに属するノードのノード識別子に対応する格納位置番号を取得することができる。
次いで、CPU12は、C−P配列中、頂点ノードで指定される部分ツリーに相当する部分配列を標準形式に変換する(ステップ4103)。標準変換は、図24に示す処理を実行することにより実現される。
CPU12は、全ての頂点ノードについて、ステップ4102および4103の処理を実行し(ステップ4104参照)、各頂点ノードについて、標準化された部分配列を得ておく。得られた部分配列は、RAM14などメモリに記憶しておけば良い。次いで、CPU12は、標準形式の部分配列を比較して、部分配列ごとに、幾つ存在したかをカウントする(ステップ4105)。この部分配列およびカウント値が、第1のトポロジー集計による集計結果となる。
なお、ツリー全体を処理対象として、第1のトポロジー集計を実施する場合には、頂点ノードリストに、全てのノード識別子を格納すればよい。
図43A〜Cは、第1のトポロジー集計処理の例を示す図である。図43A〜Cのそれぞれにおいて、頂点ノードで指定される部分ツリーの範囲(符号4301、4311、4321参照)の特定、標準形式による部分配列(符号4302、4312、4322参照)の取得により、標準形式による部分配列[−1,0,0]が2件、部分配列[−1,0,1,1,0]が1件だけ存在するという結果が得られる。
[第2のトポロジー集計]
第2のトポロジー集計においては、第1のトポロジー集計の結果から、分類された部分配列ごとに、さらに、指定された測度の件数や、指定された値に関する演算値(最大値、最小値、合計値、平均値など)を求めればよい。
[昇順形式の集計配列を利用したトポロジー集計]
トポロジー集計は、昇順形式の集計配列を利用しても実現できる。図40Aに示すツリーは、昇順形式の集計配列を用いると、図56のように表すことができる。図40Aに示す例と同様に、頂点ノードリスト[2,7,8]で特定される部分ツリー群において、トポロジー種ごとの件数を求めることを考える。
昇順形式の集計配列を利用したトポロジー集計は、概略的には、
部分ツリーの頂点ノードを格納した頂点ノードリストを、記憶装置中に生成するステップと、
集計配列において、頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
集計配列において、格納位置番号が増大するように、ノード識別子を参照し、ノード識別子に対応するノードが、頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、子孫ノードのノード識別子を更新するステップと、
頂点ノードの子孫ノードとなると判断されたノードのノード識別子とおよび関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、
部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップと、
生成された標準形式の部分配列を参照して、標準形式の部分配列の種別ごとに、生成された配列数をカウントし、配列数を種別と関連付けて、記憶装置中に記憶するステップと、を備える。
図57は、昇順形式の集計配列を利用したトポロジー集計の処理を示すフローチャートである。図57に示すように、CPU12は、RAM14などのメモリに記憶した頂点ノードリストを参照して、その値(頂点ノードのノード識別子)を取り出す(ステップ5701)。次いで、CPU12は、処理対象となった集計配列中、取り出された頂点ノードの部分ツリーの範囲を特定する(ステップ5702)。これは、図49の処理を実行することにより実現される。ステップ5702により、部分ツリーの範囲を示す集計配列が生成される。
CPU12は、ステップ5702で得られた部分ツリーの範囲を示す集計配列を標準形式に変換する(ステップ5703)。これは、図51および図52を参照して説明したように、集計配列において、全ての出現値から、先頭の格納位置番号の出現値を減じることにより実現できる。
ステップ5701〜5703の処理を全ての頂点ノードについて実行した後(ステップ5704参照)、各頂点ノードについて、標準化された(つまり標準形式の)集計配列を得ておく。得られた集計配列は、RAM14などのメモリに記憶しておけば良い。次いで、CPU12は、集計配列を比較して、集計配列ごとに、幾つ存在したかをカウントする(ステップ5705)。この部分ツリーの範囲を示す集計配列およびそのカウント値が、トポロジー集計の集計結果となる。
図56の例においては、上記処理の結果、図58Aに示すように、それぞれの頂点ノードについて、3つの部分ツリーの範囲を示す集計配列を得ることができる。図58Aにおいて、符号5801〜5803は、それぞれ、頂点ノード「2」、「7」、「8」に関する部分ツリーの範囲を示す集計配列である。したがって、図58Bに示すような集計結果を得ることができる。
[トポロジーソート]
たとえば、上記集計結果について、件数を昇順或いは降順として並べて表示することが望まれる場合がある。つまり、推移律を満たす大小の尺度に基づいて、最小のものから最大のもの(或いはその逆)に連続してアクセスできる配列を生成することが望まれる場合がある。このように上記大小の尺度に基づく配列を生成することをソートと称する。
図44Aに示すツリー群において、頂点ノードリストを、各頂点ノードに示される部分ツリーのノード数で昇順にソートすることを考える。この場合、図44Bに示すように、ソート後の頂点ノードリストは、[2,8,7]となる。これは、頂点ノード「2」、「8」で示される部分ノードのノード数が「3」となり、その一方、頂点ノード「7」で示される部分ノードのノード数は「5」となるからである。無論、ソート順は、これに限定されるものではなく、集計に関して説明した測度を採用しても良い。
トポロジーソートの処理は、概略的には、
第1の配列により特定されるツリーの部分ツリーの順序をソートする方法であって、
部分ツリーの頂点ノードを格納した頂点ノードリストを、記憶装置中に生成するステップと、
頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、第1の配列中の部分を特定するステップと、
第1の配列中の部分のそれぞれについて、部分ツリーの頂点ノードが、ルート・ノードとなるように、ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、記憶装置中に生成するステップと、
生成された第2の配列を参照して、設定された評価基準にしたがって、頂点ノードのノード識別子の順序を入れ替えるステップと、を備える。
図45は、本実施の形態にかかるトポロジーソートの一例を示す図である。図45に示すように、この例にかかるトポロジーソート処理は、第1のトポロジー集計処理に類似し、図45のステップ4501〜4504は、図41のステップ4101〜4104と同様である。したがって、図46Aに示す例(図43Aのものと同様である)では、頂点ノードリスト中の全ての頂点ノードについて、ステップ4501〜4503の処理を実行すると、頂点ノード「2」、「7」および「8」について、それぞれ、図46B〜Dに示す標準形式の配列を得ることができる。図44Bに示すソートの大小比較基準(ノード数でソート)にしたがうと、図46Eに示すように、頂点ノードの順序が入れ替えられた頂点ノードリストを得ることが可能となる。
[情報処理装置]
図47は、本発明の実施の形態にかかるツリー型データ構造を構築し、頂点ノードリストを生成し、ツリー型データ構造を構築する種々の配列を生成して、これをメモリに記憶し、かつ、トポロジー検索、トポロジー集計およびトポロジーソートの処理を実行する情報処理装置の例を示す機能ブロックダイヤグラムである。この情報処理装置4700は、実際には、図1に示すコンピュータシステム10に必要なプログラムをインストールすることにより実現される。
図47に示すように、情報処理装置4700は、ツリー型データ構造を表現するデータ、頂点ノードリストを含む種々の配列を記憶する記憶部4701と、ルート・ノードを含むノードに固有のノード識別子を付与し、ノード識別子を記憶部3501に格納するノード定義部4702と、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付け、当該関連付けを示す配列であるC−P配列を記憶部4701に格納する親子関係定義部4703と、記憶部4701に格納されたノード識別子およびC−P配列に基づいて、部分ツリーを表現する標準化された部分配列を生成する標準化処理部4704と、C−P配列や部分配列を昇順形式の集計配列に変換する昇順形式処理部4705と、トポロジー検索処理を実行するトポロジー検索処理部4706と、トポロジー集計処理を実行するトポロジー集計処理部4707と、トポロジーソート処理を実行するトポロジーソート処理部4708とを有している。標準化処理部4704、昇順形式処理部4705、トポロジー検索処理部4706、トポロジー集計処理部4707およびトポロジーソート処理部4708による処理結果や生成された配列は、記憶部4701に記憶される。
好ましくは、ノード定義部4702は、ノード識別子として数値を用い、より好ましくは、ノード識別子として連続する整数を用いる。また、親子関係定義部4703は、非ルート・ノードの各々に付与されたノード識別子と、関連付けられた親ノードに付与されたノード識別子と、の組の配列を記憶部4701に格納する。
また、入力装置(図1の符号24参照)からの指示などにより、ノードが指定されると、頂点ノードリスト生成部4704は、指定されたノードのノード識別子を、頂点ノードリスト中に格納する。また、入力装置からの指示にしたがって、トポロジー検索処理部4706、トポロジー集計処理部4707、トポロジーソート処理部4708は、前述したようなトポロジー検索処理、トポロジー集計処理およびトポロジーソート処理を、それぞれ実行する。その際に、必要に応じて、標準化処理部4704および昇順形式処理部4705も処理を実行して所定の配列を生成し、その配列を記憶部4701に記憶する。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
図1は、本発明の実施の形態にかかるツリー型データ構造を取り扱うコンピュータシステムのブロックダイヤグラムである。 図2A、Bは、ツリー形式データの一例であるPOSデータの説明図であり、図2Aは、このツリー形式データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した例であり、図2Bは、同じツリー形式データをXML形式で表現した例である。 図3A〜Cは、アークリストを用いたツリー型データ構造の表現形式の例の説明図である。 図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。 図5は、本発明の一実施例によるツリー型データ構造を記憶装置上に構築する方法のフローチャートである。 図6A〜Cは、本発明の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。 図7A〜Cは、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。 図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。 図9は、本発明の一実施例により作成された「子→親」表現に基づく親子関係の配列の説明図である。 図10は、図6Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。 図11は、本発明の一実施例による幅優先に基づくノード定義処理のフローチャートである。 図12は、本発明の一実施例により作成された「子→親」表現に基づく親子関係の配列の説明図である。 図13は、図7Cに示された幅優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。 図14Aは、幅優先モードに基づくツリー型データ構造、図14Bは、当該ツリー型データ構造を、「子→親」表現に基づく親子関係の配列を示す図である。 図15Aは、頂点ノードリストの例、図15Bは、頂点ノードリストで特定される部分ツリー群の例を示す図である。 図16Aは、検索処理により得られた頂点ノードリストの例、図16Bは、頂点ノードリストで特定される部分ツリー群の例を示す図である。 図17Aは、集計処理により得られた頂点ノードリストおよび集計結果を示す配列の例、図17Bは、頂点ノードリストで特定される部分ツリー群の例を示す図である。 図18Aは、ノード数でソートされた頂点ノードリスト、および、対応するノード数を示す配列の例、図18Bは、頂点ノードリストで特定される部分ツリーの例を示す図である。 図19A、Cは、それぞれ、論理積演算の対象となる頂点ノードリストの例、図19B、Dは、それぞれ頂点ノードリストで特定される部分ツリー群の例を示す図である。 図20Aは、論理積演算の結果を示す頂点ノードリストの例、図20Bは、頂点ノードリストで特定される部分ツリー群を示す図である。 図21は、あるノードを表現するC−P配列、および、部分ツリー群を特定する頂点ノードリストの例を示す図である。 図22は、図21の頂点ノードリスト中の頂点ノードによりそれぞれ特定される部分ツリーを示す図である。 図23A、Bは、本実施の形態にかかる部分ツリーの標準化の概略を示す図である。 図24は、本実施の形態にかかる部分ツリーの標準化の例を示すフローチャートである。 図25は、部分ツリーを表わす標準化された部分配列の例を示す図である。 図26は、本実施の形態にかかる昇順形式の配列の例を説明するための図である。 図27は、昇順形式の集計配列と、C−P配列との間の相互変換の概略を説明する図である。 図28は、本実施の形態にかかる集計配列からC−P配列への変換処理の例を示すフローチャートである。 図29A、Bは、集計処理からC−P配列への変換処理の具体例を示す図である。 図30A、Bは、集計処理からC−P配列への変換処理の具体例を示す図である。 図31A、Bは、集計処理からC−P配列への変換処理の具体例を示す図である。 図32A、Bは、集計処理からC−P配列への変換処理の具体例を示す図である。 図33A、Bは、集計処理からC−P配列への変換処理の具体例を示す図である。 図34A、Bは、集計処理からC−P配列への変換処理の具体例を示す図である。 図35A、Bは、本実施の形態にかかるトポロジー検索の概略を説明する図である。 図36は、本実施の形態にかかるトポロジー検索処理の例を示すフローチャートである。 図37A、Bは、トポロジー検索処理の具体例を示す図である。 図38A、Bは、トポロジー検索処理の具体例を示す図である。 図39は、トポロジー検索処理の具体例を示す図である。 図40A、Bは、本実施の形態にかかる第1のトポロジー集計の概略を説明する図である。 図41は、本実施の形態にかかる第1のトポロジー集計処理の例を示すフローチャートである。 図42は、図41のステップ4102をより詳細に示すフローチャートである。 図43A〜Cは、第1のトポロジー集計処理の具体例を示す図である。 図44A、Bは、本実施の形態にかかるトポロジーソートの概略を説明する図である。 図45は、本実施の形態にかかるトポロジーソート処理の例を示すフローチャートである。 図46A〜Eは、本実施の形態にかかるトポロジーソート処理の具体例を示す図である。 図47は、本発明の実施の形態にかかるツリー型データ構造を構築し、頂点ノードリストを生成し、ツリー型データ構造を構築する種々の配列を生成して、これをメモリに記憶し、かつ、トポロジー検索、トポロジー集計およびトポロジーソートの処理を実行する情報処理装置の例を示す機能ブロックダイヤグラムである。 図48A、Bは、ツリーの例および当該ツリーを表わす昇順形式の集計配列を示す図である。 図49は、昇順形式の集計配列に基づいて、ある頂点ノードの部分ツリーを特定する処理を示すフローチャートである。 図50A〜Cは、頂点ノードの部分ツリーを特定する処理の具体例を示す図である。 図51は、昇順形式の集計配列の標準形式を示す図である。 図52は、昇順形式の集計配列の標準形式を示す図である。 図53は、本実施の形態にかかる昇順形式を利用したトポロジー検索の処理を示すフローチャートである。 図54A、Bは、本実施の形態にかかる標準形式を利用したトポロジー検索の具体例を示す図である。 図55A、Bは、本実施の形態にかかる標準形式を利用したトポロジー検索の具体例を示す図である。 図56は、図40Aに示すツリーを表わす昇順形式の集計配列、および、頂点ノードリストの例を示す図である。 図57は、図57は、昇順形式の集計配列を利用したトポロジー集計の処理を示すフローチャートである。 図58は、図58A、Bは、昇順形式の集計配列を利用したトポロジー集計の処理結果を示す図である。
符号の説明
10 コンピュータシステム
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 CD−ROMドライバ
22 I/F
24 入力装置
26 表示装置
4700 情報処理装置
4701 記憶部
4702 ノード定義部
4703 親子関係定義部
4704 標準化処理部
4705 昇順形式処理部
4706 トポロジー検索処理部
4707 トポロジー集計処理部
4708 トポロジーソート処理部
【0040】
別子とを比較するステップと、
比較により全てが一致した第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、記憶装置中に生成するステップと、を備える。
[0137]
図36は、本実施の形態にかかるトポロジー検索処理を示すフローチャートである。図36に示すように、CPU12は、RAM14などのメモリに格納された検索トポロジーを表わすC−P配列を参照して、先頭の要素を削除した、検索キー配列を生成する(ステップ3601)。次いで、CPU12は、検索キー配列の値に加算するオフセット値を「0(ゼロ)」に初期化し(ステップ3602)、かつ、検索キー配列と、検索対象となるC−P配列との間の比較をすべき位置を示すポインタを初期位置に配置する(ステップ3603)。ステップ3603においては、ポインタは、C−P配列中、オフセット値に「1」を加えた位置に、初期的に位置する。たとえば、図37Aに示すように、初期的には、比較位置を示すポインタは、C−P配列中、「オフセット値(0)+1=1」を示す。このため、後述するように、検索キー配列の先頭の要素が、ポインタの示すC−P配列の格納位置番号「1」の要素と比較されることになる。
[0138]
CPU12は、検索キー配列の要素のそれぞれにオフセット値を加算し、かつ、オフセット値が加算された検索キー配列の要素と、ポインタに示されるC−P配列の部分中、当該検索キー配列の要素に対応する要素とを比較し(ステップ3604)、それぞれの要素が一致するか否かを判断する(ステップ3605)。ステップ3605でイエス(Yes)と判断された場合には、CPU12は、比較対象となったC−P配列の部分の末尾のさらに次、つまり、末尾の格納位置番号に「1」を加えた格納位置番号の要素を参照し、当該要素が、比較対象となったC−P配列の部分により特定されるツリーと同一ブロックに属するか否かを判断する(ステップ3606)。具体的には、CPU12は、比較対象となったC−P配列の部分の末尾のさらに次の要素が、オフセット値以上であるか否かを調べ、オフセット値以上であれば、同一ブロックに属すると判断する。
[0139]
ステップ3606でノー(No)と判断された場合には、オフセット値を、検索結果を格納するためのメモリ上に生成した頂点ノードリストに格納する(ステップ3607)。その後、CPU12は、ポインタを1つだけ下側、つまり、格納位置番号が「1」だけ増大するように移動するとともに(ステップ3608)、オフセット値を「1」だけ増大させる(ステップ36

Claims (32)

  1. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    それぞれが特定のノードおよびその子孫ノードを含む1以上のノード群である部分ツリーを表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した頂点ノードリストを、記憶装置中に生成するステップと、
    前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
    前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、を備えたことを特徴とする配列の生成方法。
  2. 前記第1の配列中の部分を特定するステップが、頂点ノードのノード識別子が示す前記第1の配列中の位置から、ノード識別子が増大する方向に、前記第1の配列中の値が、前記頂点ノード識別子が示す前記第1の配列中の値より大きい範囲を特定するステップを含むことを特徴とする請求項1に記載の方法。
  3. 前記標準形式の第2の配列を生成するステップが、前記第1の配列の部分と同一サイズの配列の領域であって、その格納位置番号として、前記ルート・ノードのノード識別子を初期値とする連続する整数が与えられた領域を、前記記憶装置中に確保するステップと、
    前記第1の配列の部分に格納された値から、頂点ノードのノード識別子を減じた値を、それぞれ、前記領域に格納するステップと、を含むことを特徴とする請求項1または2に記載の方法。
  4. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    前記第1の配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する、部分ツリーを検索する方法であって、
    検索キーとなるツリーを表現する検索キー配列として、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する配列を、記憶装置中に生成するステップと、
    前記検索キー配列中のノード識別子にオフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記第1の配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
    前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を備えたことを特徴とする検索方法。
  5. 前記ノード識別子の全てが一致した場合に、当該第1の配列中の部分の末尾の次のノード識別子を参照して、当該ノード識別子に対応するノードが、前記頂点ノードにより特定される部分ツリーに含まれるか否かを判断するステップと、
    前記部分ツリーに含まれない場合に、前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置に生成するステップと、を備えたことを特徴とする請求項4に記載の検索方法。
  6. 前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
    さらに、前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
    全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を備えたことを特徴とする請求項4または5に記載の検索方法。
  7. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    第1の配列により特定されるツリーの部分ツリーを集計する方法であって、
    前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
    前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
    前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
    前記生成された第2の配列を参照して、第2の配列の種別ごとに、生成された配列数をカウントし、配列数を前記第2の配列の種別と関連付けて、前記記憶装置中に記憶するステップと、を備えたことを特徴とする集計方法。
  8. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    前記第1の配列により特定されるツリーの部分ツリーの順序をソートする方法であって、
    前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
    前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
    前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
    前記生成された第2の配列を参照して、設定された評価基準にしたがって、前記頂点ノードのノード識別子の順序を入れ替えるステップと、を備えたことを特徴とするソート方法。
  9. ツリー型データ構造を記憶装置中に構築する方法であって、
    同じ世代よりも子ノードを優先して、ルート・ノードを含むノードに、ノード識別子として、固有の連続する整数を付与するステップと、
    子ノードをもつノードについて、それぞれのノード識別子と、当該子ノードをもつノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、前記記憶装置中に生成するステップと、を備えたことを特徴とするツリー型データ構造の構築方法。
  10. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    前記第1の配列中のノード識別子と、前記第1の配列においてノード識別子が出現する数を示す出現数との組を、前記第1の配列中のノード識別子の順に配置した昇順形式の集計配列を、前記記憶装置中に生成するステップを備えたことを特徴とする配列の生成方法。
  11. 請求項9に記載された集計配列に基づき、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列を生成する方法であって、
    前記集計配列中の出現数に基づき、ノード識別子を格納位置番号とする第1の配列のための領域を、前記記憶装置中に確保するステップと、
    前記集計配列および第1の配列のそれぞれにおいて、第1のポインタおよび第2のポインタを初期位置に配置するステップと、
    前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致する場合に、前記第1のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第1のポインタが示す出現数を「1」だけ減じ、かつ、第1のポインタおよび第2のポインタを、その格納位置番号が増大するように移動させるステップと、
    前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致しない場合に、前記集計配列において、前記第1のポインタに初期的に配置される第3のポインタを、その格納位置番号を減じるように移動させて、最初に、集計配列において、その出現数が「0」とならない位置を特定して、当該第3のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第3のポインタが示す出現数を「1」だけ減じ、かつ、第2のポインタを、その格納位置番号が増大するように移動させるステップと、を備えたことを特徴とする配列の生成方法。
  12. 請求項9に記載された集計配列から、頂点ノードおよびその子孫ノードを含む部分ツリーを表わす部分配列を生成する方法であって、
    前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
    前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
    前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子と前記関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、を備えたことを特徴とする配列の生成方法。
  13. さらに、前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップを備えたことを特徴とする請求項12に記載の配列の生成方法。
  14. 請求項9に記載された集計配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する部分ツリーを検索する方法であって、
    前記検索キーとなるツリーを表現する検索キー配列として、子ノードをもつノードについて、それぞれのノード識別子と、当該ノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、記憶装置中に生成するステップと、
    前記検索キー配列中のノード識別子に、オフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記集計配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
    前記比較により全てが一致した集計配列の部分のノード識別子とその出現数とを含む、検索結果を示す集計配列を、前記記憶装置中に格納するステップと、を備えたことを特徴とする検索方法。
  15. 前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
    さらに、前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
    全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記集計配列中の部分のノード識別子とその出現数とを含む、検索結果を表わす集計配列を、前記記憶装置中に生成するステップと、を備えたことを特徴とする請求項14に記載の検索方法。
  16. 請求項9に記載された集計配列に基づき、当該集計配列により特定されるツリーの部分ツリーを集計する方法であって、
    前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
    前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
    前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
    前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子とおよび関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、
    前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップと、
    前記生成された標準形式の部分配列を参照して、前記標準形式の部分配列の種別ごとに、生成された配列数をカウントし、配列数を前記種別と関連付けて、前記記憶装置中に記憶するステップと、を備えたことを特徴とする集計方法。
  17. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、部分ツリーを表わす配列を生成するために、前記コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    それぞれが特定のノードおよびその子孫ノードを含む1以上のノード群である部分ツリーを表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した頂点ノードリストを、記憶装置中に生成するステップと、
    前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
    前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラム。
  18. 前記第1の配列中の部分を特定するステップにおいて、
    頂点ノードのノード識別子が示す前記第1の配列中の位置から、ノード識別子が増大する方向に、前記第1の配列中の値が、前記頂点ノード識別子が示す前記第1の配列中の値より大きい範囲を特定するステップを、前記コンピュータに実行させることを特徴とする請求項17に記載のコンピュータプログラム。
  19. 前記標準形式の第2の配列を生成するステップにおいて、
    前記第1の配列の部分と同一サイズの配列の領域であって、その格納位置番号として、前記ルート・ノードのノード識別子を初期値とする連続する整数が与えられた領域を、前記記憶装置中に確保するステップと、
    前記第1の配列の部分に格納された値から、頂点ノードのノード識別子を減じた値を、それぞれ、前記領域に格納するステップと、を前記コンピュータに実行させることを特徴とする請求項17または18に記載のコンピュータプログラム。
  20. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    前記第1の配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する、部分ツリーを検索するために、前記コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    検索キーとなるツリーを表現する検索キー配列として、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する配列を、記憶装置中に生成するステップと、
    前記検索キー配列中のノード識別子にオフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記第1の配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
    前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラム。
  21. 前記コンピュータに、
    前記ノード識別子の全てが一致した場合に、当該配列の部分の末尾の次のノード識別子を参照して、当該ノード識別子に対応するノードが、前記頂点ノードにより特定される部分ツリーに含まれるか否かを判断するステップと、
    前記部分ツリーに含まれない場合に、前記比較により全てが一致した前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置中に生成するステップと、を実行させることを特徴とする請求項20に記載のコンピュータプログラム。
  22. 前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
    さらに、前記コンピュータに、
    前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
    全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記第1の配列中の部分のノード識別子を含む、検索結果を示す頂点ノードリストを、前記記憶装置に生成するステップと、を実行させることを特徴とする請求項20または21に記載のコンピュータプログラム。
  23. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    第1の配列により特定されるツリーの部分ツリーを集計するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
    前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
    前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
    前記生成された第2の配列を参照して、第2の配列の種別ごとに、生成された配列数をカウントし、配列数を前記第2の配列の種別と関連付けて、前記記憶装置中に記憶するステップと、実行させることを特徴とするコンピュータプログラム。
  24. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
    前記第1の配列により特定されるツリーの部分ツリーの順序をソートするために、前記コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
    前記頂点ノードリストに格納されたノード識別子に対応する頂点ノードのそれぞれにより特定される部分ツリーを表す、前記第1の配列中の部分を特定するステップと、
    前記第1の配列中の部分のそれぞれについて、前記部分ツリーの頂点ノードが、ルート・ノードとなるように、前記ノード間の親子関係が、頂点ノード以外のノードである非頂点ノードの各々に付与されたノード識別子に対応する、非頂点ノードの各々に関連付けられた親ノードのノード識別子により表現された、標準形式の第2の配列を、前記記憶装置中に生成するステップと、
    前記生成された第2の配列を参照して、設定された評価基準にしたがって、前記頂点ノードのノード識別子の順序を入れ替えるステップと、を実行させることを特徴とするコンピュータプログラム。
  25. ツリー型データ構造を、コンピュータの記憶装置中に構築するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    同じ世代よりも子ノードを優先して、ルート・ノードを含むノードに、ノード識別子として、固有の連続する整数を付与するステップと、
    子ノードをもつノードについて、それぞれのノード識別子と、当該子ノードをもつノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、前記記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラム。
  26. 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに、固有の連続する整数となるノード識別子が付与され、
    ノード間の親子関係が、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、前記ツリー型データ構造を、当該コンピュータの記憶装置中に構築するために、前記コンピュータにより読み出し可能な実行させるコンピュータプログラムであって、
    前記コンピュータに、
    前記第1の配列中のノード識別子と、当該値の出現する数である出現数との組を、前記第1の配列中のノード識別子の順に配置した昇順形式の集計配列を生成し、当該集計配列を、前記記憶装置に格納するステップを実行させることを特徴とするコンピュータプログラム。
  27. 請求項25に記載された集計配列に基づき、ノード間の親子関係を表現する、ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に対応する、非ルート・ノードの各々に関連付けられた親ノードのノード識別子を有する第1の配列を生成するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    前記集計配列中の出現数に基づき、ノード識別子を格納位置番号とする第1の配列のための領域を、前記記憶装置中に確保するステップと、
    前記集計配列および第1の配列のそれぞれにおいて、第1のポインタおよび第2のポインタを初期位置に配置するステップと、
    前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致する場合に、前記第1のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第1のポインタが示す出現数を「1」だけ減じ、かつ、第1のポインタおよび第2のポインタを、その格納位置番号が増大するように移動させるステップと、
    前記集計配列中、前記第1のポインタが示すノード識別子と、前記第2のポインタが示す格納位置番号から「1」を減じた値とが一致しない場合に、前記集計配列において、前記第1のポインタに初期的に配置される第3のポインタを、その格納位置番号を減じるように移動させて、最初に、集計配列において、その出現数が「0」とならない位置を特定して、当該第3のポインタが示すノード識別子を、第1の配列において、前記第2のポインタが示す格納位置番号に対応する値として格納するとともに、集計配列中、前記第3のポインタが示す出現数を「1」だけ減じ、かつ、第2のポインタを、その格納位置番号が増大するように移動させるステップと、を実行させることを特徴とするコンピュータプログラム。
  28. 請求項25に記載された集計配列から、頂点ノードおよびその子孫ノードを含む部分ツリーを表わす部分配列を生成するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
    前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
    前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子と前記関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラム。
  29. さらに、前記コンピュータに、
    前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップを実行させることを特徴とする請求項28に記載のコンピュータプログラム。
  30. 請求項25に記載された集計配列により特定されるツリー中、検索キーとなるツリーと同一のトポロジーを有する部分ツリーを検索するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    前記検索キーとなるツリーを表現する検索キー配列として、子ノードをもつノードについて、それぞれのノード識別子と、当該ノードを親ノードとする子ノードの出現数との組を、前記ノード識別子の順に配置した昇順形式の集計配列を、記憶装置中に生成するステップと、
    前記検索キー配列中のノード識別子に、オフセットを与え、前記オフセットが与えられたノード識別子と、前記オフセットにしたがった前記集計配列中の部分に含まれる、対応するノード識別子とを比較するステップと、
    前記比較により全てが一致した集計配列中の部分のノード識別子とその出現数とを含む、検索結果を示す集計配列を、前記記憶装置中に生成するステップと、を実行させることを特徴とするコンピュータプログラム。
  31. 前記ノードが、データを表わす少なくとも一つの実体情報が関連付けられ、
    さらに、前記コンピュータに、
    前記比較により全てが一致した部分のノード識別子により特定されるノードに関連付けられた実体情報と、検索キー配列のノード識別子により特定されたノードに関連付けられた実体情報とを、それぞれ比較するステップと、
    全ての実体情報が、前記キー配列に関する対応する実体情報と一致したような、前記集計配列中の部分のノード識別子とその出現数とを含む、検索結果を表わす集計配列を、前記記憶装置に生成するステップと、を実行させることを特徴とする請求項30に記載のコンピュータプログラム。
  32. 請求項25に記載された集計配列に基づき、当該集計配列により特定されるツリーの部分ツリーを集計するために、コンピュータにより読み出し可能なコンピュータプログラムであって、
    前記コンピュータに、
    前記部分ツリーの頂点ノードを格納した頂点ノードリストを、前記記憶装置中に生成するステップと、
    前記集計配列において、前記頂点ノードのノード識別子と、当該ノード識別子に関連付けられた出現数とに基づき、少なくとも子孫ノードとなるノードのノード識別子を初期的に算出するステップと、
    前記集計配列において、格納位置番号が増大するように、ノード識別子を参照し、前記ノード識別子に対応するノードが、前記頂点ノードの子孫ノードとなるか否かを判断するとともに、当該集計配列のノード識別子に関連付けられた出現数を参照して、前記子孫ノードのノード識別子を更新するステップと、
    前記頂点ノードの子孫ノードとなると判断されたノードのノード識別子とおよび関連付けられた出現数との組を、部分配列として記憶装置中に生成するステップと、
    前記部分配列において、そのノード識別子から、先頭のノード識別子を減じて、標準形式の部分配列を、記憶装置中に生成するステップと、
    前記生成された標準形式の部分配列を参照して、前記標準形式の部分配列の種別ごとに、生成された配列数をカウントし、配列数を前記種別と関連付けて、前記記憶装置中に記憶するステップと、を実行させることを特徴とするコンピュータプログラム。
JP2007500493A 2005-01-25 2006-01-23 ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム Expired - Fee Related JP4653157B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2005016373 2005-01-25
JP2005016373 2005-01-25
PCT/JP2006/300940 WO2006080268A1 (ja) 2005-01-25 2006-01-23 ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム

Publications (2)

Publication Number Publication Date
JPWO2006080268A1 true JPWO2006080268A1 (ja) 2008-08-07
JP4653157B2 JP4653157B2 (ja) 2011-03-16

Family

ID=36740299

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007500493A Expired - Fee Related JP4653157B2 (ja) 2005-01-25 2006-01-23 ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム

Country Status (7)

Country Link
US (1) US7937399B2 (ja)
EP (1) EP1857945A1 (ja)
JP (1) JP4653157B2 (ja)
KR (1) KR20070101288A (ja)
CN (1) CN101128825A (ja)
CA (1) CA2593118A1 (ja)
WO (1) WO2006080268A1 (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8943045B2 (en) * 2009-01-28 2015-01-27 Oracle International Corporation Mechanisms for efficient autocompletion in XML search applications
WO2010106681A1 (ja) * 2009-03-19 2010-09-23 富士通株式会社 データベース検索プログラムを記録するコンピュータ読取可能な記憶媒体、データベース検索装置、および、データベース検索方法
EP2256660B1 (en) * 2009-05-28 2015-08-12 Sap Se Computer-implemented method, computer system, and computer program product for optimization of evaluation of a policy specification
US8370394B2 (en) * 2009-07-17 2013-02-05 International Business Machines Corporation Parallel processing of data organized in a tree structure
CN102402545B (zh) * 2010-09-14 2015-09-02 腾讯科技(深圳)有限公司 一种存储数据的方法及装置
US8713056B1 (en) 2011-03-30 2014-04-29 Open Text S.A. System, method and computer program product for efficient caching of hierarchical items
CN102681975B (zh) * 2012-05-10 2013-06-19 江苏省电力公司电力科学研究院 一种基于链表的pqdif文件树形结构比较方法
WO2013171953A1 (ja) 2012-05-15 2013-11-21 日本電気株式会社 分散データ管理装置及び分散データ操作装置
CN103020273B (zh) * 2012-12-27 2016-08-17 福建榕基软件股份有限公司 树形结构数据的展示及相关索引表生成的方法与装置
US9465523B2 (en) * 2013-06-27 2016-10-11 Sap Se Visual exploration of multidimensional data
US9619499B2 (en) * 2013-08-07 2017-04-11 International Business Machines Corporation Hardware implementation of a tournament tree sort algorithm
US9495418B2 (en) 2013-08-07 2016-11-15 International Business Machines Corporation Scalable acceleration of database query operations
US9830354B2 (en) 2013-08-07 2017-11-28 International Business Machines Corporation Accelerating multiple query processing operations
US9251218B2 (en) 2013-08-07 2016-02-02 International Business Machines Corporation Tunable hardware sort engine for performing composite sorting algorithms
JP6290443B2 (ja) * 2014-10-31 2018-03-07 株式会社東芝 通信制御装置、通信制御方法およびプログラム
US10310813B2 (en) 2014-12-29 2019-06-04 International Business Machines Corporation Hardware implementation of a tournament tree sort algorithm using an external memory
US9367425B1 (en) 2015-09-30 2016-06-14 Semmle Limited Disjoint-or trees for caching aggregated dependencies
SE2251212A1 (en) * 2015-11-25 2022-10-15 Teamifier Inc Apparatuses for graphically representing a reconfigured portion of a directed acyclic graph as a hierarchical tree structure
CN105930514B (zh) * 2016-05-16 2019-05-24 珠海格力电器股份有限公司 配套关系检索方法和系统
CN110889022A (zh) * 2018-08-17 2020-03-17 迈普通信技术股份有限公司 数据查询方法、装置及电子设备
EP4014125A1 (en) * 2020-02-26 2022-06-22 Huawei Technologies Co., Ltd. A device and a method for indexing snapshots of multiple file systems
US11734243B2 (en) * 2021-11-04 2023-08-22 Google Llc Sparse mapping of hierarchical subset

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS648448A (en) * 1987-07-01 1989-01-12 Hitachi Ltd Expression system for tree structure data
JPH02148173A (ja) * 1988-11-30 1990-06-07 Fuji Xerox Co Ltd 木構造図作成システム
JPH10240741A (ja) * 1997-02-28 1998-09-11 Nippon Telegr & Teleph Corp <Ntt> 木構造型データの管理方法
JP2000348038A (ja) * 1999-06-02 2000-12-15 Fujitsu Ltd 半構造データベースのためのデータ格納装置および方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6301583B1 (en) * 1997-05-16 2001-10-09 Paul Zellweger Method and apparatus for generating data files for an applet-based content menu using an open hierarchical data structure
US6029170A (en) * 1997-11-25 2000-02-22 International Business Machines Corporation Hybrid tree array data structure and method
US6397214B1 (en) * 1998-11-03 2002-05-28 Computer Associates Think, Inc. Method and apparatus for instantiating records with missing data
US6381605B1 (en) * 1999-05-29 2002-04-30 Oracle Corporation Heirarchical indexing of multi-attribute data by sorting, dividing and storing subsets
JP2001167087A (ja) * 1999-12-14 2001-06-22 Fujitsu Ltd 構造化文書検索装置,構造化文書検索方法,構造化文書検索用プログラム記録媒体および構造化文書検索用インデックス作成方法
US6981040B1 (en) * 1999-12-28 2005-12-27 Utopy, Inc. Automatic, personalized online information and product services
JP2001195406A (ja) 2000-01-06 2001-07-19 Media Fusion Co Ltd データベース管理システム
JP3513562B2 (ja) * 2000-04-20 2004-03-31 インターナショナル・ビジネス・マシーンズ・コーポレーション 形状解析システム、3次元形状モデルの差分検出システム、類似形状検索システム、形状解析方法及び記憶媒体
JP4165086B2 (ja) 2002-02-25 2008-10-15 日本電気株式会社 Xmlデータのrdbへの格納装置及び方法、rdbからのxmlデータの取得装置及び方法並びにプログラム
JP4537391B2 (ja) * 2004-03-16 2010-09-01 株式会社ターボデータラボラトリー ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム
EP1764710A4 (en) * 2004-06-03 2009-03-18 Turbo Data Lab Inc LAYOUT GENERATION PROCESS, INFORMATION PROCESSING DEVICE AND PROGRAM
WO2006001241A1 (ja) * 2004-06-23 2006-01-05 Turbo Data Laboratories Inc. ノードを挿入する方法、装置及びプログラム
US20060053122A1 (en) * 2004-09-09 2006-03-09 Korn Philip R Method for matching XML twigs using index structures and relational query processors
CN100587673C (zh) * 2004-10-01 2010-02-03 特博数据实验室公司 排列的生成方法以及排列生成装置
WO2007020850A1 (ja) * 2005-08-12 2007-02-22 Turbo Data Laboratories Inc. 情報処理方法、情報処理装置および情報処理プログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS648448A (en) * 1987-07-01 1989-01-12 Hitachi Ltd Expression system for tree structure data
JPH02148173A (ja) * 1988-11-30 1990-06-07 Fuji Xerox Co Ltd 木構造図作成システム
JPH10240741A (ja) * 1997-02-28 1998-09-11 Nippon Telegr & Teleph Corp <Ntt> 木構造型データの管理方法
JP2000348038A (ja) * 1999-06-02 2000-12-15 Fujitsu Ltd 半構造データベースのためのデータ格納装置および方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNG200500414011, 江田 毅晴, "XML木のための動的範囲ラベル付け手法", 情報処理学会論文誌, 20040615, 第45巻 No.SIG7(TOD22), 102−114ページ, JP, 社団法人情報処理学会 *
JPN6010071018, 江田 毅晴, "XML木のための動的範囲ラベル付け手法", 情報処理学会論文誌, 20040615, 第45巻 No.SIG7(TOD22), 102−114ページ, JP, 社団法人情報処理学会 *

Also Published As

Publication number Publication date
US20090106194A1 (en) 2009-04-23
WO2006080268A1 (ja) 2006-08-03
JP4653157B2 (ja) 2011-03-16
KR20070101288A (ko) 2007-10-16
US7937399B2 (en) 2011-05-03
CN101128825A (zh) 2008-02-20
CA2593118A1 (en) 2006-08-03
EP1857945A1 (en) 2007-11-21
WO2006080268A9 (ja) 2007-06-14

Similar Documents

Publication Publication Date Title
JP4653157B2 (ja) ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム
JP4681544B2 (ja) 配列の生成方法、情報処理装置、及び、プログラム
JP4796970B2 (ja) ツリーデータの検索・集計・ソート方法及びプログラム
JP4537391B2 (ja) ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム
JP4886693B2 (ja) 情報処理方法、情報処理装置および情報処理プログラム
JP5407169B2 (ja) クラスタリングプログラム、検索プログラム、クラスタリング方法、検索方法、クラスタリング装置および検索装置
JP4712718B2 (ja) 配列の生成方法、及び、配列生成プログラム
US9081849B2 (en) System and method of multidimensional query results processing
Dalamagas et al. A methodology for clustering XML documents by structure
JP3754253B2 (ja) 構造化文書検索方法、構造化文書検索装置及び構造化文書検索システム
JP3842577B2 (ja) 構造化文書検索方法および構造化文書検索装置およびプログラム
JP4681555B2 (ja) ノード挿入方法、情報処理装置、および、ノード挿入プログラム
CN115982390A (zh) 一种产业链构建和迭代扩充开发方法
CA2468372C (en) System and method of multidimensional query results processing
Navarro Compact Data Structures Meet Databases (Invited Talk)
JP5191441B2 (ja) インデクス構築方法及び装置及び情報検索方法及び装置及びプログラム
CN116776991A (zh) 基于共享度和B+树结构的Rete推理方法
Furmanek et al. Realization of a system of efficient querying of hierarchical data transformed into a quasi-relational model
JP2006228070A (ja) データの検索方法

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081203

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081203

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: 20101214

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20101216

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131224

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees