2011-07-11 17 views
9

私は最近、物事を勉強してドナルドクヌスと会いました。しかし、私は問題に正しいアルゴリズムを見つけられませんでした。ラウンドロビントーナメントのスケジューリングアルゴリズム?

問題私たちはn人の選手とリーグを持っています。毎週彼らはお互いにマッチしています。 n-1週間で各チームが互いに戦った。 1日にn/2回の試合があります。 1チームは1週間に1度だけ戦うことができます。 (n/k)の組み合わせを生成すると、(k = 2と仮定して)すべての組み合わせが得られますが、それらを正しい順序で持っていく必要があります。

私の最初の提案は...最高のものではありませんでした。私はちょうど配列を作って、正しい方法を見つけたらコンピュータに試してみましょう。そうでない場合は、最初に戻り、配列をシャッフルして、やり直してください。PHPでプログラムしたもの(n = 8)と何が出てくるのですか?しかし、n = 16の場合、同じように。

私はおそらくアルゴリズムを見つけるか、誰かがこの問題をカバーする本を知っていると思いました。

そして、ここに私のコードです: http://pastebin.com/Rfm4TquY

+3

[ウィキペディアを参照](http://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm) –

答えて

36

古典的なアルゴリズムは次のように動作します。チームは1..N

数。 (ここではn = 8を取る)

すべてのチームを2行で書く。

1 2 3 4 
8 7 6 5 

この列には、どのチームがそのラウンドでプレーするかが示されます(1対8,2対7など)。

ここで、1を固定し、他のすべてのチームを回転させます。週2では、あなたは

1 8 2 3 
7 6 5 4 

を取得し、週3で、あなたは

1 3 4 5 
2 8 7 6 

nが奇数の場合、これは週n-1、この場合まで続く

1 7 8 2 
6 5 4 3 

取得します同じことをしてください、しかしダミーのチームを追加してください。ダミーチームとの試合では誰でもその週にbyeが得られます。

関連する問題