1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Phương pháp sinh và thuật toán quay lui

20 423 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 20
Dung lượng 362,27 KB

Nội dung

Chương Phương pháp sinh Thuật toán quay lui Mục tiêu • Giải thích sinh liệu • Biết sử dụng số giải thuật sinh • Biết sử dụng giải thuật quay lui để giải số toán Nội dung • • • • Ôn tập Bài toán tổ hợp Phương pháp sinh Thuật toán quay lui Ôn tập • Hàm đệ quy hàm mà thân hàm lại gọi • Hàm đệ quy hiệu qủa vì: tốn nhớ va gọi hàm qúa nhiều lần Tuy nhiên viết hàm đệ quy ngắn gọn.Tuy nhiên nhiều giải thuật phải dùng kỹ thuật đệ quy việc khử đệ quy không dễ dàng • Vòng lặp stack kỹ thuật giúp khử giải thuật đệ quy 8.1- Bài toán tổ hợp • Có n biến x1, x2, x3, , xn • Mỗi biến xi mang trị thuộc tập hợp Pi  Miền toán tập tích P1 x P2 x P3 x x Pn • Phép gán trị (assignment): Là trị a1, a2, a3, , an Trong a1  ∈ Pi • Một lời giải toán phép gán trị • Một phép gán trị gọi cấu hình Bài toán tổ hợp • Ví dụ: Có nhân viên bảo vệ làm ca sáng, chiều tối Trong ca có bảo vệ Hỏi cách bố trí bảo vệ? • Mã hóa toán: {x, y, z} tập biến có thứ tự mô tả cho ca :sáng, chiều, tối theo thứ tự Miền trị biến { a,b,c } mô tả cho bảo vệ Các phép gán x y z a b c a c b b a c b c a c a b c b a Số lời giải số hoán vị tập hợp phần tử này: 3*2*1 = 3! = Bài toán liệt kê hoán vị tập hợp n phần tử có thứ tự có độ phức tạp n! Bài toán tổ hợp • Ví dụ: Tìm số chuỗi có độ dài ký tự xyz với x ∈ { a,b,c}, y ∈ { d,e}, z ∈ { m,n,t} • Nhận xét: biến có miền trị khác x a a a a a a b b b b b b c c c c c c y d d d e e e d d d e e e d d d e e e z m n t m n t m n t m n t m n t m n t Số phép gán: * * = 18 Tích số phần tử miền trị Độ phức tạp: nm với n: số phần tử trung bình miền trị, m: số miền trị Bài toán tổ hợp Bài toán tổ hợp có độ phức tạp n! nm Làm tạo phép gán trị ? Phương pháp sinh 8.2- Phương pháp sinh (Generating) 8.2.1- Định nghĩa • Sinh: Tạo liệu • Phương pháp sinh: Từ liệu ban đầu, sinh liệu kết thúc • Dùng để giải toán liệt kê lý thuyết tổ hợp • Điều kiện thuật toán sinh: (1) Có thể xác định thứ tự tập cấu hình tổ hợp (thứ tự phép gán trị, thường dùng thứ tự từ điển) (2)Có cấu hình cuối (điều kiện kết thúc giải thuật) (3) Có cách để suy cấu hình 10 Thứ tự từ điển • S1=“1234589” • S2=“1235789” • S1 < S2 có vị trí i S1[ i ] < S2[ i ] 11 8.2.2- Một ví dụ Bài toán:Tìm số chuỗi có độ dài ký tự xyz với x ∈ { a,b,c}, y ∈ { d,e}, z ∈ { m,n,t} Cấu hình ban đầu: trị miền trị Cách sinh:Lấy trị kết tiếp miền trị theo chế vòng tròn Cấu hình cuối: trị cuối miền trị x a a a a a a b b b b b b c c c c c c y d d d e e e d d d e e e d d d e e e z m n t m n t m n t m n t m n t m n t Dùng thứ tự từ điển để so sánh phép gán trị Ví dụ: adm < adn 12 8.2.3- Thuật toán sinh tổng quát Procedure Generate Begin c = InitialConfigure; //cấu hình ban đầu Process (c); // xử lý cấu hình có if c=LastConfigure then Stop:=true else stop := false; while (not stop) Begin //Sinh cấu hình từ cấu hình có c=getNextConfigure(c); Process (c); // xử lý cấu hình if c= LastConfigure then stop = true; End; End; 13 8.2.4- Bài toán chuỗi ký tự 14 Bài toán chuỗi ký tự 15 Bài toán chuỗi ký tự Bài toán:Tìm số chuỗi có độ dài ký tự xyz với x ∈ { a,b,c}, y ∈ { d,e}, z ∈ { m,n,t} 16 8.2.5- Bài toán liệt kê tập tập gồm n phần tử • Mã hóa tập biến: Tập biến gồm n biến ký tự theo th ứ t ự phần tử  mảng n ký tự • Miền trị biến {‘0’, ‘1’} ‘0’ mô tả cho tình phần tử tập con, ‘1’: mô tả cho tình phần tử có mặt tập • Với tập cha phần tử X={ a, b, c, d }, có th ể dùng mảng “0111” mô tả cho tập { b,c,d }  Mỗi tập biểu diễn chuỗi (xâu) nhị phân • Trạng thái khởi tạo: “0000” mang ý nghĩa tập tr ống • Trạng thái kết thúc: “1111” mang ý nghĩa tập cha 17 Bài toán liệt kê tập • Với tập cha gồm phần tử, có 24 tập b với biểu diễn: vars 0000 0001 0010 0011 0100 0101 0110 0111 p(b) vars 1000 1001 1010 1011 1100 1101 1110 1111 p(b) 10 11 12 13 14 15 Với thứ tự từ điển, tập sau lớn tập trước đơn vị theo cách tính chuỗi nhị phân 18 Bài toán liệt kê tập • Cách cộng thêm vào chuỗi nhị phân: 0000 0001 0001 0010 0011 0100 0111 1000 • Gọi i : vị trí bit từ bên phải • Cho bit bên phải vị trí i thành •Cho bit i mang trị i= n-1; while (i>=0 && vars[i]==‘1’) vars[i ] = ‘0’; vars[i] = ‘1’; 19 Bài toán liệt kê tập 20 [...]... 8.2.3- Thuật toán sinh tổng quát Procedure Generate Begin c = InitialConfigure; //cấu hình ban đầu Process (c); // xử lý cấu hình đang có if c=LastConfigure then Stop:=true else stop := false; while (not stop) do Begin / /Sinh cấu hình kế tiếp từ cấu hình đang có c=getNextConfigure(c); Process (c); // xử lý cấu hình này if c= LastConfigure then stop = true; End; End; 13 8.2.4- Bài toán chuỗi 3 ký tự 14 Bài. .. c=getNextConfigure(c); Process (c); // xử lý cấu hình này if c= LastConfigure then stop = true; End; End; 13 8.2.4- Bài toán chuỗi 3 ký tự 14 Bài toán chuỗi 3 ký tự 15 Bài toán chuỗi 3 ký tự Bài toán: Tìm số chuỗi có độ dài 3 ký tự xyz với x ∈ { a,b,c}, y ∈ { d,e}, z ∈ { m,n,t} 16 8.2.5- Bài toán liệt kê các tập con của 1 tập gồm n phần tử • Mã hóa tập biến: Tập biến gồm n biến ký tự theo th ứ t ự các phần tử  mảng... là tập cha 17 Bài toán liệt kê các tập con • Với tập cha gồm 4 phần tử, có 24 tập con b với các biểu diễn: vars 0000 0001 0010 0011 0100 0101 0110 0111 p(b) 0 1 2 3 4 5 6 7 vars 1000 1001 1010 1011 1100 1101 1110 1111 p(b) 8 9 10 11 12 13 14 15 Với thứ tự từ điển, tập con sau lớn hơn tập con trước 1 đơn vị theo cách tính chuỗi nhị phân 18 Bài toán liệt kê các tập con • Cách cộng thêm 1 vào chuỗi nhị...Thứ tự từ điển • S1=“1234589” • S2=“1235789” • S1 < S2 nếu có 1 vị trí i tại đó S1[ i ] < S2[ i ] 11 8.2.2- Một ví dụ Bài toán: Tìm số chuỗi có độ dài 3 ký tự xyz với x ∈ { a,b,c}, y ∈ { d,e}, z ∈ { m,n,t} Cấu hình ban đầu: trị đầu tiên của mỗi miền trị Cách sinh: Lấy trị kết tiếp của mỗi miền trị theo cơ chế vòng tròn Cấu hình cuối: trị cuối cùng của mỗi miền trị x a a a a a a b b b b b... 0011 0100 0111 1000 • Gọi i : vị trí bit 0 đầu tiên từ bên phải • Cho các bit 1 bên phải vị trí i thành 0 •Cho bit i mang trị 1 i= n-1; while (i>=0 && vars[i]==‘1’) vars[i ] = ‘0’; vars[i] = ‘1’; 19 Bài toán liệt kê các tập con 20 ... Giải thích sinh liệu • Biết sử dụng số giải thuật sinh • Biết sử dụng giải thuật quay lui để giải số toán Nội dung • • • • Ôn tập Bài toán tổ hợp Phương pháp sinh Thuật toán quay lui Ôn tập •... miền trị Bài toán tổ hợp Bài toán tổ hợp có độ phức tạp n! nm Làm tạo phép gán trị ? Phương pháp sinh 8.2- Phương pháp sinh (Generating) 8.2.1- Định nghĩa • Sinh: Tạo liệu • Phương pháp sinh: Từ... quy ngắn gọn.Tuy nhiên nhiều giải thuật phải dùng kỹ thuật đệ quy việc khử đệ quy không dễ dàng • Vòng lặp stack kỹ thuật giúp khử giải thuật đệ quy 8.1- Bài toán tổ hợp • Có n biến x1, x2, x3,

Ngày đăng: 04/11/2015, 15:42

TỪ KHÓA LIÊN QUAN

w