JP2014026331A - 部分木判定装置、部分木判定方法、及び部分木判定プログラム - Google Patents

部分木判定装置、部分木判定方法、及び部分木判定プログラム Download PDF

Info

Publication number
JP2014026331A
JP2014026331A JP2012164000A JP2012164000A JP2014026331A JP 2014026331 A JP2014026331 A JP 2014026331A JP 2012164000 A JP2012164000 A JP 2012164000A JP 2012164000 A JP2012164000 A JP 2012164000A JP 2014026331 A JP2014026331 A JP 2014026331A
Authority
JP
Japan
Prior art keywords
node
nodes
identification
equivalent
unit
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.)
Pending
Application number
JP2012164000A
Other languages
English (en)
Inventor
Makoto Nakayama
誠 中山
Satoshi Tanaka
聡 田中
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.)
NTT Docomo Inc
Original Assignee
NTT Docomo 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 NTT Docomo Inc filed Critical NTT Docomo Inc
Priority to JP2012164000A priority Critical patent/JP2014026331A/ja
Publication of JP2014026331A publication Critical patent/JP2014026331A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

【課題】木構造データに含まれる共通部分木を高速に検出すると共に、共通部分木の出現回数を高速に計数する。
【解決手段】部分木判定装置10は、木構造データの任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は、中間ノードに割り当てられている、該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較することで、中間ノード同士の等価性判定を行う等価性判定部16を備える。
【選択図】図2

Description

