1. 为什么计算机网络是图?
1.1 从现实网络到抽象图
计算机网络本质上就是一个**图(Graph)**结构。让我们来看看如何对应:
对应关系:
| 网络概念 | 图论概念 | 说明 |
|---|---|---|
| 路由器、交换机 | 节点(Vertex) | 网络设备 |
| 物理链路、逻辑连接 |
阐述计算机网络本质为图结构,解析节点、边、权重与网络设备的对应关系。详细介绍图的定义、分类及三种存储结构(邻接矩阵、邻接表、边列表)的特性与适用场景。系统梳理最短路径、最小生成树、图遍历及网络流四大类图算法,并结合 OSPF、STP 等网络协议说明其实际应用价值。
计算机网络本质上就是一个**图(Graph)**结构。让我们来看看如何对应:
对应关系:
| 网络概念 | 图论概念 | 说明 |
|---|---|---|
| 路由器、交换机 | 节点(Vertex) | 网络设备 |
| 物理链路、逻辑连接 |
| 设备间的连接 |
| 延迟、带宽、成本 | 权重(Weight) | 边的属性 |
北京核心节点 / | \
/ | \ 上海 广州 成都
/ | \ / \ / |
南京 杭州...深圳... 重庆 昆明
这就是一个典型的有向加权图:
| 网络问题 | 图论问题 | 对应算法 |
|---|---|---|
| 最优路由选择 | 最短路径 | Dijkstra、A*、Bellman-Ford、Floyd-Warshall |
| 网络拓扑设计 | 最小生成树 | Prim、Kruskal |
| 网络发现 | 图遍历 | BFS、DFS |
| 带宽优化 | 最大流 | Ford-Fulkerson |
图(Graph) 由两部分组成:
# 图的 Python 表示
graph = {
'V': {0, 1, 2, 3}, # 顶点集
'E': [(0, 1), (0, 2), (1, 3), (2, 3)] # 边集
}
无向图:A─────B (边没有方向,可以双向通行)
\ /
C
有向图:A → B (边有方向,只能单向通行)
↓ ↘
C → D
网络中的应用:
无权图:A───B (只关心是否连通)
│ ╱ │
C───D
加权图:A─⁴─B (边有权重,表示距离/成本)
│╲⁵ │
²│ ╲³│
⁴╲│
C──D
网络中的应用:
有环图:A → B → C (存在环路 A→B→C→A)
↑ ↓
└──────┘
无环图:A → B → C (无环路,树形结构)
↓
D
重要概念:
选择合适的存储结构对算法性能至关重要。
定义:用二维数组表示图,matrix[i][j] 表示节点 i 到 j 的边
# 无向图的邻接矩阵
# 0 1 2 3
matrix = [
[0, 1, 1, 0], # 0
[1, 0, 0, 1], # 1
[1, 0, 0, 1], # 2
[0, 1, 1, 0] # 3
]
# 加权图(数字表示权重,∞表示无边)
# 0 1 2 3
matrix = [
[0, 4, 2, float('inf')], # 0
[4, 0, float('inf'), 3], # 1
[2, float('inf'), 0, 5], # 2
[float('inf'), 3, 5, 0] # 3
]
特点:
适用场景:
定义:用数组 + 链表表示图,每个节点存储其所有邻居
# 无权图的邻接表
graph = {
0: [1, 2], # 节点 0 的邻居是 1 和 2
1: [0, 3],
2: [0, 3],
3: [1, 2]
}
# 加权图的邻接表(存储邻居和权重)
graph = {
0: [(1, 4), (2, 2)], # 0→1 权重 4, 0→2 权重 2
1: [(0, 4), (3, 3)],
2: [(0, 2), (3, 5)],
3: [(1, 3), (2, 5)]
}
特点:
适用场景:
定义:简单地用列表存储所有边
# 无权图
edges = [(0, 1), (0, 2), (1, 3), (2, 3)]
# 加权图(三元组:起点,终点,权重)
edges = [(0, 1, 4), (0, 2, 2), (1, 3, 3), (2, 3, 5)]
特点:
适用场景:
| 特性 | 邻接矩阵 | 邻接表 | 边列表 |
|---|---|---|---|
| 空间复杂度 | O(V²) | O(V + E) | O(E) |
| 判断边存在 | O(1) | O(度) | O(E) |
| 遍历邻居 | O(V) | O(度) | O(E) |
| 遍历所有边 | O(V²) | O(V + E) | O(E) |
| 适合稠密图 | ✅ | ❌ | ❌ |
| 适合稀疏图 | ❌ | ✅ | ✅ |
选择建议:
根据解决的问题类型,图算法可以分为四大类:
问题:找到两个节点之间的最优路径
起点 S,终点 T
S
/|\
/ | \
● ● ●
哪条路径最优?
\ | /
\|/
T
核心算法:
网络应用:
问题:用最小成本连接所有节点
原始图: 最小生成树:
A A
/|\ / \
B-C-D B C-D
(边多成本高) (连接所有点,成本最低)
核心算法:
网络应用:
问题:系统地访问图中所有节点
BFS(广度优先): DFS(深度优先):
S S
/|\ |
● ● ●(一层层) ●
/|\ ●
● ● ●(一条路走到底)
核心算法:
网络应用:
问题:在容量限制下最大化流量
源点 S,汇点 T
每条边有容量限制
S
/ | \
10 8 12
如何最大化到 T 的流量?
\ | /
T
核心算法:
网络应用:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online