图的中心

时间:2018-12-02 22:26:13

标签: algorithm graph tree

给出一个具有N个顶点和N-1个边缘的失重边缘的无方向树,并且K个数找到K个节点,这样,树中的每个节点都在K个节点中至少一个的S距离内。另外,S必须是可能的最小S,以便如果存在S'

我尝试解决此问题,但是,我认为我认为的解决方案不是很快。 我的解决方案: 设置x = 1 查找距每个节点x距离的节点 让距离最大的节点为K个节点之一。 为每个节点重新计算,而不计算已经覆盖的节点。 直到找到K个K个节点为止。然后,如果每个节点都被覆盖,我们就做完了,否则增加x。

3 个答案:

答案 0 :(得分:1)

此问题称为p中心,您可以在线找到有关此问题的几篇论文,例如this。对于一般图形,它的确是NP,但是对于树,无论加权还是未加权,它都是多项式。

答案 1 :(得分:0)

对我来说,这似乎是一个集群问题。尝试使用k-Means (wikipedia)算法,其中k等于K。由于您有一棵树并且所有顶点都已连接,因此可以将顶点之间的边距/数量用作距离测量。 当算法转换时,您将获得应找到的K个节点。然后,您可以通过遍历所有k个群集来确定S。在那里,您可以计算群集中每个节点到中心节点的最大距离。总的最大值应该是S。

更新:但是实际上我看到k-means算法不会产生全局最优,因此该算法也不会产生最佳结果...

答案 2 :(得分:0)

您说N个节点和N-1个顶点,因此您的图形是一棵树。您实际上是在寻找节点的连接的K子集,以最大程度地减少最长边。

多项式算法可以是: 对所有增加距离的边缘进行排序。 然后在边缘循环:

  • 如果两个节点都不在一个组中,请创建一个新组。
  • 否则,如果一个节点位于1个现有组中,则将另一个添加到组中
  • 将两个节点都分为两个不同的组,然后将这些组融合在一起

当一个组达到K时,打破循环,您就可以连接K个子集。

不过,您必须注意,您的组可以包含超过K个节点。您可以想象有4个节点,两个2封闭的问题。您的问题将没有确切的三子集解决方案。