在Java中经过一段时间后如何结束递归?

时间:2012-03-22 09:54:53

标签: java search time tree

我在类似于跳棋的游戏中使用alpha beta修剪进行游戏树搜索,但我确定了最佳移动的严格5秒限制。我希望我的递归在分配的时间到来之前进入基本情况。

如何查看我剩下多少时间,或者在我的时间差不多完成后更改布尔值?

3 个答案:

答案 0 :(得分:0)

在每一步中,使用System.currentTimeMillis()获取当前时间,并将其与递归开始前保存的时间进行比较。

答案 1 :(得分:0)

你可以创建一个新的线程来计算,并在5秒内更改一个布尔值,可以从其他地方检查。也许这样的事情?

Executors.newCachedThreadPool().execute(new Runnable() {
                    public void run() {
                          Thread.sleep(5000);
                          timeout = true;
}});

答案 2 :(得分:0)

有很多方法可以做到这一点。正如在其他帖子中建议的那样,您可以使用System.currentTimeMillis(),并根据您通过递归调用传递的long startTime变量进行检查,或者在执行时以某种方式对递归函数可用。 你可以使用RunnableCallable来翻转一个标志或在5000毫秒sleep()之后运行回调,但我认为这可能有点过分。

上次做了类似的事情,我使用了一个名为StopWatch的{​​{3}},它提供了一个名为elapsedMillis()的好方法,可以为您提供自您StopWatch开始以来经过的毫秒数。这种方法最像System.currentTimeMillis(),但需要的锅炉板略少。如果引入Guava作为依赖项不是一种选择,那么你总是可以自己实现一个类似的类,在任何情况下,它都会简单地使用System.currentTimeMillis()