Giả sử tôi có một biểu đồ thưa thớt hữu hạn vô hướng và cần có khả năng chạy các truy vấn sau một cách hiệu quả:
- - trả về nếu có đường dẫn giữa và , nếu không thì FN 1 N 2 F
- - trả về tập hợp các nút có thể truy cập từ
Điều này được thực hiện dễ dàng bằng cách tính toán trước các thành phần được kết nối của biểu đồ. Cả hai truy vấn có thể chạy trong thời gian .
Nếu tôi cũng cần có thể thêm các cạnh tùy ý - - thì tôi có thể lưu trữ các thành phần trong cấu trúc dữ liệu tách rời . Bất cứ khi nào một cạnh được thêm vào, nếu nó kết nối hai nút trong các thành phần khác nhau, tôi sẽ hợp nhất các thành phần đó. Điều này thêm chi phí chi phí và cho và (cũng có thể là ).
Nếu tôi cũng cần có thể loại bỏ các cạnh tùy ý, cấu trúc dữ liệu tốt nhất để xử lý tình huống này là gì? Là một người được biết đến? Tóm lại, cần hỗ trợ các hoạt động sau một cách hiệu quả:
- - trả về nếu có một con đường giữa và , nếu .
- - trả về tập hợp các nút mà có thể truy cập từ .
- - thêm một cạnh giữa hai nút. Lưu ý rằng , hoặc cả hai có thể chưa tồn tại trước đó.
- - xóa cạnh hiện có giữa hai nút.
(Tôi quan tâm đến vấn đề này từ góc độ phát triển trò chơi - vấn đề này dường như xảy ra trong một vài tình huống. Có lẽ người chơi có thể xây dựng đường dây điện và chúng tôi cần biết liệu máy phát có được kết nối với tòa nhà hay không. Có lẽ người chơi có thể khóa và mở khóa cửa, và chúng ta cần biết liệu kẻ thù có thể tiếp cận người chơi hay không. Nhưng đó là một vấn đề rất chung chung, vì vậy tôi đã giải thích nó như vậy)