Coloring
程度★ 難度★
Coloring
替一張圖的各個元件都塗上顏色,並規定相鄰元件不可同色。一張圖的上色情形,稱做一種「著色」。
根據元件的不同,著色可分為許多種類型,例如點著色(vertex coloring)、邊著色(edge coloring)、面著色(face coloring)。
【註:英文「Coloring」為名詞,中文「著色」為動詞,英翻中致使文法不通,請多見諒。】
Vertex Coloring
程度★ 難度★
Vertex Coloring
「點著色」。替一張圖上的每個點塗上顏色,並且規定以邊相連的相鄰兩點不可同色。
UVa 193 10004
Vertex Chromatic Number
「點著色數」、「最小點著色數」,著色一張圖至少所需要的顏色種類數目;換個方式說,用「點著色數」種顏色,就足以著色一張圖。
數學領域中把一張圖G的最小點著色數標記為χ(G)。除了一些特例以外,求最小點著色數是NP-Complete問題,通常發生在χ(G) ≥ 3的時候。
G沒有點和邊:χ(G) = 0 G沒有邊:χ(G) ≤ 1 G為二分圖(Bipartite Graph):χ(G) ≤ 2 G為平面圖(Planar Graph):χ(G) ≤ 4(四色定理) G為完全圖(Complete Graph):χ(G) = V
數學領域中把一張圖G的最大degree標記為Δ(G)。
G連通,每個點的連接邊數不同(non-regular):χ(G) ≤ Δ(G) G的每個點的連接邊數相同(k-regular):χ(G) ≤ k + 1
k-vertex-colorable(k-colorable)
一張圖若能以k種顏色著色,則稱這張圖為k-vertex-colorable。要確定一張圖是不是k-vertex-colorable是NP-Complete問題。
演算法(Welsh-Powell Algorithm)
一個簡單的Greedy演算法,找出其中一種點著色,但是不保證著色數最小。
首先把圖上每個點,依照degree由大到小排序,然後一一塗色。每一個點都先嘗試塗第一種顏色,若牴觸了已塗色的點,就換下一種顏色,直到顏色不牴觸為止。
每個點的度數範圍都只有0到V-1(不考慮多重的邊、不考慮自己連向自己的邊),故排序時可以採用Counting Sort,時間複雜度是O(V)。
每個點都著色的時間複雜度等同一次Graph Traversal的時間,如果圖的資料結構為adjacency matrix就是O(V^2),如果圖的資料結構為adjacency lists就是O(V+E)。
Edge Coloring
程度★ 難度★
Edge Coloring
「邊著色」。替一張圖上的每條邊塗上顏色,並且規定共用端點的邊不可同色。
Edge Chromatic Number(Chromatic Index)
中譯「邊著色數」、「最小邊著色數」,請參考vertex chromatic number,概念相仿。
數學領域中把一張圖G的最小邊著色數標記為χ'(G)。
G為任意圖:χ'(G) ≥ Δ(G) G的每個點的連接邊數相同(k-regular):χ'(G) = k or k + 1
k-edge-colorable
請參考k-vertex-colorable,概念相仿。
Graphic Sequence
程度★ 難度★★
給定各點degree求原圖(Erdos-Gallai Theorem)
http://mathworld.wolfram.com/GraphicSequence.html
小遊戲:http://armorgames.com/play/5900/king-of-bridges
UVa 10720 11414
給定各點degree求原圖(Havel-Hakimi Algorithm)
度數按照大到小排序
d1 d2 d3 ... is graphical
iff d2-1 d3-1 ... dd1+1-1 dd1+2 dd1+3 dd1+4 ... is graphical
|-------- d1 -------|
時間複雜度O(V^2)。
Synchronizing Coloring
程度★ 難度★
Road Coloring Theorem