Prim算法

java实现Prim算法 1 问题描述 何为Prim算法? 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里... 阅读详情

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.data.struct;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

public class Prim {
	private Node[] list;
	private Set<Node> restSet = new HashSet<Node>();
	private Set<Node> computedSet = new HashSet<Node>();

	public Prim(int v, int e) {
		System.out.println("v:" + v + " e:" + e);
		list = new Node[v];
		for (int i = 0; i < v; i++) {
			Node node = new Node();
			node.id = i;
			node.key = Integer.MAX_VALUE;
			list[i] = node;
		}
		System.out.print("weight:");
		for (int i = 0; i < e; i++) {
			int v1 = new Random().nextInt(v);
			int v2 = new Random().nextInt(v);
			if (v1 == v2) {
				continue;
			}
			while (true) {
				Node node = list[v1];
				Node x = node;
				boolean already = false;
				while (node.next != null) {
					if (node.next.id == v2) {
						already = true;
						break;
					}
					node = node.next;
				}
				if (already == true) {
					break;
				}
				Node ex = new Node();
				ex.id = v2;
				ex.w = new Random().nextInt(e);
				System.out.print(ex.w + " ");
				node.next = ex;
				break;
			}
		}
		System.out.println();
	}

	public void prim() {
		list[0].key = 0;
		computedSet.add(list[0]);
		for (int i = 1; i < list.length; i++) {
			restSet.add(list[i]);
		}
		
		Node w=list[0].next;
		Node u=list[0];
		while (w != null) {
			if(w.w<list[w.id].key){
				w.parent=u;
				w.key=w.w;
			}
			w = w.next;
		}


		while (restSet.size() > 0) {
			 u = extractMin();
			 if(u==null){
				 break;
			 }
			computedSet.add(u);
			 w=u.next;
			while (w != null) {
				Iterator<Node> it2 = computedSet.iterator();
				boolean has = false;
				while (it2.hasNext()) {
					if (w.id == it2.next().id) {
						has = true;
						break;
					}
				}
				if (!has) {
					if(w.w<list[w.id].key){
						list[w.id].parent=u;
						list[w.id].key=w.w;
					}
				}
				w = w.next;
			}

		}

	}

	public Node extractMin() {
		Iterator<Node> it = computedSet.iterator();
		int id = -1;
		int minW = Integer.MAX_VALUE;
		while (it.hasNext()) {
			Node node = it.next();
			Node w = node.next;
			while (w != null) {
				Iterator<Node> it2 = computedSet.iterator();
				boolean has = false;
				while (it2.hasNext()) {
					if (w.id == it2.next().id) {
						has = true;
						break;
					}
				}
				if (!has) {
					if (minW > w.w) {
						id = w.id;
						minW = w.w;
					}
				}
				w = w.next;
			}
		}
		if(id==-1){
			return null;
		}
		return list[id];
	}

	public void printG() {
		for (int i = 0; i < list.length; i++) {
			Node node = list[i];
			System.out.print(node.id + "=>");
			while (node.next != null) {
				System.out.print(node.next.id + "(" + node.next.w + ")=>");
				node = node.next;
			}
			System.out.println();
		}

	}
	
	public void printTree(){
		for(int i=0;i<list.length;i++){
			Node node=list[i];
			while(node.parent!=null){
			  System.out.print(node.id +" ");;
			  node=node.parent;
			}
			System.out.print(node.id+" ");
			System.out.println();
		}
	}

	public Node findSet(Node x) {
		if (x.parent != x) {
			x.parent = findSet(x.parent);
		}
		return x.parent;
	}

	public static class Node {
		private int id;
		private Node next;
		private int w;
		private int key;
		private Node parent;
	}

	public static void main(String[] args) {
		Prim p = new Prim(5, 20);
		p.printG();
		p.prim();
		p.printTree();

	}

}

 

Kruskal算法和Prim算法 Kruskal算法和Prim算法 在无向图中,连通且不含圈的图称为树。给定一个无向图G=(V,E),连通G中所有点,且边集使E的子集的树称为G的生成树,其中权值最小的生成树称为最小生成树(MST)。构造MST的算法有很多,最常见的即是Kruskal算法和Prim算法。 Kruskal算法 ... 阅读详情

