You are on page 1of 3

1. Trình bày thuật toán A*?

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

3. Trình bày thuật toán nhánh cận?


Thuật toán nhánh cận là một thuật toán tìm kiếm đường đi trong không gian tìm kiếm. Thuật
toán này dựa trên cách tiếp cận tìm kiếm tối ưu, tìm kiếm bằng cách loại bỏ các trường hợp
không cần thiết. Thuật toán này đảm bảo sẽ tìm ra lời giải tối ưu nếu có.
Thuật toán nhánh cận thực hiện bằng cách duyệt cây tìm kiếm bằng cách phân nhánh cây
thành các nhánh con. Tại mỗi bước, thuật toán tạo ra các nhánh mới bằng cách mở rộng các
nút của cây tìm kiếm và sau đó loại bỏ các nhánh con không cần thiết. Thuật toán cập nhật
một danh sách các nút đang chờ được mở rộng, sắp xếp theo mức độ ưu tiên (được tính bằng
hàm heuristic) và sử dụng hàng đợi ưu tiên để giải quyết các nút tiếp theo.
Các bước của thuật toán nhánh cận như sau:
- Khởi tạo cây tìm kiếm với nút gốc là trạng thái bắt đầu.
- Khởi tạo danh sách chờ với nút gốc và tính toán giá trị heuristic cho nút đó.
- Lặp lại các bước sau cho đến khi tìm thấy trạng thái kết thúc:
a. Chọn nút đầu tiên từ danh sách chờ và mở rộng nó.
b. Tính toán giá trị heuristic cho các nút con được tạo ra bằng cách sử dụng hàm
heuristic.
c. Đưa các nút con vào danh sách chờ và sắp xếp lại danh sách theo thứ tự tăng dần của
giá trị heuristic.
d. Loại bỏ các nút không cần thiết khỏi danh sách chờ để giảm bớt số lượng nút được
duyệt.
- Nếu danh sách chờ trống mà không tìm thấy trạng thái kết thúc, thì lời giải không tồn tại.
Thuật toán nhánh cận có thể được tối ưu bằng cách sử dụng các chiến lược cắt tỉa như alpha-
beta pruning hoặc phiên bản tối ưu hơn như thuật toán A*.
4. So sánh thuật toán A* với thuật toán nhánh cận?
Thuật toán A* Thuật toán nhánh cậ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.

You might also like