1. Trang chủ
  2. » Thể loại khác

Tài liệu môn học - Application of Algo. chapter02

55 193 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

Cấu trúc

  • Thu tuc quy

  • Ð quy và B nh

  • Thut toán Quay lui

  • Nhánh cn

Nội dung

Tài liệu môn học - Application of Algo. chapter02 tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn v...

Đệ quy, Quay lui, Nhánh cận Khoa Công Nghệ Thông Tin, Trường Đại Học Thủy Lợi Ngày tháng năm 2017 / 55 Các thủ tục đệ quy Một thủ tục gọi Các trường hợp bản: kết tính tốn cách tầm thường int fact ( int n ){ if ( n then foreach j ∈ k C [i][j] = C [i][j] − minRow ; S ← S + minRow ; foreach j ∈ k minCol ← giá trị nhỏ cột j C ; if minCol > then foreach i ∈ k C [i][j] = C [i][j] − minCol; S ← S + minCol; return S; 41 / 55 Bài toán Người bán hàng - Rẽ nhánh Chọn cạnh (u, v ) để rẽ nhánh (được tính hàm bestEdge, tìm cạnh tốt nhất, đây) Với hành trình chứa (u, v ) Loại bỏ hàng u cột v Đặt C [v ][u] = ∞ Nếu u nột nút kết thúc đường x1 , x2 , , u v nút bắt đầu đường v , y1 , , yk , đặt C [yk ][x1 ] = ∞ để tránh tạo hành trình Với hành trình khơng chứa (u, v ) Đặt C [u][v ] = ∞ 42 / 55 Bài toán Người bán hàng - Rẽ nhánh Khi ma trận giảm có kích thước × a chấp nhận (u, w ) (v , x) b chấp nhận (u, x) (v , w ) 43 / 55 Bài toán Người bán hàng - Rẽ nhánh Algorithm 19: bestEdge(C) k kích thước ma trận chi phí C ; best ← −∞; foreach i ∈ k foreach j ∈ k if C [i][j] = then minRow ← phần tử nhỏ hàng i mà khác C [i][j]; minCol ← phân tử nhỏ cột j mà khác C [i][j]; total ← minRow + minCol; if total > best then best ← total; selRow ← i; selCol ← j; return (selRow , selCol) 44 / 55 Bài toán Người bán hàng a Ma trận khoảng cách ban đầu b Ma trận giảm 45 / 55 Bài tốn Người bán hàng Tập hành trình chia trường hợp: 46 / 55 Bài toán Người bán hàng Tập hành trình chứa (6,3) chia trường hợp: 47 / 55 Bài toán Người bán hàng Tập hành trình chứa (6,3), (4,6) chia trường hợp: 48 / 55 Bài toán Người bán hàng Tập hành trình chứa (6,3), (4,6), (2,1) chia trường hợp: 49 / 55 Bài tốn Người bán hàng Tập hành trình chứa (6,3), (4,6) không chứa (2,1) chia trường hợp: 50 / 55 Bài toán Người bán hàng Tập hành trình chứa (6,3), (4,6), (5,1) khơng chứa (2,1) chia trường hợp: Cuối cùng, hành trình tốt có khoảng cách 104 51 / 55 Nhánh cận: MaxClique Miêu tả Đầu vào: đồ thị vô hướng G = (V , E ), Đồ thị con: Đặt G (S) đồ thị (S, ES ) ES = {(u, v ) | u, v ∈ S ∧ (u, v ) ∈ E } G (S) gọi đồ thị với tập S (∀S ⊆ V ) Đầu ra: đồ thị hồn chỉnh cực đại (hay gọi clique) G Nhánh cận Giải pháp phận Q: tập nút, hai nút Q kề Các nút tiềm Cand cho mở rộng: nút Cand liền kề với nút Q Giới hạn (cận trên) ∆ số lượng màu sử dụng để tô màu nút Cand cho hai nút liền kề u, v ∈ Cand phải tơ màu khác Kích thước đồ thị hoàn chỉnh G (Cand) nhỏ ∆ |Q| + ∆ giới hạn kích thước clique mở rộng từ Q Nếu |Q| + ∆ ≤ |Qmax|, khơng mở rộng Q 52 / 55 Nhánh cận: MaxClique Algorithm 20: MaxClique(G = (V , E )) Input: Đồ thị G = (V , E ) Output: Đồ thị hoàn thiện tối đa G Qmax ← {}; Q ← {}; Cand ← danh sách nút V ; ∆ ← Sort(Cand); Expand(Cand); return Qmax; 53 / 55 Nhánh cận: MaxClique Algorithm 21: Expand(Cand) Input: Danh sách xếp ứng viên Cand, G = (V , E ) Q, Qmax biến toàn cục Output: Mở rộng lời giải cục Q foreach i = 0, , lenght(Cand) − u ← Cand[i]; Q ← Q ∪ {u}; if |Q| > |Qmax| then Qmax ← Q; Cand ← {v ∈ Cand | v = u ∧ (u, v ) ∈ E }; ∆ ← Sort(Cand ); if |Q| + ∆ > |Qmax| then Expand(Cand ); Q ← Q \ {u}; 54 / 55 Nhánh cận: MaxClique Algorithm 22: Sort(Cand) Input: Sắp xếp danh sách ứng viên Cand Output: Cập nhật Cand trả số lớp maxNo ← 0; C1 ← {}; foreach u ∈ Cand k ← 1; while ∃v ∈ Ck | (u, v ) ∈ E k ← k + 1; if k > maxNo then maxNo ← k; Ck ← {}; Ck ← Ck ∪ {u} L ← []; foreach k = 1, , maxNo foreach v ∈ Ck L ← L :: v ; foreach i = 0, , length(L) − Cand[i] ← L[length(L) − i − 1]; return maxNo; 55 / 55 ... n ){ if ( n

Ngày đăng: 21/12/2017, 11:05

w