26得票3回答
深度优先搜索的时间/空间复杂度

我查看了其他一些StackOverflow答案,它们与我的讲师在他的幻灯片中写的不同。 深度优先搜索的时间复杂度为O(b^m),其中b是搜索树的最大分支因子,m是状态空间的最大深度。如果m远大于d,则效率很低,但如果搜索树“多叉”,则可能比广度优先搜索快得多。 他接着说.. ...

26得票1回答
解释BFS和DFS在回溯方面的含义

关于深度优先搜索的维基百科: 深度优先搜索(DFS)是一种用于遍历或搜索树、树结构或图的算法。在图的情况下,从根节点开始(选择某些节点作为根),沿每个分支尽可能远地探索,然后回溯。 那么什么是广度优先搜索? “一种算法,选择一个起始节点,检查所有节点并回溯,选择最短路径,选择相邻节点并回...

25得票4回答
Leetcode上“岛屿的数量”问题的DFS和BFS时间和空间复杂度

这里是问题描述。前两个建议的解决方案涉及DFS和BFS。这个问题涉及到前两种方法:DFS和BFS。 我已经在这里包含了问题陈述以便更容易阅读。Given a 2d grid map of '1's (land) and '0's (water), count the number of i...

24得票2回答
深度优先图算法的时间复杂度

我正在开始学习时间复杂度,并查看了一些简单排序的时间复杂度示例。 我想知道如何计算在一个有|V|=n和|E|=m的图中进行深度优先搜索的平均时间复杂度,其中起始节点是'u',结束节点是'v'。

24得票2回答
如何使用改进的DFS算法遍历循环有向图

概述 我正在尝试使用某种DFS迭代算法遍历有向循环图。这是我目前实现的一个小型mcve版本(它不处理循环): class Node(object): def __init__(self, name): self.name = name def start...

21得票1回答
DFS中的边分类

根据算法导论一书,dfs中的边被分类为四种类型: 树边(Tree Edge),如果在边(u,v)中,v首次被发现,则(u, v)是一条树边。 后向边(Back Edge),如果在边(u,v)中,v已经被发现且v是u的祖先,则它是一条后向边。 前向边(Forward Edge),如果在边(u...

21得票4回答
'回溯'和'分支限界法'的区别

在回溯算法中,我们同时使用广度优先搜索和深度优先搜索。即使在分支界限算法中,我们也会使用广度优先搜索和深度优先搜索以及最小代价搜索。 那么何时使用回溯算法,何时使用分支界限算法呢? 使用分支界限算法是否会降低时间复杂度? 分支界限算法中的最小代价搜索是什么?

19得票5回答
如何使用迭代版本的深度优先搜索算法检测有向图中的循环?

在递归DFS中,我们可以通过将节点着色为WHITE,GRAY和BLACK来检测循环,如此处所述。 如果在DFS搜索期间遇到GRAY节点,则存在循环。 我的问题是:在这个迭代版本的DFS中,我何时将节点标记为GRAY和BLACK?(来源于维基百科) 1 procedure DFS-i...

19得票2回答
为什么BFS/DFS的时间复杂度不仅仅是O(E),而是O(E+V)?

我知道stackoverflow上有一个类似的问题,其中一个人问为什么BFS/DFS的时间复杂度不仅仅是O(V)。 给出的恰当答案是,在完全图的情况下,E可能达到V^2,因此将E计入时间复杂度是合理的。 但是,如果V不能大于E+1。那么,在这种情况下,不考虑V的时间复杂度应该也能够工作吧?

18得票3回答
广度优先完备性与深度优先不完备性的问题

根据《人工智能:一种现代方法》中的Norvig所述,深度优先算法不完整(不会始终产生解决方案),因为在下降的子树无限制的情况下,会出现这种情况。 另一方面,如果分支因子不是无限的,广度优先方法被认为是完整的。但是,在DFS中,如果子树是有限的,DFS不能被认为是完整的吗?既然BFS的完整性依...