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