問題. 全チームによるプレーオフ
チームで引き分けのない総当たり戦を行う. 試合の結果が確定しているときに,残りのすべての試合を行い,すべてのチームの勝利数が等しくなる試合結果(プレーオフ)の組合せ数を求めよ.
制約: ,
解法. 握手補題 + 枝刈り探索
全チームの勝利数が等しくなるとき,各チームの勝利数がいくつになるのかを考えます.各チームを頂点として,チーム がチーム に勝つとき, から への弧を張ることによって構成される有向グラフ を考えます.この有向グラフは完全グラフの各辺を向き付けしたグラフで tournament と呼ばれます.各チームの勝利数はその頂点 の出次数 に等しく,弧の総数は であることから,有向グラフの握手補題,
から,各頂点の勝利数が等しく とすると,
より,
となります.
1チーム目の未確定の試合から勝敗を確定していく全探索を考えます. チーム目の試合を考えます.このとき, チーム目との試合結果は探索順から決まっています.ここで, チーム目と試合することを考えると, チームの勝ち数が より少なければ勝つ可能性があり,負け数が より少なければ負ける可能性があります.それ以外の場合はこれ以上試合の勝敗を確定してもプレーオフとなる組合せ数は 0 となるので探索を打ち切ります.
ここで,この枝刈り探索での状態数の上界を求めます. が大きく, が小さいとき状態数は増えるので として考えます.1チーム目は8チームと試合を行い,その内 チームに勝つので 通りの状態数があります.2チーム目も8チームと試合を行うのですが,1チーム目との勝敗は確定しています.もし,1チーム目に負けていた場合は残り7試合中4試合勝つ組合せが状態数となるのですが,枝刈りの条件から,7試合中3試合負ける組合せと考えることもできます.このように考えると全状態数の上界は,
となります.
まとめ
枝刈り探索の状態数の上界が簡単に計算できるので,直感が正しいかハラハラしながらプログラムを書かなくてよいので幸せです.