多少次你应该改变方针政策吗?

我们说一副扑克牌完全打乱如果是不可能预测哪些卡片是接下来当他们处理一次。所以洗好的牌完全就像一个好的随机数生成器。我们看到在我以前的文章,一个完美的完美洗牌未能彻底洗牌。但是一个涟漪洗牌,一些随机性在这个过程中,可以产生完整的洗牌。多少重复分割打乱,?

“停止洗牌和交易”。

内容

背景

我学到了这个话题从我的朋友尼克Trefethen,牛津大学教授和一个MATLAB爱好者。2000年,他和他父亲写了一篇论文,“多少打乱随机扑克牌吗?”。他们把工作Persi Diaconis和同事。Diaconis是斯坦福大学的教授,一个世界级的魔术师曾写过关于概率的广泛参与活动,比如卡洗牌和硬币翻转。

我想描述一些模拟再现截止现象Trefethens和Diaconis调查。

不断上升的序列

分析是基于的数量不断上升的序列洗好的牌。崛起的序列是一个最大的子集卡片增加流水号。一副的联盟seguences上升。这里是一个例子,一个小甲板只有八个卡片。

v = [3 1 2 4 5 7 8 6];

有三个序列上升这个例子。

[1 - 2];(3 4 5 6);8 [7];

签名

我们定义的签名的甲板上升序列的数量。这是棘手的,但优雅,计算一个甲板的签名v。甲板上找到排列vbar这逆转v的地方,然后数一数vbar有一个负一次差。

类型签名
功能团体=签名(v);[~,vbar] = (v)进行排序;sig =总和(diff (vbar) < 0) + 1;结束
sigv =签名(v)
sigv = 3

让我们看看这是如何工作的例子。

[~,vbar] =排序(v) d = diff (vbar) < 0;disp (' d = ')disp ([' 'sprintf (' % 6.0 f 'd)))团体=和(d) + 1
vbar = 2 6 1 3 4 8 5 7 d = 0 1 0 0 0 1 0团体= 3

Unshuffled甲板

unshuffled甲板的n卡,新鲜的包,用向量表示v = 1: n。这有一个长序列上升,所以签名是1。如果你改变顺序,每张卡片本身是一个单例上升序列,所以甲板的签名n。这是签名的最小和最大可能的值。

n = 52个;v = 1: n;sig_min =签名(v) sig_max =签名(fliplr (v))
sig_min = 1 sig_max = 52

完美的打乱

我们看到在我以前的文章“出去”完美的洗牌将第一个和最后一个卡在第一个和最后一个位置,而”“完美洗牌插入这些卡片在第二和倒数第二的位置。下面是他们的排列向量。

m = n / 2;撅嘴=重塑([1:m;m + (1: m)), (1, n));销=重塑([m + (1: m);1:m], (1, n));

都打乱生产甲板与两个上升序列从甲板上的两半。所以他们的签名都是等于2。

sig_pout =签名(v(撅嘴))sig_pin =签名(v(销))
sig_pout = 2 sig_pin = 2

这些签名撅嘴是太小;只是两个上升序列的存在表明完美打乱不产生完全打乱的结果。

随机排列

洗好的牌完全可以通过传播获得的卡片放在桌上,然后捡起一次随机的顺序。这将是一个随机排列的整数1:52。让我们检查签名的随机排列。我们将产生一百万个样本,然后正常化的直方图生成的签名,这样就变成了一个概率分布,\ sigma_ \ infty美元。这是签名的分布完全甲板。我们的目标是接近这个分布与分割洗牌。(为了减少出版时间,分布分别计算)。

类型compute_sigma_inf
ksamples = 1000000;s = 0 (ksamples, 1);k = 1: ksamples v = randperm (n);年代(k) =签名(v);结束sigma_inf =嘘(年代,0:n) /长度(s);保存sigma_inf sigma_inf
负载sigmas_52情节(0:n, sigma_inf) plot_details_inf

金宝app

\ sigma_ \ infty美元分布集中在26日和27日,从这两点迅速减少。下面是所有概率的指标和价值大于.005。这告诉我们,完全打乱甲板26或27增加18.4%的时间序列,不到21岁或超过32增加序列是不太可能。

金宝app支持(sigma_inf .005)
21日22日23日24日25日26日27 28 29 30 31 32 0.0061 0.0193 0.0480 0.0942 0.1471 0.1840 0.1841 0.1467 0.0936 0.0475 0.0196 0.0062

涟漪洗牌

在这个模型中有两个来源的随机性。甲板上切割深度取决于一个随机数从二项分布集中在它的中点。卡片然后激起涟漪。在每一步的概率下卡滴从削减削减的大小成正比。

类型涟漪
函数输出电压=分割(v) %分割洗牌。%输出电压=分割(v) %减少甲板约一半。n =长度(v);m = binornd (n, 0.5);%二项分布%交错削减。输出电压= 0 (1,n);i = 1;j = m + 1;k = 1: n %选择减少释放下一个卡。%概率的大小成正比。 if rand*(n-k+1) < m-i+1 vout(k) = v(i); i = i+1; else vout(k) = v(j); j = j+1; end end end

这里是一个分割洗牌的新鲜的甲板。结果几乎肯定会有一个签名等于2,但签名可能只有1在极不可能的事件,整个第一落在一丛之前的第二次减少。

