Giáo trình nghiên cứu các kiểu dữ liệu có cấu trúc.
GIớI THIệU MÔN HọC Trong ngôn ngữ lậ p trì nh, d÷ liƯ u bao gåm hai kiĨ u chÝ nh : - Kiể u liệ u đơn gi¶ n: char, int, long, float, enumeration, subrange - KiĨ u d÷ liƯ u cã cÊ u tróc : struct, array, file (kiĨ u d÷ liƯ u cã kÝ ch thước không đổi) Giá o trì nh nà y tậ p trung o việ c nghiê n cứu cá c kiể u liệ u có cấ u trúc có kí ch thước không đổi hoặ c thay đổi ngôn ngữ lậ p trì nh, mô tả thông qua ngôn ngữ C Ngoà i giới thiệ u cá c giả i thuậ t chung quanh cá c cấ u trúc liệ u nà y nh c¸ ch tỉ chøc, thùc hiƯ n c¸ c phé p toá n tì m kiế m, sắ p thứ tự nội, sắ p thứ tự ngoạ i Điề u kiệ n để tì m hiể u rõ rà ng môn học nà y học viê n đ biế t cá c i niƯ m vỊ kü th t lË p tr× nh trê n ngôn ngữ C Trong phầ n mở đầ u, bà i giả ng nà y giới thiệ u cá ch thức phâ n tí ch & thiế t kế giả i thuậ t trước tì m hiể u cá c cấ u trúc liƯ u thĨ Vµ o ci khãa häc, sinh viê n : - Phâ n tí ch độ phức tạ p cá c chương trì nh có kí ch thước nhỏ trung bì nh - Nhậ n thức đ ược cầ n thiế t cđa viƯ c thiÕ t kÕ cÊ u tróc liệ u - Là m quen với cá c i niệ m stacks, queues, danh sá ch đặ c, danh sá ch liê n kế t, câ y nhị phâ n, câ y nhị phâ n tì m kiế m, - Hiể u nguyê n lý việ c xâ y dựng chương trì nh má y tÝ nh - Cã thĨ chän lùa viƯ c tổ chức liệ u phù hợp cá c giả i thuậ t xử lý liệ u có hiệ u xâ y dựng chương trì nh Sinh viê n cầ n lưu ý rằ ng, tùy o công việ c cụ thể mà ta nê n chọn cấ u trúc liệ u nà o thí ch hợp theo hướng tối ưu thêi gian thùc hiƯ n hay tèi u vỊ bé nhớ Chương I PHÂN Tí CH & THIếT Kế GIảI THUậT I mở đầu Hầ u hế t cá c bà i toá n đề u có nhiề u giả i thuậ t c để giả i qu t chóng VË y lµ m thÕ nµ o chọn giả i thuậ t tốt nhấ t ? ViƯ c chän lùa phơ thc vµ o nhiỊ u yế u tố : Độ phức tạ p tí nh toá n giả i thuậ t, chiế m dung lượng nhớ, tầ n suấ t sử dụng, tí nh đơn giả n, tốc độ thực hiệ n Thông thường mục tiê u chọn lựa : Giả i thuậ t rõ rà ng, dễ hiĨ u, dƠ m∙ hãa vµ hiƯ u chØ nh Gi¶ i th t sư dơng cã hiƯ u tà i nguyê n má y tí nh đặ c biệ t chạ y cà ng nhanh cà ng tốt Do viế t chương trì nh để chạ y lầ n hoặ c í t chạ y mục tiê u quan trọng Ngược lạ i viế t chương trì nh để chạ y nhiề u lầ n phí tổn chạ y chương trì nh vượt phí tổn lậ p chương trì nh, nhấ t phả i nhậ p nhiề u số liệ u Nói chung, người lậ p trì nh phả i biế t chọn lựa, viế t, đá nh giá cá c giả i thuậ t để có giả i thuậ t tối ưu cho bà i toá n mì nh II đánh giá thời gian chạy chương trì nh Thời gian chạ y chưong trì nh phụ thuộc o : Input cho chương trì nh Chấ t lượng m sinh chương trì nh dị ch Trạ ng thá i tốc độ cá c lệ nh chạ y trê n má y Độ phức tạ p thời gian giả i thuậ t Điề u chức nă ng nhậ p Kí ch thước input (vÝ dơ lµ n) vµ ta thêng ký hiƯ u T(n) đạ i lượng thời gian cầ n thiế t để giả i bà i toá n kí ch thước n Điề u 2, thường đá nh giá khó khă n phụ thuộc o phầ n mề m chương trì nh dị ch phầ n cứng má y Điề u điề u mà người lậ p trì nh cầ n khả o sá t để m tă ng tốc độ chương trì nh III ký hiệu o(n) (n) : Ta đá nh giá tỷ lệ phá t triể n cá c hà m T(n) qua ký hiệ u O(n) Ta nói thời gian chạ y T(n) chương trì nh O(n2) có nghĩ a : c > vµ n0 cho ∀ n ≥ n0 ta cã T(n) ≤ c.n2 VÝ dơ : Gi¶ sö T(0) = 1, T(1) = 4, v v Tổng t T(n) = (n +1)2 ta nói T(n) O(n2) đặ t c1 = 4, n0 = 1, th× n ≥ ta cã (n +1)2 ≤ 4n2 Nhng kh«ng thĨ lÊ y n0 = T(0) = không nhỏ c.02 = 0,∀c; gi¶ thiÕ t r» ng n ≥ vµ T(n) ≥ Ta nãi T(n) lµ O(f(n)) nÕ u ∃ const c vµ n0 cho T(n) c.f(n), n n0 Chương trì nh chạ y víi thêi gian O(f(n)) ta nãi nã ph¸ t triĨ n tû lƯ víi f(n) Khi nãi T(n) lµ O(f(n)) f(n) chặ n trê n T(n) §Ĩ nãi chỈ n díi cđa T(n) ta dïng ký hiƯ u Ω Ta nãi T(n) lµ Ω(g(n)) nÕ u ∃ const c, n0 cho T(n) ≥ c.g(n), ∀ n ≥ n0 VÝ dơ : §Ĩ kiĨ m tra T(n) = n3 + 2n2 (n3) ta đặ t c = th× T(n) ≥ c.n3, ∀n = 0, 1, (no= 0) * Sự trá i ngược tỷ lệ phá t triể n : Ta giả sử cá c chương trì nh đá nh giá bằ ng cá ch so sá nh cá c hà m thêi gian cđa chóng víi c¸ c h» ng tỷ lệ không đá ng kể Khi ta nói chương trì nh có thời gian chạ y O(n2) Nế u chương trì nh chạ y mấ t 100.n2 thời gian (mili giâ y) chương trì nh chạ y mấ t 5.n3 thời gian, ta có tỷ số thời gian chương trì nh lµ 5.n3/100.n2 = n/20, nghÜ a lµ n = 20 thời gian chạ y chương trì nh bằ ng nhau, n < 20 chương trì nh chạ y nhanh chương trì nh Do n > 20 nê n dùng chương trì nh Ví dụ : Có chương trì nh có độ phức tạ p c biể u diễ n bả ng đâ y Thời gian chạ y T(n) 100.n 5.n2 n3/2 2n Kí ch thước bà i toá n Kí ch thước bà i toá n tối đa cho 104s tèi ®a cho 103s 10 100 14 45 12 27 10 13 Tỷ lệ tă ng kí ch thước 10.0 lÇ n 3.2 lÇ n 2.3 lÇ n 1.3 lầ n Giả sử 103s chương trì nh giả i cá c bà i toá n có kÝ ch thíc tèi ®a cét NÕ u có má y tốt tốc độ tă ng lê n 10 lầ n kí ch thước tối đa tương ứng chương trì nh trì nh bà y ë cét TØ lÖ hai cét 1,2 ghi cột Như vậ y nế u đầ u tư tốc độ 10 lầ n thu lợi có 30% kí ch thước bà i toá n nế u dùng chương trì nh có độ phức tạ p O(2n) IV cách tí nh thời gian chạy chương trì nh : Qui tắc tổng: Giả sử T1(n) T2(n) thời gian chạ y chương trì nh P1 P2 tương ứng đá nh giá O(f(n)) O(g(n)) Khi T1(n) + T2(n) O(max(f(n),g(n))) (chạ y xong chương trì nh P1 chạ y P2) Chứng minh: Theo đị nh nghĩ a O(f(n)) O(g(n)) c1, n1, c2, n2 cho T1(n) ≤ c1.f(n) ∀ n ≥ n1 ; T2(n) c2.g(n) n n2 Đặ t n0 = max(n1, n2) NÕ u n ≥ no th× T1(n) + T2(n) ≤ (c1 + c2).max(f(n),g(n)) Qui t¾c tÝ ch: T1(n) T2(n) O(f(n).g(n)) Chứng minh : tương tự tổng Ví dụ : Có chương trì nh có thời gian chạ y tương ứng O(n2), O(n3), O(n.logn) Thế thời gian chạ y chương trì nh ®ång thêi lµ O(max(n2, n3, nlogn)) sÏ lµ O(n3) Nãi chung thời gian chạ y d y cố đị nh cá c bước thời gian chạ y lớn nhấ t bước nà o d y Cịng cã trêng hỵp cã hay nhiỊ u bước có thời gian chạ y không tương xứng (không lớn mà không nhỏ hơn) Khi qui tắ c tí nh tổng phả i tí nh tõng trêng hỵp VÝ dơ : f(n) = g(n) = { { n4 nÕ u n ch½ n n2 n2 nế u n lẻ nế u n chẵ n n3 nế u n lẽ Thời gian chạ y O(max(f(n),g(n))) n4 nế u n chẵ n n3 nÕ u n lỴ NÕ u g(n) ≤ f(n), n no, no const nà o O(f(n)+g(n)) O(f(n)) Ví dụ : O(n2 + n) = O(n2) Trước đưa qui tắ c chung để phâ n tí ch thời gian chạ y chương trì nh ta xé t ví dụ đơn giả n sau Ví dụ : Xé t chương trì nh Bubble dùng sắ p d y số nguyê n theo chiề u tă ng Procedure Bubble (var A: array [1 n] of integer); Var i, j, temp : integer ; Begin For i := to n For j := n downto i If A[j-1] > A[j] then Begin temp := A[j-1] ; A[j-1] := A[j] ; A[j] := temp ; End ; End ; Ph© n tÝ ch : - N số phầ n tử - kí ch thước bà i toá n Mỗi lệ nh gá n từ dòng - > dòng mấ t đơn vị thời gian, theo qui tắ c tí nh tổng O(max(1,1,1) = O(1) - Vòng If For lồng nhau, ta phả i xé t từ ngoà i Đối với điề u kiệ n sau If ph¶ i kiĨ m tra O(1) thêi gian Ta không chắ c thâ n lệ nh If tõ - cã thùc hiƯ n hay kh«ng Vì xé t trường hợp xấ u nhấ t nê n ta giả thuyế t cá c lệ nh tõ - ®Ị u cã thùc hiƯ n VË y nhãm If tõ c¸ c lƯ nh -6 lµ m mÊ t O(1) thêi gian - Ta xé t vòng lặ p ngoà i từ - Nguyê n tắ c chung vòng lặ p: thời gian vòng lặ p tổng thời gian lầ n lặ p thâ n vòng lậ p í t nhấ t O(1) cho lầ n lặ p số tă ng Số lầ n lặ p từ - n - i +1 VË y theo qui t¾ c tÝ ch : O((n - i +1), 1) lµ O(n -i +1) - Ta xé t vòng ngoà i chứa cá c lệ nh chương trì nh Lệ nh m n-1 lầ n, tốn n-1 đơn vị thời gian Vậ y tổng thời gian chạ y chương trì nh bị chặ n thời gian cố đị nh : n (n i + 1) = n * (n − 1) / tức O(n2) i =2 Tuy nhiê n qui tắ c đầ y đủ để phâ n tí ch chương trì nh Nói chung thời gian chạ y cđa lƯ nh h c nhãm lƯ nh cã thĨ lµ hµ m cđa kÝ ch thíc cá c input hoặ c hay nhiề u biế n Nhng chØ cã n - kÝ ch thíc cđa bà i toá n thông số cho phé p thời gian chạ y chương trì nh Qui tắc tí nh thời gian chạy a) Thời gian chạ y lệ nh gá n, read, write có giả thiế t O(1) b) Thời gian chạ y d y lệ nh xá c đị nh theo qui tắ c tổng; nghĩ a thời gian chạ y d y thời gian lín nhÊ t cđa lƯ nh nµ o ®ã d∙ y lƯ nh c) Thêi gian ch¹ y lƯ nh If lµ thêi gian thùc hiƯ n lƯ nh ®iỊ u kiƯ n céng víi thêi gian kiĨ m tra ®iỊ u kiƯ n Thêi gian thùc hiƯ n lƯ nh If cã cÊ u tróc If then eles thời gian kiể m tra điề u kiƯ n céng víi thêi gian lín nhÊ t cđa lệ nh rẽ nhá nh true false d) Thời gian thực hiệ n vòng lặ p tổng thời gian thực hiệ n thâ n vòng lặ p thời gian kiể m tra kế t thúc vòng lặ p e) Gọi thủ tục:Nế u chương trì nh có cá c thủ tục thủ tục nà o đệ qui ta có thĨ tÝ nh thêi gian ch¹ y cïng mét lóc, bắ t đầ u từ cá c thủ tục không gọi đế n cá c thủ tục c Tấ t nhiê n phả i có í t nhấ t thủ tục vậ y trường hợp nà y, nế u không phả i có thủ tục ®Ư qui Sau ®ã ta cã thĨ ®¸ nh gi¸ thời gian chạ y cá c thủ tục có gọi, đế n cá c thủ tục không chứa lời gọi đ đá nh giá Cứ ta lạ i đá nh giá thời gian chạ y cá c thủ tục có lời gọi đế n cá c thủ tục đ đá nh giá , nghĩ a thủ tục đá nh giá sau đá nh giá hế t cá c thủ tục mà đ ược gọi Nế u có thủ tục đệ qui tì m thứ tự tấ t cá c thủ tục cho thủ tục gọi đế n cá c thủ tục đ đá nh giá Khi ta phả i lậ p liê n hệ thủ tục đệ qui với hà m thời gian chưa biế t T(n) n kí ch thước cđa ®èi sè cđa thđ tơc Lóc ®ã ta cã thể nhậ n truy hồi T(n), nghĩ a phương trì nh diễ n tả T(n) qua cá c T(k) với cá c giá trị k c Ví dụ : Xé t chương trì nh đệ qui tí nh n giai thừa (n!), n kí ch thước hà m nª u trª n Function Fact (n:integer) : LongInt ; Begin If n nế u n Giả i phương trì nh : Gi¶ sư n > 2, ta cã thĨ khai triĨ n T(n-1) c«ng thøc : T(n) = 2.c + T(n-2) nÕ u n > Sau ®ã ta lạ i thay T(n-2) = c + T(n-3) ta T(n) = 3.c + T(n-3) nÕ u n > T(n) = i.c + T(n-i) nÕ u n > i Cuèi cïng ta thay i = n - 1, ta T(n) = c(n-1) + T(1) = c(n-1) + d KÕ t luË n T(n) lµ O(n) V sù phân lớp thuật toán : Như đ ý trê n, hầ u hế t cá c thuậ t toá n đề u có tham số chí nh N, Thông thường số lượng cá c phầ n tử liệ u xử lý mà ả nh hưởng rấ t nhiề u tới thời gian chạ y Tham số N bË c cđa ®a thøc, kÝ ch thíc cđa tậ p tin sắ p xế p hay tì m kiế m, số nút đồ thị Hầ u hế t tấ t thuậ t toá n bà i giả ng nà y có thời gian ch¹ y tiƯ m cË n tíi cá c hà m sau : Hầ u hế t tấ t cá c thị cá c chương trì nh đề u thực hiệ n mét lÇ n hay nhiỊ u nhÊ t chØ mét i lầ n Nế u tấ t cá c thị chương trì nh có tí nh chấ t nà y nói rằ ng thời gian chạ y hằ ng số Điề u nà y hiể n nhiê n mục tiê u phấ n đấ u để đạ t việ c thiế t kế thuậ t toá n logN Khi thời gian chạ y chương trì nh logarit, tức thời gian chạ y chương trì nh tiế n chậ m N lớn dầ n Thời gian chạ y loạ i nà y xuấ t hiệ n cá c chương trì nh mà giả i bà i toá n lớn bằ ng cá ch chuyể n nh bà i toá n nhỏ hơn, bằ ng cá ch c¾ t bá kÝ ch thíc bít h» ng số nà o Với mục đí ch chúng ta, thời gian chạ y có đ ược xem nhá h¬n h» ng sè "lín" C¬ sè cđa logarit m thay đổi hằ ng số không nhiề u: Khi n 1000 logN nế u số 10; 10 nế u số ; N 1000000, logN nhâ n gấ p đôi Bấ t nà o N nhâ n gấ p đôi, logN tă ng lê n thê m hằ ng số, logN không nhâ n gấ p đôi tới N tă ng tới N2 N Khi thời gian chạ y chương trì nh tuyế n tí nh, nói chung đâ y trường hợp mà số lượng nhỏ cá c xử lý m cho phầ n tử liệ u nhậ p Khi N 1.000.000 thời gian ch¹ y cịng cì nh vË y Khi N nhâ n gấ p đôi thời gian chạ y nhâ n gấ p đôi Đâ y tì nh tối ưu cho thuậ t toá n mà phả i xử lý N liệ u nhậ p (hay sả n sinh N liệ u xuấ t) NlogN Đâ y thời gian chạ y tă ng dầ n lê n cho cá c thuậ t toá n mà giả i bà i toá n bằ ng cá ch tá ch nh cá c bà i toá n nhỏ hơn, kế đế n giả i quyế t chúng cá ch độc lậ p sau tổ hợp cá c lời giả i Bởi thiế u tí nh từ tốt (có lẽ "tuyế n tÝ nh logarit" ?), chóng ta nãi r» ng thời gian chạ y thuậ t toá n thÕ lµ "NlogN" Khi N lµ 1000000, NlogN cã lÏ khoả ng triệ u Khi N nhâ n gấ p đôi, thời gian chạ y bị nhâ n lê n nhiề u gấ p đôi (nhưng không nhiề u lắ m) N2 Khi thời gian chạ y thuậ t toá n bậc hai, trường hợp nà y có ý nghĩ a thực tế cho cá c bà i toá n tương đối nhỏ Thời gian bì nh phương thường tă ng lê n cá c thuậ t toá n mà xử lý tấ t cá c cặ p phầ n tử liệ u (có thể vòng lặ p lồng nhau) Khi N 1000 thời gian chạ y 1000000 Khi N nhâ n đôi thời gian chạ y tă ng lê n gấ p lầ n N3 Tương tự, thuậ t toá n mà xử lý cá c phầ n tử liệ u (có lẽ vòng lặ p lồng nhau) có thời gian chạ y bË c vµ cịng chØ cã ý nghÜ a thực tế cá c bà i toá n nhỏ Khi N 100 thời gian chạ y 1.000.000 Khi N nhâ n đôi thời gian chạ y tă ng lê n gấ p lÇ n 2n Mét sè Ý t thuË t toá n có thời gian chạ y lũy thừa lạ i thÝ ch hỵp sè trêng hỵp thùc tế , mặ c dù cá c thuậ t toá n "sự é p buộc thô bạ o" để giả i bà i toá n Khi N 20 thời gian chạ y xấ p xỉ 1.000.000 Khi N gấ p thời gian chạ y nâ ng lê n lũy thừa Thời gian chạ y chương trì nh cụ thể hằ ng số nhâ n với cá c số hạ ng nói trê n cộng thê m số hạ ng nhỏ Cá c giá trị hằ ng số cá c số hạ ng phụ thuộc o cá c kế t phâ n tí ch cá c chi tiế t cà i đặ t Hệ số cđa h» ng sè liª n quan tíi sè chØ thị bê n vòng lặ p : tÇ ng tïy ý cđa thiÕ t kÕ th t toá n phả i cẩ n thậ n giới hạ n số thị Với N lớn cá c hằ ng số đóng vai trò chủ chốt, với N nhỏ cá c số hạ ng đóng góp o so sá nh thuậ t toá n khó khă n Ngoà i hà m vừa nói trê n có số hà m c, ví dụ thuậ t toá n với N2 phầ n tử liệ u nhậ p mà có thời gian chạ y bậ c theo N đ ược phâ n lớp thuậ t to¸ n N3/2 Mét sè thuË t to¸ n cã giai đoạ n phâ n tá ch nh cá c bà i toá n có thời gian chạ y xấ p xỉ với Nlog2N VI công thức truy hồi sở : Phầ n lớn cá c thuậ t toá n đề u dựa trê n việ c phâ n r đệ qui bà i toá n lớn nh cá c bà i toá n nhỏ hơn, dùng cá c 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á c thuậ t toá n xá c đị nh kí ch thước số lượng cá c bà i toá n giá phả i trả phâ n r Trong phầ n nà y ta quan sá t cá c phương phá p sở để phâ n tÝ ch c¸ c thuË t to¸ n nh trì nh bà y i công thức chuẩ n thường p dụng việ c phâ n tí ch nhiề u thuậ t toá n TÝ nh chÊ t rÊ t tù nhiª n chương trì nh đệ qui thời gian chạ y cho liệ u nhậ p có kí ch thíc N sÏ phơ thc vµ o thêi gian chạ y cho cá c liệ u nhậ p có kí ch thước nhỏ : điề u nà y diễ n dị ch nh công thức toá n học gọi quan hệ truy hồi Cá c công thức mô tả chí nh xá c tí nh nă ng cá c thuậ t toá n tương ứng, để có thời gian chạ y phả i giả i cá c bà i toá n truy hồi Bâ y ý o cá c công thức không phả i cá c thuậ t toá n Công thức : 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 qua liệ u nhậ p để bỏ bớt phầ n tử Cn = Cn-1 + n, víi n >= vµ C1 = Chứng minh : Cn khoả ng n2/2 Để giả i công thức truy hồi trê n, lầ n lượt p dụng chí nh công thức sau : Cn = Cn-1 + n = Cn-2 + (n-1) + n = = C1 + + + (n-2) + (n-1) + n = + + + n = n(n+1)/2 Công thức : Công thức nà y dùng cho chương trì nh đệ qui mà chia liệ u nhậ p nh phầ n bước Cn = Cn/2 + 1, với n >= C1 = Chứng minh : Cn khoả ng logn Phương trì nh nà y vô nghĩ a n chẵ n hay giả sử rằ ng n/2 phé p chia nguyê n : bâ y giả sử rằ ng n = 2m công thức luôn có nghĩ a Chóng ta viÕ t nh sau : C 2m = C 2m −1 + = C 2m − + = C 2m − + = = C 2m− m + m = m = log n Công thức chí nh xá c cho n tổng t phụ thuộc o biể u diễ n nhị phâ n n, nói chung Cn khoả ng logn với n Công thức : Công thức nà y dùng cho chương trì nh đệ qui mà chia đôi liệ u nhậ p kiể m tra phầ n tử cđa d÷ liƯ u nhË p Cn = Cn/2 + n, víi n >= vµ C1 = Chøng minh : Cn khoả ng 2n Tương tự trê n, công thức nà y chí nh tổng n + n/2 + n/4 + (dĩ nhiê n điề u nà y chí nh xá c n lũy thừa 2) Nế u d y vô hạ n, đâ y chuỗi hì nh học đơn giả n mà ước lượng chí nh xá c 2n Trong trường hợp tổng t lời giả i chí nh xá c phụ thuộc o biể u diễ n nhị phâ n n Công thức : Công thức nà y dùng cho chương trì nh đệ qui mà duyệ t tuyế n tí nh xuyê n qua liệ u nhậ p, tríc, trong, hay sau d÷ liƯ u nhË p chia đôi Cn = 2Cn/2 + n, với n >= vµ C1 = Chøng minh : Cn khoả ng nlogn Công thức nà y p dụng cho nhiề u thuậ t toá n theo phương phá p "chia để trị " 10 ... 1,2 ghi ë cét Như vậ y nế u đầ u tư tốc độ 10 lầ n thu lợi có 30% kí ch thước bà i toá n nế u dùng chương trì nh có độ phức tạ p O(2n) IV cách tí nh thời gian chạy chương trì nh : Qui tắc tổng:... không phả i có thủ tục đệ qui Sau ta đá nh giá thời gian chạ y cá c thủ tục có gọi, đế n cá c thủ tục không chứa lời gọi đ đá nh giá Cứ ta lạ i đá nh giá thời gian chạ y cá c thủ tục có lời gọi... < 20 chương trì nh chạ y nhanh chương trì nh Do n > 20 nê n dùng chương trì nh Ví dụ : Có chương trì nh có độ phức tạ p c biể u diễ n bả ng đâ y Thêi gian ch¹ y T(n) 100.n 5.n2 n3/2 2n Kí ch