当前位置: 首页 > news >正文

数据结构(14)

目录

一、最小生成树(MST)

1、最小生成树的核心定义与性质

(1)定义

(2)关键性质

2、构造最小生成树的经典算法

(1)Kruskal 算法(“加边法”)

(2)Prim 算法(“加点法”)

3、示例说明(对比两种算法)

(1)Kruskal 算法过程

(2)Prim 算法过程(从顶点 0 出发)

4、适用场景

二、普利姆算法(prime)

三、克鲁斯卡尔算法(kruskal)

一、最小生成树(MST)

(1)在网络的多个生成树中,寻找一个各边权值之和最小的生成树

(2)使用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发也可以得到不同的生成树

(3)按照生成树的定义,n 个顶点的连通网络的生成树有 n 个顶点,n-1 条边

(4)准则:

① 必须只使用该网络中的各边来构造最小生成树

② 必须使用且仅使用 n-1 条边来联络网络中的 n 个顶点

③ 不能使用产生回路的边

(5)MST性质:若 U 集是 V 的一个非空子集,若 (u_{0},v_{0}) 是一条最小权值的边,其中 u_{0}\in Uv_{0}\in V-U,则(u_{0},v_{0}) 必在MST上

最小生成树(Minimum Spanning Tree, MST)是针对带权连通无向图的一种特殊生成树,其核心特点是:包含图中所有顶点,且所有边的权重之和(总权重)在所有可能的生成树中最小。MST 既保留了原图的连通性(作为生成树的基本属性),又通过最小化总权重,在网络设计、路径规划等场景中具有重要实用价值(如最小成本布线、最短管道铺设等)。

1、最小生成树的核心定义与性质

(1)定义

对于一个带权连通无向图 G=(V,E)(V 为顶点集,E 为带权边集),其最小生成树是满足以下条件的子图 T:

  • T 包含 G 中所有顶点(VT​=V)。
  • T 是连通的,且无环(是一棵生成树)。
  • T 中所有边的权重之和 ∑(w(e)) 是所有可能生成树中最小的。

(2)关键性质

  • 边数固定:含 n 个顶点的 MST 有且仅有 n−1 条边(生成树的基本性质)。
  • 唯一性:若图中所有边的权重互不相同,则 MST 是唯一的;若存在相同权重的边,可能有多个 MST(但总权重相同)。
  • 割边性质:在图中任意划分顶点为两个子集(割集),连接两个子集的所有边中,权重最小的边一定属于 MST(用于证明 MST 算法的正确性)。
  • 回路性质:图中任意回路,回路中权重最大的边一定不属于 MST(若包含该边,删除后可形成总权重更小的生成树)。

2、构造最小生成树的经典算法

构造 MST 的核心思想是 “在保持连通且无环的前提下,选择权重最小的边”,两大经典算法分别是Kruskal 算法和Prim 算法。

(1)Kruskal 算法(“加边法”)

  • 核心思路:按边的权重从小到大排序,依次选择边加入 MST,若加入后不形成环,则保留该边;直到加入 n−1 条边为止。
  • 关键步骤
    1. 对所有边按权重从小到大排序。
    2. 初始化 MST 为 “空集”,顶点各自独立(不连通)。
    3. 按排序顺序遍历边:若边的两个顶点分属不同的连通分量(加入后无环),则将该边加入 MST,并合并两个连通分量。
    4. 重复步骤 3,直至 MST 包含 n−1 条边。
  • 环检测工具:并查集(Union-Find),高效判断两顶点是否连通及合并连通分量(时间复杂度接近 O(1))。
  • 时间复杂度:O(eloge)(主要耗时在边的排序,e 为边数),适合稀疏图(边数少)。

(2)Prim 算法(“加点法”)

  • 核心思路:从任意顶点出发,逐步将 “与当前 MST 连通且权重最小的顶点” 纳入 MST,直到包含所有顶点。
  • 关键步骤
    1. 选择起始顶点 v0​,将其加入 MST,标记为 “已访问”。
    2. 记录所有未访问顶点到 MST 的 “最小距离”(即该顶点与 MST 中某顶点的边的最小权重)。
    3. 选择 “最小距离” 最小的未访问顶点 u,将其加入 MST,并更新其他未访问顶点到 MST 的 “最小距离”(若通过 u 连接的边权重更小)。
    4. 重复步骤 2-3,直至所有顶点均加入 MST(共加入 n−1 条边)。
  • 优化工具:优先队列(如最小堆),高效获取 “最小距离” 的顶点(时间复杂度 O(logn))。
  • 时间复杂度:O(elogn)(n 为顶点数),适合稠密图(边数多)。

3、示例说明(对比两种算法)

假设有带权连通无向图 G:顶点 V={0,1,2,3},边及权重:(0,1,4),(0,2,2),(0,3,6),(1,3,1),(2,3,3)

(1)Kruskal 算法过程

  • 边排序:(1,3,1)<(0,2,2)<(2,3,3)<(0,1,4)<(0,3,6)。
  • 选边:
    • 加入 (1,3,1)(1 和 3 连通)。
    • 加入 (0,2,2)(0 和 2 连通)。
    • 加入 (2,3,3)(2 与 3 连通,此时 0-2-3-1 全连通,共 3 条边,停止)。
  • MST 总权重:1+2+3=6。

(2)Prim 算法过程(从顶点 0 出发)

  • 初始:MST = {0},距离:1→4,2→2,3→6。
  • 选距离最小的 2(距离 2),加入 MST,更新距离:3→min (6, 3) = 3。
  • 选距离最小的 3(距离 3),加入 MST,更新距离:1→min (4, 1) = 1。
  • 选距离最小的 1(距离 1),加入 MST,共 3 条边,停止。
  • MST 总权重:2+3+1=6。

4、适用场景

MST 的核心价值是 “以最小成本保持连通”,典型应用包括:

  • 网络布线:在多个建筑物间铺设电缆,使总成本最低且所有建筑物连通。
  • 交通规划:修建公路连接多个城市,总里程最短且确保城市间可互达。
  • 电路设计:芯片中连接多个元件,导线总长度最小。
  • 聚类分析:将相似数据点(顶点)按最小 “距离”(权重)聚为一类,形成连通子图。

二、普利姆算法(prime)

思路:将顶点归并,与边数无关,是用于稠密图

设:N=(V,E)是个连通图,另设U为最小生成树的顶点集,TE是最小生成树的边集

步骤:① 初始态:U={u_{0}},(u_{0}\in V),TE={ }

② 从E中选择定点分别属于U、V-U两个集合,且权值最小的边  (u_{0},v_{0}) ,将顶点 v_{0} 归并到集合U中,边 (u_{0},v_{0}) 归并到TE中

③ 直到 U=V 为止,此时 TE 中必有 n-1 条边,T=(v,{TE}) 就是最小生成树

例题:

增设一辅助数组 Closedge[n]:

adjvexlowcost

Closedge[n]:V-U 中顶点 v_{n}

adjvex:v_{n} 在 U 中邻点 u

lowcost:u 与 v_{n} 之间对应的边权

要使:Closedge[n].lowcost= min(u,v_{i})   u\in U

三、克鲁斯卡尔算法(kruskal)

思路:归并边,适合稀疏图——邻接表

设 N={V,E} 是有 n 个顶点的连通图

步骤:① 首先构造一个只有 n 个顶点,但没有边的非连通图T={V,\o\o},图中每个顶点自成一个连通分量

② 当边集 E 中选到一条具有最小权值的边时,若该边的两个顶点落在T 中不同的连通分量上,则将此边加入到生成树的边集合T中,否则将此边舍去,重新选择一条权值最小的边

③ 如此重复下去,直到所有顶点在同一个连通分量上为止。此时的 T 即为所求最小生成树

例题:

http://www.dtcms.com/a/555259.html

相关文章:

  • 无锡做网站的html代码翻译器
  • 华为云 HCCDP-Solution Architectures
  • 温州网页建站模板大气的门户网站
  • 苏州园区网站制作公司织梦网站模板如何安装
  • 优质网站建设方案外贸网站定制制作公司
  • 国内较好的网站设计公司宁波网页平面设计
  • 创建网站英语十堰seo优化教程
  • 自己怎么做视频收费网站网站开发感受
  • 外贸营销网站seo外包收费
  • 体育局网站建设方案wordpresswoocommerce
  • 网站网页转小程序教程编程网站开发
  • 网站图标怎么做惠州seo博客
  • 郑州网站建设索q479185700Light模板WordPress
  • 南昌网站建设如何做婚庆网站图片下载
  • 网站备案流程及步骤单页seo如何优化
  • ps怎么做网站网页欢迎页面设计
  • 免费做爰小说网站郑州网站制作十年乐云seo
  • 南宁网站建设哪个好手机怎么打开禁止访问的网站
  • 怎么免费创建个人网站长治市住房保障和城乡建设管理局网站
  • 北京盛赛车网站开发黄骅市做网站价格
  • 外国人爱做视频网站防水网站建设
  • 查看域名之前做的网站岳阳平台网站制作
  • 网站建设的流程住宅设计网站推荐
  • 阿里通义千问之文本生成图像
  • 申请的网站怎么建设有经验的常州网站建设
  • 温州网站网络公司WordPress书籍插件
  • cse复习 文件共享 nfs服务
  • 广州企业自助建站哈尔滨网页制作要多少钱
  • 360网站推广官网硅钙钾镁肥做性视频网站有哪些
  • 一起做单网站怎么样最流行网站开发工具