问题标签 [prims-algorithm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - Prim 算法时间复杂度
我正在查看 Prim 算法的Wikipedia 条目,我注意到它与邻接矩阵的时间复杂度为 O(V^2),而其与堆和邻接列表的时间复杂度为 O(E lg(V)),其中 E 是边数和 V 是图中的顶点数。
由于 Prim 算法用于更密集的图中,E 可以接近 V^2,但是当它接近时,堆的时间复杂度变为 O(V^2 lg(V)),大于 O(V^2)。显然,与仅搜索数组相比,堆将提高性能,但时间复杂度另有说明。
算法实际上是如何随着改进而变慢的?
java - Prim算法的实现
对于我的 CS 类,我需要在 Java 中实现 Prim 算法,并且我在优先级队列步骤中遇到问题。我有优先级队列的经验,并且了解它们通常可以工作,但我在某个特定步骤时遇到了麻烦。
我创建了一个包含键值(我假设它是连接到节点的最轻的边缘)和父节点的节点类。我的问题是我不明白将节点添加到优先级队列中。当父节点设置为 NIL 并将键设置为 ∞ 时,将所有节点添加到优先级队列对我来说没有意义。
algorithm - Prim的算法时间复杂度是ElogV使用Priority Q如何?
我使用的伪代码:
根据我的理解:
- 第 1 行:执行
V-1
次数。 - 第 2 行:所有顶点的度数之和时间......即
2E
时间
对于第 2 行:第 3 行和第 4 行需要时间,因为我们正在逐一log E
添加/删除所有边缘。PQ
所以总计time
= V-1+2E.logE
=E.log E
但是书上说是这样E.logV
,你能解释一下为什么会这样吗?
c - 如何将 Prim 算法变成 Kruskal 算法?
我已经在 C (www.bubbllellicious.es/prim.tar.gz) 中实现了Prim 的算法,但我只是想知道如何将其转换为Kruskal 的算法。
看起来它们非常相似,但我无法想象如何将旧代码修改为新代码。给点建议什么的就好了。我知道这很容易,但我仍然是 C 编程的 n00b ......
java - Java:Prim 的斐波那契堆?(JGraphT)
JGraphT有一个很好的斐波那契堆类。如何使用它来实现Prim 的最小生成树算法?
java - Java:我的 Prim 看起来怎么样?
我正在尝试用 JGraphT 实现 Prim 的最小生成树算法。它看起来怎么样?
我遇到的一个问题是 JGraphT 对所有事情的处理方式都像它所指示的那样。所以有时有必要做出一些尴尬的调用来逆转g.getEdgeSource(e)
,g.getEdgeTarget(e)
如果他们没有碰巧是正确的。
我最初尝试使用 JGraphT 的 Fibonacci Heap 来实现这一点,但它太难了,所以我只是做了一个常规的 PQ。
我没有将不存在的边的权重设置为无穷大,而是没有将其添加到队列中。
建议?风格问题?明显的低效率?我应该使用的代码而不是我自己的代码?
graph - Prim 的 MST:起始节点重要吗?
我直观地觉得,如果使用 Prim 的算法来查找图的最小生成树,那么选择哪个根节点都没有关系 - 生成的 MST 无论如何都会具有相同的权重。这个对吗?
algorithm - Prim 的最小生成树算法 - 算法混淆
我一直在学习 Cormen 等人的书,我对他们提供的算法有点困惑。我已经通过维基百科了解 Prim 算法的概念是如何工作的,但我无法使用我书中提供的算法来模仿这种工作方式。
请参阅本章的在线副本: http ://www.cs.cmu.edu/afs/cs/academic/class/15451-s04/www/Lectures/minimumSpanningTrees.pdf
算法在上述链接的第 13 页给出,示例图在前一页。
现在,在示例案例中使用算法,在第一步中:
u <--- 节点 A 到 ExtractMin(Q)。然后根据图表在 Adj[u] 中有两个条目:节点 b 和节点 h。
现在首先设置 v <---- 节点 b。然后检查 v 是否属于 Q。确实如此。检查是否 w(u,v) < key[v]。真的。所以 PI[v] <--- u 和 key[v] <--- w(u, v)。我得到了这么多。这显示在第 12 页图表的 (b) 中。
但是算法说“对于 Adj[u] 中的每个 v”。
所以下一步应该设置v <---节点h。然后检查 v 是否属于 Q。确实如此!w(u,v) < key[v]?这是!因为 key[v] = 无穷大!但是该图显示了 (c) 部分的不同步骤!
啊啊啊!为什么?
algorithm - 为什么 Kruskal 和 Prim MST 算法对稀疏图和密集图有不同的运行时间?
我试图理解为什么 Prim 和 Kruskal 在稀疏图和密集图方面具有不同的时间复杂度。在使用了几个小程序来演示每个小程序是如何工作的之后,我仍然对图的密度如何影响算法感到有些困惑。我希望有人能给我一个正确的方向。