【发布时间】:2016-10-04 08:03:52
【问题描述】:
给定一个值数组,
arr = [8,10,4,5,3,7,6,0,1,9,13,2]
X 是一个值数组,可以同时选择X.length != 0 和X.length < arr.length
然后将选择的值输入到函数 score() 中,该函数将根据选择值数组返回一个分数。
Example 1:
X = [8]
score(X) = 71
Example 2:
X = [4]
score(X) = 36
Example 3:
X = [8,10,7]
score(X) = 51
Example 4:
X = [5,9,0]
score(X) = 4
这里的函数 score() 是一个黑盒,我们无法修改函数的工作方式,我们只需提供一个输入,函数就会返回分数输出。
我的问题:如何得到每组数字的最低分?
意思是,如果 X 是一个只有 1 个值的数组,并且我在 arr 中输入所有不同的值,每个值都会返回一个不同的分值,我会找出哪个 arr 值提供最低分。
如果 X 是一个包含 3 个值的数组,我会在 arr 中输入所有不同可能值的组合,每个不同的 3 个值集合返回不同的分数并找到最低分数。
如果我的 arr 很小,这很简单。但是,如果我有一个包含 50 甚至 100 个值的数组,我如何创建一个算法,根据输入值的数量提供最低分数
【问题讨论】:
-
您是在问如何生成
arr的所有子集,还是在问如何处理计算爆炸? -
如何处理计算负载。找到 arr 的组合很容易,例如 arr.combination(3)。但是我会有一个非常大的可枚举,如果我通过 score() 函数运行所有值,这将需要很长时间,尤其是在一个非常大的数组上。
-
"如果我有一个包含 50 个甚至 100 个值的数组..." - 根据您对情况的描述("这里的函数 score()是一个黑盒..."),唯一可能的解决方案是简单地尝试所有可能的子集排列。例如,如果
arr包含50 个元素,那么您必须检查所有(2^50 - 1) == 1,125,899,906,842,623可能性!!! -
@d123 购买一台量子计算机。