我想为每个组分配唯一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
答案 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。