{"name":"图","id":"算法与数据结构-图","content":"# 图\n\n> * 图是什么\n> * 为什么问题可以抽象为图\n> * 不同图结构如何决定算法选择\n\n---\n\n## 一、图的第一性原理（What is a Graph）\n\n### 1. 图的本质\n\n**图（Graph）是一种用于表达“实体之间约束关系”的抽象结构。**\n\n* 顶点（Vertex）：实体 / 状态 / 节点\n* 边（Edge）：关系 / 约束 / 转移可能性\n\n> 当系统中的“关系”比“实体本身”更重要时，图是最自然的建模方式。\n\n典型问题本质：\n\n* 路径问题 → 状态转移成本\n* 依赖问题 → 因果顺序\n* 连通问题 → 可达性\n\n---\n\n### 2. 图的核心结构要素\n\n| 要素      | 抽象含义             |\n| ------- | ---------------- |\n| 有向 / 无向 | 关系是否具有方向性（依赖、因果） |\n| 有权 / 无权 | 关系是否存在成本 / 距离    |\n| 度       | 节点约束强度 / 影响范围    |\n| 环       | 是否存在循环依赖         |\n| 连通性     | 状态空间是否割裂         |\n\n这些结构性质**直接决定可用算法集合**。\n\n---\n\n## 二、图的表示模型（How to Represent）\n\n> 表示方式不是实现细节，而是**空间—时间权衡模型**。\n\n### 1. 邻接矩阵（Adjacency Matrix）\n\n**模型特征**：\n\n* 用二维矩阵表达“任意两点是否存在关系”\n\n**适用场景**：\n\n* 稠密图\n* 高频边查询\n* 图运算可转化为矩阵运算\n\n**代价**：\n\n* 空间复杂度 O(V²)\n\n---\n\n### 2. 邻接表（Adjacency List）\n\n**模型特征**：\n\n* 每个节点仅维护自身的出边集合\n\n**适用场景**：\n\n* 稀疏图\n* 遍历型算法（DFS / BFS）\n\n**代价**：\n\n* 边查询效率低于矩阵\n* 非连续存储，缓存友好性较差\n\n---\n\n### 3. 边表（Edge List）\n\n**模型特征**：\n\n* 仅关注“关系本身”，忽略节点结构\n\n**典型用途**：\n\n* 最小生成树（Kruskal）\n* 离线图算法\n\n---\n\n## 三、图的遍历范式（How to Explore）\n\n> 遍历不是目的，而是**状态空间探索策略**。\n\n### 1. 深度优先搜索（DFS）\n\n**核心思想**：\n\n* 沿一条路径探索到极限，再回溯\n\n**本质能力**：\n\n* 结构发现\n* 组件划分\n* 环检测\n\n**典型派生问题**：\n\n* 连通分量\n* 强连通分量\n* 拓扑排序（DFS 版本）\n\n**复杂度**：O(V + E)\n\n---\n\n### 2. 广度优先搜索（BFS）\n\n**核心思想**：\n\n* 按“距离层级”逐层扩展\n\n**本质能力**：\n\n* 最短路径（无权）\n* 最小跳数\n\n**复杂度**：O(V + E)\n\n---\n\n### 3. DFS vs BFS 的本质区别\n\n| 维度   | DFS  | BFS  |\n| ---- | ---- | ---- |\n| 搜索策略 | 路径优先 | 距离优先 |\n| 适用问题 | 结构性质 | 最短路径 |\n| 内存模型 | 递归栈  | 队列   |\n\n> DFS / BFS 是**基础遍历器**，而非最终算法。\n\n---\n\n## 四、图的结构性质问题（What the Graph Is Like）\n\n### 1. 连通性\n\n* 无向图中：极大连通子图称为连通分量\n* 判断方式：DFS / BFS\n\n---\n\n### 2. 有向图与可达性\n\n* 可达性：是否存在从 u 到 v 的路径\n* 强连通：u ⇄ v 互相可达\n\n> 强连通分量本质是**有向图的结构分解问题**。\n\n---\n\n### 3. 环与依赖关系\n\n* 有向无环图（DAG）代表“可线性化依赖”\n* 存在环 → 依赖无法排序\n\n---\n\n## 五、图上的优化问题（How to Optimize）\n\n> 优化问题 = 在约束关系下寻找最优路径 / 子结构。\n\n---\n\n### 1. 最小生成树（MST）\n\n**问题本质**：\n\n* 在保持连通的前提下，最小化总代价\n\n**适用前提**：\n\n* 连通\n* 无向\n* 有权\n\n#### Prim 算法\n\n* 思想：从“点”扩展\n* 适合稠密图\n\n#### Kruskal 算法\n\n* 思想：从“边”筛选\n* 依赖并查集判环\n* 适合稀疏图\n\n---\n\n### 2. 最短路径问题\n\n| 场景   | 算法           |\n| ---- | ------------ |\n| 无权图  | BFS          |\n| 正权单源 | Dijkstra     |\n| 含负权  | Bellman-Ford |\n| 全源   | Floyd        |\n\n---\n\n#### Dijkstra 算法\n\n**核心约束**：\n\n* 边权非负\n\n**本质原因**：\n\n* 贪心选择一旦确认不可回退\n\n---\n\n### 3. A* 算法（启发式搜索）\n\n**核心思想**：\n\n* 在 Dijkstra 的基础上引入启发函数 h(n)\n\n**代价函数**：\n\n```\nf(n) = g(n) + h(n)\n```\n\n**关键前提**：\n\n* h(n) 不得高估真实代价（可采纳性）\n\n---\n\n## 六、算法选型决策视图（How to Choose）\n\n```\n是否有权？\n ├─ 否 → BFS\n └─ 是\n     ├─ 是否有负权？\n     │   ├─ 是 → Bellman-Ford\n     │   └─ 否 → Dijkstra / A*\n```\n\n---\n\n## 七、总结：稳定认知框架\n\n* 图不是算法集合，而是**关系建模工具**\n* 遍历算法是\"探索器\"，优化算法是\"决策器\"\n* 结构性质 → 决定算法边界\n\n## 关联内容（自动生成）\n\n- [/中间件/数据库/图数据库.md](/中间件/数据库/图数据库.md) 图数据库与传统图论算法在数据存储和查询方面的关联，包括图遍历、最短路径等算法在图数据库中的实现\n- [/算法与数据结构/树.md](/算法与数据结构/树.md) 树是图的一种特殊形式（无环连通图），许多图算法可以从树算法扩展而来\n- [/数学/线性代数.md](/数学/线性代数.md) 图的邻接矩阵表示法是线性代数在图论中的重要应用，可用于图算法的矩阵实现\n- [/算法与数据结构/算法策略.md](/算法与数据结构/算法策略.md) 图的遍历算法（DFS/BFS）是算法策略中的重要组成部分，体现了不同的搜索策略\n- [/操作系统/死锁.md](/操作系统/死锁.md) 死锁检测中使用等待图（Wait-For Graph）和环路检测算法，与图论中的环检测算法密切相关\n","metadata":"tags: ['数据结构与算法', '算法', '数据结构']","hasMoreCommit":true,"totalCommits":15,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2026-01-26T17:47:30+08:00","author":"MY","message":"docs(图论): 重构图论文档结构并添加完整知识体系","hash":"1cf191da8da077157c1016e787ea889b0a8f9f92"},{"date":"2025-11-16T21:30:56+08:00","author":"MY","message":"docs: 统一并精简文档标签","hash":"21362e9d7aeb62e05364cd5e7f3a3c24d7e293c7"},{"date":"2024-12-04T15:39:37+08:00","author":"MY","message":"📦图","hash":"6ec9778ee9562da8b666d76e0869b7f0d56c6a23"},{"date":"2024-11-08T11:37:41+08:00","author":"MY","message":"✏图","hash":"89e85332f0f2971e951d8e034ed8c0c35675f81a"},{"date":"2024-03-28T09:58:20+08:00","author":"MY","message":"✏图算法","hash":"d8216282ebbb8e43b80515c384d20c22a0936e86"},{"date":"2024-02-27T20:07:27+08:00","author":"MY","message":"✏算法","hash":"8a6529c0b37f98855cb1857f560564cc6401fd7b"},{"date":"2024-02-23T14:48:06+08:00","author":"MY","message":"✏图","hash":"dc4a47043c9deb774fe8456ca12a8a512557d9e7"},{"date":"2022-07-10T16:05:00+08:00","author":"MY","message":"✏️更新 计算机网络算法","hash":"61bd4c9bf67fd790d9670c1a59424404f6ee214c"},{"date":"2022-07-09T15:26:49+08:00","author":"MY","message":"✏️更新 算法","hash":"2d8ca900074aa66c48b668e03cc082547eae7449"}],"createTime":"2019-12-04T19:59:31+08:00"}