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

Thông tin cơ bản

Định dạng
Số trang 55
Dung lượng 781,95 KB

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