Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 71 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
71
Dung lượng
1,52 MB
Nội dung
CHƯƠNG KỸ THUẬT PHÂN TÍCH THUẬT TỐN Bộ mơn CƠNG NGHỆ PHẦN MỀM Khoa Cơng nghệ Thơng tin & Truyền thông ĐẠI HỌC CẦN THƠ Võ Huỳnh Trâm MỤC TIÊU • Sau học xong chương này, sinh viên cần: – Hiểu cần thiết phải phân tích đánh giá thuật toán – Biết tiêu chuẩn để đánh giá thuật toán – Hiểu khái niệm độ phức tạp thuật toán – Vận dụng quy tắc để tính độ phức tạp chương trình khơng gọi chương trình con, chương trình có gọi chương trình khơng đệ quy – Vận dụng phương pháp thành lập phương trình đệ quy – Vận dụng phương pháp giải phương trình đệ quy Khái niệm THUẬT TỐN • Khái niệm thuật tốn (Algorithm) – Thuật toán dãy xác định thao tác áp dụng liệu vào nhằm đạt giải pháp cho vấn đề – Hai vấn đề : (1) Tìm phương pháp giải vấn đề ? – Giải pháp cho ax2 + bx + c = : rõ ràng xác định – Giải pháp cho ax5 + bx4 + cx3 + dx2 + ex + f = : khơng có giải pháp tổng quát (2) Tìm giải pháp hiệu ? – Phân biệt thuật tốn chương trình •Chương trình cài đặt thuật tốn ngơn ngữ lập trình THUẬT TỐN LÀ GÌ ? • Thuật tốn – Thủ tục tính tốn nhận tập liệu vào (input) tạo liệu (output) – Thuật toán gọi đắn (correct), thuật toán dừng cho kết với liệu vào VÍ DỤ VỀ THUẬT TỐN ? • Thuật toán ngày sống – Nấu cơm – Gọi điện thoại –… • Thuật tốn tốn học/tin học – – – – Nhân hai ma trận Tính tích phân Giải hệ phương trình bậc … Các tính chất THUẬT TỐN – Tính đắn: Thuật toán cần đảm bảo cho kết – Tính tổng qt: Thuật tốn phải giải cho lớp tốn tương tự – Tính hữu hạn: Thuật toán phải dừng sau số bước xác định – Tính xác định: Các thao tác thuật toán phải đặc tả chặt chẽ, rõ ràng, cụ thể – Tính hiệu quả: Thuật tốn phải sử dụng hiệu nguồn tài nguyên máy tính: Thời gian, Bộ nhớ Đặc tả THUẬT TỐN – Có nhiều cách đặc tả thuật tốn • Khơng hình thức : Ngơn ngữ tự nhiên Đặc tả THUẬT TỐN • Nửa hình thức : Kết hợp ngơn ngữ tự nhiên kí hiệu tốn học : Lưu đồ, Sơ đồ khối, … Đặc tả THUẬT TỐN • Hình thức : Ngôn ngữ giả (pseudocode) Ngôn ngữ Z, ngôn ngữ B, … if Delta > then begin x1=(-b-sqrt(delta))/(2*a) x2=(-b+sqrt(delta))/(2*a) xuất kết : phương trình có hai nghiệm x1 x2 end else if delta = then xuất kết : phương trình có nghiệm kép -b/(2*a) else {trường hợp delta < } xuất kết : phương trình vơ nghiệm Sự cần thiết phải phân tích, đánh giá thuật tốn • Cần phải phân tích, đánh giá thuật tốn để: – Lựa chọn thuật toán tốt thuật toán để cài đặt chương trình giải tốn đặt – Cải tiến thuật tốn có để thuật toán tốt 10 Ba trường hợp a k - [d(b)]k NR a -1 d(b) • Trường hợp 1: a > d(b) Trong công thức trên: ak > [d(b)]k Theo quy tắc tính độ phức tạp: NR O(ak) = O(nlogba) = NTN Do T(n) = O(nlogba) Nhận xét : T(n) phụ thuộc vào a, b mà không phụ thuộc hàm tiến triển d(n) Cải tiến thuật toán = Giảm a : giảm số toán 57 Ba trường hợp a k - [d(b)]k NR a -1 d(b) • Trường hợp 2: a < d(b) Trong công thức trên: [d(b)]k > ak Theo quy tắc tính độ phức tạp : NR O([d(b)]k) = O(nlogbd(b)) > NTN Do T(n) = O(nlogbd(b)) Nhận xét : T(n) phụ thuộc vào b hàm tiến triển d(b) Cải tiến thuật toán = Giảm d(b) : cải tiến việc phân chia toán tổng hợp kết 58 a k - [d(b)]k NR a -1 d(b) Ba trường hợp Trường hợp 3: a = d(b) Công thức không xác định nên phải tính trực tiếp nghiệm riêng: k -1 j k -1 a k k k NR [d(b)] ∑ a a k ∑ j 0 d(b) j 0 (do a d(b)) Do n = bk nên k = logbn ak = nlogba Vậy NR nlogbalogbn > NTN Do T(n) = O(nlogbalogbn) 59 Tính nghiệm riêng d(n) khơng phải hàm nhân • Trong trường hợp hàm tiến triển d(n) khơng phải hàm nhân khơng thể áp dụng cơng thức ứng với ba trường hợp nói mà phải tính trực tiếp NR, sau so sánh với NTN lấy MAX(NR,NTN) Nguyễn Văn Linh 60 Quy tắc chung để giải phương trình đệ quy • Lưu ý giải phương trình đệ quy cụ thể: (1)Xem phương trình có thuộc dạng phương trình tổng qt khơng ? (2)Nếu có, xem hàm tiến triển d(n) có dạng hàm nhân khơng? a) Nếu có: xác định a, d(b); so sánh a, d(b) để vận dụng ba trường hợp b) Nếu không : tính trực tiếp nghiệm để so sánh (3) Suy nghiệm phương trình = Max(NTN,NR) 61 Ví dụ GPT với T(1) = n 1/ T(n) 4T n 2 • Phương trình cho có dạng phương trình tổng qt • d(n)=n hàm nhân • a = b = • d(b) = b = < a (Trường hợp 1) T(n) = O(nlogba) = O(nlog4) = O(n2) 62 Ví dụ GPT với T(1) = n 2/ T(n) 4T n 2 • Phương trình cho có dạng phương trình tổng qt • d(n)=n2 hàm nhân • a = b = • d(b) = b2 = = a (Trường hợp 3) T(n) = O(nlogbalogbn) = O(nlog4logn) =(n2logn) 63 Ví dụ GPT với T(1) = n 3/ T(n) 4T n 2 • Phương trình cho có dạng phương trình tổng quát • d(n)=n3 hàm nhân • a = b = • d(b) = b3 = > a (Trường hợp 2) T(n) = O(nlogbd(b)) = O(nlog8) = O(n3) 64 Ví dụ GPT với T(1) = n T(n) 2T nlogn 2 • PT thuộc dạng phương trình tổng qt d(n) = nlogn hàm nhân • a = b = • NTN = nlogba = nlog2 = n • Do d(n) = nlogn khơng phải hàm nhân nên ta phải tính nghiệm riêng cách xét trực tiếp 65 Ví dụ (tt) k -1 k -1 NR ∑ a jd b k - j j k - j log2 k - j j0 k -1 j= k(k 1) 2 (k - j) 2 O(2k k ) j0 k k • Theo cách giải phương trình đệ quy tổng quát n = b k nên k = logbn, b = nên 2k = n k = logn, • NR= O(2log n log2n) = O(nlog2n) > NTN = n T(n) = O(nlog2n) 66 Bài tập 4-1 GPT với T(1) = n T(n) T 2 • Phương trình cho có dạng phương trình tổng qt • d(n)=1 hàm nhân • a = b = • d(b) = = a T(n) = O(nlogbalogbn) = O(nlog1logn)=O(logn) 67 Bài tập 4-2 GPT với T(1) = • • • • n T(n) 2T logn 2 Phương trình cho có dạng phương trình tổng qt d(n)=logn khơng phải hàm nhân a = b = NTN = O(nlogba)=O(nlog2)=O(n) • Tính trực tiếp nghiệm riêng 68 Bài tập 4-2 (tt) k1 k1 j 0 j 0 NR a j d (b k j ) j log k j k1 k1 j 0 j 0 NR j (k j ) k j k1 k1 j2 j j 0 k 1 NR O(k ) O(k ) 2 j 0 j NR O(k k ) O(n log n) n NTN T (n) O(n log n) 69 Bài tập C k n 1 neu k 0 hoac k n C k 1n C k n • Gọi T(n) thời gian để tính Ckn • Thì thời gian để tính Ckn-1 T(n-1) • Khi n=1 k=0 k=1 => chương trình trả giá trị 1, tốn O(1) = C1 • Khi n>1, trường hợp xấu nhất, chương trình phải làm việc: – Tính Ckn-1 Ck-1n-1 : tốn 2T(n-1) – Thực phép cộng trả kết quả: tốn C a) Ta có phương trình: T(1)=C1 T(n)=2T(n-1) +C2 70 Bài tập (tt) b) Giải phương trình T(n) = 2T(n-1) + C •T(n) = 2[2T(n-2)+C2] + C2 = 4T(n-2) + 3C2 = 4[2T(n-3) + C2] + 3C2 = 8T(n-3) + 7C2 …… = 2iT(n-i) + (2i-1) C2 •T(n) = 2n-1C1 + (2n-1-1) C2 = (C1+ C2)2n-1 - C2 = O(2n) 71 ... gian, lệnh {3} tốn O (1) thời gian • Vịng lặp {2} thực (n-i -1) lần, lần O (1) vịng lp {2} tn O((n-i -1) ? ?1) = O(n-i -1) ã Vũng lp {1} có i chạy từ đến n-2 nên thời gian thực vòng lặp {1} độ phức tạp thuật... tốn O (1) , độ phức tạp Swap O (1) • Trong BubbleSort: lệnh {10 } gọi Swap nên tốn O (1) ; lệnh {9} có điều kiện so sánh a[j] < a[j -1] tốn O (1) ; vòng lặp {8} thực (n – i - 1) lần, lần tốn O (1) nên... mũ cao 18 Khái niệm độ phức tạp thuật tốn • Giả sử có thuật tốn P1 P2 với thời gian thực tương ứng T1(n) = 10 0n2 T2(n) = 5n3 - Vấn đề : P1 hay P2 nhanh hơn? - Cách giải quyết: So sánh T1(n) T2(n)