Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有向无环图,各种实现的复杂性、性能、多功能性优势_Algorithm_Data Structures_Graph_Complexity Theory_Graph Algorithm - Fatal编程技术网

Algorithm 有向无环图,各种实现的复杂性、性能、多功能性优势

Algorithm 有向无环图,各种实现的复杂性、性能、多功能性优势,algorithm,data-structures,graph,complexity-theory,graph-algorithm,Algorithm,Data Structures,Graph,Complexity Theory,Graph Algorithm,当实现一个有向无环图(也称为DAG)时,我们会想到一些关于它的内部表示的方法 我脑海中浮现的是: 一个映射V->{E},即:映射。 一种树,其中每个节点都有一组或一列子输出边,即: 类DAG{ 列出根; 静态类节点{ 节点包含V的列表,以及输出边列表 一份清单和一份清单 对于常见的DAG算法和任务,例如: 计算一个或所有顶点的进出度。 寻找最短路径。 计算最小生成树MST。 检索所有Vertrice 检索所有边。 加一块米饭。 添加边。 检查添加边时的循环。 您将使用什么内部表示法,如果您

当实现一个有向无环图(也称为DAG)时,我们会想到一些关于它的内部表示的方法

我脑海中浮现的是:

一个映射V->{E},即:映射。 一种树,其中每个节点都有一组或一列子输出边,即: 类DAG{ 列出根; 静态类节点{ 节点包含V的列表,以及输出边列表 一份清单和一份清单 <插入更多> 对于常见的DAG算法和任务,例如:

计算一个或所有顶点的进出度。 寻找最短路径。 计算最小生成树MST。 检索所有Vertrice 检索所有边。 加一块米饭。 添加边。 检查添加边时的循环。 <插入更多>
您将使用什么内部表示法,如果您要将它们结合起来,您将如何这样做?原因是什么?

利弊取决于您试图解决的问题的实际问题空间。您需要决定哪些操作最重要,并选择为特定问题提供最佳解决方案的实现。im您为一个大型、复杂但主要是静态的DAG选择的实现,只是以各种方式重复引用,这可能与您为维护一个高度动态且总是变化的DAG而选择的实现有很大不同……所有这些都是真的,但我想知道各种实现对各种操作的影响。例如:在文档中ArrayList&LinkedList java的详细介绍具体来说,列出了每个操作的复杂性,然后您可以相互比较以找到您需要的内容,但我发现DAG的实现没有类似之处。为了选择一个具有针对特定问题的最佳解决方案的实现,而无需全部重做,很高兴有一个比较表…正如twalberg指出的,这在很大程度上取决于应用程序和DAG的外观。一个特定的实现可能对一个应用程序来说很好,而对另一个应用程序来说很差。我个人喜欢将有向图或无向图存储为邻接矩阵。这使得许多计算非常简单.但是,如果你的图是大的多个顶点,它会占用大量内存,如果你的图是稀疏的而不是很多边,它会浪费大量内存。有时a矩阵很好,但有时不是。