- Hàng ưu tiên.
a) Thời gian thực hiện giải thuật là gì? đơn vị của T(n) tính bằng gì? cách tính?
- Thời gian thực hiện một chương trình là một hàm của kích thước dữ liệu vào, ký hiệu T(n) trong đó n là kích thước (độ lớn) của dữ liệu vào.
Ví dụ 1: Chương trình tính tổng của n số có thời gian thực hiện là T(n) = c*n trong đó c là một hằng số.
- T(n) không thể tính bằng đơn vị cụ thể mà tính bằng số lần thực hiện các lệnh của giải thuật.
Một câu hỏi đặt ra là: Cách tính này có thể hiện được tính nhanh hay chậm của giải thuật hay không ?
Câu trả lời: rõ ràng là có, thí dụ :
o GT1 có thời gian thực hiện là tỉ lệ với n GT2 có thời gian thực hiện là tỉ lệ với n2
Với n khá lớn thì giải thuật 1 nhanh hơn giải thuật 2
Thời gian mà ta đánh giá như trên gọi là độ phức tạp tính toán của giải thuật: Ở giải thuật 1 ta nói GT có độ phức tạp tính toán cấp n và kí hiệu T(n) = O(n) Ở giải thuật 2 thì thời gian T() = O(n2) hay O(g(n)), g(n) còn được gọi là cấp độ phức tạp tính toán
Hàm g(n) thường chọn là: logn; n; n2; n3: ta gọi chung là hàm đa thức; g(n) = 2n ta gọi là hàm mũ; các giải thuật có độ phức tạp tính toán là cấp các hàm đa thức thì chấp nhận được. Ví dụ : T(n) = 60n2 + 9n + 9 = O(n)
* Một số ví dụ đánh giá độ phức tạp tính toán của GT
Ví dụ 1 : Tính trung bình cộng của một dãy gồm n số đọc vào từ bàn phím
1. Nhập vào số n 2. Cho T = 0; d = 1 3. Lặp While d <= n do Begin 4- Đọc vào số n 5- Cộng thêm vào T
Cấu trúc dữ liệu - Bộ môn CNPM – Khoa CNTT – ĐHTN 113
6- Tăng đếm lên 1 End;
7. Tính TBC = T/n; 8. Đưa ra TBC
* Đánh giá giải thuật:
Các lệnh Số lần thực hiện 1 1 2 1 3 n 4 n 5 n 6 n 7 1 8 1 T(n) = 4n + 4 T(n) = 4n + 4 =< 5n với mọi n >= 4 => T(n) = O(n)
* Một số qui tắc cơ bản xác định cấp độ phức tạp tính toán
a. Qui tắc loại bỏ hằng số
Nếu ta có T(n) = O(C1.g(n)) thì ta cũng có T(n) = O(g(n)) b. Qui tắc lấy max
Nếu ta có T(n) = O(f(n) + g(n)) thì ta cũng có
T(n) = O(max(f(n),g(n)))