题意:
你有n台分布的服务器,用来分配id给客户端。id池大小为N。
每台服务器负责分配
ai
个id出去
现在有两个方案
1)每台服务器每次分配都是随机的
2)每台服务器记下它分配过的id,然后只分配没用过的
思路:
1)所有分配都是一样的。。
2)中想清楚样本空间是怎样变化的就好了,每台服务器一开始是N,然后每分配一个减少1
class Collision
{
public:
double probability(vector <int> assignments, int ids)
{
double p1 = 1.0, p2 = 1.0, n = ids, d;
int sum = 0;
for (int i=0;i<assignments.size();++i) {
sum += assignments[i];
d = ids;
for (int j=0;j<assignments[i];++j) {
p1 = p1 * n/ids;
p2 = p2 * n--/d--;
}
}
if (sum > ids) return 0;
return abs(p1 - p2);
}
}