JP4681544B2 - 配列の生成方法、情報処理装置、及び、プログラム - Google Patents

配列の生成方法、情報処理装置、及び、プログラム Download PDF

Info

Publication number
JP4681544B2
JP4681544B2 JP2006514082A JP2006514082A JP4681544B2 JP 4681544 B2 JP4681544 B2 JP 4681544B2 JP 2006514082 A JP2006514082 A JP 2006514082A JP 2006514082 A JP2006514082 A JP 2006514082A JP 4681544 B2 JP4681544 B2 JP 4681544B2
Authority
JP
Japan
Prior art keywords
node
array
node identifier
identifier
nodes
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.)
Expired - Fee Related
Application number
JP2006514082A
Other languages
English (en)
Other versions
JPWO2005119516A1 (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 JPWO2005119516A1 publication Critical patent/JPWO2005119516A1/ja
Application granted granted Critical
Publication of JP4681544B2 publication Critical patent/JP4681544B2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/81Indexing, e.g. XML tags; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/84Mapping; Conversion
    • G06F16/86Mapping to a database

Landscapes

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

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 White Paper"、[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以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列に含まれるノード識別子で特定される頂点ノードのそれぞれについて、当該頂点ノード、および、頂点ノードに属するノードが重複しないように、他の頂点ノードに含まれる頂点ノードのノード識別子を、前記第2の配列から削除するステップと、を備えたことを特徴とする頂点ノードのノード識別子の配列の生成方法により達成される。
好ましい実施態様においては、前記第2の配列から削除するステップが、
前記第2の配列中のノード識別子の各々が、前記第1の配列を参照して、前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除するステップを含む。
別の好ましい実施態様においては、前記第2の配列から削除するステップが、
前記第1の配列と同一のサイズの第3の配列を生成するステップと、
前記第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子が示す位置の、第3の配列の値として格納し、その際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の値として、他のノード識別子が存在する場合、当該他のノード識別子を、第2の配列から削除するステップと、を含む。
より好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップが、
前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、ノード識別子を格納するとともに、前記第1の配列において、当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、を含む。
或いは、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップが、
前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、ノード識別子を格納するとともに、前記第1の配列において、当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、を含むように構成されていても良い。
また、より好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップが、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、を含む。
或いは、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップが、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、を含むように構成されていても良い。
別の好ましい実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップが、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、当該あるノード識別子を有するノードの子孫のノードを特定し、特定された子孫のノードのノード識別子が示す位置の第3の配列の値が、前記第2の配列中に存在する場合には、前記第2の配列から当該値を削除するステップと、を含む。
また、本発明の目的は、それぞれが、上述した方法によりにより生成された複数の第2の配列において、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れにも属するツリー群を表わすために、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成する方法であって、
それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成するステップと、
それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納するステップと、
前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が前記新たな配列に相当する第5の配列に存在しない場合に、当該第5の配列の値として格納するステップと、を備えたことを特徴とする配列の生成方法によっても達成される。
また、本発明の目的は、ノードに固有のノード識別子が付与され、
ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によってノード間の親子関係が表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した複数の第2の配列であって、それぞれの第2の配列において、当該頂点ノード、および、頂点ノードに属するノードが重複しないような第2の配列を設けるステップと、
それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成するステップと、
それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納するステップと、
前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が第5の配列に存在しない場合に、当該第5の配列の値として格納するステップと、を備えたことを特徴とする配列の生成方法によっても達成される。
また、本発明の目的は、ノードに固有のノード識別子が付与され、
ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によってノード間の親子関係が表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが、1以上の特定のノードおよび当該特定のノードにそれぞれ含まれるノード群を、当該特定のノードを頂点ノードとして、当該頂点ノードのノード識別子を含む複数の第2の配列であって、それぞれの第2の配列において、当該頂点ノード、および、頂点ノードに属するノードが重複しない第2の配列を設けるステップと、
前記複数の第2の配列の値の全てを含む第6の配列を生成するステップと、
前記第6の配列に含まれるノード識別子で特定される頂点ノードのそれぞれについて、当該頂点ノード、および、頂点ノードに属するノードが重複しないように、他の頂点ノードに含まれる頂点ノードのノード識別子を、前記第6の配列から削除するステップと、を備えたことを特徴とする配列の生成方法によっても達成される。
さらに、本発明の目的は、ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列と、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列と、
前記第1の配列を参照して、前記第2の配列に含まれるノード識別子で特定される頂点ノードのそれぞれについて、当該頂点ノード、および、頂点ノードに属するノードが重複しないように、他の頂点ノードに含まれる頂点ノードのノード識別子を、前記第2の配列から削除する、配列の値の正規化手段と、を備えたことを特徴とする情報処理装置によっても達成される。
好ましい実施態様においては、前記正規化手段が、
前記第2の配列中のノード識別子の各々が、前記第1の配列を参照して、前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除するように構成されている。
別の好ましい実施態様においては、前記正規化手段が、
前記第1の配列と同一のサイズの第3の配列を生成し、かつ、
前記第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子が示す位置の第3の配列の値として格納し、その際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の他の値として、他のノード識別子が存在する場合、当該他のノード識別子を、第2の配列から削除するように構成されている。
より好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記正規化手段が、
前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除し、かつ、
前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、ノード識別子を格納するとともに、前記第1の配列において、当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するように構成されている。
或いは、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記正規化手段が、
前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除し、かつ、
前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、ノード識別子を格納するとともに、前記第1の配列において、当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するように構成されていても良い。
また、別の好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記正規化手段が、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納し、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除し、かつ、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するように構成されている。
或いは、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記正規化手段が、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納し、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除し、かつ、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するように構成されていても良い。
さらに別の好ましい実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記正規化手段が、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納し、かつ、
あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、当該あるノード識別子を有するノードの子孫のノードを特定し、特定された子孫のノードのノード識別子が示す位置の第3の配列の値が、前記第2の配列中に存在する場合には、前記第2の配列から当該値を削除するように構成されている。
別の好ましい実施態様においては、さらに、複数の第2の配列において、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れにも属するツリー群を表わすための、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成する配列生成手段を備え、
前記配列生成手段が、
それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成し、
それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納し、かつ、
前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が前記新たな配列に相当する第5の配列に存在しない場合に、当該第5の配列の値として格納するように構成されている。
また、本発明の目的は、ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列と、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した複数の第2の配列であって、それぞれの第2の配列において、当該頂点ノード、および、頂点ノードに属するノードが重複しないような第2の配列と、
複数の第2の配列において、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れにも属するツリー群を表わすための、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成する配列生成手段と、を備え、
前記配列生成手段が、
それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成し、
それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納し、かつ、
前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が第5の配列の値に存在しない場合に、当該第5の配列として格納するように構成されたことを特徴とする情報処理装置によっても達成される。
さらに、本発明の目的は、ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列と、
それぞれが、1以上の特定のノードおよび当該特定のノードにそれぞれ含まれるノード群を、当該特定のノードを頂点ノードとして、当該頂点ノードのノード識別子を含む複数の第2の配列であって、それぞれの第2の配列において、当該頂点ノード、および、頂点ノードに属するノードが重複しない第2の配列と、
複数の第2の配列において、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れか1つに属するツリー群を表わすための、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成する第2の配列生成手段と、を備え、
前記第2の配列生成手段が、
前記複数の第2の配列の値の全てを含む第6の配列を生成し、かつ、
前記第6の配列に含まれるノード識別子で特定される頂点ノードのそれぞれについて、当該頂点ノード、および、頂点ノードに属するノードが重複しないように、他の頂点ノードに含まれる頂点ノードのノード識別子を、前記第6の配列から削除するように構成されたことを特徴とする情報処理装置によっても達成される。
また、本発明の目的は、ノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み出し可能なコンピュータプログラムであって、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列に含まれるノード識別子で特定される頂点ノードのそれぞれについて、当該頂点ノード、および、頂点ノードに属するノードが重複しないように、他の頂点ノードに含まれる頂点ノードのノード識別子を、前記第2の配列から削除するステップと、を前記コンピュータに実行させることを特徴とする頂点ノードのノード識別子の配列を生成するコンピュータプログラムによっても達成される。
好ましい実施態様においては、前記第2の配列から削除するステップにおいて、
前記第2の配列中のノード識別子の各々が、前記第1の配列を参照して、前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除するステップを、前記コンピュータに実行させる。
別の好ましい実施態様においては、前記第2の配列から削除するステップにおいて、
前記第1の配列と同一のサイズの第3の配列を生成するステップと、
前記第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子が示す位置の、第3の配列の値として格納し、その際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の値として、他のノード識別子が存在する場合、当該他のノード識別子を、第2の配列から削除するステップと、を前記コンピュータに実行させる。
より好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップにおいて、
前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、ノード識別子を格納するとともに、前記第1の配列において、当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、を前記コンピュータに実行させる。
或いは、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップにおいて、
前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、ノード識別子を格納するとともに、前記第1の配列において、当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、を前記コンピュータに実行させても良い。
別の好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップにおいて、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、を前記コンピュータに実行させる。
或いは、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップにおいて、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、を前記コンピュータに実行させても良い。
さらに別の好ましい実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記第2の配列から削除するステップにおいて、
前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、当該あるノード識別子を有するノードの子孫のノードを特定し、特定された子孫のノードのノード識別子が示す位置の第3の配列の値が、前記第2の配列中に存在する場合には、前記第2の配列から当該値を削除するステップと、を前記コンピュータに実行させる。
また、本発明の目的は、それぞれが、上記プログラムのステップをコンピュータに実行させたことにより生成された複数の第2の配列において、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れにも属するツリー群を表わすために、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成する、前記コンピュータにより読み出し可能なプログラムであって、
それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成するステップと、
それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納するステップと、
前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が前記新たな配列に相当する第5の配列に存在しない場合に、当該第5の配列の値として格納するステップと、を前記コンピュータに実行させることを特徴とするプログラムによっても達成される。
また、本発明の目的はノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み出し可能な、コンピュータプログラムであって、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した複数の第2の配列であって、それぞれの第2の配列において、当該頂点ノード、および、頂点ノードに属するノードが重複しないような第2の配列を設けるステップと、
それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成するステップと、
それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納するステップと、
前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が第5の配列に存在しない場合に、当該第5の配列の値として格納するステップと、を前記コンピュータに実行させることを特徴とするプログラムによっても達成される。
さらに、本発明の目的は、ノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み出し可能な、コンピュータプログラムであって、
それぞれが、1以上の特定のノードおよび当該特定のノードにそれぞれ含まれるノード群を、当該特定のノードを頂点ノードとして、当該頂点ノードのノード識別子を含む複数の第2の配列であって、それぞれの第2の配列において、当該頂点ノード、および、頂点ノードに属するノードが重複しない第2の配列を設けるステップと、
前記複数の第2の配列の値の全てを含む第6の配列を生成するステップと、
前記第6の配列に含まれるノード識別子で特定される頂点ノードのそれぞれについて、当該頂点ノード、および、頂点ノードに属するノードが重複しないように、他の頂点ノードに含まれる頂点ノードのノード識別子を、前記第6の配列から削除するステップと、を前記コンピュータに実行させることを特徴とするプログラムによっても達成される。
本発明によれば、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造の表現、および、構築に関する方法を提供することが可能となる。
更に、本発明によれば、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造の構築に関する情報処理装置を提供することが可能となる。
更に、本発明によれば、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造の表現、および、構築に関するプログラムを提供することが可能となる。
特に、本発明によれば、特定のノードおよびその子孫のノードを含む1以上のノード群を表わすための配列の生成および当該配列を処理する方法、情報処理装置およびプログラムを提供することが可能となる。
以下、添付図面を参照して、本発明の実施の形態について説明する。
[コンピュータシステム構成]
図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、Bは、それぞれ、ツリー形式データの一例であるPOSデータの説明図であり、図2Aは、このツリー形式データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した一例であり、図2Bは、同じツリー形式データをXML形式で表現した一例である。図2A、Bに示されるようにツリー型データ構造は、ルート・ノード(本例では、POSデータ)から始めて、各ノードで枝分かれしてリーフ・ノード(端点)に至るノードとアークの組み合わせによって表現される。各ノードの実体的な値、例えば、店名ノードの値="フランス店"の格納場所は、店名ノードに関連したポインタで指定される。
本発明は、ツリー型データ構造のトポロジーを対象とするため、以下の説明では、主として、ツリー型データ構造のトポロジーに関して説明する。
従来、このようなツリー型データ構造は、データを蓄えたノード間をポインタで接続することによって表現されている。しかし、ポインタ表現は、ポインタ値に必然性がないという欠点がある。即ち、ある場合には特定のノードAがある番地(例えば、100番地)に格納され、別の場合には同じノードAが別の番地(例えば、200番地)に格納されるので、ポインタ値が一定ではなく、ポインタ値は、本質的にノードの格納アドレスを表現するに過ぎない。そのため、例えば、ノードが深さ優先の規則に従ってポインタで接続されている場合、これらのノードを幅優先の規則に従ってポインタで再接続することは困難である。
これに対して、本発明者は、ツリー型データ構造のトポロジーがアークリストによって記述可能であることに着目した。アークリストとは、ノード間の親子関係を表すアークのリストである。図3A〜Cは、それぞれ、アークリストを用いたツリー型データ構造の表現形式の例の説明図である。図3A〜Cに示す例では、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)のオーダーで引くことができる。
[深さ優先モード]
本発明の一実施例によれば、図6A〜Cに示されるような深さ優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは深さ優先で連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に
最初にルート・ノードに番号を付与するステップ801と、
既に番号が付与されたあるノードに唯一の子ノードが存在する場合には、当該子ノードに当該あるノードに付与された前記番号の次の番号を付与するステップ802と、
既に番号が付与されたあるノードに複数の子ノードが存在する場合には、当該複数の子ノードの間の兄弟関係に従って、弟ノードは直上の兄ノードの全ての子孫ノードに番号が付与された後に次の番号が付与されるように、一番上の兄ノードから一番下の弟ノードまで番号を付与するステップ803と、
を実行させる。これにより、深さ優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
図9は、本発明の一実施例により図6A〜Cに示された深さ優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。図9にサブツリー1又はサブツリー2として示されているように、深さ優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子孫ノードが連続領域に出現するという優れた性質が得られる。
本発明の一実施例では、深さ優先モードの優れた性質を利用することにより、前記配列から、あるノードに付与された整数以上の値が格納されている連続領域を抽出することにより、前記あるノードの全ての子孫ノードを特定する。これにより、あるノードの子孫ノードを表すノード群が前記配列内の連続ブロックとして獲得できる。例えば、連続ブロックのサイズをmとすると、あるノードの全ての子孫ノードを特定するための処理速度は、O(m)のオーダーになる。
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図10は、図6A〜Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。一つの親ノードに対して複数の子ノードが存在し得るので、親子関係の配列は、各ノードに対する子ノードの番号が格納されている領域を示すための配列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)のアクセス時間を要するので効率が悪い。
[幅優先モード]
本発明の一実施例によれば、図7A〜Cに示されるような幅優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは幅優先モードで連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図11は、本発明の一実施例による幅優先に基づくノート定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に、
各ノードが前記ルート・ノードから何世代目のノードであるか、及び、各世代に含まれるノード数を算出するステップ1101と、
最初に前記ルート・ノードに番号を付与するステップ1102と、
ある世代に含まれる全てのノードに番号が付与されたならば、当該ある世代の次の世代にノードが存在しなくなるまで、当該次の世代に含まれる全てのノードに対して、親ノードが異なる場合には、当該親ノードに番号が付与された順番に当該ノードに番号を付与し、当該親ノードが同一である場合には、当該親ノードから派生した複数の子ノードの間に兄弟関係を定義し、一番上の兄ノードから一番下の弟ノードまで直前に付与された番号の次の番号から連続的に変化する固有の整数を順に付与するステップ1013と、
を実行させる。これにより、幅優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
図12は、本発明の一実施例により図7A〜Cに示された幅優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。図12に示されているように、幅優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子ノードは同じ値が格納されている連続領域に出現するという優れた性質が得られる。これは、幅優先モードで連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、親ノードに付与された番号が前記配列中に順序付き(昇順又は降順)で出現することによる。
したがって、本発明の一実施例では、幅優先モードの優れた性質を利用することにより、前記配列から、あるノードに付与された整数と同じ値が格納されている連続領域を抽出することにより、前記あるノードの全ての子ノードを特定する。これにより、あるノードの子ノードを、例えば、二分探索などの手法を用いて検索することが可能であり、即ち、O(log(n))のオーダーで検索することが可能になる。
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図13は、図7A〜Cに示された幅優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。図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は、当該ツリー型データ構造から生成された「子→親」表現に基づく親子関係の配列を示す図である。たとえば、頂点ノード[1]は、ノード識別子{1,4,5,8,9}を含む。また、複数の頂点ノードからなる配列を頂点ノードリストと称する。この頂点ノードリストにより複数の部分ツリーを指定でき、指定された複数の部分ツリーを部分ツリー群と称する。
以下、頂点ノードリストを、[a,b,・・・]と表す。ここに、「a」、「b」、・・・は、頂点ノードに対応するノード識別子である。
頂点ノードリストを構成する頂点ノードの各々を展開して、当該頂点ノードを頂点とする部分ツリーに含まれるすべてのノードのノード識別子を求めることを考える。求められたノード識別子のリストにおいて、あるノード識別子は1つしか存在しない場合、すなわち、ノード識別子が重複して出現しない場合、このような部分ツリー群を、「正規部分ツリー群」と称する。そうでないような部分ツリー群を、「非正規部分ツリー群」と称する。
図14A、Bに示す例において、頂点ノードリスト[2,3]は、以下のように展開することができる。
[2,3]:{2,6},{3,7,10,11}
上記対応は、頂点ノード「2」を展開し、頂点ノード「2」に含まれるノードのノード識別子が{2,6}であり、かつ、頂点ノード「3」を展開し、頂点ノード「3」に含まれるノードのノード識別子が{3,7,10,11}であることを示している。
上記対応において、展開されたノード識別子のリストにおいて、ノード識別子が重複して出現していない。したがって、頂点ノードリスト[2,3]にて表現される部分ツリー群は、正規部分ツリー群である。
その一方、頂点ノードリスト[3,7]は、以下のように展開される。
[3,7]:{3,7,10,11},{7,10,11}
この対応においては、ノード識別子{7,10,11}が重複して出現している。したがって、頂点ノードリスト[3,7]にて表現される部分ツリー群は、非正規部分ツリー群である。
同様に、頂点ノードリスト[2,3,7]も、以下のように展開される。
[2,3,7]:{2,6},{3,7,10,11},{7,10,11}
この頂点ノードリストを展開したノード識別子のリストであって、同一のノード識別子が重複しないような頂点ノードリストは、[2,3]である。したがって、本明細書において、ノードリストの正規化演算をNORMと称する。したがって、上記例においては、
NORM[2,3,7]=[2,3]と表す。
[正規化の目的]
正規化は、後述する集合演算を効率的に実施する上で重要になる。正規化された部分ツリー群では、どのノードも高々1つの頂点ノードに属するのみであるため、各ノードが所属する頂点ノードのリストは、高々頂点ノードの数に等しいサイズの配列で記述することができる。このため、正規化された状態では、論理積や論理和に代表される集合演算を効率的に実施することができる。
[正規化演算(第1の手法)]
以下、ある頂点ノードリストの正規化演算の処理について説明する。図15は、本実施の形態にかかるコンピュータシステム10おいて実行される正規化演算の処理を示すフローチャートである。図15に示すように、システム10は、「子→親」表現に基づく親子関係の配列(以下、「C−P配列」と称する。)と同じサイズのフラグ配列を作成し(ステップ1501)、当該フラグ配列中に初期値を格納する(ステップ1502)。初期値は、ノード識別子の値として取りえない値(この例では「−1」)を採用すればよい。また、システム10は、頂点ノードリストのポインタ位置を初期化する(ステップ1503)。図16Aは、初期状態のC−P配列およびフラグ配列を示し、図16Bは、頂点ノードリストを示す。頂点ノードリストに付された矢印は、ポインタ位置を示す。
次いで、システム10は、頂点リストのポインタが示すノード識別子について、対応するフラグ配列の値=−1か否かを判断する(ステップ1504)。ステップ1504においてイエス(Yes)と判断された場合には、システム10は、ポインタに示された頂点ノードリスト中のノード識別子の値を、フラグ配列の値としてセットする(ステップ1505)。
図16A、Bの例において、ポインタが示す頂点ノードリストの値「1」が示す位置のフラグ配列の値は「−1」である。したがって、ステップ1505において、フラグ配列の値としてノード識別子「1」が収容される。
次いで、システム10は、C−P配列を参照して、ポインタが示す頂点ノードリスト中のノードの子孫となる全てのノードのノード識別子を特定する(ステップ1506)。図16Aの例では、まず、C−P配列において、ノード識別子「1」を有するノードのノード識別子「4」、「5」が得られる。また、C−P配列において、ノード識別子「4」を有する(つまり、ノード識別子「4」のノードを親とする)ノードのノード識別子は「8」および「9」、ノード識別子「5」を有する(つまり、ノード識別子「5」のノードを親とする)ノードのノード識別子は存在しない。
次いで、特定されたノード識別子のそれぞれについて、フラグ配列の値が「−1」であるか否かを判断する(ステップ1507)。全てのフラグ配列の値が「−1」であれば(ステップ1507でイエス(Yes))、システム10はそれぞれのフラグ配列の値に、頂点ノードの値を格納する(ステップ1508)。図16Aの例では、C−P配列において、ノード識別子「4」、「5」、「8」および「9」に対応するフラグ配列の値として「1」が格納される(図17A参照)。
このような処理の後、頂点ノードリストのポインタが移動し(ステップ1509、1510)、次の頂点ノードについての処理が実行される。たとえば、図16A、Bおよび図17A、Bに示す例において、頂点ノードリストのポインタが移動すると、ノード識別子「7」を有する頂点ノードについて処理が実行される。図18Aに示すように、ノード識別子「7」に対応するフラグ配列の値は「−1」であるため(ステップ1505でイエス(Yes))、フラグ配列の値として「7」が格納される。また、ノード識別子「7」を有するノードの子孫となるノード(ノード識別子「10」、「11」を有するノード)についても、対応するフラグ配列の値は「−1」であるため、フラグ配列の値として「7」が格納される。
ステップ1507においてノー(No)と判断された場合には、システム10は、頂点ノードリストから、フラグ配列中の値と一致するノード識別子を有するノードを削除する(ステップ1511)。たとえば、図19A、Bに示すように、ノード識別子「3」を有する頂点ノードに関して、ノード識別子「3」に対応するフラグ配列の値は「−1」であるため、ノード識別子「3」を有するノードの子孫となるノードについて、対応するフラグ配列の値が調べられる。ここで、図20Aに示すように、ノード識別子「3」のノードと親子の関係にあるノード識別子「7」のノード、および、ノード識別子「3」のノードと祖父母/孫の関係にあるノード識別子「10」、「11」のノードについて、対応するフラグ配列の値は「7」となっている。したがって、フラグ配列の値に対応する「7」という値のノード識別子を有するノードが、頂点ノードリストから削除される(図20B参照)。
頂点ノードリストからの削除が終了すると、ステップ1507においてフラグ配列が「−1」以外であると判断されたフラグ配列の値として、現在の処理対象となっている頂点ノードのノード識別子を格納する(ステップ1508参照)。図20A、Bの例においては、ノード識別子「7」、「10」、「11」に対応するフラグ配列の値として、処理対象となっている頂点ノードのノード識別子「」が格納される。
また、ステップ1504でノー(No)と判断された場合には、システム10は、ポインタが示す頂点ノードを、ノードリストから削除する(ステップ1512)。図21Bに示すように、ポインタが、頂点ノードリストにおいてノード識別子「4」の位置に移動した場合を考える。図21Aに示すように、ノード識別子「4」に対応するフラグ配列の値は「1」である。したがって、ステップ1511でノー(No)と判断される。その結果、頂点ノードリストにおいてポインタが指す値「4」が削除される。
このような演算の結果、ノード識別子「1」、「7」、「3」および「4」を有する頂点ノードリストが正規化され、ノード識別子「1」および「3」からなる新たな頂点ノードリストを得ることができる。つまり、上述した例においては、
NORM[1,7,3,4]=[1,3]となる。
なお、システム10は、ステップ1504からステップ1508の処理を、ポインタが頂点ノードリストの末尾に達するまで繰り返す(ステップ1509、1510参照)。
正規化の処理において得られた新たな頂点ノードは、もとの頂点ノードリストと別個に、新たな頂点ノードリスト(正規化頂点ノードリスト)としてRAM14や記憶装置18に記憶されて良いし、もとの頂点ノードリストから一部の値が削除されたような形態で、RAM14や記憶装置18に記憶されても良い。
なお、第1の手法において、幅優先モードの下、幅優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列(C−P配列)を利用して、頂点ノードリストを正規化した。しかしながら、これに限定されるものではなく、深さ優先モードの下、深さ優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列(C−P配列)を利用して、頂点ノードリストを正規化することも可能である。
[正規化演算の他の手法(第2の手法)]
次に、他の実施の形態にかかる正規化演算について説明する。第1の手法においては、頂点ノードリストの要素である頂点ノードにポインタを配置し、各頂点ノードの値に基づいて、C−P配列を検索している。この手法は、頂点ノードリストのサイズが、C−P配列のサイズより十分に小さいときに有効である。これに対して以下に述べる第2の手法は、頂点ノードリストが比較的大きい場合に有効である。図22は、他の実施の形態にかかる正規化演算の処理を示すフローチャートである。図22に示すように、まず、システム10は、C−P配列と同じサイズの所属ノード配列を生成し、初期値を格納する(ステップ2201)。図23Aは、図14A、Bに示す例において、頂点ノードリスト[1,4,7,3,4]を正規化するために、初期値が格納された所属ノード配列が生成された状態を示す。
次いで、システム10は、頂点ノードリストの値が示す位置の所属ノード配列について、当該頂点ノードリストの値を配置する(ステップ2202)。なお、ここで、頂点ノードリストの値が重複して出現した場合には、2度目以降に出現した値を、頂点ノードリストから削除する。図23Bは、上記例において、ステップ2102が終了した状態を示す図である。本例では、頂点ノードリストに、値「4」が重複して出現するため、2度目に出現した値は、頂点ノードリストから削除されている。
システム10は、C−P配列および所属ノード配列を指定するためのポインタを初期化する(ステップ2203)。システム10は、ポインタが示すC−P配列の値を特定する(ステップ2204)。この値が、ポインタが示すノード識別子の親のノード識別子となる。ついで、親のノード識別子について、所属ノード配列の値が「−1」であれば(ステップ2205でイエス(Yes))、ステップ2210に進む。親のノードの所属ノード配列の値が「−1」であることは、親のノードが頂点ノードリストにリストされていない、つまり、親のノードが無所属であることを意味する。したがって、そのような親をもつノードについては、親のノードの所属を、自身に反映させる必要がない。
その一方、親のノード識別子について、所属ノード配列の値が「−1」でなければ(ステップ2205でノー(No))、システム10は、自己の所属ノードについて、所属ノード配列の値が「−1」であるか否かを判断する(ステップ2206)。
ステップ2206でイエス(Yes)と判断された場合には、システム10は、親の所属ノード配列の値を、自己の所属ノード配列の値として、所属ノード配列中に格納する(ステップ2207)。これは、親のノードが、頂点ノードリストにリストされているため、子供に相当する自分自身も、親のノードと同じ所属にすることを意味している。
これに対して、ステップ2206でノー(No)、つまり、自己の所属ノードの値が「−1」以外であった場合には、システム10は、ポインタが示す所属ノード配列の値と同じ値の頂点ノードを、頂点ノードリストから削除する(ステップ2208)とともに、親の所属ノード配列の値を、自己の所属ノード配列の値として、所属ノード配列中に格納する(ステップ2209)。まず、親のノードが頂点ノードリストにリストされているため、子供に相当する自分自身も、親のノードと同じ所属にしている。それに加えて、所属ノード配列の値(自身が所属するとされていた値)の頂点ノードには、頂点ノードリストにリストされた親が存在するため、当該頂点ノードは頂点ノードリストから削除される。
システムは、ステップ2204〜ステップ2209の処理を、ポインタがC−P配列の末尾に到達するまで繰り返す(ステップ2210、2211参照)。
図24A〜図29Bに、ポインタがC−P配列のそれぞれの値を示すときの処理を説明している。なお、図24A〜図29Bにおいて、C−P配列の左側の矢印がポインタを示す。
図24Aにおいては、そもそもポインタが示すC−P配列の値は「−1」であり、そのノードの親が存在しないため、ポインタが移動する。次に、図24Bにおいては、ポインタが示すC−P配列の値は「0」であるため、ノード識別子「1」の親のノード識別子は「0」であることがわかる。ここでは、親のノードの所属ノード配列の値は「−1」であるため、ポインタは移動する。図25A、Bの例も、図24Bと同様である。
その一方、図26Aの例では、ノード識別子「4」について、親のノード識別子は「1」であることがわかる。ここで、親のノードの所属ノード配列の値は「1≠−1」である。また、自分自身の所属ノード配列の値は「4≠−1」である。そこで、自分自身の所属ノード配列の値と同一の値「4」が、頂点ノードリストから削除されるとともに、自分自身の所属ノード配列の値が、親のノードの所属ノード配列の値「1」に書き換えられる。
図26Bの例において、ノード識別子「5」について、親のノード識別子は「1」であることがわかる。親のノードの所属ノード配列の値は「1≠−1」である。また、自分自身の所属ノード配列の値は「−1」である。そこで、自分自身の所属ノード配列の値が、親のノードの所属ノード配列の値「1」に書き換えられる。
図27Aの例は、図24Bと同様である。また、図27Bの例は、図26Aの例と同様である。ノード識別子「7」について、親のノード識別子は「3」であることがわかる。親のノードの所属ノード配列の値は「3≠−1」である。また、自分自身の所属ノード配列の値は「7≠−1」である。そこで、自分自身の所属ノード配列の値と同一の値「7」が、頂点ノードリストから削除されるとともに、自分自身の所属ノード配列の値が、親のノードの所属ノード配列の値「3」に書き換えられる。
図28A、Bは、それぞれ、図26Bの例と同様である。自分自身の所属ノード配列の値が、それぞれ、親のノードの所属ノード配列の値「1」に書き換えられる。また、図29A、Bの例も、図26Bの例と同様である。自分自身の所属ノード配列の値が、それぞれ、親のノードの所属ノード配列の値「3」に書き換えられる。このようにして、NORM[1,4,7,3,4]=[1,3]とすることができる。正規化された頂点ノードは、RAM14や記憶装置18に記憶される。
なお、第2の手法において、幅優先モードの下、幅優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列(C−P配列)を利用して、頂点ノードリストを正規化した。しかしながら、これに限定されるものではなく、深さ優先モードの下、深さ優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列(C−P配列)を利用して、頂点ノードリストを正規化することも可能である。
[正規化演算のさらに他の手法(第3の手法)]
次に、さらに他の実施の形態にかかる正規化演算について説明する。第3の手法も、第2の手法と同様に、頂点ノードリストのサイズが比較的大きいときに有効である。第3の手法においては、深さ優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列(C−P配列)が利用される(図30A、B参照)。
図32は、この実施の形態にかかる正規化演算の処理を示すフローチャートである。図32に示すように、まず、システム10は、C−P配列と同じサイズの所属ノード配列を生成し、初期値を格納する(ステップ3201)。図31Aは、図30A、Bに示す例において、頂点ノードリスト[1,2,9,8,2]を正規化するために、初期値が格納された所属ノード配列が生成された状態を示す。
次いで、システム10は、頂点ノードリストの値が示す位置の所属ノード配列について、当該頂点ノードリストの値を配置する(ステップ3202)。なお、ここで、頂点ノードリストの値が重複して出現した場合には、2度目以降に出現した値を、頂点ノードリストから削除する。図31Bは、上記例において、ステップ3202が終了した状態を示す図である。本例では、頂点ノードリストに、値「2」が重複して出現するため、2度目に出現した値は、頂点ノードリストから削除されている。
システム10は、C−P配列および所属ノード配列を指定するためのポインタを初期化する(ステップ3203)。その後、システム10は、ポインタが示す所属ノード配列の値を特定する(ステップ3204)。この値は、自己の所属するノード識別子に相当する。
特定された所属ノード配列の値が「−1」である場合には(ステップ3205でイエス(Yes))、ポインタが一つ進められる(ステップ3206)。上記値が「−1」であることは、自己は頂点ノードリストにリストされたノードの何れにも属さないことを意味している。
その一方、所属ノード配列の値が「−1」でない場合には(ステップ3205でノー(No))、システム10は、ポインタが示すノードの子孫に相当するノードを特定する(ステップ3207)。図33は、あるノードの子孫に相当するノードを特定するための処理を示すフローチャートである。
図33に示すように、システム10は、あるノード(以下、図33の処理では「基準ノード」と称する。)の次の位置(つまり、1つ大きいノード識別子に対応する位置)に子孫特定用ポインタを配置し(ステップ3301)、子孫特定用ポインタが示すC−P配列の値を特定する(ステップ3302)。次いで、システム10は、基準ノードのノード識別子と特定されたC−P配列の値とを比較する。「基準ノードのノード識別子≦C−P配列の値」であれば(ステップ3303でイエス(Yes))、子孫特定用ポインタが示すノードは、基準ノードの子孫であるため、システム10は、そのノード識別子をRAM14などに記憶しておき(ステップ3304)、子孫特定用ポインタを1つ進める(ステップ3305)。その一方、「基準ノードのノード識別子>C−P配列の値」であれば(ステップ3303でノー(No))、処理を終了する。
図42A〜Dを参照して、子孫ノードの特定について具体的に説明する。図42Aにおいて、大きい矢印が基準ノードを示し、小さい矢印が子孫特定用のポインタを示す。図42Aにあるように、子孫特定用ポインタは、初期的には、基準ノードの次の位置を指している。図42Aにおいて、子孫特定ポインタが示すC−P配列の値は、「1」であり、基準ノードのノード識別子「1」以上であるため、ノード識別子「2」のノードは、ノード識別子「1」のノードの子孫であると判断される。図42B、Cにおいても同様である。これに対して、図42Dの場合には、子孫特定ポインタが示すC−P配列の値は「0」であり、これは、基準ノードのノード識別子「1」より小さい。したがって、ノード識別子「5」のノードは、ノード識別子「1」のノードの子孫ではない。このようにして、ノード識別子「1」のノードの子孫は、ノード識別子「2」〜「4」をそれぞれ有するノードであると判断される。
システム10は、このようにして得られた、子孫に相当するノードについて、所属ノード配列の値を参照して、所属ノードの値と同一の値が、頂点ノードリストに存在すれば、その値を頂点ノードリストから削除する(ステップ3208)。次いで、システム10は、子孫に相当するノードの所属ノード配列の値として、自己の値(つまりポインタで示されているノード識別子)を格納する(ステップ3209)。その後、システムは、特定された子孫の次のノードを示す位置、つまり、上記子孫特定用ポインタの位置の次の位置までポインタを移動させる(ステップ3210)。ポインタに示す位置に、配列の値が存在すれば、ステップ3204に戻り、処理が繰り返される。
なお、ステップ3209は、所属ノード配列中の全ての要素について、適切な値を格納するための処理ステップである。したがって、ステップ3209が省略されていても、削除すべき頂点ノードリストの値の特定および削除は、適切に行われる。
図31A、Bに示す例において、ステップ3204〜ステップ3211の処理が実行された場合について、以下に説明する。図34Aに示すように、ポインタが示す所属ノード配列の値は「−1」であるため、ポインタが移動する。図34Bの状態では、ポインタが示す所属ノード配列の値は、「1」であるため、ポインタが示すノード識別子「1」の子孫が見出される。ここでは、ノード識別子「2」〜「5」が、ノード識別子「1」の子孫と判断される。ここで、ノード識別子「2」について、所属ノード配列の値は「2」であり、頂点ノードリストには、値「2」がリストされているため、当該値「2」が頂点ノードリストから削除される。また、子孫のノード識別子について、所属ノード配列の値として「1」が格納される。次いで、ポインタが、ノード識別子「6」を示すように移動される。
図35A、Bにおいて、ポインタが示す所属ノード配列の値は「−1」であるため、それぞれ、ポインタが移動するだけである。図36Aにおいては、ポインタが示す所属ノード配列の値は、「8」であるため、ポインタが示すノード識別子「8」の子孫が見出される。ここでは、ノード識別子「9」が子孫と判断される。ここで、ノード識別子「9」について、所属ノード配列の値は「9」であり、かつ、頂点ノードリストに値「9」がリストされている。したがって、頂点ノードリストから値「9」が削除される。また、ノード識別子「9」について、所属ノード配列の値として「8」が格納される。
図36B、Cにおいては、ポインタが示す所属ノード配列の値は「−1」であるため、それぞれ、ポインタが移動するだけである。
このようにして、NORM[1,2,9,8,2]=[1,8]とすることができる。正規化された頂点ノードは、RAM14や記憶装置18に記憶される。
なお、この手法では、自己の子孫に相当するノードを効率的に特定することができ、その結果、より高速に正規化演算を実施することができる。
[集合演算]
本実施の形態にかかる正規部分ツリー群の間では、論理積(AND)や論理輪(OR)、否定(NOT)、減算(SUB)、排他的論理和(XOR)を定義することができる。このような演算の結果も正規部分ツリー群にて表わす。以下、これら演算について説明する。以下、図14A、Bに示す例において、それぞれの演算について説明する。
(1)論理和(OR)
たとえば、正規部分ツリー群[2]、[3]の論理和を考える。
正規部分ツリー群[2]:{2,6}
正規部分ツリー群[3]:{3,7,10,11}
これらの論理和[2]OR[3]=[2,3]
([2,3]:{2,6},{3,7,10,11})
となる。
同様に、正規部分ツリー群[3]、「7」の論理和を考える。
正規部分ツリー群[3]:{3,7,10,11}
正規部分ツリー群[7]:{7,10,11}
したがって、これらの論理和[3]OR[7]=[3]となる。
(2)論理積(AND)
正規部分ツリー群[2,3]、[7]の論理積を考える。
正規部分ツリー群[2,3]:{2,6,3,7,10,11}
正規部分ツリー群[7]:[7,10,11]
したがって、これらの論理積[2,3]AND[7]=[7]となる。
演算のうち、これらの演算において実行される処理について以下に説明する。
[論理積演算]
まず、論理積演算の原理について説明する。図37Aに示すように、2つの正規部分ツリー群3701および3702を考える。2つの正規部分ツリー群は、以下に述べるような関係を有する。
たとえば、正規部分ツリー群3701が正規部分ツリー群3702を含む場合(図37B参照)には、2つの正規部分ツリー群の倫理積は、正規部分ツリー群3702となる。その一方、正規部分ツリー群3702が正規部分ツリー群3701を含む場合(図37C参照)には、2つの正規部分ツリー群の論理積は、正規部分ツリー群3701となる。さらに、図示しないが、双方の正規部分ツリー群が包含関係を持たない場合には、これらの間の論理積は空集合となる。
図38は、論理積演算の際にシステムにて実行される処理を示すフローチャートである。図38に示すように、論理積演算の対象となる正規部分ツリー群のそれぞれについて、マーキング配列を生成する(ステップ3801)。マーキング配列は、正規化演算にて生成されたフラグ配列および所属ノード配列と等価である。すなわち、正規化演算の第1の手法および第2の手法と同様の処理を実施することでマーキング配列を取得することができる。
次いで、システム10は、双方のマーキング配列の対応する値を比較する(ステップ3802)。より詳細には、システム10は、2つのマーキング配列中の対応する値を特定するためのポインタを初期化し(ステップ3811)、ポインタが示すマーキング配列の双方の値を取り出す(ステップ3812)。双方の値或いは一方の値が、初期値「−1」であった場合には(ステップ3813でノー(No))、システム10は、ポインタが配列の末尾を指していなければ(ステップ3816でノー(No))、ポインタを移動して(ステップ3817)、ステップ3812に戻る。
マーキング配列の双方の値が初期値「−1」以外の値であった場合には(ステップ3812でイエス(Yes))、マーキング配列の値のうち大きいほうの値が、格納番地、つまり、対応するノード識別子と等しいか否かが判断される(ステップ3813)。ステップ3813でイエス(Yes)と判断された場合には、システム10は、当該一致する値を、論理積演算の結果を示す頂点ノード配列の値として、当該頂点ノード配列に格納する(ステップ3814)。その後、ポインタが配列の末尾を指していなければ(ステップ3815でノー(No))、ポインタを移動して(ステップ3816)、ステップ3812に戻る。
ステップ3812でノー(No)と判断された場合には、ポインタが配列の末尾を指していなければ(ステップ3816でノー(No))、ポインタを移動して(ステップ3817)、ステップ3812に戻る。
以下、正規部分ツリー群[3,6]と、正規部分ツリー群[2,7]のAND演算の例について説明する。図39は、正規部分ツリー群[3,6]および正規部分ツリー群[2,7]のそれぞれのマーキング配列が生成された状態を示す。図39において、符号3901が、正規部分ツリー群[3,6]のマーキング配列(第1のマーキング配列)を示し、符号3902が、正規部分ツリー群[2,7]のマーキング配列(第2のマーキング配列)を示す。
図40に示すように、ポインタがノード識別子「6」を示すときに(符号4001参照)、第1のマーキング配列の値は「6」であり、かつ、第2のマーキング配列の値が「2」である。大きい方の値は「6」であり、ノード識別子に一致する。したがって、値「6」は、論理積演算の結果を格納するための頂点ノードリストに格納される。
また、ポインタがノード識別子「7」を示すときに(符号4002参照)、第1のマーキング配列の値は「3」であり、かつ、第2のマーキング配列の値が「7」である。大きいほうの値は「7」であり、ノード識別子に一致する。したがって、値「7」は、論理積演算の結果を格納するための頂点ノードリストに格納される。このような処理の結果、[3,6]AND[2,7]=[6,7]を得ることができる。
[論理和演算]
論理和演算は、以下のように記述することができる。
[a1,a2,・・・,an]OR[b1,b2,・・・,bn]
=NORM[a1,a2,・・・,an,b1,b2,・・・,bn]
つまり、上述した正規化の手法を用いれば、論理和演算の結果を示す頂点ノードリストを得ることができる。
たとえば、図39に示す例において、[3,6]OR[2,7]=NORM[3,6,2,7]=[2,3]となる。
[減算]
上述した論理和演算および論理積演算を利用して、正規部分ツリー群の減算は、以下のように定義することができる。なお、以下において、減算は「−(マイナス)」で表わす。
A,B,C,Dをそれぞれ正規部分ツリー群とする。
(A−B)AND(C−D)=(A AND C)−(B OR D) (式1)
(A−B)OR(C−D)=(A OR C)AND(B AND D) (式2)
A−B−C=A−(B OR C) (式3)
つまり、ブール代数と同じ演算規則が成立する。
正規化演算などで説明したように、正規部分ツリー群は、頂点ノードリストであらわすことができる。
本実施の形態においては、たとえば、(式1)は、2つの頂点ノードリスト(A、Cの論理積演算結果を示す頂点ノードリスト、および、B、Dの論理和演算結果を示す頂点ノードリスト)と、その間の「減算」という演算子とで表わすことができる。つまり、本来であれば、正規部分ツリー群A〜のそれぞれの4つの頂点ノードリストおよびそれらの間の演算子にて表わすべきところ、2つの頂点リストおよびその間の演算子で表わすことができる。つまり、被減数の頂点ノードリストと、減数の頂点ノードリスト(除外頂点ノードリスト)とで表わすことが可能となる。
(式2)や(式3)についても同様である。
[否定、排他的論理和等]
また、正規部分ツリー群の否定(NOT)も、除外頂点ノードリストとして表わすことができる。つまり、正規部分ツリー群Aの否定である「NOT A」(Aは正規部分ツリー群)は、頂点ノードリストにリストされた頂点ノードおよびその子孫のノードを除いた全てのノードである
同様に、排他的論理和も、頂点ノードリストおよび除外頂点ノードリストで表わすことが可能である。
[情報処理装置]
図41は、本発明の一実施例にかかるツリー型データ構造を構築し、かつ、正規化演算および集合演算を実行する情報処理装置4100の機能ブロックダイヤグラムである。この情報処理装置4100は、実際には、図1に示すコンピュータシステム10に必要なプログラムをインストールすることにより実現される。
図41に示すように、情報処理装置4100は、ツリー型データ構造を表現するデータを記憶する記憶部4101と、ルート・ノードを含むノードに固有のノード識別子を付与し、ノード識別子を記憶部4101に格納するノード定義部4102と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付け、当該関連付けを示す配列であるC−P配列を記憶部4101に格納する親子関係定義部4103と、記憶部4101に格納されたノード識別子およびC−P配列に基づいて、正規化演算を施すべき部分ツリー群の頂点ノードリストから、正規化された部分ツリー群(正規部分ツリー群)の頂点ノードリストを生成し、生成された頂点ノードリストを、記憶部4101に格納する正規化演算部4104と、記憶部4101に格納された正規部分ツリー群の頂点ノードを読み出し、これらの間で集合演算を実行して、演算結果に相当する頂点ノードリストおよび/または除外頂点ノードリストを、記憶部4101に格納する集合演算部4105とを備えている。なお、集合演算部4105において、論理和演算を実行する機能は、正規化演算部4104にて実現できる。
好ましくは、ノード定義部4102は、ノード識別子として数値を用い、より好ましくは、ノード識別子として連続する整数を用いる。また、親子関係定義部4103は、非ルート・ノードの各々に付与されたノード識別子と、関連付けられた親ノードに付与されたノード識別子と、の組の配列を記憶部4101に格納する。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
図1は、本発明の実施の形態にかかるツリー型データ構造を取り扱うコンピュータシステムのブロックダイヤグラムである。 図2A、Bは、ツリー形式データの一例であるPOSデータの説明図であり、図2Aは、このツリー形式データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した例であり、図2Bは、同じツリー形式データをXML形式で表現した例である。 図3A〜Cは、それぞれ、アークリストを用いたツリー型データ構造の表現形式の例の説明図である。 図4A〜Cは、それぞれ、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。 図5は、本発明の一実施例によるツリー型データ構造を記憶装置上に構築する方法のフローチャートである。 図6A〜Cは、それぞれ、本発明の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。 図7A〜Cは、それぞれ、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。 図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。 図9は、本発明の一実施例により作成された「子→親」表現に基づく親子関係の配列の説明図である。 図10は、図6に示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。 図11は、本発明の一実施例による幅優先に基づくノード定義処理のフローチャートである。 図12は、本発明の一実施例により作成された「子→親」表現に基づく親子関係の配列の説明図である。 図13は、図7に示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。 図14Aは、幅優先モードに基づくツリー型データ構造、図14Bは、当該ツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列を示す図である。 図15は、本実施の形態にかかるコンピュータシステムおいて実行される正規化演算の処理を示すフローチャートである。 図16Aは、正規化演算において、初期状態のC−P配列およびフラグ配列を示す図、図16Bは、頂点ノードリストを示す図である。 図17Aは、正規化演算において、C−P配列のフラグ配列に値が格納された状態を示す図、図17Bは、頂点ノードリストを示す図である。 図18A、Bは、本実施の形態にかかる正規化演算の処理例を示す図である。 図19A、Bは、本実施の形態にかかる正規化演算の処理例を示す図である。 図20A、Bは、本実施の形態にかかる正規化演算の処理例を示す図である。 図21A、Bは、本実施の形態にかかる正規化演算の処理例を示す図である。 図22は、本発明の他の実施の形態にかかる正規化演算の処理を示すフローチャートである。 図23Aは、所属ノード配列に初期値が格納された状態を示す図、図23Bは、頂点ノードリストの値がマーキングされた状態を示す図である。 図24A、Bは、他の実施の形態にかかる正規化演算の処理例を示す図である。 図25A、Bは、他の実施の形態にかかる正規化演算の処理例を示す図である。 図26A、Bは、他の実施の形態にかかる正規化演算の処理例を示す図である。 図27A、Bは、他の実施の形態にかかる正規化演算の処理例を示す図である。 図28A、Bは、他の実施の形態にかかる正規化演算の処理例を示す図である。 図29A、Bは、他の実施の形態にかかる正規化演算の処理例を示す図である。 図30A、Bは、さらに他の実施の形態にかかる正規化演算に利用される、深さ優先モードに基づくツリー型データ構造、および、当該ツリー型データ構造を、「子→親」表現に基づく親子関係の配列を示す図である。 図31Aは、所属ノード配列に初期値が格納された状態を示す図、図31Bは、頂点ノードリストの値がマーキングされた状態を示す図である。 図32は、本発明のさらに他の実施の形態にかかる正規化演算の処理を示すフローチャートである。 図33は、さらに他の実施の形態において、子孫に相当するノードを特定する処理をより詳細に示すフローチャートである。 図34A、Bは、さらに他の実施の形態にかかる正規化演算の処理例を示す図である。 図35A、Bは、さらに他の実施の形態にかかる正規化演算の処理例を示す図である。 図36A〜Cは、さらに他の実施の形態にかかる正規化演算の処理例を示す図である。 図37A〜Cは、それぞれ、本発明にかかる論理積演算を説明する図である。 図38は、本実施の形態にかかる論理積演算の処理を示すフローチャートである。 図39は、本実施の形態にかかる論理積演算の処理例を示す図である。 図40は、本実施の形態にかかる論理積演算の処理例を示す図である。 図41は、本実施の形態にかかるツリー型データ構造、および、頂点ノードリストを記憶装置上に構築する情報処理装置の機能ブロックダイヤグラムである。 図42A〜Dは、それぞれ、図33に示す子孫に相当するノードの特定をより具体的に示す図である。
符号の説明
10 コンピュータシステム
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 CD−ROMドライバ
22 I/F
24 入力装置
26 表示装置
4100 情報処理装置
4101 記憶部
4102 ノード定義部
4103 親子関係定義部
4104 正規化演算部
4105 集合演算部