相关推荐

算法——Prim算法

Prim算法是一种用于求解图的最小生成树的算法。该算法得名于美国计算机科学家罗伯特·普林姆(Robert C. Prim)。Prim算法的基本思想是从一个起始节点开始,并选择与当前生成树相连的边中权值最小的边,然后将该边加入到生成树中,再选择下一条权值最小的边,直到生成树覆盖了所有节点为止。祝您好运!

百锦再的博客 1万+

离散数学图论习题解析,欧拉,哈密顿,powell着色,Prim与Kruskal最小生成树

1 注:第一题包含了大部分知识,为了记忆方便,全部原理都有注明,后面的题将简略 各点度数 节点 A B C D E F 度数 3 3 3 2 5 2 满足握手定理 握手定理为 各点度数和=边数*2 度数和为3+3+3+2+5+2=18 边数为9 不是欧拉图 存在欧拉回路的图称为欧拉图,而无向图存在欧拉回路的充要条件是图中所有节点度数均为偶数或者只有两个节点为奇数,发现图中A,B,C,E都为奇数,所以没有欧拉回路。 不满足哈密顿的充分条件 哈密顿图的充分条件是具有n节点的简单图G

小松与蘑菇 2238

最小生成树的Prim算法(贪心选择)

C++实现使用贪心算法,通过使用最小优先权队列实现贪心选择。首先输入结点数和边数,再输入无向图各边权重在邻接矩阵中的有效值(两点之间无路径默认边权为-1),输出结果为最小生成树中的结点,每行两个数字,是两个结点编号,表示这两点连通,即有路径存在。

最小生成树:Prim算法

讲构建最小生成树的算法前,先来回顾一下什么是生成树,什么是最小生成树?生成树是指:在一个连通图Graph中,包含Graph中所有n个顶点的极小连通子图,一定包含Graph中的n-1条边(如果小于n-1条边,生成树会不连通。如果大于n-1条边,就一定会产生回路,那么就不是树了,树中不能产生回路)。且生成树不唯一。举个例子: 这个无向连通图的生成树分别有 什么是最小生成树? ...

大力海棠的博客 2万+

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 683

PackML工业标准解析:统一机器状态管理与数据交换的实践指南

在工业自动化与智能制造领域,实现设备间的互联互通与高效协同是核心挑战。这背后依赖于一套标准化的机器行为与数据交换规范,其原理在于通过定义统一的状态模型与接口协议,消除不同厂商设备间的“语言”隔阂。这项技术的核心价值在于大幅降低系统集成复杂度、提升运维效率与生产透明度,是构建数字化工厂的基石。其典型应用场景包括包装机械、离散制造产线等需要多设备协同的领域。本文聚焦的PackML(包装机械语言)标准,正是这一理念的杰出实践,它通过一套严谨的**状态机模型**和**数据标签(PackTags)** 体系,为机器提

weixin_30070339的博客 403

普林演算法 (Prim's algorithm)

Prim's algorithm 是以增加節點的觀念做為出發點。 首先以某一節點當作出發點,在與其相連且尚未被選取的節點裡,選擇權重最小的邊, 將新的節點加入。如此重覆加入新節點,直到增加了n - 1條邊為止。(假設有 n 個節點) 起始。 假設從 a 開始,相鄰節點的邊有三條 (8, 12, 13),最小的邊為 8。 我們選擇加入權重為 8 的邊,將節點 c

it小白专栏 7230

瑞芯微rk3568移植openbmc(一)----关于ob移植的优缺点

基于rock3a的单板,CPU为瑞芯微rk3568的环境,移植了openbmc

feixiang3839的专栏 5539

图的 最小生成树算法 原理简介:Prim’s algorithm and Kruskal’s algorithm

文章目录GraphMinimum Spanning Tree(最小生成树))生成算法1. Prim's algorithm( 普林演算法 )实现与 Dijkstra 的差异2.Kruskal's algorithm(克鲁斯卡尔算法)实现 Graph Minimum Spanning Tree(最小生成树)) 定义:For an undirected graph G,is a tree formed...

qq_31534103的博客 4642

Cadence Allegro16.6怎么导出器件引脚信息的报告

当我们需要用到器件的引脚相关信息时,可以利用allegro中的reports这个功能导出器件的相关信息。下面是具体的操作步骤。

