挿入/削除の存在下でDAGの接続情報を効率的に維持するためのアルゴリズムは存在しますか?
有向非巡回グラフ与えられた場合、次の操作を効率的にサポートできますか?G(V,E)G(V,E)G(V,E) にパスが存在するかどうかを判断: Gノードから Aノードへ bはisConnected(G,a,b)isConnected(G,a,b)isConnected(G,a,b)GGGaaabbb :追加からエッジまでのBのグラフで Glink(G,a,b)link(G,a,b)link(G,a,b)aaabbbGGG :からエッジを削除する Bに Gunlink(G,a,b)unlink(G,a,b)unlink(G,a,b)aaabbbGGG :Gに頂点を追加しますadd(G,a)add(G,a)add(G,a) :Gから頂点を削除しますremove(G,a)remove(G,a)remove(G,a) いくつかのメモ: を許可しない場合、互いに素な型のデータ構造を使用して接続情報を維持するのは簡単だと思われます。unlinkunlinkunlink 明らかに、グラフの素朴なポインタベースの表現を使用して、深さまたは幅優先の検索を使用して、を実装できます。しかし、これは非効率的です。isCO NnectedisConnectedisConnected 3つの操作すべてについて、償却された一定時間または対数時間を期待しています。これは可能ですか?