Bài giảng Phân tích thiết kế và giải thuật - Chương 1: Kỹ thuật phân tích giải thuật cung cấp cho người học các kiến thức: Tại sao cần phải phân tích giải thuật, tiêu chuẩn đánh giá giải thuật, phương pháp đánh giá. Mời các bạn cùng tham khảo.
KỸ THUẬT PHÂN TÍCH GIẢI THUẬT • Tại cần phải phân tích giải thuật ? • Tiêu chuẩn đánh giá giải thuật • Phương pháp đánh giá • Bài tập • Với phần lớn tốn, thường có nhiều giải thuật khác để giải tốn • Làm cách để chọn giải thuật tốt để giải tốn? • Làm cách để so sánh giải thuật giải toán? => Cần đánh giá giải thuật để lựa chọn giải thuật tốt • Đánh giá giải thuật - Tính đắn • Chạy liệu thử • Chứng minh lý thuyết (bằng tốn học chẳng hạn) - Tính đơn giản -> Thường sử dụng vài lần - Tính nhanh chóng (thời gian thực thi) • Quan trọng chương trình thực thi nhiều lần, chương trình có khối lượng liệu nhập lớn • Hiệu thời gian thực thi • Đo thời gian thực chương trình - Lập trình đo thời gian thực - Phụ thuộc vào tập lệnh máy tính - Kỹ người lập trình - Dữ liệu đầu vào Tính độ phức tạp thời gian thực giải thuật = độ đo thực thi giải thuật Độ phức tạp thời gian thực giải thuật thường tính trường hợp xấu • Đo thời gian thực hiện: - Thời gian thực chương trình hàm kích thước liệu vào, ký hiệu T(n) - Hàm T(n) ≥ n 0, với n kích thước (độ lớn) liệu đầu vào - Ví dụ: Chương trình tính tổng n số có thời gian thực T(n) = cn c số • Đơn vị đo thời gian thực - - Đơn vị tính: số lệnh bản, số thị, … Ví dụ: Khi ta nói thời gian thực chương trình T(n) = Cn có nghĩa chương trình cần Cn thị thực thi • Thời gian thực chương trình khơng phụ thuộc vào kích thước mà cịn phụ thuộc vào tính chất liệu vào • Dữ liệu vào có kích thước thời gian thực chương trình khác - Ví dụ: chương trình xếp dãy số nguyên tăng dần Nhập vào dãy số nguyên => Dãy số nhập vào có thể: có thứ tự, chưa có thứ tự, có thứ tự tăng có thứ tự giảm => Thời gian thực trường hợp: tốt nhất, xấu nhất, trung bình • Tỷ suất tăng (growth rate): T(n) có tỷ suất tăng f(n) tồn C > n0 cho T(n) Cf(n) n n0 - - Cho hàm không âm T(n), tồn tỷ suất tăng f(n) - Ví dụ: T(0) = 1, T(1) = 4, T(n) = (n+1)2, Đặt n0 = c = với n ≥ 1, ta có T(n) = (n+1)2 ≤ 4n2 với n ≥ 1, => Tỷ suất tăng T(n) n2 • Ví dụ: chứng minh rằng: Tỷ suất tăng T(n) = 3n3 + 2n2 n3 Giải – Chọn n0 = C = với n ≥ 0, ta có 3n3 + 2n2 ≤ 5n3 Tỷ suất tăng T(n) n3 • Quy tắc: T(n) đa thức n tỷ suất tăng bậc cao n • Cho giải thuật - P1 có T1(n) = 100n2 tỷ suất tăng n2 - P2 có T2(n) = 5n3 tỷ suất tăng n3 Giải thuật chạy nhanh ? phụ thuộc vào kích thước liệu vào Xét n 20 T1(n) > T2(n) Xét n 20 T1(n) T2(n) So sánh tỷ suất tăng so sánh trực tiếp hàm T(n) 10 Nếu nghiệm lớn nghiệm riêng độ phức tạp nghiệm • Nếu nghiệm riêng lớn nghiệm độ phức tạp nghiệm riêng • • Tuy nhiên, tính nghiệm khơng phải lúc dễ! 45 Ta tính nghiệm riêng trường hợp d(n) có dạng đặc biệt • • Hàm nhân, hàm có tính chất nhân (multiplicative function): + - Hàm d(n) có tính nhân d(x.y) = d(x).d(y) - Ví dụ: d(n) = n2 hàm nhân d(x.y) = (x.y)2 = x2.y2 = d(x).d(y) + d(n) = 3n2 khơng phải hàm nhân 46 • Nếu d(n) hàm nhân, ta có nghiệm riêng: • Hay nghiệm riêng 47 • Trường hợp 1: Nếu a > d(b), ak > [d(b)]k T ( n) O (a k ) O (a logb n ) O (n logb a ) • Trường hợp 2: Nếu a < d(b), ak < [d(b)]k T (n) O(d (b)k ) O(d (b)logb n ) O(nlogb d (b ) ) • Trường hợp 2: Nếu a = d(b), T ( n) O ( n logb a log b n) 48 • Giải phương trình đệ quy sau với T(1) = 49 Ví dụ: GPT với T(1) = - Phương trình có dạng phương trình tổng quát - d(n)=n hàm nhân - a = b = d(b) = b = < a = - T(n) = O(nlogba) = O(nlog4) = O(n2) - 50 16/06/2014 Ví dụ: GPT với T(1) = Phương trình có dạng phương trình tổng quát - d(n) = n2 hàm nhân - a = b = - d(b) = b2 = = a - T(n) = O(nlogbalogbn) = O(nlog4logn) = O(n2logn) - 51 Ví dụ: GPT với T(1) = Phương trình có dạng phương trình tổng qt d(n)=n3 hàm nhân a = b = d(b) = b3 = > a T(n) = O(nlogbd(b)) = O(nlog8) = O(n3) 52 16/06/2014 Ví dụ: GPT với T(1) = - PT thuộc dạng phương trình tổng quát d(n) = nlogn hàm nhân - Nghiệm = nlogba = nlog2 = n - Do d(n) = nlogn hàm nhân nên ta phải tính nghiệm riêng cách xét trực tiếp k 1 j k j a d( b ) j 0 53 k 1 k 1 j 0 j 0 NR a j d(b k j ) j 2k j log 2k j k (k 1) NR (k j ) log O(2k k ) j 0 k 1 k k - Theo giải phương trình đệ quy tổng quát n = bk nên k = logbn, b = nên 2k = n k = logn, - NR= O(nlog2n) > NTN = n - Vậy O(nlog2n) 54 Bài tập • Bài 1: Tính thời gian thực đoạn chương trình sau: a) Tính tổng số Sum := 0; for i:=1 to n begin readln(x); Sum := Sum + x; end; 55 Bài tập • Bài 1: Tính thời gian thực đoạn chương trình sau: b) Tính tích hai ma trận vng cấp n C = A*B: for i := to n for j := to n begin c[i,j] := 0; for k := to n c[i,j] := c[i,j] + a[i,k] * b[k,j]; end; 56 Bài tập • Bài 2: Giải phương trình đệ quy sau với T(1) = a) T(n) = 3T(n/2) + n b) T(n) = 3T(n/2) + n2 c) T(n) = 8T(n/2) + n3 57 Bài tập • Bài 3: Giải phương trình đệ quy sau với T(1) = a) T(n) = 4T(n/3) + n b) T(n) = 4T(n/3) + n2 c) T(n) = 9T(n/3) + n2 58 Bài tập • Bài 4: Giải phương trình đệ quy sau với T(1) = a) T(n) = T(n/2) + b) T(n) = 2T(n/2) + logn c) T(n) = 2T(n/2) + n d) T(n) = 2T(n/2) + n2 59 ... phân tích giải thuật ? • Tiêu chuẩn đánh giá giải thuật • Phương pháp đánh giá • Bài tập • Với phần lớn tốn, thường có nhiều giải thuật khác để giải tốn • Làm cách để chọn giải thuật tốt để giải. .. sánh giải thuật giải toán? => Cần đánh giá giải thuật để lựa chọn giải thuật tốt • Đánh giá giải thuật - Tính đắn • Chạy liệu thử • Chứng minh lý thuyết (bằng tốn học chẳng hạn) - Tính đơn giản -> ... chương trình - Lập trình đo thời gian thực - Phụ thuộc vào tập lệnh máy tính - Kỹ người lập trình - Dữ liệu đầu vào Tính độ phức tạp thời gian thực giải thuật = độ đo thực thi giải thuật Độ