假设有一个黑盒子(/算法),它给了我一个图的集团。无论如何都要找到那个集团的封面?
图片中给出了我想要找到的直观想法。我想找到黑盒子的一部分。如果需要进一步说明,请随意。 我有一个想法,通过删除派系的边缘来更新图表。我不知道它会有多好。期待任何其他想法。
答案 0 :(得分:1)
http://mathworld.wolfram.com/CliqueCoveringNumber.html
删除边缘不会对您有所帮助,因为新图表可能缺少可用于解决封面的集团。
B
/ | \
A | D
\ | /
C
你有2个最大派系,ABC和BCD,如果你从ABC开始并删除它的边缘AB AC和BC你的算法将无法找到BCD集团。
在您尝试计算集团封面编号之前,您需要图表的所有最大集团。
AllCliques = GetAllCliques()
MaximalCliques = AllCliques
For Each ckA in MaximalCliques
For Each ckB in MaximalCliques.Excluding(ckA)
If all vertices in ckA are in ckB Then MaximalCliques.Remove(ckA)
If all vertices in ckB are in ckA Then MaximalCliques.Remove(ckB)
Return MaximalCliques
然后,从所有最大派系中找到派系封面编号的天真方法是通过排列检查并检查
MinCover = MaximalCliques.Count
For Each ckList in Permute(MaximalCliques)
Cover = 0
TestSet = Graph.Vertices
For Each ck in ckList
TestSet.Remove(ck.Vertices)
Cover = Cover + 1
If TestSet.Count = 0 Then Break
If Cover < MinCover Then MinCover = Cover
Return MinCover