Professional Documents
Culture Documents
Thuật toán A* (A-star) là một thuật toán tìm kiếm đường đi trong đồ thị, thường được sử
dụng để tìm đường đi ngắn nhất từ một điểm bắt đầu đến một điểm đích trên bản đồ.
Thuật toán A* sử dụng hai loại thông tin để đánh giá chi phí của mỗi nút trên đồ thị:
- g(n): Là chi phí từ điểm bắt đầu đến nút n.
- h(n): Là ước lượng chi phí còn lại để đến được điểm đích từ nút n, được tính bằng
hàm heuristics.
Tổng chi phí để đi từ điểm bắt đầu đến điểm đích thông qua nút n được đánh giá bởi hàm
F(n) = g(n) + h(n).
Thuật toán A* sử dụng một cấu trúc dữ liệu hàng đợi ưu tiên (priority queue) để lưu trữ các
nút cần duyệt. Các nút được sắp xếp trong hàng đợi theo thứ tự tăng dần của giá trị F(n).
Nút có giá trị F(n) thấp hơn được xem là ưu tiên hơn.
Các bước của thuật toán A* như sau:
- Khởi tạo hàng đợi ưu tiên và thêm điểm bắt đầu vào hàng đợi. Đặt g(bắt đầu) = 0 (chi
phí từ điểm bắt đầu đến chính nó là 0).
- Lặp lại các bước sau cho đến khi hàng đợi ưu tiên rỗng hoặc đạt được điểm đích:
a. Lấy nút có giá trị F(n) thấp nhất từ hàng đợi ưu tiên.
b. Nếu nút đó là nút đích, kết thúc thuật toán và trả về đường đi từ điểm bắt đầu đến
điểm đích.
c. Đánh dấu nút đó là đã duyệt.
d. Duyệt qua các nút kề của nút hiện tại.
e. Với mỗi nút kề, tính toán giá trị F(n) và đặt g(kề) = g(hiện tại) + chi phí từ nút hiện tại
đến nút kề.
f. Nếu nút kề chưa được duyệt hoặc chi phí tới nút kề thông qua nút hiện tại nhỏ hơn chi
phí hiện tại của nút kề, cập nhật giá trị F(n) và đặt nút kề vào hàng đợi ưu tiên.
e. Với mỗi nút kề, tính toán giá trị F(n) và đặt g(kề) = g(hiện tại) + chi phí từ nút hiện tại
đến nút kề.
- Nếu không tìm thấy đường đi đến điểm đích, thuật toán trả về kết quả là không tìm thấy
đường đi.
2. So sánh thuật toán A* với thuật toán tìm kiếm tốt nhất đầu tiên?
- Cả hai thuật toán đều là các thuật toán tìm kiếm đường đi trong đồ thị
Thuật toán A* Thuật toán tìm kiếm tốt nhất đầu
tiên
Hàm heuristics + hàm heuristics được sử dụng để hàm heuristics được sử dụng để xác
ước lượng chi phí còn lại để đến được định đường đi tiếp theo mà không
đích. có đánh giá chi phí còn lại.
Chi phí + đánh giá chi phí thực tế từ điểm bắt + đánh giá chi phí từ nút hiện tại
đầu đến nút hiện tại và chi phí ước đến đích.
lượng từ nút hiện tại đến đích
Độ phức tạp + có độ phức tạp cao hơn do sử dụng + có độ phức tạp ít hơn
hàm heuristics phức tạp hơn. Tuy
nhiên, nếu hàm heuristics được thiết
kế tốt, thì thuật toán A* sẽ tìm đường
đi ngắn nhất nhanh hơn so với thuật
toán tìm kiếm tốt nhất đầu tiên.
Tính toán + cần tính toán giá trị F(n) cho mỗi + chỉ cần tính toán giá trị h(n) cho
nút trên đồ thị nên yêu cầu nhiều tài mỗi nút nên yêu cầu ít tài nguyên
nguyên tính toán tính toán
Hàm heuristics + để ước lượng khoảng cách còn lại + không sử dụng hàm heuristic để
từ trạng thái hiện tại đến trạng thái đánh giá nút
đích
Chi phí + sử dụng một bảng băm để lưu trữ + chỉ lưu trữ các nút trên cây tìm
các trạng thái đã duyệt qua. Việc lưu kiếm
trữ này đòi hỏi nhiều bộ nhớ
Độ phức tạp + đảm bảo tìm kiếm đường đi tối ưu, + tìm kiếm một lời giải tối ưu với
tuy nhiên sử dụng nhiều bộ nhớ hơn bộ nhớ ít hơn
Tính toán + Tốc độ thực thi phụ thuộc vào hàm + Tốc độ thực thi phụ thuộc vào
heuristic và cấu trúc của không gian hàm heuristic và cấu trúc của không
trạng thái. gian trạng thái.
5. Cải tiển của thuật toán nhánh cận so với thuật toán leo đồi?
Thuật toán nhánh cận là một phương pháp tìm kiếm trong không gian trạng thái để giải quyết
các bài toán tối ưu hóa. Nó tìm kiếm trên một cây tìm kiếm và sử dụng một hàng đợi ưu tiên
để lưu trữ các nút trên cây. Các nút được lựa chọn để mở rộng là các nút có ước lượng tốt
nhất cho đến nay.
Thuật toán nhánh cận có một số cải tiến so với thuật toán leo đồi như sau:
- Không yêu cầu tính toán độ dốc: Thuật toán nhánh cận không yêu cầu tính toán độ dốc
như thuật toán leo đồi. Thay vào đó, nó sử dụng một hàm heuristic để ước lượng giá trị
tối ưu của trạng thái.
- Lưu trữ dữ liệu hiệu quả: Thuật toán nhánh cận sử dụng một hàng đợi ưu tiên để lưu trữ
các nút trên cây tìm kiếm. Điều này giúp giảm bộ nhớ cần thiết để lưu trữ các trạng thái
tìm kiếm.
- Tối ưu hóa độ phức tạp: Thuật toán nhánh cận tối ưu hóa độ phức tạp bằng cách loại bỏ
các trạng thái không cần thiết khỏi cây tìm kiếm. Điều này giúp giảm thời gian thực thi
và bộ nhớ cần thiết cho thuật toán.
- Tìm kiếm nhiều lời giải: Thuật toán nhánh cận có thể tìm kiếm nhiều lời giải khác nhau
cho một bài toán tối ưu hóa. Điều này giúp cung cấp các lời giải phù hợp với các yêu cầu
khác nhau của người dùng.
Tóm lại, thuật toán nhánh cận có nhiều cải tiến so với thuật toán leo đồi và là một phương
pháp tìm kiếm hiệu quả trong không gian trạng thái để giải quyết các bài toán tối ưu hóa.