Questions tagged «graph-traversal»

有关图遍历算法(例如BFS和DFS)的问题。

8
图形搜索:广度优先与深度优先
搜索图时,有两种简单的算法:广度优先和深度优先(通常通过将所有邻接图节点添加到队列(广度优先)或堆栈(深度优先)来完成)。 现在,一个相对于另一个有什么优势吗? 我能想到的: 如果您希望数据在图表内很远,那么深度优先可能会更早找到它,因为您可以非常快速地进入图表的较深部分。 相反,如果您希望数据在图表中靠前很远,那么广度优先的结果可能会更早。 我有什么想念的吗?还是主要取决于个人喜好?

7
使用BFS / DFS查找树的直径的算法。为什么行得通?
该链接提供了一种使用BFS / DFS查找无向树的直径的算法。总结: 在图中的任何节点上运行BFS,记住您最后发现的节点。记住最后发现的节点v,从u运行BFS。d(u,v)是树的直径。 为什么行得通? 第2页,这提供了一个理由,但它是混淆。我引用了证明的初始部分: 在图中的任何节点上运行BFS,记住您最后发现的节点。记住最后发现的节点v,从u运行BFS。d(u,v)是树的直径。 正确性:令a和b为任意两个节点,使得d(a,b)是树的直径。从a到b有一条独特的路径。令t为BFS在该路径上发现的第一个节点。如果从s到u 的路径p1p1p_1和从a到b的p2p2p_2路径不共享边,则从t到u的路径包括s。所以 d(t,u)≥d(s,u)d(t,u)≥d(s,u)d(t,u) \ge d(s,u) d(t,u)≥d(s,a)d(t,u)≥d(s,a)d(t,u) \ge d(s,a) ....(更多不平等现象随之而来。) 不平等对我来说没有意义。


2
嵌入欧氏平面(2D)的图形的最短非相交路径
您将使用哪种算法来找到图的最短路径,该最短路径被嵌入到欧几里德平面中,因此该路径不应包含任何自相交(在嵌入中)? 例如,在下面的图表中,你想从去。通常,像Dijkstra算法那样的算法会产生如下序列:(0 ,0 )→ (- 3 ,2 )(0,0)→(-3,2)(0,0) \rightarrow (-3,2) [(0 ,0 )→3(0 ,3 )→2√(1 ,2 )→4(- 3 ,2 )] = 7 + 2–√。[(0,0)→3(0,3)→2(1个,2)→4(-3,2)]=7+2。\left[ (0,0) \stackrel {3}{\rightarrow} (0,3) \stackrel{\sqrt{2}}{\rightarrow} (1,2) \stackrel{4}{\rightarrow} (-3,2) \right] = 7+\sqrt{2}. 完整图: 最短的路径: 最短的非相交路径: 但是,此路径在欧几里得平面上相交,因此我需要一种算法,该算法可以为我提供最短的非相交序列,在这种情况下: [(0 ,0 )→3(0 ,3 )→3(0 ,6 )→5(- 3 ,2 )] = …

1
确保退出迷宫的步骤
给定一个二维迷宫,您可以在其中给出4个命令“上/下/右/左”。了解迷宫但不知道人在哪里,如何找到保证退出迷宫的最小命令顺序?我正在寻找一个命令序列,无论您从迷宫中的哪个位置开始,它们都将起作用。 假设如果在右边有隔离墙时向我们的伙伴发出“向右移动”命令,那么他只会呆在原处。 换句话说,我们被赋予了迷宫,我们必须选择一系列命令。然后,我们的伙伴将被放置在迷宫中的某个地方,并将遵循我们预先选择的命令序列。无论我们最初放置在哪里,我们都希望以此顺序来确保我们的伴侣能够逃脱。请注意,允许的命令没有任何条件语句,因此根据您的伙伴的不同,它们不能遵循不同的顺序。 给定迷宫的描述,是否有多项式时间算法来构造这样的序列? Yuval Filmus提到这是同步单词问题的特例,并且可能与通用遍历序列有关。我还发现了一篇似乎相关的论文: 同时解决迷宫问题。Stefan Funke,AndréNusser,Sabine Storandt。AAAI 2017年。 不幸的是,对于一般图形来说,这似乎是一个未解决的问题,但是我想知道对于这种特定情况是否有好的算法。我想出了一种候选方法:在每个位置上标注退出所需的最小步骤数,并跟踪迷宫中的每个特工。这样可以进行A *搜索。

