1. Trang chủ
  2. » Giáo án - Bài giảng

phân tích va thiết kế giải thuật dương tuấn anh chương 6 giải thuật quay lùi sinhvienzone com

37 50 0

Đ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

Nội dung

om nh Vi en Zo ne C Chương Giải thuật quay lui Si Giải thuật quay lui Giải thuật nhánh-và-cận SinhVienZone.com https://fb.com/sinhvienzonevn Giải thuật quay lui ne C om Một phương pháp tổng quát để giải vấn đề: thiết kế giải thuật tìm lời giải cho tóan khơng phải bám theo tập qui luật tính tóan xác định mà cách thử sửa sai (trial and error) nh Vi en Zo Khn mẫu thơng thường phân rã q trình thử sửa sai thành công tác phận Thường cơng tác phận diễn tả theo lối đệ quy cách thuận tiện bao gồm việc thăm dò số hữu hạn cơng tác Si Ta coi tồn q trình trình tìm kiếm (search process) mà cấu tạo duyệt qua công tác SinhVienZone.com https://fb.com/sinhvienzonevn om Bài toán đường hiệp sĩ (The Knight’s Tour Problem) ne C Cho bàn cờ n  n với n2 ô Một hiệp sĩ – di chuyển tuân theo luật chơi cờ vua – đặt bàn cở có tọa độ x0, y0 nh Vi en Zo Vấn đề tìm lộ trình gồm n2 –1 bước cho phủ tồn bàn cờ (mỗi viếng lần) Cách rõ ràng để thu giảm toán phủ n2 xét tốn, Si - thực bước kế tiếp, hay - phát không kiếm bước hợp lệ SinhVienZone.com https://fb.com/sinhvienzonevn Si nh Vi en Zo ne C om procedure try next move; begin initialize selection of moves; repeat select next candidate from list of next moves; if acceptable then begin record move; if board not full then begin try next move; (6.3.1) if not successful then erase previous recording end end until (move was successful)  (no more candidates) end SinhVienZone.com https://fb.com/sinhvienzonevn Cách biểu diễn liệu om Chúng ta diễn tả bàn cờ ma trận h nh Vi en Zo ne C type index = n ; var h: array[index, index] of integer; h[x, y] = 0: ô chưa viếng h[x, y] = i: ô viếng bước chuyển thứ i (1 i n2) Điều kiện “board not full” diễn tả “i < n2” Si u, v: tọa độ ô đến Điều kiện “acceptable” diễn tả (1un)  (1vn)  (h[u,v]=0) SinhVienZone.com https://fb.com/sinhvienzonevn Si nh Vi en Zo ne C om procedure try(i: integer; x,y : index; var q: boolean); var u, v: integer; q1 : boolean; begin initialize selection for moves; repeat let u, v be the coordinates of the next move ; if (1un)  (1vn)  (h[u,v]=0) then begin h[u,v]:=i; if i < sqr(n) then (6.3.2) begin try(i + 1, u, v, q1); if  q1 then h[u,v]:=0 end else q1:= true end until q1  (no more candidates); q:=q1 end SinhVienZone.com https://fb.com/sinhvienzonevn om Cho tọa độ ô hành , có khả để chọn để tới Chúng đánh số từ đến sau: ne C nh Vi en Zo  Si SinhVienZone.com https://fb.com/sinhvienzonevn Sự tinh chế sau C om Cách đơn giản để đạt tọa độ u, v từ x, y cách cọng độ sai biệt toạ độ hai mảng a b ne Và k dùng để đánh số ứng viên (candidate) Si nh Vi en Zo program knightstour (output); const n = 5; nsq = 25; type index = n var i,j: index; q: boolean; s: set of index; a,b: array [1 8] of integer; h: array [index, index] of integer; SinhVienZone.com https://fb.com/sinhvienzonevn Si nh Vi en Zo ne C om procedure try (i: integer; x, y: index; var q:boolean); var k,u,v : integer; q1: boolean; begin k:=0; repeat k:=k+1; q1:=false; u:=x+a[k]; v:=y+b[k]; if (u in s)  (v in s) then if h[u,v]=0 then begin h[u,v]:=i; if i < nsq then begin try(i+1, u,v,q1); if  q1 then h[u,v]:=0 end else q1:=true end until q1  (k =8); q:=q1 end {try}; SinhVienZone.com https://fb.com/sinhvienzonevn om Zo ne C h[1,1]:=1; try (2,1,1,q); if q then for i:=1 to n begin for j:=1 to n write(h[i,j]:5); writeln end else writeln (‘NO SOLUTION’) end Si nh Vi en begin s:=[1,2,3,4,5]; a[1]:= 2; b[1]:= 1; a[2]:= 1; b[2]:= 2; a[3]:= –1; b[3]:= 2; a[4]:= –2; b[4]:=1; a[5]:= –2; b[5]:= –1; a[6]:= –1; b[6]:= –2; a[7]:= 1; b[7]:= –2; a[8]:= 2; b[8]:= –1; for i:=1 to n for j:=1 to n h[i,j]:=0; SinhVienZone.com https://fb.com/sinhvienzonevn 10 Si nh Vi en Zo ne C om procedure try(i: integer); var k: integer; begin for k:=1 to m begin select k-th candidate; if acceptable then begin record it; if i Z Hãy giải tốn giải thuật quay lui Cây khơng gian trạng thái tốn cho hình vẽ sau: SinhVienZone.com https://fb.com/sinhvienzonevn 28 X =2 Y=1 nh Vi en Zo Y=2 Y=2 ne Y=1 C om X =1 Z =1   Z=1 Z=2 Si Z =2   Hình 6.9 Thí dụ Khơng Gian Trạng Thái SinhVienZone.com lời giải https://fb.com/sinhvienzonevn  29 Độ phức tạp giải thuật quay lui C om Thời gian tính toán giải thuật quay lui thường hàm mũ (exponential) nh Vi en Zo ne Nếu nút khơng gian trạng thái có trung bình  nút con, chiều dài lối lời giải N, số nút tỉ lệ với N Si Thời gian tính tốn giải thuật đệ quy tương ứng với số nút không gian trạng thái nên có độ phức tạp hàm mũ SinhVienZone.com https://fb.com/sinhvienzonevn 30 Giải thuật nhánh cận (branch-and-bound) toán người thương gia du hành (TSP): cho tập thành phố khoảng cách cặp thành phố, tìm lộ trình qua tất thành phố cho tổng khoảng cách lộ trình nhỏ M ne C om Bài nh Vi en Zo Điều dẫn đến toán khác: cho đồ thị vơ hướng, có cách để nối tất nút chu trình đơn hay khơng Đây tốn Chu trình Hamilton (HCP) Si Để giải tốn (HCP), ta cải biên giải thuật tìm kiếm theo chiều sâu trước (DFS) để giải thuật sinh lối đơn mà qua đỉnh đồ thị SinhVienZone.com https://fb.com/sinhvienzonevn 31 Tìm kiếm vét cạn: Giải thuật DFS cải biên sinh lối đơn Si nh Vi en Zo procedure visit( k: integer); var t: integer; begin id := id +1; val[k]:= id; for t:= to V if a[k, t] then if val[k]= then visit(t); id := id –1; val[k] := end; ne C om Điều thực cách sửa lại thủ tục visit sau: SinhVienZone.com Thủ tục đệ quy sinh lối đơn từ đỉnh khởi đầu Ví dụ: id :=0; for k:= to V val[k]:=0; visit(1); https://fb.com/sinhvienzonevn 32 A E Si F SinhVienZone.com G 1 J L nh Vi en D C I ne Zo B H C om Một thí dụ tốn TSP K M Hình 5.10 https://fb.com/sinhvienzonevn 33 Tìm kiếm vét cạn lối đơn A F B D D C E F B G E D H J M I K M J H J M G K I K I K M J H J H I K I K L M G H J H G L M G C Si M L L D E Zo G L L C F I L K J M B D J M I K M J D B K M J K I K F C I K L M H I E M L M J H I I K M J L M G H I K I K M L H J H G L M G M L H E H J nh Vi en C G ne F M L L B C C E om G C F E B D C F I D B B D H F C D B G G H J F C Hình 5.11 SinhVienZone.com https://fb.com/sinhvienzonevn 34 Ta cải biên thủ tục visit để nhận diện chu trình Hamilton cách cho kiểm tra xem có tồn cạnh nối từ đỉnh k đỉnh xuất phát val[k]=V hay khơng Trong thí dụ trên, xem hình vẽ, ta tìm thấy chu trình Hamilton Zo   AFDBCELMJKIHG A G H I K J M L E C B D F hai chu trình nh Vi en  Chương trình nhận diện chu trình Halmiton sửa đổi để giải toán TSP cách theo dõi chiều dài lối hành mảng val, theo dõi lối có chiều dài nhỏ số chu trình Hamilton tìm thấy Si  ne C  om Từ giải thuật sinh tất lối đơn đến giải thuật giải toán TSP SinhVienZone.com https://fb.com/sinhvienzonevn 35 Ý tưởng nhánh cận Zo ne C om Khi áp dụng giải thuật DFS cải biên để sinh lối đơn, trình tìm kiếm lối tốt (tổng trọng số nhỏ nhất) cho tốn TSP, có kỹ thuật tỉa nhánh quan trọng kết thúc tìm kiếm thấy khơng thể thành cơng Si nh Vi en Giả sử lối đơn có chi phí x tìm thấy Thì thật vơ ích để duyệt tiếp lối chưa-đầy-đủ mà chi phí lớn x Điều thực cách không gọi đệ quy thủ tục visit lối chưa-đầyđủ hành lớn chi phí lối đầy đủ tốt SinhVienZone.com https://fb.com/sinhvienzonevn 36 Ý tưởng nhánh cận (tt.) C om Rõ ràng ta khơng bỏ sót lối chi phí nhỏ ta bám sát chiến lược Zo ne Kỹ thuật tính cận (bound) lời giải chưa-đầy-đủ để hạn chế số lời giải phải dò tìm gọi giải thuật nhánh cận Si nh Vi en Giải thuật áp dụng có chi phí gắn vào lối SinhVienZone.com https://fb.com/sinhvienzonevn 37 ... ========================================================= 8 76 264 200 1 36 504 400 72 280 240 264 160 3 36 Những giá trị cột N số lần thử để tìm an tồn Trung bình cần 161 phép thử 92 lời giải SinhVienZone. com https://fb .com/ sinhvienzonevn 26 Cây không... writeln end Si Một lời giải toán hậu cho hình vẽ sau: SinhVienZone. com https://fb .com/ sinhvienzonevn 20 H H H Zo H nh Vi en H Si H C ne om H H SinhVienZone. com https://fb .com/ sinhvienzonevn 21 Sự.. .Giải thuật quay lui ne C om Một phương pháp tổng quát để giải vấn đề: thiết kế giải thuật tìm lời giải cho tóan khơng phải bám theo tập qui luật

Ngày đăng: 30/01/2020, 22:02

TỪ KHÓA LIÊN QUAN

w