Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
862,37 KB
Nội dung
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN - - PHẠM THỊ THẢO QUY HOẠCH ĐƠNG KHĨA LUẬN TỐT NGHIỆP Phiếu Nhận Xét Của Giáo Viên Hướng Dẫn Đà Nẵng, ngày…tháng…năm 2012 Giáo viên hướng dẫn PGS.TSKH Trần Quốc Chiến -1- Phiếu Nhận Xét Của Giáo Viên Phản Biện Đà Nẵng, ngày…tháng…năm 2012 Giáo viên phản biện LỜI CẢM ƠN Xin gởi lời cảm ơn chân thành đến quý thầy cô trường Đại Học Sư Phạm Đại Học Đà Nẵng, người tận tâm dạy dỗ, truyền đạt cho kiến thức học kinh nghiệm quý giá suốt thời gian qua Xin gởi lời cảm ơn tới q thầy giáo khoa Tốn khoa Tin, đặc biệt thầy giáo Trần Quốc Chiến hết lịng hỗ trợ, bảo tận tình, giúp đỡ tơi hồn thành khóa luận Cuối cùng, tơi xin gởi lời cảm ơn tới cán quản lý thư viện trường Đại Học Sư Phạm Đại Học Đà Nẵng bạn tập thể lớp 08CTT1 giúp tơi q trình thu thập tài liệu để hồn thành khóa luận Đà Nẵng, ngày 25 tháng năm 2012 Sinh viên Phạm Thị Thảo LỜI MỞ ĐẦU LÝ DO CHỌN ĐỀ TÀI Khoa học gắn liền với thực tiễn Nếu người muốn tìm phương pháp hoạt động hao tốn thể lực vật chất mà có kết mong muốn khoa học ln tìm phương pháp tốt nhằm giải tốn máy tính nhanh chóng, tốn nhớ độ phức tạp nhỏ Hơn hai thập kỷ qua, nghành khoa học phương pháp tối ưu có bước tiến lớn, đặc biệt từ máy tính phổ biến rộng rãi có tính ngày mạnh Nếu năm 60 tốn phi tuyến khoảng mười biến cịn coi cỡ q lớn, khó giải nhiều tốn hàng trăm, hàng nghìn biến xử lý dễ dàng Như vậy, phương pháp tối ưu có vai trị ngày tăng thời đại kỹ thuật cao Bài toán tối ưu đặt phải tìm nghiệm thỏa mãn số điều kiện mà nghiệm tốt theo tiêu cụ thể Đã có nhiều thuật toán giải vấn đề thuật toán nhánh cận, giải thuật tham lam, phương pháp quy hoạch động, chia để trị Ở đây, ta bàn đến phương pháp quy hoạch động để giải toán tối ưu Đối với u thích mơn lập trình có lẽ giải thuật qui hoạch động tương đối quen thuộc việc giải vấn đề tin học Tuy nhiên, thật khó để tìm cở cơng thức cho việc sử dụng quy hoạch động Chính vấn đề này, quy hoach động lại trở thành không phổ biến Đối với toán vậy, lại cố gắng tìm cách giải khác ví dụ vét cạn hay tham lam điều thật khơng hay! Trong phần đề tài em trình bày phương pháp quy hoạch động Tuy nhiên em khơng thể trình bày cách hoàn chỉnh quy hoạch động mà giới thiệu phương pháp, cách dùng quy hoạch động để thiết kế -1- số kĩ thuật giải cho số tốn làm rõ tính ưu việt kĩ thuật Bottom-up Và mong sau báo cáo này, hiểu thêm phương pháp quy hoạch động MỤC ĐÍCH NGHIÊN CỨU - Luận văn thực để làm rõ thuật toán, phương pháp, việc cài đặt chạy chương trình giải tốn phương pháp quy hoạch động PHƯƠNG PHÁP NGHIÊN CỨU - Thu thập, phân tích tài liệu liên quan đến đề tài Sau phân tích tốn, xây dựng giải pháp đệ quy, lập bảng, tổng hợp kết CẤU TRÚC LUẬN VĂN Luận văn gồm phần sau đây: Lời mở đầu: Lý chọn đề tài Mục đích nghiên cứu Phương pháp nghiên cứu Chương I: Cơ sở lý thuyết Chương II: Một số tốn Bài tốn tính tổ hợp Tìm đường ngắn cặp đỉnh đồ thị có hướng có trọng số Bài tốn ba lơ Dãy chung dài hai dãy số Kết luận Tài liệu tham khảo -2- CHƯƠNG I CƠ SỞ LÝ THUYẾT Tổng quan quy hoạch động Cấu trúc tối ưu có nghĩa lời giải tối ưu cho tốn sử dụng để tìm lời giải tối ưu cho tốn tồn cục Ví dụ, đường ngắn tới đỉnh đồ thị tìm thấy cách: Trước hết tính đường ngắn tới đích từ tất đỉnh kề nó, dùng kết để chọn đường toàn cục tốt nhất, hình 1.Nói chung ta giải toán với cấu trúc tối ưu quy trình ba bước: + Chia tốn thành toán nhỏ + Giải toán cách tối ưu cách sử dụng đệ quy quy trình ba bước + Sử dụng kết tối ưu để xây dựng lời giải tối ưu cho toán ban đầu Các toán giải cách chia chúng thành toán nhỏ hơn, tiếp tục thế, ta trường hợp đơn giản dễ tìm lời giải F5 F3 F4 F1 F2 Hình -3- Hình1: Sơ đồ tốn cho dãy Fibonacci, mơ tả quan hệ tốn gối Nói tốn có tốn trùng có nghĩa tốn sử dụng để giải nhiều tốn lớn khác Ví dụ, dãy Fibonacci, F3 = F1 + F2 F4 = F2 + F3 , tính tốn số phải tính F2 Vì tính F5 cần đến F3 F4 , cách tiếp cận F5 phải tính đến F2 hai lần nhiều Điều áp dụng có mặt tốn gối nhau: Một cách tiếp cận “ ngây thơ ” tốn thời gian tính tốn lại lời giải tối ưu cho tốn mà giải Để tránh việc trên, ta lưu trữ lời giải toán giải Do vậy, sau ta cần giải lại tốn đó, ta lấy sử dụng kết tính tốn Hướng tiếp cận gọi lưu trữ Nếu ta chắn lời giải khơng cịn cần thiết ta xóa để tiết kiệm khơng gian nhớ Trong số trường hợp ta tính lời giải cho toán mà ta biết trước ta cần dùng đến Tóm lại, quy hoạch động sử dụng: + Các toán gối + Cấu trúc tối ưu * Quy hoạch động thường sử dụng hai cách tiếp cận: + Top-down (Từ xuống): Bài toán chia thành toán con, toán giải lời giải ghi nhớ để phòng trường hợp cần dùng lại chúng Đây đệ quy lưu trữ kết hợp với + Bottom-up (Từ lên): Tất tốn cần đến giải trước, sau dùng để xây dựng lời giải cho toán lớn Cách tiếp cận tốt không gian nhớ dùng cho ngăn xếp số lời gọi hàm Tuy nhiên, đơi việc xác định tất tốn cần thiết cho việc giải toán cho trước không trực giác Phương pháp quy hoạch động : Phương pháp quy hoạch động để giải tốn tối ưu có chất đệ quy, tức việc tìm phương án tối ưu cho tốn đưa tìm -4- phương án tối ưu số hữu hạn toán Đối với nhiều thuật toán đệ quy tìm hiểu, ngun lý chia để trị thường đóng vai trị chủ đạo việc thiết kế tốn Để giải tốn lớn, ta chia làm nhiều tốn dạng với để giải độc lập Trong phương pháp quy hoạch động nguyên lý thể rõ : Khi cần phải giải toán nào, ta giải tất toán lưu trữ lời giải hay đáp số chúng với mục đích sử dụng lại theo phối hợp để giải tốn tổng qt Có tốn mà định bước thứ i phụ thuộc vào định bước trước Nếu ta xác định hệ thức diễn đạt mối tương quan định bước thứ i với định bước trước ta triển khai chương trình theo hệ thức tìm Khi việc giải tốn có kích thước lớn chuyển việc giải tốn kiểu có kích thước nhỏ Các thuật toán thường thể chương trình đệ quy Tuy nhiên, với kỹ thuật chia để trị nhiều tốn phải tính lại nhiều lần Quy hoạch động phương pháp đại Đối tượng quy hoạch động trình tối ưu nhiều bước nói chung q trình phát triển theo thời gian nói riêng Sự xuất quy hoạch động gắn liền tên tuổi nhà toán học Mỹ R.Bellman mà năm 50 kỷ áp dụng cho nhiều toán thực tế, dụng cụ mà sau gọi nguyên tắc tối ưu Chính nhờ tính đơn giản tính tường minh nguyên tắc mà phương pháp quy hoạch động tỏ đặc biệt hấp dẫn Bên cạnh nguyên tắc tối ưu, nguyên tắc quan trọng thứ hai nguyên tắc lồng toán tối ưu xét vào họ toán tương tự Việc áp dụng nguyên tắc tối ưu nguyên tắc lồng dẫn đến phương trình hàm truy tốn giá trị tối ưu Những phương trình thu cho phép viết điều khiển tối ưu cho toán xuất phát Cái hay -5- tốn tính tốn điều khiển q trình chia thành dãy tốn tính tốn điều khiển đơn giản cho giai đoạn trình Vậy ý tưởng quy hoạch động là: Tránh tính tốn lại tốn nhiều lần, mà lưu giữ kết tìm kiếm vào bảng làm giá trị giả thiết cho việc tìm kết trường hợp sau Chúng ta lấp đầy dần giá trị bảng kết trường hợp trước giải Kết cuối kết toán cần giải Cụ thể sau: Phương pháp quy hoạch động nguyên lý tối ưu nhà toán học Mỹ R.Bellman đề xuất vào năm 50 kỷ XX Phương pháp áp dụng để giải hàng loạt toán thực tế q trình kỹ thuật cơng nghệ, tổ chức sản xuất, kế hoạch hoá kinh tế… Tuy nhiên cần lưu ý có số tốn giải quy hoạch động tỏ khơng thích hợp Trong thực tế, ta thường gặp số toán tối ưu loại sau: Có đại lượng g hình thành trình gồm nhiều giai đoạn ta quan tâm đến kết cuối giá trị g phải lớn nhỏ nhất, ta gọi chung giá trị tối ưu g Giá trị g phụ thuộc vào đại lượng xuất toán mà giá trị chúng gọi trạng thái hệ thống phụ thuộc vào cách thức đạt giá trị g giai đoạn mà cách thức gọi điều khiển Đại lượng g thường gọi hàm mục tiêu trình đạt giá trị tối ưu g gọi trình điều khiển tối ưu Bellman phát biểu nguyên lý tối ưu (cũng gọi nguyên lý Bellman) mà ý tưởng sau: "Với trình điều khiển tối ưu, trạng thái ban đầu A0, với trạng thái A q trình đó, phần trình kể từ trạng thái A xem trạng thái bắt đầu tối ưu" Chú ý nguyên lý thừa nhận không chứng minh Phương pháp tìm điều khiển tối ưu theo nguyên lý Bellman thường gọi quy hoạch động Thuật ngữ nói lên thực chất q trình -6- v:=v-x[k,v]*ds[k].tl; ttl:=ttl+ds[k].pa*ds[k].tl; tgt:=tgt+ds[k].pa*ds[k].gt; writeln(g,k:3,' ',ds[k].pa:3); end; end; writeln(g,'tong lg cac vat dc chon:',ttl:4); writeln(g,'tong gtri cac vat dc chon:',tgt:4); close(g); end; {******CHUONG TRINH CHINH*******} begin init; taobang(ds,n,w,f,x); trabang(ds,n,w,f,x); end 3.6 Chạy Chương Trình: Dữ liệu đầu vào lấy từ file ‘BALO.INP’ - 40 - Đưa kết file ‘BALO.OUT’ Dãy chung dài nhất(DCCDN) hai dãy số 4.1 Đề bài: Cho hai số nguyên dương m,n (0t[i-1,j]) then t[i,j]:=t[i,j-1] else t[i,j]:=t[i-1,j]; end; *) ĐPT: Ta dễ dàng tính ĐPT thủ tục =O(m.n) - 43 - Từ bảng T, ta biết độ dài DCCDN Vấn đề cịn lại tìm phần tử DCCDN *Sau cách tìm DCCDN : +Khởi tạo: DCCDN rỗng, i = 5, j = ( bắt đầu xét từ ơ[5,4] +vịng lặp : Nếu a[i]=b[j] ta ghi phần tử a[i] (hoặc b[j] ) vào trước DCCDN sau ta giảm i j đơn vị Cịn khơng ta xét T[i,j] Nếu T[i,j]=T[i-1,j] ta giảm i đơn vị, cịn T[i,j]=T[i,j-1] ta giảm j đơn vị Quay lại vòng lặp i = j = 0.Ta thu DCCDN Áp dụng ví dụ trên, ta có bước thuật toán sau: Khởi tạo: i = 5, j = 4; DCCDN = ; Vl 1: i = 5, j = 4, a5=b4 nên DCCDN = 6, sau i = 4, j = Vl 2: i = 4, j = 3,a4 b3,T[4,3]=T[3,3] nên i = 3, j = Vl 3: i = 3, j = 3,a3=b3 nên DCCDN = 6,5 sau i = 2, j = Vl 4: i = 2, j = 2,a2 b2,T[2,2]=T[1,2],nên i = 1, j = Vl 5: i = 1, j = 2,a1 b2, T[1,2]=T[1,1] nên i = 1, j = Vl 6: i = 1, j = 1, a1=b1 nên DCCDN = 6,5,3 sau i = 0, j = Kết thúc ta DCCDN=6,5,3 *Giải thuật: procedure tra_bang; var i,j:integer; begin i:=m; j:=n; while (i>0)and(j>0) if a[i]=b[j] then begin - 44 - write(a[i]:3); dec(i); dec(j); end else if t[i,j]=t[i,j-1] then dec(j) else if t[i,j]=t[i-1,j] then dec(i); end; *ĐPT=O(max(m,n)) 4.4 Tổ chức liệu : Dữ liệu đầu vào File DAYCON.INP có cấu trúc sau: - Dịng thứ chứa spt dãy A: m - Dòng thứ chứa phần tử A: A1, A2,…, Am - Dòng thứ chứa spt dãy B: n - Dòng thứ chứa phần tử dãy B: B1, B2,…, Bn Dữ liệu đầu File DAYCON OUT có cấu trúc sau: - Ghi hai dãy A, B ban đầu để tiện theo dõi kết tốn - Dịng ghi k spt DCCDN k phần tử - Dịng tiếp chứa số dãy A k số hạng C - Dòng cuối chứa số dãy B k số hạng C 4.5 Chương trình DEMO: program dccdn; const max=100; type mang1 = array[1 max] of integer; mang2 = array[0 max,0 max] of integer; var a,b : mang1; t: mang2; m,n,dem:integer; f : text; - 45 - pa,pb : mang1; {********** DOC DL TU FILE ***********} procedure init; var i,j:integer; begin assign(f,'daycon.inp');reset(f); readln(f,m); for i:=1 to m read(f,a[i]); readln(f); readln(f,n); for j:=1 to n read(f,b[j]); close(f); end; {************TAO BANG************} procedure tao_bang; var i,j:integer; begin for i:=0 to m t[i,0]:=0; for j:=0 to n t[0,j]:=0; for i:=1 to m for j:=1 to n if a[i]=b[j] then t[i,j]:=t[i-1,j-1]+1 else if (t[i,j-1]>t[i-1,j]) then t[i,j]:=t[i,j-1] else t[i,j]:=t[i-1,j]; end; - 46 - {*****TRA BANG VA IN RA CAC PTU CUA DCCDN*****} procedure tra_bang; var i,j:integer; begin assign(f,'daycon.out'); rewrite(f); write(f,'day A: '); for i:=1 to m write(f,a[i]:5); writeln(f,' '); write(f,'day B: '); for j:=1 to n write(f,b[j]:5); writeln(f,' '); writeln(f,'dd day chung dai nhat cua day:',t[m,n]); write(f,'cac ptu cua day chung: '); i:=m; j:=n; dem:=0; while (i>=0)and(j>=0) if a[i]=b[j] then begin write(f,a[i]:3); inc(dem); pa[dem]:=i; { vi tri cua chung day A} pb[dem]:=j; { vi tri cua chung day B} dec(i); dec(j); end else if t[i,j]=t[i,j-1] then dec(j) else if t[i,j]=t[i-1,j] then dec(i); - 47 - writeln(f); write(f,'vtri cua chung day A:'); for i:= dem downto write(f,pa[i]:5); writeln(f); write(f,'vtri cua chung day B:'); for i:=dem downto write(f,pb[i]:5); close(f); end; {******* Chuong trinh chinh ******} begin init; tao_bang; tra_bang; end 4.6 Chạy Chương Trình: Dữ liệu lấy từ file ‘ DAYCON.INP’ Đưa kết file ‘DAYCON.OUT’ - 48 - Bài tập đề nghị: Bài 1: Phép nhân tổ hợp dãy ma trận 5.1 Đề bài: Với ma trận A kích thước p*q ma trận B kích thước q*r Người ta có phép nhân ma trận để ma trận C kích thước p*r.Mỗi phần tử ma trận C tính theo cơng thức: q Ci,j = A k 1 ik Bkj ( i,j : 1 i p; 1jr) 5.2 Gợi ý: - phép nhân ma trận khơng có tính giao hốn có tính kết hợp ( A*B)*C = A*(B*C) - Để tính (A*B)*C, ta thực (A*B) trước, giá trị X Sau ta thực X*C - Để tính A*(B*C), ta thực (B*C) trước, giá trị Y Sau ta thực A*Y - Sử dụng cơng thức truy hồi sau đây: F[i,j] = (F[i,k] + F[k+1,j] + ai*ak-1+aj+1) với i kj - Tính bảng phương án: Bảng phương án F bảng hai chiều ,nhìn vào cơng thức truy hồi ta có F[i,j] tính mà F[k+1,j] biết Tức ban đầu ta điền sở quy hoạch động vào đường chéo bảng, từ tính giá trị đường chéo nằm phía trên, tính giá trị đường chéo nằm phía nữa… đến tính F[1,n] dừng lại - Sau tìm cách kết hợp nghiệm tối ưu - 49 - KẾT LUẬN Quy hoạch động giải toán cách kết hợp lời giải toán toán xét Phương pháp khả dụng tốn khơng độc lập nhau, tức tốn có dùng chung toán “cháu” *) Sau ưu nhược điểm phương pháp quy hoạch động: Ưu điểm : - Chương trình thực nhanh - Kỹ thuật quy hoạch động vận dụng để giải tốn tối ưu, tốn có cơng thức truy hồi Nhược điểm: - Quy hoạch động khơng đem lại hiệu khi: + Khơng tìm cơng thức truy hồi + Số lượng tốn cần giải lưu giữ kết lớn + Sự kết hợp lời giải toán chưa cho ta lời giải tốn ban đầu - Tốn nhớ để lưu trữ tốn Vậy qua q trình thực đề tài em hiểu phần phương pháp quy hoạch động, ứng dụng phương pháp để giải số toán tối ưu đơn giản Với thân hệ thống số kiến thức môn học cấu trúc liệu giải thuật, môn lý thuyết đồ thị hiểu sâu phương pháp quy hoạch động Ngoài giải số toán quy hoạch động, giúp em củng cố khả lập trình Nhưng cịn hạn chế : có nhiều nỗ lực cố gắng tìm tài liệu tiến hành thực thời gian có hạn nên đề tài em khơng tránh khỏi sai sót khả lập trình chưa chặt chẽ thuật toán quy hoạch động em tiếp xúc lần đầu nên quy hoạch động - 50 - thuật tốn cịn sinh viên chúng em chắn tránh khỏi sai sót có phần chưa đạt yêu cầu Em mong nhận ý kiến đóng góp q thầy để hồn chỉnh nội dung cho lần làm *) Hướng phát triển đề tài: Tiếp tục nghiên cứu vận dụng luận kết phương pháp quy hoạch động, thuật toán để giải nhiều toán thực tế Trong tương lai phương pháp quy hoạch động giải thuật giải toán cách tối ưu - 51 - TÀI LIỆU THAM KHẢO [1] Trần Quốc Chiến, Giáo trình cấu trúc liệu giải thuật lưu hành nội bộ, năm 1998 [2] Trần Quốc Chiến, Lý thuyết đồ thị ứng dụng, Đà Nẵng lưu hành nội bộ,năm 2007 [3] Phan Đoàn Ngọc Phương, Giải Thuật [4] Robert Sedgewick (2001), Cẩm nang thuật toán (tập2:các thuật toán chuyên dụng) Nhà xuất Khoa học Kỹ thuật [5] Lê Minh Hoàng ,Giáo trình phân tích thiết kế giải thuật, năm 2005 [6] Lê Minh Hoàng, Bài giảng chuyên, năm 2005 [7] Đỗ Xuân Lôi ,cấu trúc liệu giải thuật, nhà xuất giáo dục năm 1993 - 52 - MỤC LỤC LỜI MỞ ĐẦU 1 LÝ DO CHỌN ĐỀ TÀI MỤC ĐÍCH NGHIÊN CỨU PHƯƠNG PHÁP NGHIÊN CỨU CẤU TRÚC LUẬN VĂN CHƯƠNG I CƠ SỞ LÝ THUYẾT Tổng quan quy hoạch động Phương pháp quy hoạch động : Bài toán quy hoạch động Các bước thực quy hoạch động CHƯƠNG II MỘT SỐ BÀI TOÁN 12 1.Bài tốn tính tổ hợp 12 1.1 Đề bài: 12 1.2 Phân tích: 12 1.3 Giải thuật: 14 1.4 Độ phức tạp: 15 1.5 Chương trình DEMO: 16 1.6 Chạy Chương Trình: 18 2.Tìm đường ngắn cặp đỉnh đồ thị có hướng có trọng số 19 2.1 Bài toán: 19 2.2 Ý tưởng: 19 2.3 Thuật toán: 19 2.4 Định lý: 20 2.5 Phương pháp: 21 2.6 Cài đặt : 25 2.7 Độ phức tạp 25 - 53 - 2.8.Chương trình DEMO 27 3.Bài toán ba lô 31 3.1 Đề bài: 31 3.2 Phân tích tốn 31 3.3 Tổ chức liệu cho toán: 32 3.4 Giải thuật: 36 3.5 Chương trình DEMO: 37 3.6 Chạy Chương Trình 40 4) Dãy chung dài nhất(DCCDN) hai dãy số 41 4.1 Đề bài: 41 4.2 Một số khái niệm: 41 4.3 Phân tích, giải thuật.: 42 4.4 Tổ chức liệu : 45 4.5 Chương trình DEMO: 45 4.6 Chạy Chương Trình 48 Bài tập đề nghị: 49 5.1 Đề bài:: 49 5.2 Gợi ý: 49 KẾT LUẬN 50 TÀI LIỆU THAM KHẢO 52 - 54 - ... hiểu thêm phương pháp quy hoạch động MỤC ĐÍCH NGHIÊN CỨU - Luận văn thực để làm rõ thuật toán, phương pháp, việc cài đặt chạy chương trình giải tốn phương pháp quy hoạch động PHƯƠNG PHÁP NGHIÊN... ngữ dùng quy hoạch động: + Bài toán giải theo phương pháp quy hoạch động gọi tốn quy hoạch động + Cơng thức phối hợp nghiệm tốn để có nghiệm tốn lớn gọi cơng thức truy hồi quy hoạch động + Tập... cho trước khơng trực giác Phương pháp quy hoạch động : Phương pháp quy hoạch động để giải tốn tối ưu có chất đệ quy, tức việc tìm phương án tối ưu cho tốn đưa tìm -4- phương án tối ưu số hữu hạn