Claims (18)

  1. ノードに固有のノード識別子が付与され、
    ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によってノード間の親子関係が表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにおいて、
    前記コンピュータのCPUが、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
    前記CPUが、前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップを含み、
    前記削除ステップは、
    前記CPUが、前記第1の配列と同一のサイズの第3の配列を生成するステップと、
    前記CPUが、前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子を当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子によって示される第3の配列の位置にその値として格納する際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の値として、他のノード識別子が存在する場合、当該ノード識別子と当該他のノード識別子のうち子孫に相当する方のノード識別子を、第2の配列から削除するステップとを含む、頂点ノードのノード識別子の配列の生成方法であって、
    子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップは、
    前記CPUが、前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
    前記CPUが、前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、当該ノード識別子を格納するとともに、前記第1の配列を参照して得られる当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該子孫のノードのノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、
    を含む、頂点ノードのノード識別子の配列の生成方法。
  2. ノードに固有のノード識別子が付与され、
    ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によってノード間の親子関係が表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにおいて、
    前記コンピュータのCPUが、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
    前記CPUが、前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップを含み、
    前記削除ステップは、
    前記CPUが、前記第1の配列と同一のサイズの第3の配列を生成するステップと、
    前記CPUが、前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子を当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子によって示される第3の配列の位置にその値として格納する際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の値として、他のノード識別子が存在する場合、当該ノード識別子と当該他のノード識別子のうち子孫に相当する方のノード識別子を、第2の配列から削除するステップとを含む、頂点ノードのノード識別子の配列の生成方法であって、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップは、
    前記CPUが、前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
    前記CPUが、前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、当該ノード識別子を格納するとともに、前記第1の配列を参照して得られる当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該子孫ノードのノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、
    を含む、頂点ノードのノード識別子の配列の生成方法。
  3. ノードに固有のノード識別子が付与され、
    ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によってノード間の親子関係が表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにおいて、
    前記コンピュータのCPUが、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
    前記CPUが、前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップを含み、
    前記削除ステップは、
    前記CPUが、前記第1の配列と同一のサイズの第3の配列を生成するステップと、
    前記CPUが、前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
    前記CPUが、前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除するステップとを含む、頂点ノードのノード識別子の配列の生成方法であって、
    子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップは、
    前記CPUが、前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
    前記CPUが、前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、
    を含む、頂点ノードのノード識別子の配列の生成方法。
  4. ノードに固有のノード識別子が付与され、
    ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によってノード間の親子関係が表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにおいて、
    前記コンピュータのCPUが、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
    前記CPUが、前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップを含み、
    前記削除ステップは、
    前記CPUが、前記第1の配列と同一のサイズの第3の配列を生成するステップと、
    前記CPUが、前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
    前記CPUが、前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除するステップとを含む、頂点ノードのノード識別子の配列の生成方法であって、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップは、
    前記CPUが、前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
    前記CPUが、前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、
    を含む、頂点ノードのノード識別子の配列の生成方法。
  5. ノードに固有のノード識別子が付与され、
    ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によってノード間の親子関係が表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにおいて、
    前記コンピュータのCPUが、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
    前記CPUが、前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップを含み、
    前記削除ステップは、
    前記CPUが、前記第1の配列と同一のサイズの第3の配列を生成するステップと、
    前記CPUが、前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
    前記CPUが、前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除するステップとを含む、頂点ノードのノード識別子の配列の生成方法であって、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップは、
    前記CPUが、あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記第1の配列によって表現されたノード間の親子関係を参照して、当該あるノード識別子を有するノードの子孫のノードを特定し、特定された子孫のノードのノード識別子が示す位置の第3の配列の値が、前記第2の配列中に存在する場合には、前記第2の配列から当該値を削除するステップと、
    を含む、頂点ノードのノード識別子の配列の生成方法。
  6. 前記コンピュータが、請求項1ないし5の何れか一項に記載の方法により生成された複数の第2の配列に関して、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れにも属するツリー群を表わすために、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成する方法であって、
    前記CPUが、それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成するステップと、
    前記CPUが、それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納するステップと、
    前記CPUが、前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が前記新たな配列に相当する第5の配列に存在しない場合に、当該第5の配列の値として格納するステップと、を備える配列の生成方法。
  7. ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列、および、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を格納する記憶装置と、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する正規化手段と、を備え、
    前記正規化手段は、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納し、かつ、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子を当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子によって示される第3の配列の位置にその値として格納する際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の他の値として、他のノード識別子が存在する場合、当該ノード識別子と当該他のノード識別子のうち子孫に相当する方のノード識別子を、第2の配列から削除するように構成されている、情報処理装置であって、
    子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記正規化手段が、
    前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除し、かつ、
    前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、当該ノード識別子を格納するとともに、前記第1の配列を参照して得られる当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該子孫のノードのノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するように構成されている、情報処理装置。
  8. ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列、および、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を格納する記憶装置と、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する正規化手段と、を備え、
    前記正規化手段は、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納し、かつ、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子を当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子によって示される第3の配列の位置にその値として格納する際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の他の値として、他のノード識別子が存在する場合、当該ノード識別子と当該他のノード識別子のうち子孫に相当する方のノード識別子を、第2の配列から削除するように構成されている、情報処理装置であって、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記正規化手段が、
    前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除し、かつ、
    前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、当該ノード識別子を格納するとともに、前記第1の配列を参照して得られる当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該子孫のノードのノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するように構成されている、情報処理装置。
  9. ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列、および、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を格納する記憶装置と、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する正規化手段と、を備え、
    前記正規化手段は、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納する手段と、
    前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納する手段と、
    前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除する削除手段と、を含む情報処理装置であって、
    子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記削除手段が、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除し、かつ、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するように構成されている、情報処理装置。
  10. ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列、および、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を格納する記憶装置と、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する正規化手段と、を備え、
    前記正規化手段は、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納する手段と、
    前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納する手段と、
    前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除する削除手段と、を含む情報処理装置であって、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記削除手段が、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除し、かつ、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するように構成されている、情報処理装置。
  11. ノードに固有のノード識別子が付与されたツリー型データ構造における、ノード間の親子関係を表現するための、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列、および、それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を格納する記憶装置と、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子又は当該他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する正規化手段と、を備え、
    前記正規化手段は、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納する手段と、
    前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納する手段と、
    前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除する削除手段と、を含む情報処理装置であって、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記削除手段が、
    あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記第1の配列によって表現されたノード間の親子関係を参照して、当該あるノード識別子を有するノードの子孫のノードを特定し、特定された子孫のノードのノード識別子が示す位置の第3の配列の値が、前記第2の配列中に存在する場合には、前記第2の配列から当該値を削除するように構成されている、情報処理装置。
  12. さらに、複数の第2の配列において、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れにも属するツリー群を表わすための、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成する配列生成手段を備え、
    前記配列生成手段が、
    それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成し、前記記憶装置に格納し、
    それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納し、かつ、
    前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が前記新たな配列に相当する前記記憶装置に格納されている第5の配列に存在しない場合に、当該第5の配列の値として格納するように構成されている、請求項11に記載の情報処理装置。
  13. ノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにより読み出し可能なコンピュータプログラムであって、
    それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を前記記憶装置に設けるステップと、
    前記第1の配列によって表現されたノード間の親子関係を参照して、
    前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップと、を前記コンピュータに実行させ、
    前記削除ステップにおいて、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納するステップと、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子を当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子によって示される第3の配列の位置にその値として格納する際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の値として、他のノード識別子が存在する場合、当該ノード識別子と当該他のノード識別子のうち子孫に相当する方のノード識別子を、第2の配列から削除するステップと、を前記コンピュータに実行させ、
    子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップにおいて、
    前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
    前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、当該ノード識別子を格納するとともに、前記第1の配列を参照して得られる当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、を前記コンピュータに実行させる、頂点ノードのノード識別子の配列を生成するコンピュータプログラム。
  14. ノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにより読み出し可能なコンピュータプログラムであって、
    それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を前記記憶装置に設けるステップと、
    前記第1の配列によって表現されたノード間の親子関係を参照して、
    前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップと、を前記コンピュータに実行させ、
    前記削除ステップにおいて、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納するステップと、
    前記第1の配列によって表現されたノード間の親子関係を参照して、前記第2の配列中のノード識別子を当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子によって示される第3の配列の位置にその値として格納する際に、当該ノード識別子を有するノードとその子孫のノードのノード識別子が示す位置の第3の配列の値として、他のノード識別子が存在する場合、当該ノード識別子と当該他のノード識別子のうち子孫に相当する方のノード識別子を、第2の配列から削除するステップと、を前記コンピュータに実行させ、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップにおいて、
    前記第2の配列中のノード識別子を参照して当該ノード識別子が示す位置の第3の配列の値が初期値でない場合には、当該ノード識別子を、前記第2の配列から削除するステップと、
    前記ノード識別子が示す位置の第3の配列の値が初期値である場合に、当該第3の配列の値として、当該ノード識別子を格納するとともに、前記第1の配列を参照して得られる当該ノード識別子を有するノードの、子孫のノードのノード識別子について、当該ノード識別子が示す位置の第3の配列の値が初期値ではない場合には、当該子孫のノードのノード識別子を第2の配列から削除するステップと、を前記コンピュータに実行させる、頂点ノードのノード識別子の配列を生成するコンピュータプログラム。
  15. ノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにより読み出し可能なコンピュータプログラムであって、
    それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を前記記憶装置に設けるステップと、
    前記第1の配列によって表現されたノード間の親子関係を参照して、
    前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップと、を前記コンピュータに実行させ、
    前記削除ステップにおいて、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納するステップと、
    前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
    前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除するステップと、を前記コンピュータに実行させ、
    子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップにおいて、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、を前記コンピュータに実行させる、頂点ノードのノード識別子の配列を生成するコンピュータプログラム。
  16. ノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにより読み出し可能なコンピュータプログラムであって、
    それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を前記記憶装置に設けるステップと、
    前記第1の配列によって表現されたノード間の親子関係を参照して、
    前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップと、を前記コンピュータに実行させ、
    前記削除ステップにおいて、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納するステップと、
    前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
    前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除するステップと、を前記コンピュータに実行させ、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップにおいて、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するとともに、当該あるノード識別子を、前記第2の配列から削除するステップと、
    前記第1の配列を参照して、あるノード識別子のノードの、親ノードのノード識別子が示す位置の第3の配列の値が初期値でなく、かつ、当該あるノード識別子が示す位置の第3の配列の値が初期値である場合には、当該あるノード識別子が示す位置の第3の配列の値として、前記親ノードのノード識別子が示す位置の第3の配列の値を格納するステップと、を前記コンピュータに実行させる、頂点ノードのノード識別子の配列を生成するコンピュータプログラム。
  17. ノードに固有のノード識別子が付与され、ルート・ノード以外のノードである非ルート・ノードのノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを格納する記憶装置を備えたコンピュータにより読み出し可能なコンピュータプログラムであって、
    それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を前記記憶装置に設けるステップと、
    前記第1の配列によって表現されたノード間の親子関係を参照して、
    前記第2の配列中のノード識別子の各々が前記第2の配列中の他のノード識別子で特定されるノードの子孫のノードのノード識別子である場合に、当該ノード識別子を、前記第2の配列から削除する削除ステップと、を前記コンピュータに実行させ、
    前記削除ステップにおいて、
    前記第1の配列と同一のサイズの第3の配列を生成し、前記記憶装置に格納するステップと、
    前記第2の配列中のノード識別子を参照して、当該ノード識別子のそれぞれが示す位置の第3の配列の値として、当該ノード識別子を格納するステップと、
    前記第3の配列中のノード識別子を参照して、当該ノード識別子が初期値ではない場合、当該ノード識別子によって特定されるノードの祖先に相当するノードのノード識別子が前記第3の配列に格納されているならば、当該ノード識別子を、第2の配列から削除するステップと、を前記コンピュータに実行させ、
    同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
    前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
    前記第2の配列から削除するステップにおいて、
    あるノード識別子が示す位置の第3の配列の値が初期値でない場合に、前記第1の配列によって表現されたノード間の親子関係を参照して、当該あるノード識別子を有するノードの子孫のノードを特定し、特定された子孫のノードのノード識別子が示す位置の第3の配列の値が、前記第2の配列中に存在する場合には、前記第2の配列から当該値を削除するステップと、を前記コンピュータに実行させる、頂点ノードのノード識別子の配列を生成するコンピュータプログラム。
  18. それぞれが、請求項13ないし17の何れか一項に記載されたコンピュータプログラムのステップをコンピュータに実行させたことにより生成された複数の第2の配列において、第2の配列の値のそれぞれにより表わされる複数のツリー群の何れにも属するツリー群を表わすために、当該ツリー群の頂点ノードのノード識別子からなる新たな配列を生成し、前記記憶装置に格納する、前記コンピュータにより読み出し可能なコンピュータプログラムであって、
    それぞれが、前記第1の配列と同一のサイズの複数の第4の配列を生成し、前記記憶装置に格納するステップと、
    それぞれの第2の配列中のノード識別子を、前記第1の配列を参照して、当該ノード識別子で特定される頂点ノードとその子孫のノードのノード識別子に対応する位置の、関連する第4の配列の値として格納するステップと、
    前記複数の第4の配列中、対応する位置のノード識別子の全てが初期値でない場合に、当該対応する位置のノード識別子を比較して、子孫のノードのノード識別子であって、関連する第2の配列に存在するノード識別子を、当該ノード識別子が前記新たな配列に相当する前記記憶装置に格納されている第5の配列に存在しない場合に、当該第5の配列の値として格納するステップと、を前記コンピュータに実行させるコンピュータプログラム。
