Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
514,5 KB
File đính kèm
CHUYEN DE 2 THUAT TOAN DUYET P1.rar
(200 KB)
Nội dung
Các phương pháp thiết kế thuật toán Trường THPT Chuyên Trà Vinh BÀI TOÁN TỐI ƯU : Bài tốn tối ưu tổ hợp tốn tìm phương án tối ưu tập cấu hình tổ hợp Nghiệm toán vector x gồm n thành phần cho: x = (x1,x2,…xn) xi lấy giá trị tập Si x thoả mãn ràng buộc cho hàm G(x) F(x) → min/max (hàm F(x) gọi hàm mục tiêu) Khi x gọi phương án tối ưu, F(x) giá trị tối ưu Các thuật toán duyệt: Duyệt toàn bộ: Một phương pháp hiển nhiên để giải toán tối ưu tổ hợp đặt là: sở thuật toán liệt kê tổ hợp ta tiến hành duyệt phương án tốn, phương án ta điều tính giá trị hàm mục tiêu đó, sau so sánh giá trị hàm mục tiêu tất phương án liệt kê để tìm phương án tối ưu Thuật toán nhánh cận: Trang Các phương pháp thiết kế thuật toán Trường THPT Chuyên Trà Vinh [ Procedure BranchBound(i); // xây dựng thành phần thứ i Begin ; If then exit; ; for xi ∈ Si begin ; if (tìm thấy nghiệm “i=n”) then else BranchBound(i+1); ; end; Trong thủ tục trên, BestSolution nghiệm tốt biết thời điểm Thủ tục xác định “độ tốt” nghiệm tìm thấy, nghiệm tìm thấy tốt BestSolution BestSolution cập nhật lại nghiệm tìm Một số ví dụ BÀI TỐN NGƯỜI DU LỊCH Bài toán Cho n thành phố đánh số từ đến N tuyến đường giao thông hai chiều chúng, mạng lưới giao thông cho bảng C[1 n,1 n], C ij = Cji chi phí đoạn đường trực tiếp từ thành phố i đến thành phố j Một người du lịch xuất phát từ thành phố 1, muốn thăm tất thành phố lại thành phố lần cuối quay lại thành phố Hãy cho người hành trình với chi phí Bài tốn gọi tốn người du lịch hay tốn hành trình thương gia (Travelling Salesman Problem-TSP) * Input: file TOURISM.INP có dạng: - Dòng đầu chứa số thành phố n (12->4->3->1 Cách giải 1) Hành trình cần tìm có dạng (x1 = 1, x2, , xn, xn+1 = 1), xi xi+1: hai thành phố liên tiếp hành trình phải có đường trực tiếp; trừ thành phố 1, không thành phố lặp lại hai lần Có nghĩa dãy (x1, x2, , xn) lập thành hoán vị (1, 2, , n) 2) Duyệt quay lui: x2 chọn thành phố mà x có đường tới (trực tiếp), với cách thử chọn x2 x3 chọn thành phố mà x có đường tới (ngồi x 1) Tổng qt: xi chọn thành phố chưa qua mà từ xi-1 có đường trực tiếp tới (1 ≤ i ≤ n) 3) Nhánh cận: Khởi tạo cấu hình BestConfig có chi phí = +∞ Với bước thử chọn x i xem chi phí đường lúc có < Chi phí cấu hình BestConfig?, khơng nhỏ thử giá trị khác có tiếp tốn thêm Khi thử giá trị x n ta kiểm tra xem xn có đường trực tiếp khơng ? Nếu có đánh giá chi phí từ thành phố đến thành phố x n cộng với chi phí từ xn trực tiếp 1, nhỏ chi phí đường BestConfig cập nhật lại BestConfig cách Chương trình giải tóan người du lịch PP nhánh cận (tham khảo): Program Nguoi_dulich; {TT: ky thuat nhanh can} Const MAX =100; oo =1000000; fi ='Tourism.INP'; fo ='Tourism.OUT'; Var C :array[1 max,1 max]of integer; x,bestway:array[1 max]of integer; d : array[1 max] of boolean; n,m :integer; sum,best : longint; Procedure input; var i, j, k: Integer; f: Text; begin Assign(f,fi); Reset(f); ReadLn(f, n); for i :=1 to n for j := to n Read(f,C[i, j]); Close(f); end; procedure update; Trang Các phương pháp thiết kế thuật toán Trường THPT Chuyên Trà Vinh begin if sum+C[x[n],x[1]]=best then exit; for j:=1 to n if d[j] then begin x[i]:=j; d[j]:=false; sum:=sum + C[x[i-1],j]; if i=n then update else branchBound(i+1); sum:=sum - C[x[i-1],j]; d[j]:=true; end; end; procedure init; begin fillchar(d,sizeof(d),true); d[1]:=false; x[1]:=1; best:=oo; end; procedure output; var f:text; i:longint; begin assign(f,fo); rewrite(f); writeln(f,best); for i:=1 to n write(f,bestway[i],'->'); write(f,bestway[1]); close(f); end; BEGIN input; init; BranchBound(2);output; END Trang Các phương pháp thiết kế thuật toán Trường THPT Chuyên Trà Vinh BÀI TẬP PHƯƠNG PHÁP DUYỆT TOÀN BỘ, NHÁNH CẬN Bài BÀI TOÁN MÁY RÚT TIỀN TỰ ĐỘNG ATM: Chương trình giải tóan ATM (tham khảo): Program ATM_PP_NhanhCan; Const MAX =20; fi ='ATM.INP'; fo ='ATM.OUT'; Type vector =array[1 MAX] of longint; Var t, tmax :array[1 MAX] of longint; x,xbest :vector; c,cbest :longint; n,s,sum :longint; Procedure input; var f :text; i :longint; begin assign(f,fi); reset(f); readln(f,n, s); for i:=1 to n read(f,t[i]); close(f); end; Trang Các phương pháp thiết kế thuật toán Trường THPT Chuyên Trà Vinh Procedure init; var i :longint; begin tmax[n]:=t[n]; for i:=n-1 downto begin tmax[i]:=tmax[i+1]; if tmax[i]