Cấu trúc dữ liệu - Phần 5 (tt) ppsx

19 154 0
Cấu trúc dữ liệu - Phần 5 (tt) ppsx

Đ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

GVGD: Trng Phc Hi Phng pháp nhánh cn (brand and bound) 2 Phng pháp nhánh và cn  K thut quay lui duyt tt c kh nng theo mô hình cây phân cp đ tìm ra cu hình 3 Phng pháp nhánh và cn  S dng quay lui đ tìm cu hình ti u  ánh giá tt c cu hình đ tìm ra cu hình ti u: điu này dn đn s bùng n t hp  Nu vic chn thành phn x i không dn đn cu hình ti u s gây lãng phí tài nguyên đ tìm các thành phn tip theo x i+1 , x i+2 ,  Cn tn dng thông tin đã bit đ sm loi b cu hình chc chn không th ti u 4 Phng pháp nhánh và cn  K thut nhánh và cn (gi tt nhánh cn) là mt dng ci tin ca k thut quay lui áp dng cho bài toán ti u  ánh giá li giá tr ti u cc b (cn) ca các nhánh sau mi ln quay lui  S dng cn đ loi b nhng nhánh d tha ca cây tìm kim nhm gim chi phí: ta nhánh  ánh giá cn là vn đ khó khn nht trong vic áp dng phng pháp nhánh cn 5 Phng pháp nhánh và cn  Ý tng  Khi to mt cu hình BEST cho bài toán: khi to cn  Tính chi phí ca các cu hình ngay trong quá trình xây dng  Nu tt hn BEST: cp nht cu hình ti u và tip tc  Ngc li quay lui đ tìm phng án khác 6 Phng pháp nhánh và cn  Mô hình tng quát ca k thut nhánh cn đc ci tin t mô hình đ quy nh sau Try(i) For (j tp kh nng ca X[i]) If (chp nhn j) Then Chn kh nng j cho X[i] If (X[i] là cui cu hình) Then <đánh giá li cn ti u BEST> Else If (vn còn tt hn BEST) Then <ghi nhn vic th kh nng j> Try(i + 1) <b ghi nhn th kh nng j> Cui If Cui If Cui for Cui Try 7 Phng pháp nhánh và cn  Khi đó gii thut nhánh cn đc thc hin theo các bc sau NhanhVaCan() <Khi to cu hình BEST> BEST = + ; //Nu bit X’ là phng án ti u hin ti //BEST = f(X’); Try(0); If (BEST < +) Then <BEST là giá tr ti u> <X’ là phng án ti u> Else <Bài toán không có nghim> Cui If Cui NhanhVaCan 8 Phng pháp nhánh và cn  Bài toán ngi du lch (TSP - Travelling Salesman Problem)  Mt bn đ gm N thành ph đc đánh s t 0 đn N-1  Mt du khách xut phát ti thành ph 1 và mun tham quan tt c thành ph, mi ni đn đúng 1 ln ri tr v thành ph xut phát  Bit rng gia 2 thành ph có th lu thông trc tip s tn mt chi phí nht đnh  Yêu cu xác đnh hành trình du lch vi chi phí nh nht 9 Phng pháp nhánh và cn  T chc d liu  S dng mng 2 chiu gm N dòng, N ct đ biu din chi phí đi li gia các thành ph: ma trn chi phí  C[i][j] = v: cho bit vic đi t thành ph i đn trc tip thành ph j tn chi phí v  C[i][j] = +: cho bit không có đng đi trc tip t thành ph i đn thành ph j  S dng mng 1 chiu X[0], X[1], …, X[N] đ lu tr mt nghim bài toán (th t thành ph thm trong hành trình) 10 Phng pháp nhánh và cn  Ví d đ th biu din và ma trn chi phí tng ng nh sau 0 2 1 3 2 2 4 1 3 1 0 1 2 3 0 0 3 2 1 1 3 0 1 2 2 2 1 0 4 3 1 2 4 0 [...]... 1; j < N; j++) { if (Free[j]) { X[i] = j; Free[j] = false; Cost = Cost + C[X[i-1]][X[i]]; if (i == N - 1) UpDate(); else if (Cost < Best) Try(X, N, C, i + 1); Cost = Cost - C[X[i-1]][X[i]]; Free[j] = true; } } } 18 hành trình void Update() { chi phí < chi phí if (Cost + C[X[N-1]][X[0]] < Best) { chi phí Best = Cost + C[X[N-1]][X[0]]; Print(X, N); } } 19 ... là thành phát Hành trình (x0 = 0, x1, x2, , xN-1, xN = 0) tìm hành trình (x1, x2, , xN-1) là thành {1, 2, , N-1} 11 có hoán các Cây tìm TSP theo 0 3 2 3 4 1 4 3 2 3 2 2 3 4 1 2 2 1 2 1 1 quay lui 2 3 4 1 2 1 1 1 2 1 1 2 1 3 2 0 0 0 0 0 0 9 11 6 11 6 9 12 3 quay lui x1 là trong các TP có x2 là trong các TP x0 tham quan và có x3 xi là trong các TP xi-1 (1 i N-1) 13 tham quan và có Nhánh hình BEST chi phí... toán không có 14 BEST nhánh) x1 mà BEST BEST là MAX thì bài BEST là hành trình Cây tìm TSP theo 0 3 2 3 4 1 4 3 2 3 2 2 3 4 1 2 2 1 2 1 1 nhánh 2 3 4 1 2 1 1 1 2 1 1 2 1 3 2 0 0 0 0 0 0 9 11 6 11 6 9 15 3 1: cho hành trình void Init() { for (int i = 0; i < N; i++) Free[i] = true; X[0] = 0; phát thành Free[0] = false; thành Cost = 0; //chi phí phát là 0 Best = + ; chi phí } 16 0 0 2: Try tìm thành theo . Free[j] = false; Cost = Cost + C[X[i-1]][X[i]]; if (i == N - 1) UpDate(); else if (Cost < Best) Try(X, N, C, i + 1); Cost = Cost - C[X[i-1]][X[i]]; Free[j] = true; } }. cn tìm có dng (x 0 = 0, x 1 , x 2 , , x N-1 , x N = 0)  Mt hành trình (x 1 , x 2 , , x N-1 ) là mt hoán v ca các thành ph {1, 2, …, N-1} 12 Phng pháp nhánh và cn  Cây tìm.  …  Chn x i là mt trong các TP cha tham quan và có th đn trc tip t x i-1 (1 ≤ i ≤ N-1) 14 Phng pháp nhánh và cn  Nhánh cn  Khi to cu hình BEST vi chi phí

Ngày đăng: 08/08/2014, 04:21

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

Tài liệu liên quan