2023/4/13总结

news/2024/7/15 18:42:01 标签: 算法, 图论, 数据结构

最小生成树

一、Prim算法

1.prim算法也被称为“加点法”,因为该算法是先从任意一顶点出发不断的选择目前距离最近且未被选择的点加入到已选的集合中,直到所有的点都被选到。(和最短路径中的Dijkstra算法很像)

2.prim算法的实现

  • 首先将初始顶点u加入集合U中,然后用一个数组dis记录下其余点vj到顶点u的边权信息(dis[k]代表从u到k的权为dis[k])。
  • 然后设置一个循环循环,循环n-1次即可。(n为顶点数所以要将每个点连接起来至少需要n-1条边)循环中先在dis数组中找到权值最小的顶点k,用一个变量累加这条边的权值。然后将这个顶点k加入集合U,相当于新增加了一条从k到j的边,再将dis数组更新为新的权值。

 3.prim算法的时间复杂度是O(n*n)与该网中的边数无关,因此适用于稠密图的最小生成树。

4.代码如下:

#include"stdio.h"
main()
{
	int n,m,i,j,k,min,t1,t2,t3;
	int e[7][7],dis[7],book[7]={0};
	int inf=99999999;
	int count=0,sum=0;
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
	if(i==j) e[i][j]=0;
	else e[i][j]=inf;
	for(i=1;i<=m;i++)
	{
		scanf("%d %d %d",&t1,&t2,&t3);
		e[t1][t2]=t3;
		e[t2][t1]=t3;
	}
	for(i=1;i<=n;i++)
	dis[i]=e[1][i];
	book[1]=1;
	count++;
	while(count<n)
	{
		min=inf;
		for(i=1;i<=n;i++)
		{
			if(book[i]==0&&dis[i]<min)
			{
				min=dis[i];
				j=i;
			}
		}
		book[j]=1;
		count++;
		sum=sum+dis[j];
		for(k=1;k<=n;k++)
		{
			if(book[k]==0&&dis[k]>e[j][k])
			dis[k]=e[j][k];
		 } 
	}
	printf("%d",sum);
} 

 二、kruskal算法

1.该算法为“加边法”,每一次都选择插入目前还未被加入最小生成树的一条边插入到最小生成树中,直到加入了n-1条边,将n个顶点相连。

2.kruskal算法实现:

  • 将存储边的结构体数组(该结构体中有两个元素代表边的两个顶点)中的元素按权值从小到大排序。
  • 每一次从排好序的数组中选出一条边,对这两个顶点进行判断看这两个点是否是分属于不同的连通分量,如果不等则合并这两个连通分量。如果它们属于同一个连通分量,则舍去这条边,选择下一条边进行判断。

3.关键代码如下:

  for(i=1;i<=m;i++)//开始从小到大枚举每一条边
   {
      if(merge(e[i].u,e[i].v))//判断一条边的两个顶点是否已经连通,即判断是否已在同一个集合中
      {
        count++;//如果目前尚未不连通,则选用这条边
        sum=sum+e[i].w;
      }
    if(count==n-1 ) break;//直到选用了n-1条边之后退出循环
    }

 三、prim算法和kruskal算法的区别

1.prim是加点法,每一次都选择增加一条边来建立一棵树。prim每次都是选择距离生成树最近的边。

2.Kruskal是加点法,按照从小到大的顺序去考察每一条边,每次都是先给最小边机会。

3.前者常用于稠密图,后者常用于稀疏图。

 

 


http://www.niftyadmin.cn/n/220632.html

相关文章

如何使用Socks5代理IP提高网络安全性

随着网络的快速发展&#xff0c;网络安全问题变得越来越重要。为了保障网络安全&#xff0c;人们普遍使用代理IP&#xff0c;其中Socks5代理IP是一种常用的选择。本文将介绍什么是Socks5代理IP&#xff0c;以及如何使用它提高网络安全性。 一、什么是Socks5代理IP Socks5代…

Elasticsearch:使用 ingest pipeline 来管理索引名称

在我之前的文章 “Elasticsearch&#xff1a;使用 pipelines 路由文档到想要的 Elasticsearch 索引中去” 我详述了如何使用已有的 date_index_name 处理器来把文档归类到所需要的和文档日期相关的的索引中去。比如&#xff0c;我们想把 2023 年 4 月的所有文档写入到 my-index…

WuThreat身份安全云-TVD每日漏洞情报-2023-04-14

漏洞名称:SecurePoint UTM 信息泄露 漏洞级别:严重 漏洞编号:CVE-2023-22620 相关涉及:SecurePoint UTM < 12.2.5.1 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-09257 漏洞名称:3CX 桌面应用程序权限提升 漏洞级别:中危 漏洞编号:CVE-…

BGP基础知识

今天海翎光电的小编主要介绍一下BGP的相关基础知识&#xff0c;文章浅显易懂&#xff0c;适合对BGP完全没有了解的同学。 BGP介绍 边界网关协议BGP&#xff08;Border Gateway Protocol&#xff09;是一种实现自治系统AS&#xff08;Autonomous System&#xff09;之间的路由可…

神经网络参数初始化方法 | 深度学习

为什么需要初始化神经网络参数&#xff1f; 神经网络参数的初始值会影响网络的拟合能力和优化效果&#xff0c;如果初始值过大或过小&#xff0c;可能会使得模型的梯度爆炸或梯度消失&#xff0c;导致网络无法收敛或训练效率低下。因此&#xff0c;合适的参数初始化可以提高模…

【C++】哈希应用:位图 哈希切分 布隆过滤器

我走后&#xff0c;他们会给你们加班费&#xff0c;会给你们调休&#xff0c;这并不是他们变好了&#xff0c;而是因为我来过。------龙哥 文章目录一、位图1.位图概念2.位图实现及测试3.位图应用和面试题二、哈希切分&#xff08;hashfunc 除留余数法 控制切分的范围&#x…

逻辑回归预测泰坦尼克号乘客生存率

逻辑回归预测泰坦尼克号乘客生存率 描述 RMS泰坦尼克号的沉没是历史上最臭名昭着的沉船之一。1912年4月15日&#xff0c;在她的处女航中&#xff0c;泰坦尼克号在与冰山相撞后沉没&#xff0c;在2224名乘客和机组人员中造成1502人死亡。这场耸人听闻的悲剧震惊了国际社会&…

凌恩生物美文分享|基于宏基因组的氮循环分析内容重磅升级!

元素循环是生物地球化学循环的重要环节&#xff0c;主要涉及碳、氮、磷、硫等元素的循环过程。凌恩生物强势推出基于宏基因组的氮循环研究方案&#xff0c;构建了完整的氮循环循环模式图&#xff0c;对宏基因组数据进行深入挖掘&#xff0c;各部分结果图可直接用于文章发表&…