breadth-first-search相关内容

A *是最佳寻路算法吗?

通常说A *是解决寻路问题的最佳算法. 在A *不是 的最佳算法时,有什么情况吗? A *与BFS,DFS,UCS等相比有多好? 解决方案 简短的答案是肯定的,在某些情况下,A *不是解决问题的最佳算法.但是,有许多方法可以评估用于寻找解决方案的 best 算法的组成. 如果您考虑从单个来源到多个目的地的多次搜索的效果最佳,那么您应该考虑使用一种更合适的方法( Dijks ..

查找树中两个顶点之间的简单路径(无向简单图)

给出两个顶点(A和B)和一棵树(G)(无向简单图)- 在G中A和B之间的简单路径中找到顶点. 该算法应以O(V)复杂度运行. 例如-在a和b之间的简单路径中找到顶点: dk ka kb 答案应该是:k 我试图修改BFS以实现该目标,但到目前为止似乎还行不通. 有什么建议吗? 解决方案 如果发现距离后问题是在重建路径,请按以下方式调整BFS:从要 ..
发布时间:2020-08-22 19:17:08 其他开发

为什么BFS的复杂度是O(V + E)而不是O(E)?

这是通用的BFS实现: 对于具有V个节点和E个边总数的连接图,我们知道在内部循环中每个边都将被考虑两次.因此,如果BFS的内部循环中的迭代总数将为2 * number of edges E,那么运行时是否将变为O(E)? 解决方案 在这种情况下,需要深入了解实现.特别是,如何确定是否访问了节点? 传统算法是通过为顶点着色来实现的.首先,所有顶点都被着色为白色,而被访问时它们将被 ..

使用自定义访问者时,如何使用Boost Graph Library停止广度优先搜索?

说我找到了符合我条件的节点,我需要停止搜索. 解决方案 解决方案是引发您已知类型的异常-然后在调用方捕获它.从常见问题解答: 如何从BFS之类的算法中提前退出? 创建一个访问者,当您想中断搜索时会抛出异常,然后将您的调用放在适当的try/catch块内的广度(breadth_first_search)中.这使许多程序员误认为是对异常的滥用,但是,很多人考虑让异常退出的首选方法是 ..
发布时间:2020-07-26 05:55:17 其他开发

在带有障碍物的二维矩阵中找到到达给定目标像元的最短路径

我正在处理以下面试问题,我对如何在此处使用BFS搜索感到困惑.我对如何处理这里的封锁感到困惑? 给出一个MxN矩阵,找到到达给定目的地的最短路径 细胞.机器人可以上下左右移动.矩阵也 机器人无法在少数几个单元中设置了一组封锁 通过.输出机器人需要移动的最小次数 到达目的地.如果目的地不是,则输出-1 可达的.假设封锁永远不会开始 单元格. 输入格式:第一行包含M和N矩阵的值.第二 行包 ..

使用SPARQL和Jena检索OWL类层次结构中的所有路径

我有一个RDF图,该图的层次结构分为三层.我想检索所有从类层次结构的根(即owl:Thing)到第三级类的所有路径,而无需使用推理程序.例如,我想要一条路 C 1 → C 2 → C 3 是一条路径,其中每个 C i 是层次结构中第i 级别的类. 我需要使用广度优先搜索算法来检索RDF图中的所有路径,而无需考虑图中的对象属性. 解决方案 给 ..
发布时间:2020-06-20 19:36:08 其他开发

Python中的BFS算法

graph = {0:[1,3,4],1:[0,2,4],2:[1,6],3:[0,4, 6],4:[0,1,3,5],5:[4],6:[2,3]} def bfs(graph,start,path = []): 队列= [开始] 而队列: 顶点= queue.pop(0) 如果顶点不在路径中: path.append(vertex) queue.extend(graph [ve ..
发布时间:2020-06-03 22:01:41 Python

使用列表列表保存图形中的每个路径

我必须实现dfs算法以保存来自起始节点的所有路径。因此,例如,我有以下图形: 我有一个列表 path = [] 来保存从节点1开始的所有路径。因此,我的列表将只有起始节点1: 1 ,然后我将检查1的邻居(即节点2),列表将为: [1,2] 。 现在,我检查2的邻居,分别是3和4。现在,我认为列表类似于 [[1,2,3],[1,2,4]] ,最后的最终列表将是 [[1,2,3],[1,2,4 ..
发布时间:2020-06-03 21:57:50 Python

如何在C ++中跟踪BFS深度

我想在2D数组上执行BFS,并且每个单元格都可以表示为 pair 。我使用 queue> 来跟踪每个级别的单元格,但是我找不到跟踪深度的聪明方法。 (我不想定义另一个结构来记录每个级别的深度) 这是Java中的解决方案。每个级别以 null 结尾,一旦看到 null ,我们便增加深度。 我想知道C ++中是否有类似的优雅解决方案。现在 ..
发布时间:2020-06-03 21:53:14 C/C++开发

BFS不知情的搜索问题

我正在尝试避免无限循环,并且在找出问题所在时遇到了麻烦。应该可以找到3x2拼图板的解决方案。我怀疑问题可能出在我覆盖的equals方法上,但我不确定。遇到两个问题: 1)它不断重新探索已经探索过的节点。 2)队列 驱动程序类: import java.util。*; 公共类驱动程序{ public static void main(String [] args ..

如果需要重新访问BFS中的访问节点,时间复杂度是多少?

我正在研究算法问题。 为简化起见,该问题可以简化为: 给出一个m * n矩阵,其中有一堆特殊点,在该矩阵中找到从A点到B点的最佳路径。 最佳路径是经过最少特殊点的路径。如果有多条路径的特殊点最少,请选择最短的路径。如果仍然有多个路径,请从中随机选择一个。 BFS肯定可以解决此问题。要排队,请记录每个点的信息。如果找到更好的路径,请更新信息并将此点放入队列。最后在B点输出信息。 ..
发布时间:2020-06-03 21:40:03 其他开发

二叉搜索树的高度迭代

我正在尝试一种迭代方法来查找二进制搜索树的高度/深度。 基本上,我尝试使用广度优先搜索来计算深度,方法是使用队列来存储树节点,并仅使用整数来保存树的当前深度。树中的每个节点都已排队,并检查了子节点。如果存在子节点,则将深度变量递增。以下是代码: public void calcDepthIterative(){ Queue nodeQ = new LinkedLi ..

广度优先搜索生成的节点数是多少?

没有。根据我的书,广度优先搜索生成的节点数为: N(BFS)= b + b ^ 2 + .... + b ^ d +(b ^(d +1)-b)其中, b 是分支因子, d 是最浅节点的深度。但是不应该只是 b + b ^ 2 + .... + b ^ d 吗?因为那对我来说是不。节点直到目标的深度。那么为什么会有 +(b ^(d + 1)-b)? 解决方案 根据您使用的算法的变体,通过广 ..
发布时间:2020-06-03 21:33:24 其他开发

图遍历期间断开的节点

我已经通过此链接进行了广度优先遍历 宽度优先遍历 现在,如果将图形结构更改为此,怎么办 节点3是现在已与图表断开连接。 现在使用遍历程序时,它不显示顶点3。 有没有一种方法可以同时显示此顶点? 解决方案 据我了解,BFS会一直在寻找未访问的节点(只要它们存在);但是,如果不这样做,则BFS仅访问初始顶点的连接组件中的节点。这似乎是定义问题,而不是实际的编程问题。只要需 ..
发布时间:2020-06-03 21:21:23 C/C++开发

BFS和DFS在二叉树上的运行时间是否为O(N)?

我意识到,一般图上BFS和DFS的运行时间为O(n + m),其中n是节点数,m是边数,这是因为对于每个节点,必须考虑其邻接表。但是,当在二进制树上执行BFS和DFS时,其运行时是什么?我认为应该是O(n),因为可以从一个节点移出的边缘的可能数量是恒定的(即2)。请确认这是否是正确的理解。如果不是,那么请解释二叉树上BFS和DFS的正确时间复杂度是什么? 解决方案 BFS 和 DFS 只是 ..

比较BFS算法的两种不同实现时了解性能细节

以下结果是在具有32核的计算服务器上使用perf进行测量的。我知道我的实现未经过优化,但是有意进行比较。据我了解,图算法往往具有较低的局部性,研究人员试图解决该问题。 不过,我不清楚结果。经过的时间是令人误解的。我的实现在大约10秒钟的时间内通过一个约有4mm节点的图形运行,其余时间进行了预处理。经过优化的版本使用相同的输入,并且遍历约10次,每次间隔不到一秒钟,因此实际上只是预处理时间。我 ..
发布时间:2020-06-03 20:20:40 其他开发

BFS用于算术运算

以最少的操作将数字m转换为n。允许的操作为1减去2。 对于例如:4和6。答案为2。 第一个操作:-1-> 4 -1 =3。 第二个操作:*-> 3 * 2 = 6。 我正在为特定输入使用BFS方法(src = 26, dst = 5)需要很长时间。我是在做错什么吗? 从queue_class导入队列 类节点: def __init __(自身,值,级别,父级): ..
发布时间:2020-06-03 20:20:33 Python

为什么说深度优先搜索会遭受无限循环的困扰?

我已经阅读了有关 DFS 和 BFS 很多次,但我对此疑问一直困扰不已。在很多文章中都提到DFS可能陷入无限循环。 据我所知,通过跟踪访问者可以轻松地消除此限制。节点。实际上,在我读过的所有书中,这张小支票都是DFS的一部分。 那么为什么提到“无限循环”是DFS的缺点?仅仅是因为原始DFS算法没有对访问的节点进行此检查吗?请解释。 解决方案 (1)在图搜索算法中[在AI上经常使 ..