我有一组(选择)随机生成的数字。例如:
13 14 9 10 14 10 10 11 16 9 9 12 10 10 15 16 12 10 13 12 11 13 14 17 12 11 9 15 13 9 16 14 12 10 10 11 11 14 11 15 13 12 8 16 14 10 12 14 12 12 14 9 10 15 8 12 15 13 14 18 12 7 11 11 15 14 17 9 9 10 15 11 13 12 18 14 10 14 10 15 15 13 7 15 12 11 12 14 10 9 12 12 5 8 9 13 16 14 14 13
我的意思是看起来这些数字不是在-100到10000范围内生成的。正确的答案是限制从5到20。
如何定义选择的边界(最低限度和最高限度)?
我觉得我必须以某种方式使用Expected value
或Variance
,但不知道如何。
又一个例子:
35 16 19 21 20 34 24 27 24 24 24 16 33 23 35 23 19 20 19 30 29 25 21 34 14 20 34 16 24 22 27 12 21 20 25 17 21 21 32 21 17 19 20 30 22 21 9 14 24 18 23 24 26 20 13 22 32 21 20 29 21 25 24 18 25 27 22 28 26 13 23 17 28 26 26 30 21 18 23 29 28 28 26 14 17 28 25 19 22 16 25 33 22 20 24 27 32 22 21 27
答案:所有这些数字都来自范围5 - 40
答案 0 :(得分:1)
您可以将您的数字序列加载到SortedSet
,例如TreeSet
,然后利用它具有的最小和最大函数:
TreeSet<Integer> ts = new TreeSet<>();
// add your data using ts.add()
System.out.println("lower bound is " + ts.first());
System.out.println("upper bound is " + ts.last());
答案 1 :(得分:0)
你问的是不可能的。您无法找到用于生成均匀分布的数字序列的边界。
证明这一点的一种简单方法是计算使用各种边界生成给定数字序列的概率。
让min
为系列中找到的最小数量,max
,最大数量,len
,系列的长度。我们希望分别找到low
和up
,用于生成系列的下限和上限。设p(l, u)
为生成系列的概率,其下限等于l
,上限等于u
。
对于任何l > min
,p(l, u) = 0
。同样,对于任何u < max
,p(l, u) = 0
。
对于l <= min
和u >= max
,p(l, u) = (1/(u-l))^len
,因为每个数字的生成概率为1/(u-l)
。现在,我们希望最大化p
,这意味着我们希望找到low
和up
,以便对于任何l
和u
,p(low, up) >= p(l, u)
}。
这很简单:如果f(x) = (1/x)^y
,x > 0
和y > 1
,那么f
的最大值可以达到最小x
。
在我们的问题x = up-low
中,我们希望最小化up-low
,这与最小化up
和最大化low
相同。
这导致了解决方案:up = max
和low = min
。
如果使用的实际边界不是找到的极值,那么猜测真正的边界是不可能的。