Algorithm 检测图中两个节点之间是否存在路径的最佳方法?

Algorithm 检测图中两个节点之间是否存在路径的最佳方法?,algorithm,graph,Algorithm,Graph,问题描述如下 一个程序会逐行读取一个文件来建立一个图形。文件中的每一行都是以下三种操作之一: 添加xy,这意味着在节点x和y之间添加一条边,以便形成图形。这个图是无向图 删除xy,这意味着删除节点x和y之间的边,如果该边无效(x或y在图形中不存在,或者x和y之间不存在边),则不执行任何操作 链接为xy,如果x和y可以通过图形中的所有边连接,则应返回。此操作的时间复杂度应为常数时间 以下是一个例子: add 1 2 add 2 3 is linked 1 3(should b

问题描述如下

一个程序会逐行读取一个文件来建立一个图形。文件中的每一行都是以下三种操作之一:

  • 添加xy
    ,这意味着在节点x和y之间添加一条边,以便形成图形。这个图是无向图
  • 删除xy
    ,这意味着删除节点x和y之间的边,如果该边无效(x或y在图形中不存在,或者x和y之间不存在边),则不执行任何操作
  • 链接为xy
    ,如果x和y可以通过图形中的所有边连接,则应返回。此操作的时间复杂度应为常数时间
  • 以下是一个例子:

       add 1 2  
       add 2 3
       is linked 1 3(should be true ,cause there is a path 1-> 2, 2->3)
       add 3 4
       remove 2 3
       is linked 1 4(should be false)
    

    您可以使用union find数据结构在近似线性的时间内完成这项工作。有关其结构和实现细节,您可以使用路径压缩按等级搜索联合。你可以通过图片教程和精确的时间/空间复杂性分析找到许多关于这方面的学术笔记。这个和这个可以帮助你

    但这里有两点需要注意:

    其复杂性是摊销的。看看是否要将其与最坏情况分析进行比较

    什么是近似线性?该算法的摊销分析等于α(n)表示的逆阿克曼函数


    其中α(n){\displaystyle\alpha(n)}\alpha(n)是逆阿克曼函数。此函数的值α(n)<5{\displaystyle\alpha(n)我不明白你在问什么。编辑你的帖子来澄清它。寻找连接的组件?你有要搜索的连接组件的规格吗?或者你只是想看看图表中是否有“n”个连接组件?你想在固定时间内完成吗?我不这么认为。你对a有时间限制吗dd和remove操作?否则,每次更新图形时,您可以只构建一个布尔连接矩阵。然后可以在固定时间内检查连接,而添加和删除的成本将不断增加。