我试图找到给出两个图的共同子图。 如果我有2个图形G1 =(v1,e1)和G2 =(v2,e2)我必须找到公共子图G =(V,E),如G1和G2的任何其他公共子图形必须不包含更多然后E arris的红衣主教。
鉴于图1是
A - B
A - C
B - D
D - E
图2是
A - B
A - E
B - D
比算法应该返回
A - B
B - D
你能帮我一个算法,告诉我要参加哪些步骤? 谢谢!
答案 0 :(得分:3)
您没有正式描述您的问题,但是从您的示例 1 ,您似乎正在寻找 edge 的最大公共子集。
要实现它 - 您只需要E1和E2的intersection。
<强>证明:强>
( - &gt;)假设(a,b)
位于E1 [intersection] E2
。根据集合交集的定义 - 它对E1和E2都是共同的 - 因此对G1和G2也是如此。
(&lt; - )假设(a,b)
与G1和G2相同 - 然后(a,b)
位于E1
且(a,b)
位于E2
{1}} - 根据交集的定义,(a,b)
位于E1 [intersection] E2
(1)我得出结论,因为(A,C)
不是“共同的”,而(A,B)
在子图中 - 这意味着这不是限制找到可以创建所需的顶点子集子图(因为那时A
应该从结果中排除。)