在之前的两篇文章中,我主要对概率约束和样本约束做了比较。
(详情点击 《小样本大概率事件的正确处理方式 - 1. 概率的含义和误差产生的原因》 和 《小样本大概率事件的正确处理方式 - 2. 结果分析》)
结论简单点说就是:概率约束误差大,但是简单;样本约束精确,但是复杂。
从其复杂度上去比较,产生n次随机事件,概率约束的时间复杂度是O(n),空间复杂度是O(1)。而样本约束,由于要提前将样本进行洗牌,其时间复杂度是O(n^2),而为了存放洗牌结果,其空间复杂度是O(n)(实际上应该是和约束样本的大小相关)。
然而前两篇文章只是为了表现两种约束的含义,而并不是我们在写代码时要使用的算法。为了将其区别更清晰地展现出来,我在样本约束中提前处理好了样本,但这并不是必要的。
样本约束的实际目的,是让每个约束周期中(总体样本的数量是我们的约束样本数量的整数倍时就是一个周期)各事件的出现频次与预期完全相符。所以,我们并不需要在第一次随机时就知道最后一次随机的结果,我们只需要知道某一次随机时,各种事件还能在本次约束周期中出现多少次——每次随机后,下一次随机条件会出现相应变化,这就是“动态”的含义。
和上一篇文章的例子一样:我们有一个10大小的约束样本&#