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

有向图顶点和边的反转

轩辕佑运
2023-03-14

所以我正在研究这个问题:

这是我目前所掌握的

a) Create a new graph with the same size 2-dimensional array, B. Iterate 
through the original graph's 2-dimensional array, A, which is of size VxV, 
where V is the number of vertices in the graph. If A[i][j] is true, then an 
edge exists there. Set B[j][i] true in the new reversed graph's matrix. 
The algorithm will be of complexity V^2 since it needs to iterate through 
all of the 2-dimensional array.

b) Create a new graph with an empty array, B, of size V, where V is the 
number of vertices. Iterate through the array of lists in the original 
graph, A. if there is a list  at A[i] then iterate through each one and i to
the corresponding B[x] where x is the integer in the list. The algorithm 
will be complexity of V + E since it needs to iterate through an array of 
size V, and then a total list elements of size E.

首先,我想对我的答案再作核实。我对有向图不是那么熟悉,对算法的效率/复杂度也不是特别熟练。我想我做得对,但如果我需要的话,我想要一些帮助。我也在寻找任何想法,使它更有效率。这些是我脑海中最先出现的算法,所以我觉得可能有更好的方法来实现它。

谢谢

共有1个答案

阙弘博
2023-03-14

你的a)是正确的。在矩阵语言中,你正在寻找矩阵a的转置。一个需要考虑的小细节是,你是否需要将B的非边项设置为false。这取决于语言,尽管大多数语言(我认为)会在内存初始化时将B的所有项设置为false或0。其复杂性确实是O(v^2)

你的b)措词不好。但我想你有这个想法。你必须在b[x]处把一些东西推入列表。更好地描述x。复杂性确实是O(V+E)

你没有什么办法让他们更有效率。你必须在第一种情况下处理每对顶点,在第二种情况下处理每条边。在邻接矩阵的情况下,你可以先交换顶点的顺序,然后再往上看,所以如果你被问到(x,y)是否有边,你会返回(y,x)的答案,但如果你做的次数超过v^2次,你就不会得到前面的结果。邻接列表也一样。

 类似资料:
  • 本文向大家介绍图的边和顶点,包括了图的边和顶点的使用技巧和注意事项,需要的朋友参考一下 图是一组称为节点或顶点的点,它们由一组称为edge的线互连。图形或图形理论的研究是数学,工程学和计算机科学领域中许多学科的重要组成部分。 图论 定义-图形(表示为G =(V,E))由一组非空的顶点或节点V和一组边缘E组成。顶点a 表示边缘的端点。一条边连接两个顶点a,b ,并由其连接的一组顶点表示。 示例-让我

  • 一个简单的背景:我正在构建一个语义图,使用带有邻接表的BGL有向图: 我需要做的事情之一,是处理一个较小的图(子图)到我的主图。 暗示我的lambda捕获参数应该是一对(我猜是一个实际的边?)。 所以,我的问题是:我怎样才能发现在顶点的外边中是否存在类似的边呢?

  • 图的变换有什么算法或名称吗?可以把边变换成顶点,顶点变换成边?这样我们就可以得到一个新的图形或者类似的问题?我不确定这是否真的有意义,但我会很高兴,如果你能给我任何关于这样一个问题的提示。

  • GraphX暴露保存在图中的顶点和边的RDD。然而,因为GraphX包含的顶点和边拥有优化的数据结构,这些数据结构提供了额外的功能。顶点和边分别返回VertexRDD和EdgeRDD。这一章 我们将学习它们的一些有用的功能。 VertexRDDs VertexRDD[A]继承自RDD[(VertexID, A)]并且添加了额外的限制,那就是每个VertexID只能出现一次。此外,VertexRDD

  • 我有一个算法来寻找有向图从一个顶点u到任何其他顶点的边,它具有O(V+E)的时间复杂度(基于DFS)。我必须开发一个算法来找到O(VE)中任意两个顶点u和v之间的边。 你有什么建议或暗示来实现这一点吗? 如果我对每个顶点重复dfs-visite,那么只有第一次顶点是白色的,接下来的调用将不起作用。如果我在做之前重置颜色,那么算法将是O(v^2+VE)。 提前谢谢你!

  • 我试图组合一个查询来获取所有传入和传出的顶点,包括它们的边和方向,但这也会返回那些没有边的顶点。 我现在可以通过强制所有东西都至少有一个边缘来解决这个问题,但这是我想要避免的。 也许值得注意的是,我使用Azure CosmosDB的图形API:https://docs.microsoft.com/en-us/azure/cosmos-db/gremlin-support 这是我用来返回所有顶点及其