【发布时间】:2013-09-20 06:42:21
【问题描述】:
我需要创建最接近目标值的值的组合。组合必须是 x 个数字,其中 x 由用户定义。该算法将输出最接近用户输入的目标值的组合。我还需要显示算法返回的键(值)。
我认为该算法的工作原理如下:
Target: 575
具有对应键的值:
150 [0] | 75 [1] | 123 [2] | 212 [3] | 23 [4] | 89 [5] | 20 [6]
77 [7] | 39 [8] | 16 [9] | 347 [10] | 512 [11] | 175 [12]
用户想要Groups of: 5 values
该算法现在对整个集合运行 5 个值的组合,并返回最接近目标值 575 的值的总和。
结果
150 [0] + 212 [3] + 23 [4] + 77 [7] + 89 [5] = 551
使用的键是 0、3、4、7 和 5。
我可以使用Arrays#combination(n),但我将无法跟踪密钥。我已经能够想出一个存储“key”=>“int values”的哈希,但我不知道如何想出一个优化的算法来组合存储在哈希中的值。
{0=>"150"}
{1=>"212"}
{2=>"23"}
{3=>"77"}
{4=>"89"}
附:这不是家庭作业。这是一个个人项目,可以放在简历上,在面试中谈论,并学习将我的想法转化为代码。
【问题讨论】:
-
你确定要处理
a combination of sum of values吗?所以你准备了一个数字组合的组合,并计算每个组合的总和?而且,combination [of numbers] closest to a target (number) value没有意义。一个组合(可能是一个数组)如何在任何意义上“最接近”一个数字? -
它是组合的总和。说从最接近目标的集合中的任何 X 值的总和。
-
你能猜出每个数组中有多少个元素吗?如果像上面所示的元素很少,那么简单的蛮力方法可能就是要走的路。
-
这取决于用户输入。如果用户可以请求使值接近目标的 10 或 100 个值的总和。
标签: ruby algorithm combinations hash