本発明は、部分木判定装置、部分木判定方法、及び部分木判定プログラムに関する。
木構造データは従来から広く研究され、また、様々な用途に利用されている。例えば最近注目を集めているビッグデータ処理システムであるオープンソースソフトウェアHadoop(下記非特許文献1参照)では、SequenceFileという枠組みを用い、木構造データとして表現した個々のレコードを直列化したうえでストレージに保存する。ビッグデータ処理システムでは大量のデータを保存するため、ストレージ容量を節約するために、個々のレコードは少しでもデータサイズを縮小することが要請される。そのため、SequenceFileでは、直列化した結果をGzip等の従来の圧縮技術で圧縮をしてから保存するのが慣習となっている。
下記非特許文献2には、テキストデータを対象として、従来の圧縮技術では上手く利用できない「長い共通文字列」による冗長性を利用した独自の「事前圧縮」を行った後、従来の圧縮技術で圧縮することにより、単に従来の圧縮技術だけで圧縮するよりも高い圧縮率を達成する旨が述べられている。この考え方を木構造データに応用する場合、できるだけ大きな「共通部分木」を探し出し、その冗長性を利用した独自の「事前圧縮」を行うことが考えられる。ここで、木構造データ内の「共通部分木」を高速に検出する方法としては、下記非特許文献3に記載の方法がある。
また、木構造データ中に、別途指定した木構造に“似た部分木”が含まれているかどうかを探索する、いわゆる部分木パターン探索を行う従来方法として、例えば非特許文献4や下記特許文献1に記載の方法などがある。また、木構造データ中の各ノードにIDを割り当て、それを利用した処理を行う方法として、例えば下記特許文献2に記載の方法がある。
特開2011−123619号公報 特開平10−240741号公報
"Hadoop"、[online]、インターネット<URL:http://hadoop.apache.org/> Jon Bentley,Douglas McIlroy著、"Data Compression Using Long Common Strings"、Proceeding.DCC'99 Proceedings of the Conference on Data Compression、1999年発行、p.287−295 Fabrizio Luccio,Antonio Mesa Enriquez,Pablo Olivares Rieumont,Linda Pagli著、"Exact Rooted Subtree Matching in Sublinear Time"、Technical Report:TR-01-14、Universita Di Pisa、2001年発行 Tatsuya Asai,Kenji Abe,Shinji Kawasoe,Hiroshi Sakamoto,Setsuo Arikawa著、"Efficient substructure discovery from large semi-structured data"、IEICE transactions on information and systems Vol.E87-D(No.12)、2004年12月1日発行、p.2754−2763
ここで、共通部分木による冗長性を利用した事前圧縮を行うためには、木構造データ中の全ての共通部分木とその出現回数を検出する手段が必要となる。しかしながら非特許文献1に記載のSequenceFileには、共通部分木を検出する機能は備わっていない。
また、木構造データ中の共通部分木を検出する機能は、高速に行えることが望ましい。しかしながら、木構造データ中の全ての部分木について、2つの部分木同士の全ての組合せについて総当りで、かつ、部分木中の全子孫ノードについて再帰的に照合を行おうとすると、指数関数的な計算量を要してしまう。従って、そのような方法は回避すべきである。ここで、非特許文献3では、指定した部分木の木構造データ中における出現回数を高速に検出するための技術について論じている。当該技術は、有限アルファベット集合のうちの一つが各々のノードに「ラベル」として付与される状況のみを対象としている。
しかしながら、非特許文献1に記載のSequenceFileのように、木構造データの葉ノードには任意の値(Integer型の整数値、Double型の実数値、String型の文字列、など)を設定できるようになっているのが一般的である。このような木構造データに対して非特許文献3に記載の技術を適用するには、上記のような任意の値をラベルとして扱える必要があるが、「任意の値」は無限にあるため、有限アルファベット集合を前提としている非特許文献3に記載の技術を適用することは困難である。
また、非特許文献4に記載の方法及び特許文献1に記載の方法では、指定した木に“似た部分木”まで含めて探索するため、完全一致する部分木だけを検出する処理と比べ探索空間が広くなり、処理時間が長くなるという問題がある。特許文献2に記載の方法で用いられるIDは、任意のノードを根ノードとする部分木同士の等価性を示すものではなく、等価な部分木を高速に検出するという要求の解決に寄与するものではない。
そこで、本発明は、木構造データに含まれる共通部分木を高速に検出すると共に、共通部分木の出現回数を高速に計数することを目的とする。
本発明に係る部分木判定装置は、値を保持する葉ノードと、葉ノード又は他の中間ノードを子ノードとして保持する中間ノードと、親ノードを持たない唯一の中間ノードである根ノードと、を備える木構造データにおける部分木を判定する部分木判定装置であって、木構造データの任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は、中間ノードに割り当てられている、該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較し、相対位置が等しい子ノード同士の全ての組について等価であると判定した場合には、2つの中間ノードは等価であると判定し、相対位置が等しい子ノード同士の少なくとも一組について等価でないと判定した場合には、2つの中間ノードは等価でないと判定する等価性判定部を備える。
本発明に係る部分木判定方法は、上記の部分木判定装置により実行される部分木判定方法であって、木構造データの任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は、中間ノードに割り当てられている、該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較し、相対位置が等しい子ノード同士の全ての組について等価であると判定した場合には、2つの中間ノードは等価であると判定し、相対位置が等しい子ノード同士の少なくとも一組について等価でないと判定した場合には、2つの中間ノードは等価でないと判定する等価性判定ステップを含む。
本発明に係る部分木判定プログラムは、上記の部分木判定装置に設けられたコンピュータを、木構造データの任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は、中間ノードに割り当てられている、該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較し、相対位置が等しい子ノード同士の全ての組について等価であると判定した場合には、2つの中間ノードは等価であると判定し、相対位置が等しい子ノード同士の少なくとも一組について等価でないと判定した場合には、2つの中間ノードは等価でないと判定する等価性判定部として機能させる。
このような形態では、木構造データにおける中間ノード同士の等価性(すなわち、当該中間ノードを根ノードとする部分木同士の等価性)を判定するにあたって、当該中間ノードの直接の子ノード同士を、ノードの型、葉ノードの値、又は中間ノードに割り当てられている、当該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較する。すなわち、葉ノードと中間ノードについては、ノードの型の違いから等価でないと判定できる。また、葉ノード同士については葉ノードの値が一致すれば等価であると判定でき、一致しなければ等価でないと判定できる。また、中間ノード同士については、中間ノードに割り当てられた識別IDが一致すれば等価であると判定でき、一致しなければ等価でないと判定できる。これにより、中間ノード同士の等価性判定において、当該中間ノードの全ての子孫ノードを再帰的に巡回して比較することなく、中間ノード同士の等価性判断を高速に行うことができる。すなわち、木構造データに含まれる共通部分木を高速に検出することができる。
上記の部分木判定装置では、木構造データの全てのノードを深さ優先で巡回する木構造巡回部と、識別IDを中間ノードに紐づけて記憶する識別ID記憶部と、前記木構造データの任意の中間ノードである第1中間ノードについて、該第1中間ノードと同一のハッシュ値を持つ中間ノードである第2中間ノードが識別ID記憶部に記憶されているか否かを判定するハッシュ値判定部と、ハッシュ値判定部が、第2中間ノードが識別ID記憶部に記憶されていると判定し、且つ、等価性判定部が、第1中間ノードと第2中間ノードとが等価であると判定した場合に、第1中間ノードに対して第2中間ノードの識別IDと同一の識別IDを割り当て、ハッシュ値判定部が、第2中間ノードが識別ID記憶部に記憶されていないと判定した場合、又は、等価性判定部が、第1中間ノードと第2中間ノードとが等価でないと判定した場合には、第1中間ノードに対して新たな識別IDを割り当てる識別ID割当部と、識別ID割当部により第1中間ノードに割り当てられた識別IDを第1中間ノードに紐づけて識別ID記憶部に登録する識別ID登録部と、を更に備え、木構造巡回部により巡回され、処理対象とされた中間ノードを第1中間ノードとして、ハッシュ値判定部、等価性判定部、識別ID割当部、及び識別ID登録部が各処理を行ってもよい。
このような形態では、木構造データを深さ優先で巡回することで、下位の中間ノードから先に識別IDを割り当てられる。すなわち、任意の中間ノード同士の等価性判断を行う際には、既に当該中間ノードよりも下位の中間ノードについて識別IDの割当が完了していることになる。これにより、木構造データを効率よく巡回しつつ、中間ノード同士の等価性判断を高速に行うことができる。すなわち、木構造データに含まれる共通部分木を高速に検出することができる。
上記の部分木判定装置では、木構造データにおける等価なノードごとに、該等価なノードの木構造データにおける出現回数を該等価なノードに紐づけて記憶する出現回数記憶部と、巡回部により巡回された巡回ノードと等価なノードが出現回数記憶部に記憶されているか否かを判定する既登録判定部と、既登録判定部が、等価なノードが出現回数記憶部に記憶されていないと判定した場合には、巡回ノードが初めて出現したことを示す初期値を、巡回ノードに紐づく出現回数として出現回数記憶部に登録し、既登録判定部が、等価なノードが出現回数記憶部に記憶されていると判定した場合には、出現回数記憶部に記憶されている等価なノードに紐づく出現回数をインクリメントする出現回数設定部と、を更に備えてもよい。
このような形態によれば、木構造データに含まれる共通部分木を検出するための巡回処理において、併せて共通部分木の出現回数を計数することができるため、共通部分木の出現回数を計数するための巡回処理を別途行う必要がなくなる。これにより、共通部分木の出現回数を効率的かつ高速に計数することができる。
本発明によれば、木構造データに含まれる共通部分木を高速に検出すると共に、共通部分木の出現回数を高速に計数することができる。
木構造データ及び深さ優先による処理順序について説明するための図である。 実施形態に係る部分木判定装置の機能構成を示すブロック図である。 実施形態に係る部分木判定装置のハードウェア構成を示すブロック図である。 実施形態に係る木構造データを示す図である。 実施形態に係る部分木判定装置の動作を示すフロー図である。 部分木判定装置における出現回数設定処理の動作を示すフロー図である。 部分木判定装置における識別ID割当処理の動作を示すフロー図である。 部分木判定装置における等価性判定処理の動作を示すフロー図である。 実施形態に係る木構造データにおける識別ID記憶部に記憶される情報を示す図である。 実施形態に係る木構造データにおける出現回数記憶部に記憶される情報を示す図である。 実施形態に係る部分木判定プログラムの機能構成を示すブロック図である。
以下、添付図面を参照しながら本発明の実施形態を詳細に説明する。なお、図面の説明において同一又は同等の要素には同一の符号を付し、重複する説明を省略する。
まず、図1を用いて、本実施形態における処理対象となる木構造データについて説明する。図1に示すように、木構造データは、値を保持する葉ノードと、葉ノード又は他の中間ノードを子ノードとして保持する中間ノードと、親ノードを持たない唯一の中間ノードである根ノードと、各ノード間を結ぶエッジとからなるデータ構造である。木構造データの実装方法としては、各ノードに子ノードへのポインタを保持させる方法や各ノードに親ノードへのポインタを保持させる方法などのいくつかの方法があるが、実装方法はこれらの方法のいずれかに限定されない。
一定の規則に基づいて木構造データを巡回することにより、木構造データの各ノードに対応するデータ要素(以下、「各ノードに対応するデータ要素」のことを単に「各ノード」と表記する。)について順に処理を行うことができる。図1において、深さ優先で巡回する場合における巡回経路を点線で示すと共に、各ノードの処理順序を括弧付き数字で示す。
本明細書中において、「部分木」とは、木構造データにおける任意のノード以下の要素(ノード、エッジ)のみによって構成される木のことをいう。すなわち、部分木とは、当該任意のノードを根ノードとする木を意味する。
単に「子」又は「子ノード」と記載した場合には、「孫」又は「孫ノード」が含まれてもよく、「直接の子」又は「直接の子ノード」と記載した場合には、直接の親子関係にある「子」又は「子ノード」のみを意味し、「孫」又は「孫ノード」は含まれないものとする。
「部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニーク」とは、部分木のノード構成、すなわち、全てのノード要素の位置、種別(葉又は中間)、及び値(葉ノードの場合)が完全一致すれば同値となり、部分木のノード構成のうちの一つでも異なれば異値となるような性質を意味する。
次に、実施形態に係る部分木判定装置10の機能要素について、図2を用いて説明する。部分木判定装置10は、木構造構築部11、木構造巡回部12、ハッシュ値計算部13、識別ID記憶部14、ハッシュ値判定部15、等価性判定部16、識別ID割当部17、識別ID登録部18、出現回数記憶部19、既登録判定部20、及び出現回数設定部21を備える。
部分木判定装置10のハードウェア構成を図3に示す。図3に示すように、部分木判定装置10は、オペレーティングシステムやアプリケーションプログラムなどを実行するCPU101と、ROM及びRAMで構成される主記憶部102と、ハードディスクメモリなどで構成される補助記憶部103と、データ通信を行う通信制御部104と、液晶モニタなどで構成される出力部105と、入力デバイスであるキーボード及びマウス等で構成される操作部106と、CD−ROMやDVDなどの記録媒体110を読み取る記録媒体読取部107とを備える。
図1に示す部分木判定装置10の各機能は、CPU101の制御の下で、主記憶部102に所定のソフトウェアプログラムを読み込ませて実行することにより実現される。その際、CPU101は、ソフトウェアプログラムの処理手順に従い、主記憶部102及び補助記憶部103におけるデータの読み出し及び書き込み動作を制御し、操作部106、出力部105及び通信制御部104の動作を制御する。
図2の木構造構築部11は、木構造データを構築する機能要素である。木構造構築部11は、オブジェクト構造を有するデータについて、各オブジェクトを木構造における各ノードに対応させるように木構造データを構築する。
木構造巡回部12は、木構造構築部11により構築された木構造データを深さ優先で巡回する機能要素である。木構造巡回部12の巡回処理により、後述する他の機能要素は、木構造データの各ノードについて深さ優先で処理を行うことができる。これにより、木構造データの任意のノードについて処理を行う際には、既に当該ノードの下位ノードについての処理が完了されていることが保証される。
ハッシュ値計算部13は、各ノードのハッシュ値を算出する機能要素である。例えば、ハッシュ値計算部13は、処理対象のノードが葉ノードの場合には、当該葉ノードの値に基づいて当該葉ノードのハッシュ値を算出し、処理対象のノードが中間ノードの場合には、当該中間ノードの直接の子ノードのハッシュ値に基づいて当該中間ノードのハッシュ値を算出する。葉ノードのハッシュ値算出方法としては、MD5やSHA1などの従来方法を用いることができる。また、中間ノードのハッシュ値算出方法としては、当該中間ノードの直接の子ノード全てのハッシュ値の排他的論理和を取るなどの方法がある。ただし、葉ノード及び中間ノードのハッシュ値算出方法はこれらの方法のいずれかに限定されない。ハッシュ値計算部13により算出された葉ノード及び中間ノードのハッシュ値は、以降で説明する各機能要素により適宜参照される。
識別ID記憶部14は、中間ノードのユニーク性を保証する識別IDを中間ノードに紐づけて記憶する機能要素である。本実施形態では、識別ID記憶部14は、中間ノードをキーとし、当該中間ノードに紐づく識別IDを当該キーに対応する値として格納するハッシュテーブルとして実装される。ただし、識別ID記憶部14の実装方法は、これに限定されない。また、識別ID記憶部14は、一定の領域に永続的にデータを記憶するものであってもよいし、一時的にデータを記憶し、データが不要となったら領域を再利用するものであってもよい。また、中間ノード及び識別IDの情報(データ)の格納方法も特に限定されない。例えば、これらの情報は、単一の場所にまとめて記憶されてもよく、複数の場所に分散して記憶されてもよい。なお、本実施形態では説明をわかりやすくするため、図9に示すように、上記ハッシュテーブルには、識別IDと共に中間ノードのハッシュ値を含むものとする。
ハッシュ値判定部15は、任意の中間ノード(第1中間ノード)と同一のハッシュ値を持つ中間ノード(第2中間ノード)が識別ID記憶部14に記憶されているか否かを判定する機能要素である。
等価性判定部16は、任意の2つの中間ノードが等価であるか否かを判定する機能要素である。具体的には、等価性判定部16は、任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は中間ノードの識別IDに基づいて比較する。具体的には、等価性判定部16は、葉ノードと中間ノードについては、ノードの型の違いから等価でないと判定する。また、等価性判定部16は、葉ノード同士については葉ノードの値が一致すれば等価であると判定し、一致しなければ等価でないと判定する。また、等価性判定部16は、中間ノード同士については、中間ノードに割り当てられた識別IDが一致すれば等価であると判定し、一致しなければ等価でないと判定する。等価性判定部16は、相対位置が等しい直接の子ノード同士の全ての組について等価であると判定した場合には、2つの中間ノードは等価であると判定し、相対位置が等しい直接の子ノード同士の少なくとも一組について等価でないと判定した場合には、2つの中間ノードは等価でないと判定する。
識別ID割当部17は、第1中間ノードに識別IDを割り当てる機能要素である。具体的には、識別ID割当部17は、ハッシュ値判定部15が、第1中間ノードと同一のハッシュ値を持つ中間ノード(第2中間ノード)が識別ID記憶部14に記憶されていると判定し、さらに、等価性判定部16が、第1中間ノードと第2中間ノードとが等価であると判定した場合には、第1中間ノードに対して第2中間ノードの識別IDと同一の識別IDを割り当て、ハッシュ値判定部15が、第2中間ノードが識別ID記憶部14に記憶されていないと判定し、又は、等価性判定部16が、第1中間ノードと第2中間ノードとが等価でないと判定した場合には、第1中間ノードに対して新たな識別IDを割り当てる。ここで、中間ノードに対する識別IDの割当は、例えば、中間ノードに対応するオブジェクトのメンバ変数として識別IDを保持させる方法などにより実現できる。ただし、中間ノードに対する識別IDの割当方法は上記の方法に限定されない。
上述したように、中間ノードのハッシュ値はハッシュ値計算部13が算出するが、中間ノードを根ノードとする部分木のノード構成に対して一意のハッシュ値を生成することを保証するものではない。すなわち、互いにノード構成の異なる中間ノードについて、ハッシュ値が重複する可能性があるため、ハッシュ値が一致することをもって直ちに「等価である」と判定することはできない。そのため、識別ID割当部17は、上記のように、ハッシュ値判定部15の判定だけでなく、等価性判定部16の判定を併せて行うことにより、中間ノードの等価性判定を確実に行い、その結果に応じた識別IDの割当を行う。
識別ID割当部17は、既に他の中間ノードに割り当てた識別IDと重複しない新たな識別IDを割り当てる。識別IDを重複して割り当てないように識別IDを割り当てる方法としては、例えば、新たに割り当てる識別IDの値を保持し識別IDが新たに割り当てられると自動で値をインクリメントする識別IDカウンタを、識別ID割当部17に設ける方法がある。ただし、識別IDの割当方法は、識別IDの重複割当がされないものであれば何でもよく、上記の方法に限定されない。
識別ID登録部18は、識別ID割当部17が第1中間ノードに割り当てた識別IDを識別ID記憶部14に登録する機能要素である。
出現回数記憶部19は、木構造データにおける等価なノードごとに、木構造データにおける出現回数を等価なノードに紐づけて記憶する機能要素である。本実施形態では、出現回数記憶部19は、等価なノードをキーとし、等価なノードに紐づく出現回数を当該キーに対応する値として格納するハッシュテーブルとして実装される。ただし、出現回数記憶部19の実装方法は、これに限定されない。また、出現回数記憶部19は、一定の領域に永続的にデータを記憶するものであってもよいし、一時的にデータを記憶し、データが不要となったら領域を再利用するものであってもよい。また、ノード及び出現回数の情報(データ)の格納方法も特に限定されない。例えば、これらの情報は、単一の場所にまとめて記憶されてもよく、複数の場所に分散して記憶されてもよい。
既登録判定部20は、木構造巡回部12により巡回され、処理対象とされた巡回ノードが出現回数記憶部19に既に登録されているか否かを判定する機能要素である。具体的には、既登録判定部20は、巡回ノードが葉ノードである場合には、巡回ノードと同一のハッシュ値を持つ葉ノード(等価なノード)が出現回数記憶部19に記憶されているか否かを判定し、巡回ノードが中間ノードである場合には、巡回ノードと同一の識別IDを持つ中間ノード(等価なノード)が出現回数記憶部19に記憶されているか否かを判定する。
出現回数設定部21は、木構造データにおける等価な部分木ごとの出現回数を設定する機能要素である。具体的には、出現回数設定部21は、既登録判定部20が、等価なノードが出現回数記憶部19に記憶されていないと判定した場合には、巡回ノードが初めて出現したことを示す初期値を巡回ノードに紐づく出現回数として出現回数記憶部19に登録し、既登録判定部20が、等価なノードが出現回数記憶部19に記憶されていると判定した場合には、出現回数記憶部19に記憶されている等価なノードに紐づく出現回数をインクリメントする。本実施形態では、「初期値」として整数値「1」を用いるが、初期値は、部分木判定装置10を含むシステム内において整合が取れているものであればよく、例えば「0」を用いてもよい。
次に、図4に示す本実施形態に係る木構造データを用いて、図5〜図8に示す部分木判定装置10の動作を説明する。図4に示す木構造データにおいて、識別ID記憶部14に記憶されるハッシュテーブルの情報を図9に示し、出現回数記憶部19に記憶されるハッシュテーブルの情報を図10に示す。ここで、図9及び図10に示すハッシュテーブルの要素の並びは、登録された順である。
図5において、木構造構築部11は、処理対象のデータ構造に基づいて、図4に示すような木構造データを構築する(ステップS501)。その後、木構造巡回部12は、当該木構造データの根ノードを現在ノードとして、木構造データの巡回を開始する(ステップS502)。木構造巡回部12は、現在ノードに未巡回の直接の子ノードがあるか否かの判定を行い、深さ優先により最初に発見された未巡回ノードである「中間a」に移動する(ステップS503:YES、ステップS504)。
現在ノード(中間a)が中間ノードであるため(ステップS505:YES)、木構造巡回部12は、ステップS503の判定に移り、現在ノード(中間a)に未巡回の直接の子ノードがあるか否かの判定を行う。その後、上述の処理と同様の処理が繰り返され、木構造巡回部12は、「中間a」→「中間b」→「“foo”」と移動し、現在ノード(“foo”)について、ステップS505の判定を行う。ここで、現在ノード(“foo”)は葉ノードであるため、図6に示す出現回数設定処理が実行される(ステップS505:NO、ステップS506)。
出現回数記憶部19には、まだ何も記憶されていないため、既登録判定部20は、等価なノードが出現回数記憶部19に記憶されていないと判定し(ステップS601:NO)、出現回数設定部21が、初期値(整数値「1」)を現在ノード(“foo”)の出現回数として出現回数記憶部19に登録する(ステップS602)。この時点では「“foo”」の出現回数は「1」となっている。その後、木構造巡回部12は、親ノード(中間b)に移動する(ステップS507)。続いて、「中間b」の2番目の子ノード(1.23)について、上述した「“foo”」に対する処理と同様の処理がされる。その後、木構造巡回部12は、再び親ノード(中間b)に移動する(ステップS507)。
木構造巡回部12は、現在ノード(中間b)についてステップS503の判定を行う。ここで、木構造巡回部12は、現在ノード(中間b)の全ての直接の子ノード(“foo”、1.23)について巡回処理が完了しているため、未巡回の直接の子ノードはないと判定する(ステップS503:NO)。さらに、現在ノード(中間b)は根ノードではないため、図7に示す識別ID割当処理が実行される(ステップS508:NO、ステップS509)。
識別ID記憶部14には、まだ何も記憶されていないため、ハッシュ値判定部15は、現在ノード(中間b)と同一のハッシュ値を持つ中間ノードは識別ID記憶部14に記憶されていないと判定し(ステップS701:NO)、識別ID割当部17が、新たな識別ID(初期値「0」)を「中間b」に割り当てる(ステップS702)。続いて、出現回数設定処理(ステップS510)が実行される。その後、木構造巡回部12は、親ノードへ移動する(ステップS511)。
続いて、「987」、「中間c」、「中間a」の順に、各ノードについて上述の処理と同様の処理がされる。続いて、木構造巡回部12は、一旦根ノードまで遡った後、「中間d」→「中間e」→「“foo”」と移動し、現在ノード(“foo”)について、出現回数設定処理(ステップS506)がされる。
出現回数記憶部19には、現在ノード(“foo”)の等価なノード(図10の1つ目のレコード)が存在するため、既登録判定部20は、等価なノードが出現回数記憶部19に記憶されていると判定し(ステップS601:YES)、出現回数設定部21が、当該等価なノードの出現回数をインクリメントする(ステップS603)。これにより、「“foo”」の出現回数は「2」となる。続いて、「中間e」の子ノードの「1.23」についても、同様の処理がされる。
続いて、木構造巡回部12は「中間e」に移動し、現在ノード(中間e)について、識別ID割当処理(ステップS509)が実行される。識別ID記憶部14には、「中間e」と同一のハッシュ値を持つ「中間b」が記憶されているため、等価性判定部16により、図8に示す等価性判定処理が実行される(ステップS701:YES、ステップS703、等価性判定ステップ)。
「中間e」と「中間b」は直接の子ノードの個数がいずれも「2」と一致するため、比較対象ノードとして各中間ノードの位置を基準とする相対位置が等しい直接の子ノード(「中間e」の直接の子ノードである“foo”と「中間b」の直接の子ノードである“foo”)が抽出される(ステップS801:YES、ステップS802)。これらのノードは、いずれも型が「String型」で値が「“foo”」である葉ノードであるため(ステップS803:YES、ステップS804:NO、ステップS805:YES)、全ての直接の子ノード同士の比較が完了したか否かの判定(ステップS807)がされる。
ここで、未比較の直接の子ノードが残っているため、「中間e」の直接の子ノードである「1.23」と「中間b」の直接の子ノードである「1.23」とが比較対象ノードとして抽出される(ステップS807:NO、ステップS802)。これらのノードは、いずれも型が「Double型」で値が「1.23」である葉ノードであり、この比較で全ての直接の子ノードの比較が完了するため(ステップS803:YES、ステップS804:NO、ステップS805:YES、ステップS807:YES)、等価性判定部16は、「中間e」と「中間b」とは「等価である」と判定する(ステップS809)。その後、「等価である」との等価性判定結果を受けて(ステップS704:YES)、識別ID割当部17が、「中間e」に対して「中間b」と同一の識別ID(「0」)を割り当て、識別ID登録部18が、当該識別IDを識別ID記憶部14に登録する(ステップS705)。
続いて、出現回数設定処理(ステップS510)が実行される。出現回数記憶部19には、「中間e」と同一の識別IDを持つ「中間b」が記憶されているため、既登録判定部20は、等価なノードが出現回数記憶部19に記憶されていると判定し、「中間b」の出現回数をインクリメントする。これにより、「中間b」の出現回数は「2」となる。その後、「987」、「中間f」の順に、各ノードについて上述と同様の処理がされる。
続いて、「中間d」について、識別ID割当処理(ステップS509)がされる。識別ID記憶部14には、「中間d」と同一のハッシュ値を持つ「中間a」が記憶されているため、等価性判定部16により、等価性判定処理が実行される(ステップS701:YES、ステップS703)。「中間d」と「中間a」は直接の子ノードの個数がいずれも「2」と一致するため、比較対象ノードとして各中間ノードの位置を基準とする相対位置が等しい直接の子ノード(「中間b」と「中間e」)が抽出される(ステップS801:YES、ステップS802)。これらのノードは、いずれも型が「オブジェクト型」の中間ノードであるため(ステップS803:YES、ステップS804:YES)、識別IDによる比較がされる(ステップS806)。
ここで、識別ID記憶部14には、「中間d」及び「中間a」について同一の識別IDが記憶されているため、等価性判定部16は、「中間d」と「中間a」とは、識別IDが同一であると判定する(ステップS806:YES)。その後、「中間c」と「中間f」についても上述と同様の処理がされ、全ての直接の子ノードの比較が完了した時点で、「中間d」と「中間a」とは「等価である」と判定される(ステップS807:YES、ステップS809)。その後、識別ID割当部17が、「中間d」に対して「中間a」と同一の識別ID(「2」)を割り当て、識別ID登録部18が、当該識別IDを識別ID記憶部14に登録する(ステップS705)。
続いて、出現回数設定処理(ステップS510)が実行される。出現回数記憶部19には、「中間d」と同一の識別IDを持つ「中間a」が記憶されているため、既登録判定部20は、等価なノードが出現回数記憶部19に記憶されていると判定し、「中間a」の出現回数をインクリメントする。これにより、「中間a」の出現回数は「2」となる。
その後、「“bar”」、「456」、「中間g」の順に処理がされる。ここで、「中間g」については、同一のハッシュ値を持つ中間ノードである「中間b」及び「中間e」が識別ID記憶部14に記憶されているため、等価性判定処理が実行される(ステップS701:YES、ステップS703)。等価性判定処理において、直接の子ノードの個数は一致すると判定される(ステップS801:YES)。続いて、比較対象ノード(「“foo”」と「“bar”」)の型(String型)は一致し、いずれも葉ノードであるため、値が同一か否かの判定がされるが、値が異なるため、「等価でない」と判定される(ステップS802、ステップS803:YES、ステップS804:NO、ステップS805:NO、ステップS808)。
木構造巡回部12は、「中間g」の処理が完了した後に、根ノードに移動する。その後、未巡回の直接の子ノードがなく、現在ノードが根ノードであることから、部分木判定装置10は処理を完了する(ステップS503:NO、ステップS508:YES)。
次に、図11を用いて、コンピュータを部分木判定装置10として機能させるための部分木判定プログラムP10について説明する。
図11は、部分木判定方法を実行することができる部分木判定プログラムP10のモジュールを示すブロック図である。図11に示すように、部分木判定プログラムP10は、等価性判定モジュールP16を備える。上記等価性判定モジュールP16が実行されることにより実現される機能は、上述した部分木判定装置10において対応する等価性判定部16の機能と同様である。
このように構成された部分木判定プログラムP10は、図3に示す記録媒体110に記憶され、部分木判定装置10として用いられるコンピュータにより実行される。当該コンピュータは、記録媒体110が記録媒体読取部107に挿入されると、記録媒体読取部107から記録媒体110に格納された部分木判定プログラムP10にアクセス可能となり、当該部分木判定プログラムP10を実行することによって、本実施形態に係る部分木判定装置10として動作することが可能となる。
部分木判定プログラムP10は、搬送波に重畳されたコンピュータデータ信号としてネットワークを介して提供されるものであってもよい。この場合、部分木判定装置10として用いられるコンピュータは、通信制御部104によって受信した部分木判定プログラムP10を主記憶部102に格納することにより、当該部分木判定プログラムP10を実行することができる。
以上説明したように、本実施形態によれば、木構造データにおける中間ノード同士の等価性(すなわち、当該中間ノードを根ノードとする部分木同士の等価性)を判断するにあたって、当該中間ノードの直接の子ノードの値又は識別IDを用いることができる。これにより、当該中間ノードの全ての子孫ノードを再帰的に巡回し、比較する必要がなくなる。すなわち、木構造データの規模が大きい場合でも、計算量を指数関数的に増大させることなく、中間ノード同士の等価性判断を高速に行うことができ、木構造データに含まれる共通部分木を高速に検出することができる。
さらに、木構造データを深さ優先で巡回することで、下位の部分木から順に識別IDを割り当てられるようにすることができる。すなわち、中間ノード同士(例えば、「中間a」と「中間d」)の等価性判断を行う際には、既に当該中間ノードよりも下位の中間ノード(例えば、「中間b」、「中間c」、「中間e」、「中間f」)について識別IDの割当が完了していることになる。これにより、木構造データを効率よく巡回しつつ、中間ノード同士の等価性判断を高速に行うことができる。
また、木構造データに含まれる共通部分木を検出するための巡回処理において、併せて共通部分木の出現回数を計数することができるため、共通部分木の出現回数を計数するための巡回処理を別途行う必要がなくなる。これにより、木構造データの規模が大きい場合でも、計算量を指数関数的に増大させることなく、共通部分木の出現回数を効率的かつ高速に計数することができる。
以上、本発明に係る実施形態について詳細に説明した。しかし、本発明は、上記実施形態に限定されるものではない。本発明は、その要旨を逸脱しない範囲において様々な変形が可能である。
10…部分木判定装置、11…木構造構築部、12…木構造巡回部、13…ハッシュ値計算部、14…識別ID記憶部、15…ハッシュ値判定部、16…等価性判定部、17…識別ID割当部、18…識別ID登録部、19…出現回数記憶部、20…既登録判定部、21…出現回数設定部、P10…部分木判定プログラム、P16…等価性判定モジュール。

