Înțelegerea circuitelor euleriane în teoria grafică

Un circuit eulerian este o plimbare închisă care traversează fiecare margine a unui grafic exact o dată și se întoarce la vertexul de pornire. Conceptul provine de la celebra problemă a celor Șapte Poduri ale Königsbergului, prezentată de Leonhard Euler în 1736. Euler a demonstrat că un astfel de circuit există doar dacă fiecare vertex din grafic are chiar și gradul și graficul este conectat (ignorând versuri izolate). Acest rezultat fundamental a pus bazele teoriei graficului și rămâne crucial în analiza rețelei, designul de circuit, și optimizarea combinatorială.

Pentru a o declara oficial: G[[[[V[, E[]]) este un grafic nedirecționat.Un circuit eulerian există dacă și numai dacă fiecare vertex v VV are un grad uniform, iar graficul este conectat atunci când se analizează numai vertice cu grad non-zero.Pentru graficele dirijate, condițiile sunt că fiecare vertex are egal în-grad și în afara nivelului și graficul nedirecționat de bază este conectat.

Ce este Hierholzer ?

Hierholzer . Algoritmul, publicat de matematicianul german Carl Hierholzer în 1873, este o metodă eficientă de construire a unui circuit eulerian atunci când sunt îndeplinite condițiile necesare. Construiește circuitul prin găsirea unei serii de cicluri și fuzionarea lor. Algoritmul rulează în timp liniar ]O[E]] cu privire la numărul de margini, ceea ce îl face optim pentru grafice dense și rare deopotrivă.

Concepte cheie

  • Detectarea cycle-ului: Pornind de la un vertex, urmați marginile neutilizate până la revenirea la vertexul de pornire. Aceasta formează un ciclu simplu.
  • Ciclurile de merging: Atunci când un vertex pe circuitul curent încă are margini neutilizate, un nou ciclu se formează din acel vertex și se introduce în circuit.
  • Îndepărtarea marginii: Ca margini sunt utilizate, acestea sunt marcate sau îndepărtate pentru a evita revizuirea lor.

Pas cu pas Descrierea Hierholzer

Algoritmul poate fi implementat recursiv sau iterativ. Ideea de bază este de a construi un circuit prin extinderea repetată a sub-circuitelor. Mai jos este o defalcare detaliată.

Pasul 1: Alegeţi un vertex iniţial

Selectaţi orice vertex cu cel puţin o margine. Deoarece graficul este conectat şi toate gradele sunt chiar, orice vertex va funcţiona. De obicei, algoritmul începe la vertex v.

Pasul 2: Traversarea unui ciclu

De la vertexul curent, urmați orice margine neutilizată la un vecin. Continuați să vă deplasați de-a lungul marginilor neutilizate, marcând fiecare margine ca utilizate, până când reveniți la vertexul de pornire. Acest lucru produce un ciclu C. Dacă ciclul conține toate marginile graficului, algoritmul se termină

Pasul 3: Găsiţi punctele cu margini nefolosite

Scanează circuitul curent pentru orice vertex u care încă mai are margini neutilizate incidente. Dacă nu există, algoritmul este complet. Altfel, să u] să fie un astfel de vertex.

Pasul 4: Construiți un nou ciclu din ]u

Începând de la u, repetă procesul de stabilire a ciclului printre marginile neutilizate. Aceasta creează un nou ciclu C′ care începe și se termină la ]u.

Pasul 5: Combină noul ciclu în circuitul principal

Se introduce C′ în circuitul principal, la poziția u. Mersul rezultat este încă un circuit (închis) și acoperă toate marginile vizitate până acum. Return to Pasul 3.

Pentru că fiecare vertex are chiar și gradul, procesul nu se blochează: ori de câte ori introduceți un vertex, va exista întotdeauna un avantaj neutilizat pentru a pleca, până când gradul vertex . Algoritmul garantează că plimbarea finală include fiecare margine exact o dată.

Exemplu: Construirea unui circuit eulerian

