我希望在C ++中解决以下问题:
我有6个元素:A1,A2,A3,B1,B2,B3。我想要将一个B与一个A精确匹配,使得所得到的匹配总和最小。
这里是我想编写简单贪心算法的方法(可能不是最优的,但对我来说足够好):
1.测量所有A-B对之间的距离,并将其保存在浮点数的二维数组中。 2.按照单个值对2D数组进行排序,类似于下面的排序lambda: 3.为该A设置最佳匹配,禁用选定的B和A的搜索(在2D中禁用列和行)。 4.从仍然可用的数组中选择最小的数字。 5.等等,直到所有匹配都完成。
这里有两个有趣的问题:
1.您能告诉我这个问题叫什么名字,并指向一些适当的解决方案吗? 2.您能告诉我如何在C ++中实现上述贪心算法吗?到目前为止,我考虑使用此函数进行排序
以下是代码:
我认为我会保留一个
注意:好吧,在3,3个元素方面谈论性能没有意义,但当元素数量更大时,我真的很想知道这个问题的真正解决方案。
我有6个元素:A1,A2,A3,B1,B2,B3。我想要将一个B与一个A精确匹配,使得所得到的匹配总和最小。
这里是我想编写简单贪心算法的方法(可能不是最优的,但对我来说足够好):
1.测量所有A-B对之间的距离,并将其保存在浮点数的二维数组中。 2.按照单个值对2D数组进行排序,类似于下面的排序lambda: 3.为该A设置最佳匹配,禁用选定的B和A的搜索(在2D中禁用列和行)。 4.从仍然可用的数组中选择最小的数字。 5.等等,直到所有匹配都完成。
这里有两个有趣的问题:
1.您能告诉我这个问题叫什么名字,并指向一些适当的解决方案吗? 2.您能告诉我如何在C ++中实现上述贪心算法吗?到目前为止,我考虑使用此函数进行排序
以下是代码:
float centerDistances[3][3]; // .. random distances
vector<int> idx(9);
for (size_t i = 0; i != idx.size(); ++i) idx[i] = i;
sort(idx.begin(), idx.end(), [](int i1, int i2)
{
return centerDistances[0][i1] < centerDistances[0][i2];
});
我认为我会保留一个
vector<bool> selectedA, selectedB;
来记录所选元素,但我不知道它的表现如何。注意:好吧,在3,3个元素方面谈论性能没有意义,但当元素数量更大时,我真的很想知道这个问题的真正解决方案。