En graf är en matematisk abstraktion av ett verkligt system av vilken natur som helst, vars objekt har parvisa kopplingar. En graf som ett matematiskt objekt är en samling av två uppsättningar - själva uppsättningen av objekt, som kallas uppsättningen av hörn , och uppsättningen av deras parvisa anslutningar, som kallas uppsättningen av kanter. Ett element i en kantuppsättning är ett par element i en vertexuppsättning.
Grafer används ofta inom modern vetenskap och teknik. De används både inom naturvetenskap (fysik och kemi) och inom samhällsvetenskap (till exempel sociologi), men användningen av grafer har fått den största skalan inom datavetenskap och nätverksteknik.
Som det enklaste exemplet från livet kan vi ge ett flygdiagram för ett visst flygbolag, som är modellerat av en graf, där grafens hörn är städer och kanterna är flygningar som förbinder par av städer. Ett katalogträd i en dator är också en graf: enheter, mappar och filer är hörn, och kanterna visar kapsling av filer och mappar i mappar och enheter [1] . Wikipedias struktur är modellerad av en riktad graf , där artiklar är grafens hörn och hyperlänkar är bågar ( tematisk karta ).
Grafer är det huvudsakliga studieobjektet inom grafteori .
Systemen av verklig natur som modelleras av grafer är mycket olika, så det finns olika typer av grafer. Den enklaste abstraktionen av system med element som har parvisa anslutningar är en enkel graf .
Definition. En enkel graf är en samling av två uppsättningar - en icke-tom uppsättning och en uppsättning oordnade par av olika element i uppsättningen . En uppsättning kallas en uppsättning av hörn , en uppsättning kallas en uppsättning av kanter
,det vill säga att mängden består av 2-elements delmängder av mängden .
Relaterade termer
Grafteori har ingen väletablerad terminologi. Därför kan vissa publikationer använda andra termer än de som anges nedan.
Vanligtvis är en graf avbildad som ett diagram : hörn - punkter, kanter - linjer.
En pseudograf är en samling av två uppsättningar - en icke-tom uppsättning och en uppsättning oordnade par av element i uppsättningen .
Elementet är tillåtet i uppsättningen av kanter på pseudografen .
Med andra ord, om elementen i mängden E kan vara loopar, kallas grafen en pseudograf [2] .
En multigraf är en samling av två uppsättningar - en icke-tom uppsättning och en multiuppsättning av oordnade par av olika element i uppsättningen .
Med andra ord, om inte en mängd, utan en familj, det vill säga om den innehåller samma element, så kallas sådana element för flera kanter, och grafen kallas en multigraf [2] .
En pseudomultigraf är en samling av två uppsättningar - en icke-tom uppsättning och en multiuppsättning av oordnade par av element i uppsättningen .
Med andra ord, om en familj som innehåller samma element (flera kanter) och kan innehålla loopar, kallas grafen en pseudo-multigraf [2] .
Riktad graf (digraph) ( eng. riktad graf eller dirgaph ) är en uppsättning av två uppsättningar - en icke-tom uppsättning och en uppsättning bågar eller ordnade par av olika element i uppsättningen
.tillsammans med två displayer
,där mappningen tilldelar varje båge dess initiala vertex (bågens början) , och mappningen tilldelar varje båge dess ändpunkt (bågens ände) . De säger att bågen leder från till
En blandad graf är en samling av tre uppsättningar - en icke-tom uppsättning av hörn , och en uppsättning bågar eller ordnade par av olika element i uppsättningen och en uppsättning kanter av oordnade par av olika element i uppsättningen
.tillsammans med två displayer
Riktade och oriktade grafer är specialfall av blandade grafer.
En graf kallas isomorf till en graf om det finns en bijektion från uppsättningen av vertex i grafen till uppsättningen av vertex i grafen , som har följande egenskap: om grafen har en kant från vertex till vertex , då grafen måste ha en kant från vertex till vertex och vice versa - om grafen har en kant från vertex till vertex måste grafen ha en kant från vertex till vertex . I fallet med en riktad graf måste denna bijektion också bevara kantens orientering. I fallet med en viktad graf måste bijektionen också bevara kantens vikt.
En rutt i en graf är en ändlig sekvens av hörn där varje hörn (förutom den sista) är kopplad till nästa hörn i sekvensen med en kant. En kedja är en rutt utan upprepade kanter. En enkel bana är en bana utan upprepade hörn (vilket betyder att det inte finns några upprepade kanter i en enkel bana).
En orienterad rutt (eller bana ) i en digraf är en ändlig sekvens av hörn och bågar där varje element faller samman med föregående och nästa.
En cykel är en kedja där de första och sista hörnen sammanfaller. I det här fallet är längden på banan (eller cykeln) antalet kanter som består av . Observera att om hörnen och är ändarna på någon kant, är sekvensen enligt denna definition en cykel. För att undvika sådana "degenererade" fall introduceras följande begrepp.
En stig (eller cykel) kallas enkel om kanterna på den inte upprepas; elementär om den är enkel och hörnen i den inte upprepas (med undantag för den initiala och sista i fallet med en cykel).
De enklaste egenskaperna hos stigar och cykler:
En binär relation på vertexuppsättningen av en graf, angiven som "det finns en väg från till ", är en ekvivalensrelation och delar därför upp denna uppsättning i ekvivalensklasser, kallade sammankopplade komponenter i grafen. Om en graf har exakt en ansluten komponent, är grafen ansluten. På den anslutna komponenten kan vi introducera begreppet avstånd mellan hörn som den minsta längden på en väg som förbinder dessa hörn.
Varje maximalt ansluten subgraf i en graf kallas en ansluten komponent (eller helt enkelt en komponent) av grafen . Ordet "maximum" betyder maximalt med avseende på inkludering, det vill säga inte ingår i en sammankopplad subgraf med ett stort antal element.
En kant i en graf kallas en brygga om dess borttagning ökar antalet komponenter.
Grafen heter:
Det händer också:
En enkel graf är ett endimensionellt förenklat komplex .
Mer abstrakt kan en graf definieras som en trippel , där och är några uppsättningar ( av hörn respektive kanter ), och är en infallsfunktion (eller incidentor ) som tilldelar varje kant (ordnad eller oordning) ett par hörn och från (dess ändar ). Särskilda fall av detta koncept är:
En tabell där både kolumner och rader motsvarar grafens hörn. I varje cell i denna matris skrivs ett nummer som bestämmer närvaron av en anslutning från den översta raden till den översta kolumnen (eller vice versa).
Detta är det bekvämaste sättet att representera täta grafer.
Nackdelen är minneskraven, som är direkt proportionella mot kvadraten på antalet hörn.
En tabell där raderna motsvarar grafens hörn och kolumnerna motsvarar länkarna (kanterna) på grafen. I en matriscell i skärningspunkten mellan en rad och en kolumn skrivs följande:
ett om anslutningen "lämnar" toppen , -1, om anslutningen "går in" i vertexet, 0 i alla andra fall (det vill säga om anslutningen är en slinga eller om anslutningen inte är infallande vid vertex)Denna metod är ganska rymlig (storleken är proportionell mot ) för lagring, så den används mycket sällan, i speciella fall (till exempel för att snabbt hitta cykler i en graf).
En lista där varje hörn i grafen motsvarar en sträng som lagrar en lista med angränsande hörn. En sådan datastruktur är inte en tabell i vanlig mening, utan är en "lista med listor".
Minnesstorlek: .
Detta är det bekvämaste sättet att representera glesa grafer, såväl som när du implementerar grundläggande grafgenomgångsalgoritmer i bredd eller djup, där du snabbt behöver få tag på "grannarna" till det aktuella hörnet.
En lista där varje kant av grafen motsvarar en sträng som lagrar två hörn som faller in mot kanten.
Minnesstorlek: .
Detta är det mest kompakta sättet att representera grafer, så det används ofta för extern lagring eller datautbyte.
För att beskriva grafer som är lämpliga för maskinell bearbetning och samtidigt bekväma för mänsklig perception, används flera standardiserade språk, inklusive:
En serie kommersiella program för att bygga grafer har utvecklats, till exempel är grafbyggnad basen för ILOG- applikationsmjukvarupaket (sedan 2009 ägt av IBM Corporation ), bland andra program - GoView, Lassalle AddFlow, LEDA (det finns en gratisutgåva ).
Det finns också ett gratis grafprogram igraph och ett gratis bibliotek som heter Boost .
VisualiseringsprogramFöljande mjukvaruverktyg används för att visualisera grafer :