Tính thời gian chạy chương trình trong C/C++

0
2622
do thoi gian thuc hien chuong trinh

Cách đo, tính thời gian chạy của một chương trình, function, thuật toán trong C/C++ sử dụng hàm thời gian. Giúp bạn kiểm tra độ phức tạp và tối ưu thuật toán của mình một cách tốt nhất.

1. Đặt vấn đề

Thời gian chạy của một chương trình chính là thời gian từ lúc bắt đầu cho tới khi chương trình kết thúc. Thông thường ta thường đo thời gian của một hàm, một thuật toán nào đó. Chủ yếu là dùng để đánh giá độ phức tạp, tốc độ và khả năng tối ưu của chương trình.

Biết được thời gian xử lý của thuật toán sẽ giúp người lập trình đưa ra được các phương pháp xử lý cần thiết. Có thể chúng ta sẽ làm giảm được thời gian chạy của chương trình, tối ưu thuật toán của mình một cách tốt nhất.
Thường áp dụng vào kiểm tra: Thuật toán sắp xếp, thuật toán đệ quy, duyệt cây. . .

Tóm lại thứ chúng ta cần là kiểm tra được thời gian để phục vụ các mục đích khác nhau.

2. Cách tính thời gian chạy trong C/C++

Ngôn ngữ C/C++ có cung cấp một thư viện thời gian time.h cung hàm clock() giúp trả về thời gian hiện tại. Dựa vào đặc điểm này ta có thể tính được thời gian từ khi bắt đầu đến khi kết thúc thuật toán.

Ý tưởng:

Khai báo biến để lấy thời gian lúc bắt đầu: start = clock();

Khai báo biến thứ 2 để lấy thời gian lúc kết thúc: end = clock();

Khai báo thêm một biến time_used dùng để lưu thời gian chạy

Thời gian chạy sẽ bằng lúc kết thúc trừ lúc bắt đầu.

Công thức:
time_used = (end-start)/CLOCK_PER_SEC;

CLOCK_PER_SEC là một tích tắc trong một giây. Hàm clock() trả về thời gian là tích tắc cho nên mới có công thức bên trên

Cú pháp khai báo biến: clock_t <tên biến>
clock_t là một kiểu dữ liệu được định nghĩa sẵn trong thư viện time.h

Ví dụ đo thời gian chạy của thuật toán tìm n!:

// By: https://duongdinh24.com/

#include<iostream>
#include<time.h>   // Thư viện thời gian
using namespace std;

// tinh N giai thua su dung de quy
int factorial(int n){
	if(n==1)
		return 1;
	return(n*factorial(n-1));
}

void solve(){
	int n;	
        cout<<"Nhap n: ";
	cin>>n;
	clock_t start, end;   // Khai báo biến thời gian
        double time_use;      // Thời gian sử dụng

    start = clock();     // Lấy thời gian trước khi thực hiện thuật toán
    cout<<"Giai thua cua "<<n<<" la: "<<factorial(n)<<endl;   // Thực hiện thuật toán
    end = clock();  // lấy thời gian sau khi thực hiện 
    time_use = (double)(end - start) / CLOCKS_PER_SEC;    //Tính thời gian sử dụng
    cout<<"Thoi gian chay factorial(n): "<<time_use;
}

Trong ví dụ, mình đã đo thời gian thuật toán factorial(n) trong thân hàm solve.
Kết quả chạy ví dụ trên:

tinh thoi gian chay cua thuat toan c

3. Lời kết

Qua bài viết này, hi vọng các bạn sẽ nắm được cách đo thời gian trong lập trình C/C++ và phục vụ được cho mục đích học tập nghiên cứu của mình. Nếu bạn có bất kì thắc mắc, góp ý nào, để lại comment xuống phía dưới bài viết nhé!

Xem thêm các bài viết về lập trình của mình tại đây.

LEAVE A REPLY

Please enter your comment!
Please enter your name here