0

試合のリストを持つオブジェクトTournamentがあり、それぞれに player1 または player2 が勝つ確率が に格納されていMap<Player, Float>ます。要素を
取得する一致のリストを反復処理し、勝者を使用して新しい一致を作成します。勝者は次のように選択されます: p1 (または p2) が特定のしきい値を超える確率で勝った場合、それを選択します。 私の目標は、考えられるすべてのシナリオを作成し、考えられるすべてのトーナメントの勝者を評価することです。 私は分岐せずにそれを行うことができます (最後の試合だけになるまで、すべての試合の勝者を再帰的に評価するだけです) が、すべてのシナリオが必要な場合、その方法が本当にわかりません。ii + 1


何か案は?どのデータ構造を使用すればよいですか? Cのようなことをしてそれforkを使うことは可能ですか?

4

3 に答える 3

1

Cフォークのようなものを作って使用することは可能ですか?

ExecutorService を使用して、任意の数のタスクを送信できます。それらがCPUバウンドであると仮定すると、次のサイズの固定スレッドプールを使用することができますRuntime.getRuntime.availableProcessors()

于 2012-09-17T08:57:18.713 に答える
0

最後にモンテカルロ法で解いてみました。私はトーナメントを何度も (10,000) 実行し、シミュレーションごとに、各試合の勝者が確率に従って選ばれます。私は何度もそれを実行しているので、考えられるすべてのシナリオに遭遇すると確信しています (そして、トーナメントの予測された勝者とともに、それらを段階的に保存します)。それは高速で効果的であることが証明されており、追加のデータ構造は必要ありません (すべてのシナリオを保存するためのセットと、トーナメントの勝者を確率で保存するためのマップのみ)。

于 2012-10-10T08:10:54.373 に答える
0

おそらく、ある種のツリー ブラウジング アルゴリズムを探しているでしょう。幅優先検索または深さ優先検索のいずれかを使用できます。再帰を使用すると、基本的には後者を使用しますが、注意してください。Java ヒープ領域が十分でないことはよくあることであり、最終的には独自に実装する必要があります。

BFS と DFS は非常に似ていますが、データ構造の使用に関しては異なります。BFS は JSE によって実装されるキューを使用しますが、LinkedListDFS はStackクラスによって実装されるスタックを使用します。

于 2012-09-17T09:04:10.393 に答える