Nội dung của tiểu luận bao gồm 3 chương với các nội dung: độ phức tạp thuật toán; phương pháp đệ quy; phương pháp quy hoạch động. Để nắm chi tiết hơn nội dung nghiên cứu, mời các bạn cùng tham khảo tiểu luận.
TRƢỜNG ĐẠI HỌC KHOA HỌC HUẾ KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP - TIỂU LUẬN THIẾT KẾ VÀ PHÂN TÍCH THUẬT TỐN LỚP CAO HỌC: NGÀNH KHOA HỌC MÁY TÍNH GVHD: TS: HỒNG QUANG HVTH: CAO CHÍ HIỂN 0985945261 GIA LAI, 01/ 2019 MỤC LỤC LỜI NÓI ĐẦU PHẦN I: NỘI DUNG I: ĐỘ PHỨC TẬP THUẬT TOÁN Độ phức tạp thuật toán: 2: Bài tập: Bài 1: So sánh độ phức tập thuật toán O( N ) O(log n) Bài 2: Viết hàm tính an (với a real, n word) có độ phức tạp tính toán O(1) II PHƢƠNG PHÁP ĐỆ QUY Tim hiểu đệ quy Bài tập Đệ quy kiểu liệu mảng Bài 3: Xóa tất phần tử dãy A gồm n phần tử có giá trị X Bài Viết chương trình tìm Max dạy A gồm n phần tử (n>0) Bài tập Đệ quy kiểu liệu danh sách liên kết đơn Bài 5: Xóa tất nút có trường Info giá trị x Bài 6: Tìm Max trường Info danh sách liên kết đơn Bài tập Đệ quy kiểu liệu nhi phân 12 Bài Viết hàm đếm số nút có trường Info = x 13 Bài Viết thủ tục đệ quy bổ sung nút vào tìm kiếm nhị phân 13 Cây tìm kiếm nhị phân: 13 III PHƢƠNG PHÁP QUY HOẠCH ĐỘNG Cơ sở lý thuyết 17 a) Tư tưởng phương pháp: 17 b) Phạm vi áp dụng: 17 c) Nguyên lý phương pháp: 17 Phƣơng pháp thực 17 Giải toán phƣơng pháp Quy hoạch động: (gồm bƣớc) 17 Một số toán Giải phƣơng pháp Quy hoạch động 17 Bài Bài toán túi nguyên (Số lượng loại đổ vật khơng hạn chế) 17 Bài 10 Bài tốn Sinh viên ôn thi 21 Bài 11 Người du lịch 25 Bài 12: Bài toán xâu cực đại: 30 TÀI LIỆU THAM KHẢO 34 LỜI NÓI ĐẦU Việc xác định độ phức tạp tính tốn thuật tốn cơng việc khơng đơn giản, trước quan tâm đến việc đánh giá thuật toán mà dừng lại mức độ đưa thuật toán để giải tốn Tuy nhiên tốn có nhiều thuật tốn để giải Do ta phải lựa chọn thuật đoán tối ưu Độ phức tạp thuật toán sở để đánh giá thuật toán có tốt thuật tốn khác hay khơng Đối với thuật tốn phức tạp việc xác định độ phức tạp cách xác khó khăn đặc biệt thuật toán sử dụng giải thuật đệ qui Trong phần náy, nhóm tơi đánh giá độ phức tạp số thuật toán Đưa số toán giải hệ thức truy hồi: - Dùng phương pháp Đệ quy để giải toán nhiều kiểu liệu như: Kiểu liệu bản, kiểu mảng, danh sách liên kết đơn, nhị phân tìm kiếm nhị phân - Dùng phương pháp Quy hoạch động để giải số tốn tối ưu Đây nội dung đề tài tập tiểu luận nhóm em: THIẾT KẾ VÀ PHÂN TÍCH THUẬT TỐN Mặc dù cố gắng tiểu luận không tránh khỏi sai sót Nhóm chúng em mong nhận ý kiến góp ý thầy hướng dẫn bạn Xin chân thành cảm ơn TS HOÀNG QUANG tận tình hướng dẫn tạo điều kiện cho chúng em hồn thành mơn học Gia Lai, ngày 10 tháng 01 năm 2019 Học viên thực Cao Chí Hiển Trang: PHẦN I: NỘI DUNG I: ĐỘ PHỨC TẬP THUẬT TỐN Độ phức tạp thuật tốn: Thời gian mà máy tính thực thuật tốn khơng phụ thuộc vào thân thuật tốn đó, ngồi cịn tùy thuộc máy tính Để đánh giá hiệu thuật tốn, xét số phép tính phải thực thực thuật tốn Thơng thường số phép tính thực phụ thuộc vào cỡ toán, tức độ lớn đầu vào Vì độ phức tạp thuật toán hàm phụ thuộc đầu vào Tuy nhiên ứng dụng thực tiễn, không cần biết xác hàm mà cần biết ước lượng đủ tốt chúng Để ước lượng độ phức tạp thuật toán ta thường dùng khái niệm bậc O-lớn Bậc O-lớn: Gọi n độ lớn đầu vào Tùy thuộc toán mà n nhận giá trị khác Chẳng hạn, tốn tính giai thừa n số cần tính giai thừa Nhiều tốn số trị, chẳng hạn tính sai phân n số chữ số có nghĩa cần đạt Trong phép tính ma trận n số hàng cột ma trận Độ phức tạp toán phụ thuộc vào n Ở ta không đặc trưng độ phức tạp số lượng phép tính, mà dùng đại lượng tổng quát tài nguyên cần dùng R(n) Đó số lượng phép tính (có thể tính số lần truy nhập nhớ, ghi vào nhớ); thời gian thực chương trình (độ phức tạp thời gian) dung lượng nhớ cần phải cấp để chạy chương trình (độ phức tạp khơng gian) Xét quan hệ tài nguyên độ lớn đầu vào, tìm số C>0, khơng phụ thuộc vào n, cho với n đủ lớn, hàm R(n),g(n) dương R(n) ≤ C.g(n) ta nói thuật tốn có độ phức tạp cỡ O(g(n)) Các độ phức tạp thường gặp thuật tốn thơng thường gồm có: Độ phức tạp số, O(1) Số phép tính/thời gian chạy/dung lượng nhớ khơng phụ thuộc vào độ lớn đầu vào Chẳng hạn thao tác hệ thống: đóng, mở Tập tin Trang: Độ phức tạp tuyến tính, O(n) Số phép tính/thời gian chạy/dung lượng nhớ có xu hướng tỉ lệ thuận với độ lớn đầu vào Chẳng hạn tính tổng phần tử mảng chiều Độ phức tạp đa thức, O(P(n)), với P đa thức bậc cao (từ trở lên) Chẳng hạn thao tác tính tốn với mảng nhiều chiều (tính định thức ma trận) Độ phức tạp logarit, O(log n) (chú ý: bậc thấp so với O(n)) Chẳng hạn thuật tốn Euclid để tìm ước số chung lớn Độ phức tạp hàm mũ, O(2n) Trường hợp bất lợi phi thực tế thực thuật toán với độ phức tạp 2: Bài tập: Bài 1: So sánh độ phức tập thuật toán O( N ) O(log n) Đặt g1(n) = N ; g2 (n) = log n g1(n) n n2 Ta có: lim lim lim n g 2( n) n log n log n n lim n ' ' ( n) (n ) n lim n.ln lim n lim n = lim lim ' ' n n n n n (log n) (log n) n n n.ln Vậy g1(n) > g2 (n) O( N ) > O(log2 n) Bài 2: Viết hàm tính an (với a real, n word) có độ phức tạp tính tốn O(1) Phân tích thuật tốn Đặt b=an ta có trường hợp sau: - Nếu a=0 an=0 - Nếu a>0 ta có: b=an>0ln(b)=ln(an) b eln( a n ) e n.ln( a ) - Nếu a0 then LuyThua:=Exp(n*ln(a)) else begin a:=abs(a); if odd(n) then LuyThua:=-Exp(n*ln(a)) else LuyThua:=Exp(n*ln(a)); End End; { Thu tuc test ham LT} Procedure Xuly; Var a:real;n:byte; Begin Assign(fi,tfi); Reset(fi); Assign(fo,tfi); Rewrite(fo); While not eof(fi) begin read(fi,a,n); Writeln(fo,a:0:3,'^',n,'=',LuyThua(a,n):0:3); end; close(fi); close(fo); End; BEGIN Xuly; END Kết thực Trang: II PHƢƠNG PHÁP ĐỆ QUY Tim hiểu đệ quy Đệ quy (tiếng Anh: recursion) phương pháp dùng chương trình máy tính có hàm tự gọi Định nghĩa theo đệ quy: Một khái niệm X định nghĩa theo đệ quy định nghĩa X có sử dụng khái niệm X Ví dụ 1: Định nghĩa số tự nhiên - số tự nhiên - n số tự nhiên n - số tự nhiên Đệ quy khoa học máy tính: Có phương pháp chung để giải toán chia toán thành toán đơn giản loại Phương pháp gọi k thuật lập trình chia để trị Chính chìa khóa để thiết kế nhiều giải thuật quan trọng, sở quy hoạch động Chƣơng trình đệ quy: Trong lập trình, có khái niệm: chương trình (hàm, thủ tục) gọi đệ quy q trình thực có phần phải gọi đến Cấu trúc chính: Một chương trình đệ quy gồm hai phần Phần sở: chứa tác động hàm thủ tục với số giá trị cụ thể ban đầu tham số Phần đệ quy: định nghĩa tác động cần thực cho giá trị thời tham số tác động định nghĩa trước với kích thước tham số nhỏ Ví dụ: Hàm tính giai thừa số tự nhiên n (Đoạn mã sau viết ngôn ngữ Pascal) function gt(n: Word): Longint; begin if n = then gt:= else gt:= n * gt(n - 1); end; Trang: Bài tập Đệ quy kiểu liệu mảng Bài 3: Xóa tất phần tử dãy A gồm n phần tử có giá trị X Thủ tục: Procedure DeletePT(var n: word; x: integer); var tam: integer; begin if n > then if A[n] = x then begin n := n - 1; {Xoa phan tu tim thay} DeletePT(n, x); {Tiep tuc tim va xoa neu co} end else begin tam := A[n]; n := n - 1; DeletePT(n, x); n := n + 1; A[n] := tam; end; end; Chương trình Program TimMax; uses crt; const tfi ='D:\TTCaoHoc\DeletePT.inp'; tfo = 'D:\TTCaoHoc\DeletePT.out'; var A: Array[1 100] of integer; N, x, i : word; fi, fo : text; Procedure DocFile; var i : word; begin assign(fi,tfi); reset(fi); read(fi,n); read(fi, x); readln(fi); for i := to n read(fi,A[i]); close(fi); end; Procedure DeletePT(var n: word; x: integer); var tam: integer; begin if n > then if A[n] = x then begin n := n - 1; {Xoa phan tu tim thay} DeletePT(n, x); {Tiep tuc tim va xoa neu co} end else begin tam := A[n]; n := n - 1; DeletePT(n, x); n := n + 1; Trang: A[n] := tam; end; end; Begin clrscr; Docfile; assign(fo,tfo); rewrite(fo); Writeln('So luong PT: N= ', N); for i := to N write(A[i],#32); writeln; writeln(' -'); DeletePT(n, x); Writeln('Xoa phan tu co gia tri: X= ', x); Writeln('So luong PT lai: N= ', N); writeln(fo, N); for i := to N begin write(A[i],#32); write(fo, A[i], #32); end; writeln; readln; End Kết quả: Bài Viết chương trình tìm Max dạy A gồm n phần tử (n>0) Thủ tục Function Max(n: word): integer; begin if n = then Max :=A[1] else if A[n] > Max(N-1) then Max := A[n] else Max := Max(n-1); end; Cài đặt chương trình: Program TimMax; uses crt; const tfi ='D:\TTCaoHoc\dayso.inp'; tfo = 'D:\TTCaoHoc\MaxDQ.out'; var A: Array[1 100] of integer; N, i : word; fi, fo : text; Trang: Procedure DocFile; var i : word; begin assign(fi,tfi); reset(fi); read(fi,n); readln(fi); for i := to n read(fi,A[i]); close(fi); end; Function Max(n: word): integer; begin if n = then Max :=A[1] else if A[n] > Max(N-1) then Max := A[n] else Max := Max(n-1); end; Begin clrscr; assign(fo, tfo); rewrite(fo); Docfile; for i := to N write(A[i],#32); writeln; writeln(' -'); writeln(Max(N)); write(fo, 'Phan tu lon nhat: ',max(N)); close(fo); readln; End Kết quả: Trang: Procedure Tong_Hop_KQ; var f:text; r,s,i:integer; begin assign(f,fo); rewrite(f); r:=p; for s:=n downto begin x[s]:=u[r,s]; r:=r-x[s]*m[s]; end; Writeln(f,'Gia tri toi uu: ',L[p,n]); Writeln(f,'Cac vat duoc chon:'); for i:=1 to n writeln(f,'Vat thu ',i,' so luong ',x[i]); close(f); end; BEGIN Doc_Du_lieu; Lap_bang; Tong_hop_KQ; { for r := to p begin for s :=0 to N write(L[r,s],',',U[r,s],#32); writeln; end; } Tong_hop_KQ; readln; END Kết số test Bộ test 1: Trang: 20 Bộ test Bộ test Bài 10 Bài tốn Sinh viên ơn thi Một sinh viên cịn m ngày để ơn thi n môn Theo kinh nghiệm anh ta, ôn môn j i ngày điểm a[i,j] Giả sử cho biết a[i,j] (với a[i,j]1) Ta có L[r,s] = Max(A[k,s] + L[r- k, s-1]) 0≤k≤r Giả sử giá trị lớn k đạt k‟ Ta có: L[r,s] = A[k‟,s] + L[r-k‟,s-1] U[r,s] = k‟ + Trường hợp suy biến: số môn = (s=1) U[r,1] =r; L[r,1] = A[r,1] (với r=1 m) Bƣớc 3: Lập bảng Procedure LapBang; Var r,s:integer; Begin For r:=1 to m For s:=1 to n If s=1 then Begin U[r,s]:=r; L[r,s]:=A[r,1]; End Else TinhUL(r,s); End; Thủ tục TinhUL(r,s) viết sau: Procedure TinhUL(r,s:integer); Trang: 22 Var k,k1,max,tam:integer; Begin max:= L[r,s-1]; k1:=0; for k:=1 to r begin tam:= A[k,s] + L[r- k,s-1]; if tam>max then begin max:=tam; k1:=k; end; end; L[r,s]:=max; U[r,s]:=k1; End; Bƣớc 4: Tổng hợp kết Procedure THKQ; var r,s:integer; begin Writeln('Ket qua diem lon nhat: ',L[m,n]); Writeln('Lich hoc nhu sau:'); r:=m; For s:=n downto Begin x[s]:=U[r,s]; r:=r - x[s]; End; For s:=1 to n writeln('Mon ',s, ' hoc ',X[s], ' ngay'); end; Cài đặt chương trình Program SVOnThi; const tfi = 'D:\SVonthi.inp'; tfo = 'D:\SVonthi.out'; nmax= 1000; Var A,L,U:array[0 nmax,0 nmax] of integer; X:array[1 nmax] of integer; n,m:integer; Procedure NhapDL; var fi:text; i,j:integer; begin fillchar(L,sizeof(L),0); fillchar(U,sizeof(U),0); assign(fi,tfi); reset(fi); readln(fi,m,n); for i:=1 to m begin for j:=1 to n read(fi,a[i,j]); readln(fi); end; close(fi); end; Procedure TinhUL(r,s:integer); Var k,k1,max,tam:integer; Trang: 23 Begin max:= L[r,s-1]; k1:=0; for k:=1 to r begin tam:= A[k,s] + L[r- k,s-1]; if tam > max then begin max:=tam; k1:=k; end; end; L[r,s]:=max; U[r,s]:=k1; End; Procedure LapBang; Var r,s:integer; Begin For r:=1 to m For s:=1 to n If s=1 then Begin U[r,s]:=r; L[r,s]:=A[r,1]; End Else TinhUL(r,s); for r:=1 to m begin for s:=1 to n write(u[r,s],'\',L[r,s],' writeln; end; End; '); Procedure THKQ; var fo:text; r,s:integer; begin assign(fo,tfo); rewrite(fo); Writeln(fo,'Ket qua diem lon nhat: ',L[m,n]); Writeln(fo,'Lich hoc nhu sau:'); r:=m; For s:=n downto Begin X[s]:=U[r,s]; r:=r - x[s]; End; For s:=1 to n writeln(fo,'Mon ',s, ' hoc ',X[s], ' ngay'); close(fo); end; BEGIN NhapDL; LapBang; THKQ; END Trang: 24 Kết test Bộ test Bộ test Bộ test Bài 11 Ngƣời du lịch Một người từ thành phố đến thành phố n qua n-1 thành phố khác 1, 2, , n-1, theo lộ trình: i1 i2 … ik n, đó: < i1 < i2 < …< ik < n,Giá vé xe từ thành phố i đến thành phố j c[i,j] Tìm lộ trình từ thành phố đến thành phố n cho tổng chi phí giá vé đạt cực tiểu Xác định toán Input + N: với ý nghĩa có N+1 thành phố từ thành phố đến thành phố N + Ma trận C[i,j] (i=0 N, j=0 N) ma trận chi phí, C[i,j] chi phí trực tiếp để từ thành phố i đến thành phố j (i có đường trực tiếp đến j) Nếu i khơng có đường trực tiếp đến j C[i,j] = +∞ Trang: 25 Output + Chi phí nhỏ để từ thành phố đến thành phố N + X[i] (i=1 m) số thứ tự thành phố phải qua từ thành phố đến thành phố n (0X[1]X[2]…X[m]n) Phương pháp thực hiện, Sử dụng phương pháp quy hoạch động theo bước sau: Bƣớc 1: Phân tích tốn Gọi P(r) tốn du lịch Trong đó: + r N*: số thứ tự thành phố cần đến từ thành phố Bài toán ban đầu P(n) Các giá trị cần tìm: L[r]: chi phí nhỏ để từ thành phố đến thành phố r K[r]: số thứ tự thành phố kế trước thành phố r đường từ thành phố đến thành phố r Ví dụ Input: n=3 Mảng A Output: i\j 0 2 3 Chi phí thấp = Lịch trình: 2 Bƣớc 2: Giải pháp đệ quy + Trƣờng hợp tổng quát (r > 0): L[r] = Min(L[i]+C[i,r]) với (0≤ i begin i:=i+1; x[i]:=k[r] r:=x[i]; end; for j:=i downto writeln(x[i]); end; Độ phức tạp O(n) Cài đặt chương trình Program NguoiDLich; const tfi = 'D:\NguoiDL.inp'; tfo = 'D:\NguoiDL.out'; maxn = 1000; vc = 10000; var C:array[0 maxn,0 maxn] of longint; l,k:array[0 maxn] of longint; i, n:integer; procedure NhapDL; Trang: 27 var f:text; i,j,t:integer; begin assign(f,tfi); reset(f); readln(f,n); for i:=0 to n begin for j:=0 to n begin read(f,t); if t>0 then C[i,j]:=t else C[i,j]:=vc; end; readln(f); end; close(f); end; procedure LapBang; var r,i,j,min,i1:integer; begin {l[0]:=0; k[0]:=vc;} for r:=0 to n begin if r = then begin L[0] := 0; K[0] := 0; end else begin min:=c[0,r]; i1:=0; for i:=0 to r-1 begin if (L[i] + C[i,r]) < then begin min:=L[i]+c[i,r]; i1:=i; end; end; l[r]:=min; k[r]:=i1; end; end; for i:=0 to n write(L[i],' '); writeln; for i:=0 to n write(K[i],' '); end; procedure THKQ; var f:text; i,j,r:integer; x:array[0 maxn] of integer; begin assign(f,tfo); rewrite(f); writeln(f,'Chi phi thap nhat ',L[n]); writeln(f,'Lich trinh'); r:=n; i:=0; x[0]:=n; Trang: 28 while r >0 begin i := i + 1; x[i] := k[r]; r := x[i]; end; for j:= i downto if x[j]=n then write(f,' ',x[j]) else write(f,x[j],' -> '); close(f); end; BEGIN NhapDL; Lapbang; writeln('Xuat bang chi phi: '); for i := to n write(L[i],#32); writeln; writeln('Xuat bang lo trinh: '); for i := N downto write(K[i],#32); writeln; THKQ; END Kết test Bộ test Bộ test Trang: 29 Bộ test Bài 12: Bài toán xâu cực đại: S xâu T S nhận cách xố số ký tự Ví dụ: „ABC‟ xâu „GAHEBOOC‟ Bài toán: Cho xâu T1, T2 Tìm xâu S xâu chung T1 T2 có độ dài cực đại Ví dụ: T1=„ABCDAE‟ T2=„XYACADK‟ có xâu „ACD‟ xâu chung với độ dài cực đại Xác định toán Input: + Xâu T1 =‟x1, x2,…, xm‟ xâu T2 =‟y1, y2,…, ym‟ Output: +Độ dài xâu chung tìm + Xâu C xâu chung tìm Phương pháp thực hiện, Bƣớc 1: Phân tích tốn Gọi P(r,s) tốn xâu chung Trong đó: + r N*: độ dài xâu T1 + s N*: độ dài xâu T2 Bài toán ban đầu P(m,n) Các giá trị cần tìm: L[r,s]: độ dài lớn xâu chung tìm từ r ký tự đầu xâu T1 s ký đầu xâu T2 Bƣớc 2: Giải pháp đệ quy + Trường hợp tổng quát: hai xâu khác rỗng (r>0) and( s>0) Nếu T1[r] = T2[s] ta có L[r,s] = + L[r-1,s-1] Cịn T1[r] ≠ T2[s] L[r,s] = Max(L[r-1,s], L[r,s-1]) + Trường hợp suy biến: hai xâu rỗng hai xâu rỗng (T1=‟‟ or T2=‟‟) Nếu xâu hai xâu T1 T2 rỗng ta có L[0,0] = Trang: 30 Nếu xâu T1 rỗng ta có L[0,s] = (s=1 n); Nếu xâu T2 rỗng ta có L[r,0] = (r=1 m); Bƣớc 3: Lập bảng procedure LapBang; var r,s:byte; begin for r:=0 to m for s:=0 to n if (r=0) or (s=0) then L[r,s]:=0 else if T1[r]=T2[s] then L[r,s]:= + L[r-1,s-1] else L[r,s]:=max(L[r,s-1],L[r-1,s]); end; Độ phức tạp O(m.n) Bƣớc 4: Tổng hợp kết procedure THKQ; var r,s:byte; begin C:=''; r:=m; s:=n; While (r>0) and (s>0) Begin if T1[r]=T2[s] then begin C:=T1[r] + C; r:=r-1; s:=s-1; end else if Ll[r-1,s] >L[r,s-1] then r:=r-1 else s:=s-1; End; writeln(‘Do dai lon nhat cua xau chung la: ‘,L[m,n]); writeln(‘Xau chung dai nhat tim duoc la:’,C); close(f); end; Cài đặt chương trình Program XauConChungMax; const tfi = 'D:\xaucon.inp'; tfo = 'D:\xaucon.out'; maxmn=200; var T1,T2,c:string; m,n:byte; L:array[0 maxmn,0 maxmn] of byte; procedure NhapDL; var f:text; begin assign(f,tfi); reset(f); readln(f,T1); readln(f,T2); m:=length(T1); Trang: 31 n:=length(T2); close(f); end; Function Max(A,B: integer): integer; Begin if A > B then Max := A else Max := B; End; procedure LapBang; var r,s:byte; begin fillchar(L,sizeof(L),0); for r:=1 to m for s:=1 to n if T1[r]=T2[s] then L[r,s]:= + L[r-1,s-1] else L[r,s]:=max(L[r,s-1],L[r-1,s]); end; procedure THKQ; var r,s:byte; f:text; begin c:=''; r:=m; s:=n; While (s>0) and (r>0) begin if T1[r]=T2[s] then begin c:=T1[r] + C; r:=r-1; s:=s-1; end else if l[r,s-1] > l[r-1,s] then s:=s-1 else r:=r-1; End; assign(f,tfo); rewrite(f); writeln(f,l[m,n]); writeln(f,c); close(f); end; BEGIN NhapDL; LapBang; THKQ; END Trang: 32 Kết test Bộ test Bộ test Trang: 33 TÀI LIỆU THAM KHẢO Bài giảng Thiết kế phân tích thuật tốn – TS Hồng Quang Trang: 34 ... nhiên Đệ quy khoa học máy tính: Có phương pháp chung để giải toán chia toán thành toán đơn giản loại Phương pháp gọi k thuật lập trình chia để trị Chính chìa khóa để thiết kế nhiều giải thuật quan... động để giải số toán tối ưu Đây nội dung đề tài tập tiểu luận nhóm em: THIẾT KẾ VÀ PHÂN TÍCH THUẬT TOÁN Mặc dù cố gắng tiểu luận khơng tránh khỏi sai sót Nhóm chúng em mong nhận ý kiến góp ý thầy... dừng lại mức độ đưa thuật toán để giải toán Tuy nhiên tốn có nhiều thuật tốn để giải Do ta phải lựa chọn thuật đoán tối ưu Độ phức tạp thuật toán sở để đánh giá thuật tốn có tốt thuật tốn khác hay