我使用蛮力递归编写了一个数独解谜器。现在,我想看看解决 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/

10-11 15:19