2 개의 입력 파일을 읽는 프로그램이 있습니다. 첫 번째 파일에는 BST 및 AVL 트리에 입력되는 임의의 단어가 포함되어 있습니다. 그런 다음 프로그램은 두 번째 읽기 파일에 나열된 단어를 찾고 트리에 존재하는지 말한 다음 수집 된 정보가있는 출력 파일을 작성합니다. 이것을하는 동안 프로그램은 특정 항목을 찾는 데 소비 된 시간을 인쇄합니다. 그러나이 프로그램은 소비 된 시간을 측정하는 것으로 보이지 않습니다.C++ 클럭이 시간을 잘못 측정합니다.
BST* b = new BST();
AVLTree* t = new AVLTree();
string s;
ifstream in;
in.open(argv[1]);
while(!in.eof())
{
in >> s;
b->insert(s);
t->insert(s);
}
ifstream q;
q.open(argv[2]);
ofstream out;
out.open(argv[3]);
int bstItem = 0;
int avlItem = 0;
float diff1 = 0;
float diff2 = 0;
clock_t t1, t1e, t2, t2e;
while(!q.eof())
{
q >> s;
t1 = clock();
bstItem = b->findItem(s);
t1e = clock();
diff1 = (float)(t1e - t1)/CLOCKS_PER_SEC;
t2 = clock();
avlItem = t->findItem(s);
t2e = clock();
diff2 = (float)(t2e - t2)/CLOCKS_PER_SEC;
if(avlItem == 0 && bstItem == 0)
cout << "Query " << s << " not found in " << diff1 << " microseconds in BST, " << diff2 << " microseconds in AVL" << endl;
else
cout << "Query " << s << " found in " << diff1 << " microseconds in BST, " << diff2 << " microseconds in AVL" << endl;
out << bstItem << " " << avlItem << " " << s << "\n";
}
입력하기 직전에 입력 한 clock() 값과 입력 한 직후에 얻은 clock() 값은 완전히 같습니다. 그래서 마치 프로그램이 while 루프를 전혀 실행하지 않는 것처럼 보입니다. 따라서 0으로 인쇄됩니다. 프로그램 마무리를 위해 약 10 초 정도 걸리므로 그렇지 않습니다. 또한 출력 파일에 올바른 결과가 포함되어 있으므로 잘못된 findItem() 함수를 가질 가능성도 사실이 아닙니다.
나는 Stack Overflow에서 약간의 연구를했고, 많은 사람들이 저와 같은 문제를 경험한다는 것을 알았습니다. 그러나 내가 읽은 답 중 어느 것도 그것을 풀어주지 못했습니다.
표준 시계는 매우 조잡한 해상도입니다. 개별 라운드가 없다면, 10ms라고 말하면 측정 할 수 없습니다. 또한'eof()'는 항상 잘못되었다는 것에주의하십시오. –
위에서 언급했듯이 프로그램을 끝내는 데 약 10 초 정도 걸리므로 시계의 해상도와 관련이 있다고는 생각하지 않습니다. 따라서 실행 시간이 엄청나게 짧지는 않습니다. 또한 eof()가 항상 잘못되었다는 이유에 대해 더 구체적으로 설명 할 수 있습니까? – harbinger
귀하의 플랫폼은 무엇이며 귀하의 플랫폼에서 CLOCKS_PER_SEC의 가치는 무엇입니까? – evilruff