找到最大权重的子图
Posted
技术标签:
【中文标题】找到最大权重的子图【英文标题】:Finding a subgraph of max weight 【发布时间】:2018-04-03 15:00:26 【问题描述】:我有一个城市区域(让我们将其视为街道图),其中所有街道都有与其相关的权重和长度。鉴于我的最大子图最多只能包含 N 条街道,我想要做的是找到一组连接的街道,这些街道位于其他街道附近,总重量为 W 的最大值(或接近最大值)。
我特别对跨越整个图表的子图不感兴趣,而只对具有最大或接近最大组合权重且所有街道彼此“靠近”的一小部分街道感兴趣,其中“近”将被定义为距离集群中心不超过 X 米的街道。必须连接生成的子图。
有谁知道这个算法的名称是否存在?
也对任何解决方案感兴趣,无论是精确的还是近似的。
为了直观地显示这一点,假设我的图表是下图中的所有街道段(交叉口到交叉口)。所以个别街道不是 A 大道,而是 10 号和 11 号之间的 A 大道,以此类推。街道的权重为 1 或 0。假设具有最大权重的街道集位于选定的多边形中——我想要做的是找到这个多边形。
【问题讨论】:
类似的问题math.stackexchange.com/questions/1824344/…(一般来说,这类问题最好是面向CS和数学的交流)。 在这种情况下,“近”是什么意思?我选择更远的街道的重量是多少?您是否尝试最大化某个功能? 此处附近将是一个参数,但通常在 5 个块左右之内。所以我正在查看可能 2-3 平方英里的街道图,我想从中挑选出最大组合重量可能为 0.5x0.5(大致不一定是正方形)的面积 '其中“近”将被定义为距离集群中心不超过 X 米的街道。 ' 我建议一个简单的算法,以每个节点为中心,使用最短路径搜索“关闭街道”,并返回权重最高的集群。我猜节点的数量不会太多,最多10000个吧?对于这个数据大小,结果应该在几秒钟内准备好。你怎么看? 推测街道是平面中的曲线,那么两条街道之间的“距离”是多少?例如,它是第一条街道上的任何点与第二条街道上的任何点之间的最小距离吗?我想你会说“是”,所以下一个问题是:那么有可能街道 A 和 B 是“足够近”,街道 B 和 C 是“足够接近”,但街道 A 和 C 不是“接近”足够的”。您是否要求每条街道都“足够近”?另外,如果两条街道相交,我们是否可以假设两条街道顶点由一条边连接? 【参考方案1】:这是一个建议。将节点图中的每个顶点视为您定义的“中心”。对于每个中心C[i]
,以C[i]
为原点执行Dijkstra's algorithm to construct a shortest path tree。当树包含的顶点超过中心允许的最大值时,停止构建树。
然后让A[i]
成为与以V[i]
为中心的树中顶点的所有边的集合。结果将是具有最大权重的集合A[i]
。
对于i
th 中心,Dijkstra 算法的一次执行的运行时间是O(|E[i]| + |V[i]| log |V[i]|)
。这里的集合的大小受与中心的最大距离的限制。总费用为sum_(i in 1..|V|) O(|E[i]| + |V[i]| log |V[i]|)
。在最大允许权重允许从每个中心包含整个图的退化情况下,成本将为O(|V| (|E| + |V| log |V|))
。
我可以考虑一些可能的优化来提高运行时间,但想验证这是否解决了您的问题。
【讨论】:
所以这会起作用,但我认为它不会找到最大重量集群。 如果,比方说,你在中心有一条街道,并且它左边的所有街道都有很高的权重(假设权重是 0 或 1,所以左边的所有街道权重为 1),那么我们将有一条最短路径,例如,向左走 10 条街道,总权重为 10。但是,如果右侧还有 10 条街道,权重为 1,则这些街道不会是考虑,因为它们不是我们最短路径的一部分。我们这里的最大重量应该是 20,但从左或右开始是 10 - 假设我们与中心的最大允许距离是 10 sts @kozyr 可能是这样,但这不是您定义问题的方式。您的话:““附近”将被定义为距离中心超过 X 米的街道” 好吧,为了简单起见,我在这里使用了 10 条街道作为衡量标准。假设每条街道长 100 米,所以如果我们向左走 1000 米(10 条街道),而我们的 X(半径)这里是 1000,那么我们就有了我所描述的问题 - 我们可以在右 1000 米,最大重量为 20 而不是 10。【参考方案2】:这是一个整数规划的精确公式,假设您有有限数量的街道 S,并且集群的“中心”可以是有限数量的街道 S 之一。如果您正在查看连续欧几里得空间中的聚类中心,这将带我们进入Weber Problem的域。这可能仍然可行,但我们必须查看column-generation formulation。
目标函数最大化由j
索引的选定街道的权重。约束 (1) 指定只选择一个中心。约束 (2) 指定对于任何潜在中心 i
,仅选择 N
街道作为邻居。 Constraint (3) stipulates that a street is chosen as part of some neighborhood only if the corresponding center is chosen.其余的是二进制整数约束。
如果被选为中心的街道算作N
街道之一,则通过指定y_ii = x_i
很容易强制执行
注意:如果上面的公式是正确的,或者准确地捕捉到问题,[MIP] 可以很容易地解决,一旦集合N_i
被识别出来。
依次考虑每个i
。从N_i
选择顶部N
相邻街道按权重降序排列。这是您现有的解决方案。如果在迭代 i
s 时找到更好的解决方案,请更新现有解决方案。
【讨论】:
如果我理解正确,此解决方案将返回 N_i 中的前 M 条街道,但不能保证这些街道将被连接。是的,它们是 i 的邻居,但结果可能最终是街道 i 周围的两组不相连的街道,而我只对相连的街道子集感兴趣。 在这种情况下,如果您的解决方案中的每对街道都必须连接,那么您正在寻找基数约束的最大团问题。请参阅有关 people.mpi-inf.mpg.de/~nmegow/papers/ctw09.pdf 的论文 不是每一对。结果应该是一个连通图,但不一定是全连通的。 i 的邻居,N_i,根据定义是连接到 i 的所有节点的集合。因此,如果 i 被选中,正如我原来的答案所示,i 的所有邻居都将通过 i 相互连接。您能否更清楚地了解连接两条街道/节点意味着什么? 用图片更新了我原来的问题。关于邻居 - street_i 的邻居是从 street_i 可到达的任何街道,在最大距离 N 内。最后一组街道(street_i 及其邻居)应连接。以上是关于找到最大权重的子图的主要内容,如果未能解决你的问题,请参考以下文章