洗牌这种技术活,我相信大家都有玩过,虽然手法各不相同,但是目的大部分应该是一样的,就是把牌的顺序打乱,创造一个公平的玩牌氛围。
洗牌算法(Shuffling Algorithm),顾名思义,它的产生是用来解决类似洗牌这种场景的问题的,目的是产生一串等概率的随机列,使得很难去预测牌的顺序。现在的各种牌类游戏都有自己的洗牌算法,为了保证游戏的趣味性,各自的实现中都有自己考虑的因素添加在其中。今天与大家分享的是名为Knuth Shuffle的洗牌算法,在TAOCP中可以找到,但是呢,这个算法其实不是高爷爷的原创,它的自然语言版本是在1938年由R.A. Fisher and F. Yates发表的,而程序语言的版本是1964年由R. Durstenfeld提出的。
算法描述: