Vấn đề
Tôi có một biểu đồ vô hướng (có nhiều cạnh), sẽ thay đổi theo thời gian, các nút và cạnh có thể được chèn và xóa. Trên mỗi sửa đổi của biểu đồ, tôi phải cập nhật các thành phần được kết nối của biểu đồ này.
Tính chất
Các thuộc tính bổ sung là sẽ không có hai thành phần nào được kết nối lại. Rõ ràng, biểu đồ có thể có chu kỳ đến một lượng tùy ý (nếu không thì giải pháp sẽ là tầm thường). Nếu một cạnh không chứa nút , nó sẽ không bao giờ chấp nhận nút đó. Tuy nhiên, nếu , nó có thể thay đổi thành .
Phương pháp tiếp cận
Tôi có hai cách tiếp cận có thể cho đến nay, nhưng như bạn sẽ thấy chúng thật kinh khủng:
Nhà nước chậm
Tôi có thể tìm kiếm (dfs / bfs) biểu đồ bắt đầu từ (các) phần tử được sửa đổi mỗi lần. Điều này bảo tồn không gian, nhưng chậm vì chúng ta có O (n + m) cho mỗi sửa đổi.
Cách tiếp cận nhanh (-er) (?)
Tôi có thể lưu trữ tất cả các đường dẫn có thể cho mỗi nút cho tất cả các nút có thể, nhưng nếu tôi thấy nó chính xác, điều này sẽ chiếm bộ nhớ O (n ^ 4). Nhưng tôi không chắc cách cải thiện thời gian chạy là như thế nào (nếu có một cái, vì tôi phải giữ thông tin cập nhật cho mọi nút trong cùng một thành phần).
Câu hỏi
Bạn có bất kỳ con trỏ, làm thế nào tôi có thể tìm hiểu thêm về vấn đề đó hoặc có lẽ một số thuật toán tôi có thể xây dựng?
Ghi chú
Nếu có một sự cải thiện lớn về thời gian chạy / bộ nhớ, tôi có thể sống với một giải pháp không tối ưu mà đôi khi nói hai thành phần là một, nhưng tất nhiên tôi sẽ thích một giải pháp tối ưu hơn.