【发布时间】:2016-12-04 18:09:21
【问题描述】:
我有以下问题,例如:
给定一个带有符号的桶1 1 2 3 3 4
以及创建配对的食谱书,例如:121324
从桶中选择最佳配对,在桶中留下尽可能少的符号。因此,使用最佳配对上方的示例值将是:13 13 24 这将使用给定的所有符号。
天真地从桶中挑选可能会导致以下结果:12 13 使 3 和 4 不匹配。 3 和 4 无法匹配,因为该书不包含该特定连接的配方
注意事项:
真正的问题平均在于:桶中的 500 个元素,大约 30 种符号。
我们已经尝试使用蛮力算法来实现该解决方案,但恐怕连我们的孙子都无法活到看到结果:)。
食谱书的大小没有限制,它甚至可以在桶中拥有所有可能的东西。不允许两次由相同元素组成的对。
完全清空桶不需要答案。它只是从桶中取出最多的对。把一些留在桶里没关系。最好寻找最佳解决方案,但接近的近似值也足够了。
我将不胜感激提出/暗示解决问题的算法的答案。
示例:
斗:1 1 2 2 2 2 3 3 3 4 5 6 7 8 8
食谱书:12 34 15 68
最佳结果(可能之一):{1 2} {1 2} {3 4} {6 8}
剩:2233578
【问题讨论】:
-
在
1213示例中,配对34有什么问题? -
我已经更新了答案。配方书中没有 34 连接。我们只能根据预先给定的配方列表进行连接。
-
我相信你可以使用线性代数技术走得很远,但我并不完全精通细节。您应该从“考虑问题”开始,即“我应该为每个符号使用多少个配对?”。因此,在上面的示例中,
1符号可以表示为x+y=2其中 2 是1符号的数量,x和y分别是12和13的数量.接下来,您将拥有x+z=1、y=2、z=1,您显然可以从中解决x=0以获得所需的结果。当不存在解决方案并且您需要一个近似值时,将使用线性代数。 -
@Amit 我无法理解您的解释。您能否为我在问题中的第二个示例发布示例解决方案?
-
在将第二个示例表示为一组方程方面,我们表示
a: 12, b: 34, c: 15, d: 68,方程为:a+c=2a=4b=3b=1c=1d=1(nothing)=1d=2。现在,显然这组方程没有解,所以你需要一个近似值,但你可以看到你的答案是如何拟合的,以及每对中的 1 个 (a=b=c=d=1)。