SPQR-träd
Ett SPQR-träd är en träddatastruktur som används inom datavetenskap , nämligen i grafalgoritmer, för att representera de tre sammankopplade komponenterna i en graf. Trekopplade komponenter i en dubbelkopplad graf är ett system av mindre grafer som beskriver alla 2-vertexsektioner av grafen. SPQR-trädet för en graf kan byggas i linjär tid [1] [2] och har vissa tillämpningar i dynamiska grafalgoritmer och grafvisualisering .
Den grundläggande strukturen som ligger bakom SPQR-trädet är de tre sammankopplade komponenterna i en graf, och förhållandet mellan en sådan nedbrytning och plana inbäddningar studerades först av McLane [3] . Dessa strukturer användes av andra forskare i effektiva algoritmer [4] innan de formaliserades som ett SPQR-träd av Di Batista och Tamassia [5] [6] [7] .
Struktur
Ett SPQR-träd har formen av ett orotat träd , där det för varje nod x finns en tillhörande oriktad graf eller multigraf G x . En nod och grafen associerad med den kan vara en av fyra typer, förkortade som SPQR:
- En nod av typ S (serie = seriell anslutning), den tillhörande grafen är en cykel med tre eller fler hörn och kanter. Detta fall liknar seriell anslutning i parallell-seriegrafer [5] .
- En nod av typ P (parallell = parallellkoppling), den tillhörande grafen är en dipol ( dubbelcykelgraf ), en multigraf med två hörn och tre eller flera kanter. Detta fall liknar parallellkoppling i parallellsekventiella grafer [5] .
- En nod av typ Q, den tillhörande grafen har en enda kant. Detta triviala fall behövs för att arbeta med grafer som består av en enda kant. I vissa arbeten med SPQR-träd visas inte denna nodtyp i SPQR-träd med grafer med mer än en kant. I andra tidningar måste alla icke-virtuella kanter representeras av noder av typ Q med en verklig och en virtuell kant, och alla kanter på noder av andra typer måste vara virtuella.
- En nod av typ R (rigid = rigid), den tillhörande grafen är en 3-kopplad graf som varken är en cykel eller en dipol. "Styv" betyder här att när du använder SPQR-träd för en plan grafinbäddning, har grafen som är associerad med nod R en enda plan inbäddning [5] .
Varje xy- kant mellan två SPQR-trädnoder är associerad med två riktade virtuella kanter , av vilka en är i G x och den andra i G y . Varje kant i grafen G x kan vara en virtuell kant för högst en kant av SPQR-trädet.
SPQR-trädet T är en 2-kopplad graf G T bildad enligt följande. Om kanten xy på SPQR-trädet länkar den virtuella kanten ab på grafen G x med den virtuella kanten cd på grafen G y , bildas en större graf genom att slå samman a och c till en supervertex, slå samman b och d till en annan supervertex , och ta bort två virtuella kanter. Det vill säga, den större grafen är summan över 2-klick G x och G y . Fortsättningen av sådan limning av varje kant av SPQR-trädet ger grafen G T , limningsordningen påverkar inte resultatet. Varje vertex i en av graferna G x kan på detta sätt associeras med en enda vertex i G T , det vill säga super-vertexen i vilken den slogs samman.
Det är vanligtvis inte tillåtet att två noder av typ S eller två noder av typ P ligger intill ett SPQR-träd, eftersom med en sådan närhet kan två noder slås samman till en större nod. Med detta krav är SPQR-trädet unikt definierat av en graf, och graferna G x associerade med noderna i SPQR-trädet är kända som de tri-anslutna komponenterna i grafen G .
Byggnad
Ett SPQR-träd för en given 2-vertex-kopplad graf kan byggas i linjär tid [1] [2] .
Problemet med att konstruera tre sammankopplade komponenter i en graf i linjär tid löstes först av Hopcroft och Tarjan [1] . Baserat på denna algoritm föreslog Di Battista och Tamassia [7] att hela strukturen för ett SPQR-träd, och endast de av dess komponenter, kan byggas i linjär tid. Efter implementeringen av den långsammare algoritmen för SPQR-träd inkluderades i GDToolkit-biblioteket, gav Gutwenger och Mutzel [2] den första implementeringen av linjär tid. Som en del av implementeringsprocessen korrigerade de en del av det tidigare arbetet av Hopcroft och Tarjan [1] .
Algoritmen för Gutwenger och Mutzel [2] inkluderar följande steg.
- Vi sorterar kanterna på grafen efter par av index för dess ändhörn med en variant av radix sort , som gör två omgångar av blocksortering (en pass för varje ände). Efter det kommer de parallella kanterna att stå sida vid sida i den sorterade listan och kan delas upp i en P-nod i det slutliga SPQR-trädet, vilket gör den återstående grafen enkel.
- Vi delar upp grafen i komponenter. Dessa komponenter kan bildas genom att hitta par av separerande hörn och dela upp grafen över dessa två hörn i mindre grafer (med tillhörande par av virtuella kanter som har de separerande hörnen som bladhörn). Partitioneringsprocessen upprepas tills det finns par över vilka partitionering kan utföras. Partitionen som erhålls på detta sätt är inte nödvändigtvis unik, eftersom de delar av grafen som ska bli S-noder i SPQR-trädet är uppdelade i flera trianglar.
- Vi märker varje komponent i partitionen med bokstaven P (komponent med två vertex med flera kanter), med bokstaven S (triangelformad komponent) eller R (vilken annan komponent som helst). Så länge det finns två komponenter som delar ett sammankopplat par virtuella kanter, och båda komponenterna är av typ S eller båda komponenterna är av typ P, slå samman dessa komponenter till en större komponent av samma typ.
Gutwenger och Mutzel [2] använder djup -första sökning för att hitta en struktur som de kallar en "palmträd". Palmen är byggd på basis av ett djup-första sökträd och har sökträdets bågar med orientering från trädets rot till löven, de återstående bågarna (palmbladen) är orienterade mot roten. Gutwenger och Mutzel letar sedan efter en speciell numreringsförordning för palmnoderna och använder vissa mönster i den numreringen för att identifiera par av hörn som kan dela upp grafen i mindre komponenter. Om en komponent hittas på detta sätt används stacken för att identifiera kanterna som ska vara en del av den nya komponenten .
Användning
Hitta sektioner med 2 vertex
Med ett SPQR-träd av G (inga Q-noder), kan man direkt hitta varje par av u och v i G vars borttagning gör att G kopplas bort men lämnar anslutna komponenter:
- De två hörnen u och v kan vara de två ändarna av en virtuell kant i grafen som är associerad med en R-nod. I det här fallet representeras de två komponenterna av två underträd i SPQR-trädet, vilket är ett resultat av borttagandet av en kant av SPQR-trädet.
- De två hörnen u och v kan vara två hörn i en graf associerad med en P-nod som har två eller flera virtuella kanter. I det här fallet representeras komponenterna som bildas genom att ta bort u och v av underträd i SPQR-trädet, ett för varje virtuell kant i noden.
- De två hörnen u och v kan vara två hörn i grafen som är associerade med en S-nod som inte ligger intill vare sig u eller v , eller så är kanten uv virtuell. Om kanten är virtuell, så tillhör paret ( u , v ) en nod av typen P eller R och komponenterna beskrivs ovan. Om två hörn inte är intill S representeras komponenterna av de två vägarna i cykeln som är associerade med noden S och SPQR-trädnoderna kopplade till dessa två vägar.
Representation av alla inbäddningar av plana grafer
Om en plan graf är 3-kopplad har den en unik plan inbäddning upp till valet av den yttre ytan och orienteringen av inbäddningen – ytorna på inbäddningen är exakt grafens cykler. Men för 2-kopplade plana grafer (med märkta hörn och kanter) som inte är 3-kopplade, kan det finnas större frihet att hitta en plan inbäddning. Mer specifikt, om två noder i ett SPQR-träd i en graf är sammankopplade med ett par virtuella kanter, är det möjligt att ändra orienteringen av en av kanterna i förhållande till den andra. Dessutom, vid en nod av typ P i ett SPQR-träd, kan olika delar av grafen associerade med de virtuella kanterna på nod P permuteras godtyckligt. Alla plana representationer av en graf kan beskrivas på detta sätt [8] .
Se även
- Bi-connected component tree, en liknande trädstruktur för vertex-2-anslutna komponenter
- Gomori-Hu-trädet , en annan trädstruktur som beskriver anslutningskanterna på en graf
- Trädnedbrytning , generalisering till stora sektioner
Anteckningar
- ↑ 1 2 3 4 Hopcroft, Tarjan, 1973 .
- ↑ 1 2 3 4 5 Gutwenger, Mutzel, 2001 .
- ↑ Mac Lane, 1937 .
- ↑ Till exempel Horcroft och Tarjan ( Hopcroft, Tarjan 1973 ), Binstock och Monma ( Bienstock, Monma 1988 ). Båda tidningarna har citerats som föregångare av Di Batista och Tamassia.
- ↑ 1 2 3 4 Di Battista, Tamassia, 1989 .
- ↑ Di Battista, Tamassia, 1990 .
- ↑ 1 2 Di Battista, Tamassia, 1996 .
Litteratur
- Di Battista G., Tamassia R. Inkrementell planaritetstestning // Proc. 30:e årliga symposium om grunderna för datavetenskap . - 1989. - S. 436-441. - doi : 10.1109/SFCS.1989.63515 .
- Di Battista G., Tamassia R. On-line grafalgoritmer med SPQR-träd // Proc. 17:e internationella kollokviet om automater, språk och programmering . - Springer-Verlag, 1990. - T. 443. - S. 598-611. — ( Lecture Notes in Computer Science ). - doi : 10.1007/BFb0032061 .
- Di Battista G., Tamassia R. On-line planaritetstestning // SIAM Journal on Computing. - 1996. - T. 25 , nr. 5 . — S. 956–997 . - doi : 10.1137/S0097539794280736 .
- Gutwenger C., Mutzel P. En linjär tidsimplementering av SPQR-träd // Proc. 8th International Symposium on Graph Drawing (GD 2000) . - Springer-Verlag, 2001. - T. 1984. - S. 77–90. — (Föreläsningsanteckningar i datavetenskap). - doi : 10.1007/3-540-44541-2_8 .
- Hopcroft J., Tarjan R. Dela upp en graf i trekopplade komponenter. — SIAM Journal on Computing. - 1973. - T. 2. - S. 135–158. - doi : 10.1137/0202012 .
- Mac Lane S. En strukturell karakterisering av plana kombinatoriska grafer // Duke Mathematical Journal. - 1937. - T. 3 , nr. 3 . — S. 460–472 . - doi : 10.1215/S0012-7094-37-00336-3 .
Länkar