Considerați un grafic nedirecționat cu vertice A, B, C, D și E. Edges: AB, AC, AD, BC, BD, CE, DE. (Acesta este un grafic mic în care fiecare vertex are chiar grad: deg (A) =3, deg (B) =3, deg (C)=2, deg (D) =3, deg (E)=1? Aceasta nu satisface gradul. Let check: Folosiți un grafic în cazul în care toate gradele sunt chiar: A (B), B (C), C), DA, plus A (C) și BD. Care oferă fiecare grad de vertex 3? That (Sust) impart. De fapt, un simplu exemplu de nivel egal: un triunghi cu fiecare grad de vertex 2? (deg 2), 2 (d.), 4 (d.), 4 (deg.), 4 (deg.

Run Hierholzer

  • Începeți de la vertex 1. Urmați marginile: 1-2 (utilizare), 2-3 (utilizare), acum 3. Alegeți marginea neutilizată 3-4 (utilizare), 4-5 (utilizare), 5-3 (utilizare). Return to 3, but the inițial point is 1. We haven
  • Scanare C1: vertex 3 are margini neutilizate. Începeți un nou ciclu la 3: 3-4, 4-5, 5-3. Ciclul C2 = 3-4-5‐3.
  • Combină C2 în C1 la vertex 3: circuitul rezultat: 1-2-3-3-5-5-3-1. Toate marginile utilizate, circuitul este Eulerian.

Acest exemplu ilustrează eleganţa algoritmului: ciclurile sunt descoperite şi combinate perfect.

Complexitatea și luarea în considerare a punerii în aplicare

Hierholzer O[[[[[[[V[ + E[]) timpul în care se utilizează o reprezentare a listei de adjacente și structuri de date eficiente pentru îndepărtarea marginilor (de exemplu, folosind iteratori sau liste legate). Algoritmul este optim deoarece fiecare margine este procesată exact o dată. Memoria de deasupra capului este ]]O(]V + E) pentru stocarea graficului și a circuitului.

Pentru graficele direcţionate, aceeaşi abordare funcţionează cu condiţia ca graficul să fie Eulerian (în grad egal cu gradul de la fiecare vertex). Algoritmul de grade egale se traduce şi în cazul direcţionat.

Comparație cu Fleury

Un alt algoritm binecunoscut pentru a găsi circuite eulerian este Fleury .[ [ ] [[E[]] timp pentru că trebuie să verifice conectivitatea la fiecare pas. Algoritmul Hierholzers este preferat în general pentru complexitatea sa liniară în timp și implementarea mai simplă.[2] timp pentru a se ocupa de graficul Eulerian (chiar și grade) întrucât Fleury . Algoritmul Hierholzers este preferat pentru complexitatea sa în timp și implementarea mai simplă. Singurul dezavantaj este că Hierholzers necesită ca graficul să fie eulerian (chiar și grade) întrucât Fleury . De asemenea, printr-o margine manechină între cele două vertice, construind apoi circuitul vertic, eludând marginea manechinului.

Aplicații de Hierholzer

Capacitatea de a găsi un circuit eulerian eficient are multe utilizări din lumea reală.

Problema postasului chinez

În problema chineză de poştaş (control de rută), scopul este de a găsi cel mai scurt mers închis care acoperă fiecare margine cel puţin o dată. Pentru grafice care sunt deja Eulerian, soluţia este pur şi simplu circuitul Eulerian. Hierholzer . Algoritmul Hierholzer . Pentru grafice non-Eulerian, problema reduce la duplicarea marginilor pentru a face toate gradele chiar, şi apoi aplicarea Hierholzer .

Design de rutină și circuite de rețea

Circuitele euleriane sunt folosite pentru proiectarea de rute eficiente pentru maturatorii stradale, colectarea gunoiului, și transmiterea pachetelor de rețea în cazul în care fiecare link trebuie să fie traversate exact o dată. Algoritmul ajută la minimizarea călătorii redundante.

Montaj fragmentare ADN

În biologia computațională, abordarea grafică de Bruijn a ansamblului genomului se bazează pe găsirea căi sau circuite euleriane prin grafice k-mer. Algoritmul Hierholzer . Este o componentă centrală a multor asambloare, permițând reconstrucția secvențelor contigue de pe citiri scurte.

Grafica computerizată și generarea labirintului

Traseele euleriane sunt folosite în generarea labirinturilor și în anumite algoritmi de desen grafic în cazul în care marginile trebuie trase fără ridicarea stiloului. Algoritmul oferă o construcție optimă.

Testarea integrată a circuitelor

În proiectarea Integrare Foarte Large-Scale (VLSI), testarea tuturor conexiunilor poate fi modelată ca o problemă de circuit Eulerian, minimizând mișcarea tester.

Citirea în continuare şi resursele externe

Pentru aprofundarea înțelegerii circuitelor euleriane și algoritmul Hierholzer ., următoarele resurse sunt recomandate:

Concluzie

Hierholzer