1.0.1 • Published 4 years ago

@kaokei/rad v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

github 地址

解决了什么问题?

本来的打算是随机生成一组数字,但是同时想要足够的平均分布。现在有三种方案。

方案一:randomMulti

多次调用 randomOne,每次调用都是独立的。

方案二:evenlyDistributed

先把区间平均分成 N 份小区间,然后在每个小区间中调用 randomOne。

方案三:randomDistribution

不像方案一都是独立的在整个区间重复调用 randomOne。

也不像方案二,先平均分割区间,然后在每一个独立的小区间获取随机数。

方案三整体上比较像方案二,但是关键区别是不是固定分割正 N 份小区间,每个小区间都是动态分割的。 动态分割的原则是把上一次小区间的结束点当作下一次小区间的开始点,同时保证每次小区间的中心点和方案二的小区间的中心点一致。

方案结果分析

实验介绍:N, X, Y,代表从 X ~ Y 区间内获取 N 个随机数。

计算所有点的方差的平均值

每个实验重复了999999次,然后计算每次实验的方差,然后计算999999次实验的方差的平均值。

实验方案一方案二方案三
10, 10, 208.2524753858087199.1666666666666669.209847243180576
100, 200, 300833.0819312473858841.6666666666666841.8500780808862
100, 20000, 300008333253.2179629398417473.3317201328417988.098825537
1000, 3000, 400083330.7070880786383416.6666666666783416.83278424051
1000, 30000, 400008333657.1964465348341674.789364798341683.896522445
10000, 40000, 500008333425.4166018948334166.6666666678334166.894598825
10000, 400000, 500000833345603.0048352833416678.1441561833416675.8027935

计算所有点的所有距离的平均值

每个实验重复了9999次,然后计算每次实验的所有点之间的总距离,然后计算9999次实验的总距离的平均值。

实验方案一方案二方案三
10, 10, 20148.42154215421542165159.4152415241524
100, 200, 300164924.1313131313166650166585.6787678768
100, 20000, 3000016492614.75877587716665088.80978097816661934.168416841
1000, 3000, 4000166476310.54945496166666500166665775.3212321
1000, 30000, 400001665350644.93779371666664603.82898281666661881.3132312
10000, 40000, 50000166648706091.47205166666665000166666656572.44916
10000, 400000, 5000001666452658179.09181666666649632.5671666666667495.2444

计算所有点的最大距离的平均值

每个实验重复了9999次,然后计算每次实验的所有点之间的最大距离,然后计算9999次实验的最大距离的平均值。

实验方案一方案二方案三
10, 10, 208.00820082008200898.439443944394439
100, 200, 30097.824582458245839998.45024502450245
100, 20000, 300009798.961896189629899.8467846784689870.76397639764
1000, 3000, 4000997.8632863286329999998.4559455945595
1000, 30000, 400009979.9947994799489989.9704970497049986.830483048305
10000, 40000, 500009997.85548554855499999998.459345934594
10000, 400000, 50000099980.1385138513999990.0161016101699986.84378437843

总结

通过上面的数据可以发现,3 中算法得到的随机结果差别不大,基本可以说没有差别,这一点是完全出乎意料之外的。 我本来的预期是方案一可能会相对比较集中,不够平均分布。方案二则是太过于平均。方案三则是介于方案一和方案二之间。 虽然从数据上分析来看,从相对数据来说大多数实验确实是符合预期的,但是效果太不明显,效果基本可以忽略不计。

尤其是从最大距离这个角度来看,因为生成的左右点之间的最大距离越大,说明分布越平均。方案一最小,方案二最大,方案三在中间。 只不过大家都在一个数量级别,没有明显的效果提升。