多边形行走与图的线性时间算法研究
1 多边形行走中的隐藏问题
1.1 安全路径的定义
在多边形行走问题中,引入了不可见图的概念。安全路径 $\pi_{safe}(s, t)$ 是指在不可见图中连接点 $s$ 和 $t$ 的路径,在这条路径上,Jack 和 Jill 彼此都看不到对方。这意味着安全路径完全包含在代表单元格并集的灰色区域内。只有当不可见图中存在安全路径 $\pi_{safe}(s, t)$ 时,Jack 才能在不被 Jill 看到的情况下走过他的路径。
1.2 计算 Jack 和 Jill 的安全路径
1.2.1 确定 $s$ 和 $t$ 所在的骨架
- 回顾可知,边界 $\partial P$ 上的两个点 $x, y$ 定义了不可见图中的一个点 $(x, y)$。我们的任务是确定一个包含 $(x, y)$ 的单元格的骨架。
- 为简化此过程,定义可见多边形 $Vis(P, x)$ 为从 $x$ 点可直接看到的多边形 $P$ 内所有点的集合。
-
引理 3 表明,对于不可见图中的任意固定点 $(x, y)$,可以在 $O(n)$ 时间内确定包含该点的单元格的骨架。具体步骤如下:
- 在 $O(n)$ 时间内计算可见多边形 $Vis(P, x)$。
- 遍历多边形 $P$ 的边界,确定包含 $y$ 且从 $x$ 点不可直接看到的 $\partial P$ 的最大连通区间。
- 如果不存在这样的区间,则该点 $(x, y)$ 是不安全的;否则,此区间的一个端点(例如 $r$)必定是多边形 $P$ 的一个反射顶点,将 $(x, y)$ 与该反射顶点的骨架关联起来。
根据引理 3,我们可以在 $O(n)$ 时间内计算出包含 $s = (x_1, y_1)$ 的单元格的骨架和包含 $t = (x_2, y_2)$ 的单元格的骨架。
1.2.2 确定骨架的连通分量
已知包含 $s$ 的单元格的骨架和包含 $t$ 的单元格的骨架后,我们要确定这两个骨架之间是否存在安全路径。
- 给定定义不可见图中所有 $O(n)$ 个骨架的水平和垂直线段,我们可以在 $O(n \log n)$ 时间和 $O(n)$ 空间内计算这些正交线段的连通分量。
- 由于引理 2 保证了两个单元格相交当且仅当它们的骨架相交,所以只有当 $s$ 所在的骨架和 $t$ 所在的骨架属于同一个连通分量时,从 $s$ 到 $t$ 才存在安全路径。
定理 1 指出,假设 Jack 和 Jill 沿着一个有 $n$ 个顶点的简单多边形的边界行走,我们可以在 $O(n \log n)$ 时间和 $O(n)$ 空间内判断 Jack 和 Jill 是否能同时从各自的起点走到终点而彼此看不到对方。具体步骤如下:
1. 预处理计算不可见图的骨架。
2. 计算这些骨架的连通分量。
3. 使用引理 3 将 Jack 和 Jill 的起点 $s$ 与关联骨架的连通分量关联起来。
4. 将 Jack 和 Jill 的终点 $t$ 与关联骨架的连通分量关联起来。
5. 如果这两个连通分量相同,则可以通过该连通分量中的骨架返回一条直线路径;否则,不存在安全路径。
1.3 多个孩子的隐藏与寻找问题
假设有一个有 $n$ 个顶点的简单多边形 $P$,Jack 和 $m$ 个孩子 $c_1, \cdots, c_m$ 沿着多边形的边界 $\partial P$ 行走。每个孩子 $c_i$ 以恒定速度 $v_i$ 移动,且所有孩子(包括 Jack)同时开始移动。问题是确定 Jack 是否能控制自己的速度,使得他在不被任何一个孩子看到的情况下到达路径的终点。
- 如同前面的情况,Jack 与每个孩子 $c_i$ 在不可见图中定义了一个唯一的起点 $s_i$。设 $L_e$ 是不可见图中与 Jack 路径终点相关联的垂直线。
- 为了确定 Jack 是否能在不被任何孩子看到的情况下走过他的路径,我们需要确定从每个起点 $s_i$ 到垂直线 $L_e$ 是否存在安全路径。但这些安全路径不能独立计算,因为 Jack 在任何给定 $x$ 坐标处的固定速度会影响所有 $m$ 条路径的斜率。
为简化问题,先假设每个孩子以相同速度(即 $v_1 = \cdots = v_m$)且都沿顺时针方向绕 $\partial P$ 移动。具体操作如下:
1. 为每个孩子 $c_1, \cdots, c_m$ 创建一个不可见图的副本,分别记为 $D_1, \cdots, D_m$,并将起点 $s_i$ 与不可见图 $D_i$ 关联起来。
2. 平移这 $m$ 个不可见图,使得所有起点 $s_1, \cdots, s_m$ 平移后位于一个公共点 $s \in R^2$。
3. 设 $I = D_1 \cap \cdots \cap D_m$ 为这些平移后的不可见图中安全点的交集。只有当交集 $I$ 中存在一条连接 $s$ 和垂直线 $L_e$ 的路径时,Jack 才能在不被任何孩子看到的情况下走过他的路径。
现在放宽假设,允许每个孩子以不同的恒定速度沿顺时针或逆时针方向绕 $\partial P$ 移动。
- 为了允许孩子们以不同速度移动,我们将每个不可见图 $D_i$ 垂直缩放一个因子 $\frac{1}{v_i}$,其中 $v_i$ 是孩子 $c_i$ 的速度。
- 对于沿逆时针方向移动的孩子,我们将其不可见图垂直翻转。这种垂直翻转、垂直缩放和平移每个不可见图的过程具有归一化不可见图 $D_1, \cdots, D_m$ 的效果。
定理 2 表明,假设 Jack 和 $m$ 个孩子沿着一个有 $n$ 个顶点的简单多边形的边界行走,我们可以在 $O(m^2n^3 \log mn)$ 时间和 $O(m^2n^3)$ 空间内确定 Jack 是否能在不被任何孩子看到的情况下走过他的路径。具体步骤如下:
1. 一个有 $n$ 个顶点的简单多边形的不可见图总是有 $O(n)$ 个单元格,每个单元格的复杂度为 $O(n)$。由于每个单元格是单调形状,一对单元格最多相交 $O(n)$ 次。更一般地,$m$ 个归一化不可见图 $D_1, \cdots, D_m$ 的排列涉及 $O(mn)$ 个单元格。$O(m^2n^2)$ 对单元格中的每对相交 $O(n)$ 次,因此这些归一化不可见图中安全点的交集 $I$ 的复杂度为 $O(m^2n^3)$。
2. 可以使用任何标准的排列算法在 $O(m^2n^3 \log(mn))$ 时间内构造交集 $I$。
3. 为了确定 Jack 是否能在不被任何孩子看到的情况下走过他的路径,我们需要确定从 Jack 的起点 $s \in I$ 到垂直线 $L_e$ 上的任何点是否存在路径。这意味着简单扫描交集 $I$ 的面就足以返回 Jack 的安全路径或报告不存在安全路径。
下面是一个简单的流程图,展示了判断 Jack 是否能在不被任何孩子看到的情况下走过路径的主要步骤:
graph TD;
A[开始] --> B[创建并平移不可见图副本];
B --> C[垂直缩放和翻转不可见图];
C --> D[计算交集 I];
D --> E[判断是否存在从 s 到 Le 的路径];
E --> F{存在路径?};
F -- 是 --> G[Jack 可安全通过];
F -- 否 --> H[Jack 无法安全通过];
G --> I[结束];
H --> I;
整个过程的时间和空间复杂度依赖于多边形的顶点数 $n$ 和孩子的数量 $m$,具体复杂度总结如下表:
| 问题类型 | 时间复杂度 | 空间复杂度 |
| ---- | ---- | ---- |
| Jack 和 Jill 的安全路径 | $O(n \log n)$ | $O(n)$ |
| Jack 躲避 $m$ 个孩子 | $O(m^2n^3 \log mn)$ | $O(m^2n^3)$ |
2 有界秩宽图的线性时间算法
2.1 问题背景与目标
在图论算法领域,我们关注的是可在有界秩宽图上以线性时间解决的问题。具体来说,要证明对于能用 MSO1(单二阶逻辑)表达的决策或优化问题,在有界秩宽图上可实现线性时间求解。以往的证明方法,如 Courcelle 等人使用的基于 Feferman - Vaught 定理和 MSO 转换的方法,以及 Ganian 和 Hlinˇen´y 使用的自动机理论方法,都有一定局限性,前者需要较强的逻辑背景,后者对于部分算法实践者来说理解有难度。因此,我们采用博弈论方法来证明这个定理。
2.2 相关概念
2.2.1 t - 标记图
- t - 标记图是一个图 $G$ 与一个标记函数 $lab$ 的组合,标记函数 $lab: V(G) \to 2^{[t]}$,将图 $G$ 的每个顶点分配到 $[t] = {1, \cdots, t}$ 的一个子集。可以将其解释为从顶点集 $V(G)$ 到 $t$ 维二进制向量空间 $GF(2^t)$ 的映射,即把子集 $X \subseteq [t]$ 与 $t$ 位向量 $x = x_1 \cdots x_t$ 关联起来,其中 $x_i = 1$ 当且仅当 $i \in X$。这样,一个有 $n$ 个顶点的图的 $t$ - 标记 $lab$ 可以表示为一个 $n \times t$ 的二进制矩阵。
- t - 重新标记是一个映射 $f: [t] \to 2^{[t]}$,也可看作是从空间 $GF(2^t)$ 到自身的线性变换,能用一个 $t \times t$ 的二进制矩阵 $T_f$ 表示。对于 t - 标记图 $\overline{G} = (G, lab)$,$f(\overline{G})$ 定义为 $(G, f \circ lab)$,其中 $(f \circ lab)(v)$ 是通过对向量 $lab(v)$ 应用线性变换 $f$ 得到的 $GF(2^t)$ 中的向量,实际上就是矩阵乘积 $lab \times T_f$。
2.2.2 t - 标记图的操作符
- 空操作符 $\odot$ :创建一个带有标签 1 的新图顶点。
- t - 标记连接 $\otimes$ :设 $\overline{G}_1 = (G_1, lab_1)$ 和 $\overline{G}_2 = (G_2, lab_2)$ 是 t - 标记图,$\overline{G}_1 \otimes \overline{G}_2$ 是通过取 $G_1$ 和 $G_2$ 的不相交并集,并添加所有满足 $|lab_1(u) \cap lab_2(v)|$ 为奇数的顶点 $u \in V(G_1)$ 和 $v \in V(G_2)$ 之间的边得到的图,结果图是未标记的。这里 $|lab_1(u) \cap lab_2(v)|$ 为奇数当且仅当向量 $lab_1(u)$ 和 $lab_2(v)$ 在空间 $GF(2^t)$ 中的标量积 $lab_1(u) \cdot lab_2(v) = 1$。对于 $X \subseteq V(G_1)$,集合 $\gamma(\overline{G}_1, X) = { lab_1(u) | u \in X }$ 生成了 $GF(2^t)$ 的一个子空间 $\langle \gamma(\overline{G}_1, X) \rangle$。在连接图 $\overline{G}_1 \otimes \overline{G}_2$ 中,顶点子集 $X \subseteq V(G_1)$ 和 $Y \subseteq V(G_2)$ 之间没有边当且仅当子空间 $\langle \gamma(\overline{G}_1, X) \rangle$ 和 $\langle \gamma(\overline{G}_2, Y) \rangle$ 在向量空间 $GF(2^t)$ 中正交。
- t - 标记组合 $\otimes[g|f_1, f_2]$ :给定三个 t - 重新标记 $g, f_1, f_2: [t] \to 2^{[t]}$,对于 t - 标记图 $\overline{G}_1 = (G_1, lab_1)$ 和 $\overline{G}_2 = (G_2, lab_2)$,$\overline{G}_1 \otimes[g|f_1, f_2] \overline{G}_2 := \overline{H} = (\overline{G}_1 \otimes g(\overline{G}_2), lab)$,其中 $lab(v) = f_i \circ lab_i(v)$ 对于 $v \in V(G_i)$ 且 $i \in {1, 2}$。即先对 $\overline{G}_1$ 和 $g(\overline{G}_2)$ 进行 t - 标记连接,然后用 $f_1$ 重新标记 $G_1$ 的顶点,用 $f_2$ 重新标记 $G_2$ 的顶点。在 $\overline{H}$ 中,${u, v}$ 是一条边当且仅当 $lab_1(u) \cdot (lab_2(v) \times T_g) = 1$,其中 $T_g$ 是表示线性变换 $g$ 的矩阵。
2.2.3 t - 标记解析树
t - 标记解析树 $T$ 是一个有限、有序、根为子三次的树(根的度数最多为 2),满足:
- 所有叶子节点都标记为 $\odot$ 符号。
- 所有内部节点都标记为 t - 标记组合符号。
解析树 $T$ 通过从叶子节点到根节点依次应用节点标记的操作符生成图 $G$。并且,一个图 $G$ 的秩宽最多为 $t$ 当且仅当 $G$ 的某个标记可以由 t - 标记解析树生成。此外,一个有 $n$ 个顶点的图的宽度为 $k$ 的秩分解可以在 $O(t^2 \cdot n^2)$ 时间内转换为一个有 $\Theta(n)$ 个节点的 t - 标记解析树。
2.3 博弈论方法证明
2.3.1 等价关系与特征树
已知任何秩宽为 $t$ 的图都可以用 t - 标记解析树表示。对于任意整数 $q$,在所有 t - 标记图的类上定义一个等价关系:t - 标记图 $G_1$ 和 $G_2$ 等价,记为 $G_1 \equiv_{MSO}^q G_2$,当且仅当对于每个量词秩最多为 $q$ 的 MSO1 公式 $\phi$,$G_1 \models \phi$ 当且仅当 $G_2 \models \phi$,即没有最多 $q$ 个嵌套量词的公式可以区分它们。等价类的数量取决于量词秩 $q$ 和标签数量 $t$,每个等价类可以用一个大小为 $f(q, t)$ 的树状结构表示,这个树状结构称为深度为 $q$ 的简化特征树,记为 $RC_q(G)$,它捕获了在该等价类中的图和量词秩最多为 $q$ 的公式上可以进行的所有模型检查博弈。
2.3.2 算法步骤
- 给定一个有 $n$ 个顶点的图的 t - 标记解析树,可以在 $O(f’(q, t) \cdot n)$ 时间内构造深度为 $q$ 的简化特征树。
- 要判断对于某个量词秩最多为 $q$ 的 MSO1 公式 $\phi$,$G \models \phi$ 是否成立,我们只需使用 $RC_q(G)$ 在 $\phi$ 和 $G$ 上模拟模型检查博弈,这需要额外的 $O(f(q, t))$ 时间。
因此,我们可以在 $O(f’‘(q, t) \cdot n)$ 时间内判断 $G \models \phi$,从而证明了主要定理:对于量词秩 $qr(\phi) \leq q$ 的 MSO1 公式 $\phi$,存在一个算法,它以图 $G$ 的 t - 标记解析树分解 $T$ 为输入,在 $O(f(q, t) \cdot |T|)$ 时间内判断 $G \models \phi$,其中 $f$ 是一个可计算函数,$|T|$ 是解析树 $T$ 的节点数量。
下面是一个流程图,展示了使用博弈论方法判断图是否满足 MSO1 公式的主要步骤:
graph TD;
A[输入 t - 标记解析树 T 和 MSO1 公式 ϕ] --> B[构造 RC_q(G)];
B --> C[模拟模型检查博弈];
C --> D{G |= ϕ?};
D -- 是 --> E[输出 True];
D -- 否 --> F[输出 False];
整个证明过程的关键步骤总结如下表:
| 步骤 | 操作 | 时间复杂度 |
| ---- | ---- | ---- |
| 1 | 构造简化特征树 $RC_q(G)$ | $O(f’(q, t) \cdot n)$ |
| 2 | 模拟模型检查博弈 | $O(f(q, t))$ |
| 3 | 判断 $G \models \phi$ | $O(f’‘(q, t) \cdot n)$ |
综上所述,我们通过博弈论方法证明了对于有界秩宽图上能用 MSO1 表达的问题可以实现线性时间求解,并且详细阐述了相关的概念和算法步骤,为图论算法的研究提供了一种新的思路和方法。
超级会员免费看
4177

被折叠的 条评论
为什么被折叠?



