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

时间:2019-03-30 06:44:03

标签: graph dynamic-programming binary-search

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

我想到对所有cost [i] [j]进行排序,然后对其进行二进制搜索。假设我们在排序数组中的位置x处,成本为M,它表示(i,j)之间的边。我们假定它是最大可能的M。因此,我们知道ith元素和jth元素必须位于不同的组中。然后我们从第ith个元素开始bfs并添加所有成本小于当前M的相邻元素。这将在当前组中。我们将继续bfsing,直到用尽了该组中的所有元素。然后,我们移至下一组,并从第j个元素再次进行bfs。如果我们遇到的元素已经在上一个组中,但是与当前组中的元素相比花费少于M,我们将返回false或尝试将这两个组合并。这是我不确定的部分

一个例子是,如果n = 3,k = 2且cost [1] [2] = 17,cost [2] [3] = 15,cost [1] [3] = 16

我们可以将元素1放在组1中,将元素2放在组2和3中。在这种情况下,最大M为min(cost [1] [2],cost [1] [3])= 16

这是可以做到的最好的

1 个答案:

答案 0 :(得分:0)

如果在一个组中没有约束最小元素数或该组具有相似数量的元素,则最好的方法是将k-1元素以外的所有元素归入一个组,将所有其他组包含一个元素要找到这些创建k-1组的k-1元素,请按降序排序并获取第一个k-1出现的元素。