suyucheng66的博客 5775

Android Studio打包全攻略---从入门到精通

初出茅庐 手动打包怎么手动打包项目写完了,现在需要把应用上传到市场,问题出现—怎么把代码变成.apk(Android的可安装文件)。 1. 创建签名文件 2. 填写好签名参数 3. 生成APK 注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了为什么要打包我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project

我早就想,要这样载着你,翻山越岭 2万+

prim算法

prim算法 prim算法(普利姆算法):对图G(V,E)设置集合S,存放已访问的顶点,然后每次从集合V-S中选择与集合S的最短距离最小的一个顶点(记为u),访问并加入集合S。之后,令顶点u为中介点,优化所有从u能到达的顶点v与集合S之间的最短距离。执行n次(n为顶点个数),直到集合S已包含所有顶点。 算法实例演示 首先让我们来看一个example。如下图所示,图a是一个连通图(右图是图a对应的邻接矩阵,假设图中的边的权值大于0),我们现在基于该图来演示Prim算法的过程。 我们选择一个起点,然后在与起

qq_36314864的博客 3万+

130页5万字某市档案馆数字档案馆建设方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容:国家档案局证实颁布《数字档案馆建设指南》, 明确了数字档案馆建设原则、要求、目标,对相关系统建设内容、功能要求进行了概括和详细说明。数字档案馆系统建设应以 OAIS&nbsp;参考模型为设计基础,以实现数字资源的长期保存与可信管理。设计的数字档案馆系统架构如下图。图-1 数字档案馆体系结构数字档案馆建设包括五大层次和三大保障体系:

zuoan1993的博客 1182

Prim算法和Dijkstra算法区别

在图论中,

dutmathjc的博客 1万+

CEEMDAN算法及其应用

本博文主要介绍CEEMDAN算法的原理及其在信号去噪方面的应用

总结论文中的算法并给出论文的复现代码 6万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Prim算法、Kruskal算法

文章目录Prim算法Kruskal算法 主要内容: Prim算法 最小生成树对应的问题一般都是无向图,最小生成树所构成的图总边权之和最小,但不能是环,否则不能称之为"最小"。 Prim算法是求解最小生成树的算法之一,适用于稠密图,Prim算法和Dijkstra算法步骤很相似,不同的是Dijkstra需要更新所有邻居到起点的距离,也就是"松弛操作",但Prim不需要,只需要把距离集合最近的点加...

ker的博客 5429

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Prim 算法

最小生成树

2401_88036229的博客 1696

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Prim算法和Kruskal算法

Prim算法和Kruskal算法都能从连通图找出最小生成树。区别在于Prim算法是挨个找,而Kruskal是先排序再找。       一、Prim算法:     Prim算法实现的是找出一个有权重连通图中的最小生成树,即:具有最小权重且连接到所有结点的树。(强调的是树,树是没有回路的)。     Prim算法是这样来做的:      首先以一个结点作为最小生成

黄玮鹏的专栏 3万+

prim算法的实现

添加链接描述 运行了一下prim 算法 觉得这个程序还可以 后期可以在此基础上做较大的改动 故此分享了这个代码 #include <stdio.h> #define MAXVEX 10 #define TRUE 1 #define FALSE 0 #define INF 65535//此处是权值极大值 #define LENGTH(a) (sizeof(a) / sizeof(a[...

Zyong139064359的博客 2527

Prim 算法介绍

在生成树的过程中,把已经在生成树中的节点看作一个集合,把剩下的节点看作另外一个集合,从连接两个集合的边中选择一条权值最小的边即可。首先任选一个节点,例如节点1,把它放在集合 U 中,U={1},那么剩下的节点为 V-U={2,3,4,5,6,7},集合 V 是图的所有节点集合。现在只需要看看连接两个集合(U 和 V-U)的边中,哪一条边的权值最小,把权值最小的边关联的节点加入集合 U 中。从上图可以看出,连接两个集合的 3 条边中,1-2 边的权值最小,选中它,把节点 2 加入集合 U 中,U={1,2},

实践求真知 4823
上一篇: Kruskal算法计算最小生成树
下一篇: 单源最短路径-Bellman-Ford算法
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值