9

Double Elimination Tournaments の作成と操作を可能にする Tournament Organizer ソフトウェアを MVVM デザイン パターンを使用するように変換して、より簡単にテストできるようにしています。そうすることで、ブラケット構造を直接操作する UI の一部のコードから「モデル」を分離しています。

これは、私がトーナメントを処理するために作成したソフトウェアの 3 回目の繰り返しになります。1 つ目は PHP で作成され、データをデータベースに格納しました。2 番目のバージョンは、私が作成した WPF バージョンで、データをメモリに格納し、XML ファイルにシリアル化します。ただし、どちらのバージョンでも、クリーンではないと感じる実装の側面があり、DRY の法則に違反しているように見えます。

二重消去ブラケットを処理するためにゼロからデータ構造を作成する場合、どのようにしますか?

ブラケットをアルゴリズム的に自動的に生成できる必要はないことに注意してください (4/8/16/32 人の事前作成されたダブルエリミネーションからのロードは、私が現在行っている方法です)、主なユースケースだけです。試合の勝者を設定し、ブラケットを通じてそれらを「進める」こと。

編集: 明確にするために、データ構造はダブル エリミネーション トーナメントを処理する必要があるため、ある試合の勝者が別の試合の敗者と競合する可能性があります。

4

4 に答える 4

1

これに対する私の解決策は、2 セットのデータ構造を持つことでした。1 つはブラケット部分用、もう 1 つはシート用です。

class Match
{
    string Id;
    MatchSeat red;
    MatchSeat blue;
    MatchSeat winner;
    MatchSeat loser;
}

class MatchSeat
{
    string Id;
    Entry Entry;
}

そして、それをセットアップするために、ブラケット情報を取得して構造を構築するヘルパー関数をいくつか作成しました。

{ "1", "seed1", "seed4", "W1", "L1" },
{ "2", "seed2", "seed3", "W2", "L2" },
{ "3", "W1", "W2", "W3", "L3" },
{ "4", "L1", "L2", "W4", "L4" },
{ "5", "W4", "L3", "W5", "L5" },
{ "F", "W3", "W5", "WF", "WF" }

次に、シードと勝者/敗者が入力されると、値は 1 つの場所にのみ設定されます。

于 2012-04-24T01:33:47.290 に答える
0

最初のラウンドがリーフノードで始まり、次に上に移動する完全な二分木についてはどうでしょうか。

于 2009-02-26T21:00:23.393 に答える
0

私が行っていた別の質問のサイドバーでこの質問に気づき、私がチャイムを鳴らすと思いました:

私はフル機能の Tournament API を開発中であり、それをオープンソース化しています。

ダブル エリミネーション トーナメントはまだ作成されていませんが、シングル エリミネーション トーナメントのデータ構造は最近、ダブル エリミネーション ツリー構造をサポートするように改訂されました。

http://tournaments.codeplex.com/

于 2009-10-06T19:17:06.827 に答える