M renk kullanarak komşu düğümlerin aynı renge boyanmamasını sağlayan Graf Boyama backtracking algoritmasını ve Cook Teoremi temelli SAT çözücü (DPLL) yaklaşımını ele alır.
Graf Boyama (Graph Coloring), bir grafın köşelerine belirli renkler atanırken, birbirine bağlı hiçbir komşu köşenin aynı rengi almaması kısıtını güden klasik bir NP-Zor problemdir. Karar versiyonu (m renkle boyanabilir mi?) ise NP-Tamdır.
Bu problemi çözmek için en yaygın kesin yöntem M-Boyama Geri İzleme (M-Coloring Backtracking) algoritmasıdır. Düğümler sırayla boyanır, eğer bir komşuluk çakışması olursa geri adım (backtrack) atılarak diğer alternatif renkler denenir.
Cook Teoremi, Boolean Formülünün Karşılanabilirliği (SAT) probleminin ilk NP-Tam problem olduğunu kanıtlamıştır. DPLL (Davis-Putnam-Logemann-Loveland) algoritması, mantıksal formülleri (CNF formatında) çözmek için bir karar ağacı kurup, birim yayılımı (unit propagation) ve saf sembol elemeleriyle arama uzayını daraltan temel bir SAT çözücüdür.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1export function isColorSafe(2 node: number,3 graph: number[][],4 color: number[],5 c: number6): boolean {7 for (let i = 0; i < graph.length; i++) {8 if (graph[node][i] === 1 && color[i] === c) {9 return false;10 }11 }12 return true;13}1415export function graphColoringBacktracking(16 graph: number[][],17 m: number,18 color: number[],19 node: number20): boolean {21 const v = graph.length;22 if (node === v) return true;23 24 for (let c = 1; c <= m; c++) {25 if (isColorSafe(node, graph, color, c)) {26 color[node] = c;27 if (graphColoringBacktracking(graph, m, color, node + 1)) {28 return true;29 }30 color[node] = 0; // Backtrack31 }32 }33 34 return false;35}Graf boyama backtracking veya DPLL CNF SAT çözücü adımlarını komşuluk matrisleri ve mantıksal kurallarla izleyin.
Graf boyama backtracking veya DPLL CNF SAT çözücü adımlarını komşuluk matrisleri ve mantıksal kurallarla izleyin.
En İyi Durum: O(V) - Çelişki bulunmayan durumlar
Ortalama Durum: Üstel - O(m^V)
En Kötü Durum: O(m^V) / O(2^V) - Tüm arama ağacı gezildiğinde
O(V) - Özyinelemeli çağrı yığını (call stack) derinliği - Bu algoritmanın karmaşıklığı belirtilmemiş.
Graf Boyama ve NP-Zor (Graph Coloring & Hard Problems) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: