标签: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;标签:interview
原文地址:http://7371901.blog.51cto.com/7361901/1589955