JPWO2006038498A1 - 配列の生成方法、及び、配列生成プログラム - Google Patents
配列の生成方法、及び、配列生成プログラム Download PDFInfo
- Publication number
- JPWO2006038498A1 JPWO2006038498A1 JP2006539235A JP2006539235A JPWO2006038498A1 JP WO2006038498 A1 JPWO2006038498 A1 JP WO2006038498A1 JP 2006539235 A JP2006539235 A JP 2006539235A JP 2006539235 A JP2006539235 A JP 2006539235A JP WO2006038498 A1 JPWO2006038498 A1 JP WO2006038498A1
- Authority
- JP
- Japan
- Prior art keywords
- node
- vertex
- nodes
- array
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G16—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
- G16B—BIOINFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR GENETIC OR PROTEIN-RELATED DATA PROCESSING IN COMPUTATIONAL MOLECULAR BIOLOGY
- G16B10/00—ICT specially adapted for evolutionary bioinformatics, e.g. phylogenetic tree construction or analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Animal Behavior & Ethology (AREA)
- Biophysics (AREA)
- Physiology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Biotechnology (AREA)
- Evolutionary Biology (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Spectroscopy & Molecular Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
ツリー型データ構造のデータ間の、例えば、親子、祖先、子孫、兄弟、世代などの関係を効率的にトレースできるツリー型データ構造の表現方法を提供する。メモリには、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子と非ルート・ノードの各々に関連付けられた親ノードのノード識別子との組からなるC−P配列によって表現されたツリー型データ構造のデータと、それぞれが特定のノード及びその子孫のノードを含む1以上のノード群を表わすために、特定のノードを頂点ノードとして、そのノード識別子を格納した頂点ノードリストとが設けられる。システム10は、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 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以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を備えたことを特徴とする配列の生成方法により達成される。
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を備えたことを特徴とする配列の生成方法により達成される。
本発明において、新たな第3の配列には、親ノード、子ノード、兄ノード或いは弟ノードの何れかに移動後の頂点ノードのノード識別子が格納される。これにより、ロケーションパスをたどる基準点を適切に変更することができ、ツリー型データ構造のデータのトレース等を容易にすることができる。
好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を有する。
また、好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を有する。
別の実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ小さい値の格納位置に格納された第2のノード識別子を特定するステップと、
前記第1のノード識別子と、第2のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第2のノード識別子の格納位置に対応するノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ小さい値の格納位置に格納された第2のノード識別子を特定するステップと、
前記第1のノード識別子と、第2のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第2のノード識別子の格納位置に対応するノード識別子と決定するステップと、を有する。
さらに別の実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ大きい値の格納位置に格納された第3のノード識別子を特定するステップと、
前記第1のノード識別子と、第3のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第3のノード識別子の格納位置に対応するノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ大きい値の格納位置に格納された第3のノード識別子を特定するステップと、
前記第1のノード識別子と、第3のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第3のノード識別子の格納位置に対応するノード識別子と決定するステップと、を有する。
さらに別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるため、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるため、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を有する。
別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を有する。
また、別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より小さい値の格納位置に格納された、当該第1のノード識別子と等しい第4のノード識別子を検索するステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より小さい値の格納位置に格納された、当該第1のノード識別子と等しい第4のノード識別子を検索するステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
また、別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
また、本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子と、非ルート・ノードの各々に関連付けられた親ノードのノード識別子との組からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み取り可能なコンピュータプログラムであって、前記コンピュータに、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を実行させることを特徴とする配列生成プログラムによっても達成される。
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を実行させることを特徴とする配列生成プログラムによっても達成される。
好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を実行させる。
また、好ましい実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を実行させる。
別の実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ小さい値の格納位置に格納された第2のノード識別子を特定するステップと、
前記第1のノード識別子と、第2のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第2のノード識別子の格納位置に対応するノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ小さい値の格納位置に格納された第2のノード識別子を特定するステップと、
前記第1のノード識別子と、第2のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第2のノード識別子の格納位置に対応するノード識別子と決定するステップと、を実行させる。
さらに別の実施態様においては、子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ大きい値の格納位置に格納された第3のノード識別子を特定するステップと、
前記第1のノード識別子と、第3のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第3のノード識別子の格納位置に対応するノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ大きい値の格納位置に格納された第3のノード識別子を特定するステップと、
前記第1のノード識別子と、第3のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第3のノード識別子の格納位置に対応するノード識別子と決定するステップと、を実行させる。
好ましい実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるため、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるため、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を実行させる。
また、好ましい実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を実行させる。
別の好ましい実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より小さい値の格納位置に格納された、当該第1のノード識別子と等しい第4のノード識別子を検索するステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より小さい値の格納位置に格納された、当該第1のノード識別子と等しい第4のノード識別子を検索するステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を実行させる。
さらに好ましい実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を実行させる。
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を実行させる。
本発明によれば、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造の表現、および、構築に関する方法を提供することが可能となる。
更に、本発明によれば、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造の構築に関する情報処理装置を提供することが可能となる。
更に、本発明によれば、ツリー型データ構造のデータ間の関係を効率的にトレースすることができるツリー型データ構造の表現、および、構築に関するプログラムを提供することが可能となる。
特に、本発明によれば、特定のノードおよびその子孫のノードを含む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を介して相互に接続されている。
図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データ)から始めて、各ノードで枝分かれしてリーフ・ノード(端点)に至るノードとアークの組み合わせによって表現される。各ノードの実体的な値、例えば、店名ノードの値="フランス店"の格納場所は、店名ノードに関連したポインタで指定される。
図2A、Bは、ツリー形式データの一例であるPOSデータの説明図であり、図2Aは、このツリー形式データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した一例であり、図2Bは、同じツリー形式データをXML形式で表現した一例である。図2A、Bに示されるようにツリー型データ構造は、ルート・ノード(本例では、POSデータ)から始めて、各ノードで枝分かれしてリーフ・ノード(端点)に至るノードとアークの組み合わせによって表現される。各ノードの実体的な値、例えば、店名ノードの値="フランス店"の格納場所は、店名ノードに関連したポインタで指定される。
本発明は、ツリー型データ構造のトポロジーを対象とするため、以下の説明では、主として、ツリー型データ構造のトポロジーに関して説明する。
従来、このようなツリー型データ構造は、データを蓄えたノード間をポインタで接続することによって表現されている。しかし、ポインタ表現は、ポインタ値に必然性がないという欠点がある。即ち、ある場合には特定のノードAがある番地(例えば、100番地)に格納され、別の場合には同じノードAが別の番地(例えば、200番地)に格納されるので、ポインタ値が一定ではなく、ポインタ値は、本質的にノードの格納アドレスを表現するに過ぎない。そのため、例えば、ノードが深さ優先の規則に従ってポインタで接続されている場合、これらのノードを幅優先の規則に従ってポインタで再接続することは困難である。
これに対して、本発明者は、ツリー型データ構造のトポロジーがアークリストによって記述可能であることに着目した。アークリストとは、ノード間の親子関係を表すアークのリストである。図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の配列の両方の配列に出現する。
図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からの整数連番を使用する。これにより、ノード識別子から、そのノードに対応する親ノードのノード識別子が格納されているアドレスを簡単に取得することができるので、子ノードのノード識別子から親ノードのノード識別子を引く処理を高速化することができる。
好ましい一実施例によれば、ノード定義ステップはノード識別子として数値を使用し、より好ましくは、連続する整数を使用し、更に好ましくは、0又は1からの整数連番を使用する。これにより、ノード識別子から、そのノードに対応する親ノードのノード識別子が格納されているアドレスを簡単に取得することができるので、子ノードのノード識別子から親ノードのノード識別子を引く処理を高速化することができる。
ツリー型データ構造のノードにノード識別子として順序付きの番号を付与してノード間の親子関係を表現する場合、番号の付与順序に規則を定めることによって、その後のツリー型データ構造の取り扱いが容易になるという利点がある。本発明によれば、この番号の付与順序の規則として、同じ世代のノードよりも子ノードを優先する深さ優先モードと、子ノードよりも同じ世代のノードを優先する幅優先モードが利用される。
図6A〜Cは、本発明の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図6Aには、各ノードにID番号が付与されたツリー構造型データが示され、図6Bには、変換規則が示され、図6Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、深さ優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、兄弟ノードよりも子ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
また、図7A〜Cは、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図7Aには、各ノードにID番号が付与されたツリー構造型データが示され、図7Bには、変換規則が示され、図7Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、幅優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、子ノードよりも兄弟ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
このようにノード識別子として番号を使用すると、ノード番号から直ちに、即ち、O(1)のオーダーで、そのノードに関する格納値が格納されているアドレスを引くことができる。また、親子関係を「子→親」表現することによって、子ノードから親ノードを直ちに、即ち、O(1)のオーダーで引くことができる。
[深さ優先モード]
本発明の一実施例によれば、図6Cに示されるような深さ優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは深さ優先で連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
本発明の一実施例によれば、図6Cに示されるような深さ優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは深さ優先で連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に
最初にルート・ノードに番号を付与するステップ801と、
既に番号が付与されたあるノードに唯一の子ノードが存在する場合には、当該子ノードに当該あるノードに付与された前記番号の次の番号を付与するステップ802と、
既に番号が付与されたあるノードに複数の子ノードが存在する場合には、当該複数の子ノードの間の兄弟関係に従って、弟ノードは直上の兄ノードの全ての子孫ノードに番号が付与された後に次の番号が付与されるように、一番上の兄ノードから一番下の弟ノードまで番号を付与するステップ803と、
を実行させる。これにより、深さ優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
最初にルート・ノードに番号を付与するステップ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の終了点である。
(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に、
子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは幅優先モードで連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
本発明の一実施例によれば、図7Cに示されるような幅優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは幅優先モードで連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図11は、本発明の一実施例による幅優先に基づくノート定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に、
各ノードが前記ルート・ノードから何世代目のノードであるか、及び、各世代に含まれるノード数を算出するステップ1101と、
最初に前記ルート・ノードに番号を付与するステップ1102と、
ある世代に含まれる全てのノードに番号が付与されたならば、当該ある世代の次の世代にノードが存在しなくなるまで、当該次の世代に含まれる全てのノードに対して、親ノードが異なる場合には、当該親ノードに番号が付与された順番に当該ノードに番号を付与し、当該親ノードが同一である場合には、当該親ノードから派生した複数の子ノードの間に兄弟関係を定義し、一番上の兄ノードから一番下の弟ノードまで直前に付与された番号の次の番号から連続的に変化する固有の整数を順に付与するステップ1013と、
を実行させる。これにより、幅優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
各ノードが前記ルート・ノードから何世代目のノードであるか、及び、各世代に含まれるノード数を算出するステップ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の終了点である。
(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、B〜図20A、Bから理解できるように、頂点ノードリスト(集計においては、これに加えて、頂点ノードリストと同一サイズの、集計結果(ノード数)を格納する配列)によって、それぞれの処理や演算の結果を表わすことができる。
[頂点ノードの移動]
表形式のデータでは、項目が規則的に並んでいるので、表示、編集の対象となるセル(或いは列や行)を指定する操作は簡単に実行可能である。その一方、ツリーのデータは、ノードが規則的に並んでいないので、表示、編集、集計の対象となるノード(表形式データの「セル」に該当する)群を特定する操作が不可欠となる。上述した頂点ノードにより、このような表示、編集、集計などの操作を行う対象のノード群を指定することができる。表示、編集、集計などの操作対象となるノード群を指定するノードをコンテキストノードと称することもある。したがって、本明細書において、頂点ノードは、コンテキストノードと同じ機能をもつ。
表形式のデータでは、項目が規則的に並んでいるので、表示、編集の対象となるセル(或いは列や行)を指定する操作は簡単に実行可能である。その一方、ツリーのデータは、ノードが規則的に並んでいないので、表示、編集、集計の対象となるノード(表形式データの「セル」に該当する)群を特定する操作が不可欠となる。上述した頂点ノードにより、このような表示、編集、集計などの操作を行う対象のノード群を指定することができる。表示、編集、集計などの操作対象となるノード群を指定するノードをコンテキストノードと称することもある。したがって、本明細書において、頂点ノードは、コンテキストノードと同じ機能をもつ。
上述した検索、集計、ソード、集合演算は、頂点ノードリスト中の値と異なる新たな値が出現しない操作であった。ところが、部分ツリー群を対象とした操作においては、ツリーのトポロジーを移動することが求められることがしばしば生じる。
たとえば、親を頂点ノードとして、家族構成を表わすようなツリーを考える。現在、母親のノードに、頂点ノードが位置しているが、子供全員の一覧を得たい場合には、頂点ノードを、母親から子供に移動する場合が考えられる。なお、正規部分ツリー群の頂点ノードリストであっても、頂点ノードを移動した後の頂点ノードリストは、正規部分ツリー群になるとは限らず、非正規部分ツリー群になる場合もある。
以下、頂点ノードを移動する例について説明する。図21Bに示すツリーにおいて、図21Aの頂点ノードリストに示されるように、ノード識別子「1」、「2」および「3」のノードが、それぞれ、頂点ノードであるときに、当該頂点ノードを、「子供」に相当するノードに移動する場合を考える。なお、図21B、Dにおいて、矢印を付されたノードが、頂点ノードであることを示す。
この場合には、図22Dに示すように、ノード識別子「1」の頂点ノードは、ノード識別子「4」および「5」のノードに移動する。また、ノード識別子「2」の頂点ノードは、ノード識別子「6」のノードに移動するとともに、ノード識別子「3」の頂点ノードは、ノード識別子「7」のノードに移動する。その結果、移動後の頂点ノードを表わす頂点ノードリストは、図21Cに示すように、[4,5,6,7]となる。
図21Dに示すように、ノード識別子「4」、「5」、「6」および「7」のノードが頂点ノードであるときに、頂点ノードを、「親」に相当するノードに移動する場合を考える。ノード識別子「4」の頂点ノード、および、ノード識別子「5」の頂点ノードは、それぞれ、ノード識別子「1」のノードに移動する。また、ノード識別子「6」の頂点ノードは、ノード識別子「2」のノードに移動し、ノード識別子「7」の頂点ノードは、ノード識別子「3」のノードに移動する。その結果、移動後の頂点ノードを表わす頂点ノードリストは、[1,1,2,3]となる。
次に、図23Bに示すように、ノード識別子「1」、「2」、「3」のノードが頂点ノードであるときに、頂点ノードを、同じ世代で、かつ、すぐ下の「弟」のノード、つまり、本発明にかかるノード識別子の付与規則にしたがえば、同じ世代で、かつ、親ノードが同一であるノードのうち、最も近いノード識別子を有するノードに移動させることを考える(図23Bの破線矢印参照)。ここに、「弟」のノードは、頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続されるようなノードと考える。また、「兄」のノードとは、当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されているノードと考える。
図23B、図23Dに示すように、ノード識別子「1」の頂点ノードは、ノード識別子「2」のノードに移動し、ノード識別子「2」の頂点ノードは、ノード識別子「3」のノードに移動する。その一方、ノード識別子「3」の頂点ノードは、「弟」のノードが存在しないため消滅する。したがって、図23Cに示すように、移動後の頂点ノードを表わす頂点ノードリストは、[2,3]となる。
[頂点ノードを移動させる際の処理(幅優先モード)]
以下、本発明の実施の形態において、頂点ノードを移動させる際に実行される処理について説明する。まず、幅先モードに基づくツリー型データ構造から作られた「子→親」表現に基づく配列(C−P配列)を利用した場合の頂点ノードの移動について説明する。
以下、本発明の実施の形態において、頂点ノードを移動させる際に実行される処理について説明する。まず、幅先モードに基づくツリー型データ構造から作られた「子→親」表現に基づく配列(C−P配列)を利用した場合の頂点ノードの移動について説明する。
図24は、頂点ノードを子供に相当するノードに移動する際に、コンピュータシステム10において実行される処理を示すフローチャートである。図24に示すように、コンピュータシステム10は、頂点ノードのノード識別子が格納された頂点ノードリストの値を参照して(ステップ2401)、C−P配列中、当該頂点ノードリストの値(ノード識別子)と同一の値を検索する(ステップ2402)。次いで、コンピュータシステム10は、C−P配列において頂点ノードのノード識別子を同一の値を有するノードのノード識別子を、新たな頂点ノードリストに格納する(ステップ2403)。ステップ2401〜2403の処理を全ての頂点ノードリスト中の値について実行することで(ステップ2404参照)、新たな頂点ノードリストには、子供に相当するノードに移動された頂点ノードのノード識別子が格納される。
図25Aの例において、頂点ノードリストが[1,2,3]であると考える。ノード識別子「1」の頂点ノード(矢印参照)に着目すると、C−P配列を検索した結果、ノード識別子「4」および「5」について、C−P配列の値が、頂点ノードリスト中の値「1」と同様であることがわかる(図25B参照)。そこで、新たな頂点ノードリストには、値「4」および「5」が格納される。なお、幅優先モードにおけるC−P配列では、値が昇順であるため、ステップ2402の検索は容易である。他の頂点ノードリスト中の値「2」、「3」についても同様の処理を実行する結果、新たな頂点ノードリスト[4,5,6,7]を得ることができる。
図26は、頂点ノードを親に相当するノード(親ノード)に移動する際に、コンピュータシステム10において実行される処理を示すフローチャートである。図26に示すように、コンピュータシステム10は、頂点ノードリストの値を参照して(ステップ2601)、当該頂点ノードリストの値が示すC−P配列の値を取得する(ステップ2602)。コンピュータシステム10は、取得した値を、新たな頂点ノードリストに格納する(ステップ2603)。ステップ2601〜2603の処理を全ての頂点ノードリスト中の値について実行することで(ステップ2604参照)、新たな頂点ノードリストには、親に相当するノードに移動された頂点ノードのノード識別子が格納される。
図27Aにおいて、頂点ノードリストが[4,5,6,7]であると考える。ノード識別子「4」の頂点ノード(矢印参照)に着目すると、ノード識別子「4」に対応するC−P配列の値は、「1」であるため、この値が、新たな頂点ノードリストに格納される。同様に、頂点ノードリストに格納された他のノードのノード識別子「5」、「6」および「7」について、それぞれ、対応するC−P配列の値は、「1」、「2」、「3」となる。したがって、新たな頂点ノードリストは、[1,1,2,3]となる。
図28は、頂点ノードを、弟に相当するノード(弟ノード)に移動する際に、コンピュータシステム10において実行される処理を示すフローチャートである。図28に示すように、コンピュータシステム10は、頂点ノードリストの値を参照して(ステップ2801)、当該頂点ノードリストの値が示すC−P配列の値(ノード識別子)を取得する(ステップ2802)。続いて、コンピュータシステム10は、当該頂点ノードの次の値(本実施の形態では、もとの値に「1」を加えた値)が示すC−P配列の値(ノード識別子)を取得する(ステップ2803)。
次いで、コンピュータシステム10は、取得した2つの値を比較して、両者が一致する場合には(ステップ2804でイエス(Yes))、上記次の値(ノード識別子)を、新たな頂点ノードリストに格納する(ステップ2805)。その一方、両者が一致しない場合には、処理対象となっている頂点ノードが移動すると、消滅すると判断される。
コンピュータシステム10は、ステップ2601〜2603の処理を全ての頂点ノードリスト中の値について実行することで(ステップ2806参照)、新たな頂点ノードリストには、弟に相当するノードに移動された頂点ノードのノード識別子が格納される。
図29Aにおいて頂点ノードリストが[4,5,6,7]であると考える。ノード識別子「4」の頂点ノード(矢印参照)に着目すると、ノード識別子「4」に対応するC−P配列の値は、「1」であり、ノード識別子「5」に対応するC−P配列の値も「1」である。したがって両者は一致するため、ノード識別子「5」が、新たな頂点ノードリストに格納される。ノード識別子「5」、「6」および「7」については、それぞれ、自身に対応するC−P配列の値と、自身の値に「1」を加えたものに対応するC−P配列の値とが相違するため、頂点ノードは消滅する。したがって、新たな頂点ノードリストは、[5]となる。
なお、頂点ノードを、「兄」に相当するノードに移動させる場合には、頂点ノードリスト中のノード識別子が示すC−P配列の値と、当該ノード識別子の一つ前のノード識別子(つまり、値が「−1」であるようなノード識別子)が示すC−P配列の値とを比較すればよい。
[頂点ノードを移動させる際の処理(深さ優先モード)]
以下、本発明の実施の形態において、頂点ノードを移動させる際に実行される処理について説明する。まず、深さ優先モードに基づくツリー型データ構造から作られた「子→親」表現に基づく配列(C−P配列)を利用した場合の頂点ノードの移動について説明する。
以下、本発明の実施の形態において、頂点ノードを移動させる際に実行される処理について説明する。まず、深さ優先モードに基づくツリー型データ構造から作られた「子→親」表現に基づく配列(C−P配列)を利用した場合の頂点ノードの移動について説明する。
深さ優先モードの下においても、頂点ノードを子供に相当するノードに移動する際に、コンピュータシステム10において実行される処理は、図24に示すものと同様である。なお、深さ優先モードにおけるC−P配列では、値は昇順とはなっていない。しかしながら、子供に相当するノードは、頂点ノードリスト中のノード識別子の次の(本実施の形態では値に「1」が加えられた)ノード識別子から、ノード識別子が示すC−P配列の値が、頂点ノードリストの値より小さくなるようなノード識別子の一つ手前(本実施の形態では、そのようなノード識別子より「1」だけ小さいノード識別子)のノードの範囲に現れる。
したがって、子供に相当するノードを検索する際には、図30に示すように、コンピュータシステム10は、頂点ノードリスト中のノードを基準ノードとして、当該基準ノードの次の位置(つまり、基準ノードのノード識別子に「1」を加えたノード識別子が示す位置)に、検索用ポインタを配置し(ステップ3001)、検索用ポインタが示すC−P配列の値を特定する(ステップ3002)。次いで、特定された値が、基準ノードのノード識別子と同じであるかが判断される(ステップ3003)。ステップ3003でイエス(Yes)と判断された場合には、コンピュータシステム10は、検索用ポインタが位置するノード識別子を、新たな頂点ノードリストに格納する(ステップ3004)。その後、検索用ポインタが1つ進められる(ステップ3005)。
その一方、ステップ3003でノー(No)と判断された場合には、C−P配列の値が、基準ノードのノード識別子以上であるかを判断する(ステップ3006)。ステップ3006でイエス(Yes)と判断された場合には、検索用ポインタが位置するノード識別子のノードは、基準ノードの子孫であるため、次の処理のため、検索用ポインタが1つ進められる(ステップ3005)。ステップ3006でノー(No)であることは、検索用ポインタが位置するノード識別子のノードは、頂点ノードの子孫ではないため、処理を終了させる。
図31Aの例において、頂点ノードリストが[1,6,8]であると考える。ノード識別子「1」の頂点ノード(矢印参照)に着目する。検索用ポインタは、初期的には、ノード識別子「2」の位置に配置される。この時点で、検索用ポインタが示すC−P配列の値は、「1」であるため、ノード識別子「2」が新たな頂点ノードリストに格納される。
また、検索用ポインタが、ノード識別子「5」に配置されるときに、当該検索用ポインタが示すC−P配列の値は、「1」であるため、ノード識別子「5」が新たな頂点ノードリストに格納される。その後、検索用ポインタがノード識別子「6」には位置されるときに、当該検索用ポインタが示すC−P配列の値は「0」であり、基準ノードのノード識別子「1」より小さいため、処理自体が終了する。
次に、頂点ノードを親に相当するノードに移動する際に、コンピュータシステム10にて実行される処理について説明する。親に相当するノードに移動する際の処理は、図26に示すものと同様である。図32Aの例において、頂点ノードリストが[2,5,7,9]であると考える。ノード識別子「2」の頂点ノード(矢印参照)に着目すると、ノード識別子「2」に対応するC−P配列の値(図32B参照)は、「1」であるため、この値が、新たな頂点ノードリストに格納される。同様に、ノード識別子「5」、「7」、「9」について、それぞれ、対応するC−P配列の値は「1」、「6」、「8」であるため、新たな頂点ノードリストは、[1,1,6,8]となる。
図33は、頂点ノードを弟に相当するノードに移動する際に、コンピュータシステム10において実行される処理を示すフローチャートである。図33に示すように、コンピュータシステム10は、頂点ノードリストの値を参照して(ステップ3301)、当該頂点ノードリストの値が示すC−P配列の値(ノード識別子)を取得する(ステップ3302)。次いで、コンピュータシステム10は、次のノード識別子(「1」だけ値が大きいノード識別子)以降で、同一のC−P配列の値をもつノード識別子を検索する(ステップ3303)。同一の値が見つかれば(ステップ3304でイエス(Yes))、コンピュータシステム10は、その値を有するノード識別子を、新たな頂点ノードリストに格納する(ステップ3305)。同一の値が見つからない場合には、当該頂点ノードは消滅したと判断される。
コンピュータシステムは、ステップ3301〜3305の処理を全ての頂点ノードリストの値について実行することで(ステップ3306)、新たな頂点ノードリストには、弟に相当するノードに移動された頂点ノードのノード識別子が格納される。図34Aにおいて、頂点ノードリストが[2,5,7,9]であると考える。ノード識別子「2」の頂点ノードに着目すると、ノード識別子に対応するC−P配列の値は「1」である。図33の処理によって、C−P配列の値が「1」であるようなノード識別子「5」を検索することができるため、頂点ノードリストには、ノード識別子「5」が格納される。ノード識別子「5」、「7」、「9」の頂点ノードについては、C−P配列を検索しても、同一の値を見出すことができない。つまり、親ノードとして同じ番号をもつノードを見出すことが出来ない。したがって、これら頂点ノードは、移動によって消滅する。その結果、新たな頂点ノードの頂点ノードリストは「5」となる。
[情報処理装置]
図35は、本発明の一実施例にかかるツリー型データ構造を構築し、頂点ノードリストを生成し、かつ、頂点ノードの移動後の頂点ノードリストを生成する情報処理装置3500の機能ブロックダイヤグラムである。この情報処理装置3500は、実際には、図1に示すコンピュータシステム10に必要なプログラムをインストールすることにより実現される。
図35は、本発明の一実施例にかかるツリー型データ構造を構築し、頂点ノードリストを生成し、かつ、頂点ノードの移動後の頂点ノードリストを生成する情報処理装置3500の機能ブロックダイヤグラムである。この情報処理装置3500は、実際には、図1に示すコンピュータシステム10に必要なプログラムをインストールすることにより実現される。
図35に示すように、情報処理装置3500は、ツリー型データ構造を表現するデータ、および、頂点ノードリストを記憶する記憶部3501と、ルート・ノードを含むノードに固有のノード識別子を付与し、ノード識別子を記憶部3501に格納するノード定義部3502と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付け、当該関連付けを示す配列であるC−P配列を記憶部3501に格納する親子関係定義部3503と、記憶部3501に格納されたノード識別子およびC−P配列に基づいて、頂点ノードリストを生成する頂点ノードリスト生成部3504と、入力装置(図1の符号24参照)などからの指示にしたがって、頂点ノードを移動させ、移動後の頂点ノードを示す新たな頂点ノードリストを生成する頂点ノード移動処理部3505とを備えている。頂点ノードリスト生成部35にて生成された頂点ノードリストや、頂点ノード移動処理部3505にて生成された新たな頂点ノードリストは、記憶部3501に記憶される。
好ましくは、ノード定義部3502は、ノード識別子として数値を用い、より好ましくは、ノード識別子として連続する整数を用いる。また、親子関係定義部3503は、非ルート・ノードの各々に付与されたノード識別子と、関連付けられた親ノードに付与されたノード識別子と、の組の配列を記憶部3501に格納する。
また、入力装置(図1の符号24参照)からの指示などにより、ノードが指定されると、頂点ノードリスト生成部3504は、指定されたノードのノード識別子を、頂点ノードリスト中に格納する。また、入力装置からの指示などにより、頂点ノードの移動の指示(親に相当するノードへの移動、子に相当するノードへの移動、弟(兄)に相当するノードへの移動)が与えられると、頂点ノード移動処理部3505は、C−P配列および頂点ノードリストを、記憶部3501から取得して、新たな頂点ノードリストを生成し、記憶部3501に記憶する。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
10 コンピュータシステム
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 CD−ROMドライバ
22 I/F
24 入力装置
26 表示装置
3500 情報処理装置
3501 記憶部
3502 ノード定義部
3503 親子関係定義部
3504 頂点ノード生成部
3505 頂点ノード移動処理部
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 CD−ROMドライバ
22 I/F
24 入力装置
26 表示装置
3500 情報処理装置
3501 記憶部
3502 ノード定義部
3503 親子関係定義部
3504 頂点ノード生成部
3505 頂点ノード移動処理部
【0004】
リー型データ構造における頂点ノードを移動させる方法、情報処理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
[0017] 本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を備えたことを特徴とする配列の生成方法により達成される。
[0018] 本発明において、新たな第3の配列には、移動前の頂点ノードと所定の関係にあるノード、すなわち、親ノード、子ノード、兄ノード或いは弟ノードの何れかのノード識別子が、移動後の頂点ノードのノード識別子として格納される。これにより、ロケーションパスをたどる基準点を適切に変更することができ、ツリー型データ構造のデータのトレース等を容易にすることができる。
リー型データ構造における頂点ノードを移動させる方法、情報処理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
[0017] 本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を備えたことを特徴とする配列の生成方法により達成される。
[0018] 本発明において、新たな第3の配列には、移動前の頂点ノードと所定の関係にあるノード、すなわち、親ノード、子ノード、兄ノード或いは弟ノードの何れかのノード識別子が、移動後の頂点ノードのノード識別子として格納される。これにより、ロケーションパスをたどる基準点を適切に変更することができ、ツリー型データ構造のデータのトレース等を容易にすることができる。
【0008】
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0026] また、別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0027] また、本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み取り可能なコンピュータプログラムであって、前記コンピュータに、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0026] また、別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0027] また、本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み取り可能なコンピュータプログラムであって、前記コンピュータに、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
【0016】
関係によって親子関係を表現する場合、「親→子」関係の場合には得られなかった重要な性質がある。即ち、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。つまり、アークリストは、実際には、要素To−ID、すなわち、親ノードの配列だけを準備すればよい。この結果として、アークリストを格納するための記憶容量が削減される。この記憶容量の削減は、メモリへのアクセス回数が低減するという効果があるので、結果的に、処理の高速化が実現できる。
[0050] 図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。図4Aはツリー全体の説明図であり、図4Bは「子→親」関係に基づくアークリストである。図4Bのアークリストは、ルート・ノードに対する親ノードの格納領域を含んでいるので、ルート・ノードの親ノードとして、便宜的に”−”が設定されている。但し、ルート・ノードに対応する親ノードは存在しないので、図4Cに示されるように、「子→親」関係に基づくアークリストからルート・ノードに対する親ノードの格納領域を除いても構わない。このように本発明の一実施例では、ルート・ノード以外のノードである非ルート・ノードの各々に対して、非ルート・ノードの親ノードを関連付けることによりノード間の親子関係を表現する。そして、「子→親」表現された子のノードから親のノードのリストを辿ることでツリーのトポロジーを表現することができる。
[0051] このような「子→親」関係に基づくツリー型データ構造は、本発明の一実施例によれば、図5に示されるように、図1に示されたコンピュータシステム10に、ルート・ノードを含むノードに固有のノード識別子を付与するノード定義ステップ501と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付ける親子関係定義ステップ502と、を実行させることによってRAM14上に構築される。このように、最初に、文字列、浮動小数、整数などの任意の識別情報によってノードにノード識別子を付与し、次に、「子→親」表現に基づいて親子関係を定義することによって、子ノードのノード識別子から親ノードのノード識別子を引く(ルックアップする)ことでツリーのトポロジーを表現することができる。
関係によって親子関係を表現する場合、「親→子」関係の場合には得られなかった重要な性質がある。即ち、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。つまり、アークリストは、実際には、要素To−ID、すなわち、親ノードの配列だけを準備すればよい。この結果として、アークリストを格納するための記憶容量が削減される。この記憶容量の削減は、メモリへのアクセス回数が低減するという効果があるので、結果的に、処理の高速化が実現できる。
[0050] 図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。図4Aはツリー全体の説明図であり、図4Bは「子→親」関係に基づくアークリストである。図4Bのアークリストは、ルート・ノードに対する親ノードの格納領域を含んでいるので、ルート・ノードの親ノードとして、便宜的に”−”が設定されている。但し、ルート・ノードに対応する親ノードは存在しないので、図4Cに示されるように、「子→親」関係に基づくアークリストからルート・ノードに対する親ノードの格納領域を除いても構わない。このように本発明の一実施例では、ルート・ノード以外のノードである非ルート・ノードの各々に対して、非ルート・ノードの親ノードを関連付けることによりノード間の親子関係を表現する。そして、「子→親」表現された子のノードから親のノードのリストを辿ることでツリーのトポロジーを表現することができる。
[0051] このような「子→親」関係に基づくツリー型データ構造は、本発明の一実施例によれば、図5に示されるように、図1に示されたコンピュータシステム10に、ルート・ノードを含むノードに固有のノード識別子を付与するノード定義ステップ501と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付ける親子関係定義ステップ502と、を実行させることによってRAM14上に構築される。このように、最初に、文字列、浮動小数、整数などの任意の識別情報によってノードにノード識別子を付与し、次に、「子→親」表現に基づいて親子関係を定義することによって、子ノードのノード識別子から親ノードのノード識別子を引く(ルックアップする)ことでツリーのトポロジーを表現することができる。
【0004】
リー型データ構造における頂点ノードを移動させる方法、情報処理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
[0017] 本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を備えたことを特徴とする配列の生成方法により達成される。
[0018] 本発明において、新たな第3の配列には、移動前の頂点ノードと所定の関係にあるノード、すなわち、親ノード、子ノード、兄ノード或いは弟ノードの何れかのノード識別子が、移動後の頂点ノードのノード識別子として格納される。これにより、ロケーションパスをたどる基準点を適切に変更することができ、ツリー型データ構造のデータのトレース等を容易にすることができる。
リー型データ構造における頂点ノードを移動させる方法、情報処理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
[0017] 本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を備えたことを特徴とする配列の生成方法により達成される。
[0018] 本発明において、新たな第3の配列には、移動前の頂点ノードと所定の関係にあるノード、すなわち、親ノード、子ノード、兄ノード或いは弟ノードの何れかのノード識別子が、移動後の頂点ノードのノード識別子として格納される。これにより、ロケーションパスをたどる基準点を適切に変更することができ、ツリー型データ構造のデータのトレース等を容易にすることができる。
【0008】
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0026] また、別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0027] また、本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み取り可能なコンピュータプログラムであって、前記コンピュータに、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0026] また、別の実施態様においては、同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有する。
[0027] また、本発明の目的は、ノードに固有のノード識別子が付与され、ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けられた親ノードのノード識別子からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み取り可能なコンピュータプログラムであって、前記コンピュータに、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
【0016】
関係によって親子関係を表現する場合、「親→子」関係の場合には得られなかった重要な性質がある。即ち、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。つまり、アークリストは、実際には、要素To−ID、すなわち、親ノードの配列だけを準備すればよい。この結果として、アークリストを格納するための記憶容量が削減される。この記憶容量の削減は、メモリへのアクセス回数が低減するという効果があるので、結果的に、処理の高速化が実現できる。
[0050] 図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。図4Aはツリー全体の説明図であり、図4Bは「子→親」関係に基づくアークリストである。図4Bのアークリストは、ルート・ノードに対する親ノードの格納領域を含んでいるので、ルート・ノードの親ノードとして、便宜的に”一”が設定されている。但し、ルート・ノードに対応する親ノードは存在しないので、図4Cに示されるように、「子→親」関係に基づくアークリストからルート・ノードに対する親ノードの格納領域を除いても構わない。このように本発明の一実施例では、ルート・ノード以外のノードである非ルート・ノードの各々に対して、非ルート・ノードの親ノードを関連付けることによりノード間の親子関係を表現する。そして、「子→親」表現された子のノードから親のノードのリストを辿ることでツリーのトポロジーを表現することができる。
[0051] このような「子→親」関係に基づくツリー型データ構造は、本発明の一実施例によれば、図5に示されるように、図1に示されたコンピュータシステム10に、ルート・ノードを含むノードに固有のノード識別子を付与するノード定義ステップ501と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付ける親子関係定義ステップ502と、を実行させることによってRAM14上に構築される。このように、最初に、文字列、浮動小数、整数などの任意の識別情報によってノードにノード識別子を付与し、次に、「子→親」表現に基づいて親子関係を定義することによって、子ノードのノード識別子から親ノードのノード識別子を引く(ルックアップする)ことでツリーのトポロジーを表現することができる。
関係によって親子関係を表現する場合、「親→子」関係の場合には得られなかった重要な性質がある。即ち、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。つまり、アークリストは、実際には、要素To−ID、すなわち、親ノードの配列だけを準備すればよい。この結果として、アークリストを格納するための記憶容量が削減される。この記憶容量の削減は、メモリへのアクセス回数が低減するという効果があるので、結果的に、処理の高速化が実現できる。
[0050] 図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。図4Aはツリー全体の説明図であり、図4Bは「子→親」関係に基づくアークリストである。図4Bのアークリストは、ルート・ノードに対する親ノードの格納領域を含んでいるので、ルート・ノードの親ノードとして、便宜的に”一”が設定されている。但し、ルート・ノードに対応する親ノードは存在しないので、図4Cに示されるように、「子→親」関係に基づくアークリストからルート・ノードに対する親ノードの格納領域を除いても構わない。このように本発明の一実施例では、ルート・ノード以外のノードである非ルート・ノードの各々に対して、非ルート・ノードの親ノードを関連付けることによりノード間の親子関係を表現する。そして、「子→親」表現された子のノードから親のノードのリストを辿ることでツリーのトポロジーを表現することができる。
[0051] このような「子→親」関係に基づくツリー型データ構造は、本発明の一実施例によれば、図5に示されるように、図1に示されたコンピュータシステム10に、ルート・ノードを含むノードに固有のノード識別子を付与するノード定義ステップ501と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付ける親子関係定義ステップ502と、を実行させることによってRAM14上に構築される。このように、最初に、文字列、浮動小数、整数などの任意の識別情報によってノードにノード識別子を付与し、次に、「子→親」表現に基づいて親子関係を定義することによって、子ノードのノード識別子から親ノードのノード識別子を引く(ルックアップする)ことでツリーのトポロジーを表現することができる。
この場合には、図21Dに示すように、ノード識別子「1」の頂点ノードは、ノード識別子「4」および「5」のノードに移動する。また、ノード識別子「2」の頂点ノードは、ノード識別子「6」のノードに移動するとともに、ノード識別子「3」の頂点ノードは、ノード識別子「7」のノードに移動する。その結果、移動後の頂点ノードを表わす頂点ノードリストは、図21Cに示すように、[4,5,6,7]となる。
図21D、22Bに示すように、ノード識別子「4」、「5」、「6」および「7」のノードが頂点ノードであるときに、頂点ノードを、「親」に相当するノードに移動する場合を考える。ノード識別子「4」の頂点ノード、および、ノード識別子「5」の頂点ノードは、それぞれ、ノード識別子「1」のノードに移動する。また、ノード識別子「6」の頂点ノードは、ノード識別子「2」のノードに移動し、ノード識別子「7」の頂点ノードは、ノード識別子「3」のノードに移動する。その結果、移動後の頂点ノードを表わす頂点ノードリストは、[1,1,2,3]となる(図22A)。
Claims (18)
- ノードに固有のノード識別子が付与され、
ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子と、非ルート・ノードの各々に関連付けられた親ノードのノード識別子との組からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにおいて、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を備えたことを特徴とする配列の生成方法。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ小さい値の格納位置に格納された第2のノード識別子を特定するステップと、
前記第1のノード識別子と、第2のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第2のノード識別子の格納位置に対応するノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ大きい値の格納位置に格納された第3のノード識別子を特定するステップと、
前記第1のノード識別子と、第3のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第3のノード識別子の格納位置に対応するノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるため、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より小さい値の格納位置に格納された、当該第1のノード識別子と等しい第4のノード識別子を検索するステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップが、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を有することを特徴とする請求項1に記載の方法。 - ノードに固有のノード識別子が付与され、
ノード間の親子関係がルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子と、非ルート・ノードの各々に関連付けられた親ノードのノード識別子との組からなる第1の配列によって表現された、ツリー型データ構造のデータを備えたコンピュータにより読み取り可能なコンピュータプログラムであって、前記コンピュータに、
それぞれが特定のノードおよびその子孫のノードを含む1以上のノード群を表わすために、当該特定のノードを頂点ノードとして、そのノード識別子を格納した第2の配列を設けるステップと、
前記第1の配列を参照して、前記第2の配列にノード識別子が格納された頂点ノードの各々を、
a)当該頂点ノードとアークで直接結ばれ、かつ、当該アークが頂点ノードから延びているような子ノード、
b)当該頂点ノードとアークで直接結ばれ、かつ、当該アークがそこから頂点ノードまで延びるような親ノード、
c)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続される以前に、アークが接続されている兄ノード、並びに、
d)当該頂点ノードと同世代のノードであって、当該頂点ノードの親ノードから頂点ノードに対してアークが接続された後に、アークが接続される弟ノード
の何れかに移動させて、移動後の新たな頂点ノードのノード識別子を格納した第3の配列を生成するステップと、を実行させることを特徴とする配列生成プログラム。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ小さい値の格納位置に格納された第2のノード識別子を特定するステップと、
前記第1のノード識別子と、第2のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第2のノード識別子の格納位置に対応するノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。 - 子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、前記頂点ノード識別子に対応する位置の値より1だけ大きい値の格納位置に格納された第3のノード識別子を特定するステップと、
前記第1のノード識別子と、第3のノード識別子とが一致する場合に、前記移動後の頂点ノード識別子を、前記第3のノード識別子の格納位置に対応するノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、子ノードに移動させるため、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子が格納された格納位置を特定するステップと、
移動後の頂点ノードのノード識別子を、当該格納位置に対応するノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、親ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子に対応する位置に格納されたノード識別子を特定するステップと、
移動後の頂点ノードのノード識別子を、前記対応する位置に格納されたノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、兄ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より小さい値の格納位置に格納された、当該第1のノード識別子と等しい第4のノード識別子を検索するステップと、
前記第4のノード識別子の格納位置のうち、最大の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。 - 同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数が付与され、
前記第1の配列が、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成され、
前記頂点ノードの各々を、弟ノードに移動させるために、前記第3の配列を生成するステップにおいて、前記コンピュータに、
前記第1の配列中、頂点ノードのノード識別子の格納位置に格納された第1のノード識別子を特定するステップと、
前記第1の配列中、頂点ノードのノード識別子の格納位置の値より大きい値の格納位置に格納された、当該第1のノード識別子と等しい第5のノード識別子を検索するステップと、
前記第5のノード識別子の格納位置のうち、最小の格納位置を特定するステップと、
前記移動後の頂点ノードのノード識別子を、前記最大の格納位置に対応するノード識別子と決定するステップと、を実行させることを特徴とする請求項10に記載のプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006539235A JP4712718B2 (ja) | 2004-10-01 | 2005-09-28 | 配列の生成方法、及び、配列生成プログラム |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004290638 | 2004-10-01 | ||
JP2004290638 | 2004-10-01 | ||
JP2006539235A JP4712718B2 (ja) | 2004-10-01 | 2005-09-28 | 配列の生成方法、及び、配列生成プログラム |
PCT/JP2005/017794 WO2006038498A1 (ja) | 2004-10-01 | 2005-09-28 | 配列の生成方法、及び、配列生成プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2006038498A1 true JPWO2006038498A1 (ja) | 2008-07-31 |
JP4712718B2 JP4712718B2 (ja) | 2011-06-29 |
Family
ID=36142576
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006539235A Expired - Fee Related JP4712718B2 (ja) | 2004-10-01 | 2005-09-28 | 配列の生成方法、及び、配列生成プログラム |
Country Status (7)
Country | Link |
---|---|
US (1) | US20090106289A1 (ja) |
EP (1) | EP1811383A1 (ja) |
JP (1) | JP4712718B2 (ja) |
KR (1) | KR101254544B1 (ja) |
CN (1) | CN100587673C (ja) |
CA (1) | CA2581219A1 (ja) |
WO (1) | WO2006038498A1 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006080268A1 (ja) * | 2005-01-25 | 2006-08-03 | Turbo Data Laboratories Inc. | ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム |
US20060212852A1 (en) * | 2005-03-16 | 2006-09-21 | Jinwoo Hwang | Methods, systems and computer program products for detecting memory leaks |
US8312050B2 (en) * | 2008-01-16 | 2012-11-13 | International Business Machines Corporation | Avoiding database related joins with specialized index structures |
CN101963931A (zh) * | 2009-07-22 | 2011-02-02 | 鸿富锦精密工业(深圳)有限公司 | 可扩展固件接口下的硬盘测试方法 |
CN102402545B (zh) * | 2010-09-14 | 2015-09-02 | 腾讯科技(深圳)有限公司 | 一种存储数据的方法及装置 |
US20150286720A1 (en) * | 2012-12-11 | 2015-10-08 | Tmm Data, Llc | Methods and systems for collecting, managing, and sharing data |
US10120956B2 (en) * | 2014-08-29 | 2018-11-06 | GraphSQL, Inc. | Methods and systems for distributed computation of graph data |
US20160217302A1 (en) * | 2015-01-23 | 2016-07-28 | Karim Kassam | High-speed, hacker-resistant computer data storage and retrieval system |
JP6704947B2 (ja) * | 2018-02-27 | 2020-06-03 | 株式会社東芝 | 支援システム |
CN110889022A (zh) * | 2018-08-17 | 2020-03-17 | 迈普通信技术股份有限公司 | 数据查询方法、装置及电子设备 |
CN111522819A (zh) * | 2020-04-24 | 2020-08-11 | 上海用天网络科技有限公司 | 一种树型结构数据汇总的方法及系统 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS648448A (en) * | 1987-07-01 | 1989-01-12 | Hitachi Ltd | Expression system for tree structure data |
JP2789618B2 (ja) * | 1988-11-30 | 1998-08-20 | 富士ゼロックス株式会社 | 木構造図作成システム |
DE19513960A1 (de) * | 1995-04-18 | 1996-10-24 | Ibm | Abbildung eines Graphen in einen Speicher |
JPH10240741A (ja) * | 1997-02-28 | 1998-09-11 | Nippon Telegr & Teleph Corp <Ntt> | 木構造型データの管理方法 |
DE19810843B4 (de) * | 1998-03-12 | 2004-11-25 | Telefonaktiebolaget Lm Ericsson (Publ) | Verfahren und Zugriffseinrichtung zum Bestimmen der Speicheradresse eines Datenwerts in einer Speichereinrichtung |
JP2000348038A (ja) * | 1999-06-02 | 2000-12-15 | Fujitsu Ltd | 半構造データベースのためのデータ格納装置および方法 |
US6549221B1 (en) * | 1999-12-09 | 2003-04-15 | International Business Machines Corp. | User interface management through branch isolation |
US6812941B1 (en) * | 1999-12-09 | 2004-11-02 | International Business Machines Corp. | User interface management through view depth |
US6847979B2 (en) * | 2000-02-25 | 2005-01-25 | Synquiry Technologies, Ltd | Conceptual factoring and unification of graphs representing semantic models |
US20020087596A1 (en) * | 2000-12-29 | 2002-07-04 | Steve Lewontin | Compact tree representation of markup languages |
JP2002334001A (ja) * | 2001-04-27 | 2002-11-22 | K-Plex Inc | 木構造データの操作方法及び、それを実現する装置及びプログラム |
US6925470B1 (en) * | 2002-01-25 | 2005-08-02 | Amphire Solutions, Inc. | Method and apparatus for database mapping of XML objects into a relational database |
US8818833B2 (en) * | 2002-02-14 | 2014-08-26 | International Business Machines Corporation | Method and system for managing service requests across multiple systems |
JP2003271443A (ja) * | 2002-03-15 | 2003-09-26 | Toshiba Corp | 構造化データ格納システムおよび方法、構造化データ検索システムおよび方法、記録媒体 |
US20030188264A1 (en) | 2002-03-29 | 2003-10-02 | Full Degree, Inc. | Method and apparatus for XML data normalization |
US7210097B1 (en) * | 2002-05-22 | 2007-04-24 | Pitney Bowes Inc. | Method for loading large XML documents on demand |
US20030236968A1 (en) * | 2002-06-19 | 2003-12-25 | Anindya Basu | Method and apparatus for generating efficient data structures for use in pipelined forwarding engines |
JP3935856B2 (ja) * | 2003-03-28 | 2007-06-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | レイアウトの定められた文書のダイジェストを作成するための情報処理装置、サーバ、方法及びプログラム |
US20090138491A1 (en) * | 2007-11-28 | 2009-05-28 | Sandeep Chowdhury | Composite Tree Data Type |
-
2005
- 2005-09-28 EP EP05787558A patent/EP1811383A1/en not_active Withdrawn
- 2005-09-28 CN CN200580032898A patent/CN100587673C/zh not_active Expired - Fee Related
- 2005-09-28 KR KR1020077005216A patent/KR101254544B1/ko not_active IP Right Cessation
- 2005-09-28 CA CA002581219A patent/CA2581219A1/en not_active Abandoned
- 2005-09-28 JP JP2006539235A patent/JP4712718B2/ja not_active Expired - Fee Related
- 2005-09-28 US US11/576,481 patent/US20090106289A1/en not_active Abandoned
- 2005-09-28 WO PCT/JP2005/017794 patent/WO2006038498A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CA2581219A1 (en) | 2006-04-13 |
US20090106289A1 (en) | 2009-04-23 |
CN100587673C (zh) | 2010-02-03 |
KR20070057819A (ko) | 2007-06-07 |
KR101254544B1 (ko) | 2013-04-19 |
CN101031892A (zh) | 2007-09-05 |
WO2006038498A1 (ja) | 2006-04-13 |
JP4712718B2 (ja) | 2011-06-29 |
EP1811383A1 (en) | 2007-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4681544B2 (ja) | 配列の生成方法、情報処理装置、及び、プログラム | |
JP4712718B2 (ja) | 配列の生成方法、及び、配列生成プログラム | |
JP4653157B2 (ja) | ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム | |
JP4886693B2 (ja) | 情報処理方法、情報処理装置および情報処理プログラム | |
JP4537391B2 (ja) | ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム | |
JP3842577B2 (ja) | 構造化文書検索方法および構造化文書検索装置およびプログラム | |
JP5040925B2 (ja) | 情報抽出規則作成支援システム、情報抽出規則作成支援方法及び情報抽出規則作成支援プログラム | |
JP5241738B2 (ja) | 表からツリー構造データを構築する方法及び装置 | |
JP4796970B2 (ja) | ツリーデータの検索・集計・ソート方法及びプログラム | |
WO2015010509A1 (zh) | 一种基于一维线性空间实现Trie树的词典检索方法 | |
CN110795526B (zh) | 一种用于检索系统的数学公式索引创建方法与系统 | |
JP4681555B2 (ja) | ノード挿入方法、情報処理装置、および、ノード挿入プログラム | |
JP2005190163A (ja) | 構造化データ検索方法、構造化データ検索装置およびプログラム | |
JP2004118543A (ja) | 構造化文書検索方法、検索支援方法、検索支援装置および検索支援プログラム | |
JP3842574B2 (ja) | 情報抽出方法および構造化文書管理装置およびプログラム | |
JP2006018584A (ja) | 構造化文書管理システム、値索引生成方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080903 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080903 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110315 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110323 |
|
LAPS | Cancellation because of no payment of annual fees |