jGraphT中的顶点和边可以并行添加吗
Can vertexes and edges in jGraphT be added parallely
我正在使用 jGraphT 在 java 中创建一个图,并使用流从列表中添加顶点和边。
我的问题是:
我可以使用 stream().parallel()
来更快地添加它们吗?
不,至少据我所知不是。本质上,添加顶点或边可归结为 2 个步骤:(a) 检查 edge/vertex 是否已经存在,如果不存在,则 (b) 添加 edge/vertex。根据图形的类型,步骤 (b) 涉及将对象添加到存储 edges/vertices 的适当容器中。我不是并发编程方面的专家,但我看不出并行流如何更快地执行上述操作。
我不确切知道你的用例是什么,或者你试图完成什么。然而,在 jgrapht-opt 包中有一些优化的、特殊的图形类型可能会让你受益。图形功能不会改变(即您可以 运行 在它们上面使用相同的算法);只有图形的存储方式发生了变化。一些存储机制的内存效率更高,允许您使用很少的内存存储大量图形。其他图,例如稀疏图,可以更快地创建并且访问操作也更快,但这些图通常是不可变的,即一旦创建它们就不能更改。您真正需要的取决于您的用例。
我正在使用 jGraphT 在 java 中创建一个图,并使用流从列表中添加顶点和边。
我的问题是:
我可以使用 stream().parallel()
来更快地添加它们吗?
不,至少据我所知不是。本质上,添加顶点或边可归结为 2 个步骤:(a) 检查 edge/vertex 是否已经存在,如果不存在,则 (b) 添加 edge/vertex。根据图形的类型,步骤 (b) 涉及将对象添加到存储 edges/vertices 的适当容器中。我不是并发编程方面的专家,但我看不出并行流如何更快地执行上述操作。
我不确切知道你的用例是什么,或者你试图完成什么。然而,在 jgrapht-opt 包中有一些优化的、特殊的图形类型可能会让你受益。图形功能不会改变(即您可以 运行 在它们上面使用相同的算法);只有图形的存储方式发生了变化。一些存储机制的内存效率更高,允许您使用很少的内存存储大量图形。其他图,例如稀疏图,可以更快地创建并且访问操作也更快,但这些图通常是不可变的,即一旦创建它们就不能更改。您真正需要的取决于您的用例。