0xsamesh/robot_survival_path_dp
GitHub: 0xsamesh/robot_survival_path_dp
一个用原生 JavaScript 构建的交互式可视化工具,通过对比暴力搜索与动态规划求解最小起始能量网格问题,直观展示算法复杂度优化的过程。
Stars: 1 | Forks: 0
# 机器人能量生存路径 — 动态规划 vs 暴力破解
这是一个交互式可视化工具,展示了**动态规划**如何将指数级的**暴力破解**搜索简化为清晰的 `O(N × M)` 解决方案,以经典的*最小起始能量*网格问题为例。
专为“算法设计与分析”(DAA)课程演示而构建。
## 问题描述
机器人从网格的**左上角**出发,必须到达**右下角**,只能向**右**或向**下**移动。每个网格单元会增加或消耗能量。机器人的能量**绝对不能低于 1**,否则它会死亡。
## 演示内容
| | 暴力破解 | 动态规划 |
|---|---|---|
| 方法 | 枚举所有向右/向下的路径,构建完整的递归树 | 使用下方的递推公式自底向上填充表格 |
| 复杂度 | 指数级 — `C(N+M, N)` 条路径 | `O(N × M)` |
| 可视化为 | 实时递归树,记录每条路径 | 动画演示表格填充 + 重构出的最优路径 |
**DP 递推公式**(自底向上,从右向左计算):
```
need(r, c) = max(1, need(next) − grid[r][c])
answer = need(0, 0)
```
该应用程序会同时运行这两种算法,并包含一个**一致性审计**环节,用于断言 DP 算出的答案是否与暴力破解的答案一致——如果它们出现不一致,系统将标记出该差异。
## 功能
- 可调节网格大小(3×3 到 15×15)和动画速度
- **编辑模式** — 点击任意单元格设置其能量值
- 暴力破解递归树,显示每条路径及其所需能量
- 动画演示 DP 表格填充,随后机器人沿最优路径行走
- 并排显示的复杂度爆炸图表(展示随着网格增大,路径与单元格的对比)
## 运行说明
这是一个静态网站——只需打开页面即可,无需服务器或构建步骤:
```
public/index.html
```
`server.js` (Express) 是可选的,仅用于通过 HTTP 提供页面服务。
## 布局
```
public/
index.html the visualizer
script.js brute-force + DP logic, animation, recursion tree
styles.css styling
presentation.html
server.js optional static server
```
## 技术栈
原生 JavaScript · HTML · CSS · (可选的 Node/Express 用于页面托管)
标签:MITM代理, Vanilla JS, 前端交互, 动态规划, 后端开发, 多模态安全, 数据可视化, 数据结构与算法, 算法可视化