我使用蛮力递归编写了一个数独解谜器。现在,我想看看解决 10 个类似类型的谜题需要多长时间。因此,我创建了一个名为 easy 的文件夹,并在文件夹中放置了 10 个“easy”拼图。当我第一次运行求解器时,可能需要 171 毫秒,第二次需要 37 毫秒,第三次运行需要 16 毫秒。为什么重新解决完全相同的问题的时间不同?时间不应该是一致的吗?
第二个问题是,即使我告诉它在加载拼图后重新绘制屏幕并在解决它后再次显示,它也只显示最后解决的拼图。如果我只加载一个拼图而不解决它,它将显示初始拼图状态。如果我然后调用 Solve 方法,则最终解决方案将绘制在屏幕上。这是我解决多个难题的方法。
void LoadFolderAndSolve() throws FileNotFoundException {
String folderName = JOptionPane.showInputDialog("Enter folder name");
long startTime = System.currentTimeMillis();
for (int i = 1; i < 11; i++) {
String fileName = folderName + "/puzzle" + i + ".txt";
ReadPuzzle(filename); // this has a call to repaint to show the initial puzzle
SolvePuzzle(); // this has a call to repaint to show the solution
// If I put something to delay here, puzzle 1-9 is still not shown only 10.
}
long finishTime = System.currentTimeMillis();
long difference = finishTime - startTime;
System.out.println("Time in ms - " + difference);
}
最佳答案
第一次运行 JVM 需要加载类,创建您正在使用的对象等 - 这需要更多时间。此外,JVM 总是需要时间来“开始踢”,这就是为什么在分析时,通常会运行几千个循环并划分结果以获得更好的估计。
对于第二个问题,没有看到代码就不可能帮助你,但一个很好的猜测是你没有“刷新”数据。
关于java - 数独计时不规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21447476/