Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 4: Kỹ thuật quay lui (Backtracking)

29 79 0
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 4: Kỹ thuật quay lui (Backtracking)

Đ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

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 4: Kỹ thuật quay lui (Backtracking) với những kiến thức khái niệm về kỹ thuật quay lui, bài toán 8 con hậu - eight queen problem, bài toán mã đi tuần - knight tour problem, bài toán chiếc ba lô - knapsack problem.

Cấu trúc liệu giải thuật Bài 4: Kỹ thuật quay lui (Backtracking) Lecturer: PhD Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University Bài Kỹ thuật quay lui Backtracking Nội dung: 4.1 Khái niệm kỹ thuật quay lui (6) 4.2 Bài toán hậu - Eight Queen Problem (7) 4.3 Bài toán mã tuần - Knight Tour Problem (5) 4.4 Bài tốn ba lơ - Knapsack Problem (6) Tham khảo: Lecture 11 – Backtracking.htm @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.1 Khái niệm kỹ thuật quay lui (1/6)  Kỹ thuật quay lui q trình phân tích từ xuống khơng gian tìm kiếm  Trong trường hợp tổng qt, giả sử lời giải vector: a = (a[1], a[2], …, a[n]) đó, phần tử a[i] chọn từ tập hữu hạn S[i] (các khả a[i]) @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.1 Khái niệm kỹ thuật quay lui (2/6)  Ta s ẽ giải tốn với kích thước k, có dạng: a = (a[1], a[2], …, a[k]) cố gắng mở rộng việc thêm phần tử vào vector  Sau thêm phần tử, kiểm tra xem thực tiếp khơng  Nếu có khả mở rộng, tiếp tục thực hiện; Nếu khơng, xóa phần tử a[k] làm lại toán từ tập S[k] @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.1 Khái niệm kỹ thuật quay lui (3/6) Gọi S[1], tập khả a bước k=1 While k > While S[k][] (*advance*) a[k] = an element in S[k] If (a[1], a[2],…, a[k]) is solution, print it! k=k+1 Tính S[k], tập khả a bước k k = k - (*backtrack*) @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.1 Khái niệm kỹ thuật quay lui (4/6) Sub Backtrack(a, k) If a is a solution, get it Else k = k +1 compute S[k] While S[k][] a[k] = an element in S[k] S[k] = S[k] – a[k] Backtrack(a, k) End Sub @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.1 Khái niệm kỹ thuật quay lui (5/6)  Kỹ thuật đệ quy dùng kỹ thuật quay lui (đơn giản ứng dụng)  Kỹ thuật quay lui chắn liệt kê khả  Để tăng hiệu kỹ thuật, cắt bớt khơng gian tìm kiếm @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.1 Khái niệm kỹ thuật quay lui (6/6) Trong phần này, giải số toán, có sử dụng kỹ thuật quay lui:  Bài tốn hậu - Eight Queen Problem  Bài toán mã tuần - Knight Tour Problem  Bài toán ba lô - Knapsack Problem @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.2 Eight Queen Problem (1/7) Bài toán: đặt hậu bàn cờ cho khơng có hậu nằm hàng, cột hàng ngang Một lời giải Không phải lời giải @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.2 Eight Queen Problem (2/7) Thực hiện: • Trạng thái: Sắp đặt từ đến hậu lên bàn cờ • Trạng thái khởi tạo: khơng có hậu đặt lên bàn cờ • Đặt hậu lên bàn cờ • Kiểm tra kết quả: hậu đặt lên bàn cờ, khơng có hậu ăn  648 cách đặt hậu 10 @Copyright PhD Ngo Huu Phuc, Le Quy Don Technical University 4.2 Eight Queen Problem (6/7) // Kiem tra xem hau tiep theo co the dat o hang // Bai toan N hau // row, cot col khong void N_Queens(int a[][N], int n, int row) { bools feasible(int a[][N], int n, int row, int col) int j; { if(row < n) { int i; for(j=0; j

Ngày đăng: 24/09/2020, 04:26

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

Tài liệu liên quan