我使用强力递归编写了一个Sudoku拼图解算器。现在,我想看看解决10个类似类型的谜题需要多长时间。所以,我创建了一个名为easy的文件夹,并在文件夹中放置了10个“简单”的谜题。当我第一次运行求解器时可能需要171 ms,第二次需要37 ms,第三次需要16 ms。为什么不同的时间再次解决完全相同的问题?时间应该不一致吗?
第二个问题是,即使我告诉它在加载拼图之后重新绘制屏幕并且在解决之后再次显示最后一个拼图。如果我只加载一个谜题而不解决它,它将显示最初的谜题状态。如果我然后调用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);
}
答案 0 :(得分:3)
第一次运行JVM需要加载类,创建你正在使用的对象等 - 这需要更多的时间。此外,JVM总是需要时间“开始踢”,这就是为什么,在进行分析时,通常会运行几千个循环并将结果分开以获得更好的估计。
对于第二个问题,如果没有看到代码就不可能帮助你,但一个好的猜测就是你没有“刷新”数据。