総当り表、直接対決の結果を用いたタイブレイク

総当り対戦で同順位が発生したときによく用いられている、直接対決の結果の利用について。


直感的に分かりやすいのは、対象者のみの総当り表を作成する方法。紙面上で行いやすい。

- 1 2 3 4 5 6 勝利数 順位
1 - × × 3 1
2 × - × 3 1
3 × × - 3 1
4 × × × - 2 4
5 × × - × 2 4
6 × × × - 2 4

- 1 2 3 勝利数 順位
1 - 2 1
2 × - 1 2
3 × × - 0 3
- 4 5 6 勝利数 順位
4 - 2 1
5 × - × 0 3
6 × - 1 2

最初に書いたプログラムはこれだったが、Excel上に総当り表を何回も作成することになるので時間がかかる。

しかし、行列を使えば簡単に計算できた。
まず、対戦結果を勝ち=1、負け=0として行列Aで表す。
次に、対象順位に該当すれば1、しなければ0の行列Bを作る。
ABを求めることで、対象順位に対する勝利数を得られる。

- 1 2 3 4 5 6 勝利数 順位 1位に該当 4位に該当 1位に対する勝利数 4位に対する勝利数
1 - × × 3 1   2 1
2 × - × 3 1   1 2
3 × × - 3 1   0 3
4 × × × - 2 4   0 2
5 × × - × 2 4   2 0
6 × × × - 2 4   1 1

AB=\begin{pmatrix}0&1&1&1&0&0\\0&0&1&1&0&1\\0&0&0&1&1&1\\0&0&0&0&1&1\\1&1&0&0&0&0\\1&0&0&0&1&0\\\end{pmatrix}\begin{pmatrix}1&0\\1&0\\1&0\\0&1\\0&1\\0&1\\\end{pmatrix}=\begin{pmatrix}2&1\\1&2\\0&3\\0&2\\2&0\\1&1\\\end{pmatrix}

Excel上に1度枠を作れば、対戦結果、基準となる順位を更新するだけでよい。


対戦結果によっては、これらの処理を1回行っただけでは不十分な場合がある。
基準となる順位と新しく求めた順位を比較して、以下の条件を満たすまで繰り返す。
条件
1、順位の重複がなくなる。
2、順位は重複するが、基準となる順位と新しく求めた順位が一致。(いわゆる三つ巴の状態)

- 1 2 3 4 5 6 勝利数 基準となる順位
1 - × × 3 1
2 × - × 3 1
3 × × - × 2 5
4 × × × - × 1 6
5 × - × 3 1
6 × × - 3 1

- 1 2 5 6 勝利数 順位
1 - × × 1 2
2 × - × 1 2
5 - × 2 1
6 × - 2 1
- 1 2 3 4 5 6 勝利数 基準となる順位 新しく求めた順位
1 - × × 3 1 3
2 × - × 3 1 3
3 × × - × 2 5 5
4 × × × - × 1 6 6
5 × - × 3 1 1
6 × × - 3 1 1

新しく求めた順位を基準にして再計算

- 1 2 勝利数 順位
1 - 1 1
2 × - 0 2
- 5 6 勝利数 順位
5 - × 0 2
6 - 1 1
- 1 2 3 4 5 6 勝利数 基準となる順位 新しく求めた順位
1 - × × 3 3 3
2 × - × 3 3 4
3 × × - × 2 5 5
4 × × × - × 1 6 6
5 × - × 3 1 2
6 × × - 3 1 1

順位の重複がなくなったので終了。