S: lệnh.
Thời gian thực hiện lệnh while được đánh giá:
Giả sử thời gian thực hiện lệnh S (thân của lệnh while) là O(f(n)).
Giả sử g(n) là số tối đa các lần thực hiện lệnh S khi thực hiện lệnh while.
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TỐN
Thí dụ: xét đoạn chương trình:
(1) i = 1;
(2) while (x <> A[i])
(3) i = i +1;
Hai câu lệnh gán (1), (3) đều là O(1).
Vòng lặp while ở hai dịng (2) và (3) có mục đích đi tìm vị trí của phần tử có giá trị bằng x trên mảng A (giả thiết x có mặt trên mảng). Như vậy tối đa số lần lặp là n (với n là số phần tử của mảng A).
Từ đó suy ra thời gian thực hiện của đoạn chương trình trên là O(n).
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Thời gian thực hiện câu lệnh do while
do { S1, S2, .., Sn } while(B); B: điều kiện Si (i = 1, 2,… , n) các câu lệnh.
Giả sử thời gian thực hiện khối {S1, S2,…Sn} là O(f(n)). Giả sử g(n) là số tối đa các lần lặp.
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TỐN
Ví dụ phân tích thời gian hoạt động của đoạn chương trình sau:
Thời gian thực hiện chương trình phụ thuộc vào n.
Câu lệnh {1}, {3} và {6} có thời gian thực hiện O(1)
Câu lệnh lặp for {2} có số lần lặp 2n như vậy thời gian thực hiện là O(n)
Câu lệnh {5} có số lần lặp là n, như vậy lệnh {5} có thời gian thực hiện là O(n). Lệnh lặp for {4} có số lần lặp là n, như vậy lệnh {4} có thời gian thực hiện là O(n2)
Vậy thời gian thực hiện đoạn chương trình trên là: Max(O(1), O(n), O(n2)) = O(n2)
{1} c = 0;
{2} for (i=1; i<=2*n; i++) {3} c = c + 1; {4} for (i=1; i <= n; i++)
{5} for(j=1;j<=n;j++)
{6} c = c + 1;
1.5. ĐÁNH GIÁ ĐỘ PHỨC TẠP CỦA THUẬT TỐN
Ví dụ phân tích thời gian hoạt động của đoạn chương trình sau:
Lệnh {3} có thời gian thực hiện O(1)
Khi i = 1, j chạy từ 1 đến 1 Lệnh for {2} lặp 1 lần Khi i = 2, j chạy từ 1 đến 2 Lệnh for {2} lặp 2 lần
……….
Khi i = n, j chạy từ 1 đến n Lệnh for {2} lặp n lần Như vậy lệnh {3} được lặp 1 + 2 + ⋯ + 𝑛 = 𝑛 𝑛+1
2 do đó lệnh{1} có thời gian thực hiện O(n2)