【swift 4.2】 新機能 shuffled() を検証する。
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%
・・・偏りなく、シャッフルされているようです。
Author And Source
この問題について(【swift 4.2】 新機能 shuffled() を検証する。), 我々は、より多くの情報をここで見つけました https://qiita.com/BMJr/items/913e031f78f44d9675f8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .