假设我有一个无向的有限稀疏图,并且需要能够有效地运行以下查询:
- - 如果在和之间存在路径,则返回,否则返回N 1 N 2 F
- -返回从可访问的节点集
通过预先计算图形的连接组件,可以轻松完成此操作。这两个查询都可以在时间中运行。
如果还需要能够任意添加边 -那么我可以将组件存储在不相交的数据结构中。每当添加一条边时,如果它连接了不同组件中的两个节点,我将合并这些组件。这会将成本增加到,将成本增加到和(也可能是)。甲d d é d 克ë ø (我Ñ v Ë ř 小号Ë 甲Ç ķ é ř 米一个Ñ Ñ (| Ñ ø d ë 小号|))我小号Ç Ò Ñ Ñ Ê Ç 吨ë d ç Ò ñ ñ Ê ç 吨Ë d ñ ÒÔ (1 )
如果我还需要能够任意删除边缘,那么处理这种情况的最佳数据结构是什么?是已知的吗?总而言之,它应该有效地支持以下操作:
- -返回如果存在之间的路径和,否则。N 1 N 2 F
- -返回可从访问的节点集。
- -在两个节点之间添加一条边。请注意,以前可能不存在,或两者都不存在。N 2
- -删除两个节点之间的现有边缘。
(我从游戏开发的角度对此感兴趣-这个问题似乎在很多情况下都会发生。也许玩家可以建造电力线,我们需要知道发电机是否已连接到建筑物。也许玩家可以锁定并打开门,我们需要知道敌人是否可以到达玩家。但这是一个非常普遍的问题,因此我将其表述为