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

数据结构:加权图 - 详解

一、加权图的定义

加权图是边带有权重的图结构,权重可表示距离、代价、时间、容量等实际意义,分为加权无向图加权有向图两类:

  • 加权无向图:每条无向边 (u, v) 关联一个权重 w,且 (u, v)(v, u) 权重相同;
  • 加权有向图:每条有向边 <u, v> 关联一个权重 w<u, v><v, u> 的权重可不同。

加权图的形式化表示为 G=(V, E, W),其中:

  • V 为顶点集合;
  • E 为边集合;
  • W 为权重映射,W(e) 表示边 e 对应的权重值。

资料:https://pan.quark.cn/s/43d906ddfa1bhttps://pan.quark.cn/s/90ad8fba8347https://pan.quark.cn/s/d9d72152d3cf

二、加权图的核心概念

  1. 最短路径:两顶点间权重之和最小的路径,是加权图最核心的问题之一,常见场景如地图导航的最短距离、网络传输的最小延迟。
  2. 最小生成树:仅适用于加权无向连通图,指连接所有顶点且总权重最小的边集合,且无环,常用于构建低成本的通信、交通网络。
  3. 最长路径:两顶点间权重之和最大的路径,在**加权有向无环图(DAG)**中可高效求解(关键路径问题),但含环的加权图中最长路径问题为NP难问题。
  4. 负权边与负权环
    • 负权边:权重为负数的边;
    • 负权环:路径权重之和为负数的环,若两顶点间路径包含负权环,则不存在最短路径(可绕环无限减小路径总权重)。

三、加权图的存储方式

1. 邻接矩阵

n×n 二维数组 adj 存储,adj[i][j] 表示顶点 ij 的边的权重:

优缺点

2. 邻接表

为每个顶点维护一个列表,列表元素为**(邻接顶点,边权重)**的二元组,存储该顶点直接相连的顶点及对应边的权重:

  • 加权无向图中,添加边 (u, v, w) 时,需在 u 的邻接表中添加 (v, w),同时在 v 的邻接表中添加 (u, w)
  • 加权有向图中,添加边 <u, v, w> 时,仅需在 u 的邻接表中添加 (v, w)

优缺点

  • 优点:空间复杂度为 O(|V|+|E|),适合稀疏图,遍历顶点邻接边效率高;
  • 缺点:查询两顶点间边的权重需遍历对应顶点的邻接表,时间复杂度为 O(deg(v))

四、加权图的核心算法

1. 最短路径算法

(1)Dijkstra算法
(2)Bellman-Ford算法
  • 适用场景:含负权边(无负权环)的单源最短路径,且可检测图中是否存在负权环。
  • 核心思想:松弛操作,对所有边进行 |V|-1 次松弛,若第 |V| 次仍能松弛,则存在负权环。
  • 时间复杂度O(|V|×|E|),效率低于Dijkstra算法,但兼容性更强。
(3)Floyd-Warshall算法

2. 最小生成树算法

(1)Prim算法
(2)Kruskal算法
  • 适用场景:加权无向连通图的最小生成树,适合稀疏图。
  • 核心思想:按边的权重从小到大排序,依次选择边,若边的两个顶点不在同一连通分量,则加入生成树(用并查集维护连通性),直到生成树包含 |V|-1 条边。
  • 时间复杂度O(|E|log|E|)(主要耗时在边排序)。

3. 关键路径算法

五、加权图的实现示例

1. 邻接表实现(含Dijkstra算法)

import heapq
class WeightedGraph:
def __init__(self, num_vertices, is_directed=False):
self.num_vertices = num_vertices
self.is_directed = is_directed  # 标记是否为有向图
self.adj_list = [[] for _ in range(num_vertices)]  # 邻接表元素为(邻接顶点, 权重)
def add_edge(self, u, v, weight):
"""添加加权边,u、v为顶点编号,weight为边权重"""
self.adj_list[u].append((v, weight))
if not self.is_directed:  # 无向图需添加反向边
self.adj_list[v].append((u, weight))
def dijkstra(self, start):
"""Dijkstra算法求单源最短路径,返回从start到各顶点的最短距离"""
# 初始化距离数组,无穷大表示不可达
INF = float('inf')
dist = [INF] * self.num_vertices
dist[start] = 0  # 起点到自身距离为0
# 优先队列:(当前距离, 顶点),小顶堆
pq = [(0, start)]
visited = [False] * self.num_vertices  # 标记是否已确定最短距离
while pq:
current_dist, u = heapq.heappop(pq)
if visited[u]:
continue
visited[u] = True
# 遍历u的邻接顶点,更新距离
for v, weight in self.adj_list[u]:
if not visited[v] and dist[v] > current_dist + weight:
dist[v] = current_dist + weight
heapq.heappush(pq, (dist[v], v))
return dist

