Re: [心得] 朴克牌13支

楼主: aqtx4869 (死神之药)   2014-04-19 16:59:38
爬旧文想说充实一下自己的想法
文章有点旧
(是对于洗牌的写法)
但对于stonehomelaa版友提出来的第二个方法有点疑问
为什么被对换的牌是
j = rand() % (52-i);
而不是
j = rand() % (52);
是都可以吗? 还是这样做会出现问题?
※ 引述《stonehomelaa (cousin)》之铭言:
: ※ 引述《papalun (谜样人物)》之铭言:
: : for (i=0;i<52;i++)
: : {
: : j=rand()%52;
: : temp=A[i];
: : A[i]=A[j];
: : A[j]=temp;
: : }
: 本来我也认为打乱阵列是这么做的
: 不过之前看了深度学习C++网站上的试读章节
: 里面范例有提到两种做法
: 其一是阵列元素由后往前与其前的随机位置对调
: for (i = 52 - 1; i > 0; i
作者: LiloHuang (十年一刻)   2014-04-19 17:10:00
Fisher-Yates shuffle 算法 http://goo.gl/gNiuwb发现连结有点弄错,http://goo.gl/A3oR1x 这个才对如果是用 % 52 来做会跟算法本质不一致,机率会不均匀是的,只是这样意义就不大了,跟算法本质就不同 XD
作者: stimim (qqaa)   2014-04-19 18:01:00
最简单的想法是,均匀洗牌有52!种结果,rand()%52 有 52^52种“过程”,所以一定不是均匀分布
作者: LPH66 (-6.2598534e+18f)   2014-04-20 01:48:00
52-i 可以理解成我每次从剩下的牌堆抽一张出来放好那个剩下的牌堆的张数就是 52-i唔, 仔细看了一下确实如你所说, 要 +i 才是对的

Links booklink

Contact Us: admin [ a t ] ucptt.com