Thuật toán sinh và quay lui

42 726 0
Thuật toán sinh và quay lui

Đ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 hay về thuật toán sinh và quay lui.

ÔN TẬP KTLT Thuật toán sinh quay lui Dàn Thuật toán sinh tập Thuật toán quay lui tập Bài toán sinh (1) Định nghĩa: Tạo liệu Phương pháp sinh: Từ liệu ban đầu, sinh liệu kết thúc Điều kiện thuật toán sinh: 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) Ví dụ: S1=“1234589”, S2=“1235789” S1 < S2 có vị trí i S1[ i ] < S2[ i ] (2) Có cấu hình cuối (điều kiện kết thúc thuật toán) (3) Có cách để suy cấu hình Áp dụng: giải toán liệt kê 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 Thuật toán sinh tổng quát Generate() { c = InitialConfigure(); //cấu hình ban đầu Process (c); // xử lý cấu hình có if (c=LastConfigure()) Stop=true else stop = false; while (not stop) { //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; Bài toán liệt kê tập tập  Với tập cha phần tử X={ a, b, c, d }, 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 Ví dụ : liệt kê tập  Với tập cha gồm phần tử, có tập b với biểu diễn: bits 0000 0001 0010 0011 0100 0101 0110 0111 p(b) bits 1000 1001 1010 1011 1100 1101 1110 1111 p(b) 10 11 12 13 14 15 Nhận xét 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 Đặt tả thuật toán sinh  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 && bits[i]==1) bits[i ] = 0; bits[i] = 1; Viết chương trình liệt kê p(b) void InitConfigure(char bits[], int n) bits 0123 _ { for (int i=0; i=0 && bits[i]) { bits[i]=0; i ; } bits[i]=1; } int LastConfigure(char bits[], int n) { for (int i=0; i

Ngày đăng: 11/04/2017, 09:22

Từ khóa liên quan

Mục lục

  • ÔN TẬP KTLT 2

  • Dàn bài

  • Bài toán sinh

  • Ví dụ

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

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

  • Ví dụ : liệt kê các tập con....

  • Đặt tả thuật toán sinh

  • Viết chương trình liệt kê

  • Slide 10

  • Cải tiến thuật toán liệt kê các tập con

  • Bài toán tập con k-phần tử : Tìm hiều

  • Bài toán tập con k-phần tử: Đặc tả

  • Thuật toán sinh tập con kế tiếp từ tập con đã có a1 a2 a3 a4 ...ak , chỉ số ở đây đi từ 1

  • Viết chương trình bài toán tập con k- phần tử (1)

  • Slide 16

  • Bài tập

  • Bài toán hoán vị tập n phần tử

  • Thuật toán sinh hoán vị kế tiếp

  • Các hoán vị của X={1,2,3,4}

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

Tài liệu liên quan