Algorithm 我是否可以降低此算法的复杂性(我使用NGenerics)

Algorithm 我是否可以降低此算法的复杂性(我使用NGenerics),algorithm,graph,minimum-spanning-tree,prims-algorithm,Algorithm,Graph,Minimum Spanning Tree,Prims Algorithm,我正在使用NGenerics的Prim算法来寻找连接一些顶点的最小生成树。这就像在一个图上搜索一个MST,其中每个顶点都连接到其他每个顶点,这意味着边比顶点多,我应该使用Prim算法(而不是Kruskal算法)。Prim的算法,如果实施得当,时间复杂度为O(| E |+| V | log | V |)。由于NGenerics是一个众所周知的库,它可能是Prim算法的最佳实现,或者至少有一个比O(| V | ^2)更好的实现 但是,有一个问题: 如果我想使用NGenerics库,我必须将图形的所有

我正在使用NGenerics的Prim算法来寻找连接一些顶点的最小生成树。这就像在一个图上搜索一个MST,其中每个顶点都连接到其他每个顶点,这意味着边比顶点多,我应该使用Prim算法(而不是Kruskal算法)。Prim的算法,如果实施得当,时间复杂度为O(| E |+| V | log | V |)。由于NGenerics是一个众所周知的库,它可能是Prim算法的最佳实现,或者至少有一个比O(| V | ^2)更好的实现

但是,有一个问题:
如果我想使用NGenerics库,我必须将图形的所有边添加到NGenerics图形数据结构中。类似这样的内容(这是伪代码):

然而,代码的这一部分显然具有O(| V | ^2)时间复杂度,这有点超出了使用具有更好算法实现的库的目的。嗯,不是真的,因为常数也会产生影响,但我的算法现在是O(| V | ^2),这仍然令人沮丧


不管怎样,我是不是错过了什么?我能用O(| E |+| V | log | V |)来做这件事吗?

O(| V | ^2)
不是问题,如果
E |
也是
O(| V | ^2)
。@Dennis Meng:噢。哇!我怎么能看不到这个?我知道这有点奇怪。非常感谢。
for i = 0 to |V| - 1
  for j = i + 1 to |V| - 1
    graph.Add(new Edge(vertices[i], vertices[j])