1. Trang chủ
  2. » Tất cả

Chuong 2. Duyet_Dequi

100 2 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 100
Dung lượng 8,62 MB

Nội dung

CHƯƠNG DUYỆT VÀ ĐỆ QUI NỘI DUNG: 2.1 Thuật toán duyệt 2.2 Thuật toán sinh 2.3 Thuật toán đệ qui 2.4 Thuật toán quay lui 2.5 Thuật toán tham lam 2.6 Thuật toán chi để trị 2.7 Thuật toán qui hoạch động 2.8 Thuật tốn tìm kiếm mẫu 2.9 Thuật toán nhánh cận 2.9 CASE STUDY: 2.1 Thuật toán duyệt tồn Phương pháp giải tốn (Problem): Sử dụng cơng cụ tốn học: • Sử dụng định lý, mệnh đề, lập luận suy logic tốn học để tìm nghiệm tốn • Ưu điểm:dễ dàng máy tính hóa tốn có thuật giải (MathLab) • Nhược điểm: thực lớp tốn có thuật giải Lớp toán nhỏ so với lớp tốn thực tế Sử dụng máy tính cơng cụ tính tốn: • Giải tốn có thuật giải máy tính • Đối với số tốn chưa có thuật giải, ta sử dụng máy tính để xem xét tất khả để từ đưa nghiệm toán Một thuật toán duyệt cần thỏa mãn hai điều kiện: • Khơng lặp lại khả • Khơng bỏ sót cấu hình Ví dụ Cho hình vng gồm 25 hình vng đơn vị Hãy điền số từ đến vào hình vuông đơn vị cho điều kiện sau thỏa mãn • Đọc từ trái sang phải theo hàng ta nhận số nguyên tố có chữ số; • Đọc từ xuống theo cột ta nhận số nguyên tố có chữ số; • Đọc theo hai đường chéo ta nhận số ngun tố có chữ số; • Tổng chữ số số nguyên tố S cho trước Ví dụ hình vng với S = 11 1 0 3 3 1 3 Thuật giải duyệt Chia toán thành hai toán sau: •Tìm X ={ x[10001, ,99999] | x ngun tố tổng chữ số S •Chiến lược vét cạn thực sau: • Lấy xX đặt vào hàng 1(H1): ta điền ô vuông 1, 2, 3, 4, •Lấy xX có số trùng với ô số đặt vào cột (C1): ta điền vng 6, 7, 8, •Lấy xX có số trùng với số 9, số cuối trùng với ô số đặt vào đường chéo (D2): ta điền vng 10, 11, 12 •Lấy xX có số thứ số thứ trùng với ô số 12 đặt vào hàng (H2): ta điền ô vuông 13, 14, 15 •Lấy xX có số thứ nhất, thứ hai, thứ trùng với ô số 2, 13, 10 đặt vào cột (C2): ta điền ô vuông 16, 17 •Làm tương tự ta điền vào hàng số 25 •Cuối ta cần kiểm tra D1X C5 X? 1 0 3 3 1 3 3 13 14 12 15 16 11 18 19 10 20 22 23 17 21 24 25 2.2 Thuật toán sinh (Generation) Thuật toán sinh dùng để giải lớp tốn thỏa mãn hai điều kiện: •Xác định thứ tự tập cấu hình cần liệt kê tốn Biết cấu hình đầu tiên, biết cấu hình cuối •Từ cấu hình cuối cùng, ta xây dựng thuật toán sinh cấu hình đứng sau theo thứ tự Thuật toán: Thuật toán Generation: Bước1 (Khởi tạo): ; Bước (Bước lặp): while () ; ; endwhile; End Ví dụ Duyệt xâu nhị phân có độ dài n Lời giải Xâu X = (x1, x2, , xn) : xi =0, 1; i=1, 2, , n gọi xâu nhị phân có độ dài n Ví dụ với n=4, ta có 16 xâu nhị phân đây: STT X =(x1, , xn) F(X) ST T X =(x1, , xn) F(X) 0000 1000 0001 10 1001 0010 11 1010 10 0011 12 1011 11 0100 13 1100 12 0101 14 1101 13 0110 15 1110 14 0111 16 1111 15 Thuật toán sinh xâu nhị phân kế tiếp; Input: + X =(x1,x2, ,xn) biến toàn cục + OK = biến toàn cục Output: 2n xâu nhị phân có độ dài n Void Next_Bit_String(void) { int i=n; while (i>0 && X[i]!=0) { X[i] = 0; i ; } if (i >0) X[i]=1; else OK = 0; } Acttions: X =(0,0, ,0);// Xâu nhị phân ban đầu while (OK) { //Lặp xâu chưa phải cuối Result(); //Đưa xâu tại>; Next_Bit_String();//Sinh xâu } Endactions Bài tập Hãy cho biết kết thực chương trình đây? #include #include #define MAX 100 #define TRUE #define FALSE int n, X[MAX], OK=TRUE, dem=0; void Init (void ){ coutn; for (int i=1; i

Ngày đăng: 21/05/2017, 14:47