【问题标题】:How O(V+E) is equal to O(b^d) In BFS [closed]BFS中O(V + E)如何等于O(b ^ d)[关闭]
【发布时间】:2012-10-10 13:06:48
【问题描述】:

在我的算法分析课程中老师告诉我们呼吸优先搜索的时间复杂度是 O(V+E) 但现在在人工智能课程中老师说 BFS 的复杂度是 O(bd支持>)。当我问他问题时,他给了我一个合乎逻辑的理由,即“在理论计算机科学中,O(V+E) 是合适的,因为图是输入到搜索算法的显式数据结构。在 AI 中,图通常表示由初始状态、动作和转换模型隐含地表示,并且通常是无限的。因此,复杂度用 O(bd)" 表示。现在我有两个问题

  1. O(V+E) 和 O(bd) 如何相等,第一个看起来像线性复杂度,第二个看起来是指数复杂度。
  2. 当我们谈论大 O 表示法时,它意味着无论输入可能是什么上限,它都应该保持不变,因为它是一个上限。 Big O 是否只处理一些有限的数据输入?
Wikipedia source

【问题讨论】:

  • 请接近的选民发表评论,解释他们为什么认为这是题外话?它讨论了在许多应用程序中经常用于解决最短路径问题的算法的基础知识,我认为理解它的问题没有错。
  • 这个问题属于cs.stackexchange.com。

标签: algorithm artificial-intelligence time-complexity breadth-first-search


【解决方案1】:

在人工智能中 - 您通常处理 巨大/无限图,因此 O(V+E) 信息量不足 并且不足以处理这些图,因此我们尝试获取更好的界限。这个界限是O(B^d),其中B 是分支因子,d 是解的深度。这背后的原因是,如果您在每个深度“分支”到 B 方向,您最终会探索O(B^d) 节点。

此外 - 请注意,您的算法课程中的经典 BFS 是 探索算法 - 它需要探索整个图(探索所有顶点),而在 AI 中我们将其用作 寻路 - 你探索,直到我们找到从源到目标的路径。 (没必要,有时不可能探索整个图)

还请注意,如果您查看一棵树(没有发现两次节点),分支因子 B 并且所有叶子的深度为 d - 树中恰好有 B + B^2 + B^3 + ... + B^d < B^(d+1) 节点,所以如果你确实需要

O(V+E) 和 O(b^d) 如何相等 第一个看起来像线性 复杂性,第二个是指数级的。

首先,图是输入,所以它在输入的大小上是线性的——图。
第二个在图形的大小上也是线性的 - 并且在解决方案的深度上呈指数级 - 一个不同的因素,仍然 - 不需要多次遍历顶点,因此在图形的大小上仍然是线性的。
所以,在这里 - 基本上O(B^d) 是O(V+E) 的子集,如果你能“忍受”你的复杂性是@ 的函数,那么它会提供更多信息987654331@,这不是输入的一部分。

当我们谈论大 O 表示法时,它意味着上限 输入可能是它应该保持不变,因为它是一个上部 边界。 Big O 是否只处理一些有限的数据输入?

如果图是无限的,那么对于每个 f(n) 和每个常数 c,N - c*f(n) < infinity,大 O 都无法提供信息,因此在谈论无限图时它是无用的。

【讨论】:

  • 感谢您的回复,但根据维基百科 O(V+E) 等于 O(b^d) 我的问题是两个边界如何相等?
  • @james:见编辑,想法是——你仍然不需要遍历边或顶点一次。另外:在无限图的情况下,维基百科是错误的 - O(V+E) != O(B^d)。如果V = infinity,那么O(V+E)基本上就是O(infnity),2^(B^d)也在里面,而O(B^d)不在里面
  • @james:还要注意(只是旁注),d 不是输入的一个因素。理论算法研究人员更喜欢使用大 O 符号并仅对输入因素进行分析,侧重于理论方面而不是实际方面。人工智能研究人员不受这些限制的约束。 O(B^d) 可能是您在 AI 课程、我的研究和教授的研究中看到的唯一大 O 符号 - 我们通常使用其他方法并使用经验数据的统计工具来检查哪种算法更好。
  • 您的回答和 cmets 都很有帮助,谢谢。但是为什么这个问题有 3 票赞成?
猜你喜欢
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
相关资源
最近更新 更多