JP2006514082A 2004-06-03 2005-05-27 配列の生成方法、情報処理装置、及び、プログラム Expired - Fee Related JP4681544B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2004165364 2004-06-03
JP2004165364 2004-06-03
PCT/JP2005/009755 WO2005119516A1 (ja) 2004-06-03 2005-05-27 配列の生成方法、情報処理装置、及び、プログラム

Publications (2)

Publication Number Publication Date
JPWO2005119516A1 JPWO2005119516A1 (ja) 2008-04-03
JP4681544B2 true JP4681544B2 (ja) 2011-05-11

Family

ID=35463068

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006514082A Expired - Fee Related JP4681544B2 (ja) 2004-06-03 2005-05-27 配列の生成方法、情報処理装置、及び、プログラム

Country Status (7)

Country Link
US (1) US7962494B2 (ja)
EP (1) EP1764710A4 (ja)
JP (1) JP4681544B2 (ja)
KR (1) KR101095377B1 (ja)
CN (1) CN101180623A (ja)
CA (1) CA2567947A1 (ja)
WO (1) WO2005119516A1 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8037102B2 (en) 2004-02-09 2011-10-11 Robert T. and Virginia T. Jenkins Manipulating sets of hierarchical data
US20090019067A1 (en) * 2004-06-23 2009-01-15 Turbo Data Laboratories Inc. Method, apparatus, and program for inserting node
US7620632B2 (en) * 2004-06-30 2009-11-17 Skyler Technology, Inc. Method and/or system for performing tree matching
US7801923B2 (en) 2004-10-29 2010-09-21 Robert T. and Virginia T. Jenkins as Trustees of the Jenkins Family Trust Method and/or system for tagging trees
US7627591B2 (en) 2004-10-29 2009-12-01 Skyler Technology, Inc. Method and/or system for manipulating tree expressions
US7630995B2 (en) 2004-11-30 2009-12-08 Skyler Technology, Inc. Method and/or system for transmitting and/or receiving data
US7636727B2 (en) 2004-12-06 2009-12-22 Skyler Technology, Inc. Enumeration of trees from finite number of nodes
US8316059B1 (en) 2004-12-30 2012-11-20 Robert T. and Virginia T. Jenkins Enumeration of rooted partial subtrees
KR20070101288A (ko) * 2005-01-25 2007-10-16 가부시키가이샤 터보 데이터 라보라토리 트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램
US8615530B1 (en) 2005-01-31 2013-12-24 Robert T. and Virginia T. Jenkins as Trustees for the Jenkins Family Trust Method and/or system for tree transformation
US7681177B2 (en) 2005-02-28 2010-03-16 Skyler Technology, Inc. Method and/or system for transforming between trees and strings
US8356040B2 (en) 2005-03-31 2013-01-15 Robert T. and Virginia T. Jenkins Method and/or system for transforming between trees and arrays
US7899821B1 (en) 2005-04-29 2011-03-01 Karl Schiffmann Manipulation and/or analysis of hierarchical data
JP5347965B2 (ja) * 2007-09-07 2013-11-20 日本電気株式会社 Xmlデータ処理システム、該システムに用いられるデータ処理方法及びxmlデータ処理制御プログラム
US9348884B2 (en) * 2008-05-28 2016-05-24 International Business Machines Corporation Methods and apparatus for reuse optimization of a data storage process using an ordered structure
US8341183B2 (en) * 2008-10-10 2012-12-25 International Business Machines Corporation Representing the allocation of integers
CN102841891B (zh) * 2011-06-21 2017-02-15 金蝶软件(中国)有限公司 一种树状结构节点的排序方法、装置及查询系统
JP5372131B2 (ja) * 2011-12-27 2013-12-18 株式会社日立製作所 インデックス処理方法及び計算機システム
EP2851803A4 (en) * 2012-05-15 2016-01-13 Nec Corp DISTRIBUTED DATA MANAGEMENT DEVICE AND DISTRIBUTED DATA OPERATION DEVICE
JP5764226B2 (ja) * 2014-02-17 2015-08-12 前田建設工業株式会社 情報処理装置、情報処理方法、プログラム、および媒体
US9529836B1 (en) * 2015-09-30 2016-12-27 Semmle Limited Managing disjoint-or trees
US10187264B1 (en) * 2017-02-14 2019-01-22 Intuit Inc. Gateway path variable detection for metric collection
US11741485B2 (en) * 2019-11-06 2023-08-29 The Nielsen Company (Us), Llc Methods and apparatus to estimate de-duplicated unknown total audience sizes based on partial information of known audiences
CN112434030B (zh) * 2020-11-11 2022-11-18 上海芯翌智能科技有限公司 基于树形结构数据的高性能列表实现方法与设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10240741A (ja) * 1997-02-28 1998-09-11 Nippon Telegr & Teleph Corp <Ntt> 木構造型データの管理方法
JPH11175558A (ja) * 1997-12-17 1999-07-02 Fuji Xerox Co Ltd 情報検索装置、情報検索方法および記録媒体
JP2003114816A (ja) * 2001-06-04 2003-04-18 Hewlett Packard Co <Hp> コンピュータメモリにインデックスを記憶するデータ構造

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001195406A (ja) 2000-01-06 2001-07-19 Media Fusion Co Ltd データベース管理システム
US6904562B1 (en) * 2000-08-31 2005-06-07 International Business Machines Corporation Machine-oriented extensible document representation and interchange notation
JP4165086B2 (ja) 2002-02-25 2008-10-15 日本電気株式会社 Xmlデータのrdbへの格納装置及び方法、rdbからのxmlデータの取得装置及び方法並びにプログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10240741A (ja) * 1997-02-28 1998-09-11 Nippon Telegr & Teleph Corp <Ntt> 木構造型データの管理方法
JPH11175558A (ja) * 1997-12-17 1999-07-02 Fuji Xerox Co Ltd 情報検索装置、情報検索方法および記録媒体
JP2003114816A (ja) * 2001-06-04 2003-04-18 Hewlett Packard Co <Hp> コンピュータメモリにインデックスを記憶するデータ構造

