1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

43 1,4K 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 43
Dung lượng 200,11 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

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 anmà 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

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)

Write('Nhap so hang cua Ma tran :');Readln(m);

Write('Nhap so cot cua Ma tran :');Readln(n);

Trang 3

For j:=1 to n dobegin

Write('Gia tri phan tu thu [',i,',',j,']=');Readln(A[i,j]);

C[i,j]:=0;

For d:=1 to n do C[i,j]:=A[i,d]*B[d,j] + C[i,j];

end;

Trang 4

Độ 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 :

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(2n)

Bước 2 : Sử dụng phương pháp qui nạp để chứng minh

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(2n)

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;

Trang 7

{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;

n:=n-1;

XoaM_DQ(n,x);

endelsebegin

Trang 8

Write('Nhap gia tri can xoa : ');Readln(gtxoa);

Write('Mang sau khi xoa :');

Nhap gia tri can xoa : 4

Mang sau khi xoa : 1 6

3

Nhap so phan tu cua mang: 5

Phan tu A[1]=1Phan tu A[2]=3Phan tu A[3]=6Phan tu A[4]=4Phan tu A[5]=3Mang : 1 3 6 4 3Nhap gia tri can xoa : 1Mang sau khi xoa : 3 6

4 3

Nhap so phan tu cua mang: 5

Phan tu A[1]=2Phan tu A[2]=4Phan tu A[3]=6Phan tu A[4]=8Phan tu A[5]=9Mang : 2 4 6 8 9Nhap gia tri can xoa : 6Mang 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ị

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ứctạp của thuật toán này.

Day in nguoc voi gia tri lon hon x17

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);

XoaGT(F^.next,x);

Trang 12

IF F^.info=x thenbegin

{In danh sách ngược}

Write('Nhap so nguyen x : ');Readln(x);

Trang 13

Nhap gia tri can xoa : 12

8 10 10 11 14 16 16 17

Danh sach F theo thu tutang dan

8 10 10 11 12 12 14 16 1617

Nhap gia tri can xoa : 17

If (T<>nil) and ((T^.left <> nil) or (T^.right<>nil)) then

If (T^.left = nil) and (T^.right<>nil) then

Trang 14

If T^.left^.info>T^.right^.info thenbegin

If T^.info<T^.left^.info thenbegin

Swap(T^.info,T^.left^.info);

DieuChinh(T^.left);

end;

endElse

{Trường hợpT^.left^.info<=T^.right^.info }begin

If T^.info<T^.right^.info thenbegin

Trang 15

If T=nil then TimNut:=nil

else if T^.info=x then TimNut:=T

elsebegin

Trang 17

else if T^.right=nil then LaDong:=(T^.info>T^.left^.info) andLaDong(T^.left)

else LaDong:=(T^.info>T^.right^.info) and LaDong(T^.right) and(T^.info>T^.left^.info) and LaDong(T^.left);

If (T<>nil) and ((T^.left <> nil) or (T^.right<>nil)) then

If (T^.left = nil) and (T^.right<>nil) thenbegin

DieuChinh(T^.right);

If T^.info<T^.right^.info then Swap(T^.info,T^.right^.info);DieuChinh(T^.right);

endElse if (T^.right = nil) and (T^.left<>nil) then

Trang 18

DieuChinh(T^.left);

If T^.left^.info>T^.right^.info thenbegin

If T^.info<T^.left^.info thenbegin

Swap(T^.info,T^.left^.info);

DieuChinh(T^.left);

end;

endElse {Trường hợpT^.left^.info<=T^.right^.info }begin

If T^.info<T^.right^.info thenbegin

Trang 19

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 nếu i=0 và j>0P(i, j) = (P(i-1, j)+ P(i, j-1))/2 nếu i>0 và j>0

= 0 nếu ngược lạ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 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)

s: tham số thứ hai, 0 ≤ s ≤ j 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)

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 20

Bước 4 Tổng hợp kết quả P(i,j) = a[i,j]

CODE TÍNH GIÁ TRỊ XÁC SUẤT P(i,j)

