- 浏览: 1397834 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (346)
- linux (10)
- hbase (50)
- hadoop (23)
- java (52)
- java multi-thread (13)
- Oracle小记 (41)
- 机器学习 (12)
- 数据结构 (10)
- hadoop hive (16)
- java io (4)
- jms (1)
- web css (1)
- kafka (19)
- xml (2)
- j2ee (1)
- spring (6)
- ibatis (2)
- mysql (3)
- ext (3)
- lucene (3)
- hadoop pig (3)
- java nio (3)
- twemproxy (1)
- antlr (2)
- maven (6)
- mina (1)
- 列数据库 (1)
- oozie (2)
- mongodb (0)
- 报错 (0)
- jetty (1)
- neo4j (1)
- zookeeper (2)
- 数据挖掘 (3)
- jvm (1)
- 数据仓库 (4)
- shell (3)
- mahout (1)
- python (9)
- yarn (3)
- storm (6)
- scala (2)
- spark (5)
- tachyon (1)
最新评论
-
guokaiwhu:
赞啊!今晚遇到相同的问题,正追根溯源,就找到了博主!
hbase 报错gc wal.FSHLog: Error while AsyncSyncer sync, request close of hlog YouAr -
喁喁不止:
很清楚,有帮助。
hive常用函数 -
dsxwjhf:
Good job !!
kafka获得最新partition offset -
Locker.Xai:
参考了
freemaker教程 -
maoweiwer:
为啥EPHEMERAL_SEQUENTIAL类型的节点并没有自 ...
zookeeper 入门讲解实例 转
带权图是实际情况中经常使用的,如城市道路,etl优化等等。
在带权图中经常遇到的问题就是生成最小生成树,就是加权总值最小的路径,这里用prime算法实现
prim算法的总思路
/** * 生成最小生成树 * 将顶点放到树集合中,重复一下操作 * 1.找到最新的vertex到其他vertex的所有edge,其他vertex不能在树集合中,把这些edge放到优先队列中 * 2.找到权值最小的边,把edge和edge所到达的vertex放到树集合中 */
prim算法的过程示意图:这里贴一个邮电大学的
prim算法代码,java实现:
package com.Construction.DiscrectGraph; import java.io.ObjectOutputStream.PutField; public class Graph { /** * max vertx number */ private final int MAX_VERTX = 20; /** * max distance value */ private final int INFINITY = 1000000; /** * node list */ private Vertex vertexList[]; /** * adjacency matrix */ private int adjMat[][]; /** * graph node number */ private int nVerts; /** * prime tree number */ private int nTree; /** * current tree node */ private int currentVert; private PriorityQ priorityQueue; public Graph(){ vertexList = new Vertex[MAX_VERTX]; adjMat = new int[MAX_VERTX][MAX_VERTX]; nVerts = 0; for (int i = 0; i < MAX_VERTX; i++) { for (int j = 0; j < MAX_VERTX; j++) { adjMat[i][j] = INFINITY; } } priorityQueue = new PriorityQ(); } /** * 添加元素 * @param label */ public void addVertex(char label){ //添加元素,并将计数器加一 vertexList[nVerts++] = new Vertex(label); } /** * 添加边 * @param sv * @param dv * @param dis */ public void addEdge(int sv,int dv,int dis){ adjMat[sv][dv] = dis; adjMat[dv][sv] = dis; } /** * 生成最小生成树 * 将顶点放到树集合中,重复一下操作 * 1.找到最新的vertex到其他vertex的所有edge,其他vertex不能在树集合中,把这些edge放到优先队列中 * 2.找到权值最小的边,把edge和edge所到达的vertex放到树集合中 */ public void mstw(){ currentVert = 0; while (nTree < nVerts -1) { vertexList[currentVert].isInTree = true;//步骤2,放到树中 nTree ++; for (int i = 0; i < nVerts; i++) { if(i == currentVert) continue; // visit other graph node if(vertexList[i].isInTree) continue;//visit other graph don't contain in tree -- to avoid connect unneccessary node int dis = adjMat[currentVert][i]; if (dis == INFINITY) continue; putInPQ(i, dis); } if (priorityQueue.getSize() == 0) { return; } Edge currentMinEdge = priorityQueue.removeMin(); int sVert = currentMinEdge.srcVert; currentVert = currentMinEdge.destVert; System.out.println(vertexList[sVert].label); System.out.println(vertexList[currentVert].label); System.out.println(" "); } for (int i = 0; i < nVerts; i++) { vertexList[i].isInTree = false; } } /** * 将循环操作1中的edge,放入优先队列中 * 优先队列中,到一个目的的边是唯一滴,所有当已经有老边了,需要比较替代 * @param vertex * @param dis */ public void putInPQ(int vertex,int dis){ int index = priorityQueue.find(vertex); if(index != -1){ Edge tempEdge = priorityQueue.peek(index); int oldDis = tempEdge.distance; if(oldDis > dis){ priorityQueue.remove(index); Edge theEdge = new Edge(currentVert, vertex, dis); priorityQueue.insert(theEdge); } }else{ Edge theEdge = new Edge(currentVert, vertex, dis); priorityQueue.insert(theEdge); } } public static void main(String[] args){ Graph g = new Graph(); g.addVertex('A'); g.addVertex('B'); g.addVertex('C'); g.addVertex('D'); g.addVertex('E'); g.addVertex('F'); g.addEdge(0, 1, 6); g.addEdge(0, 3, 4); g.addEdge(1, 2, 10); g.addEdge(1, 3, 7); g.addEdge(1, 4, 7); g.addEdge(2, 3, 8); g.addEdge(2, 4, 5); g.addEdge(2, 5, 6); g.addEdge(3, 4, 12); g.addEdge(4, 5, 7); g.mstw(); } }
发表评论
-
java内存使用查看 转
2015-10-29 14:51 868转:http://mxsfengg.iteye.com ... -
Java线上应用故障排查之二:高内存占用
2015-08-17 16:28 0搞Java开发的,经常会碰到下面两种异常: 1、java. ... -
java filechannel
2015-08-14 15:42 1053Java NIO中的FileChannel是一个连接到文件 ... -
Java线上应用故障排查之一:高CPU占用
2015-08-06 13:58 6185转http://blog.csdn.net/blade20 ... -
java注释
2015-04-10 15:49 0Java注解是附加在代码中的一些元信息,用于一些工具在编译、 ... -
转jvm
2015-03-24 14:13 1673一、回顾JVM内存分配 ... -
java 域名转换
2014-12-22 11:05 768import java.net.InetAddres ... -
freemaker教程
2014-10-13 11:56 1981新换了工作,与想象差距也太大了 最近沦落到做报表了,我就 ... -
protocal buffers入门实例
2014-09-22 21:08 1654hadoop yarn中新的系列化protocol buf ... -
正则小计
2014-09-18 20:47 0&site=(.*?)&可以匹配site的值 ... -
在HBase中应用MemStore-Local Allocation Buffers解决Full GC问题
2014-06-13 23:05 1606译者注:上个月 ... -
java ipc 实例
2014-05-21 22:59 4879java ipc实例,仿照hadoop ipc写的实例 1 ... -
java worker thread模式
2014-03-25 22:46 1977转两个帖子 一个java wo ... -
bloom filter
2014-03-09 19:41 1954看到hadoop join和hbase都有bloo ... -
java reference
2014-03-09 17:49 716转 http://www.iteye.com/to ... -
annotation实例
2014-02-11 22:04 1140加载指定目录的所有class,通过注释区分实体类 p ... -
java获取子类 转
2014-02-11 16:58 3122获取子类 package com.tools; ... -
图论 五 最短路径 最长路径
2013-09-27 21:13 7435花几个算法的简易图: 一、 dijk ... -
动态代理
2013-08-14 20:38 1081动态代理,转:http://langyu.iteye. ... -
BTree B+Tree
2013-05-04 18:31 1965参考博文 http://blog.csdn.net/v_J ...
相关推荐
图的最小生成树PRIM算法课程设计 本课程设计的主要目的是实现图的最小生成树,使用普里姆算法来实现。普里姆算法是一种常用的图算法,用于寻找无向图中的最小生成树。该算法通过逐个遍历图中的顶点,记录权值最小的...
最小生成树(Minimum Spanning Tree, MST)是图论中的一个重要概念,主要应用于网络设计、数据通信等领域,用于寻找连接所有顶点的边的集合,使得这些边的总权重尽可能小。在本压缩包中,提供了基于MATLAB实现的Prim...
本文将详细介绍两种经典算法来解决最小生成树问题:Prim算法和Kruskal算法,并以C语言实现为例进行讲解。 ### Prim算法 Prim算法是一种贪心算法,其基本思想是从一个初始节点开始,逐步添加最短的边,直到连接到...
Prim算法是一种用于寻找加权图最小生成树的经典算法,由捷克数学家Vojtěch Jarník在1930年提出,并由美国计算机科学家Robert C. Prim在1957年再次独立发现。 Prim算法的基本思想是逐步构建最小生成树,每次从已有...
在计算机科学中,Prim算法是一种常用的最小生成树算法,它可以用于解决无向图的最小生成树问题。 Prim算法的主要思想是,从某个起始点开始,逐步添加边,直到所有顶点都被连接。 在C++中,Prim算法可以通过以下...
最小生成树是图论中的一个重要概念,用于寻找一个无向加权图的边集合,这些边连接了图中的所有顶点,且总权重尽可能小。Prim算法是解决这一问题的有效方法之一,由捷克数学家Vojtěch Jarník在1930年提出,后由...
### 图的最小生成树Prim算法详解 在计算机科学与图论中,图的最小生成树(Minimum Spanning Tree,MST)是一个加权无向图的子图,它包含图中的所有顶点,并且所有边的权重之和最小。Prim算法是一种贪心算法,用于...
"最小生成树Prim算法的C语言程序" Prim 算法是最小生成树的一种特殊算法,它的特点是集合 A 的边总是只形成单棵树。该算法的基本思路是:任选一个顶点(本实验取①为起始点),将其涂红,其余顶点为白点;在一个...
Prim算法是一种贪心算法,用于寻找带权无向图的最小生成树。该算法的基本思想是从任意一个顶点出发,逐步将权重最小的边添加到生成树中,直到包含所有顶点为止。 #### 三、Prim算法实现(邻接矩阵) 对于Prim算法...
综上所述,最小生成树是图论中的核心问题,Prim算法和Kruskal算法是解决该问题的两种高效方法。在C++中,这两个算法都可以利用标准库提供的功能来实现,从而在复杂度和空间效率上达到较好的平衡。理解并熟练掌握这些...
Prim算法是一种用于寻找图中所有顶点构成的最小生成树(Minimum Spanning Tree, MST)的经典算法之一。它适用于带权无向图,并且能够确保得到的MST具有最小的总权重。Prim算法的核心思想是从任意一个顶点出发,逐步...
标题 "POJ 1751 求最小生成树Prim算法(JAVA)" 提到的是一个编程挑战,涉及图论中的经典算法——Prim算法。在计算机科学中,Prim算法是用于寻找加权无向图的最小生成树的一种有效方法。最小生成树是一棵树形结构,...
最小生成树是图论中的一个重要概念,用于寻找一个无向加权图的边集合,使得这些边连接了图中的所有顶点,同时整个边集合的总权重尽可能小。在这个问题中,Prim算法和Kruskal算法是两种常用的方法。 1. Prim算法: ...
Prim算法是一种用于寻找带权图的最小生成树的算法,它适用于稠密图,即边的数量接近于顶点数量平方的图。 Prim算法的基本步骤如下: 1. 初始化:选择一个起点,通常选择任意一个顶点作为初始集合U的成员,U开始时...
在压缩包中的"最小生成树Prim算法"文件,可能是包含了Prim算法的具体实现代码、示例输入输出或者相关教程。通过研究这个文件,可以深入理解Prim算法的工作原理,学习如何编写代码来解决最小生成树问题,也可以进行...
**Prim算法**是一种用于寻找加权图最小生成树的贪心算法。该算法以一个顶点为起点,逐步添加最短边来扩展生成树。具体步骤如下: 1. **初始化**:选择任意一个顶点作为起点,将该顶点加入到集合U(已加入生成树中的...
最小生成树是图论中的一个重要概念,用于寻找连接图中所有顶点的边集,使得这些边的总权重尽可能小。PRIM算法是由捷克数学家Vojtěch Jarník在1930年首次提出,后由美国计算机科学家R.E.普里姆(Prim)改进并推广,...