競技のブラケットシートを処理するためのアルゴリズムを構築しようとしています。一連の数値を調べる必要があります。番号ごとに選手名が入ります。番号は選手にランダムに割り当てられますが、番号の組み合わせは常に同じでなければなりません。奇数と偶数の 2 つのグループ、つまり A と Bがあります。
次のように正確な方法で数値を反復するための適切なアルゴリズムが見つからないという唯一の問題:
Group A:
--------
1
17
9
25
------
5
21
13
29
------
3
19
11
27
------
7
23
15
31
Group B:
--------
2
18
10
26
------
6
22
14
30
------
4
20
12
28
------
8
24
16
32
上記の出力を取得する方法のアドバイスや例を教えてください。
編集1:
上記の例は、32人の選手のブラケット シートです。4、8、16、64、または128人のアスリート用のシートを使用する場合も、同じロジックを適用する必要があります。
編集2:
4 人の選手用のシートと 16 人の選手用のシートの例で、より明確にしましょう。
4 選手用シート:
Group A:
--------
1
3
Group B:
--------
2
4
16 選手のシート:
Group A:
--------
1
9
5
13
------
3
11
7
15
Group B:
--------
2
10
6
14
------
4
12
8
16
編集3:
最後の部分は、アスリート名とそのステータスを含む配列を計画していることです。ステータスとは、アスリートが以前にチャンピオンであった場合 (強い)、ステータスとして1を取得し、アスリートの以前の業績が不明または最小限 (弱い) の場合、ステータスは0です。そうすることで、最強のアスリートを異なるグループに分けて、最初の戦いで互いに戦わず、準決勝または決勝に近づいてお互いに会うことができるようにすることができます.
PHP 配列の例:
$participants = array(
array("John", 0),
array("Gagan", 0),
array("Mike Tyson", 1),
array("Gair", 0),
array("Gale", 0),
array("Roy Johnes", 1),
array("Galip", 0),
array("Gallagher", 0),
array("Garett", 0),
array("Nikolai Valuev", 1),
array("Garner", 0),
array("Gary", 0),
array("Gelar", 0),
array("Gershom", 0),
array("Gilby", 0),
array("Gilford", 0)
);
この例から、ステータス1を持つ人は異なるグループ、つまりAとBに属している必要があることがわかります。しかし、奇数と偶数の2 つのグループしかなく、この例では3 人の強いアスリートがいます。したがって、そのうちの 2 つは同じグループになります。最終的な結果は、同じグループに入った 2 人の強力なアスリートが、最初の戦いで会ってはならないということでなければなりません(つまり、2 人は同じ番号のペアにならず、互いにできるだけ離れることを意味します)。 、したがって、2回目の戦いでも会うことはありません)。
次に、ランダムに、配列を再配置し、アスリートをブラケット シートに送信することを計画しています。毎回、異なる番号で、フラグ1を持つ選手は異なるグループに移動し、および/または最初の戦いで決して会うことはありません。時間、同じ番号のペアに割り当てられたアスリートの名前。