三连通平面根图的列举
1. 三连通平面根图的父图
对于顶点数 (n\leq4) 的三连通平面根图是唯一的。后续假设 (n\geq5) 且 (g\geq3),将轮图 (W_n) 视为根平面根图,其中心作为内部顶点,非中心顶点作为根 (r)。设 (G) 是顶点数 (n\geq5) 且 (G\neq W_n) 的三连通平面根图,其父图 (P(G)) 定义如下:
|情况|条件|父图 (P(G)) 的定义|
|----|----|----|
|P1|(\vert f_L\vert\geq4)((f_L) 为最左边的 (r) - 面)|在 (r) 的最左边和第二左边邻接点之间插入新的内部边得到的图|
|P2|(\vert f_L\vert = 3),(B = 3) 且第一个可移除元素是顶点 (u_2)(((u_3, u_1)\in E(G)))|构造 (G/u_2),不引入连接 (u_1) 和 (u_3) 的新边,(u_2) 的邻接点 (w) 与 (u_1)、(u_3) 的边为 (P(G)) 的外部边 (e_1) 和 (e_2),(P(G)) 是对 (\psi(G/u_2)) 加 1 得到的图|
|P3|(G[v_h, v_k]\neq W_n),(\vert f_L\vert = 3),(B\geq4) 且第一个可移除元素是顶点 (u_{i + 1})((1\leq i\leq B - 1))|构造 (G/u_{i + 1}),连接 (u_i) 和 (u_{i + 2}) 的新边成为 (P(G)) 的第 (i) 条外部边 (e_i),(u_{i + 1}) 的邻接点 (w) 与 (u_i)、(u_{i + 2}) 的边为 (P(G)) 的内部边,(P(G)) 是对 (\psi(G/u_{i + 1})) 加 1 得到的图|
|P4|(\vert f_L\vert = 3) 且第一个可移除元素是边 (e)| (P(G)=G - e)|
定义函数 (\varPhi(G)=\vert\psi(G)\vert+\vert B\vert-\min{\vert f_L\vert - 3, 1}),其中 (f_L) 是最左边的 (r) - 面,(B) 是 (G) 的边界长度。对于任意 (G\in G_3(n)-{W_n})((n\geq5)),其父图 (P(G)) 的最左边 (r) - 面长度为 3,(P(G)) 内部面的最大尺寸不超过 (G),且 (3\leq\varPhi(G)<\varPhi(P(G))\leq2n - 2)。
设 (P_0(G) = G),(P_i(G)=P(P_{i - 1}(G)))((i\geq1)),对于任意 (G\in G_3(n))((n\geq5)),存在整数 (i\in[0, 2n - 5]) 使得 (P_i(G)=W_n)。
2. 三连通平面根图的子图
设 (G) 是顶点数 (n\geq5) 的三连通平面根图,若 (G = P(G’)),则称 (G’) 是 (G) 的子图。用 (C(G)) 表示 (G) 的所有子图集合,(C_i(G))((i = 1, 2, 3, 4))表示 (P(G’)) 由父图定义 (P_i) 得到的子图集合。为生成 (G) 的所有子图,引入以下四个操作:
-
O1(e - del)
:假设 (\vert f_L\vert = 3),移除 (r) 的最左边和第二左边邻接点之间的边。
-
O2(v - add)
:假设 (B = 4) 且 (\psi(G)\neq\varnothing),定义 ({e_1, e_2}) 的四个子集 (E_0=\varnothing),(E_1 = {e_1}),(E_2 = {e_2}),(E_3 = {e_1, e_2})。操作 (v - add(h))((h\in{0, 1, 2, 3}))通过移除 (\psi(G)) 中的 (st) 使 (\psi(G)) 减 1,添加新的外部顶点 (v) 及三条边 ((v, u_1)),((v, u_2)),((v, u_3)),删除边集 (E_h),(v) 作为第二个外部顶点 (u_2)。
-
O3(v - insert)
:假设 (B\geq4) 且 (\psi(G)\neq\varnothing),设 (e_i=(a = u_i, b = u_{i + 1})) 是外部边且 (\vert f(e_i)\vert = 3),(V(f(e_i)) = {a, b, w})。定义 (E(f(e_i))) 的四个子集 (E_0=\varnothing),(E_1 = {(a, w)}),(E_2 = {(b, w)}),(E_3 = {(a, w), (b, w)})。操作 (v - insert(e_i, h))((h\in{0, 1, 2, 3}))通过移除 (\psi(G)) 中的 (st) 使 (\psi(G)) 减 1,用三条边 ((a, v)),((v, b)),((v, w)) 替换 (e_i),引入新顶点 (v),删除边集 (E_h),(v) 作为第 ((i + 1)) 个外部顶点 (u_{i + 1})。
-
O4(e - add)
:假设 (B\geq4) 且 (\vert f_L\vert = 3),对于两个非相邻的外部顶点 (u_i) 和 (u_j)((1\leq i + 2\leq j\leq\min{B, B - 2 + i})),添加新边 ((u_i, u_j)) 作为第 (i) 条外部边 (e_i)。
这些操作是定义父图操作的逆操作,通过这些操作构造的图 (G’) 是 (G) 的子图的充要条件如下:
|操作|子图 (G’) 属于 (C_i(G)) 的充要条件|
|----|----|
|e - del|(\vert f_L\vert = 3),(\text{deg}(u_B; G)\geq4) 且 (G) 没有分离 (r) - 面|
|v - add|(B = 4),(\vert f_L\vert = 3),(\vert\psi(G)\vert\geq1) 且 (\text{deg}(x; G’)\geq3) 对所有 (x\in\varGamma(v; G’)) 成立|
|v - insert|(G\neq W_n),(B\geq4),(\vert f_L\vert=\vert f(e_i)\vert = 3),(\vert\psi(G)\vert\geq1),(i\leq p)(若第一个可移除元素是边 (e_p))或 (i\leq p - 1)(若第一个可移除元素是顶点 (u_p)),(\text{deg}(x; G’)\geq3) 对所有 (x\in\varGamma(v; G’)) 成立,(\text{deg}(u_i; G’)\geq4)((\text{deg}(u_1; G’) = 3) 允许)|
|e - add|(B\geq4),(\vert f_L\vert = 3),(i\leq p) 且 (j\leq k_{i - 1})|
3. 算法
为生成 (G\in G_3(n)) 的子图,基于子图的特征(引理 8 - 11),执行以下过程 (Gen(G, \varepsilon = u_2)):
Procedure Gen(G, ε)
Input: A triconnected rooted plane graph G ∈G3(n, g) with |fL| = 3 and the
first removable element ε of G, where ε is either an edge ep = (up, up+1)
or a vertex up.
Output: All descendants G′ ∈G3(n, g) of G.
begin
if the depth of the current recursive call is odd then Output G endif;
/* Let (u1 = r, u2, . . . , uB) denote the boundary of G in the clockwise
order, and ei = (ui, ui+1) denote the edge between ui and ui+1 */
if e = (uB′, z′) ∈E(G), κ(G −e) ≥3 and |f| < g for the uB′-face f
adjacent to fL then Output G′ := G −e /* G′ has no child */
endif;
if B = 4 and |ψ(G)| ≥1 then
for h = 0, 1, 2, 3 do
Let G′ be the graph G2h obtained from G by v-add(h), and
let v be the newly introduced vertex;
if deg(x; G′) ≥3 for all x ∈Γ(v; G′) and |f| ≤g
for all faces f ∈F(v; G′) then
Output G′;
if κ(G′ −e) ≥3 and |f| < g for the edge e = (uB, z) and
the uB-face f adjacent to the leftmost r-face in G′ then
Output G′′ := G′ −e /* G′′ has no child */
endif
endif
endfor
endif;
if G ̸= Wn, B ≥4 and |ψ(G)| ≥1 then
for i = 1, 2, . . . , q do
if |f(ei)| = 3, and “i < p” or “i = p and ε is an edge” then
for h = 0, 1, 2, 3 do
Let G′ be the graph G3i,h obtained from G by v-insert(ei, h);
Let v be the newly introduced vertex;
if deg(ui; G′) ≥4 when i > 1, deg(x; G′) ≥3 for all x ∈Γ(v; G′)
and |f| ≤g for all faces f ∈F(v; G′) then Gen(G′, v) endif
endfor
endif
endfor
endif;
for Δ = 2, 3, . . . , min{B −1, g −1} do
i := 1;
while i + Δ ≤ki−1 and i ≤p do
/* ki−1 be the index k ∈[i + 1, B] of uk = τlast(ei−1) and k0 := B */
j := i + Δ;
Let G′ be the graph G4i,j obtained from G by e-add(ui, uj);
Gen(G′, ei = (ui, uj));
i := i + 1
endwhile
endfor;
if the depth of the current recursive call is even then Output G endif;
Return
end.
该算法的流程如下:
graph TD
A[开始] --> B{递归调用深度是否为奇数}
B -- 是 --> C[输出 G]
B -- 否 --> D{是否存在 e = (uB′, z′) 满足条件}
D -- 是 --> E[输出 G′ := G - e]
D -- 否 --> F{B = 4 且 |ψ(G)| ≥ 1?}
F -- 是 --> G[循环 h = 0 到 3]
G --> H[通过 v - add(h) 得到 G′]
H --> I{deg(x; G′) ≥ 3 且 |f| ≤ g?}
I -- 是 --> J[输出 G′]
J --> K{κ(G′ - e) ≥ 3 且 |f| < g?}
K -- 是 --> L[输出 G′′ := G′ - e]
I -- 否 --> G
F -- 否 --> M{G ≠ Wn, B ≥ 4 且 |ψ(G)| ≥ 1?}
M -- 是 --> N[循环 i = 1 到 q]
N --> O{|f(ei)| = 3 且 (i < p 或 i = p 且 ε 是边)?}
O -- 是 --> P[循环 h = 0 到 3]
P --> Q[通过 v - insert(ei, h) 得到 G′]
Q --> R{deg(ui; G′) ≥ 4 且 deg(x; G′) ≥ 3 且 |f| ≤ g?}
R -- 是 --> S[调用 Gen(G′, v)]
R -- 否 --> P
O -- 否 --> N
M -- 否 --> T[循环 Δ = 2 到 min{B - 1, g - 1}]
T --> U[i := 1]
U --> V{i + Δ ≤ ki−1 且 i ≤ p?}
V -- 是 --> W[j := i + Δ]
W --> X[通过 e - add(ui, uj) 得到 G′]
X --> Y[调用 Gen(G′, ei = (ui, uj))]
Y --> Z[i := i + 1]
Z --> V
V -- 否 --> AA{递归调用深度是否为偶数}
AA -- 是 --> AB[输出 G]
AA -- 否 --> AC[结束]
该算法的每一行可以在 (O(1)) 时间和 (O(n)) 空间内执行,(Gen(W_n, \varepsilon = u_2)) 可以在 (O(\vert G_3(n, g)\vert)) 时间内实现。具体来说,需要证明 (\tau_{last}(e)) 可以在 (O(1)) 时间内找到,以及判断 (G) 是否有分离 (r) - 面可以在 (O(1)) 时间内完成。
为了便于计算 (\tau_{last}(e)),引入了一些概念和数据结构,如 (\tau(f))、(\tau_j(u_i)) 和 (\eta(w)) 等,并说明了在不同操作(e - add 和 v - insert)下如何更新这些值。同时,对于判断是否有分离 (r) - 面,通过引入变量 (\delta) 并在 e - add 操作时更新,确保在 e - del 操作前可以在 (O(1)) 时间内判断。
三连通平面根图的列举
4. 关键操作的时间复杂度证明
为了证明算法中关键操作的时间复杂度,需要详细分析如何在 (O(1)) 时间内找到 (\tau_{last}(e)) 以及判断 (G) 是否有分离 (r) - 面。
4.1 计算 (\tau_{last}(e))
为了便于计算 (\tau_{last}(e)),引入了以下几个概念:
-
(\tau(f))
:对于一个包含至少一个外部顶点的内部面 (f),(\tau(f)) 表示与 (f) 共享一个顶点 (w) 的内部面 (f’) 中,具有最大索引 (j\leq B + 1) 的外部顶点 (u_j)。
-
(\tau_j(u_i))
:对于当前图 (G) 中的外部顶点 (u_i),(f_1(u_i)) 和 (f_2(u_i)) 分别表示以 ((u_{i - 1}, u_i)) 和 ((u_i, u_{i + 1})) 为左右边时,最右边和第二右边的 (v) - 面;(f_4(u_i)) 和 (f_3(u_i)) 分别表示最左边和第二左边的 (v) - 面。定义 (\tau_j(u_i)=\tau(f_j(u_i))),(j = 1, 2, 3, 4)。
-
(\eta(w))
:对于当前图 (G) 中,其 (w) - 面 (f_w) 包含外部顶点的顶点 (w),(\eta(w)) 表示所有 (w) - 面 (f_w) 中,具有最大索引 (j\leq B + 1) 的外部顶点 (u_j)。
可以证明,活动路径中的每个外部边 (e_i=(u_i, u_{i + 1})) 满足 (\tau_1(u_i)=\tau_{last}(e_i))。下面说明如何在不同操作下更新这些值:
-
初始化
:对于 (G = W_n)((B = n - 1)),设置 (\eta(u_i):=u_{i + 1}),(\tau_1(u_i):=\tau_2(u_i):=\tau_3(u_i):=\tau_4(u_i):=r)((i = 1, 2, \cdots, n - 1)),(\eta(z):=r)((z) 为 (W_n) 的中心)。
-
操作 e - add(u, v)
:更新如下:
- (\eta(u):=v)
- (\tau_2(u):=\tau_1(u))
- (\tau_1(u):=\eta(v))
- (\tau_3(v):=\tau_4(v))
- (\tau_4(v):=\eta(v))
-
操作 v - insert(ei, h)
:
-
v - insert(ei, 0)
:
- (\tau_1(v):=\tau_3(v):=\tau_4(b))
- (\tau_2(v):=\tau_4(v):=\tau_1(a))
- (\tau_1(a):=\tau_4(b):=\eta(w))
-
v - insert(ei, 1)
:
- (\tau_1(v):=\tau_3(v):=\tau_4(b))
- (\tau_2(v):=\tau_4(v):=\tau_2(a))
- (\tau_1(a):=\tau_2(a))
-
v - insert(ei, 2)
:
- (\tau_1(v):=\tau_3(v):=\tau_3(b))
- (\tau_2(v):=\tau_4(v):=\eta(w))
- (\tau_4(b):=\tau_3(b))
-
v - insert(ei, 3)
:
- (\tau_1(v):=\tau_3(v):=\tau_3(b))
- (\tau_2(v):=\tau_4(v):=\tau_2(a))
- (\tau_4(b):=\tau_3(b))
- (\tau_1(a):=\tau_2(a))
可以看出,使用 (O(n)) 空间,(\eta) 和 (\tau_i) 可以在每次操作时以 (O(1)) 时间更新。同时,(\eta(w)) 的更新是正确的,并且在 (\eta(w)) 正确的情况下,活动路径中外部顶点的 (\tau_i) 值也能正确更新。
4.2 判断是否有分离 (r) - 面
设 (f_{s_0}) 是满足 ((s_0, z)\in E(f_{s_0})) 且 (\psi(G)\cap E(f_{s_0})=\varnothing) 的 (s_0) - 面。称 (F(r; G)-{f_L}) 中的 (r) - 面 (f) 为 (s_0) - 分离的,如果 (f) 和 (f_{s_0}) 共享一个除 (r) 的第二左边邻接点 (z) 之外的内部顶点。定义 (\delta) 为 (s_0) - 分离 (r) - 面的存在函数,即如果存在 (s_0) - 分离 (r) - 面,(\delta = 1),否则 (\delta = 0)。
由于在轮图 (G = W_n) 中不存在 (s_0) - 分离 (r) - 面,所以初始化 (\delta := 0)。(v - add) 和 (v - insert) 操作不会改变与 (r) - 面内部相邻的内部面集合,因此不会创建或消除任何 (s_0) - 分离 (r) - 面。只有在 (e - add) 操作时才会更新 (\delta):
-
(u\neq r) 且 (v = s_i)((i > 0))
:(\delta := 0),因为 (G) 中的 (s_0) 在子图 (G’) 中成为内部顶点,之前的 (s_0) - 分离 (r) - 面在 (G’) 中不再是 (s_0) - 分离的,且新的 (s_0) 没有新的 (s_0) - 分离 (r) - 面。
-
(u = r) 且 (v = s_i)((i > 0))
:(\delta := 1),因为 (s_i) 在 (G’) 中成为新的 (s_0),新创建的最右边 (r) - 面 (f) 与新的 (f_{s_0}) 内部相邻。
-
(u = r),(v = s_0),(\text{deg}(s_0; G)=3)
:(\delta := 1),与上述情况类似。
-
其他情况
:(\delta) 保持不变,因为在这种情况下没有创建或消除 (s_0) - 分离 (r) - 面。
因此,在 (e - del) 操作之前,(\psi(G)=\varnothing),(\delta) 可以在 (O(1)) 时间内判断当前 (G) 是否有分离 (r) - 面。
5. 算法复杂度分析
最后证明 (Gen(W_n, \varepsilon = u_2)) 可以在 (O(\vert G_3(n, g)\vert)) 时间内实现。需要证明 (Gen(G, \varepsilon)) 不包括递归调用的时间复杂度 (T(G)) 为 (O(\vert C(G)\cap G_3(n, g)\vert))。
在 (Gen(G, \varepsilon)) 的执行过程中,构造 (G_1)、(G_{2h})、(G_{3i,h}) 和 (G_{4i,j}) 每个图都可以在 (O(1)) 时间内完成。同时,生成下一个子图 (G’) 的延迟时间为 (O(1)) 时间,这意味着 (T(G)=O(\vert C(G)\cap G_3(n, g)\vert))。具体分析如下:
-
生成 (G_{2h})((h = 0, 1, 2, 3))
:时间复杂度为 (O(1))。
-
生成 (G_{4i,j})
:在最后一个 (for) 循环中,生成下一个子图 (G’ = G_{4i,j}) 的时间延迟为 (O(1)) 时间。
综上所述,通过对三连通平面根图的父图、子图的定义和操作,以及相应的生成算法和复杂度分析,可以有效地列举出所有满足条件的三连通平面根图。该算法在时间和空间复杂度上具有较好的性能,能够在 (O(\vert G_3(n, g)\vert)) 时间内完成列举任务。
总结
本文围绕三连通平面根图的列举展开,主要内容总结如下:
|内容|详情|
|----|----|
|父图定义|根据最左边 (r) - 面长度、第一个可移除元素等条件,定义了四种父图的构造方式,并给出了相关函数 (\varPhi(G)) 的性质。|
|子图生成|引入了 (e - del)、(v - add)、(v - insert) 和 (e - add) 四种操作来生成子图,并给出了子图属于 (C_i(G)) 的充要条件。|
|算法实现|给出了 (Gen(G, \varepsilon)) 算法的具体实现和流程,通过递归调用生成所有满足条件的子图。|
|复杂度分析|详细证明了算法中关键操作的时间复杂度,最终证明 (Gen(W_n, \varepsilon = u_2)) 可以在 (O(\vert G_3(n, g)\vert)) 时间内实现。|
通过这些方法,可以高效地列举出指定顶点数和最大面长度的三连通平面根图,为相关领域的研究和应用提供了有力的工具。
超级会员免费看
2万+

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



