Bài giảng phân tích thiết kế thuật toán chương 1 kỹ thuật phân tích thuật toán

56 587 0
Bài giảng phân tích thiết kế thuật toán   chương 1  kỹ thuật phân tích thuật toán

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG 1: KỸ THUẬT PHÂN TÍCH THUẬT TOÁN Nguyễn Văn Linh Khoa Công nghệ Thông tin & Truyền thông ĐẠI HỌC CẦN THƠ nvlinh@cit.ctu.edu.vn Nguyễn Văn Linh MỤC TIÊU • Sau hoàn tất học bạn cần: – – – – Hiểu cần thiết phải phân tích đánh giá giải thuật Biết tiêu chuẩn để đánh giá giải thuật Hiểu khái niệm độ phức tạp giải thuật 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, độ phức tạp 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 Nguyễn Văn Linh Sự cần thiết phải phân tích, đánh giá giải thuật • Cần phải phân tích, đánh giá giải thuật để: – Lựa chọn giải thuật tốt giải thuật để cài đặt chương trình giải toán đặt – Cải tiến giải thuật có để giải thuật tốt Nguyễn Văn Linh Tiêu chuẩn đánh giá giải thuật tốt • Một giải thuật xem tốt đạt tiêu chuẩn sau: – Thực – Tốn nhớ – Thực nhanh • Trong khuôn khổ môn học này, quan tâm đến tiêu chuẩn thực nhanh Nguyễn Văn Linh Thời gian thực chương trình • Thời gian thực chương trình hàm kích thước liệu vào, ký hiệu T(n) n kích thước (độ lớn) liệ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ố • Thời gian thực chương trình hàm không âm, tức T(n) ≥ ∀ n ≥ Nguyễn Văn Linh Ðơn vị đo thời gian thực • Ðơn vị T(n) đơn vị đo thời gian bình thường giờ, phút giây mà thường xác định số lệnh thực máy tính lý tưởng • 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 Nguyễn Văn Linh Thời gian thực trường hợp xấu • Nói chung thời gian thực chương trình không phụ thuộc vào kích thước mà phụ thuộc vào tính chất liệu vào • Vì thường ta coi T(n) thời gian thực chương trình trường hợp xấu liệu vào có kích thước n, tức là: T(n) thời gian lớn để thực chương trình liệu vào có kích thước n Nguyễn Văn Linh Tỷ suất tăng • Ta nói hàm không âm T(n) có tỷ suất tăng (growth rate) f(n) tồn số C N0 cho T(n) ≤ Cf(n) với n ≥ N0 • Ta chứng minh “Cho hàm không âm T(n) bất kỳ, ta tìm tỷ suất tăng f(n) nó” Nguyễn Văn Linh Tỷ suất tăng (tt) • Ví dụ 1: Giả sử T(0) = 1, T(1) = tổng quát T(n) = (n+1)2 Ðặt N0 = C = với n ≥1 dễ dàng chứng minh T(n) = (n+1)2 ≤ 4n2 với n ≥ 1, tức tỷ suất tăng T(n) n2 • Ví dụ 2: Tỷ suất tăng hàm T(n) = 3n3 + 2n2 n3 Thực vậy, cho N0 = C = ta dễ dàng chứng minh với n ≥ 3n3 + 2n2 ≤ 5n3 Nguyễn Văn Linh Khái niệm độ phức tạp giải thuật • Giả sử ta có hai giải thuật P1 P2 với thời gian thực tương ứng T1(n) = 100n2 T2(n) = 5n3 • Khi n>20 T1 < T2 Sở dĩ tỷ suất tăng T1 nhỏ tỷ suất tăng T2 • Như cách hợp lý ta xét tỷ suất tăng hàm thời gian thực chương trình thay xét thân thời gian thực • Cho hàm T(n), T(n) gọi có độ phức tạp f(n) tồn C, N0 cho T(n) ≤ Cf(n) với n ≥ N0 (tức T(n) có tỷ suất tăng f(n)) kí hiệu T(n) O(f(n)) (đọc “ô f(n)”) Nguyễn Văn Linh Ba trường a k - [d(b)]k hợp NR = a -1 d(b) • Trường hợp 1: a > d(b) Trong công thức ta có ak > [d(b)]k, theo quy tắc lấy độ phức tạp ta có NR O(ak) = O(nlogba) = NTN Do T(n) O(nlogba) • Trường hợp 2: a < d(b) Trong công thức ta có [d(b)]k > ak, theo quy tắc lấy độ phức tạp ta có NR O([d(b)]k) = O(nlogbd(b)) > NTN Do T(n) O(nlogbd(b)) Nguyễn Văn Linh Ba trường hợp (tt) a k - [d(b)]k NR = a -1 d(b) Trường hợp 3: a = d(b) Công thức không xác đinh nên ta phải tính trực tiếp nghiệm riêng: j k -1  a  k k k NR = [d(b)] ∑  = a = a k ∑  j =  d(b)  j= k -1 (do a = d(b)) Do n = bk nên k = logbn ak = nlogba Vậy NR nlogbalogbn > NTN Do T(n) O(nlogbalogbn) Nguyễn Văn Linh 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 quát • d(n)=n hàm nhân • a = b = • d(b) = b = < a • T(n) = O(nlogba) = O(nlog4) = O(n2) Nguyễn Văn Linh 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 quát • d(n)=n2 hàm nhân • a = b = • d(b) = b2 = = a • T(n) = O(nlogbalogbn) = O(nlog4logn) = O(n2logn) Nguyễn Văn Linh 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 • T(n) = O(nlogbd(b)) = O(nlog8) = O(n3) Nguyễn Văn Linh Nghiệm phương trình đệ quy tổng quát d(n) hàm nhân • Trong trường hợp hàm tiến triển hàm nhân á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 lấy MAX(NR,NTN) Nguyễn Văn Linh Ví dụ: GPT với T(1) = n T(n) = 2T  + nlogn 2 • PT thuộc dạng phương trình tổng quát d(n) = nlogn hàm nhân • NTN = 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 Nguyễn Văn Linh Ví dụ (tt) NR = ∑ a jd ( b k - j ) = ∑ j k - j log2k - j k -1 k -1 j= j= k(k + 1) NR = ∑ (k - j) = = O(2k k ) j= k k -1 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 • T(n) = O(nlog2n) Nguyễn Văn Linh BT4-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 quát • d(n)=1là hàm nhân • a = b = • d(b) = = a • T(n) = O(nlogbalogbn) = O(nlog1logn) = O(logn) Nguyễn Văn Linh BT4-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 quát • d(n)=logn hàm nhân • NTN = O(nlogba)=O(nlog2)=O(n) • Tính trực tiếp nghiệm riêng Nguyễn Văn Linh n BT4 - : GTP voi T(1) = va T(n) = 2T  + logn 2 k −1 k −1 j =0 j =0 NR = ∑ a j d (b k − j ) = ∑ j log k − j k −1 k −1 k −1 j =0 j =0 j =0 NR = ∑ j (k − j ) = ∑ k j − ∑ j j −1 NR = O(k ∑ ) = O(k ) −1 j =0 k −1 j k NR = O(k k ) = O(n log n) > n = NTN T (n) = O(n log n) Nguyễn Văn Linh Bài 8-2: C k n 1neu k = hoac k = n = k −1 k C + C n −1 n −1  • Gọi T(n) thời gian để tính Ckn • Thì thời gian để tính Cmn-1 T(n-1) • Khi n=1 k=0 hoac k=1 => CT trả giá trị 1, tốn O(1) = C1 • Khi n>1, trường hợp xấu nhất, CT phải làm việc: – Tính Ckn-1 Ck-1n-1, tốn 2T(n-1) – Phép cộng, trả kq, tốn C2 • Ta có pt: T(1)=C1 T(n)=2T(n-1) +C2 Nguyễn Văn Linh GIẢI • Ta có T(n) = 2T(n-1) + C2 • 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 Nguyễn Văn Linh • T(n) = 2n-1C1 + (2n-1-1)C2 = (C1+C2)2n-1 - C2 = O(2n) Nguyễn Văn Linh [...]... các chương trình gọi nhau theo sơ đồ sau: A B B1 C B2 B12 Nguyễn Văn Linh B 11 Phân tích các chương trình đệ qui • Có thể thấy hình ảnh chương trình đệ quy A như sau: A • Để phân tích các các chương trình đệ quy ta cần: – Thành lập phương trình đệ quy – Giải phương trình đệ quy, nghiệm của phương trình đệ quy sẽ là thời gian thực hiện của chương trình đệ quy Nguyễn Văn Linh Chương trình đệ quy • Chương. .. {5} và {6} đều tốn O (1) thời gian, việc so sánh a[j -1] > a[j] cũng tốn O (1) thời gian, do đó lệnh {3} tốn O (1) thời gian • Vòng lặp {2} thực hiện (n-i) lần, mỗi lần O (1) do đó vòng lặp {2} tốn O((n-i) .1) = O(n-i) • Vòng lặp {1} có i chạy từ 1 đến n -1 nên thời gian thực hiện của vòng lặp {1} và cũng là độ phức tạp của giải thuật là n(n − 1) T(n) = ∑ (n − i) = = O(n 2 ) 2 i =1 n 1 Nguyễn Văn Linh Tìm... của chương trình đệ quy tính n! • Gọi T(n) là thời gian tính n! • Thì T(n -1) là thời gian tính (n -1) ! • Trong trường hợp n = 0 thì chương trình chỉ thực hiện một lệnh return 1, nên tốn O (1) , do đó ta có T(0) = C1 • Trong trường hợp n>0 chương trình phải gọi đệ quy Giai_thua(n -1) , việc gọi đệ quy này tốn T(n -1) , sau khi có kết quả của việc gọi đệ quy, chương trình phải nhân kết quả đó với n và return tích. .. 8 phần tử 7, 4, 8, 9, 3, 1, 6, 2 7 4 8 9 3 1 6 2 7 4 8 9 7 4 7 4 3 1 6 2 8 9 8 4 7 3 1 9 8 9 3 1 1 3 4 7 8 9 6 2 2 6 1 2 3 6 1 2 3 4 6 7 8 9 Nguyễn Văn Linh 6 2 Phương trình đệ quy của giải thuật MergeSort • Gọi T(n) là thời gian thực hiện MergeSort một danh sách n phần tử • Thì T(n/2) là thời gian thực hiện MergeSort một danh sách n/2 phần tử • Khi L có độ dài 1 (n = 1) thì chương trình chỉ làm một... Bài toán đệ quy tổng quát • Ðể giải một bài toán kích thước n, ta chia bài toán đã cho thành a bài toán con, mỗi bài toán con có kích thước n/b Giải các bài toán con này và tổng hợp kết quả lại để được kết quả của bài toán đã cho • Với các bài toán con chúng ta cũng sẽ áp dụng phương pháp đó để tiếp tục chia nhỏ ra nữa cho đến các bài toán con kích thước 1 Kĩ thuật này sẽ dẫn chúng ta đến một giải thuật. .. thời gian để giải bài toán con kích thước n/b • Khi n = 1 theo giả thiết trên thì thời gian giải bài toán kích thước 1 là 1 đơn vị, tức là T (1) = 1 • Khi n lớn hơn 1, ta phải giải đệ quy a bài toán con kích thước n/b, mỗi bài toán con tốn T(n/b) nên thời gian cho a lời giải đệ quy này là aT(n/b) • Ngoài ra ta còn phải tốn thời gian để phân chia bài toán và tổng hợp các kết quả, thời gian này theo giả... Quy tắc cộng: Nếu T1(n) và T2(n) là thời gian thực hiện của hai đoạn chương trình P1 và P2; và T1(n)=O(f(n)), T2(n)=O(g(n)) thì thời gian thực hiện của đoạn hai chương trình đó nối tiếp nhau là T(n)=O(max(f(n),g(n))) • Quy tắc nhân: Nếu T1(n) và T2(n) là thời gian thực hiện của hai đoạn chương trình P1và P2 và T1(n) = O(f(n)), T2(n) = O(g(n)) thì thời gian thực hiện của đoạn hai đoạn chương trình đó lồng... rằng mỗi bài toán con kích thước 1 lấy một đơn vị thời gian • Giả thiết thời gian để chia bài toán kích thước n thành các bài toán con kích thước n/b và tổng hợp kết quả từ các bài toán con để được lời giải của bài toán ban đầu là d(n) Nguyễn Văn Linh Thành lập phương trình đệ quy tổng quát • Nếu gọi T(n) là thời gian để giải bài toán kích thước n • Thì T(n/b) là thời gian để giải bài toán con kích... nêu n = 0 C1 T(n) =  T(n - 1) + C 2 nêu n > 0 Nguyễn Văn Linh Giải thuật MergeSort List MergeSort (List L; int n){ List L1,L2 if (n= =1) return(L); else { Chia đôi L thành L1 và L2, với độ dài n/2; return(Merge(MergeSort(L1,n/2),MergeSort(L2,n/2))); }; }; • Hàm MergeSort nhận một danh sách có độ dài n và trả về một danh sách đã được sắp xếp • Thủ tục Merge nhận hai danh sách đã được sắp L1 và L2 mỗi... for(i= 0; i=i +1; j ) /*3*/ if (a[j].key < a[j -1] .key) { /*4*/ temp=a[j -1] ; /*5*/ a[j -1] = a[j]; /*6*/ a[j] = temp; } } Nguyễn Văn Linh Tính thời gian thực hiện của thủ tục sắp xếp “nổi bọt” • Đây là chương trình sử dụng các vòng lặp xác định Toàn bộ chương trình chỉ gồm một lệnh lặp {1} , lồng trong lệnh {1} là lệnh lặp {2}, lồng trong lệnh {2} là lệnh {3} và lồng trong lệnh ... tích, đánh giá giải thuật • Cần phải phân tích, đánh giá giải thuật để: – Lựa chọn giải thuật tốt giải thuật để cài đặt chương trình giải toán đặt – Cải tiến giải thuật có để giải thuật tốt Nguyễn... d(bk-j) = d(b.b.b…b) = d(b).d(b)…d(b) = [d(b)] k-j k k -1 ( ) = ∑ a [d(b)] NR = ∑ a d b j= j k- j k -1 j= j k- j  a  -1 j   k -1  a  k  d(b)  = [d(b)]k ∑  = [d(b)]  a j =  d(b)  -1 ... Nguyễn Văn Linh Bài toán đệ quy tổng quát • Ðể giải toán kích thước n, ta chia toán cho thành a toán con, toán có kích thước n/b Giải toán tổng hợp kết lại để kết toán cho • Với toán áp dụng phương

