Graph 给定一个表示n个元素之间代价的邻接矩阵,如何将n个元素划分为k组?

Graph 给定一个表示n个元素之间代价的邻接矩阵,如何将n个元素划分为k组?,graph,dynamic-programming,binary-search,Graph,Dynamic Programming,Binary Search,给定n个元素之间的成本,其中成本[i][j]表示元素i和j之间的成本,我们需要将n个元素划分为k个非空组,这样,如果2个元素属于同一组,则对之间的成本为0。给定除法,设M是不属于同一组的2对的最小代价。我需要找到最大可能的M。(除法没有给我们,我们需要找到最佳除法,然后找到最大可能的M) 我想对所有成本[I][j]进行排序,然后对其进行二进制搜索。假设我们在排序数组中的位置x处,代价为M,表示(i,j)之间的边。我们假设它是最大可能的M。所以我们知道第i个元素和第j个元素需要在不同的组中。然后我

给定n个元素之间的成本,其中成本[i][j]表示元素i和j之间的成本,我们需要将n个元素划分为k个非空组,这样,如果2个元素属于同一组,则对之间的成本为0。给定除法,设M是不属于同一组的2对的最小代价。我需要找到最大可能的M。(除法没有给我们,我们需要找到最佳除法,然后找到最大可能的M)

我想对所有成本[I][j]进行排序,然后对其进行二进制搜索。假设我们在排序数组中的位置x处,代价为M,表示(i,j)之间的边。我们假设它是最大可能的M。所以我们知道第i个元素和第j个元素需要在不同的组中。然后我们从第i个元素添加bfs,并添加成本小于当前M的所有相邻元素。这将在当前组中。我们继续唱歌,直到这个组的元素用完为止。然后我们转到下一组,从第j个元素再次进行bfs。如果我们遇到一个元素,该元素已经在前一个组中,但其成本小于M,并且来自当前组,那么我们要么返回false,要么尝试合并这两个组。这是我不确定的部分

例如,如果n=3,k=2,成本[1][2]=17,成本[2][3]=15,成本[1][3]=16

我们可以把元素1放在第一组,元素2放在第二组和第三组。在这种情况下,最大M为最小值(成本[1][2],成本[1][3])=16


如果一个组中没有最小元素数量的约束,或者组中的元素数量相似,那么这是最好的方法,而不是将除
k-1
元素以外的所有元素放在一个组中,将所有其他组由一个元素组成。若要查找创建
k-1
组的
k-1
元素,请按降序排序成本,并首先获取出现的
k-1
元素。

如果组中没有最小元素数的约束,或者组中的元素数相似,然后,最好的方法是将除
k-1
元素之外的所有元素放在一个组中,而将所有其他组放在一个元素中。要查找创建
k-1
组的
k-1
元素,请按降序排序成本,并首先获取出现的
k-1
元素