End;

p:=a[r,s];

End;

BEGIN

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

Trang 21

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ácnhau 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 trộm mang theo chiếc túi có kích cỡ là p∈N* Vậy hắn phải chọn lựamột danh sách các đồ vật sẽ mang đi như thế nào để cho tổng giá trị lấy cắp được làlớn nhất

Tức: Tìm x[1], x[2], , x[n] (với x[i]∈ N : số lượng loại đồ vật thứ i cần lấy)sao cho:∑x[i].m[i] ≤p và∑x[i].c[i] đạt giá trị cực đại

Input: Một cái túi chứa n loại đồ vật có kích thước và giá trị khác nhau.

Output: Tìm x[1], x[2], , x[n] (với x[i] ∈ N: số lượng loại đồ vật thứ i cầnlấ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:

Trang 22

Bước 2: Xây dựng giải pháp đệ quy

{(1) có nghĩa là: + k∗c[s] là giá trị mang lại khi lấy k đồ vật thứ s,

+ r – k∗m[s] kích thước của cái túi giảm đi k∗m[s],+ (s - 1) số loại đồ vật giảm đi 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 doFor r:=0 to p do

Trang 23

CODE BÀI TOÁN CHIẾC TÚI XÁCH

Dữ liệu vào được lưu trong file Input.txt gồm 2 dòng:

+ Dòng đầu là số nguyên n (số đồ vật) và p (cỡ của túi xách)

+ Dòng i+1 (1<=i<=n) ghi 2 số nguyên dương m[i], c[i]

Trang 24

k1:= 0;

max:= l[r,s-1];

for k:=1 to r div m[s] dobegin

writeln('Do vat ', s, ' can lay ', x[s], ' cai');

writeln('Gia tri toi uu: ', l[p,n]);

end;

begin

Doc_DL;

Trang 25

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

Kết quả:

Do vat 1 lay 4 cai

Do vat 2 lay 0 caiGia tri toi uu : 12

Kết quả:

Do vat 1 lay 0 cai

Do vat 2 lay 0 cai

Do vat 3 lay 6 cai

Do vat 4 lay 0 cai

Do vat 5 lay 0 cai

Do vat 6 lay 0 cai

Do vat 7 lay 1 caiGia tri 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 đó: Milà 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 = M1×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

n: số các ma trậnCấp của các ma trận

m[i] m[0] m[1] m[n]

Trang 26

Output: 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à

Trang 27

if tam < min then

Trang 28

Lan thu 2 thuc hien phep toanthu 1

Lan thu 3 thuc hien phep toanthu 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á đimột số ký tự nào đó của T Ví dụ: ‘ABC’ là xâu trong của ‘GAHEBOOC’ bằng cáchxó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ó

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 29

r: là số ký tự đầu tiên của xâu T1s: 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,n)

- Giá trị cần tìm:

l[r,s] : độ dài xâu trong chung cực đại của bài toán P (r,s)

Bước 2: Giải pháp đệ quy

if T1[r] = T2[s] then F[r,s]:= F[r-1,s-1] + 1else

Trang 30

while (r>0) and (s>0) do

begin

if T1[r]= T2[s] then

beginSt:= T1[r]+St;

r:= r-1;

s:= s-1;

endelse

if F[r-1,s] > F[r,s-1] then r:=r-1else

Trang 31

if T1[r] = T2[s] then F[r,s]:= F[r-1,s-1] + 1else

Trang 32

r:= r-1;

s:= s-1;

endelse

if F[r-1,s] > F[r,s-1] then r:=r-1else

Kết quả:

Xau X: ABCDAE

Xau Y: XYACADKE

-Do dai cuc dai cua xau trong chung la: 4

Xau trong chung cuc dai la: ACAE

Kết quả:

Xau X: DINHVUXau Y: NINHCU -

Do dai cuc dai cua xau trong chung la: 4Xau trong chung cuc dai la: INHU

Bài tập 12 : Bài toán du lịch

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→i2 … →ik→n, trong đó: 0 < i1 < i2 < …<

ik < n Giá vé của xe đi từ thành phố i đến thành phố j là c[i,j]

Trang 33

Tìm một lộ trình từ thành phố 0 đến thành phố n sao cho tổng chi phí về giá véđạt cực tiểu.

Input:

+ n: số thành phố tối đa có thể đi qua

+ c[i,j]: Ma trận chi phí trong đó c[i,j] là chi phí trực tiếp để đi từ thành phố iđến thành phố j (nếu i và j có đường đi trực tiếp) Nếu không có đường đi trực tiếp đếnc[i,j]=∞

Output:

+ Chi phí nhỏ nhất đến từ thành phố 0 đến thành phố n

+ X[i]: số thứ tự thành phố đi qua

2 Phương pháp thực hiện theo 4 bước sau:

Bước 1 Phân tích bài toán

- Gọi P(r) là bài toán du lịch với r là đỉnh cần đến, điểm xuất phát là 0 Bài toánban đầu P(n)

- Cách giá trị cần tìm:

l[r]: Chi phí nhỏ nhất để đi từ đỉnh 0 đến đỉnh r

u[r]: Đỉnh kế cuối trong đường đi từ đỉnh 0 đến đỉnh r

Bước 2 Giải pháp đệ quy

- Trường hợp chung: khi r > 0

Trang 34

v1:= 0;

min:= c[0,r];

for v:=0 to r-1 do

Trang 36

var u,l: array [0 nMax] of integer;

C: array [0 nMax,1 nMax] of integer;

x: array [1 nMax] of integer;

Trang 37

v1:= 0;

min:= c[0,r];

for v:=0 to r-1 dobegin

Trang 38

Kết quả:

Chi phi toi thieu de di la: 5

Lo trinh duong di ngan nhat:

0 ->1 ->3 ->4

Kết quả:

Chi phi toi thieu de di la: 7

Lo trinh duong di ngan nhat:

0 ->2 ->3

Bài tập 13 : Bài toán sinh viên ôn thi

1 Phát biểu bài toán

Một sinh viên còn m ngày để ôn thi n môn Theo kinh nghiệm của anh ta, nếu

ôn môn j trong i ngày thì được điểm là c[i,j] Giả sử cho biết các c[i,j] (với

Trang 39

n ∈N* : số môn ôn thi.

c[i,j] ∈R: điểm đạt được khi ôn thi môn j trong i ngày

Output:

x[j]: số ngày ôn thi môn j (j=1 n) sao choΣx[j]=n và Σc[x[j],j] đạt max

2 Phương pháp thực hiện theo 4 bước sau:

Bước 1 Phân tích bài toán

Gọi P(r,s) là bài toán ôn thi với

r : là số ngày ôn thi

s : là số môn ôn thi

=> Bài toán ban đầu: P(m,n)

Tìm:

l[r,s]: tổng điểm lớn nhất Σc[x[j],j]

u[r,s]: số ngày ôn thi môn s (tức là x[s])

Bước 2 Giải pháp đệ quy

- Trường hợp chung: khi s > 1

Trang 40

u[r,s]:= r;

endelse

begink1:= 0;

Trang 41

writeln('So diem toi da co the duoc la: ',l[m,n]);

writeln('So ngay can on cho cac mon la: ');

for i:= 1 to n do writeln ('Mon ',i,':',x[i]:4);

var c,l,u: array [0 nMax,1 nMax] of integer;

x: array [0 nMax] of integer;

Trang 42

k1:= 0;

max:= l[r,s-1];

for k:=0 to r dobegin

Trang 43

writeln('So diem toi da co the duoc la: ',l[m,n]);

writeln('So ngay can on cho cac mon la: ');

for i:= 1 to n do writeln ('Mon ',i,':',x[i]:4);

So diem toi da co the duoc la: 27

So ngay can on cho cac mon la:

Mon 1: 0

Mon 2: 2

Mon 3: 1

Kết quả:

So diem toi da co the duoc la: 20

So ngay can on cho cac mon la:

Mon 1: 1Mon 2: 2Mon 3: 0

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

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w