Algorithm 为什么广度优先搜索有两个列出的时间复杂性?

Algorithm 为什么广度优先搜索有两个列出的时间复杂性?,algorithm,graph,big-o,time-complexity,breadth-first-search,Algorithm,Graph,Big O,Time Complexity,Breadth First Search,列出了图上宽度优先搜索的两个时间复杂性:O(| E |)和O(bd)。不过,在页面的后面,它只列出了O(| E |) 为什么有两种不同的运行时?哪一个是正确的?两个时间复杂度都是正确的,但在不同的情况下用于测量相对于两个不同量的时间复杂度。这与广度优先搜索算法通常指在不同上下文中使用的两种不同的相关算法有关 在一个上下文中,BFS是一种算法,给定一个图和图中的起始节点,通过首先访问距离为0的所有节点,然后访问距离1,然后访问距离2等,访问从起始节点可访问的每个节点,直到访问所有节点为止。这将访问

列出了图上宽度优先搜索的两个时间复杂性:O(| E |)和O(bd)。不过,在页面的后面,它只列出了O(| E |)


为什么有两种不同的运行时?哪一个是正确的?

两个时间复杂度都是正确的,但在不同的情况下用于测量相对于两个不同量的时间复杂度。这与广度优先搜索算法通常指在不同上下文中使用的两种不同的相关算法有关

在一个上下文中,BFS是一种算法,给定一个图和图中的起始节点,通过首先访问距离为0的所有节点,然后访问距离1,然后访问距离2等,访问从起始节点可访问的每个节点,直到访问所有节点为止。这将访问图中的每个节点,在访问过程中,最多一次(在有向情况下)或两次(在无向情况下)探索每个节点一个和边。通过使用队列跟踪下一步要探索的节点,并使用适当的簿记,运行时将是O(| E |+| V |)(经过进一步优化,它将是O(| E |))

在不同的上下文中,BFS是一种搜索算法,用于查找从图中某个起始节点到图中某个目标节点的最短路径。在这种情况下,算法一发现目标节点就停止运行。这意味着运行时取决于目标节点与源节点的距离。这个距离又取决于图形的结构。如果图是密集连接的,节点就不会那么远,如果图是稀疏的,节点可能非常远。在这种情况下,通常会添加一个称为“分支因子”b的参数,该参数描述与任何节点相邻的边的平均数或最大数。这意味着

  • 距离起始节点0处有一个节点
  • 距离起始节点1处最多有b个节点
  • 距离起始节点2处最多有b2个节点
  • 距离起始节点k处最多有bk节点
如果我们假设目标节点与起始节点的距离为d,那么BFS最多访问b0+b1+…+bd=O(bd)个节点在搜索过程中,在每个节点上花费O(b)个时间。因此,总运行时间将为O(bd)

总之:

  • 在讨论用于浏览整个图形的算法时,通常使用O(| E |)的运行时
  • 在讨论用于在图中查找特定节点的算法时,通常使用O(bd)的运行时

希望这有帮助

我刚意识到你在回答你自己的问题。哈哈!虽然我很感激你抽出时间。帮我解决了一些问题!:)如果BFS在第一个分支中找到目标节点,
b
d
的复杂性是多少$b^d$是在最后一个节点上找到目标时要扩展的最大节点数BFS可以扩展的最小节点数的答案是什么?广度优先搜索的时间复杂性不是O(| V |+| E |)吗?因为每个节点和边只访问一次。该算法的可视化表示证明了这一点……在连通图中,| V |=O(| E |),因此只要该图是连通的,这两个是等价的。