1. Trang chủ
  2. » Công Nghệ Thông Tin

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

19 93 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

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 228,59 KB

Nội dung

Ph ng pháp nhánh c n (brand and bound) GVGD: Tr ng Ph cH i Ph ng pháp nhánh c n  K thu t quay lui t t t c kh n ng theo mô hình phân c p đ tìm c u hình Ph S    ng pháp nhánh c n d ng quay lui đ tìm c u hình t i u ánh giá t t c c u hình đ tìm c u hình t i d n đ n s bùng n t h p u: u N u vi c ch n thành ph n xi không d n đ n c u hình t i u s gây lãng phí tài nguyên đ tìm thành ph n ti p theo xi+1, xi+2, C n t n d ng thông tin bi t đ ch c ch n không th t i u s m lo i b c u hình Ph ng pháp nhánh c n  K thu t nhánh c n (g i t t nhánh c n) m t d ng c i ti n c a k thu t quay lui áp d ng cho toán t i u    ánh giá l i giá tr t i m i l n quay lui u c c b (c n) c a nhánh sau S d ng c n đ lo i b nh ng nhánh d ki m nh m gi m chi phí: t a nhánh th a c a tìm ánh giá c n v n đ khó kh n nh t vi c áp d ng ph ng pháp nhánh c n Ph ng pháp nhánh c n Ýt   ng Kh i t o m t c u hình BEST cho toán: kh i t o c n Tính chi phí c a c u hình trình xây d ng  N u t t h n BEST: c p nh t c u hình t i  Ng c l i quay lui đ tìm ph ng án khác u ti p t c Ph ng pháp nhánh c n  Mô hình t ng quát c a k thu t nhánh c n đ ti n t mô hình đ quy nh sau Try(i) For (j t If (ch Ch If cc i p kh n ng c a X[i]) p nh n j) Then n kh n ng j cho X[i] (X[i] cu i c u hình) Then Else If (v n t t h n BEST) Then Try(i + 1) Cu i If Cu i If Cu i for Cu i Try Ph ng pháp nhánh c n  Khi gi i thu t nhánh c n đ b c sau c th c hi n theo NhanhVaCan() BEST = +; //N u bi t X’ ph ng án t i //BEST = f(X’); Try(0); If (BEST < +) Then Else Cu i If Cu i NhanhVaCan u hi n t i Ph ng pháp nhánh c n  Bài toán ng Problem)     i du l ch (TSP - Travelling Salesman M t b n đ g m N thành ph đ c đánh s t đ n N-1 M t du khách xu t phát t i thành ph mu n tham quan t t c thành ph , m i n i đ n l n r i tr v thành ph xu t phát Bi t r ng gi a 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 Ph T  ng pháp nhánh c n ch c d S d ng m ng chi u g m N dòng, N c t đ phí l i gi a thành ph : ma tr n chi phí    li u C[i][j] = v: cho bi t vi c t thành ph j t n chi phí v thành ph C[i][j] = +: cho bi t đ thành ph i đ n thành ph j bi u di n chi i đ n tr c ti p ng tr c ti p t S d ng m ng chi u X[0], X[1], …, X[N] đ l u tr m t nghi m toán (th t thành ph th m hành trình) Ph ng pháp nhánh c n  Ví d đ th bi u di n ma tr n chi phí t nh sau ng 0 1 2 4 1 10 ng Ph ng pháp nhánh c n  Nh n xét    x0 = thành ph xu t phát Hành trình c n (x0 = 0, x1, x2, , xN-1, xN = 0) tìm có d ng M t hành trình (x1, x2, , xN-1) m t hoán v c a thành ph {1, 2, …, N-1} 11 Ph ng pháp nhánh c n  Cây tìm ki m TSP theo k thu t quay lui 1 4 3 2 2 2 1 1 0 0 0 11 11 12 Ph ng pháp nhánh c n  Duy t quay lui     Ch n x1 m t TP có th đ n tr c ti p t x0 Ch n x2 m t TP ch a tham quan có th đ n tr c ti p t x3 … Ch n xi m t TP ch a tham quan có th tr c ti p t xi-1 (1 ≤ i ≤ N-1) 13 đ n Ph ng pháp nhánh c n  Nhánh c n  Kh i t o c u hình BEST v i chi phí MAX = +∞  Ki m tra chi phí tính cho t i đ n xi < chi phí c a BEST    N u ch n xi thành ph th m ti p theo  Ng c l i th thành ph khác (c t nhánh) Khi đ n xN, ki m tra n u có đ ng tr c ti p v x1 mà t ng chi phí < chi phí c a BEST c p nh t l i BEST Sau quay lui mà chi phí c a BEST v n MAX toán l i gi i, ng c l i BEST hành trình t t nh t 14 Ph ng pháp nhánh c n  Cây tìm ki m TSP theo k thu t nhánh c n 1 4 3 2 2 2 1 1 0 0 0 11 11 15 Ph B ng pháp nhánh c n c 1: kh i t o cho hành trình void Init() { for (int i = 0; i < N; i++) Free[i] = true; X[0] = 0; //xu t phát t i thành ph Free[0] = false; //đã th m thành ph Cost = 0; //chi phí xu t phát Best = +; //kh i t o chi phí t t nh t } 16 Ph B ng pháp nhánh c n c 2: th t c Try tìm thành ph th m ti p theo Try(i) For (thành ph j  {2, , n}) If (ch a tham quan thành ph j) Then Tham quan thành ph j, tính chi phí ánh đ u th m thành ph j If (i = n) Then C p nh t hành trình Else If (chi phí hi n t i < BEST) Then Try(i + 1); Cu i If B đánh đ u th m thành ph Cu i If Cu i For Cu i Try 17 j Ph B ng pháp nhánh c n c 2: tìm đ ng ti p theo cho hành trình void Try(int i) { for (int j = 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 Ph ng pháp nhánh c n  C p nh t hành trình t i u void Update() { //n u chi phí tr v < chi phí t i if (Cost + C[X[N-1]][X[0]] < Best) { //c p nh t l i chi phí t i u Best = Cost + C[X[N-1]][X[0]]; Print(X, N); } } 19 u [...]... l i BEST là hành trình t t nh t 14 Ph ng pháp nhánh và c n  Cây tìm ki m TSP theo k thu t nhánh c n 0 3 1 1 2 3 4 1 4 3 2 3 2 2 3 4 1 2 2 1 2 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 Ph B ng pháp nhánh và c n c 1: kh i t o cho hành trình void Init() { for (int i = 0; i < N; i++) Free[i] = true; X[0] = 0; //xu t phát t i thành ph 0 Free[0] = false; //đã th m thành ph 0 Cost = 0; ... 14 Ph ng pháp nhánh c n  Cây tìm ki m TSP theo k thu t nhánh c n 1 4 3 2 2 2 1 1 0 0 0 11 11 15 Ph B ng pháp nhánh c n c 1: kh i t o cho hành trình void Init() { for (int i = 0; i < N; i++)

Ngày đăng: 04/12/2015, 18:30