Also Published As

Publication number Publication date
EP1764710A1 (en) 2007-03-21
US7962494B2 (en) 2011-06-14
KR20070029170A (ko) 2007-03-13
CN101180623A (zh) 2008-05-14
EP1764710A4 (en) 2009-03-18
JPWO2005119516A1 (ja) 2008-04-03
KR101095377B1 (ko) 2011-12-16
CA2567947A1 (en) 2005-12-15
WO2005119516A1 (ja) 2005-12-15
US20080313196A1 (en) 2008-12-18

Similar Documents

Publication Publication Date Title
JP4681544B2 (ja) 配列の生成方法、情報処理装置、及び、プログラム
JP4886693B2 (ja) 情報処理方法、情報処理装置および情報処理プログラム
JP4712718B2 (ja) 配列の生成方法、及び、配列生成プログラム
JP4653157B2 (ja) ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム
JP4537391B2 (ja) ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム
US7664773B2 (en) Structured data storage method, structured data storage apparatus, and retrieval method
JP4796970B2 (ja) ツリーデータの検索・集計・ソート方法及びプログラム
JP5241738B2 (ja) 表からツリー構造データを構築する方法及び装置
WO2015010509A1 (zh) 一种基于一维线性空间实现Trie树的词典检索方法
JP3797821B2 (ja) オントロジー構築支援装置
CN110795526A (zh) 一种用于检索系统的数学公式索引创建方法与系统
JP4681555B2 (ja) ノード挿入方法、情報処理装置、および、ノード挿入プログラム
JP2005190163A (ja) 構造化データ検索方法、構造化データ検索装置およびプログラム
Chu et al. Automatic data extraction of websites using data path matching and alignment
JP2005250820A (ja) ストレージシステムにおけるxml文書分類方法
JP3842574B2 (ja) 情報抽出方法および構造化文書管理装置およびプログラム
JP2006018584A (ja) 構造化文書管理システム、値索引生成方法及びプログラム
JP2002183142A (ja) データ格納装置、データ格納方法及びデータ格納方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2006228070A (ja) データの検索方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080327

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080327

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101214

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

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

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

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees