トーナメント表を作るアルゴリズム

「トーナメントクリエイター」のトーナメント表を作る際のアルゴリズム(作り方)をご紹介します。
ここでは予選のランキングを元に決勝トーナメントを行う場合を想定しています。
予選ランキングがない場合は、ランダムにランキングを決め配置しています。
※このアルゴリズムが正式な方法かどうかは分かりません。

条件

先ず予選の順位を元にトーナメント表を作る際の条件を、以下の様に設定しました。

1.予選上位はばらけさせる。
2.予選上位は下位と当たる。
3.予選上位は出来るだけ出番を後にする。

1が優先順位が高く、2、3と優先順位が下がります。

具体例(4人の場合)

先ず参加者が4人の場合を考えると以下の様になります。

1位は出番が後になるように、最も右に置きます。
2位は1位と当たらない所で出番の遅い、左から2番目に置きます。
1位と予選順位が低い4位を当てるため、4位を1位の横である右から2番目に置きます。
3位は残ったところに置きます。

これで先にあげた条件を最も反映した4人のトーナメント表ができたと思います。

具体例(8人の場合)

参加者が8人の場合を考えると以下の様になります。

先ず1,2,3,4位をばらけるように、かつ4人の時と同様に1位と4位がに2回戦で当たるように置きます。
その後それぞれ1位に8位、2位に7位、3位に6位、4位に5位を置きます。

仕組みを考える

上の2つのトーナメント表を見ると、いくつか特徴があります。

4人のトーナメントの一回戦の順位を足すと「5」になる
8人のトーナメントの一回戦の順位を足すと「9」になる

つまりトーナメントの人数プラス1になっています。

更に4人と8人のトーナメント表を比較すると、
4人のトーナメント(3,2, 4,1)のそれぞれ左側に、足したら9になるような数字を置くと8人のトーナメント(6,3, 7,2, 5,4, 8,1)になる。
ということが分かります。
このルールを使えば、16人、32人、64人・・・のトーナメント表も作ることができます。

シードについて

参加者が4人、8人、16人、32人とトーナメント表を作るのに都合の良い人数であればよいですが、そうでない場合はどうなるでしょう。

例えば参加者が6人の場合を考えると、8人のトーナメントから7位と8位がいなくなったと考えられます。

上の8人のトーナメントから7位と8位を消すと以下になります。

1位と2位がシードになります。上位がシードになるのでこれで良さそうです。
つまり5人~8人の場合は、8人のトーナメントを埋めて行って、空いたところはシードにする。
9人~16人の場合は、16人のトーナメントを埋めて行って、空いたところはシードにする。・・・
でできました。