有点干的氵贴
修改于2020/10/13101 浏览综合
(缝合怪式搬运)比较常见的“随机”程序大概有以下几种:
1.PRD
是Pseudo Random Distribution算法的缩写,
比如DOTA的暴击机制,
这个游戏中的暴击率是会上下幅动的,
在此次攻击没暴击的情况下暴击几率会上升,
暴击后回到原来数值(有大佬测试过,有数据)
2.洗牌算法.
洗牌算法最典型的应用
莫过于音乐播放器的随机播放。
在最早期的时候,
播放器的随机播放就是采用的“真随机”
但是用户很快就发现,
经常会遇到接连播放同一首歌,
或者连续多次在几首歌之间来回切换,
而另外某些歌曲几百次也放不到,
后来为了解决这种问题,
使用了洗牌算法
所谓的洗牌算法就是:
如果你的歌单有20首歌,就建立一个1到20的数组,再把这20个数字像洗牌一样洗成乱序,
在洗完之后,如果第一个数字是n,
第一次就播放歌单里的第n首歌,以此类推
其目的是为了使出货分布均匀
注:(“真随机”)用一种叫「Fisher-Yates shuffle」的算法去产生一个完全随机(perfectly random )的播放列表,这个算法据说非常简单,只需3行代码搞定,不过它存在致命弱点。当使用的人(实验次数)多的时候,会出现重复的现象,于是被洗牌算法替代
Fisher–Yates shuffle算法:
其是对有限序列生成一个随机排列的算法,所有的排列是等概率的,该算法是无偏的、高效的,算法的时间正比于乱序的数组(维基百科),也就是说这种“伪随机”,当我们不知道它初始的数组的时候,等效于“真随机”
3.组合随机.
所谓的组合随机,
典型的应用就是在抽奖的时候进行两次判断:
一次不随机:根据预设好的确定数组,
给予玩家对应的chest,
这一次主要是用于确定奖品品质。
一次“真随机”:
从选中的chest中
随机抽取一件物品给玩家。
这一次就是从对应品质的奖品堆中
随机获取一件物品,
最典型的例子就是《我叫MT》的手游,
在这个游戏,第几次抽奖能中紫卡完全确定,
但是你具体抽到哪一张紫卡则是随机的,
关于“真随机”
这,就是一个很哲学的问题了。如果有一副空白扑克,上帝在每一张的上面都已经随便写上了一个数字,如果你无法查看也无法修改这些数字,那么对于需要一张张摸牌的你来说,这些数字究竟算随机的还是确定的?每个人的看法或许都不一样。但是,无论你的看法如何,至少在表现出来的效果上,这副牌就是随机的。同理对于程序中的种子随机:如果你无法查看也无法修改随机种子,那么程序用伪随机方法所产生的随机数在表现出来的效果上就等同于真随机。用伪随机进行大规模的模拟,其统计结果也会与数学计算出来的期望相符——————————————————————————那么你游到底是哪一种呢?
