Algorithm 寻找最大权子图

Algorithm 寻找最大权子图,algorithm,cluster-analysis,graph-theory,graph-algorithm,subgraph,Algorithm,Cluster Analysis,Graph Theory,Graph Algorithm,Subgraph,我有一个城市区域(让我们把它想象成一个街道图),所有的街道都有一定的权重和长度。我想做的是找到一组相互连接的街道,位于其他街道附近,总权重为max(或接近max),因为我的max子图最多只能包含N条街道 我对横跨整个图的子图不感兴趣,而只对一小群街道感兴趣,这些街道具有最大或接近最大的组合重量,并且所有街道彼此“靠近”,其中“靠近”将被定义为距离集群中心不超过X米的街道。生成的子图必须是连接的 有人知道这个算法的名称是否存在吗 对任何精确或近似解也感兴趣 为了直观地显示这一点,假设我的图形是下图

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

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

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

对任何精确或近似解也感兴趣

为了直观地显示这一点,假设我的图形是下图中的所有街道段(交叉点到交叉点)。因此,个别街道不是A大道,而是第10和第11条之间的A大道,依此类推。街道的权重将为1或0。假设具有最大权重的街道集位于选定多边形中-我要做的是找到该多边形。
这里有一个建议。把节点图中的每个顶点都看作是你定义的“中心”。对于每个中心
C[i]
,以
C[i]
作为原点执行。当树包含的顶点超过中心允许的最大值时,停止构建树

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

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


我可以想出一些可能的优化方法来提高运行时间,但我想验证一下这一点是否能解决您所想的问题。

这里是一个整数规划的精确公式,假设您有有限数量的总街道、S和“中心”一个簇的中心可以是有限数量的街道中的一条。如果你在连续的欧几里德空间中观察一个簇中心,这将把我们带到这个区域。这可能仍然是可行的,但我们必须考虑一个解决方案

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

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

注:如果上述公式是正确的,或者准确地捕捉到问题,那么一旦确定了set
N_i
,就可以简单地解决[MIP]


依次考虑每个
i
。从
N_i
按权重降序选择顶部
N
相邻街道。这是你目前的解决方案。如果在迭代
i
s.

Similatlr问题时发现更好的解决方案,则更新现有解决方案(一般来说,面向CS和数学的交流更适合此类问题)。在这种情况下,“接近”是什么意思?我应该在多大的重量下选择更远的街道?是否有一个函数是您试图最大化的?在这里附近有一个参数,但通常在5个块左右。所以我在看2-3平方英里的街道图,从中我想找出最大组合重量的0.5x0.5(大致上,不必是正方形)面积,其中“近”将被定义为距离集群中心不超过X米的街道我建议使用一种简单的算法,以每个节点为中心,使用最短路径搜索“close street”,并返回权重最高的集群。我想节点的数量不会太多,最多可能是10000个?对于此数据大小,结果应在几秒钟内准备好。你怎么看?大概街道是平面上的曲线,那么两条街道之间的“距离”是多少?例如,它是第一条街道上任意点与第二条街道上任意点之间的最小距离吗?我想你会说“是”,所以下一个问题是:那么有可能A街和B街“足够近”,B街和C街“足够近”,但A街和C街“不够近”。你是否要求每一条街道都“足够近”?另外,如果两条街道相交,我们可以假设两条街道的顶点通过一条边连接起来吗?所以这是可行的,但我认为它不会找到最大权重簇。如果,比方说,你有一条街道在中心,而它左边的所有街道都有高权重(为了简单起见,假设权重为0或1,因此左侧所有街道的权重均为1),那么我们将有一条最短路径,包括,比方说,10条街道向左走,总重量为10。但是,如果右边也有10条街道,总重量为1,则这些街道将不被考虑,因为它们不是我们最短路径的一部分。我们这里的最大重量应该是20,而是10,无论是向左走还是向右走我们离中心的最大允许距离是10sts@kozyr也许是这样,但这不是你如何定义问题的。你的话:“where“near”将被定义为没有街道