标签约束外平面图的直线网格绘制及识别
在图论和图绘制领域,标签约束外平面图的研究有着重要的意义。本文将深入探讨标签约束外平面图的相关概念、绘制算法以及识别方法。
基本定义
- 图的基本概念 :设 (G = (V, E)) 是一个连通简单图,其中 (V) 是顶点集,(E) 是边集。用 (n = |V|) 表示顶点数,(m = |E|) 表示边数。(G - {u, v}) 表示一个新图 (G’ = (V’, E’)),其中 (V’ = V(G) - {u, v}),(E’) 是由 (V’) 在 (G) 中诱导的边集。图中的路径是一个不同顶点的有序列表 (v_1, v_2, …, v_q \in V),满足 ((v_{i - 1}, v_i) \in E) 对于所有 (2 \leq i \leq q)。
- 平面图和外平面图 :如果一个图可以嵌入平面,使得除了在它们共同关联的顶点处外,没有两条边几何相交,则该图是平面图。平面嵌入固定的平面图称为平面图形。平面图形将平面划分为连通区域,称为面,有界区域是内面,无界区域是外面。如果一个平面图形的所有顶点都位于外面上,则它是外平面图。
- 最大外平面图和对偶树 :最大外平面图是不能在不失去外平面性的情况下添加边的外平面图。其每个内面都有三条边,因此最大外平面图 (G) 的对偶树 (T) 是一棵二叉树,其中 (T) 的顶点对应 (G) 的内面,当 (G) 中对应 (T) 的两个顶点 (x) 和 (y) 的面共享一条边时,(x) 和 (y) 相邻。
-
二叉树的顶点标记
:设 (T) 是一棵二叉树,(r) 是根。顶点 (u) 相对于 (r) 的标记 (L_r(u)) 定义如下:
- 若 (u) 是叶节点,则 (L_r(u) = 1);
- 若 (u) 只有一个子节点 (q) 且 (L_r(q) = k),则 (L_r(u) = k);
- 若 (u) 有两个子节点 (s) 和 (t),且 (L_r(s) = k),(L_r(t) = k’) 且 (k > k’),则 (L_r(u) = k);
- 若 (u) 有两个子节点 (s) 和 (t),且 (L_r(s) = k),(L_r(t) = k),则 (L_r(u) = k + 1)。
| 标记规则 | 条件 | 标记结果 |
|---|---|---|
| 规则 1 | (u) 是叶节点 | (L_r(u) = 1) |
| 规则 2 | (u) 只有一个子节点 (q) 且 (L_r(q) = k) | (L_r(u) = k) |
| 规则 3 | (u) 有两个子节点 (s) 和 (t),(L_r(s) = k),(L_r(t) = k’) 且 (k > k’) | (L_r(u) = k) |
| 规则 4 | (u) 有两个子节点 (s) 和 (t),(L_r(s) = k),(L_r(t) = k) | (L_r(u) = k + 1) |
二叉树相关路径和标记性质
- 路径定义 :在有根有序二叉树 (T) 中,有多种路径类型,如左 - 左路径((u) 是路径所有顶点的祖先,除 (u) 外每个顶点是其父节点的左子节点)、右 - 右路径、交叉路径(既不是左 - 左路径也不是右 - 右路径)、最左路径(最大左 - 左路径且一端点是根)、最右路径、左 - 右路径(从顶点 (x) 开始,(v_1) 是 (x) 的左子节点,(v_{i + 1}) 是 (v_i) 的右子节点)和右 - 左路径。
- 扁平标记 :如果 (T) 中由相同标记的顶点诱导的任何路径要么是左 - 左路径要么是右 - 右路径,则 (L_r(T)) 是扁平标记。对于扁平标记的二叉树,任何顶点 (x) 的左 - 右(右 - 左)路径中除 (x) 的左(右)子节点外的每个顶点的标记都小于 (x) 的标记。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B(定义有根有序二叉树 T 和根 r):::process
B --> C(判断 Lr(T) 是否为扁平标记):::process
C -->|是| D(对于任意顶点 x):::process
D --> E(分析 x 的左 - 右路径):::process
E --> F(除左子节点外顶点标记小于 x 标记):::process
C -->|否| G(不符合扁平标记性质):::process
F --> H([结束]):::startend
G --> H
标签约束外平面图的定义
设 (G) 是最大外平面图,(T) 是其对偶树。若 (T) 可以转换为有根有序二叉对偶树 (T_r),使得 (L_r(T_r)) 是扁平标记,则 (G) 是标签约束外平面图。
绘制算法
- 算法思路 :对于标签约束外平面图 (G),首先绘制其有根有序二叉对偶树 (T_r)。将 (T_r) 顶点的 (x) 坐标按中序遍历顺序从 1 开始递增分配,(y) 坐标是顶点标记减 1。然后放置对应根 (r) 的面 (f_r) 的极点,添加 (G) 中不在 (T_r) 中的边。
-
算法步骤
:
- 绘制 (T_r):根据坐标分配规则放置 (T_r) 的顶点并添加边。
- 放置极点:将面 (f_r) 的左顶点和右顶点分别放置在 ((0, k)) 和 ((n - 1, k)) 处,其中 (L_r(T_r) = k)。
- 添加剩余边:使用直线段添加 (G) 中不在 (T_r) 中的边。
- 算法定理 :算法 Draw - Graph 能在线性时间内找到标签约束外平面图 (G) 的直线网格绘制,面积为 (O(n \log n))。
绘制算法的正确性证明
-
直线网格绘制证明
:根据 (T_r) 顶点坐标分配规则,有以下引理:
- 引理 6:设 (G) 是标签约束外平面图,(T_r) 是其有根有序二叉对偶树。若 (u) 是 (T_r) 的顶点,(s) 和 (t) 分别是 (u) 的左子节点和右子节点,则以 (s) 为根的子树中任何顶点的 (x) 坐标小于以 (t) 为根的子树中任何顶点的 (x) 坐标。
- 引理 7:设 (G) 是标签约束外平面图,(T_r) 是其有根有序二叉对偶树。若 (u) 和 (v) 是 (T_r) 的顶点且 (u) 是 (v) 的祖先,则 (u) 的 (y) 坐标大于或等于 (v) 的 (y) 坐标。
- 引理 8:设 (G) 是最大外平面图,(T_r) 是其有根有序二叉对偶树。若 (q) 是 (T_r) 的顶点,(x) 和 (y) 分别是 (q) 的左子节点和右子节点,(f_q),(f_x) 和 (f_y) 是 (G) 中对应 (q),(x) 和 (y) 的面,则 (f_q) 的左顶点是 (f_x) 的左顶点,(f_q) 的右顶点是 (f_y) 的右顶点。
-
无交叉绘制证明
:
- 根对应面的两个极点之间的边可无交叉绘制,因为极点位于 (T_r) 所有顶点上方。
- 根对应面的左顶点与 (T_r) 最左路径上的顶点相邻,这些边可无交叉绘制,因为左顶点位于最左路径所有顶点的左上方。同理,右顶点与最右路径上的顶点的边也可无交叉绘制。
- 最大外平面图中其余边是 (T_r) 中顶点与左 - 右或右 - 左路径上顶点之间的边,根据坐标和标记性质,这些边也可无交叉绘制。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B(绘制有根有序二叉对偶树 Tr):::process
B --> C(放置对应根 r 的面 fr 的极点):::process
C --> D(添加 G 中不在 Tr 中的边):::process
D --> E(判断是否有边交叉):::process
E -->|否| F(完成直线网格绘制):::process
E -->|是| G(调整绘制):::process
G --> D
F --> H([结束]):::startend
标签约束外平面图的直线网格绘制及识别
标签约束外平面图的识别算法
- 朴素方法的局限性 :对于最大外平面图 (G) 和其有根有序二叉对偶树 (T_r),通过自底向上计算可以在线性时间内得到 (L_r(T_r)),验证 (L_r(T_r)) 是否为扁平标记也能在线性时间内完成。但如果 (L_r(T_r)) 不是扁平标记,需要计算 (G) 的对偶树 (T) 中每个度为 1 或 2 的顶点作为根时的顶点标记并验证是否为扁平标记,这种朴素方法的时间复杂度为 (O(n^2))。
-
观察与引理
:在转换根时,只有 (T_r) 中 (r - p) 路径上的顶点的子节点顺序会改变,其余顶点的子节点顺序不变。有以下相关引理:
- 引理 10:设 (G) 是最大外平面图,(T_r) 是其有根有序二叉对偶树。若 (s) 是 (r) 在 (T_r) 中的右(左)子节点,(p) 是 (T) 中除 (r) 外度为 1 或 2 的顶点,且 (s) 在 (T_p) 中仍是 (r) 的子节点,则 (s) 是 (r) 在 (T_p) 中的左(右)子节点。
- 引理 11:设 (G) 是最大外平面图,(T_r) 是其有根有序二叉对偶树。若 (s) 是 (T_r) 中除 (r) 外度为 1 或 2 的顶点,(t) 是 (s) 在 (T_r) 中的右(左)子节点,则 (t) 是 (s) 在 (T_s) 中的左(右)子节点。
- 引理 12:设 (G) 是最大外平面图,(T_r) 是其有根有序二叉对偶树。若 (x) 是度为 3 的顶点,(s) 是 (x) 的父节点,(p) 和 (q) 是 (x) 在 (T_r) 中的左、右子节点,(y) 是 (x) 在 (T_r) 中左(右)子树的度为 1 或 2 的后代,则在 (T_y) 中 (s)((p))是 (x) 的右子节点,(q)((s))是 (x) 的左子节点。
-
计算标记的引理
:
- 引理 13:设 (G) 是最大外平面图,(T_r) 是其有根有序二叉对偶树。若已知 (L_r(T_r)),则对于 (T_r) 中 (r) 的度为 1 或 2 的子节点 (p),可以在常数时间内计算 (L_p(T_p))。
- 引理 14:设 (G) 是最大外平面图,(T_r) 是其有根有序二叉对偶树。若已知 (L_r(T_r)),对于 (r) 的子节点 (p) 及其度为 1 或 2 的后代 (x),可以在常数时间内计算 (L_x(p))。
| 引理编号 | 引理内容 |
|---|---|
| 引理 10 | (T_r) 中 (r) 的右(左)子节点 (s),在 (T_p) 中变为左(右)子节点(特定条件下) |
| 引理 11 | (T_r) 中 (s) 的右(左)子节点 (t),在 (T_s) 中变为左(右)子节点 |
| 引理 12 | (T_r) 中 (x) 的子节点关系在 (T_y) 中改变(特定条件下) |
| 引理 13 | 已知 (L_r(T_r)),可在常数时间计算 (L_p(T_p))((p) 是 (r) 度为 1 或 2 的子节点) |
| 引理 14 | 已知 (L_r(T_r)),可在常数时间计算 (L_x(p))((x) 是 (p) 度为 1 或 2 的后代) |
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B(已知有根有序二叉对偶树 Tr 和 Lr(Tr)):::process
B --> C(选择 r 的度为 1 或 2 的子节点 p):::process
C --> D(根据引理 13 计算 Lp(Tp)):::process
D --> E(选择 p 的度为 1 或 2 的后代 x):::process
E --> F(根据引理 14 计算 Lx(p)):::process
F --> G([结束]):::startend
-
具体识别算法步骤
:
- 计算 (L_r(T_r))。若 (L_r(T_r)) 是扁平标记,则 (G) 是标签约束外平面图。
- 若 (L_r(T_r)) 不是扁平标记,检查是否存在顶点 (x \in T_r) 使得其两个子树都包含交叉路径。若存在,则 (G) 不是标签约束外平面图。
- 假设 (L_r(T_r)) 不是扁平标记且不存在上述顶点 (x),此时 (T_r) 中检测到交叉路径的顶点都在一条路径上,且 (r) 是该路径的一个端点。设 (u) 是该路径的另一个端点,即离 (r) 最远且检测到交叉路径的顶点。
-
考虑 (u) 的情况:
-
若 (u) 不是 (T_r) 的根:
- 若 (u) 的度为 2:根据引理 13 和 14,在 (O(l)) 时间内计算 (L_u(T_u)),其中 (l) 是 (r - u) 路径的长度。若在计算过程中,在 (T_r) 中 (u) 的任何祖先 (x) 处检测到交叉路径,则对于 (T_r) 中 (x) 的任何后代 (y),(L_y(T_y)) 都不可能是扁平标记,所以 (G) 不是标签约束外平面图。
-
若 (u) 不是 (T_r) 的根:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B(计算 Lr(Tr)):::process
B --> C(判断 Lr(Tr) 是否为扁平标记):::process
C -->|是| D(G 是标签约束外平面图):::process
C -->|否| E(检查是否存在 x 使两子树含交叉路径):::process
E -->|是| F(G 不是标签约束外平面图):::process
E -->|否| G(确定 u 为交叉路径另一端点):::process
G --> H(判断 u 是否为根):::process
H -->|是| I(进一步分析):::process
H -->|否| J(判断 u 度是否为 2):::process
J -->|是| K(计算 Lu(Tu)):::process
K --> L(判断是否有祖先 x 检测到交叉路径):::process
L -->|是| F
L -->|否| M(继续检查其他情况):::process
D --> N([结束]):::startend
F --> N
M --> N
I --> N
综上所述,我们详细介绍了标签约束外平面图的定义、绘制算法以及高效的识别算法。绘制算法能够在线性时间内得到面积为 (O(n \log n)) 的直线网格绘制,识别算法通过巧妙的观察和引理,避免了朴素方法的高时间复杂度,为实际应用中处理标签约束外平面图提供了有效的解决方案。
标签约束外平面图绘制与识别
超级会员免费看
24

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



