ラベル付きグラフのグラフ同型問題


11

ラベルのないグラフの場合、グラフ同型問題は、実際に非常にうまく機能するいくつかのアルゴリズムによって対処できます。つまり、最悪の場合の実行時間は指数関数的ですが、通常は多項式の実行時間があります。

ラベル付きグラフの場合も同様の状況になることを期待していました。しかし、「実用的に効率的な」アルゴリズムを提案するリファレンスを見つけるのは本当に難しいです。

備考:ここで、同型はラベルを保持する必要があります。つまり、2つの有限オートマトン/プロセス代数項間の同型は、オートマトン/項が本質的に「ノードの名前変更まで等しい」ことを意味します。

私が見つけた唯一の参照は、ラベル付きグラフの同型問題を多項式で通常のグラフの同型問題に減らすことができると述べているWikipediaの参照でした。ただし、基礎となる論文は、実用的なアルゴリズムよりも複雑性理論についてです。

何かが足りない、または2つのラベル付きグラフが同型であるかどうかを判断するための効率的な「ヒューリスティックな」アルゴリズムがないのは実際の場合ですか?

ヒントや参照は素晴らしいでしょう。


3
ウィキペディアの記事や見つけた論文を参照していただければ、問題を解決できます。
バブー2014

1
「ラベルを保持する」同型とはどういう意味ですか?オートマトンのコンテキストでは、頂点ラベルは異なります。したがって、同型は、ソース内の異なるラベルを持つ2つの頂点も画像内で異なるラベルを持つ必要があるという意味で、自明に「ラベルを保持」します。この問題は、通常のグラフ同型問題と同じです。同型写像が同じラベルを持つ頂点にマップする必要があることを意味する場合、頂点ラベルが常に異なる場合、アルゴリズムは簡単です。ラベルのアイデンティティマップが同型写像であることを確認するだけです。
David Richerby 14

複数の頂点が同じラベルを持つ可能性があり、頂点の画像が元のラベルと同じラベルを持つ必要があるケースを検討する場合、これは多くの場合、カラーグラフ間の同型と呼ばれます。その場合、色をガジェットに置き換えることで、一般的なGIへの単純な削減があります。慎重に選択されたガジェットを適用してから、標準のGIアルゴリズムを使用することで、きちんとした実用的なアルゴリズムを入手できるでしょう。
David Richerby 14

ラベルの同値クラスも保持する通常の有向グラフ同型がある場合、2つのエッジラベル付き有向グラフを同型と見なすことを本当に嫌がりますか?あなたの例では、2つののFAであることを考慮すると、言語はで受け入れ及びS "別の(おそらく)しながら、実際に置換することにより、互いのちょうどhomorphicイメージですC B DSSac,bd
リック・デッカー

4
問題は簡単にGI完全です(すべてのエッジが同じラベルを持つグラフを選択するだけです)。(整数のラベルから1マップ:1構築、それはグラフ同型以下で困難であることを示すために、とで標識された各エッジの中央に追加シンボルs g s 頂点完全なグラフ(K g s g:a1,b2,c3,...)sg(s)Kg(s))エッジの矢印側の追加ノード。結果のグラフは、元のオートマトンが同型の場合に限り同型です。
Vor

回答:


5

このペーパーに興味があるかもしれません:

Aidan Hogan: 同型を保持しながら空白ノードをSkolemising。 WWW 2015:430-440

これには、RDFグラフの同型性をテストするためのアルゴリズム(Nautyに基づく)があります。これは、本質的に、固定ラベルを含む可能性のある有向ラベル付きグラフです。アルゴリズムはラベルを考慮に入れて、検索スペースを狭めます。

入力ラベル付きグラフをRDFグラフとして表すことができる場合は、関連するソフトウェアパッケージ " blabel"を使用して同型をテストできます。


4

このアルゴリズムはk次元のWeisfeiler-Lehmanアルゴリズムのカテゴリに属し、通常のグラフでは失敗することがわかりました。詳細はこちら:

http://dabacon.org/pontiff/?p=4148

元の投稿は次のとおりです。

数年前、私はまさにこの問題(ラベル付きグラフ同型)のためのシンプルで柔軟なアルゴリズムを作成しました。

私はそれを「Powerhash」と名付け、アルゴリズムを作成するには2つの洞察が必要でした。1つ目は、PageRankでも使用されるパワー反復グラフアルゴリズムです。2つ目は、電源反復の内部ステップ関数を、必要なものに置き換える機能です。これを、反復ごとに、およびノー​​ドごとに以下を実行する関数に置き換えました。

  • ノードの近傍の(前の反復からの)ハッシュをソートします
  • 連結されたソート済みハッシュをハッシュする
  • ノードのハッシュを新しく計算されたハッシュで置き換える

最初のステップでは、ノードのハッシュは直接の隣接ノードの影響を受けます。2番目のステップでは、ノードのハッシュは、ノードから2ホップ離れた近隣の影響を受けます。N番目のステップでは、ノードのハッシュはノードの周囲の近隣Nホップの影響を受けます。したがって、N = graph_radiusステップのPowerhashの実行を続けるだけで済みます。最後に、グラフの中心ノードのハッシュはグラフ全体の影響を受けます。

最終ハッシュを生成するには、最終ステップのノードハッシュを並べ替え、それらを連結します。その後、最終的なハッシュを比較して、2つのグラフが同型であるかどうかを確認できます。ラベルがある場合は、各ノードについて計算する内部ハッシュに(最初の反復で)ラベルを追加します。

これについて詳しくは、こちらの投稿をご覧ください。

https://plus.google.com/114866592715069940152/posts/fmBFhjhQcZF

上記のアルゴリズムは、「madIS」機能リレーショナルデータベース内に実装されました。アルゴリズムのソースコードは次の場所にあります。

https://github.com/madgik/madis/blob/master/src/functions/aggregate/graph.py


アルゴリズムが多項式であることを警告するだけなので、それが完全な場合、CSでGIがPになっているという長年の未解決の問題を解決したことになります。 。)
バドロイト2017年

アルゴリズムは概算であり、確かに完全ではありません(ブログの投稿でもそうです)。これが機能する理由は、作成するハッシュが巨大であるため、数百万のグラフのデータベースでも、偽陽性のハッシュ衝突の可能性が非常に小さいためです。あなたが偽陽性のハッシュ衝突のケースを見つけることができたなら、私はそれについて知ることに非常に興味があります。理由(暗号化ハッシュを使用する場合)は、暗号化ハッシュ関数を「破る」ことに成功したためです。
エスタマ2017

ハッシュ衝突の可能性がどれほど微小かについて詳しく説明します。256ビットの暗号化ハッシュは、世界中のすべての異なるファイルが同じ値にハッシュされないようにするのに十分以上であると考えます(たとえば、gitはそれを保証するために160ビットであるSHA-1を使用します)。Powerhashからのハッシュは128ビット* graph_node_count(MD5ハッシュを使用)になります。したがって、実際には、(このユニバースで)十分なグラフを作成して、それらの間のハッシュの衝突を見つけることはできません。
エスタマ2017

1
私はあなたのアルゴリズムがハッシュ衝突がないと仮定しても偽陽性を与えることを意味しました。多くの多項式時間アルゴリズムが文献のグラフ同型に対して提案されており、それらすべてが偽陽性を与えます。ここに関連する質問:cs.stackexchange.com/questions/50939/…
バドロイト2017

1
議論いただきありがとうございます。さらに調査したところ、上記のアルゴリズムはk次元のWeisfeiler-Lehmanアルゴリズムの範疇にあり、通常のグラフでは失敗します。詳細については、dabacon.org
pontiff
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.