Danh mục tài liệu

THIẾT KẾ GIẢI THUẬT

Số trang: 29      Loại file: pdf      Dung lượng: 533.72 KB      Lượt xem: 30      Lượt tải: 0    
Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Nội dung của chương này trình bày hai chiến lược thiết kế thuật giải thông dụng là vét cạn và tham lam. Nội dung của chương, ngoài phần trình bày về các phương pháp còn có những ví dụ cụ thể, cả thuật giải và cài đặt, để người đọc có một cái nhìn chi tiết về việc từ thuật toán đến chương trình.
Nội dung trích xuất từ tài liệu:
THIẾT KẾ GIẢI THUẬT THIẾT KẾ GIẢI THUẬT Nội dung của chương này trình bày hai chiến lược thiết kế thuật giải thông dụng là vét cạn và tham lam. Nội dung của chương, ngoài phần trình bày về các phương pháp còn có những ví dụ cụ thể, cả thuật giải và cài đặt, để người đọc có một cái nhìn chi tiết về việc từ thuật toán đến chương trình. 1. Vét cạn (Exhausted search) Vét cạn, duyệt, quay lui… là một số tên gọi tuy không đồng nghĩa nhưng cùng chỉ một phương pháp rất đơn giản trong tin học: tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có thể. Đối với con người phương pháp này thường là không khả thi vì số phương án cần kiểm tra quá lớn. Tuy nhiên đối với máy tính, nhờ tốc độ xử lí nhanh, máy tính có thể giải rất nhiều bài toán bằng phương pháp vét cạn. Ưu điểm lớn nhất của phương pháp vét cạn là luôn đảm bảo tìm ra nghiệm chính xác. Ngoài ra phương pháp vét cạn còn có một số ưu điểm so với các phương pháp khác là đòi hỏi rất ít bộ nhớ và cài đặt đơn giản. Hạn chế duy nhất của phương pháp này là thời gian thực thi rất lớn, độ phức tạp thường ở bậc mũ. Do đó vét cạn thường chỉ áp dụng tốt với các bài toán có kích thước nhỏ. 1.1. Bài toán tìm cấu hình tổ hợp Thường những bài toán trong Tin học có yêu cầu dạng: tìm các đối tượng x thoả mãn những điều kiện nhất định trong một tập S các đối tượng cho trước. Bài toán tìm cấu hình tổ hợp là bài toán yêu cầu tìm các đối tượng x có dạng là một vector thoả mãn các điều kiện sau: 1. Đối tượng x gồm n phần tử: x = (x1,x2,…xn). 2. Mỗi phần tử xi có thể nhận một trong các giá trị rời rạc a1, a2, … am. 3. x thoả mãn các ràng buộc có thể cho bởi hàm logic G(x). Tuỳ từng trường hợp mà bài toán có thể yêu cầu: tìm một nghiệm, tìm tất cả nghiệm hoặc đếm số nghiệm. Trước hết chúng ta nhắc lại một số cấu hình tổ hợp cơ bản. a) Tổ hợp Một tổ hợp chập k của n là một tập con k phần tử của tập n phần tử. Chẳng hạn tập {1,2,3,4} có các tổ hợp chập 2 là: {1,2}, {1,3, {1,4, {2,3}, {2,4}, {3,4}. Vì trong tập hợp các phần tử không phân biệt thứ tự nên tập {1,2} cũng là tập {2,1} và do đó, ta coi chúng chỉ là một tổ hợp. Bài toán đặt ra cho chúng ta là hãy xác định tất cả các tổ hợp châp k của tập n phần tử. Để đơn giản ta chỉ xét bài toán tìm các tổ hợp của tập các số nguyên từ 1 đến n. Đối với một tập hữu hạn bất kì, bằng cách đánh số thứ tự của các phần tử, ta cũng đưa được về bài toán đối với tập các số nguyên từ 1 đến n. Nghiệm cần tìm của bài toán tìm các tổ hợp chập k của n phần tử phải thoả mãn các điều kiện sau: 1. Là một vector x =(x1,x2,…xk) 2. xi lấy giá trị trong tập {1,2,…n} 3. Ràng buộc: xi Chẳng hạn có n người, một cách chọn ra k người để xếp thành một hàng là một chỉnh hợp không lặp chập k của n. Một trường hợp đặc biệt của chỉnh hợp không lặp là hoán vị. Hoán vị của một tập n phần tử là một chỉnh hợp không lặp chập n. Nói một cách trực quan thì hoán vị của tập n phần tử là phép thay đổi vị trí của các phần tử (do đó mới gọi là hoán vị). Nghiệm của bài toán tìm các chỉnh hợp không lặp chập k của tập n số nguyên từ 1 đến n là các vector x thoả mãn các điều kiện: 1. x có k thành phần: x = (x1,x2,…xk) 2. Các giá trị xi lấy trong tập {1,2,..n} 3. Ràng buộc: các giá trị xi đôi một khác nhau, tức là xi≠xj với mọi i≠j. Đó là một số bài toán tìm cấu hình tổ hợp cơ bản. Chúng ta sẽ xem xét một số bài toán khác để thấy tính phổ biến của lớp các bài toán dạng này. d) Bài toán xếp hậu Cho bàn cờ vua nxn. Hãy xếp n con hậu lên bàn cờ sao cho không con nào khống chế con nào. Hai 2 con hậu khống chế nhau nếu chúng ở trên cùng một hàng, một cột hoặc một đường chéo. Chẳng hạn ta có một cách đặt sau, các ô đen là các vị trí đặt hậu: Để chuyển bài toán này về dạng chuẩn của bài toán tìm cấu hình tổ hợp, ta có có nhận xét: mỗi con hậu phải ở trên một hàng và một cột. Do đó ta coi con hậu thứ i ở hàng i và nếu biết x[i] là cột đặt con hậu thứ i thì ta suy ra được lời giải. Vậy nghiệm của bài toán có thể coi là một vector x gồm n thành phần với ý nghĩa: 1. Con hậu thứ i được đặt ở hàng i và cột x[i]. 2. x[i] lấy giá trị trong tập {1,2…n} 3. Ràng buộc: các giá trị x[i] khác nhau từng đôi một và không có 2 con hậu ở trên cùng một đường chéo. Trong phần cài đặt, chúng ta sẽ phân tích chi tiết về các ràng buộc trên. e) Bài toán từ đẹp (xâu ABC) Một từ đẹp là một xâu độ dài n chỉ gồm các kí tự A,B,C mà không có 2 xâu con liên tiếp nào giống nhau. Chẳng hạn ABAC là một từ đẹp độ dài 4, BABCA là một từ đẹp độ dài 5. Bài toán tìm tất cả các từ đẹp độ dài n cho trước yêu cầu tìm nghiệm là các vector x có n thành phần: 1. xi nhận giá trị trong tập {A,B,C} 2. x không có 2 đoạn con liên tiếp nào bằng nhau. Trước khi trình bày về phương pháp vét cạn giải các bài toán tìm cấu hình tổ hợp, chúng ta xem xét các bài toán tối ưu tổ hợp, vì các bài toán tối ưu tổ hợp thực chất là sự mở rộng của bài toán tìm cấu hình tổ hợp. 1.2. Bài toán tối ưu tổ hợp Bài toán tối ưu tổng quát có thể phát biểu như sau: Cho tập B khác rỗng và một hàm f:B→R gọi là hàm mục tiêu. Cần tìm phần tử x thuộc B sao cho f(x) đạt giá trị nhỏ nhất hoặc lớn nhất. Phần tử x là nghiệm của bài toán còn được gọi là phương án tối ưu. Bài toán tối ưu tổ hợp là bài toán tìm phương án tối ưu trên tập các cấu hình tổ hợp. Nghiệm của bài toán cũng là một vector x gồm n thành phần sao cho: 1. x = (x1,x2,…xn) 2. xi lấy giá trị trong tập {a1,a2,…am} 3. x thoả mãn các ràng buộc cho bởi hàm G(x). 4. f(x) → min/max. Chúng ta sẽ phân tích một số bài toán tối ưu tổ hợp điển hình. Phần lớn đều là các bài toán NPC. a) Bài toán xếp balô Có một balô có tải trọng m và n đồ vật, đồ vật i có trọng lượng wi và có giá trị vi. Hãy lựa chọn các vật để cho vào balô sao cho tổng trọng lượng của chúng không quá M và tổng giá trị của chúng là lớn nhất. Mỗi cách chọn các đồ vật cho ...