java中有一个扑克系统,在发Collections.shuffle()牌之前使用所有可用的牌.
所以收集了52种卡片2-9,J,Q,K,A 4种类型.
在那之后我们Collections.shuffle().
问题是,似乎(直到现在我们没有大的统计数据,我们可能只看到很多统计推断),算法非常不清楚.
那么,Collections.shuffle()扑克算法还可以吗?
评论的答案:"不清楚",我的意思是它在某个时候非常非常神秘.很多用户抱怨"这与现场/其他扑克室不一样".我用这个系统玩了很多,并且必须说,我同意,我看到2000年以下的3个皇家闪光灯在这个系统中起了作用,并且在其他扑克室中有超过100,000个玩牌,我看到2直到今天.
如果这是一个严肃的扑克应用程序,钱可以转手,简短的答案是否定的.对于这样的事情,你应该真正使用真正随机性的硬件源.
稍微长一点的答案是:如果您无法获得真正随机性的硬件,那么如果您提供的话可能就足够了.这个解决方案的棘手部分是找到一个好的种子价值.Collections.shuffle(List, Random) SecureRandom
更新:根据您的澄清,我建议您研究如何播种PRNG(假设您已经使用加密安全实施;如果没有,请先执行此操作).你不应该使用一组有限的种子.其他需要考虑的事项:
在Collection.shuffle使用O(N)实施的费雪耶茨洗牌算法.
并且随机索引是用Java的普通PRNG选择的,因此它将大致相同:每个套牌的每次随机播放都与其他任何一个一样.
这对你想做的事情来说是相当不错的,但是当你想要真正的随机化时,你应该引入一些真正的随机因素(比如System.currentTimeMillis()用于播种随机数生成器)或者更像是专用硬件的东西.
| 归档时间: |
|
| 查看次数: |
2894 次 |
| 最近记录: |