説明

グラフ同型性判定装置、グラフ同型性判定方法、プログラム及び評価システム

【課題】2つのグラフの同型性を確実かつ短時間に判定する。
【解決手段】グラフ同型性判定装置100は、複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフの同型性を判定する。ツリー変換部10は、リンクで接続された他のノードとの接続関係に基づいて、複数のノード各々の階層及び階級をノード間で重複しないように与えることにより、各グラフの構造を、各ノードの階層及び階級に基づくツリー構造に変換する。比較判定部11は、ツリー変換部10によりツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフが同一であるか否かを判定するグラフ同型性判定装置、グラフ同型性判定方法、プログラム及び評価システムに関する。
【背景技術】
【0002】
有向グラフ、無向グラフ等のグラフ同型性問題は、2つのグラフが与えられたときに、それらが同型であるか否かを判定する問題である(例えば、非特許文献1、2参照)。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】戸田誠之助、”グラフ同型性判定問題の計算量”、信学技法、COMP2001-95、March 2002
【非特許文献2】福田和真、中森眞理雄、”グラフ同型性問題の解放における完全マッチング問題の利用の効果”、電子情報通信学会論文誌、D-I Vol.J85-D-I、No.10、pp.994-999 October 2002
【発明の概要】
【発明が解決しようとする課題】
【0004】
同型性判定問題を、多項式時間(計算理論において多項式で表される計算時間)で解けるアルゴリズムは未だに存在していない。それどころか、同型性判定問題では、計算複雑性理論において、どの程度の計算量が必要であるかも未知となっている。
【0005】
本発明は、上記実情に鑑みてなされたものであり、2つのグラフの同型性を確実かつ短時間で判定することができるグラフ同型性判定装置、グラフ同型性判定方法、プログラム及び評価システムを提供することを目的とする。
【課題を解決するための手段】
【0006】
上記目的を達成するために、本発明の第1の観点に係るグラフ同型性判定装置は、
複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフの同型性を判定するグラフ同型性判定装置であって、
前記リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて、前記複数のノード各々の階層及び階級をノード間で重複しないように与えることにより、前記各グラフの構造を、前記各ノードの階層及び階級に基づくツリー構造に変換するツリー変換部と、
前記ツリー変換部によりツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する比較判定部と、
を備える。
【0007】
この場合、前記ツリー変換部は、
前記他のノードとの接続関係に基づいて、前記各ノードの階層を設定するノード階層化部と、
前記他のノードとの接続関係を含む各ノードの状態に基づいて、前記各ノードの階級を仮に算出する処理を、前記階層の昇順及び降順に繰り返す階級算出部と、
前記各ノードの階級の変動が収束したか否かを、前記階級算出部による階級算出の終了条件として判定する収束判定部と、
同一の階層の前記ノードの階級が互いに異なるように、前記各ノードの階級を調整する階級調整部と、
を備え、
前記階級算出部による階級算出と、前記収束判定部による判定と、前記階級調整部による調整と、を同一の階層において階級が重複する前記ノードがなくなるまで繰り返す、
こととしてもよい。
【0008】
この場合、前記階級算出部は、
前記各ノードの階級を仮に算出する処理を、前記各階層で行う際に、
同一の階層における前記各ノードの階級の変動が収束するまで、その階層における前記各ノードの階級の算出を繰り返す、
こととしてもよい。
【0009】
また、前記階級算出部は、
前記他のノードとの接続関係を含む各ノードの状態を、所定の規則に従って数値化し、
数値化された前記各ノードの状態の大小関係に応じて、同一の階層におけるすべてのノードの階級を算出する、
こととしてもよい。
【0010】
この場合、前記階級算出部は、
前記ツリー構造における前記他のノードとの相対位置関係、前記リンクの向き、前記他のノードの階級を各要素とするベクトルを、前記リンクごとに生成し、
前記リンクごとに生成されたベクトルの要素を、各桁の数値として昇順に並べることにより生成される前記リンクごとのスカラー量を求め、
前記リンクごとのスカラー量を、その大きさに従ってソートして、各桁の数値として昇順に並べることにより生成されるスカラー量を前記各ノードの最終的なスコアとして求め、
前記スコアに基づいて、同一の階層のすべてのノードの階級を算出する、
ようにしてもよい。
【0011】
また、前記階級調整部は、
同一の階層における前記各ノードの階級が逆転することのないように、前記各ノードの階級を調整する、
こととしてもよい。
【0012】
また、前記ツリー変換部は、
前記各グラフのツリー構造への変換を、ルートノードを変更しながら前記各グラフのすべてのノードについて繰り返し行い、
変換された複数のツリー構造各々について、前記各ノードのレベル及びランクに基づく評価値をそれぞれ算出し、
前記評価値が最大となるツリー構造を、前記複数のツリー構造の中から選択し、
前記比較判定部は、
前記選択されたツリー構造を用いて、2つのグラフを比較する、
こととしてもよい。
【0013】
本発明の第2の観点に係るグラフ同型性判定方法は、
複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフの同型性を判定するグラフ同型性判定方法であって、
前記リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて、前記複数のノード各々の階層及び階級をノード間で重複しないように与えることにより、前記各グラフの構造を、前記各ノードの階層及び階級に基づくツリー構造に変換するツリー変換工程と、
前記ツリー変換工程においてツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する比較判定工程と、
を含む。
【0014】
本発明の第3の観点に係るプログラムは、
複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフの同型性を判定するコンピュータに実行させるプログラムであって、
前記リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて、前記複数のノード各々の階層及び階級をノード間で重複しないように与えることにより、前記各グラフの構造を、前記各ノードの階層及び階級に基づくツリー構造に変換するツリー変換手順と、
前記ツリー変換手順においてツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する比較判定手順と、
を実行させる。
【0015】
本発明の第4の観点に係る評価システムは、
グラフ化された物質の結合構造を記憶する記憶装置と、
前記記憶装置に記憶された物質の結合構造を示す2つのグラフの同型性を判定する本発明のグラフ同型性判定装置と、
前記グラフ同型性判定装置における判定結果に基づいて、前記記憶装置に記憶されたグラフを評価する評価装置と、
を備える。
【発明の効果】
【0016】
本発明によれば、他のノードとの接続関係を含む各ノードの状態に基づいて各ノードに階層及び階級を与えることにより、各グラフの構造がツリー構造に変換される。ツリー構造は、一定の秩序に従って階層化されたものであるため、ツリー構造に変換されたグラフを比較すれば、両者が同一であるか否かを確実かつ短時間に判定することができる。
【0017】
また、各グラフは、各ノードの階層及び階級がノード間で重複しないようにツリー構造に変換される。このようにすれば、ノードを1対1で比較する際のノードの組み合わせの数を最小限に留めることができる。この結果、グラフの比較判定に要する時間をさらに短縮することができる。
【0018】
以上のように、本発明によれば、2つのグラフの同型性を確実かつ短時間に判定することができる。
【図面の簡単な説明】
【0019】
【図1】本発明の実施形態に係るグラフ同型性判定装置の構成を示すブロック図である。
【図2】図2(A)及び図2(B)は、比較対象となるグラフの一例を示す図である。
【図3】ツリー構造の一例を示す図である。
【図4】図4(A)は、隣接ノードとのリンク毎のスコアのフォーマットを示す図である。図4(B)は、隣接ノードの相対位置関係に基づくスコアの要素の値を説明するための図である。図4(C)は、リンクの向きに基づくスコアの要素の値を説明するための図(その1)である。図4(D)は、リンクの向きに基づくスコアの要素の値を説明するための図(その2)である。
【図5】図5(A)は、あるノードについて求められるスコアの一例を示す図である。図5(B)は、図5(A)のノードのスコアの一例を示す図である。図5(C)は、トータルスコアの算出方法を説明するための図である。
【図6】図6(A)は、同じレベルにおける各ノードの仮ランクの設定例を示す図である。図6(B)は、図6(A)のスコアが重複するノードがある場合の各ノードの仮ランクの設定例を示す図である。
【図7】図1のグラフ同型性判定装置の動作のフローチャートである。
【図8】図7のレベルスイープ処理の詳細を示すフローチャートである。
【図9】ランクの算出過程を示す図(その1)である。
【図10】ランクの算出過程を示す図(その2)である。
【図11】ランクの算出過程を示す図(その3)である。
【図12】ランクが重複した場合の処理の一例を示す図(その1)である。
【図13】ランクが重複した場合の処理の一例を示す図(その2)である。
【図14】図1のグラフ同型性判定装置の適用例を示すブロック図である。
【図15】図15(A)は、水分子の模式図である。図15(B)は、水分子の水素結合を模したノードとリンクを示す図である。図15(C)、図15(D)は、水クラスタを模したグラフを示す図である。
【発明を実施するための形態】
【0020】
この発明の実施の形態について、図面を参照して詳細に説明する。
【0021】
図1には、本実施形態に係るグラフ同型性判定装置100の構成が示されている。このグラフ同型性判定装置100は、2つのグラフの同型性を判定する装置、すなわち、2つのグラフが同一であるか否かを判定する装置である。
【0022】
図2(A)、図2(B)には、比較されるグラフの一例として、それぞれグラフG1、G2が示されている。図2(A)及び図2(B)に示すように、グラフG1、G2は、複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される。
【0023】
グラフ同型性判定装置100は、CPU及びメモリ(いずれも不図示)を備えるコンピュータである。CPUがメモリに記憶されたプログラムを実行することにより、グラフ同型性判定装置100の各種構成要素の機能が実現される。
【0024】
図1に示すように、グラフ同型性判定装置100は、ツリー変換部10と、比較判定部11と、を備える。
【0025】
ツリー変換部10は、2つのグラフを入力する。ツリー変換部10は、グラフの各ノードに対して階層(レベル)及び階級(ランク)を付与することにより、図3に示すように、2つのグラフの構造を各ノードの階層及び階級に基づくツリー構造に変換する。本実施形態では、階層化されたツリー構造の階層をレベルと呼び、同一のレベルにおけるノードの階級をランクと呼ぶ。
【0026】
この際、ツリー変換部10は、リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて、複数のノード各々のレベル及びランクをノード間で重複しないように与える。
【0027】
比較判定部11は、ツリー変換部10によりツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する。比較判定部11は、その判定結果を出力する。この判定結果を参照すれば、入力された2つのグラフが同一であるか否かを確認することができる。
【0028】
ツリー変換部10のさらなる詳細な構成について説明する。
【0029】
図1に示すように、ツリー変換部10は、ノード階層化部20と、ランク算出部21と、収束判定部22と、ランク調整部23と、ツリー評価部24と、記憶部30と、を備える。
【0030】
ノード階層化部20は、グラフに含まれる複数のノードの中からルートノードを選択する。例えば、図3では、ノードAが、ルートノードとして選択されている。選択されるノードは任意でよい。
【0031】
ノード階層化部20は、リンクで接続された他のノードとの接続関係に基づいて、各ノードのレベルを設定する。ルートノードはレベル1となる。続いて、ノード階層化部20は、ルートノードとして選択されたノードに直接リンクされたノードをレベル2のノードとして選択する。さらに、レベル2のノードとして選択されたノードに直接リンクされたノードをレベル3のノードとして選択する。このようにして、各レベルのノードが選択される。
【0032】
例えば、図3に示す例であれば、ルートノードであるノードAとリンクを介して接続しているノードB、C、D、Eがレベル2のノードとなる。さらに、ノードB、C、D、Eにリンクを介して接続しているノードF、G、H、Iがレベル3のノードとなる。このようにして、各ノードのレベルが設定され、基本的な木構造が設定される。
【0033】
ランク算出部21は、各ノードのランク(仮ランク)を仮に算出する処理を、ツリー構造のレベルの昇順及び降順に繰り返す。
【0034】
ランク算出部21における各ノードの仮ランクは、リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて算出される。各ノードの状態は、所定の規則に従って数値化される。ランク算出部21は、数値化された各ノードの状態の大小関係に応じて、同一の階層におけるすべてのノードの階級を算出する。
【0035】
より具体的には、この各ノードの状態は、まず、スコアと呼ばれる1次元のベクトルに変換される。図4(A)に示すように、スコアの要素の数は、3又は4つである。
【0036】
要素の数が3つであるスコアは、上下のレベルに跨ったリンクにおける各ノードの状態の数値化に用いられる。
【0037】
このスコアの1番目の要素の値は、ツリー構造において隣接する他のノードの相対位置関係を示している。例えば、図4(B)に示すように、この要素の値は、ランクの算出対象となるノード(黒丸)に対して隣接するノード(白丸)が上のレベルである場合には3となり、同じレベルである場合には2となり、下のレベルである場合には1となる。また、そのノード自身のスコアでは、1番目の要素の値は0となる。
【0038】
続いて、このスコアの2番目の要素は、リンクの向きを表している。図4(C)に示すように、この要素の値は、リンクが上のレベルから下のレベルに向いている場合には1となり、リンクが下のレベルから上のレベルに向いている場合には0となる。また、そのノード自身のスコアでは、2番目の要素の値は0となる。
【0039】
続いて、このスコアの3番目の要素は、隣接するノードのランクを示している。ここで、この要素の値は、ランクが小さければ小さいほど大きくなっている。また、各ノード自身のスコアでは、3番目の要素の値は、そのノード自身のランクに基づく値となる。
【0040】
続いて、要素の数が4つであるスコアは、同一のレベルのノード同士のリンクを対象として用いられる。
【0041】
このスコアの1番目の要素の値は、隣接するノードの相対位置関係を表し、2番目の要素がリンクの向きを表しているのは、上述のスコアと同じである。ただし、図4(D)に示すように、2番目の要素の値は、リンクがランクの算出対象に向いているときには1となり、反対を向いているときには0となる。
【0042】
さらに、このスコアの3番目の要素の値はリンクの始点のランクであり、このスコアの4番目の要素の値はリンクの終点のランクである。
【0043】
ランク算出部21は、ランクの算出対象である各ノードについて、リンク毎に、上記スコアを求める。
【0044】
例えば、図5(A)に示すように、あるノード(仮ランクm)について、3つの隣接ノード(それぞれの仮ランクn1、n2、n3)がそれぞれ接続しているものとする。この場合、図5(B)に示すように、各リンクについて、(3、1、n1)、(2、1、n2、m)、(1、1、n3)という3つのスコアが求められ、そのノード自身のスコアとして、(0、0、m)が求められる。なお、(2、1、n2、m)は、(2、0、m、n2)であってもよい。
【0045】
ランク算出部21は、各ノードについて求められたスコアを、スカラー量に変換する。スカラー量は、例えば、各要素の値を各桁の値として昇順に並べることにより生成される。例えば、最上位の数桁の値を1番目の要素の値とし、続く数桁の値を2番目の要素の値とし、続く数桁の値を3番目の要素の値とし、最下位の数桁の値を4番目の要素の値とすることにより、1つのスカラー量が生成される。
【0046】
例えば、図5(B)に示すように、(3、1、n1)は、30010000000000000(n1)という数値に変換される。また、(2、1、n2、m)は、200100000(n2)0000000(m)という数値に変換される。さらに、(1、1、n3)は、10010000000000000(n3)という数値に変換される。さらに、(0、0、m)は、00000000000000000(m)という数値に変換される。n1、n2、n3、mには、その数値に対応する値が挿入される。
【0047】
続いて、ランク算出部21は、スカラー量に変換されたスコアを大きさに従ってソートして、各桁の数値として昇順に並べることにより生成されるスカラー量を、トータルスコアとして求める。例えば、図5(C)に示すように、スコア1>スコア2>スコア3>スコア4である場合には、ランク算出部21は、大きい桁の方からスコア1→スコア2→スコア3→スコア4の順に並べ、それらを合成することにより形成される数値をトータルスコアとして算出する。
【0048】
ランク算出部21は、同一レベルの全てのルートについてこのトータルスコアを求め、同じレベルにある全てのノードのトータルスコアを比較することにより、そのレベルにおける各ノードの仮ランクを算出する。
【0049】
このとき、ランク算出部21は、各ノードのランクを仮に算出する処理を、各レベルで行う際に、同一のレベルにおける各ノードの仮ランクの変動が収束するまで、そのレベルにおける各ノードのランクの算出を繰り返す。
【0050】
例えば、図6(A)に示すように、同じレベルにノードA乃至Dがあり、それぞれのトータルスコアSA乃至SDが算出され、それぞれのトータルスコアにSA>SB>SC>SDの関係があったとする。この場合、ランク算出部21は、ノードAの仮ランクをランク1とし、ノードBの仮ランクをランク2とし、ノードCの仮ランクをランク3とし、ノードDの仮ランクをランク4とする。
【0051】
なお、場合によっては、同一のレベルにスコアが重複するノードが存在することがある。例えば、図6(B)に示すように、それぞれのスコアの関係がSA>SB=SC>SDとなっている場合、ランク算出部21は、ノードAの仮ランクをランク1とし、ノードBの仮ランクをランク2とし、ノードCの仮ランクをランク2とし、ノードDの仮ランクをランク4とする。ノードB、Cの仮ランクは、後述するように、調整される可能性があるため、ノードDの仮ランクは、その調整の余裕を確保すべく、3ではなく4に設定される。
【0052】
ランク算出部21は、このようなノードの仮ランクの算出を、最上位レベルから降順に最下位のレベルまで行った後、今度は、最下位のレベルから昇順に最上位のレベルまで行い、各レベルの各ノードの仮ランクの算出を繰り返す。
【0053】
収束判定部22は、ランク算出部21によって算出された各ノードの仮ランクの変動が収束したか否かを、ランク算出部21による階級算出の終了条件として判定する。収束判定部22で各ノードの仮ランクが収束したと判定されたときの各ノードの仮ランクが最終的なそのノードのランクとなる。
【0054】
ランク調整部23は、同一の階層の各ノードの仮ランクが互いに異なるように、各ノードの仮ランクを調整する。ランク調整部23は、同一のレベルにおける各ノードの仮ランクが逆転することのないように、各ノードの仮ランクを調整する。例えば、図6(B)に示すように、ノードC、Dの仮ランクが重複している場合には、一方のノードCの仮ランクが2から3に変更される。なお、この場合、ノードBの仮ランクを2から3に変更するようにしてもよい。
【0055】
ルート変換部10は、ランク算出部21による仮ランクの算出と、収束判定部22による判定と、ランク調整部23による調整と、を同一のレベルにおいてランクが重複するノードがなくなるまで繰り返す。これにより、各グラフを、あるノードをルートノードとして設定したときのツリー構造に変換することができる。ルート変換部10は、上述のようなツリー構造への変換を、ルートノードを変更しながら繰り返し行う。このようにして、ルート変換部10は、各グラフを、M(ノードの数)通りのツリー構造に変換する。
【0056】
ツリー評価部24は、M通りのツリー構造各々について、レベル及び仮ランクに基づく評価値を算出し、その評価値が最大となるツリー構造を、M通りのツリー構造の中から選択する。より具体的には、ツリー評価部24は、各ツリー構造について、各ノードのレベルとランクとを一列に並べることにより生成される数値を算出し、例えば、その数値が一番大きいツリー構造をそのグラフのツリー構造、すなわちグラフ間の比較に用いられるツリー構造として選択する。比較判定部11には、この選択されたツリー構造が出力され、2つのグラフの比較に用いられる。
【0057】
記憶部30は、入力された2つのグラフのデータや、ノード階層化部20、ランク算出部21、ランク調整部23で生成されるデータを必要に応じて記憶する。
【0058】
次に、本実施形態に係るグラフ同型性判定装置100の動作について説明する。
【0059】
図7、図8には、グラフ同型性判定装置100の動作のフローチャートが示されている。グラフ同型性判定装置100では、2つのグラフが入力され、その情報が記憶部30に記憶される。続いて、グラフ同型性判定装置100は、まず一方のグラフについて、図7、図8に示す処理を開始する。
【0060】
図7に示すように、まず、ノード階層化部20は、ルートノードを決定する(ステップS1)。
【0061】
この場合、ルートノードとして選択されるノードは、まだ選択されていないもののうち、任意のものでよい。ここでは、すでに選択されたノードはないので、すべてのノードの中から任意のノードが選択される。
【0062】
続いて、ノード階層化部20は、他のノードとの接続関係に基づいて、各ノードのレベルを設定する(ステップS2)。これにより、このグラフのツリー構造の全体のレベル数(階層数)Nmaxが明らかになる。各ノードのレベル及びレベル数Nmaxは、記憶部30に記憶される。
【0063】
続いて、ランク算出部21は、各ノードに仮ランクを付与し、付与した仮ランクの値を記憶部30に記憶する(ステップS3)。付与される仮ランクは、任意の数値でよいが、本実施形態では、全てのノードに仮ランクとして0を付与するものとする。
【0064】
続いて、ランク算出部21は、レベルカウンタNを1に初期化し、極変数pを1に初期化する(ステップS4)。この極変数pは、+1か−1かのいずれかの値をとる。
【0065】
続いて、ランク算出部21は、レベルカウンタNにpを加算する(ステップS5)。ここで、p=+1なので、レベルカウンタNは1インクリメントされる。
【0066】
続いて、ランク算出部21は、レベルNのレベルスイープ処理のサブルーチンを実行する(ステップS6)。
【0067】
図8には、このレベルスイープ処理の詳細が示されている。図8に示すように、ランク算出部21は、記憶部30から、レベルNの各ノードの情報を読み出す(ステップS21)。
【0068】
続いて、ランク算出部21は、読み出した各ノードの情報から、各ノードの仮ランクを抽出して、記憶部30の別の領域に記憶する(ステップS22)。
【0069】
続いて、ランク算出部21は、各ノードのリンクごとのスコアを算出する(ステップS23)。例えば、ここで、図5(B)に示すように、スコア1乃至3(ベクトル)が算出される。
【0070】
続いて、ランク算出部21は、各ノードのスコアをスカラー変換する(ステップS24)。例えば、ここで、図5(B)に示すように、スコア1乃至3がスカラー量に変換される。
【0071】
続いて、ランク算出部21は、スカラー変換された各スコアを、その大きさに従ってソートして、その順番にスコアを合成することにより、トータルスコアを算出する(ステップS25)。例えば、ここで、図5(C)に示すように、スコア1、2、3が昇順にソートされ、その順番に合成されてトータルスコアが算出される。
【0072】
続いて、ランク算出部21は、レベルNの各ノードのトータルスコアの大小関係に基づいて、レベルNの各ノードの仮ランクを設定する(ステップS26)。例えば、ここで、図6(A)に示すように、トータルスコアSA、SB、SC、SDの大小関係に基づいて、ノードA、B、C、Dの仮ランク1、2、3、4が設定される。
【0073】
続いて、ランク算出部21は、上記ステップS22で記憶部30に記憶された仮ランクと、上記ステップS26で算出された仮ランクとを比較して、それらに変化が無いか否かを判定する(ステップS27)。
【0074】
この判定が否定されると(ステップS27;No)、ランク算出部21は、ステップS22に戻る。ランク算出部21は、記憶部30に記憶された各ノードの仮ランクを、ステップS26で算出された仮ランクに更新する(ステップS22)。以降、ステップS27における判定が肯定されるまで(ステップS27;Yes)、ステップS22→S23→S24→S25→S26→S27が繰り返される。
【0075】
ステップS22で記憶部30に記憶され更新された仮ランクと、上記ステップS26で算出された仮ランクとを比較して、それらに変化がないと判定されると(ステップS27;Yes)、ランク算出部21は、レベルスイープ処理を終了する。
【0076】
続いて、ランク算出部21は、ランクを算出するレベルが最下層まで到達し、レベルカウンタNがNmax又は1であるか否かを判定する(ステップS7)。この判定が否定されると(ステップS7;No)、ランク算出部21は、ステップS5に戻る。
【0077】
以降、ランクの算出対象となるレベルが最下層まで到達しない限り(ステップS7;No)、ランク算出部21は、ステップS5→S6→S7を繰り返し、各レベルでのレベルスイープ処理を行う。
【0078】
ランクの算出対象となるレベルが最下層になり、レベルカウンタNがNmaxになると(ステップS7;Yes)、ランク算出部21は、各ノードの仮ランクを記憶部30に記憶する(ステップS8)。ここで、ランク算出部21は、上記ステップS3で記憶された仮ランクが記憶された領域とは、別の領域に仮ランクを記憶する。
【0079】
続いて、ランク算出部21は、極変数pに−1を乗算する(ステップS9)。ここで、p=1であったので、乗算の結果、極変数pは−1となる。
【0080】
続いて、収束判定部22は、前回記憶した仮ランク(ステップS3で記憶した仮ランク)と、今回記憶した仮ランク(ステップS8で記憶した仮ランク)とに差異がなく、各ノードの仮ランクの変動が収束しているか否かを判定する(ステップS10)。この判定が否定されると(ステップS10;No)、ツリー変換部10は、ステップS5に戻る。ここでは、ステップS3で記憶された仮ランクはすべて0であり、両者が一致することはないので、判定は否定され(ステップS10;No)、ツリー変換部10は、ステップS5に戻る。
【0081】
続いて、ランク算出部21は、レベルカウンタNにpを加算する(ステップS5)。ここで、p=−1となっているので、実際には、レベルカウンタNは1デクリメントされる。
【0082】
続いて、ランク算出部21は、レベルNのレベルスイープ処理のサブルーチンを実行する(ステップS6)。なお、このレベルスイープ処理については、すでに説明したので、詳細な説明を省略する(図8参照)。
【0083】
続いて、ランク算出部21は、レベルカウンタNがNmax又は1であるか否かを判定する(ステップS7)。この判定が否定されれば(ステップS7;No)、ランク算出部21は、ステップS5に戻る。
【0084】
ランクの算出対象となるレベルが最上位レベルまで到達しない限り、すなわちレベルカウンタNが1とならない限り(ステップS7;No)、ランク算出部20は、ステップS5→S6→S7を繰り返し、各レベルでのレベルスイープ処理を行う。
【0085】
ランクの算出対象となる階層が最上位レベルになると(ステップS7;Yes)、ランク算出部21は、各ノードの仮ランクを記憶部30に記憶する(ステップS8)。この際に、上記ステップS8で記憶された仮ランクとは、別の領域に仮ランクが記憶される。
【0086】
続いて、ランク算出部21は、極変数pに−1を乗算する(ステップS9)。ここで、p=−1であったので、乗算の結果、極変数pは1となる。
【0087】
続いて、収束判定部22は、前回のステップS8で記憶された仮ランクと、今回のステップS8で記憶された仮ランクとに差異がないか、すなわち、各ノードの仮ランクの変動が収束しているか否かを判定する(ステップS10)。この判定が否定されれば(ステップS10;No)、ツリー変換部10は、ステップS5に戻る。
【0088】
以降、各ノードの仮ランクの変動が収束していると判定されるまで(ステップS10;Yes)、ステップS5からステップS10の処理が繰り返される。
【0089】
本実施形態では、このようにして、ランク算出部21が、レベルの降順及び昇順に、各レベルのノードのランク算出を繰り返すことにより、各ノードの仮ランクを収束させる。
【0090】
仮ランクの変動が収束すると(ステップS10;Yes)、ランク調整部23は、同じレベルに仮ランクが重複するノードが無いか否かを判定する(ステップS11)。ランクが重複するノードが有る場合(ステップS11;No)、ランク調整部23は、そのレベルのノードの仮ランクを再調整する(ステップS12)。具体的には、ランク調整部23は、同一のレベルのノードの仮ランクが互いに異なるように、各ノードの仮ランクを調整する。
【0091】
例えば、図6(B)に示す例では、同じレベルに仮ランクが重複するノードB、Cが存在する。この場合には、ランク調整部23は、例えば、ノードCをランク3に変更すれば、同一の階層のノードの仮ランクが互いに異なるように、各ノードの仮ランクを調整することができる。
【0092】
なお、SB=SCであるため、ノードBをランク3とし、ノードCをランク2としてもよい。すなわち、いずれのノードの仮ランクを変更してもよい。
【0093】
ただし、ノードB、Cの仮ランクは、ノードB、Cよりもトータルスコアの高いノードAのランク1と、ノードB、Cよりもトータルスコアの低いノードDのランク4との間とする必要がある。すなわち、本実施形態では、ランク調整部23は、同一のレベルにおける各ノードの仮ランクが逆転することのないように、各ノードの仮ランクを調整する。
【0094】
ステップS12実行後、ツリー変換部10は、ステップS5に戻る。以降ステップS4〜ステップS11が繰り返される。そして、再び、収束判定部22が、記憶した仮ランクの変化が無いと判定されると(ステップS10;Yes)、ランク調整部23は、同じレベルに仮ランクが重複するノードが無いか否かを判定する(ステップS11)。仮ランクが重複するノードが有る場合(ステップS11;No)、前述のように、仮ランクの再調整が行われ(ステップS12)、仮ランク算出及び収束判定(ステップS5〜S11)が繰り返される。
【0095】
同じレベルにランクが重複するノードが無くなると(ステップS11;Yes)、収束判定部22は、各ノードの仮ランクを最終的なランクとして記憶部30に記憶する(ステップS13)。
【0096】
続いて、ツリー変換部10は、グラフを、M通りのツリー構造に変換したか否かを判定する(ステップS14)。ここでは、まだ1通りのツリー構造にしか変換されていないので判定は否定され(ステップS14;No)、ツリー変換部10は、ステップS1に戻る。
【0097】
以降、ステップS1からステップS14までの処理が繰り返され、各グラフが、各ノードをそれぞれルートノードとするM通りのツリー構造に変換される。M通りのツリー構造に変換されたと判定されると(ステップS14;Yes)、ツリー評価部24は、M通りのツリー構造の中から、最適な1つのツリー構造を選択する(ステップS15)。
【0098】
より具体的には、ツリー評価部24は、各ツリー構造について、例えば、次のような、レベルとランクの組み合わせから成るベクトルを各ノードについて生成する。
(レベル1、ランク*)、(レベル2、ランク*)、(レベル3、ランク*)、・・・
【0099】
続いて、ツリー評価部24は、各ノードについて生成されたベクトルを、例えばレベル順、ランク順に1列に並べた結合行列を生成し、その結合行列を、上述と同様にして、スカラー量に変換する。さらに、ツリー評価部24は、そのスカラー量が最大となるツリー構造を、最終的なツリー構造として選択する(ステップS16)。
【0100】
続いて、ツリー変換部10は、各ノードのレベル及びランクを含むツリー構造情報を出力する(ステップS16)。ステップS16終了後、ツリー変換部10は、処理を終了する。
【0101】
上述のように、ステップS5〜S10の繰り返しにおいて、例えば、図9に示すように、まず、レベル2のノードの仮ランクが設定される。この場合、レベル2の2つのノードは、互いに他のノードの接続形態が同一であるため、仮ランクは同じ1となる。そして、続いて、図10に示すように、レベル3のノードの仮ランク(1と2)が設定され、レベル4のノードの仮ランク1が設定される。
【0102】
さらに、ステップS5〜S10の繰り返しにおいて、レベル3のノードの仮ランク(1と2)が設定され、続いてレベル2のノードの仮ランクが設定される。ここで、図11に示すように、レベル2の右側のノードの仮ランクは、1から2に変更される。このように、仮ランクの算出を、レベルの昇順及び降順に繰り返すことにより、各ノードの仮ランクが収束していく。この処理は、ツリースイープ処理ともいうべきものである。
【0103】
また、図12に示すように、例えばレベル2のノードの中に、仮ランク1で重複しているノードがある場合、ランク調整部23は、図13に示すように、一方のノードの仮ランクを、2に変更することにより仮ランクを調整する。この後、再び、仮ランクの算出が、レベルの昇順及び降順に繰り返される。
【0104】
ツリー変換部10は、入力した2つのグラフ各々について、ステップS1乃至S16の処理を実行する。これにより、ツリー変換部10から2つのグラフ各々に対応するツリー構造情報が出力される。各グラフについて出力されるツリー構造情報は1つだけである。
【0105】
比較判定部11は、入力した2つのツリー構造情報に基づいて、2つのグラフが一致するか否かを判定する。個々のツリー構造は、レベルやランクの重複するノードが存在しないので、比較するノードの組み合わせの数を少なくすることができる。
【0106】
以上詳細に説明したように、本実施形態によれば、他のノードとの接続関係に基づいて各ノードにレベル及びランクを与えることにより、各グラフがツリー構造に変換される。各グラフのツリー構造は、一定の秩序に従って階層化されているため、両者が同一であるか否かを確実かつ短時間に判定することができる。
【0107】
また、このツリー構造は、各ノードのレベル及びランクがノード間で重複しないように生成される。このようにすれば、ノードを1対1で比較する際のノードの組み合わせの数を最小限に留めることができる。この結果、ツリー構造の比較判定に要する時間を短縮することができる。
【0108】
以上のように、本実施形態によれば、2つのグラフの同型性を確実かつ短時間に判定することができる。
【0109】
また、本実施形態によれば、比較対象となるツリー構造を各グラフにつき1つずつとすることができるので、同型性の判定に要する時間を短縮することができる。
【0110】
なお、これまで、グラフ理論における同型性判定問題の最悪計算量O(n)は、Babaiらによると、次式のようになる。
【0111】
【数1】


