2014-01-30 3 views
4

나는 무차별 재귀를 사용하여 스도쿠 퍼즐 해답을 썼다. 이제 비슷한 유형의 퍼즐 10 개를 해결하는 데 얼마나 오래 걸릴지 알고 싶었습니다. 그래서 나는 폴더라는 것을 쉽게 만들었고 폴더에 10 개의 "쉬운"퍼즐을 넣었습니다. 처음으로 솔버를 실행할 때 171ms가 걸릴 수 있고 두 번째로 37ms가 걸리고 세 번째 실행에는 16ms가 걸립니다. 정확히 똑같은 문제를 다시 해결하는 데 다른 시간이 필요한 이유는 무엇입니까? 시간이 일치해야하지 않아야합니까?스도쿠 타이밍 불규칙

두 번째 문제는 퍼즐을로드 한 후 화면을 다시 그렸고이를 해결 한 후에 다시 말하더라도 마지막 해결 된 퍼즐 만 표시한다는 것입니다. 해결하지 않고 단 하나의 퍼즐을로드하면 초기 퍼즐 상태가 표시됩니다. 그런 다음 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); 
} 

답변

3

처음으로 JVM을 실행하면 클래스를로드하고 사용중인 객체를 생성해야합니다. 시간이 더 걸립니다. 또한 JVM이 "시작"하기 위해 시간이 필요합니다. 프로파일 링 할 때 일반적으로 수천 개의 루프를 실행하고 그 결과를 더 나누어 더 좋은 평가를 얻습니다.

두 번째 문제는 코드를 보지 않고도 도움을 줄 수는 없지만 데이터를 "플러시"하지 않는 것이 좋습니다.

+0

"플러시"란 무엇을 의미합니까? – user1429254

+0

* "repaint"란 무엇을 의미합니까? (내가 먼저 물었습니다 : P) – alfasin

+0

좀 더 검색 한 후에 그림에 대한 답을 찾았습니다. Java에서 가능한 한 빨리 repaint 메서드를 호출 할 때 repaint 메서드를 호출 할 때 보인다. 페인트가 빠르게 연속해서 발생하면 마지막 호출까지 기다립니다. paintImmediately (0, 0, maxX, maxY)로 repaint()를 변경하면 그 주위를 돌아 다니기 위해서. 그것은 화면에 모든 것을 칠하는 일을합니다. 당신의 도움을 주셔서 감사합니다. – user1429254