Bài tập phân tích và thiết kế thuật toán

43 1.4K 3
Bài tập phân tích và thiết kế thuật toán

Đ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

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

Ngày đăng: 08/05/2015, 12:10

Từ khóa liên quan

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

Tài liệu liên quan