バトルファクトリーの最初の6匹を解析してみる その4

シャッフルがどうなっているのか調べるために30回ファクトリーに挑戦して記録をつけてみた。
シャッフル前というのが乱数列に並んでいる順番、シャッフル後が実際に6匹の並び順。
並び順はシャッフル後の要素がそれぞれシャッフル前のどの位置と対応しているかで表記する。たとえば「A,B,C,D,E,F」がシャッフルされて「E,F,D,C,B,A」となったとき、並び順を「5,6,4,3,2,1」のように表記することにする。

6,2,3,4,5,1
1,2,3,4,6,5
1,2,6,4,5,3
6,2,5,4,3,1
6,2,3,4,1,5
1,2,6,4,3,5
6,2,3,4,1,5
1,6,3,5,4,2
6,2,5,4,3,1
5,6,3,4,1,2
1,2,6,4,3,5
5,6,3,4,1,2
6,2,3,5,4,1
1,2,5,4,6,3
1,5,3,6,2,4
6,2,3,4,1,5
1,2,3,4,6,5
1,2,5,4,6,3
1,2,3,4,6,5
1,2,3,5,6,4
6,2,3,4,5,1
1,6,3,4,2,5
1,2,3,4,6,5
6,2,3,5,4,1
1,2,6,5,4,3
1,2,6,4,3,5
6,2,5,4,3,1
1,2,3,5,4,6
1,5,6,4,2,3
5,2,3,4,1,6

まず、まんべんなくシャッフルされていないことは分かる。元の位置から変わっていない要素が多い。
またシャッフル後の位置が1〜4番目である要素に注目すると、元の位置が同じだったもの以外は5か6しかない。
さて、ここから考えられるアルゴリズムは…、「5番目,6番目の要素をそれぞれランダムな位置の要素と入れ替え」とかだろうか。ああ、でもそれだと「1,2,3,4,6,5」が出るはずがないなあ。



6匹の性格値生成から相手の3匹の種類を決定までの間の乱数消費量とシャッフルの結果に何か関係はあるかなと思って出してみた。

2: 6,2,3,4,5,1
2: 1,2,3,4,6,5
2: 1,2,6,4,5,3
1: 6,2,5,4,3,1
1: 6,2,3,4,1,5
2: 1,2,6,4,3,5
2: 6,2,3,4,1,5
2: 1,6,3,5,4,2
2: 6,2,5,4,3,1
2: 5,6,3,4,1,2
1: 1,2,6,4,3,5
2: 5,6,3,4,1,2
1: 6,2,3,5,4,1
2: 1,2,5,4,6,3
2: 1,5,3,6,2,4
2: 6,2,3,4,1,5
2: 1,2,3,4,6,5
1: 1,2,5,4,6,3
2: 1,2,3,4,6,5
2: 1,2,3,5,6,4
2: 6,2,3,4,5,1
1: 1,6,3,4,2,5
2: 1,2,3,4,6,5
2: 6,2,3,5,4,1
2: 1,2,6,5,4,3
2: 1,2,6,4,3,5
2: 6,2,5,4,3,1
2: 1,2,3,5,4,6
1: 1,5,6,4,2,3
2: 5,2,3,4,1,6

シャッフルの結果が同じで乱数消費量が違うものがある。関係ないか。(違うシャッフルの動作で同じ結果になったという可能性もあるけど)



シャッフル結果をグループに分けてみた。

2箇所変わっているパターン
6,2,3,4,5,1
1,2,3,4,6,5
1,2,3,5,4,6
5,2,3,4,1,6

4箇所変わっているパターン
1,2,6,4,5,3
6,2,5,4,3,1
1,6,3,5,4,2
5,6,3,4,1,2
6,2,3,5,4,1
1,5,3,6,2,4
1,2,6,5,4,3
1,5,6,4,2,3

3箇所変わっているパターン
6,2,3,4,1,5
1,2,6,4,3,5
1,2,5,4,6,3
1,2,3,5,6,4
1,6,3,4,2,5

3回のswapを必要とするようなパターンは見ていない。
ex) 1,5,6,4,3,2



30件じゃデータが足りないと思ったのでもっとデータを集める。