Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将加权图划分为等权群_Algorithm_Graph_Partitioning - Fatal编程技术网

Algorithm 将加权图划分为等权群

Algorithm 将加权图划分为等权群,algorithm,graph,partitioning,Algorithm,Graph,Partitioning,我有一个带加权边和加权顶点的双向图。我想找到N组不相交、连接的顶点,以便: 每组的总权重接近但不大于某个特定值TargetWeight 形成这些组的选定边的权重尽可能低。这里有一个问题:如果还选择了另一条边,则边的权重可能会降低(权重的一部分在边之间共享)。一个示例:边E1的权重为20,边E2的权重为30,它们共享的权重为5。仅考虑E1将导致权重20,同时考虑E1和E2将导致组合权重45(共享权重仅考虑一次) N是预先知道的,但如果结果会大大改善,则允许N更大。 TargetWeight是预先知

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

  • 每组的总权重接近但不大于某个特定值TargetWeight
  • 形成这些组的选定边的权重尽可能低。这里有一个问题:如果还选择了另一条边,则边的权重可能会降低(权重的一部分在边之间共享)。一个示例:边E1的权重为20,边E2的权重为30,它们共享的权重为5。仅考虑E1将导致权重20,同时考虑E1和E2将导致组合权重45(共享权重仅考虑一次)
  • N是预先知道的,但如果结果会大大改善,则允许N更大。
    TargetWeight是预先知道的,当多个成本较低的小型组比成本较高的大型组好时,没有可用的实际指标

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


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

    我认为解决此类问题的最佳方法是:

    • 第一:定义一个基于 你有两个标准:

      成本(图)=和(距离(子图重量、目标重量))+和(权重边(子图)) 其中,如果x>y,则距离(x,y)非常大,否则等于y-x

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

    • 第三:遍历图形并从一个顶点移动一个顶点 分组到另一个组,并检查 总成本将减少