1. Trang chủ
  2. » Giáo án - Bài giảng

Thuật toán sinh và quay lui

42 726 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 42
Dung lượng 282,5 KB

Nội dung

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

w