最小生成树

其实我在学最短路之前就学了生成树了,现在接着写。
本文介绍2种算法:Kruskal,Prim
PS:文中分大小写。 图为G(V,E),V为节点集合,E为边集合,但v表示某个节点(v∈V)
其实很多都和最短路差不多的,松弛操作不同而已。
前提:连通图

Kruskal:

  • 原理: 通过排序每一条边(权值递增)从|E|条边中取V-1条边出来(V个点嘛,最小生成树始终是V-1条边的),满足每次选的边的起点和终点不在一棵树上。
  • 采用: 并查集
  • 步骤:
    1. 初始化边,并以升序排序
    2. 初始化并查集,这里以p域代表, p[i]=i; // i∈[1,|V|]
    3. 循环(1~|E| : i)
      1)判断第i条边的起点和终点是否在一棵树上(使用并查集,可保证非常快的判断)
      2)如果不在的话,加入i边,并使得p[起点]=终点 或 p[终点]=起点

并查集实现:

inline int find(int x)
{
	int t = x;
	while(p[x] != x) x = p[x];
	p[t] = x;
	return x;
}
  • 分析:时间复杂度O(E) 并查集的时间太小 省略。
  • 适用于:任何连通图 稀疏图
  • 优化:我不会

Prim:

    • 原理:通过|V|-1次加入树中与v的边, min{key[v] | v∈G-已生成的最小树} 到最小树中,来实现最小生成树
    • 采用:优先队列 priority_queue (#include <queue> 要定义一个比较类来实现最小堆)
    • 步骤:
      1. 初始化key域 key[i] = INF; // i∈[1,|V|]
      2. key[S]=0; // S为最小生成树的根
      3. 初始化vis域(已生成树),且vis[i]=0; // i∈[1,|V|]
      4. 将S压入优先队列q
      5. 循环(q不为空)
        1)使u=q的队头,并将队头出队
        2)把u与树中的边加入到树中,即设置u已经在树中vis[u]=1;
        3)对以u为起点的边进行伪松弛(这些边的终点一定是不在树中的,即vis[a]!=1)。并把这些边的终点压入队列。

我说的伪松弛的指的是:if(key[i] > edge[u][i]) key[i] = edge[u][i];//注意,如果没有u->i这条路径,edge[u][i]一定要是INF,不要是0,这点在初始化时做
(如果初始化为0的话,可以这样 if(edge[u][i] && key[i] > edge[u][i]) key[i] = edge[u][i];)
(之所以叫伪松弛,因为这和松弛太像了。)

  • 分析:时间复杂度O(KV) K为优先队列解压最小的实现
  • 优化:优化堆的实现(不嫌麻烦就手打FIB堆。。优先队列是用二叉堆的。)

//好像漏洞百出,以后再来更新,欢迎大家帮忙找漏洞,欢迎吐槽

转载于:https://www.cnblogs.com/iwtwiioi/p/3521804.html

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值