Giáo trình hình thành ứng dụng chế độ đánh giá giải thuật theo phương pháp tổng quan p2

10 8 0
Giáo trình hình thành ứng dụng chế độ đánh giá giải thuật theo phương pháp tổng quan p2

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

Thông tin tài liệu

Tham khảo tài liệu ''giáo trình hình thành ứng dụng chế độ đánh giá giải thuật theo phương pháp tổng quan p2'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

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)”) Ví dụ 1-5: T(n)= (n+1)2 có tỷ suất tăng n2 nên T(n)= (n+1)2 O(n2) Chú ý: O(C.f(n))=O(f(n)) với C số Ðặc biệt O(C)=O(1) Nói cách khác độ phức tạp tính tốn giải thuật hàm chặn hàm thời gian Vì nhân tử C hàm chặn khơng có ý nghĩa nên ta bỏ qua hàm thể độ phức tạp có dạng thường gặp sau: log2n, n, nlog2n, n2, n3, 2n, n!, nn Ba hàm cuối ta gọi dạng hàm mũ, hàm khác gọi hàm đa thức Một giải thuật mà thời gian thực có độ phức tạp hàm đa thức chấp nhận tức cài đặt để thực hiện, cịn giải thuật có độ phức tạp hàm mũ phải tìm cách cải tiến giải thuật Vì ký hiệu log2n thường có mặt độ phức tạp nên khôn khổ tài liệu này, ta dùng logn thay cho log2n với mục đích gọn cách viết Khi nói đến độ phức tạp giải thuật ta muốn nói đến hiệu thời gian thực chương trình nên ta xem việc xác định thời gian thực hiên chương trình xác định độ phức tạp giải thuật 1.5 CÁCH TÍNH ÐỘ PHỨC TẠP Cách tính độ phức tạp giải thuật vấn đề khơng đơn giản Tuy nhiên ta tn theo số nguyên tắc sau: 1.5.1 Qui tắc cộng Nếu T1(n) T2(n) thời gian thực hai đoạn chương trình P1 P2; T1(n)=O(f(n)), T2(n)=O(g(n)) thời gian thực đoạn hai chương trình nối tiếp T(n)=O(max(f(n),g(n))) Ví dụ 1-6: Lệnh gán x:=15 tốn thời gian hay O(1), Lệnh đọc liệu READ(x) tốn thời gian hay O(1).Vậy thời gian thực hai lệnh nối tiếp O(max(1,1))=O(1) 1.5.2 Qui tắc nhân Nếu T1(n) T2(n) thời gian thực hai đoạn chương trình P1và P2 T1(n) = O(f(n)), T2(n) = O(g(n)) thời gian thực đoạn hai đoạn chương trình lồng T(n) = O(f(n).g(n)) 1.5.3 Qui tắc tổng qt để phân tích chương trình: - Thời gian thực lệnh gán, READ, WRITE O(1) Nguyễn Văn Linh Trang y bu to k d o m o c w N O W ! PD m w o c u -tr a c k h a n g e Vi e lic O W N y bu to k lic C Kĩ thuật phân tích giải thuật w w d o XC er Giải thuật w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c bu y - Thời gian thực chuỗi lệnh xác định qui tắc cộng Như thời gian thời gian thi hành lệnh lâu chuỗi lệnh - Thời gian thực cấu trúc IF thời gian lớn thực lệnh sau THEN sau ELSE thời gian kiểm tra điều kiện Thường thời gian kiểm tra điều kiện O(1) - Thời gian thực vòng lặp tổng (trên tất lần lặp) thời gian thực thân vòng lặp Nếu thời gian thực thân vịng lặp khơng đổi thời gian thực vịng lặp tích số lần lặp với thời gian thực thân vòng lặp Ví dụ 1-7: Tính thời gian thực thủ tục xếp “nổi bọt” PROCEDURE Bubble(VAR a: ARRAY[1 n] OF integer); VAR i,j,temp: Integer; BEGIN {1} FOR i:=1 TO n-1 DO {2} FOR j:=n DOWNTO i+1 DO {3} IF a[j-1]>a[j]THEN BEGIN{hoán vị a[i], a[j]} {4} temp := a[j-1]; {5} a[j-1] := a[j]; {6} a[j] := temp; END; END; Về giải thuật xếp bọt, bàn kĩ chương Ở đây, quan tâm đến độ phức tạp giải thuật Ta thấy tồn chương trình gồm lệnh lặp {1}, lồng lệnh {1} lệnh {2}, lồng lệnh {2} lệnh {3} lồng lệnh {3} lệnh nối tiếp {4}, {5} {6} Chúng ta tiến hành tính độ phức tạp theo thứ tự từ Trước hết, ba lệnh gán {4}, {5} {6} tốn O(1) thời gian, việc so sánh a[j-1] > a[j] tốn O(1) thời gian, lệnh {3} tốn O(1) thời gian Vịng lặp {2} thực (n-i) lần, lần O(1) vịng lặp {2} tốn O((n-i).1) = O(n-i) Vịng lặp {1} lặp có I chạy từ đến n-1nên thời gian thực vòng lặp {1} độ phức tạp giải thuật n −1 i =1 n(n − 1) = O(n2) Chú ý: Trong trường hợp vịng lặp khơng xác định số lần lặp phải lấy số lần lặp trường hợp xấu Ví dụ 1-8: Tìm kiếm Hàm tìm kiếm Search nhận vào mảng a có n số nguyên số nguyên x, hàm trả giá trị logic TRUE tồn phần tử a[i] = x, ngược lại hàm trả FALSE Nguyễn Văn Linh Trang to k d o m o c T(n) = ∑ (n − i) = w N O W ! PD m w o c u -tr a c k h a n g e Vi e lic O W N y bu to k lic C Kĩ thuật phân tích giải thuật w w d o XC er Giải thuật w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e y N c Giải thuật tìm kiếm so sánh x với phần tử mảng a, a[1], tồn a[i] = x dừng trả TRUE, ngược lại tất phần tử a khác X trả FALSE FUNCTION Search(a:ARRAY[1 n] OF Integer;x:Integer):Boolean; VAR i:Integer; Found:Boolean; BEGIN {1} i:=1; {2} Found:=FALSE; {3} WHILE(ia[j] THEN Swap(a[j-1], a[j]); END; Trong cách viết trên, chương trình Bubble gọi chương trình Swap, để tính thời gian thực Bubble, trước hết ta cần tính thời gian thực Swap Dễ thấy thời gian thực Swap O(1) bao gồm lệnh gán Trong Bubble, lệnh {3} gọi Swap nên tốn O(1), lệnh {2} thực n-i lần, lần tốn O(1) nên tốn O(n-i) Lệnh {1} thực n-1 lần nên n −1 i =1 n(n − 1) = O(n2) 1.6 PHÂN TÍCH CÁC CHƯƠNG TRÌNH ÐỆ QUY Với chương trình có gọi chương trình đệ quy, ta khơng thể áp dụng cách tính vừa trình bày mục 1.5.4 chương trình đệ quy gọi thân Có thể thấy hình ảnh chương trình đệ quy A sau: A Hình 1-2: Sơ đồ chương trình A đệ quy Nguyễn Văn Linh Trang to k d o m o c T(n) = ∑ (n − i) = w N O W ! PD m w o c u -tr a c k h a n g e Vi e lic O W N y bu to k lic C Kĩ thuật phân tích giải thuật w w d o XC er Giải thuật w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e N bu y c Với phương pháp tính độ phức tạp trình bày mục 1.5.4 khơng thể thực Bởi theo phương pháp thì, để tính thời gian thực hiên chương trình A, ta phải tính thời gian thực chương trình A vịng luẩn quẩn khơng thể kết thúc Với chương trình đệ quy, trước hết ta cần thành lập phương trình đệ quy, sau giải phương trình đệ quy, nghiệm phương trình đệ quy thời gian thực chương trình đệ quy 1.6.1 Thành lập phương trình đệ quy Phương trình đệ quy phương trình biểu diễn mối liên hệ T(n) T(k), T(n) thời gian thực chương trình với kích thước liệu nhập n, T(k) thời gian thực chương trình với kích thước liệu nhập k, với k < n Ðể thành lập phương trình đệ quy, ta phải vào chương trình đệ quy Thơng thường chương trình đệ quy để giải tốn kích thước n, phải có trường hợp dừng ứng với n cụ thể lời gọi đệ quy để giải tốn kích thước k (k0 chương trình phải gọi đệ quy Giai_thua(n-1), việc gọi đệ quy tốn T(n-1), sau có kết việc gọi đệ quy, chương trình phải nhân kết với n gán cho Giai_thua Thời gian để thực phép nhân phép gán C2 Vậy ta có Nguyễn Văn Linh Trang to k d o m o m o c u -tr a c k w lic to k C lic w w w d o Kĩ thuật phân tích giải thuật Giải thuật w w w C bu y N O W ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e y N c T(n) = C1 nêu n = T(n - 1) + C nêu n > Ðây phương trình đệ quy để tính thời gian thực chương trình đệ quy Giai_thua Ví du 1-11: Chúng ta xét thủ tục MergeSort cách phác thảo sau: FUNCTION MergeSort (L:List; n:Integer):List; VAR L1,L2:List; BEGIN IF n=1 THEN RETURN(L) ELSE BEGIN Chia đôi L thành L1 L2, với độ dài n/2; RETURN(Merge(MergeSort(L1,n/2),MergeSort(L2,n/2))); END; END; Chẳng hạn để xếp danh sách L gồm phần tử 7, 4, 8, 9, 3, 1, 6, ta có mơ hình minh họa MergeSort sau: 9 7 9 9 6 2 6 Hình 1-3: Minh hoạ xếp trộn Hàm MergeSort nhận danh sách có độ dài n trả danh sách xếp Thủ tục Merge nhận hai danh sách L1 L2 danh sách có độ dài n , trộn chúng lại với để danh sách gồm n phần tử có thứ tự Nguyễn Văn Linh Trang bu to k d o m o m o c u -tr a c k w lic to k C lic w w w d o w w w Kĩ thuật phân tích giải thuật Giải thuật C bu y N O W ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e y N c Giải thuật chi tiết Merge ta bàn sau, để ý thời gian để Merge danh sách có độ dài n O(n) n Gọi T(n) thời gian thực MergeSort danh sách n phần tử T( ) thời gian thực MergeSort danh sách n phần tử Khi L có độ dài (n = 1) chương trình làm việc return(L), việc tốn O(1) = C1 thời gian Trong trường hợp n > 1, chương trình phải thực gọi đệ quy MergeSort hai lần cho L1 L2 với độ dài n thời gian để gọi n hai lần đệ quy 2T( ) Ngồi cịn phải tốn thời gian cho việc chia danh sách L thành hai nửa trộn hai danh sách kết (Merge) Người ta xác đinh thời gian để chia danh sách Merge O(n) = C2n Vậy ta có phương trình đệ quy sau: T(n) = C1 nêu n = n 2T( ) + C n nêu n > 1.6.2 Giải phương trình đệ quy Có ba phương pháp giải phương trình đệ quy: 1.- Phương pháp truy hồi 2.- Phương pháp đoán nghiệm 3.- Lời giải tổng quát lớp phương trình đệ quy 1.6.2.1 Phương pháp truy hồi Dùng đệ quy để thay T(m) với m < n vào phía phải phương trình tất T(m) với m > thay biểu thức T(1) T(0) Vì T(1) T(0) ln số nên có cơng thức T(n) chứa số hạng liên quan đến n số Từ cơng thức ta suy T(n) Ví dụ 1-12: Giải phương trình T(n) = C1 nêu n = T(n - 1) + C nêu n > Ta có T(n) = T(n-1) + C2 T(n) = [T(n-2) + C2] + C2 = T(n-2) + 2C2 T(n) = [T(n-3) + C2] + 2C2 = T(n-3) + 3C2 …… T(n) = T(n-i) + iC2 Quá trình kết thúc n - i = hay i = n Khi ta có T(n) = T(0) + nC2 = C1 + n C2 = O(n) Nguyễn Văn Linh Trang 10 bu to k d o m o m o c u -tr a c k w lic to k C lic w w w d o w w w Kĩ thuật phân tích giải thuật Giải thuật C bu y N O W ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c Ví dụ 1-13: Giải phương trình T(n) = C1 nêu n = n 2T( ) + C n nêu n > n Ta có T(n) = 2T( ) + 2C n n n n T(n) = [ 2T( ) + C ] + C n = 4T( ) + 2C n 4 n n n T(n) = [ 2T( ) + C ] + 2C n = 8T( ) + 3C n 8 ……… T(n) = i T( n ) + iC n 2i Quá trình suy rộng kết thúc n i i = hay = n i = logn Khi ta có: T(n) = nT(1) + lognC2n = C1n + C2nlogn = O(nlogn) 1.6.2.2 Phương pháp đoán nghiệm Ta đoán nghiệm f(n) dùng chứng minh quy nạp để chứng tỏ T(n) ≤ f(n) với n Thông thường f(n) hàm quen thuộc logn, n, nlogn, n2, n3, 2n, n!, nn Ðơi đốn dạng f(n) có vài tham số chưa xác định (chẳng hạn f(n) = an2 với a chưa xác định) trình chứng minh quy nạp ta suy diễn giá trị thích hợp tham số C1 nêu n = n 2T( ) + C n nêu n > Ví dụ 1-12: Giải phương trình đệ quy T(n) = Giả sử đoán f(n) = anlogn Với n = ta thấy cách đốn khơng anlogn có giá trị khơng phụ thuộc vào giá trị a Vì ta thử f(n) = anlogn + b Với n = ta có, T(1) = C1 f(1) = b, muốn T(1) ≤ f(1) b ≥ C1 (*) Giả sử T(k) ≤ f(k), tức T(k) ≤ aklogk + b với k < n (giả thiết quy nạp) Ta phải chứng minh T(n) ≤ anlogn + b với n n Giả sử n ≥ 2, từ phương trình cho ta có T(n) = 2T( ) + C2n Áp dụng giả thiết quy nạp với k = n T(n) = 2T( ) + C2n n < n ta có: n ≤ 2[a log n + b] + C2n Nguyễn Văn Linh Trang 11 y bu to k d o m o c w N O W ! PD m o c u -tr a c k h a n g e Vi e lic O W N y bu to k C lic w w w d o XC er Kĩ thuật phân tích giải thuật Giải thuật w w w F- w C h a n g e Vi e ! XC er PD F- c u -tr a c k c h a n g e Vi e N bu y c T(n) ≤ (anlogn - an + 2b) + C2n T(n) ≤ (anlogn + b) + [b + (C2 - a)n] Nếu lấy a ≥ C2 + b (**) ta T(n) ≤ (anlogn + b) + [b +(C2 - C2 - b )n ] T(n) ≤ (anlogn + b) + (1-n) b T(n) ≤ anlogn + b = f(n) (do b>0 1-n b T(n) = (I.1) Ta sử dụng phương pháp truy hồi để giải phương trình Khi n > ta có n b T(n) = aT( ) + d(n) T(n)= a[aT( n n n n ) + d(n) ) + d( ) ] + d(n) = a T( ) + ad( b b b b T(n)= a [a T( = n n n n n n 3 ) + d ( ) ] + ad ( ) + d(n) = a T ( ) + a d ( ) + ad ( ) + d(n) b b b b b b i -1 n a = a T( i ) + ‡”a j d( j ) b b j= i Giả sử n = bk, trình suy rộng kết thúc i = k Khi ta T( n ) = T(1) = Thay vào ta có: bk k -1 T(n) = a + ‡”a j d (b k - j ) (I.2) k j= 1.6.2.3.1 Hàm tiến triển, nghiệm nghiệm riêng Trong phương trình đệ quy (I.1) hàm thời gian d(n) gọi hàm tiến triển (driving function) Trong công thức (I.2), ak = nlogba gọi nghiệm (homogeneous solutions) Nghiệm nghiệm xác d(n) = với n Nói cách khác, nghiệm biểu diễn thời gian để giải tất toán k -1 Trong công thức (I.2), ‡”a d (b ) gọi nghiệm riêng (particular solutions) j k- j j= Nghiệm riêng biểu diễn thời gian phải tốn để tạo toán tổng hợp kết chúng Nhìn vào cơng thức ta thấy nghiệm riêng phụ thuộc vào hàm tiến triển, số lượng kích thước tốn Khi tìm nghiệm phương trình (I.1), phải tìm nghiệm riêng so sánh với nghiệm Nếu nghiệm lớn hơn, ta lấy nghiệm làm nghiệm phương trình (I.1) Việc xác định nghiệm riêng khơng đơn giản chút nào, vậy, tìm lớp hàm tiến triển dễ dàng xác định nghiệm riêng Nguyễn Văn Linh Trang 13 to k d o m o o c u -tr a c k w lic w w w d o Kĩ thuật phân tích giải thuật m C lic k to Giải thuật w w w C bu y N O W ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c ... lập phương trình đệ quy, sau giải phương trình đệ quy, nghiệm phương trình đệ quy thời gian thực chương trình đệ quy 1.6.1 Thành lập phương trình đệ quy Phương trình đệ quy phương trình biểu... Vậy ta có phương trình đệ quy sau: T(n) = C1 nêu n = n 2T( ) + C n nêu n > 1.6.2 Giải phương trình đệ quy Có ba phương pháp giải phương trình đệ quy: 1.- Phương pháp truy hồi 2.- Phương pháp đoán... quát cho lớp phương trình đệ quy Khi thiết kế giải thuật, người ta thường vận dụng phương pháp chia để trị mà ta bàn chi tiết chương Ở chi trình bày tóm tắt phương pháp sau: Ðể giải tốn kích

Ngày đăng: 11/05/2021, 02:42

Mục lục

  • GIẢI THUẬT

    • ĐẠI HỌC CẦN THƠ - 12/2003

    • PHẦN TỔNG QUAN

    • Chương 1: KĨ THUẬT PHÂN TÍCH GIẢI THUẬT

      • 1.1 TỔNG QUAN

        • 1.1.1 Mục tiêu

        • 1.1.2 Kiến thức cơ bản cần thiết

        • 1.1.3 Tài liệu tham khảo

        • 1.1.4 Nội dung cốt lõi

        • 1.2 SỰ CẦN THIẾT PHẢI PHÂN TÍCH GIẢI THUẬT

        • 1.3 THỜI GIAN THỰC HIỆN CỦA CHƯƠNG TRÌNH

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

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

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

          • 1.4 TỶ SUẤT TĂNG VÀ ÐỘ PHỨC TẠP CỦA GIẢI THUẬT

            • 1.4.1 Tỷ suất tăng

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

            • 1.5 CÁCH TÍNH ÐỘ PHỨC TẠP

              • 1.5.1 Qui tắc cộng

              • 1.5.2 Qui tắc nhân

              • 1.5.3 Qui tắc tổng quát để phân tích một chương trình:

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

              • 1.6 PHÂN TÍCH CÁC CHƯƠNG TRÌNH ÐỆ QUY

                • 1.6.1 Thành lập phương trình đệ quy

                • 1.6.2 Giải phương trình đệ quy

                  • 1.6.2.1 Phương pháp truy hồi

                  • 1.6.2.2 Phương pháp đoán nghiệm

                  • 1.6.2.3 Lời giải tổng quát cho một lớp các phương trình đệ quy

                    • 1.6.2.3.1 Hàm tiến triển, nghiệm thuần nhất và nghiệm riêng

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

Tài liệu liên quan