找到最大重量的子图

时间:2017-10-23 06:14:03

标签: algorithm cluster-analysis graph-theory graph-algorithm subgraph

我有一个城市区域(让我们把它想象成街道图),所有街道都有一些重量和长度。我想要做的是找到一组连接的街道,位于其他街道附近,最大(或接近最大)总重量W,因为我的最大子图最多只能包含N条街道。

我特别对一个跨越整个图表的子图不感兴趣,而只是一小群街道的最大或接近最大组合重量,并且所有街道彼此“靠近”,其中“ “将被定义为没有距离集群中心超过X米的街道。必须连接所得到的子图。

有人知道这个算法的名称是否存在?

也对任何解决方案,精确或近似感兴趣。

要在视觉上显示,请假设我的图表是下图中所有街道段(交叉点到交叉点)。因此,个别街道不是A大道,而是大道A在10日到11日之间,依此类推。 Street的权重为1或0.假设具有最大权重的街道集在选定的多边形中 - 我想要做的是找到此多边形。 street network

2 个答案:

答案 0 :(得分:0)

这是一个提案。将节点图中的每个顶点视为" center"正如你所定义的那样。对于每个中心C[i],请以C[i]为原点执行Dijkstra's algorithm to construct a shortest path tree。当它包含一个超过中心允许的最大值的顶点时,停止构造树。

然后让A[i]成为以V[i]为中心的树中顶点的所有边的集合。结果将是具有最大权重的集合A[i]

对于O(|E[i]| + |V[i]| log |V[i]|)中心,一次执行Dijkstra算法的运行时间为i。这里的集合的大小受到距离中心的最大距离的限制。总费用为sum_(i in 1..|V|) O(|E[i]| + |V[i]| log |V[i]|)。在退化的情况下,最大允许重量允许从每个中心包含整个图形,成本将为O(|V| (|E| + |V| log |V|))

我可以考虑一些可能的优化来改善运行时间,但是想要验证这可以解决你想到的问题。

答案 1 :(得分:0)

这是一个针对该问题的整数编程精确公式,假设您拥有有限数量的总街道S,并且群集的“中心”可以是有限数量的街道之一S.如果您正在查看连续欧几里德空间中的聚类中心,它将把我们带入Weber Problem的领域。这可能仍然可行,但我们必须查看column-generation formulation

enter image description here

目标函数可最大化j索引的所选街道的权重。约束(1)指定只选择一个中心。约束(2)指定对于任何潜在的中心i,仅选择N个街道作为邻居。约束条件(3)规定,只有选择了相应的中心,才选择街道作为某个社区的一部分。其余的是二进制整数约束。

如果选择作为中心的街道计为N街道之一,则可以通过指定y_{ii} = x_i

来轻松实施

注意:如果上述表述正确,或准确捕捉到问题,一旦确定N_i已设定,就可以轻松解决[MIP]。

依次考虑每个i。从N_i按重量降序选择前N个相邻街道。这是您的现有解决方案。如果在迭代i时找到更好的解决方案,请更新现有解决方案。