洗牌算法怎么样才够乱
【洗牌算法怎么样才够乱】 我非常喜欢这种对自然语言中的词汇去较真的问题。比如定义:洗牌过程中,到底什么是“乱”?
我认为对“乱”的一个合理的定义就是:一副扑克54张牌,有54!种排列方式。你所给出的洗牌算法,应该能够等概率地生成这54!种结果中的一种:)
经典的Fisher-Yates算法之所以经典,就是用很低的耗费:O(1)空间和O(n)时间,完成了这个任务。当然一个显而易见的解法是生成所有54!种排列然后随机抽取,但是稍微计算一下就会明白这样做空间复杂度和时间复杂度都是不可以接受的:)
■网友
http://www.jianshu.com/p/1a23d7c28d49这是我第一次接触洗牌算法,也强烈建议题主实现一下这个算法
■网友
这个乱不乱还真是不好懂。。。以下为个人猜测:面试官的评价,大概是指random函数因为seed的限制而导致了同一个seed所造成的随机数序列总是一定的这种伪随机性质吧。也就是说如果能够预测你洗牌时所用的seed的值理论上你洗完牌之前我就能知道你的洗牌结果,听起来很老千的感觉。。。经典的洗牌算法大概是Fisher-Yates算法吧,具体的google一下会有一大把。其他还有一些算法,比如模拟双手洗牌再多次重复,以及将所有54!种排列全部列出来然后随机抽其中一个排列等。 记得@陈皓的文章也提到过。单纯讨论乱的话,我觉得还是应该向随机数生成的部分找办法。Mersenne Twister法算是个不错的方案,在低于623次元的空间以内不存在线性回归。其余的随机数生成方法没涉猎过就不提了,题主自行google吧,hash算法看起来是个不错的方向。
推荐阅读
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 青年|一汽奔腾T77怎么样?车主吐槽:后排座椅太短,和坐小板凳似的
- 电商网站支付流程的流失率是怎么样的从用户点击充值/支付按钮,到支付完成,其中每一步的流失比率都是咋样的
- 作为一个服装供应商,怎么样与淘宝卖家沟通才能卖出自己的产品或者拿到订单
- 在丁丁租房工作的感受是怎么样的
- 城市数据团是怎么样一个团队
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 猫扑网南迁广西,媒体唱衰BBS,论坛的未来会怎么样怎样改变
- 被人围攻是怎么样一种体验,包括但不限于(蛋糕,口舌,拳脚,西瓜刀,机枪,code review)
- o2o模式的电商怎么样进行线上线下的引流
