【发布时间】:2013-01-08 03:57:22
【问题描述】:
我有两组数字,其中 SET2 通常包含更多项目。保证 SET2 的计数等于或大于 SET1 的计数。 实际上,由于顺序很重要,因此输入是列表而不是集合。
我的目标是组合(总结)/重新排序 SET2 中的数字,使其尽可能类似于 SET1。我将相似度定义为每个位置的偏差之和。请参阅this post 了解我计算相似度的方式。总和越小越好。
我的第一个方法是尝试所有组合并选择最佳组合。这仅适用于相当小的集合(尤其是第二个)。请参阅this post 和 Rawling 的回答。 有没有更聪明的方法来获得良好的组合?我绝对不需要最好的。一个好的结果会很好。显然,具有空子集的集合是无稽之谈。极端不平衡的集合对我来说似乎不是很有希望。 SET1 往往有大约 8 个,但最多可以有 18 个条目。 SET2 的计数通常超过 10(最多 35)。 两组数字之和相等(舍入误差除外)。
这是一个有好有坏结果的示例(并非所有可能的结果):
SET1 = { 272370, 194560, 233430 }; SET2 = { 53407.13, 100000, 365634.03, 181319.07 }
272370 | 194560 | 233430
---------------------------------------------------------------------
365634.03 | 100000 + 53407.13 | 181319.07 (best match)
365634.03 | 181319.07 | 100000 + 53407.13 (good)
365634.03 | 100000 |181319.07 + 53407.13 (ok)
53407.13 |365634.03 + 100000 | 181319.07 (bad)
53407.13 |365634.03 + 181319.07 | 100000 (bad)
. |365634.03 + 181319.07 | 53407.13 + 100000 (invalid)
53407.13 + 100000 |365634.03 + 181319.07 | (invalid)
如果我忘记描述前提或者我的描述不清楚甚至有错误,请告诉我。我也很乐意提供另一个例子。
提前致谢!
【问题讨论】:
-
您是在寻找最佳答案还是快速启发式?
-
快速启发式算法将是完美的。特别是因为不可能进行详尽的计算。感谢@Ari 的评论。