JP4886693B2 - 情報処理方法、情報処理装置および情報処理プログラム - Google Patents

情報処理方法、情報処理装置および情報処理プログラム Download PDF

Info

Publication number
JP4886693B2
JP4886693B2 JP2007530961A JP2007530961A JP4886693B2 JP 4886693 B2 JP4886693 B2 JP 4886693B2 JP 2007530961 A JP2007530961 A JP 2007530961A JP 2007530961 A JP2007530961 A JP 2007530961A JP 4886693 B2 JP4886693 B2 JP 4886693B2
Authority
JP
Japan
Prior art keywords
node
tree
array
parent
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.)
Expired - Fee Related
Application number
JP2007530961A
Other languages
English (en)
Other versions
JPWO2007020850A1 (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
Priority to JP2007530961A priority Critical patent/JP4886693B2/ja
Publication of JPWO2007020850A1 publication Critical patent/JPWO2007020850A1/ja
Application granted granted Critical
Publication of JP4886693B2 publication Critical patent/JP4886693B2/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
    • 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)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (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データのメリットを十分に活用すると共に、タグを用いて表現された各項目の関係構造をそのまま記憶できるようにしている。
また、XML文書をツリー構造でメモリ上に展開するためのDOMと呼ばれるオブジェクトモデルのインタフェースが公開されている(例えば、非特許文献3を参照。)。
特開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 (Third Edition)"、[online]、2004年2月4日、[平成16年2月19日検索]、インターネット<URL:http://www.w3.org/TR/2004/REC-xml-20040204/> R. アラン ワイク、ブラッド ルーペン、サルタン ルーマン、「プログラミングXML」、日経DPソフトプレス、2002年、第59頁−第84頁
しかし、上記の検索用インデックスデータを別途保持するようなアプローチでは、少なくともデータは二重に保持され、かつ、インデックスを作成するコスト及びインデックスを格納するためのデータ領域が必要となり、大規模なデータを保持する上で不利である。
このようなメカニズムによって、実際に検索を行い、ノードを特定したとしても、そのノードを表現するためには時間がかかる。また、このメカニズムは、ノード間の関係を問題とする検索(例えば、祖先に「60歳」という「年齢」を含み、子孫に「1歳」という「年齢」を含むツリーの抽出)には利用できない。
このような従来技術の根本的な問題点は、個々のデータのみに着目し、データを蓄えたノード間をポインタで接続することによりツリー型データ構造が表現されているため、データ間の関係、例えば、親子、祖先、子孫、兄弟(シブリング)、世代などの関係を効率的にトレースすることができないことにある。換言すると、ポインタは、その値が一定しないため、データの格納アドレスを示すという用途にしか使用できず、ノード間の関係を直接的に表現することができない。その結果として、従来技術では、ツリー型データ構造のトポロジーを編集すること、特に、ツリー構造型データのあるノードに子孫ノードを挿入することが困難であった。また、上記のDOMは、ツリー型データ構造のトポロジーを編集する操作のインタフェースを規定するだけであり、操作の具体的手法を規定するものではない。
そこで、本発明は、効率的にツリーから、当該ツリーの一部分である部分ツリーを削除し、また、あるツリーに他のツリーを挿入する方法、情報処理装置、および、プログラムを提供することを目的とする。
上記目的を達成するため、本発明は、ツリー型データ構造を構成するノード間の親子関係を、親ノードに子ノードを対応付ける「親→子」関係ではなく、子ノードに親ノードを対応付ける「子→親」関係によって表現した親子関係定義配列を用いて、挿入や削除を実現する。
従来から知られている「親→子」関係によって親子関係を表現する場合、一つの親ノードに複数の子ノードが対応する場合があるので、親ノードと子ノードの二つの要素を特定しなければ親子関係を定義できない。即ち、親ノードを特定しても、その親ノードと親子関係にある子ノードを特定することができない。これに対して、本発明のように「子→親」関係によって親子関係を表現する場合、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。
より詳細には、本発明の目的は、ツリー型データ構造を表すために、ルート・ノードを含むノードに付与されたノード識別子であって、親子関係にあるノードについて、親ノードのノード識別子は、子ノードのノード識別子より小さいという関係を満たす、連続する整数であるノード識別子を用いて、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した、記憶装置中に生成された親子関係定義配列を備えた情報処理装置において、
あるツリーから、特定のノードである頂点ノードおよびその子孫ノードからなる部分ツリーを削除し、かつ、当該部分ツリー削除後のツリーのツリー型データ構造について、前記記憶装置中に親子関係定義配列を生成する情報処理方法であって、
前記部分ツリーを削除すべきツリーの親子関係定義配列を、前記記憶装置から読み出すステップと、
前記部分ツリーにおいて最もルート・ノードに近い位置にある頂点ノードのノード識別子、および、前記親子関係定義配列を参照して、記憶装置に生成された、前記親子関係定義配列と同一サイズの消去フラグ配列中、前記部分ツリーを構成するノードのノード識別子について、当該フラグをセットするステップと、
前記消去フラグ配列を参照して、前記部分ツリーの削除後のツリーについて、それぞれのノードに、親子関係にあるノードについて、親ノードのノード識別子は、子ノードのノード識別子より小さいという関係を満たす連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、削除前のツリーのノードのノード識別子と関連付けて格納した新規ノード識別子配列を、記憶装置に生成するステップと、
前記親子関係定義配列および前記新規ノード識別子配列に基づいて、前記新たなノード識別子に関連付けて、当該ノード識別子をもつノードの親ノードのノード識別子を格納した、部分ツリー削除後の親子関係定義配列を、前記記憶装置に生成するステップと、
を備えたことを特徴とする情報処理方法により達成される。
好ましい実施態様においては、前記ノード識別子が、子ノードよりも同じ世代のノードを優先して付与された連続する整数であり、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した親子関係定義配列が、前記記憶装置中に記憶され、
前記新規ノード識別子配列を生成するステップが、前記それぞれのノードに、子ノードより同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与するステップを含む。
或いは、前記ノード識別子が、同じ世代のノードよりも子ノードを優先して付与された連続する整数であり、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した親子関係定義配列が、前記記憶装置中に記憶され、
前記新規ノード識別子配列を生成するステップが、前記それぞれのノードに、同じ世代のノードより子ノードを優先して付与された整数であるノード識別子を付与するステップを含んでいてもよい。
また、好ましい実施態様においては、前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、前記ノード値格納配列を更新するステップを備えている。
他の好ましい実施態様においては、前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するステップを備えている。
より好ましい実施態様においては、前記新規ノード識別子配列を生成するステップが、
前記親子関係定義配列と同一のサイズの新規ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
新たなノード識別子を一時的に記憶するカレントノード識別子領域を、前記記憶装置中に確保して、その初期値を格納するステップと、
前記消去フラグ配列を参照して、前記消去フラグ配列の値がセットされていない場合には、当該新規ノード識別子配列の値として、前記カレントノード識別子領域の値を格納し、その後、前記カレントノード識別子領域の値を増分し、その一方、消去フラグ配列の値がセットされている場合には、当該新規ノード識別子配列の値として無効値を格納するステップと、を備えている。
別の好ましい実施態様においては、前記部分ツリー削除後の親子関係定義配列を生成するステップが、
前記親子関係定義配列と同一サイズの格納アドレス配列のための領域を、前記記憶装置中に確保するステップと、
前記新規ノード識別子配列中、前記親子関係定義配列の値の格納位置と同じ位置の値を参照して、値が無効値である場合を除き、前記格納アドレス配列に、前記新規ノード識別子配列中の値を格納するステップと、
前記親子関係定義配列と同一サイズの親ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
前記新規ノード識別子配列中、前記親子関係定義配列の値が示す位置の値を参照して、前記親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記新規ノード識別子配列の値を格納するステップと、
前記格納アドレス配列中の値に関連付けて、前記親ノード識別子配列の値を格納した親子関係定義配列を生成するステップと、を含む。
また、本発明の目的は、ツリー型データ構造を表すために、ルート・ノードを含むノードに付与された固有のノード識別子であって、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を用いて、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した、記憶装置中に生成された親子関係定義配列を備えた情報処理装置において、
あるツリーを被挿入側ツリーとして、当該被挿入側ツリーの特定のノードに、他のツリーである挿入側ツリーのルート・ノードを連結することにより、当該挿入側ツリーを追加し、当該挿入後のツリーのツリー型データ構造について、前記記憶装置中に親子関係定義配列を生成する情報処理方法であって、
被挿入側ツリーの第1の親子関係定義配列、および、挿入側ツリーの第2の親子関係定義配列を記憶装置から読み出すステップと、
前記挿入側ツリーのルート・ノードを、被挿入側ツリーの部分ツリー中、最もルート・ノードに近い位置にある頂点ノードとして、当該頂点ノードが挿入される位置の情報に基づいて、挿入側ツリーのそれぞれのノードに隣接する、被挿入側ツリーのノードを特定し、当該被挿入側ツリーのノードの情報を、前記記憶装置に記憶するステップと、
前記被挿入側ツリーのノードの情報を参照して、前記挿入側ツリーの挿入後の前記被挿入側ツリーについて、それぞれのノードに、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、挿入前の被挿入側ツリーのノードのノード識別子と関連付けて格納した第1の新規ノード識別子配列を、前記記憶装置に生成するとともに、前記挿入側ツリーの頂点ノードが挿入される位置の情報に基づいて、前記挿入側ツリーの挿入後の前記挿入側ツリーについて、それぞれのノードに、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、挿入前の挿入側ツリーのノードのノード識別子と関連付けて格納した第2の新規ノード識別子配列を、前記記憶装置に生成するステップと、
前記第1および第2の親子関係定義配列、および、前記第1および第2の新規ノード識別子配列に基づいて、前記新たなノード識別子に関連付けて、当該ノード識別子をもつノードの親ノードのノード識別子を格納した、挿入後のツリーの親子関係定義配列を、前記記憶装置に生成するステップと、
を備えたことを特徴とする情報処理方法により達成される。
好ましい実施態様においては、前記記憶装置に、前記被挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
前記第1および第2の新規ノード識別子配列を参照して、被挿入側ツリーおよび挿入側ツリーのそれぞれのもとのノード識別子と、挿入後のツリーの新たなノード識別子との関連付けにしたがって、前記第1のノード値格納配列および第2のノード配列の少なくとも一方を更新するステップを備えている。
他の好ましい実施態様においては、前記記憶装置に、前記被挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
前記第1および第2の新規ノード識別子配列を参照して、被挿入側ツリーおよび挿入側ツリーのそれぞれのもとのノード識別子と、挿入後のツリーの新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するステップを備えている。
より好ましい実施態様においては、前記被挿入側ツリーのノードの情報を、前記記憶装置に記憶するステップが、
前記挿入側ツリーの頂点ノードが挿入される位置の情報に基づいて、前記第1の親子関係定義配列と同一のサイズの挿入マーク配列中、前記挿入される位置の直後のノードおよび前記直後のノードを先祖とするノードについて、当該挿入位置であることを示す値を格納するステップを含む。
また、別の好ましい実施態様においては、さらに、前記被挿入側ツリーの各ノードの、当該被挿入側ツリーの頂点ノードからの深さのレベルを表すレベル値を格納した第1のレベル配列を、前記記憶装置に生成するステップと、
前記第1のレベル配列中、前記挿入側ツリーの頂点ノードの挿入位置に相当するレベル値を参照して、前記挿入側ツリーの各ノードの、前記被挿入側ツリーの頂点ノードからの深さのレベルを表すレベル値を格納した第2のレベル配列を、前記記憶装置に生成するステップと、を備え、
前記第1および第2の新規ノード識別子配列を生成するステップが、
前記第1および第2の親子関係定義配列と、それぞれ、同一のサイズの第1および第2の新規ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
新たなノード識別子を一時的に記憶するカレントノード識別子領域を、前記記憶装置中に確保して、その初期値を格納するステップと、を含み、
前記挿入マーク配列中、その値が、挿入位置であることを示す値に変化している位置以外の位置においては、
(a)前記第1の新規ノード識別子配列中、当該位置の値として、前記カレントノード識別子領域の値を格納し、
(b)その後、前記カレントノード識別子領域の値を増分する
ステップをさらに含み、
前記挿入マーク配列中、当該挿入マーク配列の値が、挿入位置であることを示す値に変化する位置においては、
(a)前記第1のレベル配列中、当該位置のレベル値を参照し、かつ、前記第2のレベル配列中、同一のレベル値を有する範囲を特定し、
(b)前記第2の新規ノード識別子配列中、当該範囲の先頭位置から順次、カレントノード識別子領域の値を格納し、
(c)その後、前記カレントノード識別子領域の値を増分し、
(d)前記第2の新規ノード識別子配列中、前記同一のレベル値を有する範囲への値の格納が終了すると、第1の新規ノード識別子配列の値として、前記カレントノード識別子領域の値を格納し、
(e)その後、前記カレントノード識別子領域の値を増分する
ステップを、さらに含む。
また、より好ましい実施態様においては、前記ツリー挿入後の親子関係定義配列を生成するステップが、
前記第1の親子関係定義配列と同一サイズの、第1の親ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
前記第1の新規ノード識別子配列中、前記第1の親子関係定義配列の値が示す位置の値を参照して、前記第1の親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記第1の新規ノード識別子配列の値を格納するステップと、
前記第1の新規ノード識別子配列の値と、前記第1の親ノード識別子配列の値とを関連付けるステップと、
前記第2の親子関係定義配列と同一サイズの、第2の親ノード識別配列のための領域を、前記記憶装置中に確保するステップと、
前記第2の新規ノード識別子配列中、先頭の値として、前記挿入側ノードの頂点ノードの親ノードとなるノードのノード識別子を格納するともに、他の値として、前記第2の親子関係定義配列の値が示す位置の値を参照して、前記第2の親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記第2の新規ノード識別子配列の値を格納するステップと、
前記第2の新規ノード識別子配列の値と、前記第2の親ノード識別子配列の値とを関連付けるステップと、
前記第1の新規ノード識別子配列の値および前記第2の新規ノード識別子配列の値のそれぞれに関連付けられた、前記第1の親ノード識別子配列の値および第2の親ノード識別子配列の値を、挿入後の親子関係定義配列に格納するステップと、を含む。
また、本発明の目的は、ツリー型データ構造を表すために、ルート・ノードを含むノードに付与されたノード識別子であって、親子関係にあるノードについて、親ノードのノード識別子は、子ノードのノード識別子より小さいという関係を満たす、連続する整数であるノード識別子を用いて、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した、記憶装置中に生成された親子関係定義配列を備え、あるツリーから、特定のノードである頂点ノードおよびその子孫ノードからなる部分ツリーを削除し、かつ、当該部分ツリー削除後のツリーのツリー型データ構造について、前記記憶装置中に親子関係定義配列を生成するように構成された情報処理装置において、
前記部分ツリーを削除すべきツリーの親子関係定義配列を、前記記憶装置から読み出すデータ読み出し手段と、
前記部分ツリーにおいて最もルート・ノードに近い位置にある頂点ノードのノード識別子、および、前記親子関係定義配列を参照して、記憶装置に生成された、前記親子関係定義配列と同一サイズの消去フラグ配列中、前記部分ツリーを構成するノードのノード識別子について、当該フラグをセットする消去フラグ配列生成手段と、
前記消去フラグ配列を参照して、前記部分ツリーの削除後のツリーについて、それぞれのノードに、親子関係にあるノードについて、親ノードのノード識別子は、子ノードのノード識別子より小さいという関係を満たす連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、削除前のツリーのノードのノード識別子と関連付けて格納した新規ノード識別子配列を、記憶装置に生成する新規ノード識別子配列生成手段と、
前記親子関係定義配列および前記新規ノード識別子配列に基づいて、前記新たなノード識別子に関連付けて、当該ノード識別子をもつノードの親ノードのノード識別子を格納した、部分ツリー削除後の親子関係定義配列を、前記記憶装置に生成する削除後親子関係配列生成手段と、
を備えたことを特徴とする情報処理装置により達成される。
好ましい実施態様においては、前記ノード識別子が、子ノードよりも同じ世代のノードを優先して付与された連続する整数であり、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した親子関係定義配列が、前記記憶装置中に記憶され、
前記新規ノード識別子生成手段が、前記それぞれのノードに、子ノードより同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与するように構成されている。
或いは、他の好ましい実施態様においては、前記ノード識別子が、同じ世代のノードよりも子ノードを優先して付与された連続する整数であり、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した親子関係定義配列が、前記記憶装置中に記憶され、
前記新規ノード生成手段が、前記それぞれのノードに、同じ世代のノードより子ノードを優先して付与された連続する整数であるノード識別子を付与するように構成されている。
また、好ましい実施態様においては、前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、前記ノード値格納配列を更新するノード値格納配列更新手段を備えている。
他の好ましい実施態様においては、前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するノード値格納配列生成手段を備えている。
より好ましい実施態様においては、前記新規ノード識別子配列生成手段が、
前記親子関係定義配列と同一のサイズの新規ノード識別子配列のための領域を、前記記憶装置中に確保し、
新たなノード識別子を一時的に記憶するカレントノード識別子領域を、前記記憶装置中に確保して、その初期値を格納し、
前記消去フラグ配列を参照して、前記消去フラグ配列の値がセットされていない場合には、当該新規ノード識別子配列の値として、前記カレントノード識別子領域の値を格納し、その後、前記カレントノード識別子領域の値を増分し、その一方、消去フラグ配列の値がセットされている場合には、当該新規ノード識別子配列の値として無効値を格納するように構成されている。
別の好ましい実施態様においては、前記削除後親子関係定義配列生成手段が、
前記親子関係定義配列と同一サイズの格納アドレス配列のための領域を、前記記憶装置中に確保し、
前記新規ノード識別子配列中、前記親子関係定義配列の値の格納位置と同じ位置の値を参照して、値が無効値である場合を除き、前記格納アドレス配列に、前記新規ノード識別子配列中の値を格納し、
前記親子関係定義配列と同一サイズの親ノード識別子配列のための領域を、前記記憶装置中に確保し、
前記新規ノード識別子配列中、前記親子関係定義配列の値が示す位置の値を参照して、前記親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記新規ノード識別子配列の値を格納し、
前記格納アドレス配列中の値に関連付けて、前記親ノード識別子配列の値を格納した親子関係定義配列を生成するように構成されている。
また、本発明の目的は、ツリー型データ構造を表すために、ルート・ノードを含むノードに付与された固有のノード識別子であって、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を用いて、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した、記憶装置中に生成された親子関係定義配列を備えた情報処理装置であって、あるツリーを被挿入側ツリーとして、当該被挿入側ツリーの特定のノードに、他のツリーである挿入側ツリーのルート・ノードを連結することにより、当該挿入側ツリーを追加し、当該挿入後のツリーのツリー型データ構造について、前記記憶装置中に親子関係定義配列を生成するように構成された情報処理装置において、
被挿入側ツリーの第1の親子関係定義配列、および、挿入側ツリーの第2の親子関係定義配列を記憶装置から読み出すデータ読み出し手段と、
前記挿入側ツリーのルート・ノードを、被挿入側ツリーの部分ツリー中、最もルート・ノードに近い位置にある頂点ノードとして、当該頂点ノードが挿入される位置の情報に基づいて、挿入側ツリーのそれぞれのノードに隣接する、被挿入側ツリーのノードを特定し、当該被挿入側ツリーのノードの情報を、前記記憶装置に記憶する挿入位置情報生成手段と、
前記被挿入側ツリーのノードの情報を参照して、前記挿入側ツリーの挿入後の前記被挿入側ツリーについて、それぞれのノードに、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、挿入前の被挿入側ツリーのノードのノード識別子と関連付けて格納した第1の新規ノード識別子配列を、前記記憶装置に生成するとともに、前記挿入側ツリーの頂点ノードが挿入される位置の情報に基づいて、前記挿入側ツリーの挿入後の前記挿入側ツリーについて、それぞれのノードに、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、挿入前の挿入側ツリーのノードのノード識別子と関連付けて格納した第2の新規ノード識別子配列を、前記記憶装置に生成する新規ノード識別子配列生成手段と、
前記第1および第2の親子関係定義配列、および、前記第1および第2の新規ノード識別子配列に基づいて、前記新たなノード識別子に関連付けて、当該ノード識別子をもつノードの親ノードのノード識別子を格納した、挿入後のツリーの親子関係定義配列を、前記記憶装置に生成する挿入後親子関係定義配列生成手段と、
を備えたことを特徴とする情報処理装置によっても達成される。
好ましい実施態様においては、前記記憶装置に、前記被挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
前記第1および第2の新規ノード識別子配列を参照して、被挿入側ツリーおよび挿入側ツリーのそれぞれのもとのノード識別子と、挿入後のツリーの新たなノード識別子との関連付けにしたがって、前記第1のノード値格納配列および第2のノード配列の少なくとも一方を更新するノード値格納配列更新手段を備えている。
他の好ましい実施態様においては、前記記憶装置に、前記被挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
前記第1および第2の新規ノード識別子配列を参照して、被挿入側ツリーおよび挿入側ツリーのそれぞれのもとのノード識別子と、挿入後のツリーの新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するノード値格納配列生成手段を備えている。
より好ましい実施態様においては、前記挿入位置情報生成手段が、
前記挿入側ツリーの頂点ノードが挿入される位置の情報に基づいて、前記第1の親子関係定義配列と同一のサイズの挿入マーク配列中、前記挿入される位置の直後のノードおよび前記直後のノードを先祖とするノードについて、当該挿入位置であることを示す値を格納するように構成されている。
また、別の好ましい実施態様においては、さらに、前記被挿入側ツリーの各ノードの、当該被挿入側ツリーの頂点ノードからの深さのレベルを表すレベル値を格納した第1のレベル配列を、前記記憶装置に生成する第1のレベル配列生成手段と、
前記第1のレベル配列中、前記挿入側ツリーの頂点ノードの挿入位置に相当するレベル値を参照して、前記挿入側ツリーの各ノードの、前記被挿入側ツリーの頂点ノードからの深さのレベルを表すレベル値を格納した第2のレベル配列を、前記記憶装置に生成する第2のレベル配列生成手段と、を備え、
前記新規ノード識別子配列生成手段が、
前記第1および第2の親子関係定義配列と、それぞれ、同一のサイズの第1および第2の新規ノード識別子配列のための領域を、前記記憶装置中に確保し、
新たなノード識別子を一時的に記憶するカレントノード識別子領域を、前記記憶装置中に確保して、その初期値を格納するように構成され、
前記挿入マーク配列中、その値が、挿入位置であることを示す値に変化している位置以外の位置においては、
(a)前記第1の新規ノード識別子配列中、当該位置の値として、前記カレントノード識別子領域の値を格納するとともに、
(b)その後、前記カレントノード識別子領域の値を増分するように構成され、
前記挿入マーク配列中、当該挿入マーク配列の値が、挿入位置であることを示す値に変化する位置においては、
(a)前記第1のレベル配列中、当該位置のレベル値を参照し、かつ、前記第2のレベル配列中、同一のレベル値を有する範囲を特定し、
(b)前記第2の新規ノード識別子配列中、当該範囲の先頭位置から順次、カレントノード識別子領域の値を格納し、
(c)その後、前記カレントノード識別子領域の値を増分し、
(d)前記第2の新規ノード識別子配列中、前記同一のレベル値を有する範囲への値の格納が終了すると、第1の新規ノード識別子配列の値として、前記カレントノード識別子領域の値を格納し、
(e)その後、前記カレントノード識別子領域の値を増分するように構成されている。
また、さらに別の好ましい実施態様においては、前記挿入後親子関係定義配列生成手段が、
前記第1の親子関係定義配列と同一サイズの、第1の親ノード識別子配列のための領域を、前記記憶装置中に確保し、
前記第1の新規ノード識別子配列中、前記第1の親子関係定義配列の値が示す位置の値を参照して、前記第1の親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記第1の新規ノード識別子配列の値を格納し、
前記第1の新規ノード識別子配列の値と、前記第1の親ノード識別子配列の値とを関連付け、
前記第2の親子関係定義配列と同一サイズの、第2の親ノード識別配列のための領域を、前記記憶装置中に確保し、
前記第2の新規ノード識別子配列中、先頭の値として、前記挿入側ノードの頂点ノードの親ノードとなるノードのノード識別子を格納するともに、他の値として、前記第2の親子関係定義配列の値が示す位置の値を参照して、前記第2の親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記第2の新規ノード識別子配列の値を格納し、
前記第2の新規ノード識別子配列の値と、前記第2の親ノード識別子配列の値とを関連付け、
前記第1の新規ノード識別子配列の値および前記第2の新規ノード識別子配列の値のそれぞれに関連付けられた、前記第1の親ノード識別子配列の値および第2の親ノード識別子配列の値を、挿入後の親子関係定義配列に格納するように構成されている。
また、本発明の目的は、ツリー型データ構造を表すために、ルート・ノードを含むノードに付与されたノード識別子であって、親子関係にあるノードについて、親ノードのノード識別子は、子ノードのノード識別子より小さいという関係を満たす、連続する整数であるノード識別子を用いて、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した、記憶装置中に生成された親子関係定義配列を備えたコンピュータにおいて、
あるツリーから、特定のノードである頂点ノードおよびその子孫ノードからなる部分ツリーを削除し、かつ、当該部分ツリー削除後のツリーのツリー型データ構造について、前記記憶装置中に親子関係定義配列を生成するために、前記コンピュータにより読み出し可能な情報処理プログラムであって、前記コンピュータに、
前記部分ツリーを削除すべきツリーの親子関係定義配列を、前記記憶装置から読み出すステップと、
前記部分ツリーにおいて最もルート・ノードに近い位置にある頂点ノードのノード識別子、および、前記親子関係定義配列を参照して、記憶装置に生成された、前記親子関係定義配列と同一サイズの消去フラグ配列中、前記部分ツリーを構成するノードのノード識別子について、当該フラグをセットするステップと、
前記消去フラグ配列を参照して、前記部分ツリーの削除後のツリーについて、それぞれのノードに、親子関係にあるノードについて、親ノードのノード識別子は、子ノードのノード識別子より小さいという関係を満たす連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、削除前のツリーのノードのノード識別子と関連付けて格納した新規ノード識別子配列を、記憶装置に生成するステップと、
前記親子関係定義配列および前記新規ノード識別子配列に基づいて、前記新たなノード識別子に関連付けて、当該ノード識別子をもつノードの親ノードのノード識別子を格納した、部分ツリー削除後の親子関係定義配列を、前記記憶装置に生成するステップと、
を実行させることを特徴とする情報処理プログラムにより達成される。
好ましい実施態様においては、前記ノード識別子が、子ノードよりも同じ世代のノードを優先して付与された連続する整数であり、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した親子関係定義配列が、前記記憶装置中に記憶され、
前記新規ノード識別子配列を生成するステップにおいて、前記コンピュータに、
前記それぞれのノードに、子ノードより同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与するステップを実行させる。
他の好ましい実施態様においては、前記ノード識別子が、同じ世代のノードよりも子ノードを優先して付与された連続する整数であり、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した親子関係定義配列が、前記記憶装置中に記憶され、
前記新規ノード識別子配列を生成するステップにおいて、前記コンピュータに、
前記それぞれのノードに、同じ世代のノードより子ノードを優先して付与された整数であるノード識別子を付与するステップを実行させる。
また、好ましい実施態様においては、前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、前記コンピュータに、
前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、前記ノード値格納配列を更新するステップを実行させる。
他の好ましい実施態様においては、前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、前記コンピュータに、
前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するステップを実行させる。
より好ましい実施態様においては、前記新規ノード識別子配列を生成するステップにおいて、前記コンピュータに、
前記親子関係定義配列と同一のサイズの新規ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
新たなノード識別子を一時的に記憶するカレントノード識別子領域を、前記記憶装置中に確保して、その初期値を格納するステップと、
前記消去フラグ配列を参照して、前記消去フラグ配列の値がセットされていない場合には、当該新規ノード識別子配列の値として、前記カレントノード識別子領域の値を格納し、その後、前記カレントノード識別子領域の値を増分し、その一方、消去フラグ配列の値がセットされている場合には、当該新規ノード識別子配列の値として無効値を格納するステップと、を実行させる。
別の好ましい実施態様においては、前記部分ツリー削除後の親子関係定義配列を生成するステップにおいて、前記コンピュータに、
前記親子関係定義配列と同一サイズの格納アドレス配列のための領域を、前記記憶装置中に確保するステップと、
前記新規ノード識別子配列中、前記親子関係定義配列の値の格納位置と同じ位置の値を参照して、値が無効値である場合を除き、前記格納アドレス配列に、前記新規ノード識別子配列中の値を格納するステップと、
前記親子関係定義配列と同一サイズの親ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
前記新規ノード識別子配列中、前記親子関係定義配列の値が示す位置の値を参照して、前記親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記新規ノード識別子配列の値を格納するステップと、
前記格納アドレス配列中の値に関連付けて、前記親ノード識別子配列の値を格納した親子関係定義配列を生成するステップと、を実行させる。
さらに、本発明の目的は、ツリー型データ構造を表すために、ルート・ノードを含むノードに付与された固有のノード識別子であって、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を用いて、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に関連付けて、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を格納した、記憶装置中に生成された親子関係定義配列を備えたコンピュータにおいて、
あるツリーを被挿入側ツリーとして、当該被挿入側ツリーの特定のノードに、他のツリーである挿入側ツリーのルート・ノードを連結することにより、当該挿入側ツリーを追加し、当該挿入後のツリーのツリー型データ構造について、前記記憶装置中に親子関係定義配列を生成するために、前記コンピュータにより読み出し可能な情報処理プログラムであって、前記コンピュータに、
被挿入側ツリーの第1の親子関係定義配列、および、挿入側ツリーの第2の親子関係定義配列を記憶装置から読み出すステップと、
前記挿入側ツリーのルート・ノードを、被挿入側ツリーの部分ツリー中、最もルート・ノードに近い位置にある頂点ノードとして、当該頂点ノードが挿入される位置の情報に基づいて、挿入側ツリーのそれぞれのノードに隣接する、被挿入側ツリーのノードを特定し、当該被挿入側ツリーのノードの情報を、前記記憶装置に記憶するステップと、
前記被挿入側ツリーのノードの情報を参照して、前記挿入側ツリーの挿入後の前記被挿入側ツリーについて、それぞれのノードに、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、挿入前の被挿入側ツリーのノードのノード識別子と関連付けて格納した第1の新規ノード識別子配列を、前記記憶装置に生成するとともに、前記挿入側ツリーの頂点ノードが挿入される位置の情報に基づいて、前記挿入側ツリーの挿入後の前記挿入側ツリーについて、それぞれのノードに、子ノードよりも同じ世代のノードを優先して付与された連続する整数であるノード識別子を付与し、付与された新たなノード識別子を、挿入前の挿入側ツリーのノードのノード識別子と関連付けて格納した第2の新規ノード識別子配列を、前記記憶装置に生成するステップと、
前記第1および第2の親子関係定義配列、および、前記第1および第2の新規ノード識別子配列に基づいて、前記新たなノード識別子に関連付けて、当該ノード識別子をもつノードの親ノードのノード識別子を格納した、挿入後のツリーの親子関係定義配列を、前記記憶装置に生成するステップと、
を実行させることを特徴とする情報処理プログラムにより達成される。
好ましい実施態様においては、前記記憶装置に、前記被挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、前記コンピュータに、
前記第1および第2の新規ノード識別子配列を参照して、被挿入側ツリーおよび挿入側ツリーのそれぞれのもとのノード識別子と、挿入後のツリーの新たなノード識別子との関連付けにしたがって、前記第1のノード値格納配列および第2のノード配列の少なくとも一方を更新するステップを実行させる。
他の好ましい実施態様においては、前記記憶装置に、前記被挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記挿入側ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、前記コンピュータに、
前記第1および第2の新規ノード識別子配列を参照して、被挿入側ツリーおよび挿入側ツリーのそれぞれのもとのノード識別子と、挿入後のツリーの新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するステップを実行させる。
より好ましい実施態様においては、前記被挿入側ツリーのノードの情報を、前記記憶装置に記憶するステップにおいて、前記コンピュータに、
前記挿入側ツリーの頂点ノードが挿入される位置の情報に基づいて、前記第1の親子関係定義配列と同一のサイズの挿入マーク配列中、前記挿入される位置の直後のノードおよび前記直後のノードを先祖とするノードについて、当該挿入位置であることを示す値を格納するステップを実行させる。
別の好ましい実施態様においては、さらに、前記コンピュータに、前記被挿入側ツリーの各ノードの、当該被挿入側ツリーの頂点ノードからの深さのレベルを表すレベル値を格納した第1のレベル配列を、前記記憶装置に生成するステップと、
前記第1のレベル配列中、前記挿入側ツリーの頂点ノードの挿入位置に相当するレベル値を参照して、前記挿入側ツリーの各ノードの、前記被挿入側ツリーの頂点ノードからの深さのレベルを表すレベル値を格納した第2のレベル配列を、前記記憶装置に生成するステップと、を実行させ、
前記第1および第2の新規ノード識別子配列を生成するステップにおいて、前記コンピュータに、
前記第1および第2の親子関係定義配列と、それぞれ、同一のサイズの第1および第2の新規ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
新たなノード識別子を一時的に記憶するカレントノード識別子領域を、前記記憶装置中に確保して、その初期値を格納するステップと、を実行させ、
前記挿入マーク配列中、その値が、挿入位置であることを示す値に変化している位置以外の位置においては、前記コンピュータに、
(a)前記第1の新規ノード識別子配列中、当該位置の値として、前記カレントノード識別子領域の値を格納し、
(b)その後、前記カレントノード識別子領域の値を増分する
ステップを、さらに実行させ、
前記挿入マーク配列中、当該挿入マーク配列の値が、挿入位置であることを示す値に変化する位置においては、前記コンピュータに、
(a)前記第1のレベル配列中、当該位置のレベル値を参照し、かつ、前記第2のレベル配列中、同一のレベル値を有する範囲を特定し、
(b)前記第2の新規ノード識別子配列中、当該範囲の先頭位置から順次、カレントノード識別子領域の値を格納し、
(c)その後、前記カレントノード識別子領域の値を増分し、
(d)前記第2の新規ノード識別子配列中、前記同一のレベル値を有する範囲への値の格納が終了すると、第1の新規ノード識別子配列の値として、前記カレントノード識別子領域の値を格納し、
(e)その後、前記カレントノード識別子領域の値を増分するステップを、さらに実行させる。
また、別の好ましい実施態様においては、前記ツリー挿入後の親子関係定義配列を生成するステップにおいて、前記コンピュータに、
前記第1の親子関係定義配列と同一サイズの、第1の親ノード識別子配列のための領域を、前記記憶装置中に確保するステップと、
前記第1の新規ノード識別子配列中、前記第1の親子関係定義配列の値が示す位置の値を参照して、前記第1の親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記第1の新規ノード識別子配列の値を格納するステップと、
前記第1の新規ノード識別子配列の値と、前記第1の親ノード識別子配列の値とを関連付けるステップと、
前記第2の親子関係定義配列と同一サイズの、第2の親ノード識別配列のための領域を、前記記憶装置中に確保するステップと、
前記第2の新規ノード識別子配列中、先頭の値として、前記挿入側ノードの頂点ノードの親ノードとなるノードのノード識別子を格納するともに、他の値として、前記第2の親子関係定義配列の値が示す位置の値を参照して、前記第2の親ノード識別子配列中、前記親子関係定義配列の値の位置と同じ位置に、前記第2の新規ノード識別子配列の値を格納するステップと、
前記第2の新規ノード識別子配列の値と、前記第2の親ノード識別子配列の値とを関連付けるステップと、
前記第1の新規ノード識別子配列の値および前記第2の新規ノード識別子配列の値のそれぞれに関連付けられた、前記第1の親ノード識別子配列の値および第2の親ノード識別子配列の値を、挿入後の親子関係定義配列に格納するステップと、を実行させる。
本発明によれば、効率的にツリーから、当該ツリーの一部分である部分ツリーを削除し、また、あるツリーに他のツリーを挿入する方法、情報処理装置、および、プログラムを提供することが可能となる。
以下、添付図面を参照して、本発明の実施の形態につき説明を加える。
[コンピュータシステム構成]
図1は、本発明の実施の形態にかかるツリー型データ構造を取り扱う情報処理装置のハードウェア構成を示すブロックダイヤグラムである。図1に示すように、この情報処理装置10は、通常のコンピュータと同様の構成であり、プログラムを実行することにより装置全体および個々の構成部分を制御するCPU12、ワークデータなどを記憶するRAM(Random Access Memory)14、プログラム等を記憶するROM(Read Only Memory)16、ハードディスク装置18、CD−ROM19をアクセスするためのドライバ20、ドライバ20や外部ネットワーク(図示せず)と接続された外部端子との間に設けられたインタフェース(I/F)22、キーボードやマウスからなる入力装置24、表示装置26を備えている。CPU12、RAM14、ROM16、ハードディスク装置18、I/F22、入力装置24および表示装置26は、バス28を介して相互に接続されている。上記実施の形態では、コンピュータシステム10は、ドライバ20により、CD−ROM19に格納されたデータを読み出すように構成されているが、これに限定されるものではなく、CD−R/W、DVD−ROM,DVD−RAMなどに格納されたデータを読み出し可能に構成しても良い。
本実施の形態にかかる、ツリー型データ構造をRAM14などメモリ上に構築するプログラム、及び、ツリー型データ構造をメモリ上で変換するプログラムは、CD−ROM19に収容され、ドライバ20に読取られても良いし、ROM16に予め記憶されていても良い。また、いったんCD−ROM19から読み出したものを、ハードディスク装置18の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク(図示せず)、外部端子およびI/F22を経て外部から供給されるものであっても良い。
また、本発明の実施の形態にかかる情報処理装置は、コンピュータに、ツリー型データ構造をメモリ上に構築するプログラム、および、ツリー型データ構造をメモリ上で変換するプログラムを実行させることにより実現される。このツリー型データ構造をメモリ上で変換するプログラムに、後述するツリー挿入処理を実現するプログラムやツリー削除処理を実現するプログラムも含まれる。
[ツリー型データ構造]
図2A、Bは、ツリー型データの一例であるPOSデータの説明図であり、図2Aは、このツリー型データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した一例であり、図2Bは、同じツリー型データをXML形式で表現した一例である。図2A、Bに示されるようにツリー型データ構造は、ルート・ノード(本例では、POSデータ)から始めて、各ノードで枝分かれしてリーフ・ノード(端点)に至るノードとアークの組み合わせによって表現される。各ノードには、項目名情報、すなわち、ノードのタイプと、項目値情報、すなわち、ノードの値が関連付けられ、図2Bの例では、XML形式の
<shopName>フランス店</shopName>
に対応したノードは、「shopName(=店名)」というノードタイプと「フランス店」というノード値が関連付けられている。この関連付けは、例えば、ノードタイプ及びノード値を記述する情報が格納されたノード情報格納領域へのポインタを、ノード識別子に随伴させることによって実現することができる。しかし、本発明は、ツリー型データ構造の実体的な値の取り扱い方によって限定されないことに注意する必要がある。
これに対して、ツリー型データ構造のデータの検索、集計、ソートを効率的に実行するためには、ツリー型データ構造のトポロジーを表現する手法、すなわち、記憶装置に展開する手法が非常に重要な役割を果たす。そこで、以下では、主として、ツリー型データ構造のトポロジーに関して説明する。
従来、このようなツリー型データ構造は、データを蓄えたノード間をポインタで接続することによって表現されている。しかし、ポインタ表現は、ポインタ値に必然性がないという欠点がある。即ち、ある場合には特定のノード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の配列の両方の配列に出現する。
これに対して、親子関係は、「子→親」関係によっても表現することが可能である。この場合、ノード間の親子関係は、ルート・ノード以外のノードである非ルート・ノードの各々と、関連付けられた親ノードと、の組の配列によって表現される。この「子→親」関係によって親子関係を表現する場合、「親→子」関係の場合には得られなかった重要な性質がある。即ち、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。つまり、アークリストは、実際には、要素To−IDの配列だけを準備すればよい。この結果として、アークリストを格納するための記憶容量が削減される。この記憶容量の削減は、メモリへのアクセス回数が低減するという効果があるので、結果的に、処理の高速化が実現できる。
図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。図4Aはツリー全体の説明図であり、図4Bは「子→親」関係に基づくアークリストである。図4Bのアークリストは、ルート・ノードに対する親ノードの格納領域を含んでいるので、ルート・ノードの親ノードとして、便宜的に"−"が設定されている。但し、ルート・ノードに対応する親ノードは存在しないので、図4Cに示されるように、「子→親」関係に基づくアークリストからルート・ノードに対する親ノードの格納領域を除いても構わない。このように本発明の一実施例では、ルート・ノード以外のノードである非ルート・ノードの各々に対して、非ルート・ノードの親ノードを関連付けることによりノード間の親子関係を表現する。そして、「子→親」表現された子のノードから親のノードのリストを辿ることでツリーのトポロジーを表現することができる。
このような「子→親」関係に基づくツリー型データ構造は、本発明の一実施例によれば、図5に示されるように、図1に示されたコンピュータシステム10に、ルート・ノードを含むノードに固有のノード識別子を付与するノード定義ステップ501と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付ける親子関係定義ステップ502と、を実行させることによってRAM14上に構築される。このように、最初に、文字列、浮動小数、整数などの任意の識別情報によってノードにノード識別子を付与し、次に、「子→親」表現に基づいて親子関係を定義することによって、子ノードのノード識別子から親ノードのノード識別子を引く(ルックアップする)ことでツリーのトポロジーを表現することができる。
[ノード識別子]
好ましい一実施例によれば、ノード定義ステップはノード識別子として数値を使用し、より好ましくは、連続する整数を使用し、更に好ましくは、「0」又は「1」からの整数連番を使用する。これにより、ノード識別子から、そのノードに対応する親ノードのノード識別子が格納されているアドレスを簡単に取得することができるので、子ノードのノード識別子から親ノードのノード識別子を引く処理を高速化することができる。
ツリー型データ構造のノードにノード識別子として順序付きの番号を付与してノード間の親子関係を表現する場合、番号の付与順序に規則を定めることによって、その後のツリー型データ構造の取り扱いが容易になるという利点がある。本発明によれば、この番号の付与順序の規則として、同じ世代のノードよりも子ノードを優先する深さ優先モードと、子ノードよりも同じ世代のノードを優先する幅優先モードが利用される。
図6A〜Cは、本発明の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図6Aには、各ノードにID番号が付与されたツリー構造型データが示され、図6Bには、変換規則が示され、図6Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、深さ優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、兄弟ノードよりも子ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
また、図7A〜Cは、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図7Aには、各ノードにID番号が付与されたツリー構造型データが示され、図7Bには、変換規則が示され、図7Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、幅優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、子ノードよりも兄弟ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
このようにノード識別子として番号を使用すると、ノード番号から直ちに、即ち、O(1)のオーダーで、そのノードに関する格納値が格納されているアドレスを引くことができる。また、親子関係を「子→親」表現することによって、子ノードから親ノードを直ちに、即ち、O(1)のオーダーで引くことができる。
[深さ優先モード]
本発明の一実施例によれば、図6Cに示されるような深さ優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは深さ優先で連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に
最初にルート・ノードに番号を付与するステップ801と、
既に番号が付与されたあるノードに唯一の子ノードが存在する場合には、当該子ノードに当該あるノードに付与された前記番号の次の番号を付与するステップ802と、
既に番号が付与されたあるノードに複数の子ノードが存在する場合には、当該複数の子ノードの間の兄弟関係に従って、弟ノードは直上の兄ノードの全ての子孫ノードに番号が付与された後に次の番号が付与されるように、一番上の兄ノードから一番下の弟ノードまで番号を付与するステップ803と、
を実行させる。これにより、深さ優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
図9は、本発明の一実施例により図6Cに示された深さ優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。図9にサブツリー1又はサブツリー2として示されているように、深さ優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子孫ノードが連続領域に出現するという優れた性質が得られる。
本発明の一実施例では、深さ優先モードの優れた性質を利用することにより、前記配列から、あるノードに付与された整数以上の値が格納されている連続領域を抽出することにより、前記あるノードの全ての子孫ノードを特定する。これにより、あるノードの子孫ノードを表すノード群が前記配列内の連続ブロックとして獲得できる。例えば、連続ブロックのサイズを「m」とすると、あるノードの全ての子孫ノードを特定するための処理速度は、O(m)のオーダーになる。
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図10は、図6Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。一つの親ノードに対して複数の子ノードが存在し得るので、親子関係の配列は、各ノードに対する子ノードの番号が格納されている領域を示すための配列Aggrと、子ノードの番号が格納されている配列P→Cの二つの配列により構成される。例えば、配列Aggrの先頭から2番目の要素Aggr[1]の値は”3”であり、これは、ノード[1]に対する子ノードの番号は、配列P→Cの要素P→C[3]以降に格納されていることを表している。これにより、ノード[0]、即ち、ルート・ノードに対する子ノードは、配列P→Cの先頭から3個の要素、P→C[0]の「1」、P→C[1]の「6」、及びP→C[2]の「8」であることがわかる。
この「親→子」表現に基づく親子関係の配列の求め方を説明する。
(1)ノードの番号が配列P→Cの最大の添字(=11)と一致する場合、このノードに属する子ノードは存在しない。したがって、処理は継続されない。
(2)同図に太字で表された親ノードの番号からAggr値を求める。このAggr値は、配列P→Cの開始点を表す。
(3)太字で表された親ノード番号+1に対応するAggr値を求める。このAggr値−1が配列P→Cの終了点である。
例えば、ノード0の子ノードの開始点は、Aggr[0]、即ち、「0」であり、終了点は、Aggr[1]−1、即ち、「3−1=2」である。したがって、ノード0の子ノードは、配列P→Cの0〜2番目の要素、即ち、「1」、「6」及び「8」である。
或いは、「親→子」表現に基づく親子関係は、より単純に、親ノード番号の配列と、対応する子ノード番号の配列と、の二つの配列により表現することも可能である。しかし、この配列を利用して親子関係を見つけるためには、親ノードの番号を検索しなければならないので、即ち、log(n)のアクセス時間を要するので効率が悪い。
[幅優先モード]
本発明の一実施例によれば、図7Cに示されるような幅優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは幅優先モードで連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
図11は、本発明の一実施例による幅優先に基づくノート定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に、
各ノードが前記ルート・ノードから何世代目のノードであるか、及び、各世代に含まれるノード数を算出するステップ1101と、
最初に前記ルート・ノードに番号を付与するステップ1102と、
ある世代に含まれる全てのノードに番号が付与されたならば、当該ある世代の次の世代にノードが存在しなくなるまで、当該次の世代に含まれる全てのノードに対して、親ノードが異なる場合には、当該親ノードに番号が付与された順番に当該ノードに番号を付与し、当該親ノードが同一である場合には、当該親ノードから派生した複数の子ノードの間に兄弟関係を定義し、一番上の兄ノードから一番下の弟ノードまで直前に付与された番号の次の番号から連続的に変化する固有の整数を順に付与するステップ1013と、
を実行させる。これにより、幅優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
図12は、本発明の一実施例により図7Cに示された幅優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。図12に示されているように、幅優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子ノードは連続領域に出現するという優れた性質が得られる。これは、幅優先モードで連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、親ノードに付与された番号が前記配列中に順序付き(昇順又は降順)で出現することによる。
したがって、本発明の一実施例では、幅優先モードの優れた性質を利用することにより、前記配列から、あるノードに付与された整数と同じ値が格納されている連続領域を抽出することにより、前記あるノードの全ての子ノードを特定する。これにより、あるノードの子ノードを、例えば、二分探索などの手法を用いて検索することが可能であり、即ち、O(log(n))のオーダーで検索することが可能になる。
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図13は、図7Cに示された幅優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。図13に示されるように、一つの親ノードに対して複数の子ノードが存在し得るので、親子関係の配列は、各ノードに対する子ノードの番号が格納されている領域を示すための配列Aggrと、子ノードの番号が格納されている配列P→Cの二つの配列により構成される。例えば、配列Aggrの先頭から2番目の要素Aggr[1]の値は「3」であり、これは、ノード[1]に対する子ノードの番号は、配列P→Cの要素P→C[3]以降に格納されていることを表している。これにより、ノード[0]、即ち、ルート・ノードに対する子ノードは、配列P→Cの先頭から3個の要素、P→C[0]の「1」、P→C[1]の「2」、及び、P→C[2]の「3」であることがわかる。
この「親→子」表現に基づく親子関係の配列の求め方を説明する。
(1)ノードの番号が配列P→Cの最大の添字(=11)と一致する場合、このノードに属する子ノードは存在しない。したがって、処理は継続されない。
(2)同図に太字で表された親ノードの番号からAggr値を求める。このAggr値は、配列P→Cの開始点を表す。
(3)太字で表された「親ノード番号+1」に対応するAggr値を求める。この「Aggr値−1」が配列P→Cの終了点である。
例えば、ノード0の子ノードの開始点は、Aggr[0]、即ち、「0」であり、終了点は、Aggr[1]−1、即ち、「3−1=2」である。したがって、ノード0の子ノードは、配列P→Cの0〜2番目の要素、即ち、「1」、「2」及び「3」である。
[ツリー型データ構造の表現形式の相互変換]
上述のように、ノードに連続番号を付与するための深さ優先モード及び幅優先モードは、それぞれ、固有の優れた性質を備えている。本発明の一実施例による情報処理装置10は、詳細な説明は省略するが、図14に示すように、深さ優先に基づく「子→親」表現形式と、幅優先に基づく「子→親」表現形式と、「親→子」表現形式と、の間で相互に表現形式を変換することができる。
[ツリー削除]
次に、ツリー型データ構造のトポロジーを編集する操作の一つであるツリー削除について説明する。本発明にかかる「ツリー削除」は、ツリー型データ構造において、全体のツリーから、ある特定のノードおよびそのノードの子孫ノード(つまり、部分ツリー)を取り除くことを意味する。実際には、ツリー型データ構造を表す、メモリ中に格納されている「子→親」表現による親子関係定義配列(以下、「C−P配列」と称する。また、図においては、「C->P」、或いは、「C-P」と表記される。)から、部分ツリーに相当するノードの情報が削除され、かつ、残りのノードに対して、たとえば幅優先モードにしたがって付された新たなノード識別子を格納したC−P配列をメモリ中に生成することである。なお、全体のツリーから削除される部分ツリーには、単一のノードから構成されるものも含まれる。また、本明細書において、上記ツリー型データ構造において、あるノードおよびそのノードから枝分かれしてリーフ・ノードに至るまでのノード群を、部分ツリーと称する。また、部分ツリーにおいて、ルート・ノードに最も近いノードを頂点ノードと称する。
以下、本実施の形態において、幅優先モードで、ツリー型データ構造が表され、幅優先モードにしたがって、ツリーを構成するノードのノード識別子を格納したC−P配列がメモリに記憶されている場合のツリー削除について説明する。
図15は、本実施の形態にかかる幅優先モードで表されたツリー型データ構造の一例を視覚的に表した図である。このツリー型データ構造において、ノード識別子「2」のノード(符号1501参照)を頂点ノードとする部分ツリーを削除することを考える。ツリー削除の処理においては、基本的には、ノード識別子「2」を頂点ノードとする部分ツリーが、全体のツリーから除かれた状態で、幅優先モードにしたがって、残りのノードに、新たにノード識別子が付与され、そのノード識別子に関する配列がメモリなどに記憶される。
図16は、本実施の形態にかかるツリー削除処理を示すフローチャートである。図16に示すように、CPU12は、デリートフラグ配列、新規ノード識別子配列およびカレントノード番号領域を、RAM14などのメモリ中に確保する(ステップ1601)。次いで、CPU12は、削除対象となる部分ツリーの頂点ノードのノード識別子について、デリートフラグ配列のフラグをセットする(ステップ1602)。なお、削除対象は、オペレータが、たとえば、表示装置26に表示された、図15のようなツリー型データ構造のトポロジーを参照して、入力装置24を操作して、頂点ノードを指定すればよい(本例では、ノード1501)。
図17は、図15に示すツリー型データ構造の親子関係を表す配列、初期値が格納されたデリートフラグ配列(図中、「Delete Flag」と表記される。)、新規ノード識別子配列(図中、「New Node No.」と表記される。)、および、初期値が配置されたカレントノード識別子領域(図中、「Current Node No.」と表記される。)を示す図である。
この例では、ノード識別子「2」のノードを頂点ノードとする部分ツリーが削除されるため、図17に示すように、デリートフラグ配列1701において、ノード識別子「2」に関する要素が「1」にセットされる(すなわち、フラグがセットされる)。また、カレントノード識別子領域1702には、初期値「0」が格納される。
CPU12は、処理対象とするノードを特定するための処理対象位置を「0」に初期化する(ステップ1603)。CPU12は、デリートフラグ配列中、処理対象位置のフラグをチェックし(ステップ1604)、フラグがセットされているか否かを判断する(ステップ1605)。ステップ1605でノー(No)の場合に、次いで、CPU12は、デリートフラグ配列中、処理対象位置のノードの親ノードについて、そのフラグをチェックし(ステップ1606)、フラグがセットされているかを判断する(ステップ1607)。ステップ1607においてもノー(No)と判断された場合には、CPU12は、カレントノード識別子領域の値を、新規ノード識別子配列中、処理対象位置に格納し、かつ、カレントノード識別子領域の値をインクリメントする(ステップ1608)。
その一方、ステップ1605でイエス(Yes)或いはステップ1607でイエス(Yes)と判断された場合には、CPU12は、デリートフラグ配列中、処理対象位置の要素を「1」にセットし、かつ、新規ノード識別子配列中、処理対象位置に、「−1」を格納する(ステップ1609)。
あるノード識別子を有するノードが、削除対象の部分ツリーに属する場合には、ステップ1605或いはステップ1607でイエス(Yes)と判断される。その場合には、デリートフラグ配列の対応する要素に「1」がセットされ、そのノードが削除対象であることを明らかにする。また、新規ノード識別子配列において、当該ノードが削除対象であることがわかるように、特定の値「−1」を与える。
その一方、あるノード識別子を有するノードが、削除対象の部分ツリーに属しない場合には、そのノードについて、削除対象の部分ツリーを構成する1以上のノードを除いた新たなノード識別子が付与される。新規ノード識別子配列に、新たなノード識別子が格納される。
図18A、B、図19A、Bおよび図20を参照して、図15に示す例において、ノード識別子「2」を有する頂点ノードを含む部分ツリーの削除処理についいて説明する。
図18Aに示すように、処理対象位置「0」のときには、ステップ1605およびステップ1607でノー(No)と判断される。その結果、カレントノード識別子領域の値「0」が、新規ノード識別子配列中、処理対象位置「0」に格納され、その後、カレントノード識別子領域の値がインクリメントされて「1」となる。図18Bに示すように、処理対象位置「1」のときにも、ステップ1605およびステップ1607でノー(No)と判断される。その結果、カレントノード識別子領域の値「1」が、新規ノード識別子配列中、処理対象位置「1」に格納され、その後、カレントノード識別子領域の値がインクリメントされて「2」となる。
図19Aに示すように、処理対象位置「2」のときには、ステップ1605でイエス(Yes)と判断される。その結果、デリートフラグ配列中、処理対象位置「2」の値が、(実際には既にセットされているが)「1」にセットされ、かつ、新規ノード識別子配列中、処理対象位置「2」の値として「−1」が格納される。図19Bに示すように、処理対象位置「6」のときには、ステップ1607でイエス(Yes)と判断される。その結果、デリートフラグ配列中、処理対象位置「6」の値が、「1」にセットされ、かつ、新規ノード識別子配列中、処理対象位置「6」の値として「−1」が格納される。
全てのノード(つまり、ノード識別子「0」〜「11」までのノード)について、図16に示す処理が実行されると(図16のステップ1610、1611参照)、図20に示すような配列を得ることができる。CPU12は、新規ノード識別子配列に基づいて、部分ツリーを構成するノードの削除後のツリーのC−P配列を生成する。
図21は、ツリー削除後のC−P配列の生成のための処理(ツリー削除処理(2))を示すフローチャートである。図21に示すように、CPU12は、新たなC−P配列の領域をメモリ中に確保する(ステップ2101)。なお、新たなC−P配列のための領域のサイズは、ツリー削除の前のC−P配列のサイズより小さくなるため、ツリー削除の前のC−P配列のサイズと同じであれば十分である。次いで、CPU12は、新たなC−P配列の格納アドレス(つまり、格納位置番号)を一時的に格納するための格納アドレス配列の領域、および、ツリー削除後の各ノードの親ノードのノード識別子を一時的に格納するための親ノード識別子配列の領域を、メモリ中に確保する(ステップ2102)。これら配列のサイズは、C−P配列のサイズと同じであれば良い。
CPU12は、処理対象位置を「0」に初期化する(ステップ2103)。CPU12は、処理対象となるノードの各々について、格納アドレスの算出および親ノードのノード識別子の算出を実行する。格納アドレスの算出において、CPU12は、新規ノード識別子配列中、処理対象位置の値を取得する(ステップ2104)。次いで、CPU12は、格納アドレス配列中、処理対象位置に、ステップ2104にて取得した値を格納する(ステップ2105)。なお、新規ノード識別子配列中の値が「−1」であるときには、格納アドレス配列には、無効値を格納する。
図22A〜Dは、ステップ2104およびステップ2105にて実行される処理を具体的に説明する図である。たとえば、図22Aに示すように、処理対象位置「0」のときには、新規ノード識別子配列中、格納位置番号「0」の値「0」が取得され、取得された値「0」が、格納アドレス配列(図中、「Addr」と表記する)中、格納位置番号「0」の位置に格納される。また、図22Bに示すように、処理対象位置「1」のときには、新規ノード識別子配列中、格納位置番号「1」の値「1」が取得され、取得された値「1」が、格納アドレス配列中、格納位置番号「1」の位置に格納される。
その一方、図22Cに示すように、処理対象位置「2」のときには、新規ノード識別子配列中、格納位置番号「2」の値が取得されるが、この値は「−1」である。したがって、格納アドレス配列中、格納位置番号「2」の位置には、無効値が格納される。このような処理が繰り返され、図22Dに示すように、値が格納された格納アドレス配列を得ることができる。
親ノードのノード識別子の算出においては、CPU12は、C−P配列中、処理対象位置の値(ノード識別子)を取得し(ステップ2106)、新規ノード識別子配列中、C−P配列の値(ノード識別子)が示す位置の値を取得する(ステップ2107)。さらに、CPU12は、親ノード識別子配列中、処理対象位置に、取得した新規ノード識別子配列の値を格納する(ステップ2108)。なお、図21には示していないが、C−P配列の値(ノード識別子)が「−1」である場合には、例外的に、親ノード識別子配列中、同じ処理対象位置に、その値「−1」を格納する。これはルート・ノードに対する例外処理である。
図23A〜Dは、ステップ2106〜2108にて実行される処理を具体的に説明する図である。たとえば、図23Aに示すように、処理対象位置「0」のときには、C−P配列の値が「−1」であるため、例外処理として、親ノード識別子配列(図中、「P−Node」と表記する)中、格納位置番号「0」の値として「−1」が格納される。図23Bに示すように、処理対象位置「1」のときには、C−P配列の値が「0」であるため、新規ノード識別子配列中、格納位置番号「0」の値「0」が取得され、この取得された値「0」が、親ノード識別子配列中、処理対象位置「1」(格納位置番号「1」の位置)に格納される。同様に、図23Cに示すように、処理対象位置「2」のときには、C−P配列の値が「0」であるため、新規ノード識別子配列中、格納位置番号「0」の値「0」が取得され、この取得された値「0」が、親ノード識別子配列中、処理対象位置「2」(格納位置番号「2」の位置)に格納される。なお、処理対象位置「2」の親ノード識別子配列の値は、後述するように格納アドレスが無効値であるから最終的には利用されない。このような処理が繰り返され、図23Dに示すように、値が格納された親ノード識別子配列を得ることができる。
全てのノード識別子について、格納アドレスの算出(ステップ2104、2105)、および、親ノードのノード識別子の算出(ステップ2106〜2108)が実行される(ステップ2109、2110参照)。その後、CPU12は、新たなC−P配列について、ある格納位置番号が示す位置の、格納アドレス配列の値が示す位置に、親ノード識別配列中、同じ格納位置番号が示す位置の値(ノード識別子)を格納する(ステップ2111)。ステップ2111の処理も、実際には、処理対象位置を初期化して、それぞれの処理対象位置について、格納アドレスおよび親ノード識別子を取得して、新たなC−P配列に、親ノード識別子を格納していけばよい。なお、格納アドレス配列の値が無効値であれば、新たなC−P配列への値の格納は省略される。
図24AおよびBは、それぞれ、図22A〜Dの処理で得られた格納アドレス配列、および、図23A〜Dの処理で得られた親ノード識別子配列の例である。たとえば、格納アドレス配列中、格納位置番号「0」の値は「0」であるから、新たなC−P配列中、格納アドレス配列の値「0」が示す位置に、親ノード識別子配列中、同じ格納位置番号である「0」の位置の値「−1」が格納される。同様に、格納アドレス配列中、格納位置番号「1」の値は「1」であるから、新たなC−P配列中、格納アドレス配列の値「1」が示す位置に、親ノード配列中、同じ格納位置番号である「1」の位置の値「0」が格納される。格納位置番号「2」のときには、格納アドレス配列の値が無効値であるから、新たなC−P配列への値の格納は省略される。このような処理を繰り返すことにより、図24Cに示すような新たなC−P配列を得ることができる。
上述したように、ステップ2111の処理は、格納アドレス配列と親ノード識別子配列を、格納アドレス配列中の無効値を省略して合成することにより、新たなC−P配列を得ることに相当する。
図25Aは、図15と同じツリー型データ構造の例を視覚的に表した図であり、このツリーから、ノード識別子「2」のノードを頂点ノードとする部分ツリーが削除されることを示している。図24Cに示すC−P配列に基づいて、ツリー型データ構造を視覚的に表すと、図25Bに示すようになる。図25Bを参照すると、ノード識別子「2」のノードおよびその子孫ノードであるノード識別子「6」のノードが削除された状態であり、本実施の形態にかかるツリー削除が完了したことが示されている。
[ツリー挿入]
次に、ツリー型データ構造のトポロジーを編集する操作であるツリー挿入について説明する。本発明にかかる「ツリー挿入」は、ツリーの特定ノードに、あるノードをルート・ノードとする他のツリーを追加すること(つまり、ルート・ノードを頂点ノードとして、頂点ノードおよびその子孫ノードを追加すること)を意味する。ここで、前者のツリーを被挿入側ツリー、後者を挿入側ツリーと称する。実際には、被挿入側のツリー型データ構造を表す、メモリ上に格納されたC−P配列、および、挿入側のツリー型データ構造を表す、メモリ上に格納されたC−P配列から、挿入側ツリーが挿入された状態で、それぞれのノードのノード識別子が、幅優先モードにしたがって付されたようなC−P配列をメモリ中に生成することである。なお、被挿入側ツリーおよび/または挿入側ツリーが、単一のノードのみで構成されていても良い。
以下、本実施の形態において、幅優先モードで、ツリー型データ構造が表され、幅優先モードにしたがって、ツリーを構成するノードのノード識別子を格納したC−P配列がメモリに記憶されている場合の、ツリーの挿入について説明する。
図26Aは、本実施の形態にかかる幅優先モードで表されたツリー型データ構造の一例を視覚的に表す図である。図26Aにおいては、ツリー型データ構造2600を被挿入側ツリーとし、当該被挿入側ツリーのノード識別子「1」のノードと、ノード識別子「2」のノードとの間に、ノード識別子「0」のノード(ルート・ノード:符号2601参照)を頂点ノードとするツリーを挿入側ツリー(符号2610参照)として、挿入することを考える。すなわち、挿入側ツリーのノード識別子「0」のノードは、被挿入側ツリーのノード識別子「0」のノードの子ノードとして連結される。本例では、被挿入側ツリーのノード識別子「0」のノードには、既に、被挿入側ツリーのノード識別子「1」のノード及びノード識別子「2」のノードが子ノードとして連結されている。挿入側ツリーのノード識別子「0」のノードは、この被挿入側ツリーのノード識別子「1」のノードより下位であり、ノード識別子「2」のノードより上位である子ノードとして被挿入側ツリーのノード識別子「0」のノードの子ノードとして連結される。
図26Bは、ツリー2600およびツリー2610を、それぞれ、C−P配列にて表したものである。図26Bに示すように、挿入前の段階では、それぞれのツリーは、幅優先モードにしたがって、そのノードに番号(ノード識別子)が付され、その情報が、配列としてメモリ中に記憶されている。たとえば、オペレータが、入力装置24を操作して、表示装置26の画面上に表示された、図26Aに示すようなツリー型データ構造を参照して、ツリーの挿入位置(符号2602参照)を指定することができる。上記オペレータの指定により、ツリー2600に関するC−P配列において、ツリー2610に関するC−P配列の挿入位置を見出すことも可能である(符号2621参照)。
図27は、本実施の形態にかかるツリー挿入の概略を示すフローチャートである。なお、オペレータによる入力装置24の操作によって、被挿入側ツリーのC−P配列、挿入側ツリーのC−P配列、および、挿入側ツリーの頂点ノードを挿入すべき位置が予め与えられている。挿入側ツリーの頂点ノードを挿入すべき位置は、たとえば、どのノードの子であるのかという情報(挿入側ツリーの頂点ノードの親ノードとなる、被挿入側ツリーのノード識別子)、および、挿入側ツリーの頂点ノードが、親ノードの何番目の子であるかを示す情報により特定され得る。したがって、CPU12は、オペレータの入力にしたがって、これら情報を取得して、メモリ中に一時的に記憶しておけばよい。
図27に示すように、CPU12は、まず、被挿入側ツリーに関して、挿入マーク配列を生成する(ステップ2701)。図28は、挿入マーク配列の生成処理をより詳細に示すフローチャートである。図28に示すように、CPU12は、まず、被挿入側ツリーのC−P配列と同じサイズの挿入マーク配列の領域をメモリ中に確保し(ステップ2801)、それぞれの要素として初期値「0」を格納する(ステップ2802)。CPU12は、処理対象位置を「0」に初期化して(ステップ2803)、処理対象位置の値が、挿入位置直後のノード識別子と同じであるか否かを判断する(ステップ2804)。ステップ2804でノー(No)と判断された場合には、CPU12は、被挿入側ツリーのC−P配列中、処理対象位置の値、つまり、親ノードのノード識別子を参照し、挿入マーク配列中、当該親ノードのノード識別子の示す位置の要素がマークされているか否か(つまり、値が「1」であるか否か)を判断する(ステップ2805)。
ステップ2804でイエス(Yes)と判断された場合、或いは、ステップ2805でイエス(Yes)と判断された場合には、CPU12は、挿入マーク配列中、処理対象位置の値を「1」にする(ステップ2806)。CPU12は、このような処理を、被挿入側ツリーの全てのノード識別子について実行する(ステップ2807、2808参照)。
図29は、被挿入側ツリーのC−P配列、および、生成される挿入マーク配列(図中、「Insert Mark」と表記している。)の例を示す図である。この例では、被挿入側ツリーにおいて、ノード識別子「1」のノードと、ノード識別子「2」のノードとの間に、挿入側ツリーが挿入されると考えている。図29の挿入マーク配列に示すように、処理対象位置が「0」、「1」であるときには、ステップ2804およびステップ2805でノー(No)と判断される。その一方、処理対象位置が「2」であるときには、「2」という値は、挿入位置直後のノード識別子と一致するため、ステップ2804でイエス(Yes)と判断され、挿入マーク配列中、格納位置番号「2」の値が「1」にセットされる(符号2901参照)。
処理対象位置が「3」、「4」のときには、ステップ2804およびステップ2805でノー(No)と判断される。処理対象位置が「5」のときには、C−P配列中、対応する格納位置番号「5」の値が「2」であり、親ノードのノード識別子が「2」であることがわかる。CPU12は、挿入マーク配列中、格納位置番号「2」の値が「1」であることから、ステップ2805でイエス(Yes)と判断される。したがって、挿入マーク配列中、格納位置番号「5」の値が「1」にセットされる(符号2902参照)。処理対象位置「6」〜「9」についても同様の処理が実行されることで、最終的な挿入マーク配列を得ることができる。
CPU12は、被挿入側ツリー、挿入側ツリーのそれぞれにおいて、ツリーを構成する各ノードの深さを示すレベル値を格納するレベル配列を、メモリ中に生成する(ステップ2702)。同じ世代のノードは、同じレベル値を有する。たとえば、被挿入側ツリーにおいて、C−P配列の先頭のノード(ルート・ノード)については、CPU12は、レベル配列中、レベル値「0」を格納する。それ以外のノードについては、CPU12は、C−P配列を参照して、親ノードを特定し、当該親ノードのレベル値を参照して、そのレベル値に「1」を加えて、そのノードのレベル値を算出する。次いで、CPU12は、レベル配列中の対応する位置に、算出されたレベル値を格納する。
挿入側ツリーについては、まず、CPU12は、同様の処理を実行してレベル配列に値を格納する。次いで、CPU12は、メモリに一時的に記憶された、挿入側ツリーの頂点ノードを挿入すべき位置を示す情報のうち、挿入側ツリーの頂点ノードの親ノードとなる、被挿入側ツリーのノードのノード識別子を参照して、当該ノード識別子に対応するレベル配列の値(これを親ノードのレベル値と称する)を取得する。さらに、CPU12は、挿入側ツリーのレベル配列の値のそれぞれに、「親ノードのレベル値+1」を加算する。加算後のレベル値を格納したレベル配列が、挿入側ツリーのレベル配列となる。
図30Aは被挿入側ツリーのレベル配列を説明する図である。図30A、Bにおいては、レベル配列は、「Levels」と表記されている。先頭のノード(ノード識別子「0」のルート・ノード)については、レベル配列中のレベル値として「0」が格納される。引き続く2つのノード(ノード識別子「1」、「2」のノード)については、それぞれ親ノードのノード識別子が「0」であるため、「0」に「1」を加えた値「1」が、レベル値として、レベル配列に格納されている。図30Bは、挿入側ツリーのレベル配列を説明する図である。符号3010に示す配列は、被挿入側ツリーと同様の処理が実行された状態の配列、符号3020に示す配列は、さらに、それぞれのレベル値に、「親ノードのレベル値+1=1」を加えた、最終的な配列の状態を示す。
CPU12は、被挿入側ツリーのC−P配列、レベル配列および挿入マーク配列、並びに、挿入側ツリーのC−P配列およびレベル配列を参照して、それぞれのツリーについて、新規ノード識別子配列を生成する(ステップ2703)。図31および図32は、新規ノード識別子の生成をより詳細に示すフローチャートである。図31に示すように、CPU12は、挿入側ツリーおよび被挿入側ツリーの双方に関して、それぞれのC−P配列と同じサイズの、新規ノード識別子配列の領域をメモリ中に確保する(ステップ3101)。また、CPU12は、カレントノード識別子領域(図中、「Current Node No.」と表記する。)をメモリ中に確保して、初期値「0」を格納し(ステップ3102)、被挿入側ツリー、挿入側ツリーの双方の処理対象位置を「0」に初期化する(ステップ3103)。
CPU12は、挿入マーク配列中、被挿入側の処理対象位置の値を参照し(ステップ3104)、先の処理対象位置の値が「0」でかつ今回の処理対象位置の値が「1」であるかどうかを判断する(ステップ3105)。なお、最初の処理では、挿入マーク配列の値が「1」であれば、ステップ3105でイエス(Yes)と判断される。ステップ3105でノー(No)と判断された場合には、被挿入側の新規ノード識別子配列中、被挿入側処理対象位置の値として、カレントノード識別子領域の値を格納する(ステップ3106)。
その一方、ステップ3105でイエス(Yes)と判断された場合には、処理対象が挿入側ツリーに移行する。なお、この挿入側処理対象位置における挿入側ツリーのレベル配列中のレベル値は、被挿入側処理対象位置における被挿入側ツリーのレベル配列中のレベル値と同一となる。
より詳細には、図32に示すように、CPU12は、挿入側の新規ノード識別子配列中、挿入側処理対象位置の値として、カレントノード識別子領域の値を格納する(ステップ3201)。次いで、CPU12は、カレントノード識別子領域の値をインクリメントするとともに、挿入側処理対象位置もインクリメントする(ステップ3202)。CPU12は、新たな挿入側処理対象位置について、レベル配列の値を参照して、レベル配列の値が変化したか否かを判断する(ステップ3203)。インクリメント前の挿入側処理対象位置の、レベル配列の値と、インクリメント後の挿入側処理対象位置の、レベル配列の値とが一致していれば、ステップ3203でノー(No)と判断されて、ステップ3201に戻り、処理が進められる。その一方、ステップ3203でイエス(Yes)と判断された場合には、ステップ3106に進む。
被挿入側ツリーおよび挿入側ツリーについて、処理が終了したとき、つまり、それぞれ新規ノード識別子配列への格納が完了したときに、ステップ3107でイエス(Yes)と判断される。それ以外の場合には、CPU12は、カレントノード識別子領域の値をインクリメントするとともに、被挿入側の処理対象位置をインクリメントする(ステップ3108)。
図33〜図37Bを参照して、上記図31および図32の処理をより具体的に説明する。図33は、新規ノード識別子配列の領域や、初期値「0」が格納されたカレントノード識別子領域が、メモリ中に確保された状態を示す。また、被挿入側ツリー、挿入側ツリーともに、処理対象位置は「0」である。
図34Aに示すように、被挿入側の処理対象位置が「0」のときには、挿入マーク配列中、その位置の値が「0」であり、被挿入側の新規ノード識別子配列中、その格納位置番号「0」の値として、カレントノード識別子領域の値「0」が格納される。その後、カレントノード識別子領域の値がインクリメントされて「1」になる。
図34Bに示すように、被挿入側の処理対象位置が「1」のときにも、挿入マーク配列中、その位置の値が「0」であり、図34Aに示すときの挿入マーク配列の値「0」と同じく変化が無い。したがって、被挿入側の新規ノード識別子配列中、その格納位置番号「1」の値として、カレントノード識別子領域の値「1」が格納される。その後、カレントノード識別子領域の値がインクリメントされて「2」になる。
図35Aに示すように、被挿入側の処理対象位置が「2」のときには、挿入マーク配列中、その位置の値が「1」であり、図34Bに示すときの挿入マーク配列の値「0」から変化している。そこで、ステップ3105でイエス(Yes)と判断される。したがって、挿入側ツリーに関する処理に移り、挿入側の新規ノード識別子配列中、その格納位置番号「0」の値として、カレントノード識別子領域の値「2」が格納される。その後、カレントノード識別子領域の値がインクリメントされて「3」になるとともに、挿入側の処理対象位置がインクリメントされて「1」となる。ここで、レベル配列中、挿入側の処理対象位置「1」の値は「2」であり、インクリメント前の処理対象位置「0」のレベル配列の値「1」と同一ではない。したがって、図31のステップ3106の処理に移行し、新規ノード識別子配列中、被挿入側の処理対象位置「2」の値として、カレントノード識別子領域の値「3」を格納する。その後、カレントノード識別子領域の値はインクリメントされて「4」となる(図35B参照)。
図36A、Bに示すように、被挿入側の処理対象位置が「3」、「4」のときには、被挿入側の新規ノード識別子配列に値が格納される。図37Aに示すように、被挿入側の処理対象位置が「5」のときには、挿入マーク配列の値が「1」に変化しているので、挿入側の新規ノード識別子配列に値が格納され、その後、被挿入側の新規ノード識別子配列に値が格納される。
このような処理を繰り返すことにより、図37Bに示すように、被挿入側、挿入側のそれぞれにおいて、ツリーの挿入による新たなノード識別子を格納した新規ノード識別子配列を得ることができる。
次いで、CPU12は、新規ノード識別子配列に基づいて、被挿入側ツリーおよび挿入側ツリーのC−P配列を、メモリ中に生成する(ステップ2704)。それぞれのC−P配列を取得するためには、被挿入側ツリーおよび挿入側ツリーのそれぞれについて、図21に示す処理と同様の処理を実行すればよい。実際には、格納アドレス算出処理を実行する必要はなく、CPU12は、親ノードのノード識別子の算出(図21のステップ2106〜2108)を実行すれば、被挿入側ツリーおよび挿入側ツリーのそれぞれのC−P配列を求めることができる。なお、ここで、親ノード識別子配列のそれぞれの値と、新規ノード識別子配列の同じ格納位置の値とを関連付けておく。
図38Aは、被挿入側について、新たなC−P配列が得られた状態を示す図、図38Bは、挿入側について新たなC−P配列が得られた状態を示す図である。なお、図38Bにおいて、挿入側については、CPU12は、図21のステップ2106〜2108に示す処理を実行して、新たなC−P配列(符号3801参照)を得て、その後、CPU12は、ルート・ノード(C−P配列の値が「−1」のノード)については、挿入したときに親ノードとなるノードのノード識別子(この例では「0」)を格納する(符号3802参照)。
さらに、CPU12は、被挿入側ツリーおよび挿入側ツリーの新たなC−P配列をマージして、挿入後のC−P配列を生成する(ステップ2705)。図39に示すように、被挿入側の新たなC−P配列(符号3901参照)においては、挿入側ツリーの親ノードのノード識別子が入るべき部分の値が存在せず、その一方、挿入側の新たなC−P配列(符号3902参照)においても、被挿入側ツリーの親ノードのノード識別子が入るべき部分の値が存在しない。したがって、無効値以外が格納されている部分を相互に利用して配列を生成すれば、挿入後のC−P配列となる(符号3910参照)。
図40Aは、挿入側ツリー挿入前の、被挿入側ツリーを表す図である。図39の符号3910に示すC−P配列によれば、図40Aのツリーに、挿入側ツリーを挿入することにより、模式的には、図40Bに示すようなトポロジーが得られる。これは、先に述べた幅優先モードにしたがっていることは言うまでも無い。
[実際のデータ管理]
上述したように、本実施の形態によれば、幅優先モードの下で、ツリー型データ構造が表現されている場合に、被挿入側ツリーに挿入側ツリーを挿入した状態においても、幅優先モードの下で、ツリー型データ構造が表現されるように、C−P配列を生成している。この処理では、それぞれのノードのノード識別子が変更される。実際には、図2A、Bを参照して説明したように、ツリー型データ構造においては、一つのツリーを構成するノードのそれぞれにノードタイプおよびノード値が関連付けられている。ノードタイプは必須ではないが、当該ノードの値の意味を表すため(たとえば、図2Bにおいては、値「フランス店」が、「店名」であることを表している。)に存在する。
図41Aは、図26Aなどで例示した、被挿入側ツリーを模式的に表す図である。図41Bは、当該被挿入側ツリーを表す、メモリ中に記憶されたC−P配列、および、それぞれのノード識別子に関連付けられてメモリ中に記憶された、ノード値の格納配列の例を示す図である。図41Bに示すように、この例では、ノードには、「パーツ名」(図中、「PARTS−NAME」と表記している)というノード値のみが格納され、ノードタイプは設けられていない。図41Aにおいても、ノード識別子とともに、そのノード値を記載している。例示したツリーは、模型飛行機(TOY PLANE)の部品を示し、それぞれのノードが、部品名を表している。
図42Aは、同様に、図26Aなどで例示した、挿入側ツリーを模式的に表す図である。図42Bは、当該挿入側ツリーを表す、メモリ中に記憶されたC−P配列、および、それぞれのノード識別子に関連付けられてメモリ中に記憶された、ノード値の格納配列の例を示す図である。図42Aにおいても、ノード識別子とともにそのノード値を記載している。
本実施の形態におけるツリー挿入処理によって、新たなC−P配列が生成される。CPU12は、図38A、Bにそれぞれ示す、被挿入側および挿入側新規ノード識別子配列を参照することで、被挿入側ツリーのノード識別子が、挿入後のツリー構造において、新たにどのようなノード識別子が与えられたか、或いは、挿入側ツリーのノード識別子が、挿入後のツリー構造において、新たにどのようなノード識別子が与えられたかを把握することができる。したがって、CPU12は、新たなC−P配列の生成とともに、新たなノード識別子に関連付けられたノード値を格納した格納配列を生成する。図43Aは、挿入後のツリーを模式的に示す図、図43Bは、メモリに記憶された新たなC−P配列、および、メモリに記憶された新たなノード値の格納配列を示す図である。
図43Bに示すように、新たなノード値の格納配列を生成する際に、CPU12は、被挿入側ツリーのノード値の格納配列の挿入位置を特定し、当該挿入位置に、挿入側ツリーのノード値の格納配列の挿入すべき値を挿入しても良い。或いは、CPU12は、新たに、ノード値の格納配列のための領域をメモリ中に確保し、新たなノード識別子に対応する位置に、被挿入側ツリーのノード値の格納配列の値或いは挿入側ツリーのノード値の格納配列の値の何れかを格納するような処理を実行しても良い。
部分ツリーの削除の際にも、CPU12は、同様に、新規ノード識別子配列(図20参照)を参照することで、部分ツリーの削除後に、削除によって残ったノードのそれぞれに与えられた新たなノード識別子を知ることができる。したがって、CPU12は、ノード値の格納配列から削除位置の値を削除することが可能である。或いは、CPU12は、新たに、格納配列のための領域をメモリ中に確保し、新たなノード識別子に対応する位置に、元の格納配列の値を格納するような処理を実行しても良い。
[機能ブロックダイヤグラム]
図44は、本発明の実施の形態にかかるツリー型データ構造を構築する情報処理装置の機能ブロックダイヤグラムであるである。図44に示すように、情報処理装置4400は、ツリー型データ構造を表現するデータを記憶する記憶部4401と、本実施の形態にかかる、ツリー型データ構造を表現するためのC−P配列を生成して記憶装置中に記憶するツリー定義部4402、ツリー挿入処理部4403と、ツリー削除処理部4404と、を有する。
ツリー挿入処理部4403は、オペレータが入力装置(図44では図示せず)を操作して入力した被挿入側ツリーおよび挿入側ツリーを特定する情報や、その挿入位置を特定する情報に基づいて、記憶部4401から処理対象となるツリーのC−P配列などを読み出して、挿入後のツリー型データ構造を表現するC−P配列を生成して、当該C−P配列を記憶部4401に記憶する。また、ツリー挿入処理部4403は、ノード値の格納配列を、ツリーの挿入にしたがって更新し、或いは、ツリーの挿入に従った新たな格納配列を生成する。
ツリー削除処理部4404は、オペレータが入力装置を操作して入力した削除対象となる部分ツリーの頂点ノードのノード識別子に基づいて、記憶部4401から、処理対象となるツリーのC−P配列などを読み出して、部分ツリーの削除後のツリー型データ構造を表現するC−P配列を生成して、当該C−P配列を記憶部4401に記憶する。また、ツリー削除処理部4404は、ノード値の格納配列を、部分ツリーの削除にしたがって更新し、或いは、部分ツリーの削除にしたがった新たな格納配列を生成する。
本実施の形態においては、ノードに付与された固有のノード識別子は、子ノードよりも同じ世代のノードを優先して付与された連続する整数である。また、被挿入側ツリー、挿入側ツリーのそれぞれにおいて、ノード間の親子関係は、非ルート・ノードの各々に付与されたノード識別子の順に関連付けられた非ルート・ノードの各々の親ノードに付与されたノード識別子からなる配列C−P配列)によって表現される。ツリー定義部4402は、たとえば、記憶部4401や他の記憶装置に記憶された、XML形式で与えられたツリーのデータを読み出して、ツリーを構成するノードについて、ノード識別子を付与して、そのノード識別子ごとに、そのノードの親ノードのノード識別子を格納したC−P配列を記憶部4401に記憶する。また、ツリー定義部4402は、XML形式で与えられたツリーのデータのうち、それぞれのノードに関連付けられた実データ(ノードタイプおよびノード値)を、ノード識別子と関連付けて格納した格納配列を生成して、これを、記憶部4401に記憶する。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
たとえば、本実施の形態においては、ツリー削除を、子ノードよりも同じ世代のノードを優先する幅優先モードにしたがってツリー型データ構造を表現した構成に適用している。つまり、幅優先モードに基づいてノードの各々に付与されたノード識別子に関する親子関係定義配列(C−P配列)から、部分ツリー削除後の、幅優先モードにしたがった新たなC−P配列を生成している。しかしながら、本発明にかかるツリー削除は、同じ世代のノードよりも子ノードを優先する深さ優先モードにしたがってツリー型データ構造を表現した構成にも適用可能である。
図45は、深さ優先モードで表されたツリー型データ構造の一例を示す図である。これは、図15に示すツリー型データ構造のトポロジーと同一である。以下、図45のツリー型データ構造において、符号4501に示すノードを頂点ノードとする部分ツリーを削除する場合を考える。
図46は、図45に示すツリー型データ構造の親子関係を表す配列(C−P配列)、初期値が格納されたデリートフラグ配列、新規ノード識別子配列、および、初期値が配置されたカレントノード識別子領域を示す図である。これは、幅優先モードにおける図17に対応する。図46中のデリートフラグ配列は、図16のステップ1602が実行された時点のものである。
図47は、深さ優先モードにおけるツリー削除処理を説明する図であり、図16に示す処理が終了した時点の、デリートフラグ配列、新規ノード識別子配列、カレントノード番号領域の状態を示している。
図48A、Bは、それぞれ、図21の処理を実行した場合の格納アドレス配列および親ノード識別子配列を示し、図48Cは、図21のステップ2111が実行されることにより得られた、部分ツリー削除後の、深さ優先モードにしたがった新たなC−P配列を示す図である。このC−P配列に基づくツリー型データ構造のトポロジーは、図49Bに示すものとなる。部分ツリー削除前のツリー型データ構造を表す図49Aと比較すると、符号4501に示すノードを頂点ノードとする部分ツリーが削除されていることがわかる。
なお、本発明にかかるツリー削除方法は、上記幅優先モード或いは深さ優先モード以外にも適用可能である。実際には、
(1)初期値より連続する整数であり、
(2)親子関係のあるノードについて、親ノードのノード識別子は子ノードのノード識別子より小さいように、
ノードにノード識別子が付与され、記憶装置に、各ノードの親ノードのノード識別子を格納した親子関係定義配列(C−P配列)を保持しておけば、本発明にかかるツリー削除方法を適用することができる。
図1は、本発明の実施の形態にかかるツリー型データ構造を取り扱う情報処理装置のハードウェア構成を示すブロックダイヤグラムである。 図2A、Bは、ツリー型データの一例であるPOSデータの説明図であり、図2Aは、このツリー型データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した例であり、図2Bは、同じツリー型データをXML形式で表現した例である。 図3A〜Cは、アークリストを用いたツリー型データ構造の表現形式の一例の説明図である。 図4A〜Cは、本発明の実施の形態にかかる、「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。 図5は、本発明の実施の形態にかかる、ツリー型データ構造を記憶装置上に構築する方法のフローチャートである。 図6A〜Cは、本発明の実施の形態にしたがって、ID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。 図7A〜Cは、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。 図8は、本発明の実施の形態にかかる深さ優先に基づくノード定義処理のフローチャートである。 図9は、本発明の実施の形態において作成された「子→親」表現に基づく親子関係の配列の説明図である。 図10は、図6Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。 図11は、本発明の実施の形態にかかる幅優先に基づくノード定義処理のフローチャートである。 図12は、本発明の実施の形態において作成された「子→親」表現に基づく親子関係の配列の説明図である。 図13は、図7Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。 図14は、本発明の実施の形態にかかる、三つの表現形式の相互変換の関係を示す図である。 図15は、本実施の形態にかかる幅優先モードで表されたツリー型データ構造の一例を模式的に表す図である。 図16は、本実施の形態にかかるツリー削除処理の前半(ツリー削除処理(1))を示すフローチャートである。 図17は、図15に示すツリー型データ構造の親子関係を表す配列、初期値が格納されたデリートフラグ配列、新規ノード識別子配列、および、初期値が配置されたカレントノード識別子領域を示す図である。 図18A、Bは、本実施の形態にかかるツリー削除処理を説明する図である。 図19A、Bは、本実施の形態にかかるツリー削除処理を説明する図である。 図20は、本実施の形態にかかるツリー削除処理を説明する図である。 図21は、ツリー削除後のC−P配列の生成のための処理(ツリー削除処理(2))を示すフローチャートである。 図22A〜Dは、ステップ2103およびステップ2104にて実行される処理を具体的に説明する図である。 図23A〜Dは、ステップ2106〜2108にて実行される処理を具体的に説明する図である。 図24AおよびBは、それぞれ、図22A〜Dの処理で得られた格納アドレス配列、および、図23A〜Dの処理で得られた親ノード識別子配列の例、図24Cは、格納アドレス配列および親ノード識別子配列に基づいて得られた新たなC−P配列である。 図25Aは、図15と同じツリー型データ構造の例を視覚的に表した図、図25Bは、図24Cに示すC−P配列に基づいて、ツリー型データ構造を視覚的に表した図である。 図26A、Bは、本実施の形態にかかる、被挿入側ツリーおよび挿入側ツリーの例を示す図である。 図27は、本実施の形態にかかるツリー挿入の概略を示すフローチャートである。 図28は、挿入マーク配列の生成処理をより詳細に示すフローチャートである。 図29は、被挿入側ツリーのC−P配列、および、生成される挿入マーク配列の例を示す図である。 図30A、Bは、それぞれ、被挿入側ツリーおよび挿入側ツリーのレベル配列を説明する図である。 図31は、新規ノード識別子の生成をより詳細に示すフローチャートである。 図32は、新規ノード識別子の生成をより詳細に示すフローチャートである。 図33は、新規ノード識別子の生成を具体的に説明する図である。 図34A、Bは、新規ノード識別子の生成を具体的に説明する図である。 図35A、Bは、新規ノード識別子の生成を具体的に説明する図である。 図36A、Bは、新規ノード識別子の生成を具体的に説明する図である。 図37A、Bは、新規ノード識別子の生成を具体的に説明する図である。 図38Aは、被挿入側について、新たなC−P配列が得られた状態を示す図、図38Bは、挿入側について新たなC−P配列が得られた状態を示す図である。 図39は、挿入側ツリーの挿入後のC−P配列を示す図である。 図40Aは、挿入側ツリー挿入前の、被挿入側ツリーを視覚的に表す図、図40Bは、挿入側ツリーの挿入後のツリーを視覚的に表す図である。 図41Aは、被挿入側ツリーを模式的に表す図、図41Bは、当該被挿入側ツリーを表す、メモリ中に記憶されたC−P配列、および、それぞれのノード識別子に関連付けられてメモリ中に記憶された、ノード値の格納配列の例を示す図である。 図42Aは、挿入側ツリーを模式的に表す図である。図42Bは、当該挿入側ツリーを表す、メモリ中に記憶されたC−P配列、および、それぞれのノード識別子に関連付けられてメモリ中に記憶された、ノード値の格納配列の例を示す図である。 図43Aは、挿入後のツリーを模式的に示す図、図43Bは、メモリに記憶された新たなC−P配列、および、メモリに記憶された新たなノード値の格納配列を示す図である。 図44は、本発明の実施の形態にかかるツリー型データ構造を構築する情報処理装置の機能ブロックダイヤグラムであるである。 図45は、本実施の形態にかかる深さ優先モードで表されたツリー型データ構造の一例を示す図である。 図46は、図45に示すツリー型データ構造の親子関係を表す配列、初期値が格納されたデリートフラグ配列、新規ノード識別子配列、および、初期値が配置されたカレントノード識別子領域を示す図である。 図47は、深さ優先モードにおけるツリー削除処理を説明する図である。 図48AおよびBは、それぞれ、図22A〜Dの処理で得られた格納アドレス配列、および、図23A〜Dの処理で得られた親ノード識別子配列の例、図48Cは、部分ツリー削除後のC−P配列を示す図である。 図49A、Bは、深さ優先モードにおけるツリー削除処理を説明する図である。
符号の説明
10 情報処理装置
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 ドライバ
22 I/F
24 入力装置
26 表示装置
4400 情報処理装置
4401 記憶部
4402 ツリー定義部
4403 ツリー挿入処理部
4404 ツリー削除処理部

