※ 引述《OrO3 (OrO3)》之铭言:
: 虽然现在的可以把乱数做到很像是真实的乱数
: 但函式库的底层其实是依照公式以及表格,去计算出下一个数字的
: 在早期的赌场的吃角子老虎
: 用的就是很脆弱的乱数
: 那时候有两个数学家到赌场去
: 盯着吃角子老虎很久,算出机器出的乱数的规律
: 然后数学家看准时机下了注,赢了大笔奖金
: 我忘记这个故事的后续如何
: 印象中是那两个数学家,被赌场当成是作弊,赶出去了
: 奖金当然也被没收了
: 不知道大家会怎么想这件事
: 这算是利用bug作弊吗?
: 说起来,像FGO的转蛋游戏,也是机率游戏
: 如果有办法透过大量收集数据
: 反推出,几点几分几秒会出SSR
: 导致100次单抽,抽出五十几只五星
: 你会觉得这算是作弊吗?
: PS. 以FGO的程式品质,我是真的觉得有可能反推的出来
其实很多人误以为乱数为了不被发现规律就是得要把函数写的非常复杂
或是参数给得非常多
却往往忽略了内存(空间)成本以及速度(时间)成本
其实只要简单的函式就能够产生够乱的值
而其实有些玩家宣称能在乱数函式中找出规律值往往只是一时间的凑巧
许多像这种拿时间函数,或是拿你的身分证字号,抑或是拿隔壁老王的出生年月日
...等等当参数去对应UR,SSR,特定的强角,SSR安部奈奈,甚至是垃圾
这种x对应于y的方式 我们统称叫hash
换数学式子上,就是在非无限大的集合X与Y使得
f(x) = y (对于所有 x 属于 X, y 属于 Y)
根据鸽笼原理,若N(X) > N(Y) 一定会有两个x1与x2以上使得 x1!=x2
f(x1) = f(x2)
这叫做碰撞
当然会有一些函式 (前提是 N(X) <= N(Y) ) 会让碰撞机率最小
这叫做"perfect hash function"
其实wiki上有列出其中一个perfect hash function
f(x) =( kx mod p ) mod N(Y)
其中p是一个极大的质数, k 只是一个参数
但是最后不论你的f(x)怎么设
还是免不了生日问题
也就是在1~d中任意取(f(x))n个整数(n<=d)使得某两个整数以上一样的机率为
1-(1-1/d)*(1-2/d)* ... *(1-n-1/d)
趋近于 1-e^(-n*(n-1)/(2*d))