LoginSignup
7
2

More than 5 years have passed since last update.

【swift 4.2】 新機能 shuffled() を検証する。

Last updated at Posted at 2018-09-21

swift 4.2に配列をシャッフルする機能「shuffled()」が加わりました。
以前、
たかがシャッフル、されどシャッフル 〜"permute-with-all" order biasの検証〜
というタイトルで、シャッフル結果の偏りを検証するプログラムを紹介しました。
今回は、このプログラムを用いてswift 4.2の新機能 shuffled()の結果に偏りがないかどうかを検証しました。

        //要素数 = n,試行回数 = repeatCount (自由に変更して下さい)
        let n = 5
        let repeatCount = 100000
        //twoDimArray[要素番号][試行回数何回目か] = 移動先の番号
        var twoDimArray = [[Int]]()
        let originalArray = 0 ..< n
        for _ in 0 ..< n{
            twoDimArray.append([])
        }
        for _ in 0 ..< repeatCount{
            let anArray = originalArray.shuffled()
            for i in 0 ..< n{
                twoDimArray[i].append(anArray.index(of: i)!)
            }
        }
        for i in 0 ..< n{
            var postShuffleCite = [Int](repeating: 0, count: n)
            for j in 0 ..< repeatCount{
                postShuffleCite[twoDimArray[i][j]] += 1
            }
            for k in 0 ..< n{
                let probability = Double(postShuffleCite[k]) / Double(repeatCount) * 100.0
                print("\(i)\(k)番目に移動する確率は、\(probability)%")
            }
            print("\n")
        }

※swift 4.2では0からn未満の整数の配列は、

let originalArray = 0 ..< n

で生成できます。

n = 5、試行回数10万回で検証して以下のような結果を得ました。

0が0番目に移動する確率は、20.077%
0が1番目に移動する確率は、19.899%
0が2番目に移動する確率は、20.127%
0が3番目に移動する確率は、19.954%
0が4番目に移動する確率は、19.942999999999998%

1が0番目に移動する確率は、19.925%
1が1番目に移動する確率は、19.886%
1が2番目に移動する確率は、20.024%
1が3番目に移動する確率は、19.955000000000002%
1が4番目に移動する確率は、20.21%

2が0番目に移動する確率は、20.003999999999998%
2が1番目に移動する確率は、20.06%
2が2番目に移動する確率は、19.902%
2が3番目に移動する確率は、20.141000000000002%
2が4番目に移動する確率は、19.893%

3が0番目に移動する確率は、19.85%
3が1番目に移動する確率は、20.119%
3が2番目に移動する確率は、20.112%
3が3番目に移動する確率は、19.822%
3が4番目に移動する確率は、20.097%

4が0番目に移動する確率は、20.144000000000002%
4が1番目に移動する確率は、20.036%
4が2番目に移動する確率は、19.835%
4が3番目に移動する確率は、20.128%
4が4番目に移動する確率は、19.857%

・・・偏りなく、シャッフルされているようです。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2