评估所有锦标赛场景

时间:2012-09-17 08:55:23

标签: java data-structures branch fork

我有一个对象Tournament,它有一个匹配列表,每个对象都有一个概率,即player1或player2胜利存储在Map<Player, Float>中。
我迭代使用元素ii + 1的匹配列表,以使用其获胜者创建新匹配。以这种方式选择获胜者:如果p1(或p2)以超过特定阈值的概率获胜,我选择它,否则我必须分支并评估两种情况(案例1:p1获胜 - 案例2:p2获胜)。<登记/> 我的目标是创建所有可能的场景并评估所有可能的锦标赛获胜者 我能够在没有分支的情况下做到这一点(只是递归评估所有比赛获胜者,直到只有最后的比赛),但如果我想要所有场景我真的不知道该怎么做。
有任何想法吗?我应该使用哪种数据结构?是否可以执行类似C fork的操作并使用它?

3 个答案:

答案 0 :(得分:1)

  

是否可以做一些像C fork这样的事情并使用它?

您可以使用ExecutorService提交任意数量的任务。假设它们是CPU绑定的,您可能希望使用大小为Runtime.getRuntime.availableProcessors()

的固定线程池

答案 1 :(得分:0)

您可能正在寻找某种树浏览算法。您可以使用breadth-first-searchdepth-first-search。使用递归基本上是使用后者,但要注意,Java堆空间是不够的,你最终必须自己实现它。

BFS和DFS非常相似,它们在使用数据结构时有所不同。 BFS使用一个队列,该队列由JSE的LinkedList实现,而DFS使用由Stack类实现的栈。

答案 2 :(得分:0)

最后我用蒙特卡罗方法解决了。我多次运行锦标赛(10k),每次比赛都根据他的概率选择每场比赛的胜利者。由于我多次运行,我确信我会遇到所有可能的情况(我会一步一步地保存它们,以及预测的锦标赛冠军)。 它被证明是快速有效的,不需要额外的数据结构(只需要保存所有场景和地图以保存锦标赛获胜者的概率)。