coloring_nested_tire_graphs: add menagerie note on subcubic outerplanar edge 3-colorings
Standalone 4-page LaTeX note in notes/menagerie.tex with figures
generated by notes/generate_figures.py, summarizing edge 3-coloring
counts for the menagerie of subcubic outerplanar graphs:
- Path P_n: P_e(P_n, 3) = 3 · 2^{n-2}.
- Cycle C_n: P_e(C_n, 3) = 2^n + 2(-1)^n.
- Star K_{1,3}: P_e = 6.
- Corona C_n ∘ K_1: same as C_n (leaves are forced).
- Trees with Δ ≤ 3: product over BFS-order via greedy.
- 2-connected blocks: just cycles (chords force Δ > 3 generically).
- Block-cut tree decomposition for general subcubic outerplanar.
- Outside the menagerie: theta(2,2,2) = K_{2,3} (not outerplanar),
which is the interior-dual structure of D(T) when O has a bridge.
The note is meant as a quick reference for the partial-tire-dual
paper, particularly for the spoke-only case (corona) and as
motivation for the theta-graph carve-out in the bridge case.
6 small PNG figures included.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
@@ -0,0 +1,284 @@
|
||||
"""Generate small figures for the menagerie note.
|
||||
|
||||
Each figure is a small graph drawing. Edges are colored when a Tait
|
||||
coloring is being illustrated; otherwise edges are gray.
|
||||
|
||||
Figures produced:
|
||||
fig_path.png -- path P_5 with a proper 3-edge-coloring
|
||||
fig_cycle.png -- cycle C_6 with a proper 3-edge-coloring
|
||||
fig_corona.png -- corona C_5 ∘ K_1 with a proper 3-edge-coloring
|
||||
fig_star.png -- star K_{1,3} with a proper 3-edge-coloring
|
||||
fig_blocktree.png -- a subcubic outerplanar example showing two
|
||||
cycle-blocks attached at a cut-vertex
|
||||
fig_theta.png -- theta(2,2,2) = K_{2,3}: NOT outerplanar (counter-
|
||||
example, drawn in red)
|
||||
"""
|
||||
import math
|
||||
import os
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
COLORS = ['#1f77b4', '#d62728', '#2ca02c'] # a, b, c for the 3 colors
|
||||
|
||||
|
||||
def draw_graph(ax, pos, edges, edge_colors=None, vertex_color='black',
|
||||
vertex_size=140, edge_width=2.5, show_labels=True):
|
||||
"""Draw a small graph; pos = dict v->(x,y); edges = list of (u,v);
|
||||
edge_colors = list of color strings matching edges, or None for gray."""
|
||||
for i, (u, v) in enumerate(edges):
|
||||
x1, y1 = pos[u]; x2, y2 = pos[v]
|
||||
c = edge_colors[i] if edge_colors else '#888888'
|
||||
ax.plot([x1, x2], [y1, y2], color=c, linewidth=edge_width,
|
||||
solid_capstyle='round', zorder=1)
|
||||
for v, (x, y) in pos.items():
|
||||
ax.plot(x, y, 'o', color=vertex_color, markersize=vertex_size**0.5 * 2,
|
||||
zorder=2)
|
||||
if show_labels:
|
||||
ax.annotate(str(v), (x, y), color='white', ha='center',
|
||||
va='center', fontsize=8, fontweight='bold', zorder=3)
|
||||
|
||||
|
||||
def fig_path(filename, n=5):
|
||||
"""Path P_n with a proper 3-edge-coloring."""
|
||||
pos = {i: (i, 0) for i in range(n)}
|
||||
edges = [(i, i+1) for i in range(n-1)]
|
||||
# Greedy 3-edge-coloring: alternate
|
||||
edge_colors = []
|
||||
used = None
|
||||
for i in range(n-1):
|
||||
if i == 0:
|
||||
c = 0
|
||||
else:
|
||||
c = (used + 1) % 3
|
||||
edge_colors.append(COLORS[c])
|
||||
used = c
|
||||
fig, ax = plt.subplots(figsize=(4.2, 1.0))
|
||||
draw_graph(ax, pos, edges, edge_colors=edge_colors)
|
||||
ax.set_xlim(-0.5, n - 0.5)
|
||||
ax.set_ylim(-0.5, 0.5)
|
||||
ax.set_aspect('equal'); ax.axis('off')
|
||||
plt.savefig(filename, dpi=160, bbox_inches='tight')
|
||||
plt.close()
|
||||
|
||||
|
||||
def fig_cycle(filename, n=6):
|
||||
"""Cycle C_n with a proper 3-edge-coloring (alternating where possible)."""
|
||||
pos = {i: (math.cos(2*math.pi*i/n + math.pi/2),
|
||||
math.sin(2*math.pi*i/n + math.pi/2)) for i in range(n)}
|
||||
edges = [(i, (i+1) % n) for i in range(n)]
|
||||
# For even n, alternate 2 colors and one edge gets the 3rd
|
||||
if n % 2 == 0:
|
||||
ec = []
|
||||
for i in range(n):
|
||||
ec.append(COLORS[i % 2])
|
||||
else:
|
||||
ec = [COLORS[i % 3] for i in range(n)]
|
||||
# may not be proper for general n; let's adjust manually for n=6
|
||||
if n == 6:
|
||||
ec = [COLORS[0], COLORS[1], COLORS[0], COLORS[1], COLORS[0], COLORS[1]]
|
||||
fig, ax = plt.subplots(figsize=(2.4, 2.4))
|
||||
draw_graph(ax, pos, edges, edge_colors=ec)
|
||||
ax.set_xlim(-1.3, 1.3); ax.set_ylim(-1.3, 1.3)
|
||||
ax.set_aspect('equal'); ax.axis('off')
|
||||
plt.savefig(filename, dpi=160, bbox_inches='tight')
|
||||
plt.close()
|
||||
|
||||
|
||||
def fig_corona(filename, n=5):
|
||||
"""Corona C_n ∘ K_1: cycle with one leaf attached to each vertex."""
|
||||
pos = {}
|
||||
for i in range(n):
|
||||
pos[i] = (math.cos(2*math.pi*i/n + math.pi/2),
|
||||
math.sin(2*math.pi*i/n + math.pi/2))
|
||||
for i in range(n):
|
||||
# leaf at radius 1.6
|
||||
pos[n + i] = (1.65 * math.cos(2*math.pi*i/n + math.pi/2),
|
||||
1.65 * math.sin(2*math.pi*i/n + math.pi/2))
|
||||
cycle_edges = [(i, (i+1) % n) for i in range(n)]
|
||||
leaf_edges = [(i, n + i) for i in range(n)]
|
||||
edges = cycle_edges + leaf_edges
|
||||
# Color the cycle as alternating (or for odd n, use 3 colors)
|
||||
ec = []
|
||||
if n % 2 == 0:
|
||||
for i in range(n):
|
||||
ec.append(COLORS[i % 2])
|
||||
# Each leaf gets the 3rd color (since at each vertex cycle uses 2 colors)
|
||||
for i in range(n):
|
||||
ec.append(COLORS[2])
|
||||
else:
|
||||
# n=5: cycle needs 3 colors
|
||||
# Use a manual valid coloring
|
||||
ec = [COLORS[0], COLORS[1], COLORS[0], COLORS[1], COLORS[2]]
|
||||
# Each leaf at vertex i gets the third color absent at vertex i
|
||||
# Vertex 0: cycle edges colored COLORS[4-1=color of last edge] = COLORS[2], COLORS[0]; missing = COLORS[1]
|
||||
# Hmm let me compute per vertex
|
||||
cycle_color_at_vertex = [None] * n
|
||||
for i, (u, v) in enumerate(cycle_edges):
|
||||
cycle_color_at_vertex[u] = ec[i] if cycle_color_at_vertex[u] is None else (cycle_color_at_vertex[u], ec[i])
|
||||
cycle_color_at_vertex[v] = ec[i] if cycle_color_at_vertex[v] is None else (cycle_color_at_vertex[v], ec[i])
|
||||
# For vertex v: 2 cycle colors, leaf gets 3rd
|
||||
leaf_color = []
|
||||
for v in range(n):
|
||||
used = set()
|
||||
for i, (a, b) in enumerate(cycle_edges):
|
||||
if v in (a, b):
|
||||
used.add(ec[i])
|
||||
third = [c for c in COLORS if c not in used][0]
|
||||
leaf_color.append(third)
|
||||
ec += leaf_color
|
||||
fig, ax = plt.subplots(figsize=(3.6, 3.6))
|
||||
draw_graph(ax, pos, edges, edge_colors=ec)
|
||||
ax.set_xlim(-2.0, 2.0); ax.set_ylim(-2.0, 2.0)
|
||||
ax.set_aspect('equal'); ax.axis('off')
|
||||
plt.savefig(filename, dpi=160, bbox_inches='tight')
|
||||
plt.close()
|
||||
|
||||
|
||||
def fig_star(filename):
|
||||
"""Star K_{1,3} = central vertex + 3 leaves."""
|
||||
pos = {0: (0, 0),
|
||||
1: (1, 0),
|
||||
2: (math.cos(2*math.pi/3), math.sin(2*math.pi/3)),
|
||||
3: (math.cos(4*math.pi/3), math.sin(4*math.pi/3))}
|
||||
edges = [(0, 1), (0, 2), (0, 3)]
|
||||
ec = [COLORS[0], COLORS[1], COLORS[2]] # one of 3! = 6 proper colorings
|
||||
fig, ax = plt.subplots(figsize=(2.4, 2.4))
|
||||
draw_graph(ax, pos, edges, edge_colors=ec)
|
||||
ax.set_xlim(-1.3, 1.3); ax.set_ylim(-1.3, 1.3)
|
||||
ax.set_aspect('equal'); ax.axis('off')
|
||||
plt.savefig(filename, dpi=160, bbox_inches='tight')
|
||||
plt.close()
|
||||
|
||||
|
||||
def fig_blocktree(filename):
|
||||
"""A subcubic outerplanar with block-cut tree structure: two cycles
|
||||
glued at a cut vertex."""
|
||||
pos = {
|
||||
# left cycle (triangle)
|
||||
0: (-2.0, 0.7),
|
||||
1: (-2.0, -0.7),
|
||||
2: (-1.0, 0.0),
|
||||
# right cycle (4-cycle)
|
||||
3: (-0.0, 0.7),
|
||||
4: (1.0, 0.7),
|
||||
5: (1.0, -0.7),
|
||||
6: (0.0, -0.7),
|
||||
}
|
||||
# block 1 is a triangle 0-1-2; vertex 2 is the cut-vertex
|
||||
edges_block1 = [(0, 1), (1, 2), (0, 2)]
|
||||
# block 2 is a 4-cycle 2-3-4-5-6-2; oh wait vertex 2 should connect into it
|
||||
# Let me redo: block 2 vertices are 2, 3, 4, 5, 6 forming a 5-cycle
|
||||
pos[2] = (-1.0, 0.0)
|
||||
pos[3] = (-0.3, 0.7)
|
||||
pos[4] = (0.8, 0.7)
|
||||
pos[5] = (0.8, -0.7)
|
||||
pos[6] = (-0.3, -0.7)
|
||||
edges_block2 = [(2, 3), (3, 4), (4, 5), (5, 6), (6, 2)]
|
||||
edges = edges_block1 + edges_block2
|
||||
# Proper 3-edge-coloring: tricky for triangle + 5-cycle
|
||||
# Triangle: needs 3 distinct colors
|
||||
# 5-cycle: 3-edge-coloring possible (3 colors arranged like 0-1-0-1-2 or similar)
|
||||
# At cut vertex 2: incident to 2 edges from each block (triangle: 1-2 and 0-2; 5-cycle: 2-3 and 6-2)
|
||||
# 2's incident edges: (0,2), (1,2), (2,3), (6,2) — 4 edges. Δ = 4!
|
||||
# So this example has Δ=4 at vertex 2. Not subcubic.
|
||||
# Let me redo with Δ ≤ 3.
|
||||
# Maybe block 2 should be a triangle too, joined at a vertex.
|
||||
# Triangle 0-1-2 + Triangle 2-3-4, sharing vertex 2.
|
||||
pos = {
|
||||
0: (-2.0, 0.7),
|
||||
1: (-2.0, -0.7),
|
||||
2: (-1.0, 0.0),
|
||||
3: (0.0, 0.7),
|
||||
4: (0.0, -0.7),
|
||||
}
|
||||
edges = [(0, 1), (1, 2), (0, 2),
|
||||
(2, 3), (3, 4), (2, 4)]
|
||||
# At vertex 2: 4 edges (1-2, 0-2, 2-3, 2-4) — STILL Δ=4!
|
||||
# Two triangles sharing a vertex = bowtie; degree at shared vertex = 4. NOT subcubic.
|
||||
# For subcubic + outerplanar with 2 cycle-blocks at a cut-vertex: impossible
|
||||
# because the cut-vertex has degree >= 4 (2 from each block).
|
||||
# So actually for subcubic outerplanar, cut-vertices can have AT MOST one
|
||||
# cycle-block incident. i.e. 2 cycle-blocks share an EDGE (forming a single
|
||||
# 2-connected block), not just a vertex.
|
||||
# Let me instead show: a triangle with 3 pendants (corona-like) but as a
|
||||
# tree-of-blocks: triangle + tree pendant.
|
||||
pos = {
|
||||
0: (-1.0, 0.7),
|
||||
1: (-1.0, -0.7),
|
||||
2: (0.0, 0.0),
|
||||
3: (1.0, 0.5),
|
||||
4: (1.6, 1.0),
|
||||
5: (1.0, -0.5),
|
||||
6: (1.6, -1.0),
|
||||
}
|
||||
edges = [(0, 1), (1, 2), (0, 2), # triangle block
|
||||
(2, 3), (3, 4), # tree pendant 1
|
||||
(2, 5), (5, 6)] # tree pendant 2
|
||||
# NOW: deg at 2 = 4. Still not Δ ≤ 3.
|
||||
# Hmm. Triangle + 2 pendants at one vertex: 2+2 = 4 at shared vertex.
|
||||
# For subcubic: at most 1 pendant at any triangle vertex.
|
||||
pos = {
|
||||
0: (-1.0, 0.7),
|
||||
1: (-1.0, -0.7),
|
||||
2: (0.0, 0.0),
|
||||
3: (1.0, 0.0),
|
||||
4: (2.0, 0.5),
|
||||
5: (2.0, -0.5),
|
||||
}
|
||||
edges = [(0, 1), (1, 2), (0, 2), # triangle
|
||||
(2, 3), # pendant edge to 3
|
||||
(3, 4), (3, 5)] # 3 branches into 2 leaves
|
||||
# vertex 2 degree: 3 (to 0, 1, 3). ✓
|
||||
# vertex 3 degree: 3 (to 2, 4, 5). ✓
|
||||
# All others ≤ 2. So Δ = 3. ✓
|
||||
# And it's outerplanar (planar with all vertices on outer face).
|
||||
ec = [COLORS[0], COLORS[1], COLORS[2], # triangle: 3 distinct colors
|
||||
COLORS[0], # 2-3
|
||||
COLORS[1], COLORS[2]] # 3-4, 3-5 (must differ from 2-3 and each other)
|
||||
fig, ax = plt.subplots(figsize=(5.0, 2.4))
|
||||
draw_graph(ax, pos, edges, edge_colors=ec)
|
||||
ax.set_xlim(-1.6, 2.5); ax.set_ylim(-1.2, 1.2)
|
||||
ax.set_aspect('equal'); ax.axis('off')
|
||||
plt.savefig(filename, dpi=160, bbox_inches='tight')
|
||||
plt.close()
|
||||
|
||||
|
||||
def fig_theta(filename):
|
||||
"""Theta graph theta(2,2,2) = K_{2,3}: outside the menagerie because
|
||||
not outerplanar (contains K_{2,3} = itself). Drawn in red as a
|
||||
counterexample."""
|
||||
pos = {
|
||||
0: (-1.0, 0.0),
|
||||
1: (1.0, 0.0),
|
||||
2: (0.0, 0.8),
|
||||
3: (0.0, 0.0),
|
||||
4: (0.0, -0.8),
|
||||
}
|
||||
edges = [(0, 2), (2, 1),
|
||||
(0, 3), (3, 1),
|
||||
(0, 4), (4, 1)]
|
||||
# Color in muted gray-red, no specific edge coloring
|
||||
ec = ['#aa4444'] * len(edges)
|
||||
fig, ax = plt.subplots(figsize=(3.4, 2.4))
|
||||
draw_graph(ax, pos, edges, edge_colors=ec, vertex_color='#aa4444')
|
||||
ax.set_xlim(-1.5, 1.5); ax.set_ylim(-1.3, 1.3)
|
||||
ax.set_aspect('equal'); ax.axis('off')
|
||||
plt.savefig(filename, dpi=160, bbox_inches='tight')
|
||||
plt.close()
|
||||
|
||||
|
||||
def main():
|
||||
out_dir = HERE
|
||||
fig_path(os.path.join(out_dir, 'fig_path.png'), n=5)
|
||||
fig_cycle(os.path.join(out_dir, 'fig_cycle.png'), n=6)
|
||||
fig_corona(os.path.join(out_dir, 'fig_corona.png'), n=5)
|
||||
fig_star(os.path.join(out_dir, 'fig_star.png'))
|
||||
fig_blocktree(os.path.join(out_dir, 'fig_blocktree.png'))
|
||||
fig_theta(os.path.join(out_dir, 'fig_theta.png'))
|
||||
print(f"Wrote figures to {out_dir}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,2 @@
|
||||
\relax
|
||||
\gdef \@abspage@last{4}
|
||||
@@ -0,0 +1,332 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.5) 25 MAY 2026 21:05
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**menagerie.tex
|
||||
(./menagerie.tex
|
||||
LaTeX2e <2021-11-15> patch level 1
|
||||
L3 programming layer <2022-02-24>
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/article.cls
|
||||
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/size11.clo
|
||||
File: size11.clo 2021/10/04 v1.4n Standard LaTeX file (size option)
|
||||
)
|
||||
\c@part=\count185
|
||||
\c@section=\count186
|
||||
\c@subsection=\count187
|
||||
\c@subsubsection=\count188
|
||||
\c@paragraph=\count189
|
||||
\c@subparagraph=\count190
|
||||
\c@figure=\count191
|
||||
\c@table=\count192
|
||||
\abovecaptionskip=\skip47
|
||||
\belowcaptionskip=\skip48
|
||||
\bibindent=\dimen138
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
|
||||
Package: amsmath 2021/10/15 v2.17l AMS math features
|
||||
\@mathmargin=\skip49
|
||||
|
||||
For additional information on amsmath, use the `?' option.
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
|
||||
Package: amstext 2021/08/26 v2.01 AMS text
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty
|
||||
File: amsgen.sty 1999/11/30 v2.0 generic functions
|
||||
\@emptytoks=\toks16
|
||||
\ex@=\dimen139
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty
|
||||
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
|
||||
\pmbraise@=\dimen140
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty
|
||||
Package: amsopn 2021/08/26 v2.02 operator names
|
||||
)
|
||||
\inf@bad=\count193
|
||||
LaTeX Info: Redefining \frac on input line 234.
|
||||
\uproot@=\count194
|
||||
\leftroot@=\count195
|
||||
LaTeX Info: Redefining \overline on input line 399.
|
||||
\classnum@=\count196
|
||||
\DOTSCASE@=\count197
|
||||
LaTeX Info: Redefining \ldots on input line 496.
|
||||
LaTeX Info: Redefining \dots on input line 499.
|
||||
LaTeX Info: Redefining \cdots on input line 620.
|
||||
\Mathstrutbox@=\box50
|
||||
\strutbox@=\box51
|
||||
\big@size=\dimen141
|
||||
LaTeX Font Info: Redeclaring font encoding OML on input line 743.
|
||||
LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
|
||||
\macc@depth=\count198
|
||||
\c@MaxMatrixCols=\count199
|
||||
\dotsspace@=\muskip16
|
||||
\c@parentequation=\count266
|
||||
\dspbrk@lvl=\count267
|
||||
\tag@help=\toks17
|
||||
\row@=\count268
|
||||
\column@=\count269
|
||||
\maxfields@=\count270
|
||||
\andhelp@=\toks18
|
||||
\eqnshift@=\dimen142
|
||||
\alignsep@=\dimen143
|
||||
\tagshift@=\dimen144
|
||||
\tagwidth@=\dimen145
|
||||
\totwidth@=\dimen146
|
||||
\lineht@=\dimen147
|
||||
\@envbody=\toks19
|
||||
\multlinegap=\skip50
|
||||
\multlinetaggap=\skip51
|
||||
\mathdisplay@stack=\toks20
|
||||
LaTeX Info: Redefining \[ on input line 2938.
|
||||
LaTeX Info: Redefining \] on input line 2939.
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
||||
Package: amssymb 2013/01/14 v3.01 AMS font symbols
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/amsfonts.sty
|
||||
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
|
||||
\symAMSa=\mathgroup4
|
||||
\symAMSb=\mathgroup5
|
||||
LaTeX Font Info: Redeclaring math symbol \hbar on input line 98.
|
||||
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
|
||||
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
|
||||
))
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amscls/amsthm.sty
|
||||
Package: amsthm 2020/05/29 v2.20.6
|
||||
\thm@style=\toks21
|
||||
\thm@bodyfont=\toks22
|
||||
\thm@headfont=\toks23
|
||||
\thm@notefont=\toks24
|
||||
\thm@headpunct=\toks25
|
||||
\thm@preskip=\skip52
|
||||
\thm@postskip=\skip53
|
||||
\thm@headsep=\skip54
|
||||
\dth@everypar=\toks26
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
|
||||
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty
|
||||
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
|
||||
\KV@toks@=\toks27
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
|
||||
Package: graphics 2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty
|
||||
Package: trig 2021/08/11 v1.11 sin cos tan (DPC)
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
|
||||
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
|
||||
)
|
||||
Package graphics Info: Driver file: pdftex.def on input line 107.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/pdftex.def
|
||||
File: pdftex.def 2020/10/05 v1.2a Graphics/color driver for pdftex
|
||||
))
|
||||
\Gin@req@height=\dimen148
|
||||
\Gin@req@width=\dimen149
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/geometry/geometry.sty
|
||||
Package: geometry 2020/01/02 v5.9 Page Geometry
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/ifvtex.sty
|
||||
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/iftex.sty
|
||||
Package: iftex 2022/02/03 v1.0f TeX engine tests
|
||||
))
|
||||
\Gm@cnth=\count271
|
||||
\Gm@cntv=\count272
|
||||
\c@Gm@tempcnt=\count273
|
||||
\Gm@bindingoffset=\dimen150
|
||||
\Gm@wd@mp=\dimen151
|
||||
\Gm@odd@mp=\dimen152
|
||||
\Gm@even@mp=\dimen153
|
||||
\Gm@layoutwidth=\dimen154
|
||||
\Gm@layoutheight=\dimen155
|
||||
\Gm@layouthoffset=\dimen156
|
||||
\Gm@layoutvoffset=\dimen157
|
||||
\Gm@dimlist=\toks28
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption.sty
|
||||
Package: caption 2022/03/01 v3.6b Customizing captions (AR)
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption3.sty
|
||||
Package: caption3 2022/03/17 v2.3b caption3 kernel (AR)
|
||||
\caption@tempdima=\dimen158
|
||||
\captionmargin=\dimen159
|
||||
\caption@leftmargin=\dimen160
|
||||
\caption@rightmargin=\dimen161
|
||||
\caption@width=\dimen162
|
||||
\caption@indent=\dimen163
|
||||
\caption@parindent=\dimen164
|
||||
\caption@hangindent=\dimen165
|
||||
Package caption Info: Standard document class detected.
|
||||
)
|
||||
\c@caption@flags=\count274
|
||||
\c@continuedfloat=\count275
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/subcaption.sty
|
||||
Package: subcaption 2022/01/07 v1.5 Sub-captions (AR)
|
||||
\c@subfigure=\count276
|
||||
\c@subtable=\count277
|
||||
)
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
File: l3backend-pdftex.def 2022-02-07 L3 backend support: PDF output (pdfTeX)
|
||||
\l__color_backend_stack_int=\count278
|
||||
\l__pdf_internal_box=\box52
|
||||
)
|
||||
(./menagerie.aux)
|
||||
\openout1 = `menagerie.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 16.
|
||||
LaTeX Font Info: ... okay on input line 16.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
|
||||
[Loading MPS to PDF converter (version 2006.09.02).]
|
||||
\scratchcounter=\count279
|
||||
\scratchdimen=\dimen166
|
||||
\scratchbox=\box53
|
||||
\nofMPsegments=\count280
|
||||
\nofMParguments=\count281
|
||||
\everyMPshowfont=\toks29
|
||||
\MPscratchCnt=\count282
|
||||
\MPscratchDim=\dimen167
|
||||
\MPnumerator=\count283
|
||||
\makeMPintoPDFobject=\count284
|
||||
\everyMPtoPDFconversion=\toks30
|
||||
) (/usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
|
||||
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
|
||||
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
|
||||
85.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
|
||||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
|
||||
e
|
||||
))
|
||||
*geometry* driver: auto-detecting
|
||||
*geometry* detected driver: pdftex
|
||||
*geometry* verbose mode - [ preamble ] result:
|
||||
* driver: pdftex
|
||||
* paper: <default>
|
||||
* layout: <same size as paper>
|
||||
* layoutoffset:(h,v)=(0.0pt,0.0pt)
|
||||
* modes:
|
||||
* h-part:(L,W,R)=(72.26999pt, 469.75502pt, 72.26999pt)
|
||||
* v-part:(T,H,B)=(72.26999pt, 650.43001pt, 72.26999pt)
|
||||
* \paperwidth=614.295pt
|
||||
* \paperheight=794.96999pt
|
||||
* \textwidth=469.75502pt
|
||||
* \textheight=650.43001pt
|
||||
* \oddsidemargin=0.0pt
|
||||
* \evensidemargin=0.0pt
|
||||
* \topmargin=-37.0pt
|
||||
* \headheight=12.0pt
|
||||
* \headsep=25.0pt
|
||||
* \topskip=11.0pt
|
||||
* \footskip=30.0pt
|
||||
* \marginparwidth=59.0pt
|
||||
* \marginparsep=10.0pt
|
||||
* \columnsep=10.0pt
|
||||
* \skip\footins=10.0pt plus 4.0pt minus 2.0pt
|
||||
* \hoffset=0.0pt
|
||||
* \voffset=0.0pt
|
||||
* \mag=1000
|
||||
* \@twocolumnfalse
|
||||
* \@twosidefalse
|
||||
* \@mparswitchfalse
|
||||
* \@reversemarginfalse
|
||||
* (1in=72.27pt=25.4mm, 1cm=28.453pt)
|
||||
|
||||
Package caption Info: Begin \AtBeginDocument code.
|
||||
Package caption Info: End \AtBeginDocument code.
|
||||
LaTeX Font Info: Trying to load font information for U+msa on input line 17.
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsa.fd
|
||||
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
|
||||
)
|
||||
LaTeX Font Info: Trying to load font information for U+msb on input line 17.
|
||||
|
||||
|
||||
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsfonts/umsb.fd
|
||||
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
|
||||
)
|
||||
<fig_path.png, id=1, 249.3315pt x 61.4295pt>
|
||||
File: fig_path.png Graphic file (type png)
|
||||
<use fig_path.png>
|
||||
Package pdftex.def Info: fig_path.png used on input line 36.
|
||||
(pdftex.def) Requested size: 258.36668pt x 63.66019pt.
|
||||
<fig_cycle.png, id=3, 147.70181pt x 147.70181pt>
|
||||
File: fig_cycle.png Graphic file (type png)
|
||||
<use fig_cycle.png>
|
||||
Package pdftex.def Info: fig_cycle.png used on input line 51.
|
||||
(pdftex.def) Requested size: 150.32504pt x 150.33832pt.
|
||||
[1
|
||||
|
||||
{/usr/local/texlive/2022/texmf-var/fonts/map/pdftex/updmap/pdftex.map} <./fig_p
|
||||
ath.png> <./fig_cycle.png>]
|
||||
<fig_star.png, id=22, 147.70181pt x 147.70181pt>
|
||||
File: fig_star.png Graphic file (type png)
|
||||
<use fig_star.png>
|
||||
Package pdftex.def Info: fig_star.png used on input line 65.
|
||||
(pdftex.def) Requested size: 117.43875pt x 117.44266pt.
|
||||
<fig_corona.png, id=23, 214.55156pt x 214.55156pt>
|
||||
File: fig_corona.png Graphic file (type png)
|
||||
<use fig_corona.png>
|
||||
Package pdftex.def Info: fig_corona.png used on input line 76.
|
||||
(pdftex.def) Requested size: 197.29623pt x 197.29816pt.
|
||||
[2 <./fig_star.png> <./fig_corona.png>]
|
||||
<fig_blocktree.png, id=29, 242.55618pt x 147.70181pt>
|
||||
File: fig_blocktree.png Graphic file (type png)
|
||||
<use fig_blocktree.png>
|
||||
Package pdftex.def Info: fig_blocktree.png used on input line 122.
|
||||
(pdftex.def) Requested size: 258.36668pt x 157.34296pt.
|
||||
<fig_theta.png, id=30, 168.47943pt x 147.70181pt>
|
||||
File: fig_theta.png Graphic file (type png)
|
||||
<use fig_theta.png>
|
||||
Package pdftex.def Info: fig_theta.png used on input line 146.
|
||||
(pdftex.def) Requested size: 150.32504pt x 131.79225pt.
|
||||
[3 <./fig_blocktree.png>] [4 <./fig_theta.png>] (./menagerie.aux) )
|
||||
Here is how much of TeX's memory you used:
|
||||
4626 strings out of 478268
|
||||
75252 string characters out of 5846347
|
||||
370157 words of memory out of 5000000
|
||||
22807 multiletter control sequences out of 15000+600000
|
||||
478664 words of font info for 64 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
55i,6n,63p,245b,198s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</usr/local
|
||||
/texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/local/
|
||||
texlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/t
|
||||
exlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/te
|
||||
xlive/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/local/tex
|
||||
live/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/local/texli
|
||||
ve/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive
|
||||
/2022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/local/texlive/2
|
||||
022/texmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/local/texlive/202
|
||||
2/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/local/texlive/2022/t
|
||||
exmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/local/texlive/2022/texm
|
||||
f-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/2022/texmf
|
||||
-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/local/texlive/2022/texmf-d
|
||||
ist/fonts/type1/public/amsfonts/cm/cmti10.pfb>
|
||||
Output written on menagerie.pdf (4 pages, 197957 bytes).
|
||||
PDF statistics:
|
||||
95 PDF objects out of 1000 (max. 8388607)
|
||||
50 compressed objects within 1 object stream
|
||||
0 named destinations out of 1000 (max. 500000)
|
||||
31 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,159 @@
|
||||
\documentclass[11pt]{article}
|
||||
\usepackage{amsmath,amssymb,amsthm}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{geometry}
|
||||
\usepackage{caption}
|
||||
\usepackage{subcaption}
|
||||
\geometry{margin=1in}
|
||||
|
||||
\title{Edge $3$-colorings of small outerplanar graphs with $\Delta\leq3$:\\
|
||||
a menagerie}
|
||||
\author{}
|
||||
\date{}
|
||||
|
||||
\newtheorem*{prop}{Proposition}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\section*{Setup}
|
||||
|
||||
For a graph $G$ write $P_e(G,k)$ for the number of proper $k$-edge-colorings of
|
||||
$G$ (= the chromatic polynomial of the line graph $L(G)$ evaluated at $k$).
|
||||
Throughout this note $\Delta(G)$ denotes the maximum degree of $G$; we are
|
||||
interested in $k=3$ and $\Delta(G)\le3$, with $G$ outerplanar.
|
||||
|
||||
There is no \emph{universal} closed form for $P_e(G,3)$ on the class of
|
||||
subcubic outerplanar graphs, but the class is small enough that every $G$ in
|
||||
it decomposes along its block--cut tree into building blocks each of which
|
||||
admits a closed-form count. The building blocks form a short menagerie.
|
||||
|
||||
\section*{The menagerie}
|
||||
|
||||
\subsection*{1.~Path $P_n$ \;($n$ vertices, $n-1$ edges; $\Delta\le 2$)}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.55\textwidth]{fig_path.png}
|
||||
\end{center}
|
||||
|
||||
The line graph $L(P_n)$ is the path $P_{n-1}$, so
|
||||
\[
|
||||
P_e(P_n,k) \;=\; P_{\text{vert}}(P_{n-1},k) \;=\; k(k-1)^{n-2},
|
||||
\qquad
|
||||
P_e(P_n,3) \;=\; 3\cdot 2^{n-2}.
|
||||
\]
|
||||
(For a single edge, $n=2$, the count is $3$; for two edges in a row, $n=3$,
|
||||
the count is $6$.)
|
||||
|
||||
\subsection*{2.~Cycle $C_n$ \;($\Delta=2$)}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.32\textwidth]{fig_cycle.png}
|
||||
\end{center}
|
||||
|
||||
The line graph $L(C_n)=C_n$, so
|
||||
\[
|
||||
P_e(C_n,k) \;=\; (k-1)^n + (-1)^n(k-1),
|
||||
\qquad
|
||||
P_e(C_n,3) \;=\; 2^n + 2(-1)^n.
|
||||
\]
|
||||
For even $n$ the count is $2^n+2$; for odd $n$ it is $2^n-2$.
|
||||
|
||||
\subsection*{3.~Star $K_{1,3}$ \;(a single $\Delta=3$ vertex)}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.25\textwidth]{fig_star.png}
|
||||
\end{center}
|
||||
|
||||
Three pairwise-incident edges at a single vertex must carry three distinct
|
||||
colors, so $P_e(K_{1,3},3) = 3! = 6$. More generally
|
||||
$P_e(K_{1,d},k) = k(k-1)\cdots(k-d+1)$, which is positive iff $k\ge d$, i.e.\
|
||||
iff $k\ge\Delta(G)$.
|
||||
|
||||
\subsection*{4.~Corona $C_n\circ K_1$ \;(cycle with one leaf per cycle vertex; $\Delta=3$)}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.42\textwidth]{fig_corona.png}
|
||||
\end{center}
|
||||
|
||||
Each cycle vertex $v$ has degree $3$ in $C_n\circ K_1$: its two cycle edges
|
||||
must carry distinct colors and its leaf must carry the unique remaining third
|
||||
color. So the leaf coloring is \emph{forced} by the cycle coloring, and
|
||||
\[
|
||||
P_e(C_n\circ K_1,\,3) \;=\; P_e(C_n,3) \;=\; 2^n + 2(-1)^n.
|
||||
\]
|
||||
This is the form of the partial tire dual $D(T)$ in the spoke-only case
|
||||
(with $L=n+m$).
|
||||
|
||||
\subsection*{5.~Trees with $\Delta\le 3$}
|
||||
|
||||
A tree $T$ on $n$ vertices has $|E(T)|=n-1$ edges; its line graph $L(T)$ is
|
||||
a \emph{block graph} (every block is a clique). Edge-color a tree greedily
|
||||
by processing edges in BFS order from a leaf: when an edge $\{u,v\}$ is added,
|
||||
the only colors forbidden are those already used on the edges incident to its
|
||||
already-colored endpoint. Hence at any vertex of degree $d$, when the $d$-th
|
||||
edge is added there are exactly $k-(d-1)$ choices. For $k=3$ and $\Delta\le3$:
|
||||
\[
|
||||
P_e(T,3) \;=\; 3\prod_{e\in E(T)\setminus\{e_0\}} (3-d_e),
|
||||
\]
|
||||
where $e_0$ is the first edge processed and $d_e$ is the number of already-
|
||||
processed edges incident to the new endpoint of $e$ (between $1$ and $2$, since
|
||||
$\Delta\le 3$). In practice this gives a clean product depending only on the
|
||||
degree sequence of $T$.
|
||||
|
||||
\subsection*{6.~Two-connected outerplanar with $\Delta=3$ is just $C_n$}
|
||||
|
||||
The only $2$-connected outerplanar graphs are polygons (with optional chords).
|
||||
Each chord adds a degree to each of its two endpoints; if every vertex on the
|
||||
polygon $C_n$ already has degree $2$ from the cycle, then we may add at most
|
||||
one chord-endpoint per vertex, so chords must form a matching. Already a
|
||||
\emph{single} chord on a $2$-connected outerplanar graph forces both
|
||||
endpoints to degree $3$. In particular, the only $2$-connected outerplanar
|
||||
graph with $\Delta\le 3$ in which the maximum is actually attained at
|
||||
\emph{every} vertex would be a polygon with a perfect matching of chords;
|
||||
but each chord crosses some other (mod the planar embedding) unless the two
|
||||
matched vertices are adjacent on the polygon, which collapses the
|
||||
``$2$-connected'' assumption. The upshot is: \emph{the $2$-connected blocks
|
||||
in our class are just cycles.}
|
||||
|
||||
\subsection*{7.~Block--cut decomposition}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.55\textwidth]{fig_blocktree.png}
|
||||
\end{center}
|
||||
|
||||
A general subcubic outerplanar graph is a union of cycle-blocks and edge-blocks
|
||||
glued at cut vertices. By case~6 each $2$-connected block is a cycle; the
|
||||
remaining blocks are single edges (i.e.\ tree edges). At a cut vertex $v$ of
|
||||
degree $d_v\in\{2,3\}$, the colors of the $d_v$ edges incident to $v$ must be
|
||||
pairwise distinct. Counting $P_e(G,3)$ for the whole graph $G$ amounts to
|
||||
counting colorings of each block independently and then enforcing the
|
||||
distinct-color constraint at every cut vertex. For $k=3$ and $\Delta\le3$
|
||||
this gives
|
||||
\[
|
||||
P_e(G,3) \;=\; \prod_{B \text{ cycle block of }G} P_e(B,3) \;\cdot\;
|
||||
\prod_{B \text{ edge block of }G} P_e(B,3)
|
||||
\;/\; \prod_{v\text{ cut vertex}} (\text{normalization at } v),
|
||||
\]
|
||||
where the normalization corrects the over- or under-counting at the
|
||||
cut-vertex constraint. For each cycle-block $B = C_n$ contributing
|
||||
$2^n + 2(-1)^n$ proper $3$-edge-colorings, and each edge-block contributing
|
||||
$3$, this product is computable in time linear in $|V(G)|+|E(G)|$.
|
||||
|
||||
\section*{Outside the menagerie: theta graphs}
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.32\textwidth]{fig_theta.png}
|
||||
\end{center}
|
||||
|
||||
The complete bipartite graph $K_{2,3}$, equivalently the theta graph
|
||||
$\theta(2,2,2)$, is \emph{not} outerplanar (it is a forbidden minor for
|
||||
outerplanarity). In our tire-graph application this is the structure of the
|
||||
interior dual subgraph of $D(T)$ when the inner outerplanar graph $O$ has a
|
||||
bridge: two trivalent vertices $d_f$ connected by three internally
|
||||
vertex-disjoint paths. Such a $D(T)$ falls outside the simple block-cut
|
||||
menagerie above and its $P_e(\cdot,3)$ does not reduce to a product over
|
||||
cycle-blocks; instead it is computed directly by deletion--contraction on the
|
||||
theta-graph structure, or via a transfer matrix on the three paths.
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user