Claims (18)

  1. ツリー型データ構造を形成するすべてのノードに固有のノード識別子が付与され、前記ノード識別子が、ルート・ノードから始めて、子ノードよりも同じ世代のノードを優先して付与された連続する整数であり、前記ルート・ノード以外の非ルート・ノードの各々のノード識別子に関連付けられた親ノードのノード識別子が格納された親子関係定義配列を記憶する記憶装置を備えた情報処理装置において、
    第1のツリーの所定のノードの子孫ノード群として第2のツリーを挿入することにより形成された第3のツリーのツリー型データ構造について、前記記憶装置中に新たな親子関係定義配列を生成する情報処理方法であって、
    前記第1のツリーの第1の親子関係定義配列および前記第2のツリーの第2の親子関係定義配列を前記記憶装置から読み出すステップと、
    前記第2のツリーのルート・ノードを前記第1のツリーの前記所定のノードの所定の順位の子ノードとして連結することにより形成される前記第3のツリーの世代毎に、前記第2のツリーに属するノードに隣接する前記第1のツリーに属するノードを特定し、前記第1のツリーに属する前記特定されたノードの情報を前記記憶装置に記憶するステップと、
    前記記憶装置に記憶された前記第1のツリーに属する前記特定されたノードの情報を参照して、前記第3のツリーのすべてのノードに、ルート・ノードから始めて、子ノードよりも同じ世代のノードを優先して連続する整数である新たなノード識別子を付与し、前記第1のツリーに属するノードに付与された前記新たなノード識別子を前記第1のツリーのノードのノード識別子に関連付けて格納した第1の新規ノード識別子配列、および、前記第2のツリーに属するノードに付与された前記新たなノード識別子を前記第2のツリーのノード識別子に関連付けて格納した第2の新規ノード識別子配列を前記記憶装置に生成するステップと、
    前記第1の親子関係定義配列および第2の親子関係定義配列と前記第1の新規ノード識別子配列および前記第2の新規ノード識別子配列に基づいて、前記第3のツリーの非ルート・ノードの前記新たなノード識別子に関連付けて前記第3のツリーの前記非ルート・ノードのノード識別子を格納することにより、前記新たな親子関係定義配列を前記記憶装置に生成するステップと、
    を備えたことを特徴とする情報処理方法。
  2. 前記記憶装置に、前記第1のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記第2のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
    前記第1および第2の新規ノード識別子配列を参照して、前記第1のツリーおよび前記第2のツリーのそれぞれのノード識別子と、前記第3のツリーの新たなノード識別子との関連付けにしたがって、前記第1のノード値格納配列および第2のノード配列の少なくとも一方を更新するステップを備えたことを特徴とする請求項1に記載の情報処理方法。
  3. 前記記憶装置に、前記第1のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記第2のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
    前記第1および第2の新規ノード識別子配列を参照して、前記第1のツリーおよび前記第2のツリーのそれぞれのノード識別子と、前記第3のツリーの新たなノード識別子との関連付けにしたがって、前記新たなノード識別子の各々と関連付けて前記ノード値を格納した新たなノード値格納配列を生成するステップをさらに備えたことを特徴とする請求項1に記載の情報処理方法。
  4. ツリー型データ構造を形成するすべてのノードに固有のノード識別子が付与され、前記ノード識別子が、ルート・ノードから始めて、親子関係のある親ノードと子ノードとの間では前記親ノードのノード識別子が前記子ノードのノード識別子より小さいという関係を満たす連続する整数であり、前記ルート・ノード以外の非ルート・ノードの各々のノード識別子に関連付けられた親ノードのノード識別子が格納された親子関係定義配列を記憶する記憶装置を備えた情報処理装置において、
    第1のツリーから、前記第1のツリーの特定のノードと当該特定のノードの子孫ノードとからなる部分ツリーを削除する情報処理方法であって、
    前記第1のツリーの親子関係定義配列を前記記憶装置から読み出すステップと、
    初期値がセットされた消去フラグ配列を前記記憶装置に格納し、前記特定のノードのノード識別子および前記親子関係定義配列と前記消去フラグ配列とを参照して、前記部分ツリーの前記特定のノードおよびその子孫のノードに付与されたノード識別子に対応する前記消去フラグ配列中のフラグをセットするステップと、
    前記第1のツリーから前記部分ツリーを削除したツリーである第2のツリーのすべてのノードに新たなノード識別子を付与し、前記新たなノード識別子が前記第1のツリーの前記ノード識別子に関連付けて格納された新規ノード識別子配列を前記記憶装置に生成するステップと、
    前記親子関係定義配列および前記新規ノード識別子配列に基づいて、前記第2のツリーの非ルート・ノードの各々の前記新たなノード識別子に関連付けられた親ノードの各々の前記新たなノード識別子が格納された前記第2のツリーの新たな親子関係定義配列を前記記憶装置に生成するステップと、
    を備えることを特徴とする情報処理方法。
  5. 前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
    前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、前記ノード値格納配列を更新するステップを備えたことを特徴とする請求項4に記載の情報処理方法。
  6. 前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
    前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するステップを備えたことを特徴とする請求項4に記載の情報処理方法。
  7. ツリー型データ構造を形成するすべてのノードに固有のノード識別子が付与され、前記ノード識別子が、ルート・ノードから始めて、子ノードよりも同じ世代のノードを優先して付与された連続する整数であり、前記ルート・ノード以外の非ルート・ノードの各々のノード識別子に関連付けられた親ノードのノード識別子が格納された親子関係定義配列を記憶する記憶装置を備え、
    第1のツリーの所定のノードの子孫ノード群として第2のツリーを挿入することにより形成された第3のツリーのツリー型データ構造について、前記記憶装置中に新たな親子関係定義配列を生成するように構成された情報処理装置であって、
    前記第1のツリーの第1の親子関係定義配列および前記第2のツリーの第2の親子関係定義配列を前記記憶装置から読み出すデータ読み出し手段と、
    前記第2のツリーのルート・ノードを前記第1のツリーの前記所定のノードの所定の順位の子ノードとして連結することにより形成される前記第3のツリーの世代毎に、前記第2のツリーに属するノードに隣接する前記第1のツリーに属するノードを特定し、前記第1のツリーに属する前記特定されたノードの情報を前記記憶装置に記憶する挿入位置情報生成手段と、
    前記記憶装置に記憶された前記第1のツリーに属する前記特定されたノードの情報を参照して、前記第3のツリーのすべてのノードに、ルート・ノードから始めて、子ノードよりも同じ世代のノードを優先して連続する整数である新たなノード識別子を付与し、前記第1のツリーに属するノードに付与された前記新たなノード識別子を前記第1のツリーのノードのノード識別子に関連付けて格納した第1の新規ノード識別子配列、および、前記第2のツリーに属するノードに付与された前記新たなノード識別子を前記第2のツリーのノード識別子に関連付けて格納した第2の新規ノード識別子配列を前記記憶装置に生成する新規ノード識別子配列生成手段と、
    前記第1の親子関係定義配列および第2の親子関係定義配列と前記第1の新規ノード識別子配列および前記第2の新規ノード識別子配列に基づいて、前記第3のツリーの非ルート・ノードの前記新たなノード識別子に関連付けて前記第3のツリーの前記非ルート・ノードのノード識別子を格納することにより、前記新たな親子関係定義配列を前記記憶装置に生成する親子関係定義配列生成手段と、
    を備えたことを特徴とする情報処理装置。
  8. 前記記憶装置に、前記第1のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記第2のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
    前記第1および第2の新規ノード識別子配列を参照して、前記第1のツリーおよび前記第2のツリーのそれぞれのノード識別子と、前記第3のツリーの新たなノード識別子との関連付けにしたがって、前記第1のノード値格納配列および第2のノード配列の少なくとも一方を更新するノード値格納配列更新手段を備えたことを特徴とする請求項7に記載の情報処理装置。
  9. 前記記憶装置に、前記第1のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記第2のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、
    前記第1および第2の新規ノード識別子配列を参照して、前記第1のツリーおよび前記第2のツリーのそれぞれのノード識別子と、前記第3のツリーの新たなノード識別子との関連付けにしたがって、前記新たなノード識別子の各々と関連付けて前記ノード値を格納した新たなノード値格納配列を生成するノード値格納配列生成手段をさらに備えたことを特徴とする請求項7に記載の情報処理装置。
  10. ツリー型データ構造を形成するすべてのノードに固有のノード識別子が付与され、前記ノード識別子が、ルート・ノードから始めて、親子関係のある親ノードと子ノードとの間では前記親ノードのノード識別子が前記子ノードのノード識別子より小さいという関係を満たす連続する整数であり、前記ルート・ノード以外の非ルート・ノードの各々のノード識別子に関連付けられた親ノードのノード識別子が格納された親子関係定義配列を記憶する記憶装置を備え、
    第1のツリーから、前記第1のツリーの特定のノードと当該特定のノードの子孫ノードとからなる部分ツリーを削除するように構成された情報処理装置であって、
    前記第1のツリーの親子関係定義配列を前記記憶装置から読み出すデータ読み出し手段と、
    初期値がセットされた消去フラグ配列を前記記憶装置に格納し、前記特定のノードのノード識別子および前記親子関係定義配列と前記消去フラグ配列とを参照して、前記部分ツリーの前記特定のノードおよびその子孫のノードに付与されたノード識別子に対応する前記消去フラグ配列中のフラグをセットする消去フラグ配列生成手段と、
    前記第1のツリーから前記部分ツリーを削除したツリーである第2のツリーのすべてのノードに新たなノード識別子を付与し、前記新たなノード識別子が前記第1のツリーの前記ノード識別子に関連付けて格納された新規ノード識別子配列を前記記憶装置に生成する新規ノード識別子配列生成手段と、
    前記親子関係定義配列および前記新規ノード識別子配列に基づいて、前記第2のツリーの非ルート・ノードの各々の前記新たなノード識別子に関連付けられた親ノードの各々の前記新たなノード識別子が格納された前記第2のツリーの新たな親子関係定義配列を前記記憶装置に生成する親子関係配列生成手段と、
    を備えたことを特徴とする情報処理装置。
  11. 前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
    前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、前記ノード値格納配列を更新するノード値格納配列更新手段を備えたことを特徴とする請求項10に記載の情報処理装置。
  12. 前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、
    前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するノード値格納配列生成手段を備えたことを特徴とする請求項10に記載の情報処理装置。
  13. ツリー型データ構造を形成するすべてのノードに固有のノード識別子が付与され、前記ノード識別子が、ルート・ノードから始めて、子ノードよりも同じ世代のノードを優先して付与された連続する整数であり、前記ルート・ノード以外の非ルート・ノードの各々のノード識別子に関連付けられた親ノードのノード識別子が格納された親子関係定義配列を記憶する記憶装置を備えたコンピュータにおいて、
    第1のツリーの所定のノードの子孫ノード群として第2のツリーを挿入することにより形成された第3のツリーのツリー型データ構造について、前記記憶装置中に新たな親子関係定義配列を生成するために、前記コンピュータにより読み取り可能な情報処理プログラムであって、前記コンピュータに、
    前記第1のツリーの第1の親子関係定義配列および前記第2のツリーの第2の親子関係定義配列を前記記憶装置から読み出すステップと、
    前記第2のツリーのルート・ノードを前記第1のツリーの前記所定のノードの所定の順位の子ノードとして連結することにより形成される前記第3のツリーの世代毎に、前記第2のツリーに属するノードに隣接する前記第1のツリーに属するノードを特定し、前記第1のツリーに属する前記特定されたノードの情報を前記記憶装置に記憶するステップと、
    前記記憶装置に記憶された前記第1のツリーに属する前記特定されたノードの情報を参照して、前記第3のツリーのすべてのノードに、ルート・ノードから始めて、子ノードよりも同じ世代のノードを優先して連続する整数である新たなノード識別子を付与し、前記第1のツリーに属するノードに付与された前記新たなノード識別子を前記第1のツリーのノードのノード識別子に関連付けて格納した第1の新規ノード識別子配列、および、前記第2のツリーに属するノードに付与された前記新たなノード識別子を前記第2のツリーのノード識別子に関連付けて格納した第2の新規ノード識別子配列を前記記憶装置に生成するステップと、
    前記第1の親子関係定義配列および第2の親子関係定義配列と前記第1の新規ノード識別子配列および前記第2の新規ノード識別子配列に基づいて、前記第3のツリーの非ルート・ノードの前記新たなノード識別子に関連付けて前記第3のツリーの前記非ルート・ノードのノード識別子を格納することにより、前記新たな親子関係定義配列を前記記憶装置に生成するステップと、
    を実行させることを特徴とする情報処理プログラム。
  14. 前記記憶装置に、前記第1のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記第2のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、前記コンピュータに、
    前記第1および第2の新規ノード識別子配列を参照して、前記第1のツリーおよび前記第2のツリーのそれぞれのノード識別子と、前記第3のツリーの新たなノード識別子との関連付けにしたがって、前記第1のノード値格納配列および第2のノード配列の少なくとも一方を更新するステップを実行させることを特徴とする請求項13に記載の情報処理プログラム。
  15. 前記記憶装置に、前記第1のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第1のノード値格納配列が記憶され、前記第2のツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納した第2のノード値格納配列が記憶され、前記コンピュータに、
    前記第1および第2の新規ノード識別子配列を参照して、前記第1のツリーおよび前記第2のツリーのそれぞれのノード識別子と、前記第3のツリーの新たなノード識別子との関連付けにしたがって、前記新たなノード識別子の各々と関連付けて前記ノード値を格納した新たなノード値格納配列を生成するステップを実行させることを特徴とする請求項13に記載の情報処理プログラム。
  16. ツリー型データ構造を形成するすべてのノードに固有のノード識別子が付与され、前記ノード識別子が、ルート・ノードから始めて、親子関係のある親ノードと子ノードとの間では前記親ノードのノード識別子が前記子ノードのノード識別子より小さいという関係を満たす連続する整数であり、前記ルート・ノード以外の非ルート・ノードの各々のノード識別子に関連付けられた親ノードのノード識別子が格納された親子関係定義配列を記憶する記憶装置を備えたコンピュータにおいて、
    第1のツリーから、前記第1のツリーの特定のノードと当該特定のノードの子孫ノードとからなる部分ツリーを削除するために、前記コンピュータにより読み出し可能な情報処理プログラムであって、前記コンピュータに、
    前記第1のツリーの親子関係定義配列を前記記憶装置から読み出すステップと、
    初期値がセットされた消去フラグ配列を前記記憶装置に格納し、前記特定のノードのノード識別子および前記親子関係定義配列と前記消去フラグ配列とを参照して、前記部分ツリーの前記特定のノードおよびその子孫のノードに付与されたノード識別子に対応する前記消去フラグ配列中のフラグをセットするステップと、
    前記第1のツリーから前記部分ツリーを削除したツリーである第2のツリーのすべてのノードに新たなノード識別子を付与し、前記新たなノード識別子が前記第1のツリーの前記ノード識別子に関連付けて格納された新規ノード識別子配列を前記記憶装置に生成するステップと、
    前記親子関係定義配列および前記新規ノード識別子配列に基づいて、前記第2のツリーの非ルート・ノードの各々の前記新たなノード識別子に関連付けられた親ノードの各々の前記新たなノード識別子が格納された前記第2のツリーの新たな親子関係定義配列を前記記憶装置に生成するステップと、
    を実行させることを特徴とする情報処理プログラム。
  17. 前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、前記コンピュータに、
    前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、前記ノード値格納配列を更新するステップを実行させることを特徴とする請求項16に記載の情報処理プログラム。
  18. 前記記憶装置に、前記ツリーのノードのノード識別子の各々に関連付けて、当該ノードの少なくともノード値を格納したノード値格納配列が記憶され、前記コンピュータに、
    前記新規ノード識別子配列を参照して、もとのノード識別子と新たなノード識別子との関連付けにしたがって、新たなノード識別子の各々と関連付けて、前記ノード値を格納した、新たなノード値格納配列を生成するステップを実行させることを特徴とする請求項16に記載の情報処理プログラム。
