给出1到12的列表,假设我每10分钟使用一个数字,如何最大化接近数字之间的分钟数。
换句话说,最大化列表中每个点的每个值之间的差异。
尝试最大限度地延长n& n + 1,但也是n& n + 2,n& N + 3
1旁边的2是最差的。 12旁边的1将是最好的,但最终会导致更接近列表的数字。
例如,
根据列表中的项目数,是否可以计算出每个Delta之间的最佳Delta?
答案 0 :(得分:4)
假设集合中的输入值均匀分布,我建议使用以下方法来定义序列。
逐步执行有序值,每次跳过X个值,其中X被定义为值/ Phi的总数。 假设值集的末尾圈回到开头。
因此,对于1到12的值集,您将拥有:
X = 12 / Phi
X = 12 / 1.618 = 7.4
将7.4舍入到最接近的整数,所以假设X = 7。
然后你的序列将是1,8,3,10,5,12,7,2,9,4,11,6
要量化(或评分)此序列的“最大化”方式,您可以为集合中的每个成员获取以下计算的总和。
对于每个集合成员,计算其自身与每个其他成员之间的“值”差异的绝对值除以该成员的“距离”。 例如,对于上述序列中的成员8,其得分为:
8,1 = | 8-1 | / 1 = 8
+
8,3 = | 8-3 | / 1 = 5
+
8,10 = | 8-10 | / 2 = 1
+
8,5 = | 8-5 | / 3 = 1
+
8,12 = | 8-12 | / 4 = 1
+
...
为集合中的每个成员执行此操作并获取总和以获得总体“分数”。 得分越高,序列越“最大化”。
答案 1 :(得分:3)
似乎对于任何正n,最好的答案是按升序将奇数与偶数连接起来。
1-12我们有1,3,5,7,9,11,2,4,6,8,10,12。连续数字之间有一小时的距离。
实施(Ruby)
def optimize_resources(n)
answer = Array.new(n)
for i in 1..n
if i % 2 == 1
answer[(i - 1) / 2] = i
else
answer[(n - 1) / 2 + i / 2] = i
end
end
answer
end