THUẬT TOÁN CHƯƠNG 5 THUẬT TOÁN QUAY LUI SLIDE GIẢNG DẠY

40 681 1
THUẬT TOÁN CHƯƠNG 5  THUẬT TOÁN QUAY LUI  SLIDE GIẢNG DẠY

Đ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

TRƯỜNG CAO ĐẲNG CNTT HỮU NGHỊ ViỆT - HÀN KHOA KHOA HỌC MÁY TÍNH -*** - THUẬT TOÁN (Algorithms) Nguyễn Thanh Cẩm Nội Dung C1 THUẬT TOÁN VÀ ĐỘ PHỨC TẠP C2 CHIA ĐỂ TRỊ C3 QUY HOẠCH ĐỘNG C4 THUẬT TOÁN THAM LAM C5 THUẬT TOÁN QUAY LUI Nguyễn Thanh Cẩm THUẬT TOÁN QUAY LUI 5.1 Thuật toán quay lui 5.2 Một số toán minh họa Nguyễn Thanh Cẩm THUẬT TOÁN QUAY LUI 5.1 Thuật toán quay lui 5.1.1 Đệ quy 5.1.2 Thuật toán quay lui tổng quát Nguyễn Thanh Cẩm 5.1 Thuật toán quay luiQuay lui (backtracking) chiến lược tìm kiếm lời giải cho toán thỏa mãn ràng buộc  Người đề thuật ngữ (backtrack) nhà toán học người Mỹ D H Lehmer vào năm 1950 Nguyễn Thanh Cẩm 5.1.1 Đệ quy  Thí dụ 1: Tìm thuật toán đệ quy tính giá trị an với a số thực không âm n số nguyên không âm  Thuật toán đệ quy tính an float power (a: float; n: int); { if (n = 0) power(a, n) = else power(a, n) = a*power(a, n-1) } Nguyễn Thanh Cẩm 5.1.1 Đệ quy  Thí dụ 2: Tìm thuật toán đệ quy tính UCLN hai số nguyên a, b không âm a < b  Thuật toán đệ quy tính UCLN(a, b) int UCLN(int a, int b); { if (a = 0) UCLN(a, b) = b else UCLN(a,b) = UCLN(b mod a,a) } Nguyễn Thanh Cẩm 4.1.2 Thuật toán quay lui tổng quát  Thuật toán quay lui dùng để giải toán liệt kê cấu hình  Mỗi cấu hình xây dựng cách xây dựng phần tử,  phần tử chọn cách thử tất khả Nguyễn Thanh Cẩm 4.1.2 Thuật toán quay lui tổng quát  Giả thiết cấu hình cần liệt kê có dạng (x1, x2, …, xn) Khi thuật toán quay lui thực bước sau:  Xét tất giá trị x1 nhận, thử cho x1 nhận giá trị Với giá trị thử gán cho x1 ta sẽ:  Xét tất giá trị x2 nhận, lại thử cho x2 nhận giá trị Với giá trị thử gán cho x2 lại xét tiếp khả chọn x3… tiếp tục đến bước:  Xét tất giá trị xn nhận, thử cho xn nhận giá trị đó, thông báo cấu hình tìm (x1, x2, …, xn)  Trên phương diện quy nạp, nói thuật toán quay lui liệt kê cấu hình n phần tử dạng (x1, x2, …, xn) cách thử cho x1 nhận giá trị Với giá trị gán cho x1 lại liệt kê tiếp cấu hình n -1 phần tử (x2, x3, …, xn) Nguyễn Thanh Cẩm 4.1.2 Thuật toán quay lui tổng quát  Mô hình thuật toán quay lui mô tả sau: Void Try(int i) { For (mọi giá trị V gán cho xi) { ; If (xi phần tử cuối cấu hình) Else { ; Try(i + 1); ; } } } Nguyễn Thanh Cẩm 5.2.3 Bài toán xếp hậu  Cài đặt  Ta có mảng logic để đánh dấu:  Mảng a[1 n] = TRUE cột i tự do, = FALSE cột i bị quân hậu khống chế  Mảng b[2 2n] bi = TRUE đường chéo ĐB-TN thứ i tự do, bi = FALSE đường chéo bị quân hậu khống chế  Mảng c[1 - n n - 1] ci = TRUE đường chéo ĐN-TB thứ i tự do, ci = FALSE đường chéo bị quân hậu khống chế  Ban đầu mảng đánh dấu mang giá trị TRUE (Các cột đường chéo tự do) Nguyễn Thanh Cẩm 5.2.3 Bài toán xếp hậu  Áp dụng thuật toán quay lui cho toán xếp hậu:  Xét tất cột, thử đặt quân hậu vào cột,  với cách đặt vậy, xét tất cách đặt quân hậu không bị quân hậu ăn, lại thử cách đặt xét tiếp cách đặt quân hậu 3…  Mỗi cách đặt đến quân hậu n cho ta nghiệm  Khi chọn vị trí cột j cho quân hậu thứ i, ta phải chọn ô(i, j) không bị quân hậu đặt trước ăn, tức phải chọn cột j tự do, đường chéo ĐB-TN (i+j) tự do, đường chéo ĐNTB(i-j) tự  Điều kiểm tra (aj = bi+j = ci-j = TRUE)  Khi thử đặt quân hậu thứ i vào cột j, quân hậu cuối (i = n) ta có nghiệm Nếu không: Nguyễn Thanh Cẩm 5.2.3 Bài toán xếp hậu  Trước gọi đệ quy tìm cách đặt quân hậu thứ i + 1, ta đánh dấu cột đường chéo bị quân hậu vừa đặt khống chế (aj = bi+j = ci-j := FALSE) để lần gọi đệ quy tiếp sau chọn cách đặt quân hậu không chọn vào ô nằm cột j đường chéo  Sau gọi đệ quy tìm cách đặt quân hậu thứ i + 1, có nghĩa tới ta lại thử cách đặt khác cho quân hậu thứ i, ta bỏ đánh dấu cột đường chéo bị quân hậu vừa thử đặt khống chế (aj = bi+j = ci-j := TRUE) tức cột đường chéo lại thành tự do, đặt quân hậu i sang vị trí khác cột đường chéo hoàn toàn gán cho quân hậu khác Nguyễn Thanh Cẩm 5.2.3 Bài toán xếp hậu  Thủ tục đặt hậu: void Try(int i) {int j; for (j = 1;j

Ngày đăng: 23/06/2017, 16:02

Từ khóa liên quan

Mục lục

  • THUẬT TOÁN (Algorithms)

  • Nội Dung

  • THUẬT TOÁN QUAY LUI

  • Slide 4

  • 5.1 Thuật toán quay lui

  • 5.1.1 Đệ quy

  • 5.1.1 Đệ quy

  • 4.1.2 Thuật toán quay lui tổng quát

  • Slide 9

  • Slide 10

  • 5.1.2 Thuật toán quay lui tổng quát

  • Slide 12

  • 5.2.1 Bài toán liệt kê dãy nhị phân độ dài n

  • Slide 14

  • Slide 15

  • Slide 16

  • 5.2.2 Bài toán liệt kê các tập con k phần tử

  • Slide 18

  • Slide 19

  • Slide 20

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

Tài liệu liên quan