java - 为什么 DFS 和 BFS 的复杂度不是 O(V)?

标签 java algorithm

<分区>

我正在尝试将 BFS 和 DFS 作为通用算法在 Java 中实现。我正在编写一个方法 getComplexity(),它将算法的最坏情况复杂度作为字符串返回。在 DFS(和 BFS)中,图中的每个节点只能被访问一次。在最坏的情况下,每个节点只被访问一次。因此,为什么这些算法的复杂度是 O(V+E) 而不是 O(V)?这里 V 是节点(或顶点)的数量,E 是边的数量。

最佳答案

树遍历(BFS 和 DFS)是 O(V + E),因为每条边必须恰好遍历一次,每个节点必须恰好访问一次。树遍历通常是一种抽象,可以帮助我们了解问题。在大多数简单的情况下,V 和 E 都是微不足道的操作,但情况并非总是如此,V 的效率可能与 E 截然不同。例如,遍历边可以像跟随指针一样简单,或者它可能要求您通过网络从远程主机获取数据(可能涉及昂贵的数据库查询)。访问一个节点可以像设置一个 boolean 值一样简单,也可以涉及对该节点的数据执行一些昂贵的计算。

O(V + E) 提醒我们,在推理遍历树的整体复杂性时,必须同时考虑访问节点和遍历边的复杂性。

关于java - 为什么 DFS 和 BFS 的复杂度不是 O(V)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19150437/

相关文章:

java - JPA复合键问题: Column 'Person_ID' cannot be null

java - asm.ObjectWriter.getCommonSuperClass 处的 ClassNotFoundException

java - Spring Integration 从 REST 服务获取分页结果

将矩形放置在多边形内的算法

algorithm - 计算问答游戏的准确性

java - Google App Engine 的 URLConnection 无法正确读取某些西里尔字母

java - 从哪个 Linux 内核/libc 版本开始,Java Runtime.exec() 就内存而言是安全的?

algorithm - 如何取消漂白这个 perl 文件?

algorithm - 示例热情布局

algorithm - 为什么在插入 2-3-4 树时节点会 split ?