1. Trang chủ
  2. » Giáo Dục - Đào Tạo

thiết kế và đánh giá thuật toán - trần tuấn minh -2 doc

16 558 3

Đ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

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 1,55 MB

Nội dung

Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 17 - IV. Phân tích thuật toán Khi xây dựng được thuật toán để giải bài toán thì có hằng loạt vấn đề được đặt của bài toán hay không ? tính hay không ? hân tích đánh giá thời gian chạy của ra để phân tích. Thường là các vấn đề sau : - Yêu cầu về tính đúng đắn của thuật toán, thuật toán có cho lời giải đúng - Tính đơn giản của thuật toán. Thường ta mong muốn có được một thuật toán đơn giản, dễ hiểu, dễ lập trình. Đặc biệt là những thuật toán chỉ dùng một vài lần ta cần coi trọng tính chất này, vì công sức và thời gian bỏ ra để xây dựng thuật toán thường lớn hơn rất nhiều so với thời gian thực hiện nó. - Yêu cầu về không gian : thuật toán được xây dựng có phù hợp với bộ nhớ của máy - Yêu cầu về thời gian : Thời gian chạy của thuật toán có nhanh không ? Một bài toán thường có nhiều thuật toán để giải, cho nên yêu cầu một thuật toán dẫn nhanh đến kết quả là một đòi hỏi đương nhiên. . . . . . . . Trong phần này ta quan tâm chủ yếu đến tốc độ của thuật toán. Ta cũng lưu ý rằng thời gian chạy của thuật toán và dung lượng bộ nhớ nhiều khi không cân đối được để có một giải pháp trọn vẹn. Chẳng hạn, thuật toán sắp xếp nội sẽ có thời gian chạy nhanh hơn vì dữ liệu được lưu trử trong bộ nhớ trong, và do đó không phù hợp trong trường hợp kích thước dữ liệu lớn. Ngược lại, các thuật toán sắp xếp ngoài phù hợp với kích thước dữ liệu lớn vì dữ liệu được lưu trử chính ở các thiết bò ngoài, nhưng khi đó tốc độ lại chậm hơn. ác bước trong quá trình p1. C thuật toán Bước p ân tíc thời gian chạy của thuật toán là quan âm đe kích t ước d như dữ liệu nhập của thuật toán và quyết - đầu tiên trong việc h h ta án h ữ liệu, sẽ được dùng Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 18 - đònh phân tích nào là thích hợp. Ta có thể xem thời gian chạy của thuật toán là một àm theo kích thước của dữ liệu nhập. Nếu gọi n là kích thước của dữ liệu nhập thì thời gia hực h T của thuật toán được biểu diễn như một hàm theo n, ký hiệu là : T(n). - Bước thứ hai trong việc phân tích đánh giá thời gian chạy của một thuật toán là nhân ra các thao tác trừu tượng của thuật toán để tách biệt sự phân tích và sự cài đặt. Bởi vì ta biết rằng tốc độ xử lý của máy tính và các bộ dòch của các ngôn ự xác đònh cần bao nhiêu micro giây chạy trên một máy tính cụ ợc xác đònh bởi tính chất của thuật toán, còn yéu tố thứ hai năng của máy tính. Điều này cho ta thấy rằng T(n) không ùch tốt hơn là biểu diễn theo số các chỉ thò t Ví d h n t iện ngữ lập trình cấp cao đều ảnh hưởng đến thời gian chạy của thuật toán, nhưng những yếu tố này ảnh hưởng không đồng đều với các lọai máy trên đó cài đặt thuật toán, vì vậy không thể dựa vào chúng để đánh giá thời gian chạy của thuật toán. Chẳng hạn ta tách biệt sự xem xét có bao nhiêu phép toán so sánh trong một thuật toán sắp xếp khỏi s thể. Yếu tố thứ nhất dư được xác đònh bởi tính thể được biểu diễn bằng giây, phút được; ca rong thuật toán. ụ : Xét : for(i = 1; i < n; i++) (1) ) for(j = 1; j < n; j++) (2 Ký hiệu : T(n) là thời gian thực hiện câu lệnh (2) : 1 1 2 3 ……. . . n-1 (2) n n n n nnT )( += nnn naln )1( )1( −=+ − 43421 L ) - Bước thứ ba trong việc phân tích đánh giá thời gian chạy của một thuật ët toán học với mục đích tìm ra các giá trò trung bình và trường hợp xấu nhất cho mỗi đại lượng cơ bản. Chẳng hạn, khi sắp xếp một dãy các phần tử, thời gian chạy to ển nhiên còn phụ thuộc vào tính chất của như : * Dãy c * Dãy của dãy có thứ tự ngẫu nhiên. 2. toán là sự phân tích về ma của thuật án hi dữ liệu nhập ó thứ tự thuận. có thứ tự ngược. * Các số hạng Các ký hiệu tiệm cận a) Ký hiệu O lớn (big – oh) : Đònh nghóa : Cho hàm f : N* ⎯⎯→ N * . Ta đònh nghóa : O(f(n)) = {t : N* ⎯⎯→ N * | ∃ c∈ R + , ∃n 0 ∈ N, ∀ n ≥ n 0 , t(n) ≤ cf(n)} ∈ ⇔ ∃ ∈ ∃n 0 ∈ ∀ ≥ 0 ≤ cf(n) . O(f(n)) gọi là cấp của f(n). Với t : N* ⎯⎯→ N * t(n) O(f(n)) c R + , N, n n , t(n) Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 19 - Nhận xét : a) t(n) ∈ O(t(n)) ) t(n) t(n) ≤ cf(n) . b ∈ O(f(n)) ⇒ ∃ c∈ R + , ∀ n ∈ N , Các tính chất : Tính chất 1 : f : N* ⎯⎯→Với mọi hàm N * : ∈• )2(2 )( nnf O ⇒ f(n) ∈ O(h(n)). Tín h O(g(n)) ⇔ g(n) ∈ O(f(n)) và f(n) ∈ O(g(n)). n) ∉ O(f(n)). ⎪ ⎩ ⎪ ⎨ ⎧ ∈• ⇒∈ )()( )()( 22 nOnf nOnf Tính chất 2: a) f(n) ∈ O(g(n)) và g(n) ∈ O(h(n)) b) g(n) ∈ O(h(n)) ⇒ O(g(n)) ⊆ O(h(n)). ất 3: h c a) O(f(n)) = b) O(f( ) ⊂ O(g(n)) ⇔ f(n) ∈ O(g(n)) và g(n) Tính chất 4: a) lim () () n fn gn →∞ = c ≠ 0 ⇔ O(f(n)) = O(g(n)) b) lim () fn = 0 ⇒ O(f(n)) () n gn →∞ ⊂ O(g(n)) = O(g(n)± f(n)) Ví dụ : - Hàm f(n) = 2n 5 + 3n 3 + 6n 2 + 2 có cấp O(n 5 ) vì : lim n n →∞ =≠20 5 . - Hàm f(n) = 2 nnn+++236 532 2 n là O(n! ) vì : lim ! n n n →∞ = 2 0 . - Hàm 2 n+1 ∈ O(2 n ) . b) N ⎯⎯→ N * , Ta có : : Ký hiệu Ω : Ký hiệu này dùng để chỉ chặn dưới của thời gian chạy của thuật toán Ta đònh nghóa : Ω (f(n)) = {t : N ⎯⎯→ N * | ∃ c∈ R + , ∃n 0 ∈ N, ∀ n ≥ n 0 , t(n) ≥ cf(n)} Tính chất 6: Cho f, g : f(n) ∈ O(g(n)) ⇔ g(n) ∈ Ω (f(n)). c) Ký hiệu θ : Đònh nghóa (n)) = O(f(n)) ∩ Ω (f(n)). ính ch át 7: θ(f T a θ (g(n)) ⇔ ,d∈ n 0 ∈ N, ∀ n ≥ n 0 ≤ f(n) ≤ (n) . 3. ät số l các ật toa f(n) ∈ ∃ c R + , ∃ , cg(n) dg Mo ớp thu ùn àu hết c thuật ùn được iới thiệ ng giáo h này tiệm tới một trong các hàm sau : Ha ác toa g u tro trìn cận Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 20 - 1 : Nếu át cả c chỉ th chương trình đều được thực hiện chỉ một vài lần và ta nói thời gian cha ủa no ằng so Logn hi th gian c ủa c trìn gari ïy uộc l n trong các chương trình mà giải 1 bài tóan lớn bằng cách chuyển ät hằng số nào ến tính. iải g 1 cách độc lập, sau đó tổ hợp các lời giải. ) . 2 : : n \ Hàm 2 n (1) ta ác ò của ïy c ù là h á. (2) : K ời hạy c hương h là Lo t. Thời gian cha th oại này xuất hiệ nó thành 1 bài toán nhỏ hơn, bằng cách cắt bỏ kích thước mo đó. Cơ số Logarit có thể làm thay đổi hằng số đó nhưng không nhiều. (3) n : Khi thời gian chạy của chương trình là tuy (4) nLogn : Thời gian chạy thuộc loại này xuất hiện trong các chương trình mà giải 1 bài toán lớn bằng cách chuyển nó thành các bài toán nhỏ hơn, ké đến g quyết chún (5) n 2 : Thời gian chạy của thuật toán là bậc 2, thường là xử lý các cặp phần tử dữ liệu (có thể là 2 vòng lặp lồng nhau). Trường hợp này chỉ có ý nghóa thực tế khi bài toán nhỏ. (6) n 3 : Một thuật toán xử lý bộ ba các phần tử dữ liệu (có thể là 3 vòng lặp lồng nhau) có thời gian chạy bậc 3. Trường hợp này chỉ có ý nghóa thực tế khi bài toán nhỏ. n (7 Sau đây là các giá trò xấp xỉ của các hàm trên n lg n Nlgn n 2 n 3 1 1 0 0 1 1 2 2 2 1 2 4 8 4 4 n 2 8 16 64 16 8 8 3 24 64 512 256 16 16 4 64 256 4096 65536 3 160 32768 2.147.483.648 2 32 5 1024 Dễ thấy rằng : O(1) ⊂ O(lg n) ⊂ O(n) ⊂ O(nlgn) ⊂ O Các hàm loại : 2 n , n!, n n thường được gọi là các hàm loại mũ. thuật toán với øi gian chạy có cấp hàm loại mũ thì tốc độ Các hàm n, Log ïi đa thức. Thuật toán với thời gian chạy có cấp hàm đa thức thường chấp nhận được. i chu đánh giá độ phức tạp của thuật toán thể c ụ thể. Giả sử thuật toán 1 đòi hỏi thời n là ia lớn thì uật to án 2. Nhưng n thu toán ïn, với C 1 = 200, toán 1 øi hỏi ời gia g khi đó thuật toá dụ : rực tiếp (Straight Se ection) : SSS ],. . .,x[n]. (n 2 ) ⊂ O(n 3 ) ⊂ O(2 n ). thơ rất chậm. loại : n 3 , n 2 , nLog 2 n, 2 n thường được gọi là các hàm loa Gh ù : Các hằng số bò bỏ qua trong biểu thức có ó ý nghóa quan trọng trong ứng dụng c gia C 1 n, còn thuật toán 2 đòi hỏi thời g n là C 2 n 2 . Dó nhiên là với n đủ th án 1 nhanh hơn thuật to với n nhỏ thì có thể thuật toán 1 nhanh hơ ật 2. Chẳng ha n C 2 = 10, và với n = 5, thì thuật đo í th n 1000, tro n 2 chỉ có 250. V Thuật toán Chọn t l Sắp xếp tăng dần dãy các khóa : x[1],x[2 Ý tưởng : Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 21 - - Bước i chọn phần tử nhỏ nhất của tử nhỏ nhất này cho x[i]. dãy x[i],x[i+1],. . .,x[n], đổi chỗ phần - Lặp thao tác này với i = 1 n-1. Thuật toán : 1 for (i =1;i <= n-1;i++) { 2 k = i; Khởi động chỉ số của giá trò nhỏ nhất : (k = = i) 3 a = x[i]; Lấy ra g iá trò của phần tử thứ i 4 for (j=i+1;j <= n; j++) Tìm phần tử nhỏ nhất trong mảng x[i] x[n] 5 if (x[ j] < a) { 6 a = x[j]; 7 k = j; Giữ vò trí của phần tử nhỏ nhất a là giá trò nhỏ nhất (Khi đó : x[k] = = a) } 8 x[k] = x[i]; Đổi vò trí của phần tử nhỏ nhất 9 x[i] = a; Cho phần tử a vò trí thứ i. } Độ phức tạp thuật toán: Lệnh (1) thực hiện n lần, (Lần n để thoát khỏi for). Mỗi lệnh (2), (3), (8), (9) thực hiện n-1 lần. Lệnh (4) thực hiện n + (n-1) + +2 = nn() + − 1 2 1 lần. nn() − 1 Lệnh (5) thực hiện A = (n-1)+(n-2)+ +1 = 2 lần. // So sánh • Xét trường hợp xấu nhất : Tức là lệnh (5) luôn thỏa điều kiện, tương ứng dãy có thứ tự ngược lại, nn() − 1 2 Mỗi lệnh (6), (7) thực hiện lần. o đó : ) • Xét trường h Tức là g ứng dãy có thứ tự thuận, ) và ) khô ù : T(n) = n + 5n - 5 ∈ θ (n 2 ). ch thuật toán đệ qui. D T(n) = n + 4(n-1) + n(n+1)/2 - 1 + 3n(n-1)/2 = 2n 2 + 4n - 5 ≤ 6n 2 . 2 T(n) ∈ θ (n ợp tốt nhất lệnh (5) luôn không thỏa điều kiện, tươn (6 (7 ng thực hiện lần nào. Ta co 2 4. Phân tí Phần lớn các thuật toán đều dựa trên sự phân rã đệ qui một bài toán lớn thành các bài toán nhỏ, rồi dùng lời giải các bài toán nhỏ để giải bài toán ban đầu. Thời gian chạy của thuật toán như thế được xác đònh bởi kích thước và số lượng các Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 22 - b ùn con và giá phải trảài toa của sự phân rã. Nên các thuật toán đệ qui có thời gian ời gian chạy cho các dữ liệu nhập có kíc này được diễn dòch thành một công thức toán học gọi là công thức truy hồi. Do đó, ạp cu thường phải giải các phương trình truy hồi. Có , ta nghiên cứu các cách thường dùng sau. A. Phương pháp thay thế chạy phụ thuộc vào th h thước nhỏ hơn, điều để tính nhiều cách giải độ phức t ûa thuật toán, ta : ức thường gặp sau đây được giải bằng phương pháp thay thế : ệt qua dữ liệu nhập để bỏ bớt 1 phần tử . T N = T N-1 + N N-2 + (N-1) +N = T N-2 3+ +(N-2) + (N-1) +N = . . . = 1 + 2 + . . . + N = Dựa vào dạng truy hồi của phương trình để tính độ phức tạp của thuật toán dực vào các kích thùc dữ liệu nhỏ hơn. Một số công th Công thức 1: ⎩ ⎨ ⎧ = ≥+ = − 1;1 2; 1 N NNT T N N Công thức này thường dùng cho các chương trình đệ qui mà có vòng lặp duy = T 2 )1( +NN . Công thức 2: ⎪ ⎨ = ;0 2 N T N ⎩ = 1 huật toán đệ qui mà tại mỗi bước chia ⎪ ⎧ ≥+ 2;1 NT N Công thức này thường dùng cho các t dữ liệu nhập thành 2 phần . Giả sử N = 2 n , có : .2 2 2 1 1 22 n n T n T n T = = + − = + − = L T N = log 2 N . Suy ra : Công thức 3: ⎪ ⎩ ⎪ ⎨ ⎧ ≥+ = 2; 2 NNT T N = 1;0 N N Công thức này thường dùng cho các thuật toán đệ qui mà tại mỗi bước thực hiện, chia đôi dữ liệu nhập nhưng có kiểm tra mỗi phần tử của dữ liệu nhập. .2N NNN NT N ≅+++= L 842 Công thức 4: ⎪ ⎩ ⎪ ⎨ ⎧ = ≥+ 2;12 NT N = 1;0 2 N T N Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 23 - Công thức này thường dùng cho các thuật toán theo phương pháp chia để ò. tr n n TTT nnn −1 22 nn n TT n ==++=+ − = += − L11 2 2 1 2 1 2 2 2 1 222 n 2 2 =⇒ ình truy hồi n − −2 n nT NNLogT N 2 =⇒ B. Dùng phương trình đặc trưng để giải phương tr : B1) Phương trình truy hồi tuyến tính thuần nhất với các hệ số không đổi : Xét phương trình dạng : 0 110 = + + + −− knknn tatata L (1) Trong đố các knnnit i − − = ,,1,, à các ẩn số. (2) = − − − 0 0 1 1 1 kk k kn aXaX L X = 0 hiển nhiên là nghiệm của (2), nhưng ta quan tâm đến nghiệm của hương trình : (3) Phương trình (3) gọi là phương trình đặc trưng bậc k của phương trình truy TH1 : Tất cả các nghiệm của (3 ) đều là nghiệm đơn. ả sử rằng là các nghiệm đơn của (3), thì ta có thể kiểm tra được , với c 1 , c 2 , … , c k là các hằng xác đònh là nghiệm của (3). ép của (3). Với n > k, xét đa thức p bậc n : 1 XpXXXknaX knkn k n −−− =−++L Vì u là nghiệm kép của (3), nên tồn tại đa thức r thỏa : 2 XruX − =−++− −− kn k n knaun L n a (1). lL Đặt t = X n , ta đưa (1) về dạng : n 0)( 1 1 10 =++++ − −− kk kkkn aXaXaXaX L ⎢ ⎣ + 0 k aXa ⎢ ⎡ ⇔ X =+++ p 0)( 1 1 10 =++++= − − kk kk aXaXaXaXp L hồi (1) . Gi k XXX ,,, 21 L ∑ = = k i n iin Xct 1 từ k điều kiện ban đầu TH2 : Phương trình (3 ) có nghiệm bội. - Giả sử u là nghiệm k )1()( 10 nanXaXq n −+= ))'(()( )(Xp = )()( Khi đó : 0)]'()([)( 2 =−= − XruXXXXq kn Do đó : + n uanua 0)()1( 1 10 Tức là : t = nu n cũng là nghiệm củ Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 24 - - Tổng quát, nếu u là nghiệm bội m của (3) thì : n n , n 2 u n , . . ., n m-1 u n cũng là nghiệm của (1) i đó tổ hợp tuyến tính của c nghiệm này và các nghiệm khác của rình đặc ưng (3) sẽ là nghiệm của (1). 0)2(8)1(6)( nTnTn ìn : t n = u , nu Kh ác phương t tr Ví dụ 1 : ⎪ ⎧ T =−+−− ⎪ ⎩ = 2)1(T ⎨ = 1)0(T Xét phương tr h 0)2(8)1(6)( = − + − − nTnTnT Đặt : X n = T(n) = Có các nghiệm : 2 = 4 Vậy Do : 0 21 2 2 1 1 =+⇒=+⇒= ccXcXc Ta có : 086 21 =+− −− nnn XXX Phương trình đặc trưng : 6 2 +− XX 08 X 1 = 2, X : XcXcnT 2211 )( += nn 111)0( 212211 =+⇒=+⇒= ccXcXc 0 T )1(T 24222 Vậy có : ⎩ ⎨ =+ 242 21 cc ⎧ =+ 1 21 cc ⇒ .0,1 21 = = cc Ví dụ 2 : ⎪ ⎪ = −− 0;0 (8)1(5 n nTnT ⎪ ⎩ 2 ⎪ = 1;1 n ⎨ ⎧ = ≥−+− = 2; 3);3(4)2 )( n nnT nT Ta có phương trình : 0)3(4)2(8)1(5)( = − − − +−− nTnTnTnT Phương trình đặc trưng tương ứng là : 0485 23 =−+− XXX ⇔ 0)2)(1( 2 =−− XX Vậy ta có các nghiệm của phương trình đặc trưng : 1 (đơn), 2 (kép) =++ 2 122 321 21 ccc uy ra : Nên nghiệm chung là : nnn ncccnT 221)( 321 ++= Dựa vào các điều kiện đầu, ta có : ⎧ =+ 0 cc ⎪ ⎩ =++ 84 321 ccc ⎪ ⎨ 2 1 ;2;2 3 S 21 1 −==−= ccc ậy : 1 −− −n n V 2)( = +n nT 22 Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 25 - B2) Phư ng trì hồi tuyến tính không th ương ta n +++ − L ới b l thức bậc d theo n. iến đo về da í dụ : 3= Ta có : =− + − 3 cho (1) nhân do ;363)3( 1 1 n nn tt : ược dạng thuần nhất : ơ nh truy uần nhất với các hệ số không đổi : Ph trình dạng : 0 ta n )(npbta n knk = − 11 V à hằng số, p là đa B åi ïng thuần nhất. V nn tt 2 1 − − n ⎢ ⎢ ⎣ ⎡ =− + + ;32)2( 1 1 n nn tt : của vế 2 Lấy (2) – (3), đ 065 11 =+ − −+ nnn ttt 5. Các phép toán trên các ký hiệu tiệm cận a) Phép toán cộng : θ (g(n)) θ( f(n)) + θ (g(n)) = ax(f(n),g(n)) - Đặc biệt , Nếu c là hằng số , thì : (f(n)) (g(n)) Đặc đánh giá thời gian thực hiện của thuật toán, ta chỉ cần Sắp tăng dần các phần từ của dãy số x. θ( f(n)) + θ (g(n)) = Max(θ( f(n)) , Nhận xét : - θ( f(n) + g(n)) = θ (M θ( cf(n)) = θ( f(n)) b) Phép toán nhân : θ θ = θ(f(n)g(n)) biệt : θ( f(n) 2 ) = (θ(f(n)) 2 c) Phép toán tích cực : Đó là lệnh trong thuật toán mà thời gian thực hiện nó không ít hơn thời gian thực hiện các lệnh khác. Khi quan tâm đến các bước thực hiện của phép toán này. Ví dụ : Dùng thuật toán chèn trực tiếp SIS (straight insertion Sort): Ý tưởng : Ở bước i , giả sử dãy : x[1], , x[i] đã có thứ tự. Tìm vò trí thích hợp của phần tử x[i+1] để chèn nó vào dãy x[1], , x[i], kết quả là ta có dãy x[1], , x[i+1] có thứ tự. Thực hiện thao tác trên với i = 1,2,, , n-1. Thuật toán : for (i =1; i<= n-1; i++) { a = x[i+1]; biến tạm a nhận giá trò của x[i+1] x[0] = a; j = i; Chuẩn bò cho a tiến về trái (khởi động j While (a < x[j]) a còn < x[j], a còn tiến về trái { x[ j+1] = x[ j]; dời giá trò về phải Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 26 - j = j-1; Chuẩn bò cho a tiến tiếp về trái } a ≥ x[j] x[j+1] = a; Chèn x[i+1] vào vò trí thích hợp - là sau x[j]. } Có thể xem phép toán tích cực ở đây là : a< x[j]; Trong trường hợp xấu nhất, tương ứng dãy giảm dần. Số lần thực hiện của phép toán này là : 2 ⋅ ⋅ ⋅ + n = 1 2 )1 + ( − + nn . Vậy : T(n) ∈ θ (n 2 ). Trong trường hợp tốt nhất, tương ứng dãy tăng dần.Số lần thực hiện của phép toán này là : n - 1 Vậy : T(n) ∈ θ (n). 6. Phân tích trường hợp trung bình Ta biết rằng thời gian thực hiện thuật toán không phải chỉ phụ thuộc vào ích thước dữ liệu mà còn phụ thuộc vào tình trạng dữ liệu nhập nữa. Chẳng hạn, c l õn khả năng tốt nhất hoặc xấu nhất của thuật Bây giờ ta phân tích trong trường hợp ngẫu nhiên, tức là đánh giá độ phức øi g thực hiện thuật oa . Việc đánh giá trung bình thường khó và phức tạp đòi hỏi những công cụ toán học tinh vi, hơn nữa việc tính trung bình có thể có nhiều cách quan niệm khác nhau.Ở đây, việc đánh giá độ phức tạp thuật toán trong trường hợp trung bình ta dựa trên cơ sở lý thuyết xác suất ( rời rạc ) . í dụ k khi xếp tăng dần một dãy các số nguyên, thì các số đã có sẵn thứ tự tăng dần, hoặc ngượ ại, hoặc ngẫu nhiên. Phần trên ta đã xét trong như g toán . tạp trung bình thơ ian t ùn V : rí có thể chèn x[i+1]. ûa mỗi vò trí được x[i+1] chèn vào là đồng đều. Tức là xác Xét thuật toán chèn trực tiếp . Xét bước thứ i của vòng lặp. Danh sách có i phần tử đã được sắp. Phần tử x[i+1] có thể chèn vào i-1 khe giữa các x[j], j ∈ {1, i} và thêm 2 vò trí đầu cuối nữa (Chèn trước x[1] và chèn sau x[i] ), tổng cộng là có i+1 vò t Giả sử khả năng cu suất của mỗi vò trí được x[i+1] chèn vào là 1+i . Gọi X 1 i là biến ngẫu nhiên chỉ số lượng các phép toán so sánh cần thiết để x[i+1] chèn vào vò trí thích hợp của nó trong mỗi bước. Ta có : Trần Tuấn Minh Khoa Toán-Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com [...]... một thuật toán để sinh ra một phiên bản khác chạy nhanh hơn được gọi là tối ưu thuật toán Khi tối ưu một thuật toán ta thường dựa vào một nguyên lý, đó là nguyên lý Profile : “ Tìm điểm mất thời gian nhiều nhất của thuật toán “ Một số kỹ thuật sau thường dùng để tối ưu thuật toán : 1 Kỹ thuật tối ưu các vòng lặp Trần Tuấn Minh Khoa Toán- Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật. .. phức tạp của các thuật toán sau : r = m%n; while(r) { m = n; n = r; r = m%n; } return n gt (n) ≡ if (n == 0 || n == 1) return 1; else return (n * gt(n-1)) ; Trần Tuấn Minh Khoa Toán- Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 31 - Fib(n) ≡ if ( n < 2 ) return 2; else return Fib(n-1)+Fib(n-2); Fibo(n) ≡ i... j; } } Bài 3 : Tính thời gian thực hiện trung bình của các phép toán so sánh trong các thuật toán : 1 Đổi chỗ trực tiếp 2 Chọn trực tiếp Bài 4 : Xác đònh T(n) , với : Trần Tuấn Minh Khoa Toán- Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 32 - ⎧T (n) − 3T (n − 1)48T (n − 2) = 0, n > 1 ⎪ 1 ⎨T (0) = 1 ⎪T (1)... tính một lần 4 giá trò : c[i][j] c[i+1][j] c[i][j+1] c[i+1][j+1] c[i][j] c[ii][j] c[i][jj] c[ii][jj] TT2 : Nhan2(a,b,c) ≡ i = 1; while (i < n) { ii = i+1; j = 1; while ( j < n ) { jj = j+1; c[i][j] = 0; c[i][jj] = 0; Trần Tuấn Minh Khoa Toán- Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 30 - a[ii][kk]*b[kk][jj];... ⎩ Bài 5 : Cải tiến thuật toán chèn trực tiếp bằng cách : Dùng phương pháp tìm kiếm nhò phân để xác đònh vò trí cần chèn của ai trong dãy con đã có thứ tự a1,…, ai-1 Thuật toán cải tiến gọi là chèn nhò phân Hãy thiết kế, cài đặt và đánh giá độ phức tạp thời gian của thuật toán Bài 6 : Tìm các ví dụ về các thuật toán mà khi cải tiến ( bằng cách nào đó ), số lần thực hiện của thuật toán giảm đáng kể (... đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 28 Đây là điểm quan tâm đầu tiên khi cải tiến thuật toán, vì vòng lặp là câu lệnh thường làm tăng độ phức tạp của thuật toán Việc cải tiến tập trung vào : - Cố gắng giảm các vòng lặp lồng nhau - Tăng số lệnh thực hiện trong một bước lặp để giảm số lượng các bước lặp - Tách các lệnh không phụ thuộc vào chỉ số lặp... lại như sau : S = 1; Trần Tuấn Minh Khoa Toán- Tin Sưu t m b i: www.daihoc.com.vn Simpo PDF Mergevà đánh giá thuật toán Thiết kế and Split Unregistered Version - http://www.simpopdf.com - 29 p = 1; for( i = 1; i . www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 17 - IV. Phân tích thuật toán Khi xây dựng được thuật toán để giải bài toán thì có hằng loạt vấn đề được đặt của bài toán hay không. Trần Tuấn Minh Khoa Toán- Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 18 - đònh. , t(n) Trần Tuấn Minh Khoa Toán- Tin Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Sưu tầm bởi: www.daihoc.com.vn Thiết kế và đánh giá thuật toán - 19 - Nhận

Ngày đăng: 21/07/2014, 23:22

TỪ KHÓA LIÊN QUAN