【0112】
しかしながら、本実施形態に係るグラフ同型性判定装置100を用いれば、最悪計算量O(n)は、次式のようになる。
【0113】
【数2】


【0114】
この最悪計算量O(n)は、ツリースイープの計算量n・log(n)に、すべてのノードのランクが重複しなくなるまでの回数と、最悪の場合に生成されなければならないツリーの数を考慮して求められたものである。
【0115】
上記式(2)の最悪計算量O(n)は、上記式(1)の最悪時間量O(n)よりも少ない。したがって、本実施形態に係るグラフ同型性判定装置100によれば、より短時間に、グラフの同型性を判定することができる。
【0116】
ところで、ノード数が14であるグラフの一致不一致をコンピュータに判定させた場合、グラフをそのまま比較した場合には180分を要したのに対し、本実施形態に係るグラフ同型性判定装置100にてツリー構造に変換されたグラフを比較したときに要した時間は、3秒であった。
【0117】
なお、本実施形態に係るグラフ同型性判定装置100は、閉路を有するグラフであってもよい。また、このグラフ同型性判定装置100は、有向グラフであっても、無向グラフであっても、適用が可能である。無向グラフの場合には、ノード間に、逆向きの2つのリンクが接続されているものとみなして、スコアを求めるようにすればよい。
【0118】
本実施形態に係るグラフ同型性判定装置100は、様々な用途に適用可能である。
【0119】
例えば、グラフ同型性判定装置100を、図14に示すような、データベースシステム200に適用可能である。図14に示すように、データベースシステム200は、化合物データベース40と、管理部41と、を備える。データベース40には、化学構造式をグラフ化した多数の化合物データが登録されている。管理部41は、データベース40に登録された化合物の化学構造式のグラフを評価し、必要であればデータの追加登録や削除を行う。
【0120】
グラフ同型性判定装置100は、化合物データベース40に登録された化合物の2つのグラフを入力し、2つのグラフが同一であるか否かを判定し、その判定結果を、管理部41に出力する。管理部41は、2つのグラフが一致する場合に、例えば、一方のグラフを削除するか、2つのグラフを1つのグラフに統合する。このようにすれば、化合物データベース40に登録されたデータを整理することができる。
【0121】
また、グラフ同型性判定装置100を水クラスタの解析に適用することも可能である。水クラスタは、例えば図15(A)に示すように、水分子50が水素結合で結合されることにより形成される。この水クラスタは、図15(B)に示すように、水分子50と水素結合のリンク51として表現することができる。
【0122】
この水クラスタは、様々な形態をとる。例えば、水クラスタは、図15(C)に示すような構造もとり得るし、図15(D)に示すように状態も取り得る。
【0123】
本実施形態に係るグラフ同型性判定装置100は、モンテカルロシミュレーションにより発生する数億個の水クラスタの1つ1つが、同一の構造を有するものであるか否かを判定し、同じ構造を有する水クラスタの分布数を求めるのに用いることができる。これにより、ある特定の条件における、図15(C)の構造を有する水クラスタの分布数や、図15(D)の構造を有する水クラスタの分布数などを調べることができる。
【0124】
このように、本実施形態に係るグラフ同型性判定装置100は、物質の結合構造の解析評価に好適である。このグラフ同型性判定装置100は、記憶装置に記憶された2つのグラフを比較する。管理部41は、グラフ同型性判定装置における判定結果に基づいて、記憶装置に記憶されたグラフを評価する。
【0125】
また、本実施形態に係るグラフ同型性判定装置は、グラフとして表現されるものであれば、同型性の判定が可能である。例えば、人と人との間に形成される人的ネットワークの解析にも適用することが可能である。
【0126】
なお、上記実施形態において、実行されるプログラムは、フレキシブルディスク、CD−ROM(Compact Disk Read-Only Memory)、DVD(Digital Versatile Disk)、MO(Magneto-Optical Disk)等のコンピュータ読み取り可能な記録媒体に格納して配布し、そのプログラムをインストールすることにより、上述の処理を実行するシステムを構成することとしてもよい。
【0127】
また、プログラムをインターネット等の通信ネットワーク上の所定のサーバ装置が有するディスク装置等に格納しておき、例えば、搬送波に重畳させて、ダウンロード等するようにしてもよい。
【0128】
また、上述の機能を、OS(Operating System)が分担して実現する場合又はOSとアプリケーションとの協働により実現する場合等には、OS以外の部分のみを媒体に格納して配布してもよく、また、ダウンロード等してもよい。
【0129】
なお、本発明は、上記実施の形態及び図面によって限定されるものではない。本発明の要旨を変更しない範囲で実施の形態及び図面に変更を加えることができるのはもちろんである。
【産業上の利用可能性】
【0130】
本発明は、例えば、CASレジストリシステム等の化学データベースに多数登録された化学物質や、水クラスタ等の物質の結合構造を示す2つのグラフの同定に有用である。この他、本発明は、人的ネットワークなど、グラフとして表現可能なあらゆるものの同定に有用である。
【符号の説明】
【0131】
10 ツリー変換部
11 比較判定部
20 ノード階層化部
21 ランク算出部
22 収束判定部
24 ツリー評価部
23 ランク調整部
30 記憶部
40 データベース
41 管理部
50 水分子
51 リンク
100 グラフ同型性判定装置
200 データベースシステム

