Javascript 什么';在一个数下求最大数的算法是什么?

Javascript 什么';在一个数下求最大数的算法是什么?,javascript,algorithm,math,Javascript,Algorithm,Math,好吧,那么。。。我有一个从0到1的数字列表。假设列表有20项,例如: [0.3573617561804454, 0.07342389373929337, 0.06378891650870389, 0.5511799059130659, 0.2149869017013486, 0.9078793201337962, 0.6416645206383136, 0.08612996915296112, 0.3389149731962322, 0.27043204930306286, 0.43942808

好吧,那么。。。我有一个从0到1的数字列表。假设列表有20项,例如:

[0.3573617561804454, 0.07342389373929337, 0.06378891650870389, 0.5511799059130659, 0.2149869017013486, 0.9078793201337962, 0.6416645206383136, 0.08612996915296112, 0.3389149731962322, 0.27043204930306286, 0.4394280879520357, 0.7139129976601778, 0.9426831544676971, 0.5704199007458483, 0.7661935177777641, 0.5012058242125581, 0.3960034601385938, 0.1130034059751527、0.4640564412846996、0.46884307251796087]

我如何找到最接近平均值0.5和低于平均值0.5的组合,包括10个项目

我的第一次尝试是将列表从高到低进行排序,然后取项目1到10个最高的项目,并得到它们的平均值,如果超过0.5,我将取项目2到11,并进行相同的排序,直到低于0.5


这不是最优的,因为在某些情况下,最好的组合可能是一些最高数字和一些最低数字的混合 据我所知,您希望找到小于0.5的最大numeber

def最大值(arr,约束):
最大=arr[0]
对于arr中的num:
如果num>最大且num<约束:
最大=num
回报最大
通过使用filter和max函数,您也可以更简单地完成这项工作

def最大值(arr,约束):
返回最大值(过滤器(λx:x<约束,arr))

最大值为
0.499998852755841
作为
[0.3573617561804454,0.07342389373929337,0.9078793201337962,0.64166452063831136,0.3389149731962322,0.27043204930306286,0.9426831544676971,0.5704199074584833,0.5012058225581,0.3960034601385938]的平均值

由于20选择10仅为184756,因此可以很容易地生成所有组合并求和

结果来自下面的Python代码,但它可以转换为您选择的编程语言,运行时间不到十分之一秒

导入itertools
p=[0.3573617561804454、0.07342389373929337、0.06378891650870389、0.5511799059130659、0.2149869017013486、,
0.9078793201337962, 0.6416645206383136, 0.08612996915296112, 0.3389149731962322, 0.27043204930306286,
0.4394280879520357, 0.7139129976601778, 0.9426831544676971, 0.5704199007458483, 0.7661935177777641,
0.5012058242125581, 0.3960034601385938, 0.11300340597511527, 0.4640564412846996, 0.46884307251796087]
最大值=0
对于itertools中的梳。组合(p,10):
s=总和(梳)
如果s<5且s>最大值:
max_s=s
最大梳=梳
打印(最大s/10,最大梳)
这个问题是和的一个版本,是NP完全问题。链接的维基百科页面提供了一些找到好的近似解的方法


PS:如果您允许使用替换的组合,则组合
[0.3573617561804454,0.3573617561804454,0.551179059130659,0.551179059130659,0.551179059130659,0.551179059130659,0.551179059130659,0.641664520638136,0.5012058225581,0.468843072796087,0.468843072796087]
。使用Python代码(20030010个组合)进行计算已经需要9秒钟。

什么是“最高组合”?Sum?Sum是否应该最接近0.5或每个使用的数字?无法使用json,可能需要删除该标记。您想用javascript或python编写此标记吗?您尝试使用哪种语言?您是否有任何自己的尝试?例如,仅选择前10个?或者可能是暴力方法?具体说明是什么您在自己尝试时遇到的c编程问题?编辑以显示我的尝试并修复了我的标记OP不寻找该问题。他们正在寻找“组合”…我不是在寻找小于0.5的最大数字,我是在寻找平均值低于0.5的最大组合谢谢!有没有办法在javascript中做到这一点?也许可以生成所有组合?