From Wikipedia, the free encyclopedia
În teoria grafurilor, un drum eulerian (sau lanț eulerian) este un drum într-un graf finit, care vizitează fiecare muchie exact o dată. În mod similar, un „ciclu eulerian” sau „circuit eulerian” este un drum eulerian traseu care începe și se termină cu același nod. Ele au fost discutate în premieră de către Leonhard Euler în timp ce rezolva celebra problemă a celor șapte poduri din Königsberg în 1736. Problema poate fi formulată matematic astfel:
Euler a demonstrat că o condiție necesară pentru existența ciclurilor euleriene este ca toate nodurile din graf să aibă grad par, și a afirmat fără a demonstra, că grafurile conexe care au toate nodurile pare au un ciclu eulerian. Prima demonstrație completă a acestei din urmă afirmații a fost publicată postum în anul 1873 de către Carl Hierholzer(d).[1]
Termenul de graf eulerian are două sensuri comune în teoria grafurilor. Un sens este acela de graf care are un „ciclu eulerian”, iar celălalt este acela de graf care are toate nodurile de grad par. Aceste definiții coincid pentru grafurile conexe.[2]
Pentru existența drumurilor euleriene este necesar ca zero sau două noduri să aibă grad impar; acest lucru înseamnă că graful podurilor din Königsberg nu este eulerian. Dacă nu există noduri de grad impar, atunci toate drumurile euleriene sunt cicluri. Dacă există exact două noduri de grad impar, atunci toate drumurile euleriene încep într-unul dintre ele și se termină în celălalt. Un graf care are un drum eulerian, dar nu și un „ciclu eulerian” se numește semi-eulerian.
Un drum eulerian,[3] sau lanț eulerian într-un graf neorientat este un drum care traversează fiecare muchie exact o dată. Dacă un astfel de drum există, graficul este numit traversabil sau semi-eulerian.[4]
Un ciclu eulerian, sau „circuit eulerian” într-un graf neorientat este un ciclu care parcurge fiecare muchie exact o dată. Dacă un astfel de ciclu există, graficul este numit eulerian sau unicursal.[5] Termenul de „graf eulerian” este folosit uneori și într-un sens mai slab, cu referire la un graf în care fiecare nod are grad par. Pentru grafuri conexe(d) finite, cele două definiții sunt echivalente, în timp ce un graf posibil neconex este eulerian într-un sens mai slab dacă și numai dacă fiecare componentă conexă are un ciclu eulerian.
Pentru grafurile orientate, noțiunea de „drum” este luată în sensul de drum orientat și cea de „ciclu”, cu sensul de ciclu orientat.
Definiția și proprietățile drumurilor, ciclurilor și grafurilor euleriene sunt valabile și pentru multigrafuri.
O orientare euleriană a unui graf neorientat G este atribuirea unei direcții pentru fiecare muchie din G astfel încât, la fiecare nod v, gradul interior al lui v să fie egal cu gradul exterior al lui v. O astfel de orientare există pentru orice graf neorientat în care fiecare nod are grad par, și poate fi găsită prin construirea unui ciclu eulerian în fiecare componentă conexă a lui G și apoi orientarea muchiilor potrivit drumului.[6] Fiecare orientare euleriană a unui graf conex este o orientare tare(d), adică o orientare care face graful orientat rezultat să fie tare conex(d).
Algoritmul lui Fleury este un algoritm elegant, dar ineficient, care datează din 1883.[7] Se dă un graf despre care se știe că are toate muchiile în aceeași componentă și cel mult două noduri de grad impar. Algoritmul pornește de la un nod de grad impar, sau, dacă graficul nu are niciunul, începe cu un nod arbitrar ales. La fiecare pas se alege următoarea muchie din drum ca fiind una a cărei ștergere nu ar face graful să își piardă conexitatea, iar dacă nu există nicio astfel de muchie, se alege muchia rămasă pentru nodul curent. Apoi se trece la celălalt capăt al muchiei, iar muchia aleasă anterior se șterge. La sfârșitul algoritmului nu mai există muchii, și secvența în care au fost alese muchiile formează un ciclu eulerian unde graful nu are noduri de grad impar, sau un drum eulerian, dacă există exact două noduri de grad impar.
În timp ce parcurgerea grafului în algoritmul lui Fleury este în timp liniar în raport cu numărul de muchii, adică O(|E|), trebuie luată în calcul și complexitatea detectării de punți. Dacă se rulează din nou algoritmul în timp liniar de detecție a punților al lui Tarjan după ștergerea fiecărei muchii, algoritmul lui Fleury va avea o complexitate în timp O(|E|2). Un algoritm dinamic de detecție a punților al lui Thorup (2000) permite ca acest timp să fie îmbunătățit până la dar chiar și acesta este semnificativ mai lent decât algoritmii alternativi.
Articolul lui Hierholzer din 1873 oferă o metodă diferită pentru a găsi cicluri euleriene, mult mai eficientă decât algoritmul lui Fleury:
Folosind structuri de date cum ar fi listele dublu înlănțuite pentru a reține mulțimea muchiilor neutilizate incidente la fiecare nod, pentru a reține lista nodurilor de pe actualul drum cu muchii neutilizate, și pentru a reține drumul în sine, operațiunile individuale ale algoritmului (găsirea de muchii neutilizate care ies din fiecare nod, găsirea unui nou nod inițial pentru un drum, și conectarea a două drumuri care au un nod în comun) poate fi efectuată fiecare în timp constant, deci în general algoritmul are timp liniar, .[8]
Numărul ciclurilor euleriene în digrafuri poate fi calculat folosind așa-numita teoremă BEST(d), după numele lui de Bruijn(d), van Aardenne-Ehrenfest, Smith(d) și Tutte(d). Formula afirmă că numărul de cicluri euleriene într-un digraf este produsul dintre anumiți factoriali ai gradelor și numărul de arborescențe(d) cu rădăcini. Aceasta din urmă poate fi calculat ca determinant, prin teorema lui Kirchhoff(d) (matrix-tree), de unde rezultă un algoritm în timp polinomial.
Teorema BEST a fost enunțată pentru prima dată în această formă într-o „notă de adăugire la demonstrație” în articolul lui Aardenne-Ehrenfest și de Bruijn (1951). Demonstrația inițială era bijectivă(d) și generaliza șirurile de Bruijn(d). Este o variație a unui rezultat al lui Smith și Tutte (1941).
Numărarea ciclurilor euleriene pe grafuri neorientate este mult mai dificilă. Această problemă este cunoscută a fi #P-completă(d).[9] Într-o direcție pozitivă, se consideră că o abordare Monte Carlo cu lanțuri Markov(d), prin intermediul transformării Kotzig (introdusă de Anton Kotzig(d) în 1968) oferă o aproximare bună pentru numărul de cicluri euleriene într-un graf, deși încă nu există nicio demonstrație a acestui fapt (chiar și pentru grafurile cu grad mărginit).
Formula asimptotică(d) pentru numărul de cicluri euleriene în grafuri complete fost determinată de McKay(d) și Robinson (1995):[10]
O formulă similară a fost obținută mai târziu de M. I. Isaev (2009) pentru grafurile complete bipartite(d):[11]
Drumurile euleriene sunt utilizate în bioinformatică pentru a reconstrui secvențe de ADN(d) din fragmente.[12] Ele sunt utilizate și în proiectarea circuitelor CMOS pentru a găsi ordonări optime ale porților logice.[13] Există unii algoritmi pentru prelucrarea arborilor care se bazează pe un drum eulerian al arborelui (unde fiecare muchie este tratată ca o pereche de arce).[14][15]
Într-un graf infinit, conceptul corespunzător celui de la o Euleriene traseu sau ciclu eulerian este cel de șir eulerian, un drum dublu-infinit care acoperă toate muchiile din graf. Condiția ca graful să fie conex și cu toate nodurile de grad par nu este suficientă pentru existența unui astfel de drum; de exemplu, graful infinit Cayley(d) ilustrat, conex și cu toate nodurile de grad patru, nu are șiruri euleriene. Grafurile infinite care conțin șiruri euleriene au fost caracterizate de Erdős, Grünwald & Weiszfeld (1936). Pentru ca un graf sau multigraf G să aibă un șir eulerian, este necesar și suficient ca toate condițiile următoare să fie îndeplinite:[16][17]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.