Burkifa23/ids-visualizer
GitHub: Burkifa23/ids-visualizer
该工具以加纳公路网为案例,通过交互式 HTML 页面可视化迭代加深搜索算法的逐步执行过程,帮助用户直观理解 IDS 的搜索、截断与路径解析机制。
Stars: 0 | Forks: 0
# 迭代加深搜索 (IDS) 可视化工具
本文档详细介绍了**迭代加深搜索 (IDS)** 的技术原理,该算法已在 **`ids-visualizer.html`** 中实现,用于解决加纳路线查找问题。
## 什么是迭代加深搜索?
**迭代加深搜索 (IDS)** 是一种无信息搜索策略,它结合了**深度优先搜索 (DFS)** 和**广度优先搜索 (BFS)** 的优点:
1. **类似 DFS 的空间效率**:它运行深度受限搜索 (DLS),使用栈结构,使内存消耗相对于深度保持线性。
2. **类似 BFS 的完备性与最优性**:通过系统地增加深度限制 ($L$)(即 $0, 1, 2, \dots$),它可以保证首先找到最浅的目标节点(边数最少),这使其在无权重步长成本下具备完备性和最优性。
## 算法分步运行机制
在每次迭代中,算法会从根节点开始,以当前限制 $L$ 执行一次全新的深度受限搜索:
1. **初始化限制**:从深度限制 $L = 0$ 开始。
2. **运行深度受限搜索 (DLS)**:
* 使用 DFS 探索状态空间。
* 如果节点深度等于 $L$,**则不扩展其子节点**(这是一个 `⊘ CUTOFF` 事件)。
* 如果找到目标,则终止并返回路径。
3. **分析截断**:
* 如果 DLS 结束但未找到目标:
* 如果至少有一个节点因达到深度限制而被剪枝(发生了截断),则将限制增加到 $L + 1$ 并从头重新开始 DLS。
* 如果未发生截断,说明整个图都已被搜索,且不存在解决方案(失败)。
## 使用 IDS 可视化加纳公路网
在可视化工具中,您可以选择一个**起始城市**(例如 **Tamale**)和一个**目的地城市**(例如 **Korle Bu**)。
以下是分步执行的过程:
* **$L = 0$**:DLS 从 **Tamale** 开始。由于深度 ($0$) 等于限制 ($0$),Tamale 立即触发了截断。DLS 结束。
* **$L = 1$**:DLS 从 **Tamale** 重新开始,并扩展其邻居:**Wa, Bolgatanga, Yendi, Kintampo, Techiman**(深度为 1)。由于深度 ($1$) 等于限制 ($1$),所有这些节点都触发了截断。DLS 结束。
* **$L = 2$**:DLS 重新开始并扩展 Tamale $\to$ Wa $\to$ Wa 的邻居(深度为 2 的 **Bolgatanga, Sunyani**,发生截断)$\to$ Tamale 的其他邻居。此过程持续进行,直到搜索空间达到深度 2。
* **$L = \dots$**:每次迭代时深度限制都会增加,直到搜索路径到达目的地城市。
## 复杂度分析
### 1. 时间复杂度
由于 IDS 会重复对上层节点进行 DLS 探索,它似乎浪费了对节点的重复评估。然而,在分支因子相对较高的树结构中,底层节点的数量主导了总节点的数量。
时间复杂度为:
\[O(b^d)\]
其中:
* $b$:平均分支因子(每个城市的公路连接数,在加纳约为 $3$ 到 $5$)。
* $d$:最浅解的深度。
重新访问节点带来的额外开销比例非常低:
\[\frac{(d+1) \cdot b^0 + d \cdot b^1 + (d-1) \cdot b^2 + \dots + 1 \cdot b^d}{b^0 + b^1 + b^2 + \dots + b^d} \approx \frac{b}{b - 1}\]
对于分支因子 $b = 3$ 的情况,其开销仅比标准 DFS 多约 $50\%$,这使得它非常具有实用价值。
### 2. 空间复杂度
由于它在 DLS 期间使用深度优先的栈结构,最大内存使用量被限制在活动路径分支及其兄弟节点上:
\[O(b \cdot d)\]
与空间复杂度为 $O(b^d)$ 的 BFS 相比,这是一个巨大的改进。
## 🎨 可视化状态系统
可视化工具实时显示 IDS 的活动执行状态:
* 🔘 **板岩灰 (`#cbd5e1`)** — 未访问的城市。
* 🟡 **琥珀金 (`#d97706`)** — 当前活动的 DFS 搜索分支。
* 🔴 **深红色 (`#ef4444`)** — 限制截断节点(位于最大深度 $L$ 且搜索被剪枝的节点)。
* 🟢 **翠绿色 (`#10b981`)** — 以最少步数解析出的最终路径。
* **执行日志** — 实时记录 DFS 的出栈、扩展、截断限制和重新开始过程。
标签:前端工具, 后端开发, 图论, 多模态安全, 寻路算法, 搜索算法, 数据可视化, 算法可视化