我有一个对象Tournament
,它有一个匹配列表,每个对象都有一个概率,即player1或player2胜利存储在Map<Player, Float>
中。
我迭代使用元素i
和i + 1
的匹配列表,以使用其获胜者创建新匹配。以这种方式选择获胜者:如果p1(或p2)以超过特定阈值的概率获胜,我选择它,否则我必须分支并评估两种情况(案例1:p1获胜 - 案例2:p2获胜)。<登记/>
我的目标是创建所有可能的场景并评估所有可能的锦标赛获胜者
我能够在没有分支的情况下做到这一点(只是递归评估所有比赛获胜者,直到只有最后的比赛),但如果我想要所有场景我真的不知道该怎么做。
有任何想法吗?我应该使用哪种数据结构?是否可以执行类似C fork
的操作并使用它?
答案 0 :(得分:1)
是否可以做一些像C fork这样的事情并使用它?
您可以使用ExecutorService提交任意数量的任务。假设它们是CPU绑定的,您可能希望使用大小为Runtime.getRuntime.availableProcessors()
答案 1 :(得分:0)
您可能正在寻找某种树浏览算法。您可以使用breadth-first-search或depth-first-search。使用递归基本上是使用后者,但要注意,Java堆空间是不够的,你最终必须自己实现它。
BFS和DFS非常相似,它们在使用数据结构时有所不同。 BFS使用一个队列,该队列由JSE的LinkedList
实现,而DFS使用由Stack
类实现的栈。
答案 2 :(得分:0)
最后我用蒙特卡罗方法解决了。我多次运行锦标赛(10k),每次比赛都根据他的概率选择每场比赛的胜利者。由于我多次运行,我确信我会遇到所有可能的情况(我会一步一步地保存它们,以及预测的锦标赛冠军)。 它被证明是快速有效的,不需要额外的数据结构(只需要保存所有场景和地图以保存锦标赛获胜者的概率)。