algorithm - 将加权图划分为同等权重的组

标签 algorithm graph partitioning

我有一个带有加权边和加权顶点的双向图。我想找到 N 组不相交、相连的顶点,以便:

  1. 各组权重之和接近但不大于某个值TargetWeight
  2. 组成这些组的所选边的权重尽可能低。这里有一个问题:如果还选择了另一条边,则边的权重可能会降低(一部分权重在边之间共享)。一个例子:边 E1 的权重为 20,边 E2 的权重为 30,它们共享权重 5。仅取 E1 将导致权重 20,同时使用 E1 和 E2 将导致合并权重为 45(共享权重仅取考虑一次)。

N 是预先知道的,但如果结果会大大改善,则允许更大。
TargetWeight 是预先知道的,当多个低成本的小组优于高成本的大组时,没有可用的实际指标。

在典型情况下,该图有大约 50k 个节点。该图未存储在数据库中。

您可以将此问题视为聚类算法,但关于聚类的一般讨论可能与我需要的有很大不同。我尝试了 KMeans 算法,但我发现结果不够好。现在我正在使用一种基于探索的启发式方法来检查某个选择对 future 群体选择的影响程度。这种方法有效,但速度很慢。

最佳答案

我认为处理这类问题最好的办法是:

  • 首先:定义一个成本函数基于 你是 2 个标准:

    Cost(graph) = SUM(Distance(subgraphweight,TargetWeight)) + SUM(WeightEdges(subgraph)) 其中,如果 x>y 则 distance(x,y) 非常大,否则等于 y-x

  • 第二:随机划分图 分成 N(或更多)组不相交的 子图

  • 第三步:遍历图形并从一个顶点移动一个顶点 分组到另一个并检查是否 总成本会降低

关于algorithm - 将加权图划分为同等权重的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593599/

相关文章:

java - LZW 编码器解码器 - 符号表

algorithm - 从邻接表中找到两个节点的最低公共(public)祖先

c# - 将列表分组为每组 X 项的组

algorithm - 如何偏移多边形边缘?

python - 在python中混合两个不对称列表

javascript - 实现倒计时器的重置按钮

partitioning - 计算所有等于 1's and 0' s 的二进制数

algorithm - 图的临界点 : reach all nodes in minimum number of points and weight

javascript - 在 sigma.js 中布局图形时绘制边

arrays - 使用 Ruby 生成多重集的分区