Ngày đăng: 04/04/2016, 12:08

Từ khóa liên quan

Mục lục

  • CHƯƠNG 1: KỸ THUẬT PHÂN TÍCH THUẬT TOÁN

  • MỤC TIÊU

  • Sự cần thiết phải phân tích, đánh giá giải thuật

  • Tiêu chuẩn đánh giá một giải thuật là tốt

  • Thời gian thực hiện của chương trình

  • Ðơn vị đo thời gian thực hiện

  • Thời gian thực hiện trong trường hợp xấu nhất

  • Tỷ suất tăng

  • Tỷ suất tăng (tt)

  • Khái niệm độ phức tạp của giải thuật

  • Khái niệm độ phức tạp của giải thuật (tt)

  • Phương pháp tính độ phức tạp

  • Qui tắc tổng quát để phân tích một chương trình không có chương trình con

  • Ví dụ 1: Thủ tục sắp xếp “nổi bọt”

  • Tính thời gian thực hiện của thủ tục sắp xếp “nổi bọt”

  • Tìm kiếm tuần tự

  • Tìm kiếm tuần tự (tt)

  • Slide 18

  • Tính độ phức tạp của hàm tìm kiếm tuần tự

  • Ðộ phức tạp của chương trình có gọi chương trình con không đệ qui

Tài liệu cùng người dùng

Tài liệu liên quan