Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
307,56 KB
Nội dung
GVGD: Trng Phc Hi Gii thut quay lui (back tracking) 2 Ni dung 1. K thut quay lui 3. Bài toán 8 hu 4. Bài toán mã đi tun 2. Bài toán lit kê 3 K thut quay lui K thut quay lui là quá trình ln ngc tr li con đng đã qua đ th tìm mt li gii khác cho bài toán start end 4 K thut quay lui c đim K thut quay lui thng đc dùng đ gii các bài toán lit kê cu hình có dng là tp các thành phn (X 0 , X 1 , …, X N-1 ) T tng Xây dng dn cu hình bng cách th tt c kh nng (giá tr) cho mi phn t ca cu hình Khi đn phn t cui cùng ca cu hình thì ta tìm đc 1 nghim ca bài toán 5 K thut quay lui Ý tng thc hin Thành phn X[i] có tp các kh nng {1, 2, …, N i }. Th ln lt tng kh nng cho X[i] (X[i] = j, vi j {1, 2, …, N i }) Trng hp chn đc kh nng j cho X[i] Nu X[i] là phn t cui thì tìm đc mt cu hình Ngc li xét đn thành phn tip theo X[i+1] Trng hp không tìm đc kh nng nào cho X[i]: quay li bc trc đ th kh nng khác cho X[i-1] 6 K thut quay lui Mô hình tng quát ca gii thut quay lui Try(i) For (j {1, 2, …, n j }) Th chn kh nng j cho X[i] If (X[i] cui cùng cu hình) then <thông báo cu hình tìm đc> Else Try(i + 1) <b chn j đ th kh nng khác> Cui If Cui for Cui Try 7 Ni dung 1. K thut quay lui 3. Bài toán 8 hu 4. Bài toán mã đi tun 2. Bài toán lit kê 8 Bài toán lit kê Bài toán 1 Lit kê tt c dãy nh phân có đ dài N bit Ví d Các dãy nh phân có đ dài 3 bit: 000, 001, 010, 011, 100, 101, 110, 111 9 Bài toán lit kê T chc d liu Biu din dãy nh phân N bit di dng mng mt chiu X[0], X[1], …, X[N-1] Phn t ca mng X[i] có tp giá tr {0, 1} 10 Bài toán lit kê Ý tng Th gán cho X[i] ln lt mang các giá tr {0, 1} Vi mi giá tr chn đc cho X[i], th các giá tr có th có cho X[i + 1] Tip tc thc hin cho đn phn t cui cùng X[N – 1], khi đó ta tìm đc mt dãy nh phân cho bài toán [...]... {1, 2, , N} cách k N Ví Cho 5 {1, 2, 3, 4, 5} , các cách ra 3 này là: {123, 124, 1 25, 134, 1 35, 1 45, 234, 2 35, 2 45, 3 45} 14 Phân tích bài toán cách là x 1 < x2 < xk dãy các có (x1x2 < xk N xk-1 xk 1 N => xi N k+i => x1 N 1 k+1 => xi-1 + 1 xi N k+i 15 1 i k (x0 = 0) xk) Dùng k + 1 (X[0], X[1], , X[k]) cách Ý Ban X[0] = 0 X[i] (i {1, , k}), gán giá X[i] Khi cách giá X[i]: X[i-1] + 1 16 giá trong k thì... For (j = Xi-1 + 1; j X[i] = j If (i = k) then X là Else Try(i + 1) If for Try 17 N k + i) cách tìm Cài ngôn void Try(int X[], int N, int k, int i) { for (int j = X[i-1]+1; j Cài ngôn void Try(int X[], int N, int i) { for (int j = 0; j . …, N} Ví d Cho tp gm 5 phn t {1, 2, 3, 4, 5} , các cách chn ra 3 phn t t tp này là: {123, 124, 1 25, 134, 1 35, 1 45, 234, 2 35, 2 45, 3 45} 15 Bài toán lit kê Phân tích. < x 2 < … < x k x k ≤ N x k-1 ≤ x k – 1 ≤ N – 1 => x i ≤ N – k + i => x 1 ≤ N – k + 1 => x i-1 + 1 ≤ x i ≤ N – k + i vi 1 ≤ i ≤ k (x 0 =. cách chn Min giá tr ca X[i]: X[i-1] + 1 ≤ X[i] ≤ N – k + i 17 Bài toán lit kê Gii thut th tc Try ca bài toán Try(i) For (j = X i-1 + 1; j ≤ N – k + i) X[i] = j If