JP2007530961A 2005-08-12 2006-08-09 情報処理方法、情報処理装置および情報処理プログラム Expired - Fee Related JP4886693B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007530961A JP4886693B2 (ja) 2005-08-12 2006-08-09 情報処理方法、情報処理装置および情報処理プログラム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2005234464 2005-08-12
JP2005234464 2005-08-12
PCT/JP2006/315739 WO2007020850A1 (ja) 2005-08-12 2006-08-09 情報処理方法、情報処理装置および情報処理プログラム
JP2007530961A JP4886693B2 (ja) 2005-08-12 2006-08-09 情報処理方法、情報処理装置および情報処理プログラム

Publications (2)

Publication Number Publication Date
JPWO2007020850A1 JPWO2007020850A1 (ja) 2009-02-26
JP4886693B2 true JP4886693B2 (ja) 2012-02-29

Family

ID=37757512

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007530961A Expired - Fee Related JP4886693B2 (ja) 2005-08-12 2006-08-09 情報処理方法、情報処理装置および情報処理プログラム

Country Status (3)

Country Link
US (1) US20090106298A1 (ja)
JP (1) JP4886693B2 (ja)
WO (1) WO2007020850A1 (ja)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006080268A1 (ja) * 2005-01-25 2006-08-03 Turbo Data Laboratories Inc. ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム
JP4369471B2 (ja) * 2006-12-27 2009-11-18 富士通株式会社 ミラーリングプログラム、ミラーリング方法、情報記憶装置
US8176084B2 (en) * 2007-11-26 2012-05-08 International Business Machines Corporation Structure based storage, query, update and transfer of tree-based documents
US8484256B2 (en) * 2010-01-13 2013-07-09 International Business Machines Corporation Transformation of logical data objects for storage
US9769016B2 (en) 2010-06-07 2017-09-19 Brocade Communications Systems, Inc. Advanced link tracking for virtual cluster switching
US8867552B2 (en) 2010-05-03 2014-10-21 Brocade Communications Systems, Inc. Virtual cluster switching
US9716672B2 (en) 2010-05-28 2017-07-25 Brocade Communications Systems, Inc. Distributed configuration management for virtual cluster switching
US9270486B2 (en) 2010-06-07 2016-02-23 Brocade Communications Systems, Inc. Name services for virtual cluster switching
US9608833B2 (en) 2010-06-08 2017-03-28 Brocade Communications Systems, Inc. Supporting multiple multicast trees in trill networks
US9806906B2 (en) 2010-06-08 2017-10-31 Brocade Communications Systems, Inc. Flooding packets on a per-virtual-network basis
US9628293B2 (en) 2010-06-08 2017-04-18 Brocade Communications Systems, Inc. Network layer multicasting in trill networks
US9807031B2 (en) 2010-07-16 2017-10-31 Brocade Communications Systems, Inc. System and method for network configuration
CN102402545B (zh) * 2010-09-14 2015-09-02 腾讯科技(深圳)有限公司 一种存储数据的方法及装置
US9736085B2 (en) 2011-08-29 2017-08-15 Brocade Communications Systems, Inc. End-to end lossless Ethernet in Ethernet fabric
US9699117B2 (en) 2011-11-08 2017-07-04 Brocade Communications Systems, Inc. Integrated fibre channel support in an ethernet fabric switch
US9450870B2 (en) 2011-11-10 2016-09-20 Brocade Communications Systems, Inc. System and method for flow management in software-defined networks
US9742693B2 (en) 2012-02-27 2017-08-22 Brocade Communications Systems, Inc. Dynamic service insertion in a fabric switch
US9154416B2 (en) 2012-03-22 2015-10-06 Brocade Communications Systems, Inc. Overlay tunnel in a fabric switch
US9009155B2 (en) * 2012-04-27 2015-04-14 Sap Se Parallel set aggregation
US10277464B2 (en) 2012-05-22 2019-04-30 Arris Enterprises Llc Client auto-configuration in a multi-switch link aggregation
US9256593B2 (en) * 2012-11-28 2016-02-09 Wal-Mart Stores, Inc. Identifying product references in user-generated content
US9548926B2 (en) 2013-01-11 2017-01-17 Brocade Communications Systems, Inc. Multicast traffic load balancing over virtual link aggregation
US9413691B2 (en) 2013-01-11 2016-08-09 Brocade Communications Systems, Inc. MAC address synchronization in a fabric switch
US9565099B2 (en) 2013-03-01 2017-02-07 Brocade Communications Systems, Inc. Spanning tree in fabric switches
US9912612B2 (en) 2013-10-28 2018-03-06 Brocade Communications Systems LLC Extended ethernet fabric switches
US9548873B2 (en) 2014-02-10 2017-01-17 Brocade Communications Systems, Inc. Virtual extensible LAN tunnel keepalives
US10581758B2 (en) 2014-03-19 2020-03-03 Avago Technologies International Sales Pte. Limited Distributed hot standby links for vLAG
US10476698B2 (en) 2014-03-20 2019-11-12 Avago Technologies International Sales Pte. Limited Redundent virtual link aggregation group
US10063473B2 (en) 2014-04-30 2018-08-28 Brocade Communications Systems LLC Method and system for facilitating switch virtualization in a network of interconnected switches
US9800471B2 (en) 2014-05-13 2017-10-24 Brocade Communications Systems, Inc. Network extension groups of global VLANs in a fabric switch
US10616108B2 (en) 2014-07-29 2020-04-07 Avago Technologies International Sales Pte. Limited Scalable MAC address virtualization
US9807007B2 (en) 2014-08-11 2017-10-31 Brocade Communications Systems, Inc. Progressive MAC address learning
US9699029B2 (en) 2014-10-10 2017-07-04 Brocade Communications Systems, Inc. Distributed configuration management in a switch group
US9626255B2 (en) 2014-12-31 2017-04-18 Brocade Communications Systems, Inc. Online restoration of a switch snapshot
US9628407B2 (en) * 2014-12-31 2017-04-18 Brocade Communications Systems, Inc. Multiple software versions in a switch group
US9942097B2 (en) 2015-01-05 2018-04-10 Brocade Communications Systems LLC Power management in a network of interconnected switches
US10003552B2 (en) 2015-01-05 2018-06-19 Brocade Communications Systems, Llc. Distributed bidirectional forwarding detection protocol (D-BFD) for cluster of interconnected switches
US10038592B2 (en) 2015-03-17 2018-07-31 Brocade Communications Systems LLC Identifier assignment to a new switch in a switch group
US9807005B2 (en) 2015-03-17 2017-10-31 Brocade Communications Systems, Inc. Multi-fabric manager
US10579406B2 (en) 2015-04-08 2020-03-03 Avago Technologies International Sales Pte. Limited Dynamic orchestration of overlay tunnels
US10439929B2 (en) 2015-07-31 2019-10-08 Avago Technologies International Sales Pte. Limited Graceful recovery of a multicast-enabled switch
US10171303B2 (en) 2015-09-16 2019-01-01 Avago Technologies International Sales Pte. Limited IP-based interconnection of switches with a logical chassis
US9411706B1 (en) * 2015-09-30 2016-08-09 Semmle Limited Suggesting candidate removable software dependencies
US9912614B2 (en) 2015-12-07 2018-03-06 Brocade Communications Systems LLC Interconnection of switches based on hierarchical overlay tunneling
US10237090B2 (en) 2016-10-28 2019-03-19 Avago Technologies International Sales Pte. Limited Rule-based network identifier mapping
US10685079B2 (en) * 2017-09-12 2020-06-16 Sap Se Parsing nested javascript object notation requests
US11366810B2 (en) * 2020-04-27 2022-06-21 Salesforce.Com, Inc. Index contention under high concurrency in a database system
CN116303405B (zh) * 2023-05-12 2023-11-10 深圳竹云科技股份有限公司 一种数据查重方法、装置、计算机设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000348038A (ja) * 1999-06-02 2000-12-15 Fujitsu Ltd 半構造データベースのためのデータ格納装置および方法
JP2001209656A (ja) * 2000-01-26 2001-08-03 Nec Corp 検索用データ構造構築方法、その装置、機械可読データ記録媒体及び機械可読プログラム記録媒体
US20030177443A1 (en) * 2001-11-16 2003-09-18 Christoph Schnelle Maintenance of a markup language document in a database
JP2004120657A (ja) * 2002-09-27 2004-04-15 Internatl Business Mach Corp <Ibm> 木構造文書送受システム、木構造文書送信装置、木構造文書受信装置、木構造文書送受方法、木構造文書送信方法、木構造文書受信方法、及びプログラム
US20050028091A1 (en) * 2003-07-30 2005-02-03 International Business Machines Corporation Method, system and recording medium for maintaining the order of nodes in a heirarchical document

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7937413B2 (en) * 2004-05-04 2011-05-03 International Business Machines Corporation Self-adaptive prefix encoding for stable node identifiers

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000348038A (ja) * 1999-06-02 2000-12-15 Fujitsu Ltd 半構造データベースのためのデータ格納装置および方法
JP2001209656A (ja) * 2000-01-26 2001-08-03 Nec Corp 検索用データ構造構築方法、その装置、機械可読データ記録媒体及び機械可読プログラム記録媒体
US20030177443A1 (en) * 2001-11-16 2003-09-18 Christoph Schnelle Maintenance of a markup language document in a database
JP2004120657A (ja) * 2002-09-27 2004-04-15 Internatl Business Mach Corp <Ibm> 木構造文書送受システム、木構造文書送信装置、木構造文書受信装置、木構造文書送受方法、木構造文書送信方法、木構造文書受信方法、及びプログラム
US20050028091A1 (en) * 2003-07-30 2005-02-03 International Business Machines Corporation Method, system and recording medium for maintaining the order of nodes in a heirarchical document

