Bài tập 1 : Viết chương trình con để tính tích của 2 ma trận A và B có kích thước là Am,n và Bp,q. Từ đó xác định độ phức tạp của thuật toán này. . 2 Bài tập 2 : Viết hàm tính an mà có độ phức tạp O(1). 5 Bài tập 3 : Chứng minh rằng thủ tục Sort(n), có độ phức tạp hàm mũ 5 Bài tập 4 : Viết thuật toán đệ quy nhằm xóa tất cả các phần tử có giá trị bằng x trong dãy số nguyên a1,a2,…..,an. 6 Bài tập 5 : Xét danh sách F như phần lý thuyết. Viết thuật toán để liệt kê giá trị trường info của tất cả các nút thuộc danh sách F theo thứ tự ngược. 8 Bài tập 6 : Viết thuật toán để xóa tất cả các nút có giá trị trường info bằng x của danh sách tăng dần F. Từ đó cho biết độ phức tạp của thuật toán. 9 Bài tập 7 : Viết thuật toán để điều chỉnh cây T bất kì thành 1 đống 13 Bài tập 8: Bài toán xác suất 19 Bài tập 9 : Bài toán túi xách 20 Bài tập 10 : Bài toán phép nhân tổ hợp nhiều ma trận 25 Bài tập 11 : Bài toán xâu cực đại 28 Bài tập 12 : Bài toán du lịch 32 Bài tập 13 : Bài toán sinh viên ôn thi 38
Bài t ập nhóm 1B – KHMT 2014 Trang 1 M ỤC LỤC Bài tập 1 : Viết chương trình con để tính tích của 2 ma trận A và B có kích thư ớc là A[m,n] và B[p,q]. Từ đó xác định độ phức tạp của thuật toán này. . 2 Bài t ập 2 : Viết hàm tính a n mà có đ ộ phức tạp O(1). 5 Bài t ập 3 : Chứng minh rằng thủ tục Sort(n), có độ phức tạp hàm mũ 5 Bài t ập 4 : Viết thuật toán đệ quy nhằm xóa tất cả các phần tử có giá trị bằng x trong dãy s ố nguyên a[1],a[2],… ,a[n]. 6 Bài t ập 5 : Xét danh sách F nh ư phần lý thuyết. Vi ết thuật toán để liệt kê giá trị trư ờng info của tất cả các nút thuộc danh sách F theo thứ tự ng ược 8 Bài t ập 6 : Viết thuật toán đ ể xóa t ất cả các nút có giá trị tr ư ờng info bằng x của danh sách tăng d ần F. Từ đó cho biết độ phức tạp của thuật toán. 9 Bài t ập 7 : Vi ết thuật toán để điều chỉnh cây T bất kì thành 1 đống 13 Bài t ập 8: Bài toán xác suất 19 Bài t ập 9 : Bài toán túi xách 20 Bài t ập 10 : Bài toán phép nhân tổ hợp nhiều ma trận 25 Bài t ập 11 : Bài toán xâu cực đại 28 Bài t ập 12 : Bài toán du lịch 32 Bài t ập 13 : Bài toán sinh viên ôn thi 38 Bài t ập nhóm 1B – KHMT 2014 Trang 2 BÀI LÀM Bài t ập 1 : Vi ết chương trìn h con đ ể tính tích của 2 ma trận A và B có kích thước là A[m,n] và B[p,q]. Từ đó xác định độ phức tạp của thuật toán này . Chú ý ( n=p). Function TichMT(A:Mang;m,n:integer;B:Mang;p,q:integer):Mang; Var C: Mang; d:integer; Begin For i:=1 to m do For j:=1 to q do begin C[i,j]:=0; For d:=1 to n do C[i,j]:=A[i,d]*B[d,j] + C[i,j]; end; TichMT:=C; End; {CHƯƠNG TRÌNH CHÍNH} Program Tich2Matran; Const max=100; Type Mang=array[1 max,1 max] of Integer; Var mang1,mang2:Mang; m,n,p,q:integer; {S ố hàng và cột của ma trận} i,j: integer; {Dùng trong vòng l ặp} {Th ủ tục nhập kích thước của ma trận} Procedure NhapKTMT(Var m,n:integer); Begin Write('Nhap so hang cua Ma tran :');Readln(m); Write('Nhap so cot cua Ma tran :');Readln(n); End; {Thủ tục nhập giá trị cho ma trận} Procedure NhapMT(Var A:Mang;m,n:integer); Begin For i:=1 to m do Bài t ập nhóm 1B – KHMT 2014 Trang 3 For j:=1 to n do begin Write('Gia tri phan tu thu [',i,',',j,']=');Readln(A[i,j]); end; End; {Th ủ tục in ra ma trận} Procedure InMT(A:Mang;m,n:integer); Begin For i:=1 to m do begin For j:=1 to n do Write(A[i,j]:4); Writeln; end; End; {Hàm ki ểm tra 2 ma trận. Nếu số cột của ma trận 1= Số hàng của ma trận 2 thì mới th ực hiện tính tích 2 ma trận } Function KiemtraMT(m,n,p,q:integer):Boolean; Begin If n=p then KiemtraMT:=true else KiemtraMT:=false; End; {Nhân hai ma trận} Function TichMT(A:Mang;m,n:integer;B:Mang;p,q:integer):Mang; Var C: Mang; d:integer; Begin For i:=1 to m do For j:=1 to q do begin C[i,j]:=0; For d:=1 to n do C[i,j]:=A[i,d]*B[d,j] + C[i,j]; end; Bài t ập nhóm 1B – KHMT 2014 Trang 4 TichMT:=C; End; BEGIN NhapKTMT(m,n); NhapMT(mang1,m,n); Writeln('Ma tran 1 :'); InMT(mang1,m,n); NhapKTMT(p,q); If KiemtraMT(m,n,p,q) then begin NhapMT(mang2,p,q); Writeln('Ma tran 2 :'); InMT(mang2,p,q); Writeln('TICH HAI MA TRAN :'); InMT(TichMT(mang1,m,n,mang2,p,q),m,q); end Else Write('Ma tran 2 sai kich thuoc nen khong thuc hien duoc phep nhan'); END. Đ ộ phức tạp tính toán của CTC trên là : O( m*n*p) D ữ liệu chạ y th ử : Nhap so hang cua Ma tran :3 Nhap so cot cua Ma tran :2 Gia tri phan tu thu [1,1]=1 Gia tri phan tu thu [1,2]=0 Gia tri phan tu thu [2,1]=1 Gia tri phan tu thu [2,2]=1 Gia tri phan tu thu [3,1]=0 Gia tri phan tu thu [3,2]=0 Ma tran 1 : 1 0 1 1 0 0 Nhap so hang cua Ma tran :2 Nhap so cot cua Ma tran :4 Gia tri phan tu thu [1,1]=1 Gia tri phan tu thu [1,2]=0 Gia tri phan tu thu [1,3]=1 Gia tri phan tu thu [1,4]=1 Gia tri phan tu thu [2,1]=0 Gia tri phan tu thu [2,2]=1 Gia tri phan tu thu [2,3]=1 Gia tri phan tu thu [2,4]=0 Ma tran 2 : 1 0 1 1 0 1 1 0 TICH HAI MA TRAN : 1 0 1 1 Bài t ập nhóm 1B – KHMT 2014 Trang 5 1 1 2 1 0 0 0 0 Bài t ập 2 : Vi ết hàm tính a n mà có đ ộ phức tạp O(1). Function LuyThua(a:real;n:byte):real; Var kq:real; Begin If n=0 then LuyThua:=1 Else if a=0 then LuyThua:=0 else kq:=exp(n*ln(abs(a))) ; If (a<0) and (n mod 2<>0) then LuyThua:=-kq Else LuyThua:=kq; End; Gi ải thích sử dụng công thức exp(n*ln(abs(a))) : Ta đ ặt X=a n ln 2 v ế ta được lnX=ln a n =n*lna T ừ đó ta có thể tính X bằng công thức là : X=e n*lna Hàm exp(x) = e x Hàm ln(x) = lnx S ử dụng abs(a) bởi vì dùng hàm ln(x) số âm s ẽ lỗi. Sau đó ta biện luận thêm trường hợp nếu a âm, mũ là số lẽ thì sau khi lũy thừa sẽ có dấu ‘ –‘, ngước lại thì dấu ‘+’ Bài t ập 3 : Ch ứng minh rằng thủ tục Sort(n), có độ phức tạp hàm mũ Procedure sort(n:integer); Var tg : integer; Begin if n>1 then begin sort(n-1); if a[n]<a[n-1] then begin tg:=a[n]; a[n]:=a[n-1]; a[n-1]:=tg; sort(n-1); end; end; End; Bài t ập nhóm 1B – KHMT 2014 Trang 6 Ch ứng minh: - Phép toán tích c ực là phép toán so sánh n>1 - G ọi g(n) là số lần thực hiện của phép toá n tích c ực của chương trình con sort(n) - Công th ức truy hồi của g(n) trong trường hợp xấu nhất g(n)=2g(n -1) + 1 - Dùng phương pháp th ế để giải hệ thức truy hồi Bư ớc 1 : Suy đoán nghiệm g(n)=O(2 n ) Bư ớc 2 : Sử dụng ph ương pháp qui n ạp để chứng minh g(n) ≤ c2 n -b(V ới b,c là hằng số dương thích hợp) Gi ả sử g(n) ≤ c2 n - b đúng v ới n - 1, ngh ĩa là: g(n-1) ≤ c2 n-1 - b Th ế bất đẳng thức trên vào hệ thức truy hồi ta có được : g(n) ≤ 2(c2 n-1 – b) + 1 = c2 n – 2b + 1 ≤ c2 n – b Ch ứng minh đúng, với b ≥ 1 và h ằng c đủ lớn để thỏa mãn điều kiện biên V ậy độ phức tạp tính toán của chương trình con Sort(n) là O(2 n ) Bài t ập 4 : Vi ết thuật toán đệ quy nhằm xóa tất cả các phần tử có giá trị bằng x trong dãy s ố nguyên a[1],a[2],… ,a[n]. Function XoaM_DQ(Var n:integer;x:integer):Mang; Var tam,j:integer; Begin if n>=1 then begin If A[n]=x then begin n:=n-1; XoaM_DQ(n,x); end else begin n:=n-1; j:=n; XoaM_DQ(n,x); A[n+1]:=A[j+1]; n:=n+1; end; end; XoaM_DQ:=A; End; {Funtion} {CHƯƠNG TR ÌNH CHÍNH } Bài t ập nhóm 1B – KHMT 2014 Trang 7 Program Xoaptmang; Const max=100; Type Mang=Array[1 max] of integer; Var A:Mang; i,n,gtxoa,gtchen:integer; {Th ủ tục nhập mảng} Procedure NhapM(Var A:mang;Var n:integer); Begin Write('Nhap so phan tu cua mang : ');Readln(n); For i:=1 to n do begin Write('Phan tu A[',i,']=');Readln(A[i]); end; End; {Th ủ tục in mảng} Procedure InM(A:Mang;n:integer); Begin For i:=1 to n do Write(A[i]:4); End; {Hàm đ ệ quy trả về mảng sau khi đã thực hiện xóa các phần tử có giá trị x} Function XoaM_DQ(Var n:integer;x:integer):Mang; Var j:integer; Begin if n>=1 then begin If A[n]=x then begin n:=n-1; XoaM_DQ(n,x); end else begin Bài t ập nhóm 1B – KHMT 2014 Trang 8 n:=n-1; j:=n; XoaM_DQ(n,x); A[n+1]:=A[j+1]; n:=n+1; end; end; XoaM_DQ:=A; End; BEGIN NhapM(A,n); Write('Mang :'); InM(A,n); Writeln; Write('Nhap gia tri can xoa : ');Readln(gtxoa); Write('Mang sau khi xoa :'); InM(XoaM_DQ(n,gtxoa),n); END. D ữ liệu chạy thử : Nhap so phan tu cua mang : 5 Phan tu A[1]=1 Phan tu A[2]=4 Phan tu A[3]=6 Phan tu A[4]=3 Phan tu A[5]=4 Mang : 1 4 6 3 4 Nhap gia tri can xoa : 4 Mang sau khi xoa : 1 6 3 Nhap so phan tu cua mang : 5 Phan tu A[1]=1 Phan tu A[2]=3 Phan tu A[3]=6 Phan tu A[4]=4 Phan tu A[5]=3 Mang : 1 3 6 4 3 Nhap gia tri can xoa : 1 Mang sau khi xoa : 3 6 4 3 Nhap so phan tu cua mang : 5 Phan tu A[1]=2 Phan tu A[2]=4 Phan tu A[3]=6 Phan tu A[4]=8 Phan tu A[5]=9 Mang : 2 4 6 8 9 Nhap gia tri can xoa : 6 Mang sau khi xoa : 2 4 8 9 Bài t ập 5 : Xét danh sách F như ph ần lý thuyết. Vi ết thuật toán để liệt kê giá trị trường info c ủa tất cả các nút thuộc danh sách F theo thứ tự ngược, với điều kiện giá trị Bài t ập nhóm 1B – KHMT 2014 Trang 9 trư ờng info của nút đó phải lớn hơn số nguyên x cho trước. Từ đó đánh giá độ phức tạp của thuật toán này. Procedure ListNguoc(F:TroNut;x:integer); Begin If F<> nil then begin ListNguoc(F^.next,x); If F^.info>x then Write(F^.info:3); end; End; Đ ộ phức tạp tính toán của thủ tục là : O(n) Dữ liệu chạy thử : Danh sach : 12 8 16 10 17 12 16 14 11 10 Nhap so nguyen x : 10 Day in nguoc voi gia tri lon hon x 11 14 16 12 17 16 12 Danh sach : 12 8 16 10 17 12 16 14 11 10 Nhap so nguyen x : 16 Day in nguoc voi gia tri lon hon x 17 Bài t ập 6 : Vi ết thuật toán để xóa tất cả các n út có giá tr ị trường info bằng x của danh sách tăng d ần F. Từ đó cho biết độ phức tạp của thuật toán . Procedure XoaGT(Var F:TroNut;x:integer); Var p:TroNut; Begin If (F <> nil) and (F^.info<=X) then begin IF F^.info=x then begin XoaGT(F^.next,x); p:=F; F:=F^.next; Dispose(p); end Else XoaGT(F^.next,x); Bài t ập nhóm 1B – KHMT 2014 Trang 10 end; end; End; {CHƯƠNG TR ÌNH CHÍNH IN NGƯỢC VÀ XÓA} PROGRAM DanhsachLK; Type TroNut=^Nut; Nut = Record info:Integer; next:TroNut; End; Var F: TroNut; x,gtxoa:integer; {Th ủ tục Tao 1 danh sach bat ki voi 10 phan tu so nguyen} Procedure TaoDs; Var p:TroNut; i:byte; Begin For i:=1 to 10 do begin new(p); p^.info:=Random(20); p^.next:=F; F:=p; end; End; {Th ủ tục in danh sách đúng th ứ tự} Procedure List(F:TroNut); Begin If F<> nil then begin Write(F^.info:3); List(F^.next); [...]... 1: Phân tích bài toán Gọi P(r,s) là bài toán xác suất để tính giá trị xác suất => Bài toán ban đầu P(i,j) Trong đó: r: tham số thứ nhất, 0 ≤ r ≤ i của bài toán P(r,s) ⇒ Cần tìm P(r,s) là giá trị xác suất của bài toán P(r,s) s: tham số thứ hai, 0 ≤ s ≤ j của bài toán P(r,s) Bước 2: Giải pháp đệ quy - Nếu r>0 và s>0 thì P(r,s) = (P (r-1,s) + P ( r, s-1))/2 - Nếu r=0 và s>0 thì P(r,s) = 1 Trang 19 Bài tập. .. write('nhap cac gia tri i:'); readln(i); write('nhap cac gia tri j:');readln(j); write(' Gia tri xac suat do la: ',P(i,j):4:2); END Bài tập 9 : Bài toán túi xách Trang 20 Bài tập nhóm 1B – KHMT 2014 1 Phát biểu bài toán: Phát biểu bài toán: Một cái kho chứa n loại đồ vật có kích thước và giá trị khác nhau Cụ thể: Loại đồ vật i (i=1 n) có: kích cỡ m[i] ∈ N*; gía trị c[i] ∈ R; số lượng: không hạn chế Một tên... lấy) sao cho: Σx[i].m[i] ≤ p và Σx[i].c[i] đạt giá trị cực đại 2 Phương pháp thực hiện, sử dụng phương pháp quy hoạch động với 4 bước là: Bước 1: Phân tích bài toán - Gọi P(r, s) là bài toán chiếc túi xách, với: r ∈ N*: kích cỡ chiếc túi s ∈ N*: số các loại đồ vật khác nhau = >bài toán ban đầu là P(p, n) - Các giá trị cần tìm: l[r,s]: giá trị cực đại ∑x[i].c[i] của bài toán P(r, s) u[r,s]: số lượng... 1 bài toán lớn được tính thông qua bài toán nhỏ hơn} Bước 3: Lập bảng Procedure LapBang; Begin For s:=1 to n do For r:=0 to p do If s=1 then Tính u[r, 1] và l[r, 1] else Tính u[r, s] và l[r, s]; End; Độ phức tạp tính toán là: O(np2) Bước 4: Tổng hợp kết quả Procedure TongHop; Begin r:=p; For s:=n downto 1 do Begin x[s]:= u[r,s]; r:= r – x[s].m[s]; End; End; Độ phức tạp tính toán: O(n) Trang 22 Bài tập. .. Input: Xâu T1 và xâu T2 Output: XTCCĐ(T1, T2) 2 Phương pháp thực hiện, sử dụng phương pháp quy hoạch động với 4 bước là: Bước 1: Phân tích bài toán - Gọi P(r,s) là bài toán xâu trong cực đại, với: Trang 28 Bài tập nhóm 1B – KHMT 2014 r: là số ký tự đầu tiên của xâu T1 s: là số ký tự đầu tiên của xâu T2 Ví dụ : T1=‘x1x2…xr…xm’ (m=length(T1)) T2=‘y1y2…ys…yn’ (n=length(T2)) ⇒ Bài toán ban đầu: P (m... hien phep toan thu 3 Bài tập 11 : Bài toán xâu cực đại 1 Phát biểu bài toán: Định nghĩa xâu trong: S là xâu trong của T nếu S nhận được bằng cách xoá đi một số ký tự nào đó của T Ví dụ: ‘ABC’ là xâu trong của ‘GAHEBOOC’ bằng cách xóa đi các ký tự GHEOO của xâu ‘GAHEBOOC’ Bài toán: Cho 2 xâu T1, T2 Tìm một xâu S là xâu trong chung của T1 và T2 có độ dài cực đại Ví dụ: T1=‘ABCDAE’ và T2=‘XYACADK’ có xâu... Trang 18 Bài tập nhóm 1B – KHMT 2014 END Dữ liệu chạy thử : Cay T: 1: 2 3 2: 4 5 4: 8 9 3: 6 7 Kiem tra cay T co la dong khong? : FALSE Cay T sau dieu chinh 9: 8 7 8: 4 5 4: 2 1 7: 6 3 Kiem tra cay T co la dong khong? : TRUE Bài tập 8: Bài toán xác suất 1 Phát biểu bài toán: Tính giá trị xác suất P(i, j) (i, j: byte) Biết rằng: =1 = (P(i-1, j)+ P(i, j-1))/2 nếu i>0 và j>0 =0 P(i, j) nếu i=0 và j>0 nếu... Doc_DL; Trang 24 Bài tập nhóm 1B – KHMT 2014 Lap_Bang; TongHop_KQ; readln; end Kết quả chạy thử Dữ liệu đầu vào: 58 23 14 25 45 15 Dữ liệu đầu vào: Kết quả: Do vat 1 lay 0 cai Do vat 2 lay 0 cai Do vat 3 lay 0 cai Do vat 4 lay 0 cai Do vat 5 lay 8 cai Gia tri toi uu : 40 Dữ liệu đầu vào: 7 15 23 34 25 45 85 47 36 Kết quả: Do vat 1 lay 4 cai Do vat 2 lay 0 cai Gia tri toi uu : 12 28 23 34 Kết quả: Do vat... toi uu : 36 Bài tập 10 : Bài toán phép nhân tổ hợp nhiều ma trận 1 Phát biểu bài toán: Cần tính M = M1×M2× ×Mn Trong đó: Mi là ma trận cấp m[i-1]×m[i] (i=1 n) Hãy xác định thứ tự thực hiện các phép nhân sao cho số phép tính là tối thiểu Cần tính M = M 1×M2× ×Mn, trong đó: Mi là ma trận cấp m[i -1]×m[i] (i=1 n), thể hiện điều này thông qua bảng sau, đây cũng chính là thông tin vào của bài toán mảng m[i],... dai cuc dai cua xau trong chung la: 4 Xau trong chung cuc dai la: ACAE Bài tập 12 : Bài toán du lịch Dữ liệu đầu vào: DINHVU NINHCU Kết quả: Xau X: DINHVU Xau Y: NINHCU Do dai cuc dai cua xau trong chung la: 4 Xau trong chung cuc dai la: INHU 1 Phát biểu bài toán: Một người đi từ thành phố 0 đến thành phố n và có thể đi qua n-1 thành phố khác 1, 2, , n-1, theo lộ trình: 0 → i1