假设我有一个完全连接的无向图(节点和边),它受到所有节点代表3D空间坐标这一事实的约束,如果节点代表相邻的立方体,则节点只能在图中相邻,即(1,0 ,8)可以与(0,0,8)或(2,0,8)或(1,0,9)相邻。
现在假设我动态地从图中删除节点。我想要一个算法,让我知道,在每次删除时,图形连接是否已被破坏&如果是这样,连接的组件是什么。有没有办法优化图形的空间性质,或者我注定要使用标准的图形处理算法?
我想我需要某种算法,当节点从图中删除时,动态维护图中节点的连接关系。到目前为止,我设法找到的是A *,跳跃点搜索和最短路径算法,我还在这里使用了算法:https://en.wikipedia.org/wiki/Dynamic_connectivity#Decremental_connectivity。
注意:我的图表肯定是循环的。
答案 0 :(得分:0)
好的,所以在考虑了这个之后,我能想出的最佳答案仍然没有利用图的空间约束,但我相信它以摊销成本O(log(n)运行。这是一个草图这个想法:
首先,我们计算图形的任意生成树,从任何节点开始并为树选择任意边。理想情况下,我们希望尽可能保持平衡,即最小化深度。
然后,在每次删除时,我们按如下方式更新生成树:
现在我们从子节点开始运行这个递归算法。假设该算法当前正在处理节点n:
如果我们实际上维护了两个单独的生成树,我们可以在后台处理边缘删除并在使用一棵树或另一棵树之间切换,以提高其在实时程序中的使用效率,例如:一场比赛。