{"name":"算法策略","id":"算法与数据结构-算法策略","content":"# 算法策略\n\n> **算法的本质：**\n> 在**有限或可结构化的解空间**中，\n> 在**约束条件**下，\n> 以**可接受的计算成本**，\n> **搜索或构造目标函数的最优解**。\n\n---\n\n## 一、算法的第一性原理\n\n### 1. 解空间（Solution Space）\n\n* 所有可能解的集合\n* 可显式枚举 / 可隐式生成 / 可数学建模\n* 决定算法是否可行、复杂度上限\n\n### 2. 目标函数（Objective Function）\n\n* 最大化 / 最小化 / 满足约束\n* 决定\"什么是好解\"\n\n### 3. 约束条件（Constraints）\n\n* 显式约束（容量、数量、边界）\n* 隐式约束（结构合法性、冲突规则）\n\n---\n\n## 二、算法范式的统一抽象模型\n\n所有算法都可以抽象为：\n\n[\nf(x) = g({ v(f(s(x, c)), c) \\mid c \\in values(x) })\n]\n\n| 符号        | 含义                          |\n| --------- | --------------------------- |\n| x         | 当前问题状态                      |\n| values(x) | 当前状态下的可选决策集合                |\n| c         | 一次决策                        |\n| s(x, c)   | 状态转移函数                      |\n| f(x)      | 状态 x 的最优解                   |\n| v         | 当前决策与子问题结果的组合               |\n| g         | 优化算子（min / max / selection） |\n\n**不同算法的差异，本质只在于：**\n\n* values(x) 的规模\n* 是否缓存 f(x)\n* 是否允许回退\n* 是否有启发式偏好\n\n---\n\n## 三、搜索型算法思想（完整性优先）\n\n> 关注：**是否能穷尽解空间**\n\n### 1. 枚举法（Exhaustive Search）\n\n* 对所有解逐一尝试\n* 解空间有限且规模可控\n\n**本质：**\n\n* 无剪枝\n* 无信息复用\n* 时间换正确性\n\n---\n\n### 2. 回溯法（Backtracking）\n\n* 深度优先搜索 + 剪枝\n* 遇到非法或无解路径即回退\n\n**成立条件：**\n\n* 解空间可构建为树\n* 存在可判定的非法分支\n\n**本质：**\n\n* 枚举 + 剪枝\n* DFS 搜索策略\n\n---\n\n### 3. 分支限界法（Branch and Bound）\n\n* 广度优先或优先队列\n* 使用上下界估计提前剪枝\n\n**与回溯的核心差异：**\n\n| 维度   | 回溯        | 分支限界             |\n| ---- | --------- | ---------------- |\n| 搜索顺序 | DFS       | BFS / Best-first |\n| 目标   | 所有解 / 任一解 | 最优解              |\n| 剪枝依据 | 可行性       | 上下界              |\n\n---\n\n## 四、结构型算法思想（问题可分解）\n\n> 关注：**问题是否可拆解为同构子问题**\n\n### 1. 递归（实现机制）\n\n* 一种**问题描述方式**\n* 不是算法思想本身\n\n**递归必须具备：**\n\n* 递推关系\n* 基本情况\n\n---\n\n### 2. 分治法（Divide and Conquer）\n\n* 将问题拆解为若干规模更小、结构相同的子问题\n* 子问题相互独立\n* 子解可合并\n\n**成立条件：**\n\n* 子问题独立\n* 合并成本可控\n\n**典型递归式：**\n[\nT(n) = aT(n/b) + f(n)\n]\n\n---\n\n## 五、最优化算法思想（效率优先）\n\n> 关注：**如何减少搜索成本**\n\n### 1. 贪心算法（局部启发式）\n\n* 每一步做当前最优选择\n* 不回退\n\n**成立条件（缺一不可）：**\n\n* 贪心选择性质\n* 最优子结构\n\n**本质：**\n\n* 将 values(x) 压缩为 1\n* 放弃完整性换速度\n\n---\n\n### 2. 动态规划（全局状态最优）\n\n> **动态规划不是递归优化，而是状态空间建模**\n\n#### 三大核心要素\n\n1. **最优子结构**\n2. **无后效性**\n3. **（优势而非必要）子问题重叠**\n\n#### 两种实现方式\n\n* 自顶向下：递归 + 备忘录\n* 自底向上：状态表推进\n\n**本质：**\n\n* 用空间换时间\n* 将指数级搜索压缩为多项式级状态遍历\n\n---\n\n## 六、数学建模型算法思想\n\n### 1. 线性规划\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| 贪心   | 否    | 否    | 否    | 低    |\n| 分治   | 否    | 否    | 少量   | 中    |\n| 动态规划 | 否    | 否    | 是    | 低    |\n\n---\n\n## 八、算法工程与设计哲学（稳定经验层）\n\n### 1. 数据结构决定程序\n\n* 数据结构 = 解空间的物理形态\n* 错误结构 → 错误算法复杂度\n\n---\n\n### 2. 性能分析的层次\n\n1. 问题定义\n2. 算法与数据结构\n3. 系统结构\n4. 编译与代码\n5. 系统软件\n6. 硬件\n\n---\n\n### 3. 优化原则\n\n* 先正确，后优化\n* 先度量，再优化\n* 不成熟的优化是灾难\n\n---\n\n### 4. 空间与时间的权衡\n\n* 缓存\n* 状态压缩\n* 稀疏结构\n* 计算换存储\n\n---\n\n## 九、算法设计的元技巧\n\n* 明确真实需求\n* 正确评估问题规模\n* 选择合适的算法范式\n* 接受不完美解（工程理性）\n\n## 关联内容（自动生成）\n- [/算法与数据结构/基本数据结构.md](/算法与数据结构/基本数据结构.md) 介绍了基础数据结构，与算法策略中提到的解空间和数据结构决定程序的哲学密切相关\n- [/算法与数据结构/排序.md](/算法与数据结构/排序.md) 排序算法是算法策略的具体实现，体现了不同算法范式的应用\n- [/算法与数据结构/查找.md](/算法与数据结构/查找.md) 查找算法是算法策略中搜索型算法思想的具体体现\n- [/算法与数据结构/树.md](/算法与数据结构/树.md) 树结构是许多算法（如分治法、动态规划）的基础数据结构\n- [/算法与数据结构/图.md](/算法与数据结构/图.md) 图算法是算法策略在特定数据结构上的应用，体现了搜索与优化思想\n- [/中间件/数据库/redis/数据结构.md](/中间件/数据库/redis/数据结构.md) 介绍了Redis中数据结构的设计思想，与算法策略中数据结构决定程序的观点呼应\n- [/软件工程/设计模式/行为模式.md](/软件工程/设计模式/行为模式.md) 算法策略中的策略模式思想，如模板方法模式体现了算法骨架的构建\n- [/中间件/数据库/索引.md](/中间件/数据库/索引.md) 索引是数据结构与算法的结合体，体现了算法在实际系统中的应用\n- [/数据技术/检索技术.md](/数据技术/检索技术.md) 检索技术是算法策略在数据处理领域的具体应用\n- [/软件工程/架构/系统设计/分布式/分布式共识算法.md](/软件工程/架构/系统设计/分布式/分布式共识算法.md) 分布式算法是算法策略在分布式系统中的延伸","metadata":"tags: ['算法', '数据结构与算法']","hasMoreCommit":true,"totalCommits":12,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2025-12-29T17:04:23+08:00","author":"MY","message":"docs(algorithm): 完善算法策略文档，增加算法设计原理和范式对比","hash":"cb4d3bbea68306e46b03230dcd454fc920952ee5"},{"date":"2024-04-08T19:02:41+08:00","author":"MY","message":"✏算法","hash":"cdc69d1c34f3bae1cc0ed5718b0e23f918c3f253"},{"date":"2024-02-27T20:07:27+08:00","author":"MY","message":"✏算法","hash":"8a6529c0b37f98855cb1857f560564cc6401fd7b"},{"date":"2024-02-02T14:20:17+08:00","author":"MY","message":"✏算法策略","hash":"62a103d97b720d0332dfb9afaabcb00940807808"},{"date":"2024-02-01T18:43:02+08:00","author":"MY","message":"✏算法","hash":"17aa5cb475a7b3005b9a474daa02f38ef0f95ff8"},{"date":"2023-04-04T17:33:17+08:00","author":"MY","message":"📦编程思想","hash":"5d82746e4e0ddd1c70eb7bb1d474e204e31d3afe"},{"date":"2022-10-30T20:20:39+08:00","author":"MY","message":"✏️算法策略","hash":"eede7b81ef9b3d91a776f226865773b848b8097c"},{"date":"2022-03-28T15:06:44+08:00","author":"MY","message":"✏️更新 算法策略","hash":"29aeb062b5ca40f1893da286302aaf361fdbec91"},{"date":"2022-03-25T18:27:53+08:00","author":"MY","message":"✏️更新 算法","hash":"5e42591ca27238a6a336f5832507bf0fe33cb07a"}],"createTime":"2020-08-04T16:01:17+08:00"}