Claims (5)

  1. 値を保持する葉ノードと、葉ノード又は他の中間ノードを子ノードとして保持する中間ノードと、親ノードを持たない唯一の中間ノードである根ノードと、を備える木構造データにおける部分木を判定する部分木判定装置であって、
    前記木構造データの任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は、中間ノードに割り当てられている、該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較し、前記相対位置が等しい子ノード同士の全ての組について等価であると判定した場合には、前記2つの中間ノードは等価であると判定し、前記相対位置が等しい子ノード同士の少なくとも一組について等価でないと判定した場合には、前記2つの中間ノードは等価でないと判定する等価性判定部、
    を備える部分木判定装置。
  2. 前記木構造データの全てのノードを深さ優先で巡回する木構造巡回部と、
    前記識別IDを中間ノードに紐づけて記憶する識別ID記憶部と、
    前記木構造データの任意の中間ノードである第1中間ノードについて、該第1中間ノードと同一のハッシュ値を持つ中間ノードである第2中間ノードが前記識別ID記憶部に記憶されているか否かを判定するハッシュ値判定部と、
    前記ハッシュ値判定部が、前記第2中間ノードが前記識別ID記憶部に記憶されていると判定し、且つ、前記等価性判定部が、前記第1中間ノードと前記第2中間ノードとが等価であると判定した場合に、前記第1中間ノードに対して前記第2中間ノードの識別IDと同一の識別IDを割り当て、前記ハッシュ値判定部が、前記第2中間ノードが前記識別ID記憶部に記憶されていないと判定した場合、又は、前記等価性判定部が、前記第1中間ノードと前記第2中間ノードとが等価でないと判定した場合には、前記第1中間ノードに対して新たな識別IDを割り当てる識別ID割当部と、
    前記識別ID割当部により前記第1中間ノードに割り当てられた前記識別IDを前記第1中間ノードに紐づけて前記識別ID記憶部に登録する識別ID登録部と、を更に備え、
    前記木構造巡回部により巡回され、処理対象とされた中間ノードを前記第1中間ノードとして、前記ハッシュ値判定部、前記等価性判定部、前記識別ID割当部、及び前記識別ID登録部が各処理を行う、請求項1に記載の部分木判定装置。
  3. 前記木構造データにおける等価なノードごとに、該等価なノードの前記木構造データにおける出現回数を該等価なノードに紐づけて記憶する出現回数記憶部と、
    前記巡回部により巡回された巡回ノードと等価なノードが前記出現回数記憶部に記憶されているか否かを判定する既登録判定部と、
    前記既登録判定部が、前記等価なノードが前記出現回数記憶部に記憶されていないと判定した場合には、前記巡回ノードが初めて出現したことを示す初期値を前記巡回ノードに紐づく前記出現回数として前記出現回数記憶部に登録し、前記既登録判定部が、前記等価なノードが前記出現回数記憶部に記憶されていると判定した場合には、前記出現回数記憶部に記憶されている前記等価なノードに紐づく前記出現回数をインクリメントする出現回数設定部と、
    を更に備える、請求項2に記載の部分木判定装置。
  4. 値を保持する葉ノードと、葉ノード又は他の中間ノードを子ノードとして保持する中間ノードと、親ノードを持たない唯一の中間ノードである根ノードと、を備える木構造データにおける部分木を判定する部分木判定装置により実行される部分木判定方法であって、
    前記木構造データの任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は、中間ノードに割り当てられている、該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較し、前記相対位置が等しい子ノード同士の全ての組について等価であると判定した場合には、前記2つの中間ノードは等価であると判定し、前記相対位置が等しい子ノード同士の少なくとも一組について等価でないと判定した場合には、前記2つの中間ノードは等価でないと判定する等価性判定ステップ、
    を含む部分木判定方法。
  5. 値を保持する葉ノードと、葉ノード又は他の中間ノードを子ノードとして保持する中間ノードと、親ノードを持たない唯一の中間ノードである根ノードと、を備える木構造データにおける部分木を判定する部分木判定装置に設けられたコンピュータを、
    前記木構造データの任意の2つの中間ノードについて、各中間ノードの直接の子ノードであって各中間ノードの位置を基準とする相対位置が等しい子ノード同士を、ノードの型、葉ノードの値、又は、中間ノードに割り当てられている、該中間ノードを根ノードとする部分木の全てのノードの出現位置及び全ての葉ノードの値の組についてユニークとなる識別IDに基づいて比較し、前記相対位置が等しい子ノード同士の全ての組について等価であると判定した場合には、前記2つの中間ノードは等価であると判定し、前記相対位置が等しい子ノード同士の少なくとも一組について等価でないと判定した場合には、前記2つの中間ノードは等価でないと判定する等価性判定部、
    として機能させるための部分木判定プログラム。