使用示例

# 初始化无向加权图(5个顶点)
graph = WeightedGraph(5, is_directed=False)
# 添加边:(u, v, weight)
graph.add_edge(0, 1, 2)
graph.add_edge(0, 2, 4)
graph.add_edge(1, 2, 1)
graph.add_edge(1, 3, 7)
graph.add_edge(2, 4, 3)
graph.add_edge(3, 4, 1)
# 求起点0到各顶点的最短距离
shortest_dist = graph.dijkstra(0)
print("起点0到各顶点的最短距离:", shortest_dist)
# 输出:起点0到各顶点的最短距离: [0, 2, 3, 9, 6]

六、加权图的典型应用

  1. 路径规划:地图导航的最短/最快路径(如高德、百度地图的路径算法);
  2. 网络优化:通信网络的最小成本布线(最小生成树)、网络节点间的最小延迟传输;
  3. 物流调度:物流配送的最低运输成本路径规划、多仓库间的物资调配;
  4. 项目管理:通过关键路径算法确定项目的最短完成时间和关键任务;
  5. 电路设计:电路板布线的最短导线长度规划、信号传输的最小损耗路径。
http://www.jsqmd.com/news/294586/

相关文章:

  • Xcode中iOS资源混淆问题与解决方案详解
  • 导师推荐2026 TOP10 AI论文软件:本科生毕业论文写作全解析
  • 2026年豆包优化工具选型:从技术底层到效果落地5大核心评估
  • 2026年1月DeepSeek优化服务商口碑TOP10:从技术到效果转化的选型
  • Git代码规范
  • 亲测好用10个AI论文网站,继续教育学生轻松搞定毕业论文!
  • 37、SQL的Explain
  • 2026年主流GEO公司(服务商)选型与技术方案全景解析
  • sql存储
  • c++实现交互式地震层位解释的软件
  • JS DOM 操作与性能优化实战指南:构建高效可交互的页面结构 - 实践
  • 为什么要引入右值引用
  • 2026防撞车租赁推荐:大黄蜂机电设备有限公司,全国400城覆盖,45000余台设备供应
  • 2026年满意度调查服务推荐:深圳神秘顾客市场调查有限公司,专业第三方满意度调研实力之选
  • 2026年防水透气阀专业厂家推荐:昆山艾尤诺新材料科技,全系产品覆盖多领域应用
  • 学霸同款10个一键生成论文工具,研究生高效写作必备!
  • 2026年智能柜领域实力推荐:山东瀚岳智能科技,RFID/医疗/贵金属/工具/物料等全系智能柜解决方案
  • 2026年高杆灯/中杆灯/玉兰灯/智慧路灯/LED路灯厂家推荐:四川莱宏照明工程集团全品类供应
  • 2026七层共挤设备及农膜推荐:青州市鲁冠塑料有限公司,全系产品覆盖多领域应用
  • 2026年玻璃温室大棚建设厂家推荐:山东柏科阿姆农业科技开发有限公司,智能/连栋/全系玻璃温室大棚承建实力之选
  • 2026集装袋厂家推荐:抗老化/防水/防静电/危险品/吨袋集装袋全品类供应,实力优选
  • 2026年英语培训实力推荐:重庆康桥阳光艺术培训有限公司,剑桥/口语/零基础/青少年英语培训全覆盖
  • 2026年调蓄池真空冲洗设备推荐:青岛铭源环保科技优质装置/一体式/知名品牌全解析
  • 2026年工业硫酸生产厂家推荐:上海孟龙实业有限公司,多领域硫酸产品全系供应
  • 2026年格宾网石笼厂家推荐:安平县玖旺丝网制品有限公司,钢丝/镀锌/铅丝格宾网护岸全系供应
  • 【Django毕设源码分享】基于Python的智能停车管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Django毕设源码分享】基于Python的智能停车系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 基于modelscope 的本地vlm llm调用类
  • ASP.NET Core Web APP(MVC)医疗记录管理系统 - 数据库完整指南 - 详解
  • 实用指南:技术选型指南:低代码+AI如何重塑中小企业进销存系统架构