2
在BST中搜索时可能的搜索路径数
我有以下问题,但没有答案。如果我的方法正确,我将不胜感激: 问:在二叉搜索树中搜索键值60时,遍历包含键值10、20、40、50、70、80、90的节点,而不必按给定的顺序进行。从包含值60的根节点开始的搜索路径中,这些键值可以出现多少种不同的顺序? (A)35(B)64(C)128(D)5040 从这个问题中,我了解到遍历必须包括所有给定的节点,最终我们必须达到键60。例如,这样的组合之一是: 10、20、40、50、90、80、70、60。 由于我们必须遍历上面给出的所有节点,因此我们必须从10或90开始。如果我们从20开始,我们将不会达到10(因为60> 20并且将遍历20的右子树) 同样,我们不能从80开始,因为我们将无法达到90,因为80> 60,我们将在80的左子树中遍历,因此无法达到90。 取10。剩余的节点为20、40、50、70、80、90。下一个节点可以为20或90。出于前面提到的相同原因,我们不能取其他节点。 如果我们以相似的方式考虑,则在每个级别我们都有两个选择。由于有7个节点,因此前6个有2个选择,最后1个没有选择。所以完全有 2 * 2 * 2 * 2 * 2 * 2 * 12∗2∗2∗2∗2∗2∗12*2*2*2*2*2*1排列= = 6426262^6646464 这是正确的答案吗? 如果没有,更好的方法是什么? 我想概括一下。如果给出节点,则总共可能的搜索路径为2 n − 1ñnn2n − 12n−12^{n-1}


3
广度优先搜索中的“宽度”是什么意思?
我正在学习广度优先搜索,我想到一个问题,为什么要这样称呼BFS。在《CLRS的算法简介》一书中,我读到了以下原因: 广度优先搜索之所以这么称呼是因为它在边界的宽度上均匀地扩展了已发现和未发现顶点之间的边界。 但是,我无法理解此声明的含义。我对这个“边界”一词以及该边界的广度感到困惑。 因此,有人能以一种像我这样的初学者容易理解的方式回答这个问题吗?


3
DFT中交叉边缘和前边缘之间的差异
在深度优先的树中,有定义树的边(即遍历中使用的边)。 有一些剩余的边缘连接其他一些节点。交叉边缘和前边缘有什么区别? 从维基百科: 基于此生成树,原始图的边缘可分为三类:前向边缘(从树的节点指向其后代之一),后边缘(从节点到其祖先之一),和交叉边缘,两者都不起作用。有时,属于生成树本身的树边缘与前边缘分开进行分类。如果原始图形是无向的,则其所有边缘均为树形边缘或后边缘。 从一个节点指向另一个节点的遍历中未使用的边线是否不建立父子关系?

2
为什么DFS被认为具有空间复杂度?
根据这些说明,DFS被认为具有空间复杂度,其中是树的分支因子,是状态空间中任何路径的最大长度。O (b m )O(bm)O(bm)bbb米mm 在此Wikibook页面上的“ 不知情的搜索”中也是如此。 现在,有关DFS的Wikipedia文章的“信息框” 针对算法的空间复杂性提供了以下内容: O (| V| )O(|V|)O(|V|),如果遍历整个图而没有重复,则最长路径搜索长度为隐式图,而不会消除重复的节点O (O(O())) 这更类似于我认为DFS的空间复杂度,即,其中是算法达到的最大长度。O (米)O(m)O(m)米mm 我为什么认为是这种情况? 好吧,基本上,我们不需要存储除当前正在查看的路径的节点以外的任何其他节点,因此在Wikibook和我推荐给您的注释提供的分析中,没有必要乘以至。bbb 此外,根据Richard Korf 在IDA *上发表的这篇论文,DFS的空间复杂度为,其中被视为“深度截止”。Ø (d)O(d)O(d)ddd 那么,DFS的正确空间复杂度是多少? 我认为这可能取决于实现方式,因此,我希望能对不同已知实现方式的空间复杂性做出解释。

1
查找两个节点之间的k最短路径
给定加权有向图和权重函数,通常可以使用Dijkstra算法获得最短路径。我感兴趣的是如何获取最短路径,最短路径,依此类推。G = V,EG=V,EG=V,Ed(u ,v )d(u,v)d(u,v)2ñ d2nd2^{nd}3[R d3rd3^{rd} 问题: 是否有一种有效的算法来获取加权图中两个节点之间的第i条最短路径? 是否有一种有效的算法来获取加权图中两个节点之间的k最短路径? 可以选择任意一个答案,尽管我想知道对第二个问题的答案是否可以比对第一个问题的答案的调用效率更高。ķkk

3
有向图中的唯一路径
我正在为一个类设计一种算法,该算法将确定有向图相对于顶点是否唯一,从而对于任何,最多只有一条从到路径。我首先使用BFS(宽度优先搜索)查找从v到另一个顶点u的最短路径,然后再次运行BFS以查看是否可以找到从v到u的替代路径。我认为这太耗时了。有没有人暗示如何在较短的执行时间内找到解决方案?vvvu ≠ vu≠vu \ne vvvvüuu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.