码迷,mamicode.com
首页 > 其他好文 > 详细

Decrease error rate for loop.

时间:2014-12-15 10:38:34      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:interview

Quesiton:


Given a method

long compute(int i)
{
  return ...
}

The error rate p = 1 / 10,000


Another method

long total(int n)
{
  long s = 0;
  for (i = 0 ; i < n ; i ++)
  {
    s += compute(i);
  }
  return s;
}

Thus the error rate is np.


How to improve the second method to control its rate below p.


total will run n steps. So to make the total rate below p.

each step need to below p / n.


let‘s run compute k times when

(p ^ k < p / n).

long total(int n)
{
  int k = calcComputeTimes(n);
  
  long s = 0;
  for (int i = 0 ; i < n ; i++)
  {
    s += safeCompute(i, k);
  }
  return s;
}

// Find the min value of k when P^k < p/n
int calcComputeTimes(n)
{
  double temp = p / n;
  int k = 1;
  while(pow(P, k) >= temp)
  {
    k ++;
  } 
  return k;
}

// Runs compute() k times to find the most possible results.
// If the possible of two results are the same, return the first computed one.
double safeCompute(i, k)
{
  Map<Double, Integer> computeMap = new HashMap<>();
  int maxOccurSeen = 0;
  double result = 0;
  for (int t = 0 ; t < k ; t ++)
  {
    int r = compute(i);
    Integer occur = computeMap.get(r);
    if (occur == null)
    {
      occur = 1;
    }
    computeMap.put(r, occur);
    if (occur > maxoccurSeen)
    {
      maxOccurSeen = occur;
      result = r;
    }
  }
  return result;
}

static double P = 1 / 10,000;


Decrease error rate for loop.

标签:interview

原文地址:http://7371901.blog.51cto.com/7361901/1589955

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!