【特許請求の範囲】
【請求項1】
複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフの同型性を判定するグラフ同型性判定装置であって、
前記リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて、前記複数のノード各々の階層及び階級をノード間で重複しないように与えることにより、前記各グラフの構造を、前記各ノードの階層及び階級に基づくツリー構造に変換するツリー変換部と、
前記ツリー変換部によりツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する比較判定部と、
を備えるグラフ同型性判定装置。
【請求項2】
前記ツリー変換部は、
前記他のノードとの接続関係に基づいて、前記各ノードの階層を設定するノード階層化部と、
前記他のノードとの接続関係を含む各ノードの状態に基づいて、前記各ノードの階級を仮に算出する処理を、前記階層の昇順及び降順に繰り返す階級算出部と、
前記各ノードの階級の変動が収束したか否かを、前記階級算出部による階級算出の終了条件として判定する収束判定部と、
同一の階層の前記ノードの階級が互いに異なるように、前記各ノードの階級を調整する階級調整部と、
を備え、
前記階級算出部による階級算出と、前記収束判定部による判定と、前記階級調整部による調整と、を同一の階層において階級が重複する前記ノードがなくなるまで繰り返す、
ことを特徴とする請求項1に記載のグラフ同型性判定装置。
【請求項3】
前記階級算出部は、
前記各ノードの階級を仮に算出する処理を、前記各階層で行う際に、
同一の階層における前記各ノードの階級の変動が収束するまで、その階層における前記各ノードの階級の算出を繰り返す、
ことを特徴とする請求項2に記載のグラフ同型性判定装置。
【請求項4】
前記階級算出部は、
前記他のノードとの接続関係を含む各ノードの状態を、所定の規則に従って数値化し、
数値化された前記各ノードの状態の大小関係に応じて、同一の階層におけるすべてのノードの階級を算出する、
ことを特徴とする請求項2又は3に記載のグラフ同型性判定装置。
【請求項5】
前記階級算出部は、
前記ツリー構造における前記他のノードとの相対位置関係、前記リンクの向き、前記他のノードの階級を各要素とするベクトルを、前記リンクごとに生成し、
前記リンクごとに生成されたベクトルの要素を、各桁の数値として昇順に並べることにより生成される前記リンクごとのスカラー量を求め、
前記リンクごとのスカラー量を、その大きさに従ってソートして、各桁の数値として昇順に並べることにより生成されるスカラー量を前記各ノードの最終的なスコアとして求め、
前記スコアに基づいて、同一の階層のすべてのノードの階級を算出する、
ことを特徴とする請求項4に記載のグラフ同型性判定装置。
【請求項6】
前記階級調整部は、
同一の階層における前記各ノードの階級が逆転することのないように、前記各ノードの階級を調整する、
ことを特徴とする請求項2乃至4のいずれか一項に記載のグラフ同型性判定装置。
【請求項7】
前記ツリー変換部は、
前記各グラフのツリー構造への変換を、ルートノードを変更しながら前記各グラフのすべてのノードについて繰り返し行い、
変換された複数のツリー構造各々について、前記各ノードのレベル及びランクに基づく評価値をそれぞれ算出し、
前記評価値が最大となるツリー構造を、前記複数のツリー構造の中から選択し、
前記比較判定部は、
前記選択されたツリー構造を用いて、2つのグラフを比較する、
ことを特徴とする請求項1乃至6のいずれか一項に記載のグラフ同型性判定装置。
【請求項8】
複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフの同型性を判定するグラフ同型性判定方法であって、
前記リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて、前記複数のノード各々の階層及び階級をノード間で重複しないように与えることにより、前記各グラフの構造を、前記各ノードの階層及び階級に基づくツリー構造に変換するツリー変換工程と、
前記ツリー変換工程においてツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する比較判定工程と、
を含むグラフ同型性判定方法。
【請求項9】
複数のノードと、ノード間を結ぶリンクとの集合でそれぞれ構成される2つのグラフの同型性を判定するコンピュータに実行させるプログラムであって、
前記リンクで接続された他のノードとの接続関係を含む各ノードの状態に基づいて、前記複数のノード各々の階層及び階級をノード間で重複しないように与えることにより、前記各グラフの構造を、前記各ノードの階層及び階級に基づくツリー構造に変換するツリー変換手順と、
前記ツリー変換手順においてツリー構造に変換された2つのグラフを比較することにより、両者が一致するか否かを判定する比較判定手順と、
を実行させるプログラム。
【請求項10】
グラフ化された物質の結合構造を記憶する記憶装置と、
前記記憶装置に記憶された物質の結合構造を示す2つのグラフの同型性を判定する請求項1乃至7のいずれか一項に記載のグラフ同型性判定装置と、
前記グラフ同型性判定装置における判定結果に基づいて、前記記憶装置に記憶されたグラフを評価する評価装置と、
を備える評価システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2012−8983(P2012−8983A)
【公開日】平成24年1月12日(2012.1.12)
【国際特許分類】
【出願番号】特願2010−146919(P2010−146919)
【出願日】平成22年6月28日(2010.6.28)
【出願人】(504136568)国立大学法人広島大学 (924)
【Fターム(参考)】