Professional Documents
Culture Documents
2. Mục tiêu
• Sinh viên hiểu và có thể cài đặt được cấu trúc một hàng đợi ưu tiên đơn giản đồng thời có thể nắm
được một số vấn đề liên quan đến việc sử dụng cấu trúc này vào trong việc cài đặt thuật toán tìm kiếm
trên đồ thị có chi phí.
• Sinh viên nắm được cơ chế vận hành của thuật toán tìm kiếm đường đi chi phí đồng nhất, á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 chọn cách lưu trữ dữ liệu và triển khai cài đặt phù hợp khi chuyển từ bài toán đồ thị không trọng
số sang đồ thị có trọng số.
4. Yêu cầu
a. Chương trình
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ố.Chi phi di chuyển giữa hai thành phố
kế cận nhau là w (w > 0), 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.
08CK5 Page 1
HDTH Môn: Trí tuệ nhân tạo
Hãy tìm đường đi giữa hai thành phố được chỉ định bằng thuật toán UCS. Nếu tồn tại đường đi: xuất ra màn hình
thứ tự đường đi và chi phí của đường đi này. Nếu không tồn tại đường đi: thông báo không có đường đi.
b. Báo cáo
Sinh viên viết báo cáo có ghi đủ các thông tin sau:
Vấn đề đặt ra ở đây là: Tổ chức cấu trúc dữ liệu lưu trữ hàng đợi bằng gì?
• Một lựa chọn đơn giản đối với cài đặt hàng đợi ưu tiên là sử dụng một mảng với cách duyệt tuần tự. Với
lựa chọn này, thao tác chủ yếu đối với hàng đợi là thao tác tìm kiếm phần tử có độ ưu tiên thấp nhất
trong mảng và có độ phức tạp trung bình là O(n) với n là kích thước trung bình của hàng đợi. Các thao tác
thêm và lấy phần tử ra khỏi hàng đợi chỉ đơn giản chèn một phần tử vào cuối mảng và hoán vị phần tử có
độ ưu tiên thấp nhất ra cuối mảng đồng thời giảm kích thước mảng.
• Hoặc ta có thể sử dụng cấu trúc Heap để tăng hiệu quả trong các thao tác. Có một điểm lưu ý đối với
heap là trong heap, ta không thể tìm kiếm nhanh một phần tử đã có hay chưa (dĩ nhiên có thể tìm tuần tự
nhưng như thế thì không còn đúng với tính chất của heap) và nếu có tìm thấy thì cũng không thể thực hiện
thao tác cập nhật khi cần (tại sao?). Giải pháp của sinh viên trong tình huống này là gì?
08CK5 Page 2
HDTH Môn: Trí tuệ nhân tạo
Ngoài ra, để tìm ra phần tử nhỏ nhất, cần tìm kiếm trên hàng đợi hay sắp xếp lại hàng đợi mỗi khi có thao tác
vào/ra? Nếu tìm kiếm thì tìm kiếm tuyến tính, hay dùng bảng băm? Nếu sắp xếp thì sắp xếp như thế nào để chi phí
lấy ra hoặc đưa phần tử mới vào không quá lớn? Khi thêm một trạng thái đã có trong hàng đợi ưu tiên và trạng
thái mới thêm vào có độ ưu tiên thấp hơn, ta phải làm gì? Khi thêm một trạng thái đã có trong hàng đợi ưu tiên và
trạng thái mới thêm vào có độ ưu tiên cao hơn, ta phải làm gì?
08CK5 Page 3