【问题标题】:Adjacency matrix and Bron–Kerbosch algorithm邻接矩阵和 Bron-Kerbosch 算法
【发布时间】:2015-05-25 13:56:54
【问题描述】:

我想在以邻接矩阵形式提供给我的图中找到最大团。我正在尝试做什么,我得到了我需要找到的具有相同产品标签的商店数量,以及是否找到了足够数量的这些商店

所以输入沿线 x - 店铺数量。 y - 产品计数/标签。 z - 产品需要出现在多少家商店中。

假设我得到了

5 - x 
2 - y 
4 - z
Then the adjacency matrix going with it is:
0 1 1 1 1
1 0 2 2 1
1 2 0 2 2
1 2 2 0 1
1 1 2 1 0

有两种不同的产品可供选择,现在我想知道是否有至少 4 家商店销售特定产品。我发现了 Bron–Kerbosch 算法,例如http://en.wikipedia.org/wiki/Bron%E2%80%93Kerbosch_algorithm 但我不知道如何选择我的 R、P 和 X 子集以及如何表示它们。它不必非常有效,我也不相信需要比二维数组更高级的数据结构,但我只是不知道如何使用这个邻接矩阵作为我的顶点列表等。谁能给我关于如何开始使用此算法的想法?可能告诉我如何用我的数据处理 R、P 和 X 就足够了。我想用 C++ 创建我的程序

【问题讨论】:

  • 这甚至不是邻接矩阵...en.wikipedia.org/wiki/Adjacency_matrix
  • 1s 和 2s 代表产品标签,这意味着即使矩阵可能暗示它们也不算是同一集团的成员。因为这是我们在这里介绍的两种不同的产品。

标签: c++ algorithm matrix


【解决方案1】:

来自wikipedia article

BronKerbosch3(G):
   P = V(G)
   R = X = empty
   for each vertex v in a degeneracy ordering of G:
       BronKerbosch2(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v))
       P := P \ {v}
       X := X ⋃ {v}

其中G 是图形,BronKerbosch2() 定义为:

BronKerbosch2(R,P,X):
   if P and X are both empty:
       report R as a maximal clique
   choose a pivot vertex u in P ⋃ X
   for each vertex v in P \ N(u):
       BronKerbosch2(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v))
       P := P \ {v}
       X := X ⋃ {v}

所以现在您知道了您对 R、P 和 X 的选择。还可以查找 cmets 中提到的邻接矩阵实际上是什么。另外,请仔细阅读文章了解degeneracy在算法中的使用。

在 C++ 中,您可以将std::array<std::array<int, SIZE>, SIZE> 用于二维邻接矩阵,然后继续算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多