当前位置: 首页 > 知识库问答 >
问题:

我无法理解算法设计手册中的BFS树边缘

常培
2023-03-14

我不明白这是什么意思

没有出现在广度优先搜索树中的图边也有特殊的属性。对于无向图,非树边只能指向与父顶点相同级别的顶点,或者指向父顶点正下方级别的顶点。这些属性很容易从树中的每条路径必须是图中的最短路径这一事实中得到。对于有向图,当v比u更靠近根时,就可以存在指向后的边缘(u, v)。

我知道“没有出现在广度优先搜索树中的图边也有特殊的属性。”但是我怎么知道这些属性很容易从树中的每条路径都必须是图中最短的路径这一事实中得到呢?此外,对于有向图,对于有向图,我如何证明当v比u更靠近根时,反向指向边(u, v)可以存在?

共有1个答案

闻人浩波
2023-03-14

因为我们使用的是BFS树,所以树中同一级别的所有节点到根节点的距离必须相同。例如,深度为5的节点与根节点的距离必须为5。类似地,深度为10的节点与根的距离必须为10。

首先,让我们讨论无向图。假设有一条边{u,v}不在BFS树中。现在,假设u和v在树中相距两级以上,特别是v至少比u低两级。这意味着从根节点s到v的距离比从s到u的距离大两级。因此,从s到v最短路径的长度至少比从s至u的最短路径长两条边(这是最短路径定义)。但这不是真的:我们可以得到一条从s到v的路径,它只比从s到u的最短路径长一条边,通过遵循从s到u的最短路线,然后遵循边{u,v}。这里出了问题,特别是我们假设v比u低两个或两个以上。

对于有向图,您确实可以具有跳回到树中更高级别的有向边。一个非常简单的方法是:考虑一个由节点u,v,w组成的三角形,其中u有一条边到v,v有一条边到w,w有一条到u的边。BFS树是什么样子的?

 类似资料:
  • 面向对象设计模式 泛化(概化):表示把几类对象类的公共属性和行为抽象成超类,然后其属性和方法被那些子类继承 聚合:表示一个较大的“整体”类包含一个或多个较小的“部分”类 合成:表示关系中“整体”负责其“部分”的创建和销毁,如果“整体”不存在了,“部分”也将不存在。 单例:保证一个类仅能够生成一个对象 组合:表示“部分-整体”的层次结构,并且对部分和整体的使用具有一致性 装饰:动态地给一个对象增加一

  • 我在基于频率表的哈夫曼树上工作。频率表是通过计算给定字符串中字符的频率并将相应项(字符和频率)放置在链接列表中生成的。然后,我需要将项目按频率顺序放置在哈夫曼树中。我得到了它背后的逻辑是确保每个子树都有右节点和左节点,添加它们的频率,用它们添加的频率创建一个根节点,将下一个频率分别放在左树和右树中,并重复这个过程,直到没有更多的频率,子树与添加其频率的根连接;我遇到的问题是如何实现代码。 代码相当

  • 我对jprofiler是新手,我无法理解调用意味着什么,1)如果一个方法进行了一次调用,为什么每个子方法进行了不止一次调用?2) 时间是每次调用的时间,还是总调用次数的总时间?3) 在我的结果截图中,总百分比是多少?例如,一种方法占21.6%,所以所有子方法加起来应该是21.6%,但这里不是这样。 如果有人能给我解释一下调用树视图,那将非常有帮助。 提前谢谢你。 编辑: 1.在图像截图2中,我突出

  • Itinerary类存储有关具有以下成员的旅程的信息: •一个名为flights的私有ArrayList数据字段,其中包含按DepartureTime递增顺序排列的旅程航班。(提示:您不需要进行排序。) •使用ArrayList类型的指定航班创建旅程的构造函数。 •名为getTotalFlightTime()的方法,以分钟为单位返回旅程的总飞行时间。(提示:为每个飞行对象调用getFlightTi

  • 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边数是V-1。假设E代表连接到每个顶点的V-1条边。 查找和更新最小堆中每个相邻顶点的权重为O(log(V))+O(1)或 因此,从上面的步骤1和步骤2,更新顶点的所有相邻顶点的时间复杂度是e*(logV)。或. 因此所有V顶点的时间复杂度为V*(E*logv),即。 但Dijkstra算法的时间复杂度为O(ElogV)。为什么?

  • 我是一名本科生,正在读《科曼简介》。准备第三次考试,准备期末考试。 在第22章(第603页)中,它讨论了DFS如何将前置子图作为森林生成,以及BFS如何将前置子图作为树生成。我只是不明白。 我的想法是: 如果顶点v可以从一个开始搜索的源顶点s到达,那么顶点v是否有一些前身(可能是不同的,但存在),而不管在输入图上运行DFS或BFS?也就是说,DFS和BFS都可以访问它。 如果是这样,为什么DFS可