JP2012164000A 2012-07-24 2012-07-24 部分木判定装置、部分木判定方法、及び部分木判定プログラム Pending JP2014026331A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012164000A JP2014026331A (ja) 2012-07-24 2012-07-24 部分木判定装置、部分木判定方法、及び部分木判定プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012164000A JP2014026331A (ja) 2012-07-24 2012-07-24 部分木判定装置、部分木判定方法、及び部分木判定プログラム

Publications (1)

Publication Number Publication Date
JP2014026331A true JP2014026331A (ja) 2014-02-06

Family

ID=50199945

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012164000A Pending JP2014026331A (ja) 2012-07-24 2012-07-24 部分木判定装置、部分木判定方法、及び部分木判定プログラム

Country Status (1)

Country Link
JP (1) JP2014026331A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200093548A (ko) * 2017-12-28 2020-08-05 드롭박스, 인크. 디프 값들의 효율적인 전파
JPWO2021220362A1 (ja) * 2020-04-27 2021-11-04

Cited By (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11475041B2 (en) 2017-12-28 2022-10-18 Dropbox, Inc. Resynchronizing metadata in a content management system
US11669544B2 (en) 2017-12-28 2023-06-06 Dropbox, Inc. Allocation and reassignment of unique identifiers for synchronization of content items
KR20200093548A (ko) * 2017-12-28 2020-08-05 드롭박스, 인크. 디프 값들의 효율적인 전파
US11500897B2 (en) 2017-12-28 2022-11-15 Dropbox, Inc. Allocation and reassignment of unique identifiers for synchronization of content items
US11308118B2 (en) 2017-12-28 2022-04-19 Dropbox, Inc. File system warnings
US11314774B2 (en) 2017-12-28 2022-04-26 Dropbox, Inc. Cursor with last observed access state
JP7068454B2 (ja) 2017-12-28 2022-05-16 ドロップボックス, インコーポレイテッド diff値の効率的な伝播
US11386116B2 (en) 2017-12-28 2022-07-12 Dropbox, Inc. Prevention of loss of unsynchronized content
KR102434243B1 (ko) * 2017-12-28 2022-08-18 드롭박스, 인크. 디프 값들의 효율적인 전파
US11423048B2 (en) 2017-12-28 2022-08-23 Dropbox, Inc. Content management client synchronization service
US11429634B2 (en) 2017-12-28 2022-08-30 Dropbox, Inc. Storage interface for synchronizing content
US11461365B2 (en) 2017-12-28 2022-10-04 Dropbox, Inc. Atomic moves with lamport clocks in a content management system
US11880384B2 (en) 2017-12-28 2024-01-23 Dropbox, Inc. Forced mount points / duplicate mounts
US11836151B2 (en) 2017-12-28 2023-12-05 Dropbox, Inc. Synchronizing symbolic links
US11755616B2 (en) 2017-12-28 2023-09-12 Dropbox, Inc. Synchronized organization directory with team member folders
US11514078B2 (en) 2017-12-28 2022-11-29 Dropbox, Inc. File journal interface for synchronizing content
US11593394B2 (en) 2017-12-28 2023-02-28 Dropbox, Inc. File system warnings application programing interface (API)
US11630841B2 (en) 2017-12-28 2023-04-18 Dropbox, Inc. Traversal rights
US11657067B2 (en) 2017-12-28 2023-05-23 Dropbox Inc. Updating a remote tree for a client synchronization service
JP2021509494A (ja) * 2017-12-28 2021-03-25 ドロップボックス, インコーポレイテッド diff値の効率的な伝播
US11704336B2 (en) 2017-12-28 2023-07-18 Dropbox, Inc. Efficient filename storage and retrieval
US11500899B2 (en) 2017-12-28 2022-11-15 Dropbox, Inc. Efficient management of client synchronization updates
US11782949B2 (en) 2017-12-28 2023-10-10 Dropbox, Inc. Violation resolution in client synchronization
JP7384280B2 (ja) 2020-04-27 2023-11-21 日本電信電話株式会社 抽出方法、抽出装置及び抽出プログラム
US11899661B2 (en) 2020-04-27 2024-02-13 Nippon Telegraph And Telephone Corporation Extraction method, extraction device, and extraction program
JPWO2021220362A1 (ja) * 2020-04-27 2021-11-04
WO2021220362A1 (ja) * 2020-04-27 2021-11-04 日本電信電話株式会社 抽出方法、抽出装置及び抽出プログラム

Similar Documents

Publication Publication Date Title
US11281793B2 (en) User permission data query method and apparatus, electronic device and medium
JP2016189214A5 (ja)
US10263850B2 (en) Network testing device for automated topology validation
US9811554B2 (en) Assisting query and querying
US9037677B2 (en) Update protocol for client-side routing information
Plantenga Inexact subgraph isomorphism in mapreduce
CN110019876B (zh) 数据查询方法、电子设备及存储介质
JP2018190450A (ja) 基数推定を介した結合パスの効率的な判定
US10002142B2 (en) Method and apparatus for generating schema of non-relational database
EP3371717A1 (en) Virtual edge of a graph database
CN108289034A (zh) 一种故障发现方法和装置
JP2018046549A (ja) ネットワーク検証
KR20110128137A (ko) 동적인 셀프 구성 오버레이들
Censor-Hillel et al. Distributed construction of purely additive spanners
US9811573B1 (en) Lineage information management in data analytics
Jain et al. Fast rumor source identification via random walks
Miller et al. Research directions for big data graph analytics
US20230040635A1 (en) Graph-based impact analysis of misconfigured or compromised cloud resources
Chen et al. The existence of mixed orthogonal arrays with four and five factors of strength two
US20180060392A1 (en) Batch data query method and apparatus
US20200334358A1 (en) Method for detecting computer virus, computing device, and storage medium
US20180300369A1 (en) Secure query interface
Busch et al. Sparse covers for planar graphs and graphs that exclude a fixed minor
JP2014026331A (ja) 部分木判定装置、部分木判定方法、及び部分木判定プログラム
CN104462322A (zh) 字符串比对方法和装置

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151116