如何在完全连接的图中选择k个节点,在任何一对节点之间有最大间隔?

时间:2017-03-19 04:40:59

标签: algorithm graph-theory

假设我有一个完全连接的url_obj = self.env['url_ids'].browse()节点图,我知道任意两对节点之间的权重。如何选择_get_url节点,以便最大化任何节点对之间的最小距离?

我将此问题映射为我实际想要解决的问题的更一般情况,我将其称为作弊学生问题(我不知道它是否有一个实际的名字)。

作弊学生问题

给定N矩阵,如何选择任何一对单元格之间距离最大的k个单元格?您可以假设矩阵是一个教室,N.M作弊学生正在进行测试。没有一对学生应该彼此靠近,因此我们希望最大化任何一对之间的最小距离。

1 个答案:

答案 0 :(得分:1)

您的广义图问题似乎与https://en.wikipedia.org/wiki/Independent_set_%28graph_theory%29中描述的最大独立集问题密切相关,后者是NP完全的。我可以通过运行二元斩找到一个最大独立集来找到解决你的图问题的算法返回最大距离大于1的最大k。由于找到一个最大的独立集很难,我认为你的广义问题很难。

我也没有看到解决矩阵问题的简单方法,但是已经解决了在无限大小的二维表面上尽可能有效地打包圆的相关问题,答案是什么被称为六边形填充(https://en.wikipedia.org/wiki/Circle_packing),它混淆地基于三角形平铺(https://en.wikipedia.org/wiki/Triangular_tiling - "三角形平铺的顶点是最密集的圆形包装的中心") 。

因此,对于有限矩阵和学生数量,有可能将学生安排在分开的行中,这些行交错排列,这样每个学生都集中在最靠近他们前面和后面的行中的学生对。 ,距离最佳 - 或者至少是开始某种爬山尝试的好地方。