1

这个问题的启发,提问者假设系统的用户很少会在彼此完全相同的时间采取一些行动。

鉴于我知道做出这样的假设,我可以保证用户实际上会同时做一些事情。但是,我不知道您将如何实际计算预期的碰撞频率。

例如,如果我们假设每个用户每 3 分钟执行一次操作,而我们的计时器实际上只精确到毫秒,那么计算碰撞频率的公式是什么?

给定生日问题的维基百科条目可以概括为公式 生日问题 其中 d 是 180,000 毫秒,p 是碰撞概率。

因此,假设有 3 个用户,我们在任何给定的 3 分钟时间内得到 2.4996E-05 发生碰撞的概率。

那么问题就变成了白天发生碰撞的可能性有多大?工作日有 60-*60*8/3 = 9600 个 3 分钟周期,那么任何一天发生碰撞的概率为 1-((1-2.4996E-05)^9600) = 21%。事情变成梨形的可能性很大。

4

5 回答 5

2

在 3 分钟内,您将有 180000 毫秒。如果您知道用户数量,则可以使用生日悖论的概率来确定发生碰撞的几率。

还要考虑到您的计时器可能不精确到毫秒,即使它可能以毫秒为单位。许多计时器基于每秒运行少于 1000 次的滴答声。

于 2011-02-23T03:29:16.733 回答
1

要获得碰撞频率,只需在 1 毫秒间隔内获得碰撞概率,然后按比例放大到您喜欢的任何间隔(例如,乘以 1000 以获得每秒碰撞次数)。

为了得到这个概率,得到概率在 1 毫秒时间间隔内没有冲突的概率?这就是在该时间间隔内行动的用户数量为 1 或 0 的概率。

如果有n用户,并且特定用户在时间间隔内采取行动的概率为p,则

P(0) = (1-p) n = 1 - np + n(n-1)p 2 /2 - ...
P(1) = np(1-p) n-1 = np - n(n -1)p 2 + ...
P(0 或 1) = 1 - n(n-1)p 2 /2 + ...
P(大于 1) = n(n-1)p 2 /2 + ...

现在插入一些数字:每 3 分钟一次给出 p=1.8x10 -5,因此碰撞概率约为

n(n-1)(3.24x10 -10 )

所以如果我的计算是正确的,如果你有 100 个用户,你大约每十分钟就会发生一次碰撞。

于 2011-02-23T04:05:46.423 回答
1

3 分钟 = 180 秒 = 180000。将此 M 称为毫秒。

你有多少用户?假设有N。

在 3 分钟的时间段内,用户 1 吞噬了一毫秒 - 180000 免费,180000 可能 - 那是 180000/180000 = 1 次成功的机会。

下一个人:179999 / 180000 机会获得一个好位置。下一个人:179998 / 180000 机会获得一个好位置。

所有这些的机会是

 180000 * 179999 * 179998 . . .
--------------------------------
 180000 * 180000 * 180000 . . .

简而言之:

 N! / ((N^N)*(N-M)!)
于 2011-02-23T03:23:36.913 回答
0

这个问题的关键是知道一个事件在一个区间内发生的概率,以及知道该事件需要多长时间才能完成。那么两者的概率将是在第一个事件持续期间发生第二个事件的概率,以第一个事件的概率为条件。

现在,您通常可以根据Bayes Rule来计算它。

于 2011-02-23T03:20:39.660 回答
0

CollisionFreqPercent = ( AccuracySecs / (ActionDelaySecs / ConcurrentUsers ) ) * 100;

例如:

1 个用户 = ( 0.001 / ( ( 3 * 60 ) / 1 ) ) * 100 = 0.00055% 在任何给定时间发生碰撞的几率

1000 个用户 = ( 0.001 / ( ( 3 * 60 ) / 1000 ) ) * 100 = 0.55% 在任何给定时间发生碰撞的几率

于 2011-02-23T03:26:17.347 回答