我遇到了一个算法问题,但是除了暴力方法之外我无法找到更好的解决方案,也无法将其转化为更好的已知问题。有什么提示吗?
有N个大小不同的袋子和N种物品。每种物品归属于一个袋子。每种物品都有许多个,并且每个物品的大小可能不同。最初,这些物品随机分布在所有袋子中。我们必须将物品放入它们所属的袋子。但是,我们只能通过交换物品对来一次操作两个袋子 (尽可能多的) 并继续进行下一步操作。目标是减少总对数。编辑:目标是找到一系列传输的顺序,以使涉及的袋子对的总数最小化
澄清:
袋子不是任意大的(如果有助于您,可以假设袋子和物品大小为0到1000之间的整数)。您经常会遇到两个袋子之间的所有物品由于其中一个袋子的有限容量而无法交换的情况。这就是算法需要进行优化的地方。也许,如果另一组袋子先交换,当前的交换可以一次完成。为了说明这一点,让我们考虑袋子A,B和C及其物品1,2,3,分别表示物品大小(括号中的数字)。
A(10):3(8)
B(10):1(2),1(3)
C(10):1(4)
交换顺序可以是AB、AC、AB或AC、AB。后者是最优的,因为交换次数较少。