Làm thế nào để thực hiện thuật toán AO *?


16

Tôi đã nhận thấy rằng các cấu trúc dữ liệu khác nhau được sử dụng khi chúng tôi thực hiện các thuật toán tìm kiếm. Ví dụ: chúng tôi sử dụng hàng đợi để thực hiện tìm kiếm đầu tiên theo chiều rộng, ngăn xếp để thực hiện tìm kiếm theo chiều sâu và các đống nhỏ để thực hiện thuật toán A * . Trong những trường hợp này, chúng ta không cần phải xây dựng cây tìm kiếm một cách rõ ràng.

Nhưng tôi không thể tìm thấy cấu trúc dữ liệu đơn giản để mô phỏng quá trình tìm kiếm của thuật toán AO * . Tôi muốn biết nếu xây dựng cây tìm kiếm một cách rõ ràng là cách duy nhất để thực hiện thuật toán AO *? Bất cứ ai có thể cung cấp cho tôi một triển khai hiệu quả?


3
Chào mừng bạn Hãy nhớ bao gồm các tài liệu tham khảo cho các tài liệu không chuẩn mà bạn sử dụng. Vì AO * không có bài viết Wikipedia, nên một liên kết chắc chắn theo thứ tự. Tôi hy vọng tôi tìm thấy một cái tốt, xin vui lòng kiểm tra.
Raphael

1
Có phải đó chỉ là một biểu đồ (với chức năng cho phép một người di chuyển đến nút "tiếp theo")?
soandos

sẽ rất hữu ích nếu ai đó chỉ phác thảo AO * khác với thuật toán A * như thế nào. không thể tìm ra điều đó từ liên kết. Đối với việc thực hiện, bất kỳ cấu trúc nào cho cây có vẻ hợp lý .... nó đang đi ngang qua một cái cây phải không?
vzn

Câu trả lời:


1

Về bài viết này mỗi khi bạn mở rộng một nút trong thuật toán AO *, bạn phải quay ngược lại để cập nhật tất cả chi phí ước tính của người tiền nhiệm.

Khi bạn sử dụng cấu trúc dữ liệu tuyến tính để chứa các nút, bạn phải duyệt qua các phần tử dữ liệu một cách tuần tự và chỉ có thể lấy một phần tử dữ liệu trực tiếp (stack, queue, queue queue ưu tiên).

Trong AO * mỗi lần một nút được thực hiện để mở rộng dựa trên chi phí ước tính của nó, thuật toán lặp lại trên tất cả các nút là tiền thân của nó (để cập nhật chi phí ước tính của chúng). Điều đó có nghĩa là đôi khi bạn nên lấy yếu tố dựa trên chi phí ước tính của nó và đôi khi dựa trên sự kế thừa của nó. Không có thứ tự trình tự có thể đáp ứng cả hai điều kiện này trong trường hợp chung. Có lẽ có một cách để sử dụng các cấu trúc dữ liệu tuyến tính "lồng nhau", nhưng nó chỉ nên bắt chước một cấu trúc cây, và sẽ tốt hơn khi xây dựng cây tìm kiếm thay thế.


0

Tôi vừa tắt mô tả mà bạn liên kết đến, nhưng còn BST thì sao? Bạn có thể xây dựng nó để cân bằng các nút chưa được giải quyết. Điều đó có thể giúp bạn tiết kiệm thời gian ở bước 2 và sẽ giúp giảm thời gian tổng thể tùy thuộc vào số lượng giao dịch. Tất nhiên, nếu bạn cân bằng / sắp xếp cây của bạn theo các nút chưa được giải quyết, có lẽ bạn sẽ tốt hơn ít nhất so với cấu trúc dữ liệu đơn giản hơn, có khả năng giữ trong / khoảng thời gian logarit.

http://en.wikipedia.org/wiki/Self-balANCE_binary_search_tree


2
Và bạn có thể làm điều này?
Raphael

Tôi không rõ BST sẽ được sử dụng như thế nào vì các BST có chỉ số bằng số cho mỗi nút và được sử dụng để đặt chúng. chỉ số số được sử dụng là gì?
vzn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.