Euleriaanse circuits begrijpen in grafiektheorie

Een Euleriaans circuit is een gesloten wandeling die elke rand van een grafiek precies eenmaal doorkruist en terugkomt naar de begintekst. Het concept is afkomstig van de beroemde Zeven Bruggen van Königsberg probleem gesteld door Leonhard Euler in 1736. Euler bewees dat een dergelijk circuit alleen bestaat als elke vertex in de grafiek heeft zelfs graad en de grafiek is verbonden (het negeren van geïsoleerde vertices). Dit fundamentele resultaat legde de basis voor grafiek theorie en blijft cruciaal in netwerkanalyse, circuitontwerp en combinatoriale optimalisatie.

Om het formeel te vermelden: Laat G = (V, E) een niet-gerichte grafiek zijn. Een Euleriaans circuit bestaat alleen als en indien elke vertex ]v[[FLT:]]] [[FLT:]]]V[ een even graad heeft en de grafiek is verbonden wanneer alleen hoekpunten met niet-nulgraad worden overwogen. Voor gerichte grafieken zijn de voorwaarden dat elke vertex gelijk is aan in-graad en uit-graad en de onderliggende ongerichte grafiek is verbonden.

Wat is Hierholzer?

Hierholzer algoritme, gepubliceerd door de Duitse wiskundige Carl Hierholzer in 1873, is een efficiënte methode voor het bouwen van een Euleriaanse circuit wanneer de noodzakelijke voorwaarden zijn voldaan. Het bouwt het circuit door het vinden van een reeks cycli en samenvoegen ervan. Het algoritme loopt in lineaire tijd OE]) met betrekking tot het aantal randen, waardoor het optimaal voor dichte en dunne grafieken gelijk.

Sleutelbegrippen

  • Cycle detectie: Vanaf een hoeklijn, volg ongebruikte randen tot terug naar de beginpunt. Dit vormt een eenvoudige cyclus.
  • Mergende cycli: Wanneer een hoek op het huidige circuit nog ongebruikte randen heeft, wordt een nieuwe cyclus gevormd uit die hoek en in het circuit ingebracht.
  • Edge removal: Als randen worden gebruikt, worden ze gemarkeerd of verwijderd om te voorkomen dat ze opnieuw worden bekeken.

Stap-voor-stap Beschrijving van Hierholzer

Het algoritme kan recursief of iteratief worden geïmplementeerd. Het kernidee is om een circuit te bouwen door herhaaldelijk subcircuits uit te breiden. Hieronder volgt een gedetailleerde afbraak.

Stap 1: Kies een startende Vertex

Selecteer een hoekpunt met minstens één rand. Aangezien de grafiek is verbonden en alle graden gelijk zijn, zal elke hoek werken. Typisch begint het algoritme bij vertex v.

Stap 2: Een cyclus doorkruisen

Volg vanaf de huidige hoek elke ongebruikte rand naar een buurman. Ga verder met het verplaatsen van ongebruikte randen, waarbij elke rand wordt gemarkeerd zoals gebruikt, totdat je terugkeert naar de starthoek. Dit produceert een cyclus C. Als de cyclus alle randen van de grafiek bevat, eindigt het algoritme ..wij hebben een Euleriaans circuit.

Stap 3: Vind vertices met ongebruikte randen

Scan het huidige circuit op een vertex u die nog steeds ongebruikte randen heeft. Als er geen is, is het algoritme voltooid. Anders laat u zo'n vertex zijn.

Stap 4: Bouw een nieuwe cyclus vanuit u

Beginnend bij u, herhaal het cyclusvindingsproces tussen de ongebruikte randen. Dit creëert een nieuwe cyclus C′ die begint en eindigt bij u.

Stap 5: De nieuwe cyclus samenvoegen tot het hoofdcircuit

Voeg C′ in het hoofdcircuit op de positie van u. De resulterende wandeling is nog steeds een circuit (gesloten) en bedekt alle tot nu toe bezochte randen. Terug naar stap 3.

Omdat elke hoek heeft zelfs graad, het proces nooit vast komt te zitten: wanneer u een hoekpunt, zal er altijd een ongebruikte rand om te vertrekken, totdat de vertex . s graad nul. Het algoritme garandeert dat de laatste wandeling omvat elke rand precies één keer.

Voorbeeld: Het bouwen van een Euleriaanse circuit

Beschouw een niet-gerichte grafiek met hoekpunten A, B, C, D en E. Randen: AB, AC, AD, BC, BD, CE, DE. (Dit is een kleine grafiek waar elke hoek even graad heeft: deg(A)=3, deg(B) a[3, deg(C]=2, deg(D) a[3, deg(E]=1? Dat voldoet niet aan zelfs graad conditie. Laat correct: Gebruik een grafiek waar alle graden zelfs zijn: AB, B

Run Hierholzer algoritme:

  • Begin bij hoek 1. Volg de randen: 1-2 (gebruik), 2-3 (gebruik), nu bij 3. Kies ongebruikte rand 3-4 (gebruik), 4-5 (gebruik), 5-3 (gebruik). Terug naar 3, maar het beginpunt was 1. We zijn nog niet teruggekeerd naar 1. Eigenlijk moet het algoritme een cyclus vormen die terugkeert naar de beginhoek. Laten we goed traceren: Begin bij 1, ga 1-2, 2-3, nu vanaf 3 kunnen we gaan 3-1 (ongebruikt) . . dat cyclus 1‐2-3-1 geeft. Dat is cyclus C1. Daarna, randen links: 3-4, 4‐5, 5‐3.
  • Scan C1: vertex 3 heeft ongebruikte randen. Start nieuwe cyclus op 3: 3-4, 4‐5, 5‐3. Cyclus C2 = 3-4‐5‐3.
  • Voeg C2 samen met C1 bij hoek 3: resulterende circuit: 1-2-3-4-5-5-3-1. Alle gebruikte randen, circuit is Euleriaans.

Dit voorbeeld illustreert de elegantie van het algoritme: cycli worden naadloos ontdekt en gecombineerd.

Complexiteit en implementatieoverwegingen

Hierholzer algoritme loopt in O(V + E) tijd wanneer gebruik wordt gemaakt van een lijst van adjacency-representatie en efficiënte datastructuren voor randverwijdering (bv. met behulp van iterators of gekoppelde lijsten).Het algoritme is optimaal omdat elke rand precies eenmaal wordt verwerkt. De geheugen-overhead is ]O[[FLT:]]]V[ + [E]) voor het opslaan van de grafiek en het circuit.

Voor gerichte grafieken werkt dezelfde benadering, mits de grafiek Euleriaans is (in graden is de out-grade bij elke hoek). De algoritmen vereiste van even graden vertaalt zich ook naar de gerichte case.

Vergelijking met Fleury

Een ander bekend algoritme voor het vinden van Euleriaans circuits is Fleury. Fleury... Algorithm, dat werkt door de randen te doorkruisen terwijl de resterende grafiek verbonden blijft (d.w.z. door bruggen te vermijden). Fleury... Fleury...O[[[[2[]) tijd omdat het connectiviteit bij elke stap moet controleren. Hierholzers algoritme wordt over het algemeen de voorkeur gegeven aan de lineaire complexiteit en eenvoudigere implementatie. Het enige nadeel is dat Hierholzers de grafiek Euleriaans (even graden) wil (even graden) terwijl Fleury .

Toepassingen van Hierholzer

De mogelijkheid om een Euleriaans circuit efficiënt te vinden heeft veel toepassingen in de echte wereld.

Chinese Postman probleem

In het Chinese Postman probleem (route inspectie), is het doel om de kortste gesloten wandeling die elke rand minstens een keer dekt te vinden. Voor grafieken die al Eulerian, de oplossing is gewoon de Euleriaanse circuit. Hierholzer algoritme zorgt voor dat circuit. Voor niet-Euleriaanse grafieken, het probleem vermindert tot het dupliceren van randen om alle graden gelijk te maken, en vervolgens toepassen Hierholzer .

Netwerk Routing en Circuit Design

Euleriaanse circuits worden gebruikt bij het ontwerpen van efficiënte routes voor straatvegers, vuilnisophaling, en netwerk pakket transmissie waar elke link moet worden doorkruist precies eenmaal. Het algoritme helpt te minimaliseren redundante reizen.

DNA-fragmentenassemblage

In de computerbiologie is de grafiek van de Bruijn gebaseerd op het vinden van Euleriaanse paden of circuits door middel van k‐mer grafieken. Hierholzers algoritme is een kerncomponent van vele assemblers, waardoor de reconstructie van aaneengesloten sequenties uit korte lezingen mogelijk is.

Computer Graphics en Maze Generation

Euleriaanse paden worden gebruikt in het genereren van doolhoven en in bepaalde grafiek tekenen algoritmen waar randen moeten worden getekend zonder het tillen van de pen. Het algoritme zorgt voor een optimale constructie.

Geïntegreerde Circuit Testing

In het ontwerp van Very Large-Scale Integration (VLSI) kunnen alle verbindingen worden gemodelleerd als een Euleriaanse circuitprobleem, waardoor de beweging van de tester wordt geminimaliseerd.

Verdere lezing en externe middelen

Om uw begrip van Euleriaanse circuits en Hierholzer algoritme te verdiepen, worden de volgende bronnen aanbevolen:

Conclusie

Hierholzer algoritme blijft een hoeksteen van grafiek doorkruisen voor zijn elegantie, snelheid en brede toepasbaarheid. Door het probleem te decomponeren in het vinden en samenvoegen van cycli, biedt het een eenvoudige en optimale oplossing voor de bouw van Euleriaanse circuits. Of u nu netwerkroutes ontwerpt, genomen samenvoegt of puzzels oplost, het begrijpen van dit algoritme biedt u een krachtig hulpmiddel voor het verwerken van grafieken met even-graden vertices. De lineaire tijd complexiteit en eenvoudige recursieve structuur maken het een favoriet onder algoritme enthousiasten en beoefenaars.