确定 adding/removing 个节点后的关节点

Determine articulation points after adding/removing a node

假设我有一个无向图,其中我已经确定了连接点(即节点,当删除时,将断开图)。接下来,我想 remove/add 这个图表的一个节点,并确定关节点如何变化。有没有算法可以利用之前计算出的关节点来加速计算或者是每个节点都从头开始addition/removal我唯一的选择?

为清楚起见,在下面的示例图中,节点 2、3 和 5 是关节点。如果我删除节点 4,则 3 不再是关节点。如果我添加连接到节点 4 和 8 的节点 9,则节点 3 和 5 不再是关节点。我不确定如何概括这个过程。

一般来说,您可能需要花费 Θ(n) 的时间来更新发音点列表。要看到这一点,请想象您的图形只是一条具有 n 个节点的路径。最初,您的所有节点都是关节点。添加一个将路径闭合到循环中的新节点将使您的 none 个节点成为关节点,然后删除任何这些节点将再次使所有节点成为关节点。

以上几点意味着通常不会有一个快速算法来重新计算所有关节点,因为存在不良病理情况。但是,如果您接受比这弱一点的东西,可以使用一些方法进行快速插入和删除。具体来说,有algorithms/data结构解决了全动态双连通性问题。这些数据结构允许您在图中添加和删除节点和边,并且在您这样做时,查询一对节点是否是双连通的(属于同一个双连通分量)。这与您正在寻找的内容并不完全匹配,但如果您的目标是确定哪些节点在删除节点后仍将保持连接,则它可能会有所帮助。缺点是这些是相当难以实现的数据结构/算法。