---
title: "网络化简"
description: "先根据 index 结构确定部分收缩步骤，再在较小的网络上搜索后续路径。"
eyebrow: "网络预处理"
---

## 化简做什么 {#rules}

网络化简根据 index 结构预先确定一部分收缩步骤，使后续搜索处理的张量更少。这里的化简是结构预处理：它记录哪些张量可以先合并，不读取或计算实际数组。数值执行时，仍需完成这些预先确定的收缩步骤。

`simplify` 主要检查以下规则：

| 张量当前保留的不同 index 数量 | 处理方式 |
| --- | --- |
| 0 | 与当前 index 最少的另一个张量合并 |
| 1 | 与共享该 index 的张量合并 |
| 2 | 尝试与邻居合并，结果的 index 数量不得超过该邻居 |

输出 index 或仍被其他张量使用的 index 不会消去。这些规则不涉及低秩分解或奇异值截断。

## 化简后怎样搜索 {#rust-usage}

```pseudocode
prefix, reduced, map = 化简输入网络
reduced_path = 在 reduced 上搜索收缩路径
path = 将 reduced_path 的编号映射回原网络，并接到 prefix 后
stats = 在原网络上校验 path 并计算指标
return path, stats
```

化简保持原收缩表达式，但会预先固定部分收缩步骤，因此可能改变后续搜索得到的路径。

### 化简结果 {#result}

`prefix` 保存已确定的 SSA 步骤；`reduced` 是缩减网络；`map` 记录缩减网络输入对应的原网络节点。`stitch` 负责将后续路径接回原网络。

## 接口 {#interfaces}

`simplify` 和 `stitch` 可分别调用；`random_greedy_simplified` 包含化简、随机贪心、路径拼接及指标计算。Python 的 `arctn_simplify` 返回化简后的结构信息，不执行数组。参数见 [Rust API](/docs/rust-api#simplify)和 [Python API](/docs/python-api#simplify)。
