我想将连通图划分为2组顶点,这样每组顶点之间边缘权重之和的差异就会最小化。
例如,如果图形由顶点1,2,3,4,5组成,请考虑此分区:
设置A - {1,2,3}
设置B - {4,5}
总和A = {w(1 2)+ w(2 3)+ w(1 3)}
总和B = {w(4 5)}
Diff = abs(Sum A - Sum B)...(这是一个可能的分区差异。)
那么,我如何找到一个分区,使差异最小化?
答案 0 :(得分:1)
这个问题很难,因为它至少和partition problem一样难。
考虑一个分区问题,我们将数字{1,2,3,4,5}分成两组,尽可能小的差异。
构建如下图:
如果有人想出一个算法来解决你的问题,你可以使用算法将这个图分成两组,这样每组中的权重总和就会最小化。
在最佳解决方案中,蓝色和绿色节点必须放置在不同的集合中(因为我们有一个重量无穷大的边连接它们)。其余节点将连接到蓝色或绿色节点。调用连接到蓝色set1的连接和连接到绿色set2的连接。此分区将为分区问题提供最佳答案。
但是,根据图表的结构和权重值,您可能能够做出合理的工作。
例如,您可以尝试:
重复此算法几次并跟踪最佳分数。
当您只需要分配几个顶点时,您还可以尝试对剩余顶点的所有可能分区进行强力评估,以搜索一个好的解决方案。
答案 1 :(得分:1)
以下算法草图基于Iterated Local Search。我们的想法是贪婪地优化当前的解决方案,直到找到局部最优解决方案。然后打扰此解决方案以克服局部最优解。始终跟踪到目前为止找到的最佳解决方案。
迭代本地搜索是一种令人惊讶的有效且实用的启发式算法 - 即使对于NP完全问题也是如此。