在人工智能中 - 您通常处理巨大/无限图,因此对于这些图来说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)
并且信息量更大,如果您可以“忍受”您的复杂性是 的函数d
,这不是输入的一部分。
当我们谈论大 O 表示法时,它意味着无论输入可能是上限,它都应该保持不变,因为它是一个上限。Big O 是否只处理一些有限的数据输入?
如果图是无限的,那么对于每个 f(n) 和每个常数 c,N - ,大 O 都不能提供信息,c*f(n) < infinity
因此在谈论无限图时它是无用的。