algorithm - 广度优先搜索时间复杂度
问题描述
我想问,为什么BFS的时间复杂度不是O(V)而是O(E+V)?
原因是要检查的队列存储元素最多排队 V 次。所以我们在队列中最多有 V 个条目。所以入队最多出现V次,入队是bfs中出现频率最高的操作。所以顺序应该是 O(V)
解决方案
扩展@beaker的评论:
您完全正确,在完整的广度优先搜索过程中,只有 O(|V|) 个总节点排队,这正是您提到的原因。但是,入队并不是在 BFS 期间执行的最频繁的操作,因此您不能从这一点开始声称运行时为 O(|V|)。
在 BFS 中,每当一个节点从队列中出列时,它的每个邻居都会被扫描以查看是否也应该将它添加到队列中。这意味着,在 BFS 的完整运行中,每条边最多被扫描一次(如果图是有向图)或最多扫描两次(如果它是无向图,则在每个端点出队时扫描一次)。总的来说,这增加了 O(|E|) 必须完成的额外工作,这既解释了其他术语的来源,也说明了为什么主要工作不纯粹是在入队和出队中。
希望这可以帮助!
推荐阅读
- java - 受保护的方法与受保护的属性
- javascript - HH:MM 时间格式 RegEx 数组内
- neural-network - 将具有 ReLU 的神经网络拟合到多项式函数
- pointers - 如果我将成员函数指针置于指针实例范围之外,是否有任何问题
- python - 如何使用我的按钮在模式之间切换
- flutter - 如何减少 IntelliJ IDEA 中的颤振发布 apk 大小?
- html - 将鼠标悬停在 SVG 上以更改颜色
- swift - scrollView 内视图上的手势会阻止滚动
- android - 通知不在 Oreo 中显示,但在 android 10 中显示
- codenameone - Codename One BrowserComponent - 读取服务器证书