phương pháp sinh và thuật toán quay lùi

68 1.4K 0
phương pháp sinh và thuật toán quay lùi

Đ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

Chương 8 Phương pháp sinh và Thuật toán quay lui. 2 Mục tiêu • Giải thích được sinh dữ liệu là gì. • Biết sử dụng một số giải thuật sinh. • Biết sử dụng giải thuật quay lui để giải một số bài toán. 3 Nội dung • Ôn tập • Bài toán tổ hợp • Phương pháp sinh • Thuật toán quay lui 4 Ôn tập • Hàm đệ quy là hàm mà trong thân hàm lại gọi chính nó. • Hàm đệ quy kém hiệu qủa vì: tốn bộ nhớ va gọi hàm qúa nhiều lần. Tuy nhiên viết hàm đệ quy rất ngắn gọn.Tuy nhiên nhiều giải thuật vẫn phải dùng kỹ thuật đệ quy vì việc khử đệ quy không dễ dàng. • Vòng lặp và stack là những kỹ thuật giúp khử giải thuật đệ quy. 5 8.1- Bài toán tổ hợp • Có n biến x 1 , x 2 , x 3 , , x n • Mỗi biến x i có thể mang trị thuộc về 1 tập hợp P i  Miền của bài toán là tập tích P 1 x P 2 x P 3 x x P n • Phép gán trị (assignment): Là một bộ trị a 1 , a 2 , a 3 , , a n Trong đó a 1  a i ∈ P i • Một lời giải của bài toán là 1 phép gán trị. • Một phép gán trị được gọi là một cấu hình. 6 Bài toán tổ hợp • Ví dụ: Có 3 nhân viên bảo vệ làm 3 ca sáng, chiều tối. Trong 1 ca chỉ có 1 bảo vệ. Hỏi các cách bố trí các bảo vệ? • Mã hóa bài toán: {x, y, z} là tập biến có thứ tự mô tả cho 3 ca :sáng, chiều, tối theo thứ tự. Miền trị của 3 biến là { a,b,c } mô tả cho 3 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 là số hoán vị của tập hợp 3 phần tử này: 3*2*1 = 3! = 6. Bài toán liệt kê các hoán vị của một tập hợp n phần tử có thứ tự có độ phức tạp n! 7 Bài toán tổ hợp • Ví dụ: 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} • Nhận xét: 3 biến có 3 miền trị khác nhau x y z a d m a d n a d t a e m a e n a e t b d m b d n b d t b e m b e n b e t c d m c d n c d t c e m c e n c e t Số phép gán: 3 * 2 * 3 = 18 Tích của các số phần tử của các miền trị Độ phức tạp: n m với n: số phần tử trung bình của mỗi miền trị, m: là số miền trị 8 Bài toán tổ hợp Bài toán tổ hợp có độ phức tạp là n! hoặc n m Làm thế nào tạo ra các phép gán trị ? Phương pháp sinh. 9 8.2- Phương pháp sinh (Generating) 10 8.2.1- Định nghĩa • Sinh: Tạo ra dữ liệu. • Phương pháp sinh: Từ dữ liệu ban đầu, sinh ra dữ liệu kế tiếp cho đến khi kết thúc. • Dùng để giải quyết bài toán liệt kê của lý thuyết tổ hợp. • Điều kiện của thuật toán sinh: (1) Có thể xác định 1 thứ tự tập các cấu hình của tổ hợp (thứ tự của các phép gán trị, thường dùng thứ tự từ điển). (2)Có một cấu hình cuối (điều kiện kết thúc của giải thuật). (3) Có một cách để suy ra được cấu hình kế tiếp. [...]... ‘0’; vars[i] = ‘1’; 19 Bài toán liệt kê các tập con 20 Bài toán liệt kê các tập con Thêm dòng: Stop = LastConfigure(vars,n); Thêm dòng: delete[ ] vars; 21 Bài toán liệt kê các tập con 22 Bài toán liệt kê các tập con • Nhận xét: Có thể tối ưu lại chương trình để bớt đi các vòng lặp 23 Bài toán liệt kê các tập con Kết hợp việc tìm cấu hình kế với việc kiểm tra ngưng lặp 24 Bài toán liệt kê các tập con... 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 đ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... trị ở cuối tập cha theo thứ tự Bài toán tập con k-phần tử 31 Bài toán tập con k-phần tử Thêm dòng: delete[ ] result; 32 Bài tập • Tạo tập tin văn bản có tên Tapcon.in chứa nội dung : 10 4 • Ý nghĩa: số đầu: số phần tử của tập, số kế tiếp là số phần tử của tập con • Dùng kỹ thuật sinh, viết chương trình ghi các tập con của tập này lên file Tapcon.out 33 8.2.7-Bài toán hoán vị tập n phần tử • Permutation... 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 n... [a,b] • 26 8.2.6- Bài toán tập con k-phần tử • Liệt kê các tập con k phần tử của tập n phần tử • Ví dụ: Các tập con 3 phần tử của tập { 1,2,3,4,5 } là: C53 = 5!/ (3! * (5-3)!) { 1,2,3 } { 2,3,4 } = 5! / (3! * 2!) { 1,2,4 } { 2,3,5 } = 4*5/2 = 10 { 1,2,5 } { 2,4,5 } { 1,3,4 } { 3,4,5 } { 1,3,5 } Tổ hợp n chập k { 1,4,5 } 27 Bài toán tập con k-phần tử • Ánh xạ tập hợp bất kỳ n phần tử vào tập X={ 1,2 n }... 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ị phân:... vào tập X={ 1,2 n } • Một tập con k phần tử của X là một bộ có thứ tự a1 a2 a3 ak với 1≤ a1< a2 < a3 < < ak ≤ n 28 Bài toán tập con k-phần tử • Tập con đầu: { 1,2,3, ,k } Ví dụ { 1,2,3 } với k=3, n=5 • Tập con cuối:{ (n-k+1), (n-k+2) , , n } Ví dụ: { 3,4,5 } với k=3, n=5 29 Cách sinh tập con kế tiếp từ tập con đã có a1 a2 a3 a4 ak , chỉ số ở đây đi từ 1 (1) Tìm vị trí đầu tiên từ bên phải 1 vị trí...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 b... {4,3,2,1} a[j], a[k] {3,4,2,1} {4,1,2,3} {4,1,2,3} Đảo mảng {4,1,3,2} con từ {4,2,1,3} a[j+1] đến a[n] {4,2,3,1} {4,3,1,2} chỉ số đi từ 1 {4,3,2,1} ( cuối) 35 Giải thuật tìm hoán vị kế tiếp • trạng thái trước {1,3,4,2} trạng thái sau: {1,4,2,3} Giải thuật • Tìm chỉ số lớn nhất j mà aja[j+1]) j ; • Tìm vị trí đầu tiên k . 8 Phương pháp sinh và Thuật toán quay lui. 2 Mục tiêu • Giải thích được sinh dữ liệu là gì. • Biết sử dụng một số giải thuật sinh. • Biết sử dụng giải thuật quay lui để giải một số bài toán. 3 Nội. trị 8 Bài toán tổ hợp Bài toán tổ hợp có độ phức tạp là n! hoặc n m Làm thế nào tạo ra các phép gán trị ? Phương pháp sinh. 9 8.2- Phương pháp sinh (Generating) 10 8.2.1- Định nghĩa • Sinh: . dữ liệu. • Phương pháp sinh: Từ dữ liệu ban đầu, sinh ra dữ liệu kế tiếp cho đến khi kết thúc. • Dùng để giải quyết bài toán liệt kê của lý thuyết tổ hợp. • Điều kiện của thuật toán sinh: (1)

Ngày đăng: 05/07/2014, 23:20

Từ khóa liên quan

Mục lục

  • Chương 8 Phương pháp sinh và Thuật toán quay lui.

  • Mục tiêu

  • Nội dung

  • Ôn tập

  • 8.1- Bài toán tổ hợp

  • Bài toán tổ hợp

  • Slide 7

  • Slide 8

  • 8.2- Phương pháp sinh (Generating)

  • 8.2.1- Định nghĩa

  • Thứ tự từ điển

  • 8.2.2- Một ví dụ

  • 8.2.3- Thuật toán sinh tổng quát.

  • 8.2.4- Bài toán chuỗi 3 ký tự

  • Bài toán chuỗi 3 ký tự...

  • Slide 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ử

  • Bài toán liệt kê các tập con....

  • Slide 19

  • Slide 20

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

Tài liệu liên quan