Xác định kết nối cho một biểu đồ hoàn toàn động với chèn và xóa đỉnh / biểu đồ con


8

Tôi đang tìm kiếm một giải pháp cho vấn đề sau đây và tự hỏi liệu có ai có thể chỉ cho tôi một số nghiên cứu hiện có về chủ đề này không. Tôi đến từ một ứng dụng đồ thị trong thế giới thực, vì vậy hãy đồng ý với tôi nếu thuật ngữ của tôi không chính xác.

Tôi có một hệ thống cơ sở dữ liệu nơi người dùng có thể thêm / xóa / di chuyển các đối tượng bằng cách tạo / xóa và thay đổi các mối quan hệ. Như vậy, tôi có thể thấy các đối tượng là các đỉnh trong biểu đồ và các mối quan hệ là các cạnh và cạnh có thể được tính trọng số tùy thuộc vào loại mối quan hệ (có thể là thành phần, liên kết hoặc tổng hợp).

Từ quan điểm của người dùng, việc thêm một yếu tố mới có thể chỉ bằng một cú nhấp chuột và bên dưới mui xe, chương trình tạo ra một biểu đồ các đối tượng được liên kết bởi các mối quan hệ. Biểu đồ này, sau đó được thêm vào biểu đồ chính xác định toàn bộ cơ sở dữ liệu. Loại bỏ một phần tử, sẽ là đảo ngược nơi các liên kết / cạnh bị ngắt kết nối và biểu đồ trở thành hai biểu đồ tách rời trong đó 1 là cơ sở dữ liệu và phần còn lại bao gồm các đỉnh được hình thành bởi phần tử và các phần tử phụ của nó.

Tôi cần một cách thực sự nhanh chóng để xác định khi nào tôi có một biểu đồ rời rạc và khi 2 biểu đồ rời rạc trở thành 1 lần nữa. Tôi đã có một cái nhìn ngắn gọn về Holm, de Lichtenberg và Thorup ( 2001 ; pdf ). Có vẻ như con đường để đi, nhưng tác giả đã đề cập đến việc họ chỉ đang xem xét một biểu đồ với số đỉnh cố định. Chỉ cần tự hỏi các thuật toán thường mở rộng bản thân để thêm / xóa các đỉnh bằng cách chỉ thực hiện việc thêm các cạnh tăng dần? Hoặc đã có những tác phẩm mà thợ may đặc biệt cho kịch bản như vậy?

Câu trả lời:


4

Đây không phải là một câu hỏi nhỏ. Một trong những vấn đề bạn sẽ tìm thấy thuật toán cho vấn đề này là sự mất kết nối (ý định chơi chữ) của công việc trên các biểu đồ động. Công việc của Thorup và cộng sự (người bạn đề cập) có lẽ là sự khởi đầu tốt nhất cho loại điều bạn đang tìm kiếm.

Bạn cũng có thể dùng thử Bhadra & Ferreira , có lẽ họ hơi lạc đề về những gì bạn muốn, nhưng họ có tài liệu tham khảo đến các tài liệu khác có thể hữu ích.


1

Các bản cập nhật Vertex có thể được xử lý bằng các bản cập nhật cạnh như sau (Mặc dù hơi kém hiệu quả vì nó thực hiện các lệnh gọi deg (u) đến chức năng cập nhật cạnh):

AddVertex(G,u,Adj(u)):- 
  /* Adj(u) is the vertices adjacent to u after adding u */  
  For each v in Adj(u) do 
    AddEdge(G, (u,v))

DeleteVertex(G,u):- 
  For each v in Adj(u) do
    DeleteEdge(G, (u,v)) 

Thorup et. Phân tích thời gian chạy của Al nói rằng thời gian cập nhật của họ là thời gian khấu hao trên mỗi lần cập nhật cạnh. Vì vậy, nó không trực tiếp ngụ ý bất kỳ poly. kết quả thời gian cập nhật logarit dưới cập nhật đỉnh.

Có một số công việc trong đó hoạt động cập nhật cũng hỗ trợ xóa đỉnh / bổ sung. Trong [1] đối với bài toán Đường dẫn ngắn nhất cho tất cả các cặp, về cơ bản, chúng cho phép cập nhật sự cố các cạnh trên một đỉnh bằng cách chỉ định các trọng số mới. Chúng ta có thể cập nhật tất cả chúng thành + vô cực để xóa một đỉnh và tương tự để thêm một đỉnh.

Bạn có thể thấy các tài liệu tham khảo [2] và [3] hữu ích nếu bạn chỉ mới bắt đầu với các thuật toán đồ thị động. [2] đưa ra một ý tưởng cấp cao về các phương pháp tiếp cận hiện tại cho vấn đề kết nối động.

Người giới thiệu

  1. Một cách tiếp cận mới để năng động Tất cả các cặp đường dẫn ngắn nhất, Demetrescu. et. Al, JACM 2004 Voume 51 số 6, 2004

  2. Slide of Talk về Thuật toán đồ thị động của Tiến sĩ Surender Baswana trong hội thảo "Những tiến bộ gần đây về cấu trúc dữ liệu và thuật toán" được tổ chức tại IMSc, Chennai.

  3. Camil Demetrescu và Pino Italiano, Đồ thị động, Sổ tay về cấu trúc và ứng dụng dữ liệu, Chương 36. Dinesh Mehta và Sartaj Sahni (chủ biên), Sê-ri CRC, trong Khoa học máy tính và thông tin, tháng 1 năm 2005. [Bản thảo (pdf)]


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.