Thuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hayThuật toán BFS, thuật toán cổ điển hay
Trang 1Môn: Trí tuệ nhân tạo Lớp TH2006/01,02
Nguyễn Ngọc Thảo, Võ Đình Phong, Lê Ngọc Thành, Trần Ngọc Trung
Bài tập thực hành 1
Thuật toán BFS
Nội dung
Cài đặt thuật toán tìm kiếm đường đi theo chiều rộng áp dụng trên bài toán đồ thị
Mục tiêu
- Sinh viên nắm được cơ chế vận hành của thuật toán tìm kiếm đường đi theo chiều rộng, áp dụng lên một dạng bài toán tìm kiếm cụ thể là tìm kiếm trên đồ thị
- Sinh viên làm quen và nắm được các thao tác cơ bản trong việc cài đặt thuật toán, bao gồm: tổ chức cấu trúc dữ liệu phục vụ cho việc lưu trữ dữ liệu và xử lý tính toán, triển khai chiến lược cài đặt
Yêu cầu
Cho một bản đồ có N thành phố và các đường đi có thể có giữa các thành phố Giả sử chi phi di chuyển giữa hai thành phố kế cận nhau bất kì đều bằng 1, các đường đi có thể là 2 chiều (A đến được B thì B cũng đến được A), hoặc 1 chiều (chỉ có A đến được B) Cho trước thành phố xuất phát và thành phố đích
Hãy tìm đường đi giữa hai thành phố được chỉ định bằng thuật toán BFS Nếu tồn tại đường đi: xuất ra màn hình thứ tự đường đi Nếu không tồn tại đường đi: thông báo không có đường đi
Định dạng dữ liệu đầu vào:
¾ Dòng 1: Số thành phố trên bản đồ
¾ Dòng 2: Thành phố xuất phát và thành phố đích
¾ N dòng tiếp theo: ma trận kề của đồ thị với quy ước:
9 M[i][j] = 1: có đường nối trực tiếp từ i đến j
9 M[i][j] = 0: không có đường nối trực tiếp từ i đến j Các thành phố được đánh chỉ số từ 0
Thời gian: 1 tuần
Quy định nộp: [không nộp bài]
Trang 2Môn: Trí tuệ nhân tạo Lớp TH2006/01,02
Nguyễn Ngọc Thảo, Võ Đình Phong, Lê Ngọc Thành, Trần Ngọc Trung
Ví dụ
Đường đi ngắn nhất từ 0 tới 5 là: 0 Æ 6 Æ 5
Các vấn đề khác
Vấn đề biểu diễn bài toán: Bài toán tìm kiếm không chỉ giới hạn trong các bài toán tìm kiếm trên đồ thị đơn thuần mà còn xuất hiện ở những vấn đề khác (như bài toán n-puzzle, n-Queens Mỗi bài toán cần có cách biểu diễn trạng thái khác nhau, dẫn đến việc tổ chức cài đặt để lưu trữ trạng thái cũng khác nhau Sinh viên cần nắm tư tưởng tổng quát của bài toán tìm kiếm: tập trạng thái Q, S, G, hàm succs(s) để có thể giải quyết những bài toán tổng quát hơn, chứ không chỉ dừng lại ở cấu trúc ma trận của bài toán đồ thị
Vấn đề cài đặt: Các thuật toán tìm kiếm (có hệ thống) đều có một cấu trúc chung, chính chiến lược lựa chọn trạng thái đã tạo ra các chiến lược tìm kiếm khác nhau
Cụ thể của việc lựa chọn trạng thái chính là việc tổ chức cấu trúc dữ liệu để lưu tập trạng thái đang mở Sinh viên cần quan sát để chọn ra cách lưu trữ trạng thái
mở cho phù hợp với từng chiến lược tìm kiếm khác nhau, ví dụ: sử dụng hàng đợi cho tìm kiếm theo chiều rộng, sử dụng ngăn xếp cho tìm kiếm theo chiều sâu Cài đặt các vấn đề mở rộng từ BFS
- Cài đặt LCBFS để tìm đường đi ngắn nhất giữa 2 trong trường hợp chi phí
di chuyển giữa các thành phố là khác nhau
- Cài đặt DFS để tìm đường đi ngắn nhất giữa 2 thành phố trong trường hợp chi phí di chuyển giữa các thành phố là bằng nhau/khác nhau Bạn có cần cách lưu trữ trạng thái khác so với BFS không?