为每个组选择最佳ID,且变更成本最低

时间:2015-09-02 03:51:32

标签: algorithm dynamic-programming brute-force

我想为每个组分配唯一ID,但需要限制更改费用。

如下所示,共有4组RJDBC::dbSendUpdate(conn, statement)。有3个(h1, h2, h3, h4)。更改群组的现有ID会产生费用,例如,(id1, id2, id3)的更改id1将花费4。

我想将3个ID分配给4个组中的3个,并为另一个组分配一个新ID。我们的目标是需要一个不断变化的成本最少的解决方案。

在下面的示例中,如果我们最终为h1分配id3,则H1的变更费用为7.总变更费用是每个组的费用总和。

对于该示例,该示例的最佳解决方案是:

H1。改变成本是8。

目前我使用暴力,特别是当群组/身份数量增加时效率不高。

有什么建议吗?

示例:

H1 <- id2, H2 <- New ID, H3 <- id3, H4 <- id1

1 个答案:

答案 0 :(得分:3)

您可以在此使用min-cost max flow

将源连接到容量为1的所有ID,将每个id连接到容量为1且成本为-a [id [i],h [j]]的每个h(因为您需要实际找到最大值), 然后将所有hs与容量为1的接收器连接起来。

在应用最小成本最大流量后,您将在那些(i,j)中流动,您应该将第i个id分配给第j个h。其他hs的新ID。