<개인공부>/[C언어, C++]

[C언어/C++] clock 함수를 통한 알고리즘 시간 측정

BlockDMask 2017. 10. 19. 09:30
반응형
  • 안녕하세요.

  • BlockDMask 입니다.

  • 오늘은 "내가 짠 알고리즘이 어느정도 시간이 걸렸나?" 라는 것을 알 수 있게
    시간을 잴 수 있는 코드에 대해서 알아보겠습니다.

1. clock() 함수

  • C 언어 에서는 <time.h>, C++ 에서는 <ctime> 헤더파일에 들어있습니다.

  • 기본형
    clock_t clock(void); //프로그램이 시작하고 나서 부터 프로세서가 소모한 시간을 리턴합니다.

  • return 타입인 clock_t는 clock ticks 를 뜻합니다.

  • CLOCKS_PER_SEC는 메크로 인데 clock_t 의 값을 CLOCKS_PER_SEC으로 나누면 소모한 시간(clock ticks per second)이 나옵니다.

2. 사용 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<cstdio>
#include<ctime>
 
using namespace std;
 
int main(void){
 
    //시간을 시작하고 싶은 시간
    clock_t start = clock();    // 프로그램 수행시간 부터 현재까지의 시간
 
    //시간을 계산하고 싶은 알고리즘을 넣습니다
 
    printf("%0.5f\n",(float)(clock() - start)/CLOCKS_PER_SEC);
    /*프로그램 수행 시간부터 현재 까지의 시간 - 프로그램 수행시간부터 아까 start 변수까지의 시간
      = start 변수에서 부터 ~ 지금 printf 라인까지 걸린시간이 됩니다.
      이를 CLOCK_PER_SEC으로 나누면 됩니다.
    */
 
    return 0;
}
cs

3. 실제 사용 예시

  • 실제 시간이 많이 걸리는 DFS 기반의 문제에 사용해 보겠습니다.

  • N-Queen 문제 에서 14를 넣었을때와 15를 넣었을때의 시간이 궁금하지 않습니까?
    : 상세한 코드는 [여기] 에 있습니다. 
    : 코드가 조금 길기 때문에, main함수에서 호출하는 부분만 보이겠습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(void){
    cin >> n;
 
    arr = new bool[n];
    d1 = new bool[2*n-1];
    d2 = new bool[2*n-1];
    
    clock_t s = (int)clock();   //요기서 부터
    
    Solution(0);    //DFS 기반으로 구현한 N-Queen 알고리즘입니다.
 
    printf("%0.4fs\n", (float)(clock() - s) /CLOCKS_PER_SEC);   //요기까지 걸린 시간은?
    
    
    delete[] arr;
    delete[] d1;
    delete[] d2;
    return 0;
}
cs


>> 14를 넣은 결과


>> 15를 넣은 결과 

아닛! 이렇게나 많이 차이나는군요!


<참고 자료>

http://www.cplusplus.com/reference/ctime/clock/

http://www.cplusplus.com/reference/ctime/CLOCKS_PER_SEC/

감사합니다.

도움이 쬐~~~끔이라도 되었다면 하트 한번 부탁드립니다!!

반응형