v =分割(1:n);deck_view (v)标题([一个涟漪,签名= 'int2str(签名(v))))

这里有三个浅滩的甲板上。结果可能是一个签名等于8,尽管任何较小的值是可能的。

v =成功(分割(分割(1:52)));deck_view (v)标题([' 3浅滩、签名= 'int2str(签名(v))]) snapnow关闭

重复分割打乱

找到的概率分布生成的重复分割洗牌r次了。表示通过\ sigma_r美元。

类型repeated_riffles
函数sigma_r = repeated_riffles (n, r, ksamples) % sigma_r = repeated_riffles (n, r, ksamples) %签名r分布重复分割打乱。s = 0 (ksamples, 1);k = 1: ksamples v = 1: n;j = 1: r v =分割(v);结束年代(k) =签名(v);结束sigma_r =嘘(年代,0:n) /长度(s);结束

计算分布

为每个值r之间的0征求,样品签名\ sigma_r美元观察当甲板承受r重复分割打乱。

征求= 14;类型compute_sigmas
σ= 0(征求+ 1,n + 1);ksamples = 1000000;r = 0:征求σ(r + 1:) = repeated_riffles (n, r, ksamples)结束(开关)保存
负载sigmas_52

例如,\ sigma_3美元。几乎95%的分布集中在最大的签名,8。略高于5%的支持有一个签名的范围5 - 7所示。金宝app

r = 3;情节(0:52σ(r + 1,:)“。”)plot_details_r

这是\ sigma_3美金宝app元的支持。

金宝app支持(σ(r + 1:), 0)
5 6 7 8 0.000001 0.000424 0.050308 0.949267

这里是所有的\ sigma_r美元。正如所料,他们似乎是朝着美元\ sigma_ {\ infty} $。

情节(σ',“。”)plot_details_sigma

总变差

全变差范数是一个非常通用的概念,测量两个概率分布之间的距离。在我们的情况下它只是1-norm的差异,按比例缩小的1/2这是在0和1之间。

norm_tv = @ (s1, s2)(1/2) *规范(s1-s2, 1)
norm_tv = @ (s1, s2)(1/2) *规范(s1-s2, 1)

重复的皱纹全变差

为每个值r之间的0征求,样品签名\ sigma_r美元观察当甲板承受r重复分割打乱。比较这个和美元完全打乱分布\ sigma_ {\ infty} $和计算的总变异。

电视= 0(征求+ 1,- 1);r = 0:做电视(r + 1) = norm_tv(σ(r + 1,:), sigma_inf);结束disp (“电视= ')流(“% 12.6 f \ n”、电视)
电视= 1.000000 1.000000 1.000000 1.000000 1.000000 0.923751 0.613194 0.333949 0.166832 0.084924 0.042375 0.021786 0.010285 0.004999 0.001935

做一个gif动画。

类型make_tv_movie
gif_frame (html / tv_movie.gif);r = 0:征求情节(0:n[σ(r + 1:);sigma_inf]”、“。”) plot_details_movie gif_frame(2)结束clf gif_frame (2)

有多少?

需要多少涟漪打乱生产完全洗好的牌?情节的总变化的函数重复的数量。的价值电视徘徊在非常接近1.0前四个打乱,然后五到九打乱它迅速下降低于0.1。这是截止的现象。

情节(0:征求,电视,“啊——”)plot_details_cutoff

需要7打乱总变异低于0.5。结论是,大约7涟漪打乱通常是必要的,足以产生一个完全洗好的牌。用严格的概率分析Diaconis达到这一结论。Trefethen看到截止与权力和pseudospectra分析涉及矩阵。

四个甲板

以下是截止情节的动画和四个甲板,所以n = 208。分布的随机排列,美元\ sigma_ {\ infty} $,更加分散。但截止的形状是相同的,只是三打乱后发生。

这里的结论是,大约十涟漪打乱通常是必要的,足以完全洗牌四个甲板。

n = 208;负载sigmas_208disp (“电视= ')流(“% 12.6 f \ n”、电视)
电视= 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.999555 0.913595 0.601832 0.328962 0.168368 0.083952 0.042310 0.021535

情节(0:征求,电视,“啊——”)plot_details_cutoff

确认

非常感谢与这篇文章尼克Trefethen求助。

引用

l . n . Trefethen和l . m . Trefethen”多少打乱随机扑克牌吗?”,诉讼:数学、物理和工程科学456,2000年。< http://www.jstor.org/stable/2665604>。< http://people.maths.ox.ac.uk/trefethen/publication/PDF/2000_87.pdf>。

Gudbjorn f·琼森和劳埃德n . Trefethen“数值分析师看着截止现象在洗牌和其他马尔可夫链”,数值分析(ed。d·f·格里菲斯·d·J。Higmam和g·a·沃森),addison - wesley, 1998年。< http://people.maths.ox.ac.uk/trefethen/publication/PDF/1997_74.pdf>。

戴夫拜耳和Persi Diaconis,“落后于燕尾洗牌的巢穴”,上概率2,1992年。< http://projecteuclid.org/download/pdf_1/euclid.aoap/1177005705>。

一个了不起的一系列视频采访Persi DiaconisNumberphile




发表与MATLAB®R2016a

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。