问题陈述:给予顾客一张折扣率在1%至100%之间的优惠券。
假设板是预定义的(都是理论上的)。
1%折扣: 90%客户 10%折扣: 5%客户 20%折扣: 3%客户 100%折扣: 2%客户
解决方案1:
对于每100个客户,我将预先填充一个大小为100的随机数组,并使用一个很好的洗牌算法。
901s(1= 1%折扣) 510s( 10 = 10%折扣) 3 20( 20%折扣) 2 100次( 100%折扣)
每当有顾客来的时候,我会抽签random.nextInt(100)并得到折扣百分比
解决方案2:
使用nextGaussian()的SecureRandom,因为它是一个分布式随机算法。
如果我们要严格遵循%,哪一个更准确?
请参阅随机性中的示例1和3
提前谢谢。
发布于 2015-08-27 20:16:54
这种分布是均匀的,因此高斯分布在这种情况下的应用是有限的。统一的分布是你所需要的。
我对你面临的问题的理解是,你希望结果有一个特定的分布(太多的折扣可能是非常昂贵的),但否则它应该是随机的,因为在不可预测。如果你只是安排了100种可能的折扣,分类,并在一个周期中使用,这种安排将是可预测的。即使你改变了每一个周期100的订单,注意的人可能知道什么时候得到好的折扣的几率会高于或低于正常水平(有点像Blackjack中的计数卡)。
我认为你需要的是一个储层取样算法。最简单的情况是,如果你知道总共会有多少个项目(比如多少折扣券)和如果有两个类别(胜利者和输家)。然后维基百科文章中的代码可以按原样使用。这个问题似乎少了多个类别的文献(100%,20%,10%,1%),也不知道优惠券的全部数量(比如说,如果这是一个有时间限制的促销活动)。我会继续寻找关于这一主题的论文,但我认为这是总的想法。
发布于 2015-08-26 19:01:30
如果我们要严格遵循%,哪一个更准确?从每100名顾客中给予一名顾客100%的折扣。
都不是因为这不再是随机的了。如果您希望在给定的时间间隔内得到精确的分布,则必须使用不同的策略。使用所需的值分布填充Collection,对其进行洗牌,并将值分配给客户。
发布于 2015-08-26 18:48:06
我想准确性是一样的。但是我更喜欢nexInt,因为在这种情况下计算块比较容易。
https://stackoverflow.com/questions/32233896
复制相似问题