Also Published As

Publication number Publication date
US20090106298A1 (en) 2009-04-23
WO2007020850A1 (ja) 2007-02-22
JPWO2007020850A1 (ja) 2009-02-26

Similar Documents

Publication Publication Date Title
JP4886693B2 (ja) 情報処理方法、情報処理装置および情報処理プログラム
JP4681544B2 (ja) 配列の生成方法、情報処理装置、及び、プログラム
JP4537391B2 (ja) ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム
JP4712718B2 (ja) 配列の生成方法、及び、配列生成プログラム
US7937399B2 (en) Method, information processing apparatus, and program of searching for, aggregating and sorting trees
US7664773B2 (en) Structured data storage method, structured data storage apparatus, and retrieval method
JP5241738B2 (ja) 表からツリー構造データを構築する方法及び装置
JP4796970B2 (ja) ツリーデータの検索・集計・ソート方法及びプログラム
JP4398988B2 (ja) 構造化文書を管理する装置、方法およびプログラム
JP4681555B2 (ja) ノード挿入方法、情報処理装置、および、ノード挿入プログラム
JP4247108B2 (ja) 構造化文書検索方法、構造化文書検索装置、及びプログラム
JP2011154653A (ja) データモデリング方法及び装置及びプログラム
JP2006031377A (ja) 構造化文書管理装置、検索装置、記憶方法、検索方法及びプログラム
JP2001290801A (ja) 構造文書化システム,構造文書化プログラム,及び、コンピュータ可読格納媒体
JP3824956B2 (ja) 識別番号付与装置、識別番号管理方法、識別番号管理プログラム及び同プログラムを記録したコンピュータ読み取り可能な記録媒体
JP3843574B2 (ja) 文書変換規則生成装置、文書変換規則生成方法及び文書変換規則生成プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2795110B2 (ja) 有向グラフ作成装置
JP2001134596A (ja) 構造化文書管理装置および構造化文書検索方法
JP4334450B2 (ja) 構造化文書検索装置及び構造化文書検索方法
JP2022070523A (ja) 意味表現解析システム及び意味表現解析方法
JP2009169850A (ja) 系列パタン抽出装置及び方法
JP2012073706A (ja) 構造化文書格納装置、構造化文書格納方法及び構造化文書格納プログラム

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090717

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090717

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110815

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

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

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

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees