Colorarea graficelor este o construcție teoretică a graficului , un caz special de marcare a graficelor . La colorare, elementelor grafice li se atribuie etichete cu anumite restricții; aceste etichete sunt denumite în mod tradițional „culori”. În cel mai simplu caz, un astfel de mod de colorare a vârfurilor unui graf , în care oricare două vârfuri adiacente corespund unor culori diferite, se numește colorare a vârfurilor . În mod similar , colorarea marginilor atribuie o culoare fiecărei margini, astfel încât oricare două margini adiacente să aibă culori diferite [1] . În cele din urmă, colorarea regiunii a unui grafic plan atribuie o culoare fiecărei regiuni, astfel încât fiecare două regiuni care împărtășesc o limită nu pot avea aceeași culoare.
Colorarea vârfurilor este principala problemă a colorării graficelor, toate celelalte probleme din această zonă pot fi reduse la ea. De exemplu, colorarea muchiilor unui graf este colorarea vârfurilor graficului său de linii , iar colorarea regiunilor unui graf plan este colorarea vârfurilor graficului său dual [1] . Cu toate acestea, alte probleme de colorare a graficelor sunt adesea puse și rezolvate în setarea originală. Motivul pentru aceasta este parțial pentru că oferă o idee mai bună despre ceea ce se întâmplă și este mai revelator și, parțial, pentru că unele probleme sunt mai convenabile de rezolvat în acest fel (de exemplu, colorarea marginilor).
Colorarea graficelor își găsește aplicație în multe domenii practice și nu numai în probleme teoretice. În afară de tipurile clasice de probleme, mai multe restricții pot fi puse și asupra graficului, asupra modului în care sunt atribuite culorile sau asupra culorilor în sine. Această metodă este folosită în popularul puzzle Sudoku , de exemplu . Există încă cercetări active în acest domeniu.
Primele rezultate au fost obținute pentru graficele plane în problema colorării hărții. În încercarea de a colora o hartă a comitatelor Angliei, Francis Guthrie a formulat problema celor patru culori , observând că patru culori sunt suficiente pentru a colora harta, astfel încât oricare două regiuni adiacente să aibă culori diferite. Fratele său a adresat întrebarea profesorului său de matematică, Augustus de Morgan , care a menționat-o în scrisoarea sa către William Hamilton din 1852. Arthur Cayley a ridicat această problemă la o reuniune a Societății de Matematică din Londra în 1878. În același an, Tate a propus prima soluție la această problemă. El a redus colorarea vârfurilor grafului original la colorarea muchiilor grafului dual și a sugerat că această problemă are întotdeauna o soluție [2] . În 1880, Alfred Kempe a publicat un articol în care susținea că a reușit să stabilească rezultatul, iar timp de un deceniu problema celor patru culori a fost considerată rezolvată. Pentru această realizare, Kempe a fost ales Fellow al Societății Regale din Londra și mai târziu Președinte al Societății de Matematică din Londra [3] .
În 1890 , Heawood a găsit o eroare în dovada lui Kempe. În același articol, el a demonstrat teorema celor cinci culori , arătând că orice hartă plată poate fi colorată cu cel mult cinci culori. În acest sens, s-a bazat pe ideile lui Kempe. În secolul următor, un număr mare de teorii au fost dezvoltate în încercarea de a reduce numărul minim de culori. Teorema celor patru culori a fost în cele din urmă demonstrată în 1977 de oamenii de știință Kenneth Appel și Wolfgang Haken folosind enumerarea computerizată. Ideea dovezii s-a bazat în mare măsură pe ideile lui Heawood și Kempe și a ignorat majoritatea studiilor intermediare [4] . Dovada teoremei celor patru culori este una dintre primele dovezi în care a fost folosit un calculator.
În 1912, George David Birkhoff a propus utilizarea polinomului cromatic , o parte importantă a teoriei grafurilor algebrice, pentru a studia problemele de colorare . Polinomul cromatic a fost ulterior generalizat de William Tutt ( polinomul lui Tutt ). Kempe în 1879 a atras deja atenția asupra cazului general când graficul nu era plan [5] . Multe rezultate ale generalizărilor graficelor plane de colorare pe suprafețe de ordin superior au apărut la începutul secolului al XX-lea.
În 1960, Claude Burge a formulat conjectura grafului perfect , motivată de o noțiune din teoria informației , și anume eroarea zero a capacității grafului [6] introdusă de Shannon . Afirmația a rămas neconfirmată timp de 40 de ani, până când a fost dovedită drept celebra teoremă strictă a grafului perfect de către matematicienii Chudnovskaya , Robertson , Seymour și Thomas în 2002.
Colorarea graficelor ca problemă algoritmică a fost studiată încă din anii 1970: determinarea numărului cromatic este una dintre cele 21 de probleme NP-complete ale lui Karp (1972). Și cam în același timp, au fost dezvoltați diverși algoritmi bazați pe backtracking și ștergerea și contracția recursivă a lui Zykov [7] . Din 1981, colorarea graficelor a fost folosită pentru alocarea de registre în compilatoare [8] .
Când oamenii vorbesc despre colorarea graficelor, aproape întotdeauna se referă la colorarea vârfurilor lor, adică atribuirea etichetelor de culoare nodurilor graficului, astfel încât oricare două vârfuri care au o margine comună să aibă culori diferite. Deoarece graficele în buclă nu pot fi colorate în acest fel, acestea sunt excluse.
Terminologia în care etichetele sunt numite culori provine din colorarea hărților politice. Etichetele precum roșu sau albastru sunt folosite numai atunci când numărul de culori este mic, dar se presupune că etichetele sunt de obicei numere întregi .
Colorarea cu culori se numește -colorare . Cel mai mic număr de culori necesare pentru a colora un grafic se numește numărul său cromatic și este adesea scris ca . Folosit uneori , deoarece denotă caracteristica lui Euler . Un subset de vârfuri evidențiat într-o singură culoare se numește clasă de culoare , fiecare astfel de clasă formând un set independent . Astfel, -colorarea este aceeași cu împărțirea vârfurilor în mulțimi independente [1] .
Fie un graf arbitrar cu set de vârfuri . Fixăm două numere reale pozitive și îl vom considera ca un spațiu metric în care distanțele dintre vârfurile adiacente sunt egale cu , iar toate celelalte distanțe diferite de zero sunt egale cu . Se notează prin spațiul metric format din puncte separate între ele printr-o distanță . În cele din urmă, pentru oricare două spații metrice și , notăm distanța Gromov-Hausdorff dintre și . Apoi următorul rezultat este valabil.
Teorema (A.O. Ivanov, A.A. Tuzhilin) [9] : Fie cel mai mare număr natural pentru care (dacă astfel de numere naturale nu există, atunci setăm ). Apoi .Cometariu.
Un polinom cromatic este o funcție care numără numărul de t - colorări ale unui grafic . Din nume rezultă că pentru dată această funcție este un polinom în funcție de t .
Acest fapt a fost descoperit de Birkhoff și Lewis în timp ce încercau să demonstreze conjectura în patru culori [10] .
De exemplu, graficul din imaginea din dreapta poate fi colorat în 12 moduri folosind 3 culori. În principiu, nu poate fi vopsit cu două culori. Folosind 4 culori, obținem 24+4*12 = 72 de opțiuni de colorare: când folosiți toate cele 4 culori, sunt 4! = 24 de moduri corecte ( fiecare atribuire de 4 culori pentru orice grafic de 4 vârfuri este corectă); și pentru fiecare 3 culori din cele 4 există 12 moduri de a colora. Apoi, pentru graficul din exemplu, tabelul numerelor de colorații corecte va începe astfel:
Numar disponibil de culori | unu | 2 | 3 | patru | … |
Numărul de moduri de a colora | 0 | 0 | 12 | 72 | … |
Pentru graficul din exemplu și, desigur, .
Un polinom cromatic conține cel puțin la fel de multe informații de colorizare ca un număr cromatic. Într-adevăr, este cel mai mic număr întreg pozitiv care nu este o rădăcină a unui polinom cromatic.
Polinoame cromatice pentru unele graficeTriunghiular | |
Graficul complet | |
copac cu coaste | |
Ciclu | |
Contele de Petersen |
O colorare a muchiei unui grafic înseamnă alocarea de culori muchiilor în așa fel încât să nu aparțină două muchii de aceeași culoare aceluiași vârf. Această problemă este echivalentă cu împărțirea setului de fețe în seturi de fețe independente . Cel mai mic număr de culori necesare pentru colorarea muchiei unui grafic este indicele cromatic al acestuia , sau numărul cromatic al muchiei .
Colorarea totală este un tip de colorare a vârfurilor și a muchiilor unui grafic. Prin aceasta se înțelege o astfel de atribuire a culorilor încât nici vârfurile învecinate, nici muchiile adiacente, nici vârfurile și muchiile care le leagă nu au aceeași culoare. Numărul cromatic total al unui grafic este cel mai mic număr de culori necesare pentru orice colorare completă.
Numărul cromatic al unui plan în care două puncte sunt adiacente dacă există o unitate de distanță între ele este necunoscut. Poate fi 5, 6 sau 7. Alte întrebări deschise despre numărul cromatic de grafice includ conjectura Hadwiger , care afirmă că orice graf cu număr cromatic k are un grafic complet de k vârfuri ca minor , Erdős-Faber-Lovas conjectura , care limitează numărul cromatic de grafuri complete care au exact un vârf comun pentru fiecare pereche de grafuri, și conjectura lui Albertson că printre grafurile k - cromatice, cele cu cel mai mic număr de intersecții sunt complete .
Când Birkov și Lewis au introdus polinomul cromatic în încercarea lor de a rezolva teorema celor patru culori, ei au susținut că pentru graficele plane, polinomul nu are zerouri în domeniul . Deși se știe că un astfel de polinom cromatic nu are zerouri în domeniul , și că , afirmația lor rămâne nedovedită. De asemenea, rămâne o întrebare deschisă cum să distingem graficele cu același polinom cromatic și cum să determinați că un polinom este cromatic.
Pentru un grafic bipartit , problema de colorare este calculată în timp liniar folosind căutarea pe lățimea întâi . În cazul graficelor perfecte, numărul cromatic și colorarea corespunzătoare pot fi găsite în timp polinomial folosind programarea semidefinită . Formulele exacte pentru găsirea numărului cromatic sunt cunoscute pentru multe clase de grafice (păduri, cicluri , roți , grafice cordale ) și pot fi calculate și în timp polinomial.
Algoritmul de căutare exhaustiv pentru cazul k-colorării ia în considerare toate combinațiile de aranjamente de culori într-un grafic cu n vârfuri și le verifică pentru corectitudine. Pentru a calcula numărul cromatic și polinomul cromatic, acest algoritm ia în considerare fiecare k de la 1 la n. În practică, un astfel de algoritm poate fi aplicat numai graficelor mici.
Folosind programarea dinamică și estimând dimensiunea celei mai mari mulțimi independente , posibilitatea de k-colorare într-un grafic poate fi rezolvată în timp [18] . Sunt cunoscuți algoritmi mai rapizi pentru 3 și 4 colorări care rulează în timp [19] și , respectiv, [20] .
Contracția vârfurilor este o operație prin care se realizează un grafic dintr-un grafic prin identificarea vârfurilor și , eliminând muchiile care le leagă și înlocuindu-le cu un singur vârf , unde muchiile incidente la vârfuri și sunt redirecționate . Această operație joacă un rol important în analiza colorării graficelor.
Numărul cromatic satisface relația de recurență
,
unde și sunt vârfuri neadiacente, este un grafic cu o muchie adăugată . Unii algoritmi se bazează pe acest raport, producând ca rezultat un arbore, numit uneori arbore Zykov. Timpul de execuție depinde de metoda de selecție a vârfurilor și .
Polinomul cromatic satisface relatia de recurenta
,
unde și sunt vârfuri adiacente, este un grafic cu muchia eliminată . reprezintă numărul de colorări corecte posibile ale graficului, când vârfurile și pot avea culori identice sau diferite. Dacă și au culori diferite, atunci putem considera un grafic unde și sunt adiacente. Dacă și au aceleași culori, putem considera un grafic în care și sunt îmbinate.
Expresiile prezentate mai sus conduc la o procedură recursivă numită algoritmul de eliminare și contractare , care a stat la baza multor algoritmi de colorare a graficelor. Timpul de rulare satisface aceeași relație de recurență ca și numerele Fibonacci , așa că în cel mai rău caz, algoritmul va rula în timp pentru n vârfuri și m muchii [21] . În practică , metoda ramurilor și legate și respingerea graficelor izomorfe evită unele apeluri recursive, timpul de rulare depinde de metoda de selectare a unei perechi de vârfuri.
Algoritmul greedy sortează vârfurile ,…, și atribuie secvenţial vârfului cea mai mică culoare disponibilă care nu a fost folosită pentru a colora vecinii dintre ,…, , sau adaugă una nouă. Calitatea colorării rezultate depinde de ordinea aleasă. Există întotdeauna o ordine care aduce algoritmul lacom la numărul optim de culori. Pe de altă parte, un algoritm lacom poate fi arbitrar rău; de exemplu, o coroană cu n vârfuri poate fi colorată cu 2 culori, dar există o ordine a vârfurilor care are ca rezultat o colorare lacomă a culorilor.
Pentru un grafic de acorduri și pentru cazurile sale speciale (cum ar fi un grafic de intervale ), algoritmul de colorare greedy poate fi utilizat pentru a găsi colorarea optimă în timp polinomial, alegând ordinea vârfurilor să fie inversă ordinii de eliminare perfectă . Acest algoritm poate fi aplicat la o clasă mai largă de grafice (grafice complet ordonabile ), dar găsirea unei astfel de ordine pentru astfel de grafice este o problemă dificilă.
Dacă vârfurile sunt ordonate în funcție de gradele lor, algoritmul de colorare greedy folosește cel mult culori, care este cu cel mult 1 mai mult decât (aici , gradul vârfului ). Acest algoritm euristic este uneori numit algoritmul Welsh-Powell [22] . Un alt algoritm stabilește ordinea în mod dinamic, alegând următorul vârf din cel cu cele mai multe vârfuri adiacente de diferite culori. Mulți alți algoritmi de colorare a graficelor se bazează pe colorarea lacomă și folosesc strategii statice sau dinamice de ordonare a vârfurilor.
O problemă similară apare în domeniul algoritmilor distribuiți. Să presupunem că vârfurile graficului sunt computere care pot comunica între ele dacă sunt conectate printr-o muchie. Scopul este ca fiecare computer să aleagă o „culoare” pentru sine, astfel încât computerele vecine să aleagă culori diferite. Această problemă este strâns legată de problema ruperii simetriei . Cei mai dezvoltați algoritmi probabilistici sunt mai rapidi decât algoritmii determiniști pentru grafice cu un grad maxim suficient de mare de vârfuri . Cei mai rapizi algoritmi probabilistici folosesc tehnica încercărilor multiple [23] .
În graficele simetrice, algoritmii distribuiți determiniști nu pot găsi colorarea optimă a vârfurilor. Sunt necesare mai multe informații pentru a evita simetria. Se face o presupunere standard că inițial fiecare vârf are un identificator unic, de exemplu, din mulțimea . Cu alte cuvinte, se presupune că ni se dă o n -colorare. Sarcina este de a reduce numărul de culori de la n la, de exemplu, . Cu cât sunt folosite mai multe culori (de exemplu, în loc de ), cu atât vor fi necesare mai puține schimburi de mesaje [23] .
O versiune simplă a algoritmului lacom distribuit pentru -colorare necesită runde de comunicare în cel mai rău caz - este posibil ca informațiile să treacă de la un capăt la altul al rețelei.
Cel mai simplu caz interesant este ciclul n . Richard Cole și Uzi Vishkin [24] au arătat că există un algoritm distribuit care reduce numărul de culori de la n la , folosind doar un mesaj de vecinătate. Repetând aceeași procedură, se poate obține o colorare n -ciclu 3 în runde de conexiune (cu condiția să fie furnizați identificatori unici de nod).
Funcția , logaritm iterat , este o funcție cu creștere extrem de lentă, „aproape o constantă”. Prin urmare, rezultatele lui Cole și Vishkin ridică întrebarea dacă există un algoritm de colorare n-ciclu distribuit, care rulează în timp constant. Nathan Linial a arătat că acest lucru este imposibil: orice algoritm distribuit determinist necesită runde de comunicare pentru a reduce un N -colorare la 3-colorări într-un n-ciclu [25] .
Tehnica lui Cole și Vishkin poate fi aplicată și unui graf arbitrar cu un grad mărginit de vârfuri, caz în care timpul de rulare este [26] . Această metodă a fost generalizată la graficul cerc unitar de către Schneider și colab .. [27] .
Problema colorării marginilor a fost studiată și într-un model distribuit. Pansonezzi și Rizzi au realizat -colorarea pentru în acest model [28] . Limita inferioară pentru colorarea vârfurilor distribuite realizată de Linial este de asemenea aplicabilă problemei colorării marginilor distribuite [25] .
Algoritmii descentralizați sunt numiți algoritmi în care transmiterea internă a mesajelor nu este permisă (spre deosebire de algoritmii distribuiți , în care procesele fac schimb de date între ele). Există algoritmi descentralizați eficienți care fac față cu succes sarcinii de colorare a graficelor. Acești algoritmi funcționează pe ipoteza că un vârf este capabil să „simți” că oricare dintre vârfurile învecinate are aceeași culoare ca el. Cu alte cuvinte, este posibil să se definească un conflict local. O astfel de condiție este destul de des îndeplinită în aplicațiile din lumea reală - de exemplu, atunci când transmite date pe un canal fără fir, o stație de transmisie, de regulă, are capacitatea de a detecta că o altă stație încearcă să transmită simultan pe același canal. Capacitatea de a obține astfel de informații este suficientă pentru ca algoritmii bazați pe automate de învățare să rezolve corect problema de colorare a graficelor [29] [30] cu probabilitatea unu .
Colorarea graficelor este o sarcină dificilă din punct de vedere informatic. A afla dacă un grafic poate fi k - colorat pentru un k dat este o problemă NP-completă, cu excepția cazurilor k = 1 și k = 2. În special, problema calculării numărului cromatic este NP-hard [31] . Problema cu 3 culori este NP-complet chiar și în cazul unui graf plan de grad 4 [32] .
Este, de asemenea, o problemă dificilă de a colora un grafic cu 3 culori cu 4 culori [33] și un grafic k -colorabil pentru valori suficient de mari ale lui k [34] .
Calcularea coeficienților unui polinom cromatic este o problemă #P-hard . S-a dovedit că nu există un algoritm FPRAS pentru calcularea polinomului cromatic pentru orice număr rațional k ≥ 1,5 altul decât k = 2, cu excepția cazului în care NP = RP [35] .
Colorarea vârfurilor modelează multe probleme de planificare [36] . În cea mai simplă setare, un anumit set de locuri de muncă ar trebui distribuit pe intervale de timp, fiecare astfel de job ocupând un segment. Ele pot fi executate în orice ordine, dar cele două joburi pot intra în conflict în sensul că nu pot fi realizate în același timp pentru că, de exemplu, folosesc resurse partajate. Graficul corespunzător conține un vârf pentru fiecare job și o muchie pentru fiecare pereche conflictuală. Numărul cromatic al graficului construit este timpul minim pentru a finaliza toate lucrările fără conflicte.
Detaliile problemei de planificare determină structura graficului. De exemplu, atunci când există o împărțire a aeronavelor în zboruri, graficul de conflict rezultat este un grafic de intervale , astfel încât problema de colorare poate fi rezolvată eficient. La distribuirea frecvențelor radio, se obține un grafic al cercurilor de conflict unitar, iar pentru o astfel de problemă există un algoritm cu 3 aproximări .
Un compilator este un program de calculator care traduce un limbaj de calculator în altul. Pentru a îmbunătăți timpul de execuție a codului rezultat, una dintre tehnicile de optimizare a compilatorului este alocarea registrelor , în care variabilele cele mai frecvent utilizate ale programului compilat sunt stocate în registrele procesorului de mare viteză . În mod ideal, variabilele sunt stocate în registre, astfel încât să fie toate în registre în momentul în care sunt utilizate.
Abordarea standard a acestei probleme este de a o reduce la o problemă de colorare a graficului [8] . Compilatorul construiește un grafic de interferență , unde vârfurile corespund variabilelor, iar o muchie conectează două dintre ele dacă sunt necesare în același timp. Dacă acest grafic este k -cromatic, atunci variabilele pot fi stocate în k registre.
Tehnologia filigranelor digitale ( eng. digital watermarking ) vă permite să transferați un mesaj ascuns împreună cu date (fie fișiere media , fișiere executabile și altele) (" filigran ", filigran ). Un astfel de mesaj ascuns poate fi folosit în protecția drepturilor de autor pentru a identifica proprietarul datelor.
Acest lucru este important, de exemplu, pentru a stabili sursa distribuirii lor ilegale. Sau pentru a confirma drepturile asupra datelor, de exemplu - sisteme software pe un cip ( system-on-cip ).
Mesajul poate fi, de asemenea, codificat în modul în care sunt alocate registrele. O astfel de tehnică a fost propusă de Qu și Potkonjak [37] (de aceea este uneori numită algoritmul QP).
Se compune din următoarele: să fie graficul de incompatibilitate (graful de interferență) al distribuției registrelor procesorului, care a fost menționat mai sus. Colorarea sa este utilizată în program - în plus, este utilizată astfel încât să fie permisă modificarea conținutului graficului cu o ușoară creștere a numărului său cromatic . Se pare că este posibilă codificarea unui mesaj într -un produs software folosind colorarea graficului , adică distribuția registrelor.
Puteți extrage acest mesaj comparând distribuția registrelor cu colorarea originală; [38] există și modalități de a verifica dacă un mesaj a fost codificat în program fără a-l folosi pe cel original.
Ulterior, diverși autori au dezvoltat și rafinat ideile lui Qu și Potkonjak [39] . [38] [40]
Problema colorării graficelor a fost pusă în multe alte aplicații, inclusiv potrivirea modelelor .
Rezolvarea unui puzzle Sudoku poate fi considerată ca completarea unei colorări în 9 culori a unui grafic dat de 81 de vârfuri.