改进的向上平面性测试算法及相关应用
1. 最小成本流相关概念
在网络流问题中,我们用 $Val(x)$ 表示供应节点“供应”的流量总和。对于网络 $N$ 和流量 $x$,定义其残量图 $R(N,x)$。残量图 $R(N,x)$ 与 $N$ 具有相同的顶点,对于 $N$ 中的每条边 $e = (u, v)$,$R(N,x)$ 中有边 $e’ = (u, v)$ 和 $e’’ = (v, u)$。边 $e’$ 的成本 $c(e’) = c(e)$,流量上限 $u(e’) = u(e) - x(e)$;边 $e’‘$ 的成本 $c(e’‘) = -c(e)$,流量上限 $u(e’‘) = x(e)$。
路径 $P$ 在 $R(N,x)$ 中的成本定义为:
[cost(P) = \sum_{\forall e \in P} c(e)]
路径 $P$ 的容量是 $P$ 上所有边的最小 $u(e)$。
有如下定理:
设 $x$ 是网络 $N$ 中值为 $Val(x)$ 的最小成本流,$P$ 是 $R(N,x)$ 中的最小成本路径。设 $x’$ 是 $R(N,x)$ 中仅沿 $P$ 有非零流量的流。那么流 $x’‘$ 是值为 $Val(x) + Val(x’)$ 的最小成本流,满足:
[x’‘(e) = x(e) + x’(e), \forall e \in E]
该定理引出了连续路径增广算法来寻找最小成本流。
2. 改进的向上平面性测试算法
设 $F$ 表示图 $G_{\varphi}$ 的面集,$K = S \cup T$ 表示 $G_{\varphi}$ 中的源点和汇点集。给定一个二分图 $BG_{\varphi} = (K, F, E_B)$,当且仅当源点或汇点 $s$ 与面 $f$ 相关联时,$BG_{\varphi}$ 中有边 $(s, f)$。同时,给定一个函数 $c : F \to N$,使得对于每个 $f \in F$,$c(f) = n_f - 1$。注意到 $BG_{\varphi}$ 是平面图,因此有 $O(n)$ 条边。
- 如果 $BG_{\varphi}$ 没有完美的 $c$ - 匹配,那么 $G_{\varphi}$ 没有一致的分配。
- 如果 $BG_{\varphi}$ 有完美的 $c$ - 匹配,那么 $G_{\varphi}$ 中的每个面 $f$ 可以分配 $n_f - 1$ 个源点或汇点。根据推论 1,可以在 $O(r^{\frac{3}{2}})$ 时间内判断 $BG_{\varphi}$ 是否有关于函数 $c$ 的完美 $c$ - 匹配。
假设 $M$ 是 $BG_{\varphi}$ 中的一个完美 $c$ - 匹配。若能证明存在一个面 $h$,使得 $h$ 可以分配 $n_h + 1$ 个源点或汇点,则嵌入有向图 $G_{\varphi}$ 是向上平面的。由引理 1 可知,会有两个未匹配的源点/汇点,设为 $s$ 和 $s’$。
- 若面 $f$ 可从 $s$ 到达,即存在交替路径 $P$:$s = s_0, f_1, \cdots, s_{k - 1}, f_k = f$,满足 $(s_{i - 1}, f_i) \in E_B \setminus M$ 且 $(s_{i + 1}, f_i) \in M$。
- 类似地,若 $f$ 也可从 $s’$ 到达,存在另一条交替路径 $P’$:$s’ = s_0’, f_1’, \cdots, s_{l - 1}’, f_l’ = f$,满足 $(s_{i - 1}’, f_i’) \in E_B \setminus M$ 且 $(s_{i + 1}’, f_i’) \in M$。
可以证明 $P$ 和 $P’$ 的第一个公共顶点是一个面。使用简单修改的 BFS 或 DFS 可以在线性时间内搜索从 $s$ 和 $s’$ 可达的所有面。设 $\hat{P}$ 是 $P$ 从 $s$ 到 $\hat{f}$ 的交替子路径,$\hat{P}’$ 是从 $s’$ 到 $\hat{f}$ 的交替路径。令 $c(\hat{f}) = n_f + 1$,应用这些路径得到一个容量匹配,使得 $IM(\hat{f}) = n_{\hat{f}} + 1$,对于所有 $f \neq \hat{f}$,$IM(f) = n_f - 1$。通过将源点/汇点 $v$ 分配给 $G_{\varphi}$ 中的面 $f$(如果边 $(v, f) \in M$),可以得到 $G_{\varphi}$ 的一致分配。
若从 $s$ 和 $s’$ 可达的面集不相交,则没有一致的分配。设 $R_1$ 和 $R_2$ 分别是通过交替路径从 $s$ 和 $s’$ 可达的面集,且 $R_1 \cap R_2 = \varnothing$。可以证明:
[|N(R_1)| > \sum_{f \in R_1} n_f - 1]
其中 $N(R_1)$ 是 $R_1$ 在 $BG_{\varphi}$ 中的邻域。每个面 $f \in R_1$ 必须分配 $n_f - 1$ 个不同的源点/汇点,这在 $R_1$ 的邻域中占了 $\sum_{f \in R_1} n_f - 1$ 个源点/汇点,再加上 $s$,其总大小至少为 $(\sum_{f \in R_1} n_f - 1) + 1$。这意味着在一致分配中,外部面必须属于 $R_1$。类似地,$|N(R_2)| > \sum_{f \in R_2} n_f - 1$,外部面必须属于 $R_2$,但这是不可能的,因为 $R_1 \cap R_2 = \varnothing$。
因此有定理:如果 $BG_{\varphi}$ 有完美的 $c$ - 匹配,则可以在线性时间内检查 $G_{\varphi}$ 是否有一致的分配。
改进的向上平面性测试算法如下:
Algorithm 1. Improved Upward Planarity Checking
1: Input: A planar, acyclic and bimodal embedded digraph Gφ
2: Output: True if Gφ is upward planar; False otherwise
3: Construct the bipartite graph BGφ = (K, F, EB)
4: For each f ∈F set c(f) = nf −1.
5: Find the maximum c-matching M in BGφ
6: if |M| < |S| + |T | −2 then
7:
Return False
8: end if
9: u′ and v′ are the two vertices in BGφ that are not saturated
10: Run BFS from u′ coloring each face as red.
11: RUN BFS from v′
12: if reached a red face vertex then
13:
Return True
14: else
15:
Return False
16: end if
可以在 $O(n)$ 时间内构造 $BG_{\varphi}$,在 $O(r^2)$ 时间内检查 $BG_{\varphi}$ 是否有关于函数 $c$ 的完美 $c$ - 匹配,检查可行的外部面需要线性时间。因此,该算法的时间复杂度为 $O(n + r^{\frac{3}{2}})$。
Mermaid 流程图展示算法流程:
graph TD;
A[输入平面图Gφ] --> B[构造二分图BGφ];
B --> C[设置c(f) = nf - 1];
C --> D[寻找最大c - 匹配M];
D --> E{是否|M| < |S| + |T| - 2};
E -- 是 --> F[返回False];
E -- 否 --> G[找到未饱和顶点u′和v′];
G --> H[从u′运行BFS并标记面为红色];
H --> I[从v′运行BFS];
I --> J{是否到达红色面顶点};
J -- 是 --> K[返回True];
J -- 否 --> L[返回False];
3. 非向上平面性的证书应用
可以将向上平面性测试算法的决策看作一个匹配问题来计算证书,该证书可确保算法实现对给定输入计算出正确答案。
- 当 $G_{\varphi}$ 是向上平面时,$G_{\varphi}$ 的向上平面绘制就是证书。
- 当 $G_{\varphi}$ 是循环图时,可以在平面图中突出显示有向循环。
- 当 $G_{\varphi}$ 不是双峰图时,可以在平面图中放大非双峰顶点。
考虑第 2 节中定义的二分图 $BG_{\varphi}$。Hall 定理的一个简单推论为 $BG_{\varphi}$ 没有完美的 $c$ - 匹配提供了证明:
- 定理 5(Hall):二分图 $G = (V, W, E)$ 有一个匹配饱和 $W$ 中的所有顶点,当且仅当对于所有 $S \subseteq W$,$|N(S)| \geq |S|$。
- 推论 2:如果 $BG_{\varphi}$ 没有完美的 $c$ - 匹配,那么存在 $F’ \subset F$,使得:
[|N(F’)| < \sum_{f \in F’} (n_f - 1)]
面的子集 $F’$ 作为 $BG_{\varphi}$ 没有完美匹配的证明。在 $G_{\varphi}$ 中,这意味着存在一个面的子集 $F’$,使得与 $F’$ 相关联的源点或汇点的数量严格小于 $F’$ 的容量。在 $G_{\varphi}$ 的平面图中,可以突出显示 $F’$ 中所有面的开关以及这些面中出现的源点和汇点。对于中等大小的图,用户可以直观地检查该图以验证 $G_{\varphi}$ 确实是非向上平面的;对于较大的图,可以使用简单的线性时间验证算法。
设 $M$ 是 $BG_{\varphi}$ 中的一个非完美的最大 $c$ - 匹配。显然,$BG_{\varphi}$ 至少有一个面 $f$ 未被饱和。找到 $BG_{\varphi}$ 中所有相对于 $M$ 可从 $f$ 到达的顶点,即所有有从 $f$ 出发的交替路径的顶点。由于 $M$ 是最大的,所有可能的交替路径都不是增广路径。设 $F’$ 是通过从 $f$ 出发的交替路径到达的面。由于 $f$ 未被饱和且是 $F’$ 的一部分,我们得出 $|N(F’)| < \sum_{f \in F’} (n_f - 1)$。
即使 $BG_{\varphi}$ 有完美的匹配,若 $G_{\varphi}$ 中没有面可以作为外部面接受剩余的两个源点/汇点,分配问题仍然无解。可以通过展示存在外部面冲突来给出一个单一的证明。如果存在两个不相交的面集 $R_1 \subseteq F$ 和 $R_2 \subseteq F$,$R_1 \cap R_2 = \varnothing$,使得:
[|N(R_1)| > \sum_{f \in R_1} n_f - 1 \text{ 且 } |N(R_2)| > \sum_{f \in R_2} n_f - 1]
则嵌入有向图 $G_{\varphi}$ 存在外部面冲突。第一个条件意味着外部面必须属于 $R_1$,第二个条件意味着外部面必须属于 $R_2$,从而证明 $G_{\varphi}$ 不是向上平面图。可以为用户用不同颜色突出显示这些面。
可以通过在 $BG_{\varphi}$ 上运行修改后的 BFS 找到给定嵌入有向图是非向上平面的证书,由于 $BG_{\varphi}$ 有 $O(n)$ 条边,有如下定理:可以在 $O(n)$ 时间内找到嵌入向上平面性测试算法计算出正确答案的证书。
4. 改进准向上平面性测试的应用
为了改进计算嵌入有向图的最小弯曲准向上平面绘制的实际运行时间,构建一个最小成本网络 $N$:
- $N$ 的顶点由 $G_{\varphi}$ 的源点/汇点和面组成。
- 对于 $G_{\varphi}$ 中的面 $f$,如果 $f$ 是外部面,$d(f) = n_f + 1$;否则 $d(f) = n_f - 1$。如果 $f$ 是有向循环且是内部面,$d(f) = -1$,即它是一个供应节点。
- 每个源点或汇点 $v$ 的需求 $d(v) = -1$ 如果源点或汇点 $v$ 与面 $f$ 相关联,则 $N$ 中有边 $e = (v, f)$,$u(e) = 1$,$c(e) = 0$。
- 每对相邻面之间有边 $e$,$u(e) = \infty$,$c(e) = 2$。
使用 $c$ - 匹配来减少在 $N$ 中寻找最小成本流所需的迭代次数。设 $BG_{\varphi} = (K, F, E)$ 是一个二分图,其中 $K$ 是 $G_{\varphi}$ 中的源点和汇点集,$F$ 是面集。定义一个函数 $cap : F \to N$,当 $f$ 是外部面时,$cap(f) = n_f + 1$;当 $f$ 是内部面且开关数为 0 时,$cap(f) = 0$;当 $f$ 是内部面且开关数为正 时,$cap(f) = n_f - 1$。
- 找到 $BG_{\varphi}$ 中关于函数 $cap$ 的最大 $c$ - 匹配 $M$。
- 如果 $|M| = |S| + |T|$ 且 $G_{\varphi}$ 的任何面边界都不是有向循环,那么 $G_{\varphi}$ 是向上平面的,即 $G_{\varphi}$ 有一个无弯曲的准向上平面绘制。
- 准向上平面绘制有正弯曲数的情况有两种:$G_{\varphi}$ 的任何面边界都不是有向循环且 $|M| < |S| + |T|$,或者 $G_{\varphi}$ 至少有一个面边界是有向循环。
可以将 $M$ 映射到 $N$ 中的流 $x$:如果对于源点或汇点 $v$ 和面 $f$,边 $(v, f) \in M$,则在 $N$ 中的边 $(v, f)$ 上添加一个单位流。流 $x$ 的值为 $|M|$,且 $x$ 的总成本为 0,因为 $x(e)$ 仅在成本为 0 的边上为正。可以证明 $x$ 是值为 $|M|$ 的最小成本流。
设 $U$ 是相对于流 $x$ 流出量为 0 的供应节点集。通过对 3012 个随机生成的平面双峰连通有向图进行实验,发现大多数情况下 $|U|$ 小于 2,很少超过 3。因此,在实际情况中,$|U|$ 可以认为是一个小数字。
将网络 $N$ 修改为有一个单一供应节点 $\hat{s}$ 和一个单一需求节点 $\hat{t}$,修改后的网络大小仍为 $O(n)$,修改需要 $O(n)$ 时间。可以通过反复从 $\hat{s}$ 到 $\hat{t}$ 取最便宜的增广路径直到达到最大流值来找到 $N$ 中的最小成本流。通常使用 Dijkstra 算法在 $O(n \log n)$ 时间内找到最便宜的增广路径,但可以通过将 $N$ 修改为新网络 $N’$ 在 $O(n)$ 时间内完成。$N’$ 的构造方法是将 $G_{\varphi}$ 中面 $h$ 和 $g$ 之间的每条边 $(h, g)$ 替换为一个虚拟顶点 $v$ 和边 $e_1 = (h, v)$ 和 $e_2 = (v, g)$,并令 $u(e_1) = u(e_2) = u(e)$,$c(e_1) = c(e_2) = 1$。然后使用修改后的 BFS 算法在 $O(n)$ 时间内找到最便宜的增广路径。
构造流网络 $N$ 需要 $O(n)$ 时间,因此可以在 $O(n + r^{\frac{3}{2}} + |U|n)$ 时间内找到 $G_{\varphi}$ 的最小弯曲绘制。由于实验表明 $|U| \approx O(1)$,实际运行时间接近 $O(n + r^{\frac{3}{2}})$。
5. 结论
- 提出了一种有效的方法来寻找可行的外部面,从而可以在 $O(n + r^{\frac{3}{2}})$ 时间内测试嵌入有向图是否是向上平面的。
- 展示了如何为嵌入向上平面性测试算法计算正确性证书。
- 利用改进的向上平面性测试算法,提高了计算最小弯曲准向上平面绘制的实际运行时间。
表格总结各算法时间复杂度:
| 算法或操作 | 时间复杂度 |
| — | — |
| 构造二分图 $BG_{\varphi}$ | $O(n)$ |
| 检查 $BG_{\varphi}$ 是否有完美 $c$ - 匹配 | $O(r^2)$ |
| 改进的向上平面性测试算法 | $O(n + r^{\frac{3}{2}})$ |
| 寻找非向上平面性证书 | $O(n)$ |
| 构造流网络 $N$ | $O(n)$ |
| 寻找最小弯曲绘制 | $O(n + r^{\frac{3}{2}} + |U|n)$(实际接近 $O(n + r^{\frac{3}{2}})$) |
改进的向上平面性测试算法及相关应用(续)
6. 各算法的详细操作步骤及分析
6.1 改进的向上平面性测试算法操作步骤
该算法主要用于判断一个嵌入有向图 $G_{\varphi}$ 是否为向上平面,具体步骤如下:
1.
输入
:一个平面、无环且双峰的嵌入有向图 $G_{\varphi}$。
2.
构造二分图
:构建二分图 $BG_{\varphi} = (K, F, E_B)$,其中 $K$ 是源点和汇点集,$F$ 是面集。此步骤时间复杂度为 $O(n)$。
3.
设置函数值
:对于每个面 $f \in F$,设置 $c(f) = n_f - 1$。
4.
寻找最大 $c$ - 匹配
:在 $BG_{\varphi}$ 中找到最大 $c$ - 匹配 $M$。
5.
匹配数量判断
:
- 如果 $|M| < |S| + |T| - 2$,则返回
False
,表明 $G_{\varphi}$ 不是向上平面。
- 否则,找到 $BG_{\varphi}$ 中两个未饱和的顶点 $u’$ 和 $v’$。
6.
广度优先搜索(BFS)操作
:
- 从 $u’$ 运行 BFS,并将每个面标记为红色。
- 从 $v’$ 运行 BFS。
7.
结果判断
:
- 如果到达了红色面顶点,则返回
True
,说明 $G_{\varphi}$ 是向上平面。
- 否则,返回
False
。
该算法整体时间复杂度为 $O(n + r^{\frac{3}{2}})$,其中构造二分图、设置函数值等步骤为后续的匹配和搜索操作提供了基础,而 BFS 的运用则高效地完成了可达性的判断。
6.2 寻找非向上平面性证书的操作步骤
当需要证明一个嵌入有向图 $G_{\varphi}$ 是非向上平面时,可按以下步骤寻找证书:
1.
考虑二分图匹配情况
:
- 若 $BG_{\varphi}$ 没有完美的 $c$ - 匹配,找到满足 $|N(F’)| < \sum_{f \in F’} (n_f - 1)$ 的面子集 $F’$。在平面图中突出显示 $F’$ 中所有面的开关以及这些面中出现的源点和汇点,作为非向上平面性的证明。
- 若 $BG_{\varphi}$ 有完美匹配,但存在外部面冲突,即找到两个不相交的面集 $R_1$ 和 $R_2$,满足 $|N(R_1)| > \sum_{f \in R_1} n_f - 1$ 且 $|N(R_2)| > \sum_{f \in R_2} n_f - 1$。用不同颜色突出显示 $R_1$ 和 $R_2$ 中的面。
2.
运行修改后的 BFS
:在 $BG_{\varphi}$ 上运行修改后的 BFS,以找到相关的面集。由于 $BG_{\varphi}$ 有 $O(n)$ 条边,该操作可在 $O(n)$ 时间内完成。
此过程通过对二分图匹配情况的分析和 BFS 搜索,有效地找到了非向上平面性的证据。
6.3 改进准向上平面性测试的操作步骤
为了改进计算嵌入有向图最小弯曲准向上平面绘制的实际运行时间,具体操作如下:
1.
构建最小成本网络 $N$
:
- 确定 $N$ 的顶点,由 $G_{\varphi}$ 的源点/汇点和面组成。
- 对于面 $f$,根据其是否为外部面、是否为有向循环等情况设置 $d(f)$ 的值。
- 每个源点或汇点 $v$ 的需求 $d(v) = -1$。
- 若源点或汇点 $v$ 与面 $f$ 相关联,添加边 $e = (v, f)$,并设置 $u(e) = 1$,$c(e) = 0$;每对相邻面之间添加边 $e$,设置 $u(e) = \infty$,$c(e) = 2$。此步骤时间复杂度为 $O(n)$。
2.
使用 $c$ - 匹配
:
- 构建二分图 $BG_{\varphi} = (K, F, E)$,定义函数 $cap : F \to N$。
- 找到 $BG_{\varphi}$ 中关于函数 $cap$ 的最大 $c$ - 匹配 $M$。
- 根据 $M$ 的情况判断 $G_{\varphi}$ 是否为向上平面,以及准向上平面绘制是否有正弯曲数。
3.
映射匹配到流
:将 $M$ 映射到 $N$ 中的流 $x$,若边 $(v, f) \in M$,则在 $N$ 中的边 $(v, f)$ 上添加一个单位流。
4.
实验确定 $|U|$
:通过对大量随机生成的平面双峰连通有向图进行实验,确定相对于流 $x$ 流出量为 0 的供应节点集 $U$ 的大小 $|U|$。实验表明,实际情况中 $|U|$ 通常较小。
5.
修改网络并寻找最小成本流
:
- 将网络 $N$ 修改为有一个单一供应节点 $\hat{s}$ 和一个单一需求节点 $\hat{t}$,修改后的网络大小仍为 $O(n)$,修改需 $O(n)$ 时间。
- 反复从 $\hat{s}$ 到 $\hat{t}$ 取最便宜的增广路径直到达到最大流值。通过将 $N$ 修改为新网络 $N’$,使用修改后的 BFS 算法在 $O(n)$ 时间内找到最便宜的增广路径。
整个过程通过构建网络、利用匹配、实验分析和网络修改等步骤,有效地提高了计算最小弯曲准向上平面绘制的效率。
7. 各算法复杂度对比及优缺点分析
| 算法或操作 | 时间复杂度 | 优点 | 缺点 |
|---|---|---|---|
| 改进的向上平面性测试算法 | $O(n + r^{\frac{3}{2}})$ | 时间复杂度相对较低,能高效判断嵌入有向图是否为向上平面 | 依赖于二分图匹配和 BFS 操作,对于复杂图结构可能存在一定局限性 |
| 寻找非向上平面性证书 | $O(n)$ | 能在较短时间内找到证明非向上平面性的证据,为算法正确性提供保障 | 仅能证明非向上平面性,对于向上平面性的证明不够直接 |
| 改进准向上平面性测试 | $O(n + r^{\frac{3}{2}} + | U | n)$(实际接近 $O(n + r^{\frac{3}{2}})$) |
8. 总结与展望
通过上述一系列算法和操作,我们在向上平面性测试、非向上平面性证明以及准向上平面性测试等方面取得了显著的成果。改进的向上平面性测试算法在时间复杂度上有了明显的优化,能够快速判断嵌入有向图的向上平面性;寻找非向上平面性证书的方法为算法的正确性提供了有力的保障;改进准向上平面性测试则提高了计算最小弯曲准向上平面绘制的效率。
然而,这些算法仍存在一定的改进空间。例如,在处理更复杂的图结构时,算法的性能可能会受到影响。未来可以进一步研究如何优化算法,使其在面对大规模、复杂图时仍能保持高效。同时,可以探索将这些算法应用到更多实际场景中,如电路设计、网络布局等领域,以发挥其更大的价值。
Mermaid 流程图展示整体算法流程关系:
graph LR;
A[输入平面图Gφ] --> B[改进的向上平面性测试算法];
B --> C{是否向上平面};
C -- 是 --> D[向上平面绘制作为证书];
C -- 否 --> E[寻找非向上平面性证书];
A --> F[改进准向上平面性测试];
F --> G[计算最小弯曲准向上平面绘制];
通过以上的分析和总结,我们对这些算法有了更深入的理解,也为未来的研究和应用提供了方向。
超级会员免费看
17

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



