Förstå euleriska kretsar i grafteori
En eulerisk krets är en sluten vandring som korsar varje kant av en graf exakt en gång och återvänder till startverex. Konceptet härstammar från de berömda Sju Bridges av Königsberg problem som Leonhard Euler ställde 1736. Euler visade att en sådan krets existerar endast om varje vertex i diagrammet har ännu grad och diagrammet är ansluten (ignrunda isolerade vertiker). Detta grundläggande resultat lade grunden för grafik och kvarstår i nätverksanalys, kretsdesign och kretsar.
För att uttrycka det formellt: Låt ]G = (]]V ]]], ]]]]E]]) vara en oriktad graf. En eulerisk krets existerar om och endast om varje vertex ]]] har en jämn grad, och grafen är endast ansluten
Vad är Hierholzers algoritm?
Hierholzers Algoritm, publicerad av den tyska matematikern Carl Hierholzer 1873, är en effektiv metod för att bygga en eulerisk krets när de nödvändiga villkoren är nöjda. Det bygger kretsen genom att hitta en serie cykler och sammanfoga dem. Algoritmen går i linjär tid ]O(]][)] som med hänsyn till antalet kanter, vilket gör den optimal för den för den för densämför den för den för den skull.
Nyckelbegrepp
- ] Cykeldetektering:[] Från en vertex, följ oanvända kanter tills de återvänder till startverex. Detta bildar en enkel cykel.
- Merging cykler: ] När en vertex på den nuvarande kretsen fortfarande har oanvända kanter bildas en ny cykel från den vertex och infogas i kretsen.
- ] Uttag av egg: Som kanter används, är de markerade eller borttagna för att undvika att revidera dem.
Steg-för-steg-beskrivning av Hierholzers algoritm
Algoritmen kan genomföras på ett upprepande sätt eller iterativt sätt. Kärnidén är att bygga en krets genom att upprepade gånger förlänga underkretsar. Nedan är en detaljerad sammanbrott.
Steg 1: Välj en start Vertex
Välj någon vertex med minst en kant. Eftersom grafen är ansluten och alla grader är även, kommer alla vertex att fungera. Vanligtvis algoritmen börjar vid vertex ]v].
Steg 2: Tvätta en cykel
Från den nuvarande vertex, följ någon oanvänd kant till en granne. Fortsätt att flytta längs oanvända kanter, markera varje kant som används, tills du återvänder till startverex. Detta producerar en cykel ]C]. Om cykeln innehåller alla kanter av diagrammet, avslutar algoritmen - vi har en eulerisk krets.
Steg 3: Hitta vertikaler med oanvända kanter
Skanna den nuvarande kretsen för någon vertex ]u som fortfarande har oanvända kanter. Om ingen existerar, är algoritmen komplett. Annars, låt ]]u vara en sådan vertex.
Steg 4: Bygg en ny cykel från u
Börjar på ]u , upprepa cykelfindingsprocessen bland de oanvända kanterna. Detta skapar en ny cykel ]]]C'] som börjar och slutar vid u]].
Steg 5: Sammanfoga den nya cykeln till huvudkretsen
Infoga ]C'[] i huvudkretsen vid ]]]]]]. Den resulterande vandringen är fortfarande en krets (stängd) och täcker alla kanter som besökts hittills.
Eftersom varje vertex har ens grad, processen aldrig fastnar: när du går in i en vertex, kommer det alltid att finnas en oanvänd kant att lämna, tills vertex grad blir noll. Algoritmen garanterar att den slutliga promenaden innehåller varje kant exakt en gång.
Exempel: Bygga en eulerisk krets
Tänk på en oriktad graf med vertika A, B, C, D och E. Edges: AB, AC, AD, BC, BD, CE, DE. (Detta är en liten graf där varje vertex har jämnt examen: deg (A)=3, deg (B)=3, deg(C)=2, deg(D)=3, deg(E)=1? Det är inte tillfredsställande även gradstillstånd. Låt oss rätta: Använd en graf 2, även: A-B, B-C, C-D-GE-GE-GE-GE-GE-GE-GE-GE-GE-GE-GE-GE-GE-T, = 3, = 3, D-GE-TGE-GE-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T
Kör Hierholzers algoritm:
- Börja vid vertex 1. Följ kanter: 1-2 (använd), 2-3 (användning), nu vid 3. Välj oanvänd kant 3-4 (användning), 4-5 (användning), 5-3 (användning) Återgå till 3, men den första utgångspunkten var 1. Vi har inte återgått till 1 ännu. Egentligen måste algoritmen bilda en cykel som återvänder till startvertex. Låt oss spåra ordentligt: Börja vid 1, gå 1-2, 2-3, nu från 3 kan vi gå 3-1 (använd) - det ger cykel 1-2.
- Scan C1: vertex 3 har oanvända kanter. Starta ny cykel vid 3: 3-4, 4-5, 5-3. Cykel C2 = 3‐4‐5-3.
- Sammanslagning C2 i C1 på vertex 3: resulterande krets: 1-2-3-4-5-3-1. Alla kanter som används, kretsen är eulerian.
Detta exempel illustrerar elegansen av algoritmen: cykler upptäcks och kombineras sömlöst.
Komplexitet och genomförande överväganden
Hierholzers Algoritm går i O[(]]]]V] + ]]]]]]]) tid när man använder en intilliggande lista och effektiva datastrukturer för kantborttagning (t.ex. med hjälp av iteratorer eller länkade listor) algoritmen är optimal eftersom varje kant behandlas exakt en gång.
För riktade grafer, samma tillvägagångssätt fungerar förutsatt att grafen är Eulerian (i-graden motsvarar ut grader vid varje vertex). Algoritmens krav på jämna grader översätter till det riktade fallet också.
Jämförelse med Fleury's Algoritm
En annan välkänd algoritm för att hitta euleriska kretsar är Fleury's Algoritm, som fungerar genom att korsa kanter samtidigt som man säkerställer att den återstående grafen förblir ansluten (dvs. undvika broar). Fleury's algoritm körs i ]]] O]]
Ansökningar om Hierholzers algoritm
Förmågan att hitta en eulerisk krets har effektivt många verkliga användningsområden.
Kinesiska postman problem
I det kinesiska postman problemet (väg inspektion), är målet att hitta den kortaste slutna promenad som täcker varje kant minst en gång. För grafer som redan är eulerian, är lösningen helt enkelt den euleriska kretsen. Hierholzers algoritm ger den kretsen. För icke-euleriska grafer, minskar problemet till duplicerande kanter för att göra alla grader även och sedan tillämpa Hierholzer.
Nätverksrouting och Circuit Design
Eulerian kretsar används för att utforma effektiva rutter för gatusopare, sopor samling och nätverkspaket överföring där varje länk måste korsas exakt en gång. Algoritmen hjälper till att minimera överflödiga resor.
DNA-fragmentförsamling
I beräkningsbiologi, de Bruijn graf tillvägagångssätt för genome montering bygger på att hitta euleriska vägar eller kretsar genom k-mer grafer. Hierholzers algoritm är en kärnkomponent i många montörer, vilket möjliggör rekonstruktion av sammanhängande sekvenser från korta läsningar.
Datorgrafik och labyrint generation
Euleriska spår används för att generera labyrinter och i vissa grafritningsalgoritmer där kanter måste dras utan att lyfta pennan. Algoritmen ger en optimal konstruktion.
Integrerad kretstestning
I Very Large-Scale Integration (VLSI) kan testning av alla anslutningar modelleras som ett euleriskt kretsproblem, vilket minimerar testerrörelsen.
Ytterligare läsning och externa resurser
För att fördjupa din förståelse av euleriska kretsar och Hierholzers algoritm rekommenderas följande resurser:
- ]Eulerian Path – Wikipedia – Omfattande översikt över definitioner, historia och algoritmer.
- ]Eulerian Path – CP Algorithms – Detaljerad förklaring med C++ implementering och komplexitetsanalys.
- ]Hierholzers algoritm – Wolfram MathWorld – Matematiskt perspektiv.
- NetworkX: Eulerian Path Exempel – Praktisk demonstration med hjälp av Pythons nätverksanalysbibliotek.
- ]]Hierholzers algoritm för riktad graf – GeeksforGeeks – Implementering på flera språk.
Slutsats
Hierholzers Algoritm förblir en hörnsten i graftraversal för sin elegans, hastighet och bred applikation. Genom att bryta problemet till att hitta och slå samman cykler, ger det en enkel och optimal lösning för att bygga euleriska kretsar. Oavsett om du designar nätverksrutter, monteringsgenomer eller lösa pussel, förstå denna algoritm utrustar dig med ett kraftfullt verktyg för att hantera grafer med jämn-degree vertiker.