新しく発言する  EXIT  インデックスへ

リフルシャッフル(トランプ)による擬似乱...


  リフルシャッフル(トランプ)による擬似乱数 山中和義 2008/04/15 13:22:30 
  p進法での循環小数 山中和義 2008/04/15 13:25:29 

  リフルシャッフル(トランプ)による擬似乱数 山中和義 2008/04/15 13:22:30   ツリーへ
リフルシャッフル(トランプ)による擬似乱数  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/04/15 13:22:30

!トランプカードのリフルシャッフル(半分にしたカードを1枚ずつ交互に重ねていく)
!例. 10枚の場合
! 0 回目 1 2 3 4 5 6 7 8 9 10
! 1 回目 6 1 7 2 8 3 9 4 10 5
! 2 回目 3 6 9 1 4 7 10 2 5 8
! 3 回目 7 3 10 6 2 9 5 1 8 4
! 4 回目 9 7 5 3 1 10 8 6 4 2
! 5 回目 10 9 8 7 6 5 4 3 2 1 ※反転
! 6 回目 5 10 4 9 3 8 2 7 1 6
! 7 回目 8 5 2 10 7 4 1 9 6 3
! 8 回目 4 8 1 5 9 2 6 10 3 7
! 9 回目 2 4 6 8 10 1 3 5 7 9 ※偶数、奇数
!10 回目 1 2 3 4 5 6 7 8 9 10 ※元に戻る
!  :
!  :


FUNCTION xRND !一様乱数 ※線形合同法(乗算合同法)
LET seed=MOD(a*seed,m) !Xn+1=(a*Xn+c) mod m
LET xRND=seed/m ![0,1)
END FUNCTION


LET N=10 !カードの枚数 ※偶数


LET a=N/2+1 !乗数
LET m=N+1 !法
LET seed=1 !カードの列位置 2,3,4,…,10で確認すると、、、


PRINT seed
FOR i=1 TO N
PRINT xRND*m !乱数列
NEXT i


END



!参考 http://hp.vector.co.jp/authors/VA008683/Random.htm
  p進法での循環小数 山中和義 2008/04/15 13:25:29   ツリーへ
Re: リフルシャッフル(トランプ)による擬似乱数  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/04/15 13:25:29
p進法での循環小数

!真分数1/11の6進法での循環小数 0.{0313452421}(6) を求めてみる。
!
!整数部分
!    =0+1/11 ※帯分数を求める
!小数部分
! 6*1/11=0+6/11 ※分数の部分を6倍して、帯分数を求める
! 6*6/11=3+3/11
! 6*3/11=1+7/11
! 6*7/11=3+9/11
! 6*9/11=4+10/11
! 6*10/11=5+5/11
! 6*5/11=2+8/11
! 6*8/11=4+4/11
! 6*4/11=2+2/11
! 6*2/11=1+1/11 ※分数の部分の分子が1になったので、循環する
!  :
!  :
!
!この計算過程で、分数の部分の分子が1列目に相当する。
!
!2列目は、2/11。3列目は、3/11。 ... 10列目は、10/11。


LET N=10 !カードの枚数 ※偶数

DIM c(N) !N枚のカードの順番 ※c(1)は1番目、c(2)は2番目、...

PRINT " 0 回目";
FOR k=1 TO N !最初は整列しておく
LET c(k)=k !※カードの数字とは別に連番を振る
PRINT c(k);
NEXT k
PRINT

FOR i=1 TO N !シャッフル
PRINT i;"回目"; !回数
FOR k=1 TO N
LET c(k)=MOD((N/2+1)*c(k),N+1)
PRINT c(k);
NEXT k
PRINT
NEXT i

END

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。