使用以下算法预计可获得近似最小值的更新次数

时间:2016-01-27 17:50:38

标签: algorithm probability min

请考虑以下代码:

public int find_exponent(array) {
    int count = 0;
    double min = epsilon;
    for (int i=0; i<array.length; i++) {
      if (array[i] < min) {
        count++;
        min = min/2;
      }
    }
    return count;
}

假设输入数组长度为n并且从某个未知密度f随机生成(并且条目是iid和范围[0,1])。计数的预期价值是多少?我理解,因为底层密度未知,所以不可能得到一个明确的解决方案,但我想要的是f(或相应的CDF:F)和min(即epsilon)的初始猜测。

注意:我不想找到给定数组中的确切最小值

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式解决此问题。

首先,我认为min的类型应为float/double,因为数组array的值在[0, 1]范围内。现在,将F定义为

F(x) = P(X <= x)

,即累积密度函数和G(i, c)i-th迭代后我们count == c

的概率

你可以看到:

G(x, c) = P(X >= eps/2^c)*G(x, c) + P(X <= eps/2^(c-1))*G(x, c-1) =
(1-F(eps/2^c))*G(x, c) + F(eps/2^(c-1))*G(x, c-1)

请注意,自G(0, 0)=1以来,我们可以使用自下而上的方法计算G(x, c), for 0<=x<=n, 0<=c<=n

以下是G的第一对值:

G(0, 0) = 1

G(1, 0) = 1-F(e)
G(1, 1) = F(e)

G(2, 0) = (1-F(e))^2
G(2, 1) = F(e)(1-F(e)) + F(e)(1-F(e/2))
G(2, 2) = F(e)F(e/2)

预期的count将是:

E[count] = 0*G(n,0)+1*G(n,1)+...+n*G(n,n)