Datastrukturer og algoritmer

Opplæring i grafdatastruktur

Opplæring i grafdatastruktur
I databehandling er en graf et sett med noder forbundet med lenker. Hovedforskjellen mellom et tre og en graf er at et tre har en rotnode, mens en graf har mer enn en rotnode. Du bør allerede ha grunnleggende kunnskap om tredatastruktur før du kommer hit, da begrepene der, vil bli brukt her med liten eller ingen forklaring. Hvis du ikke har den kunnskapen, kan du lese veiledningen med tittelen Tree Data Structure Tutorial for Beginners, på lenken, https: // linuxhint.no / tree_data_structure_tutorial_beginners /.

En node i en graf kalles toppunkt (flertall - hjørner). Noen ganger kalles det fortsatt en node; det kan også kalles et poeng. En lenke i en graf kalles en kant. Noen ganger kalles det fortsatt en lenke; det kan også kalles en linje.

Graf med mange funksjoner

Denne figuren viser en graf med mange funksjoner:

Sirklene (diskene) er hjørner. Enhver rett linje eller buet linje eller sløyfe er en kant.

Funksjoner i grafen

Vertex

Et toppunkt er et objekt. Det kan være et hus; det kan være en person; det kan være et abstrakt substantiv; det kan være et hvilket som helst objekt du kan tenke deg.

Kant

En kant er en forbindelse (forhold) mellom to hjørner; forbindelsen kan være abstrakt.

Løkke

En sløyfe er en kant som forbinder et toppunkt med seg selv.

Pilkanten

Tenk på to personer: Johannes og Peter. Hvis John låner Peter $ 100, og hvis John og Peter er knutepunkter, vil utlånskanten peke mot Peter. Hvis begge partnere glemmer at Peter skylder John, og Peter låner John $ 100, vil en pilspiss peke mot John i den andre enden av samme kant. Hvis Peter lånte bare $ 75 til John og ikke $ 100, ville en annen kant knytte Peter til John. Denne andre kanten vil ha pilspissen som peker mot John. I det andre tilfellet er det to kanter, med en pilspiss hver, som peker i motsatt retning.

Toppunktet som en kant peker mot, er et toppunkt for den kanten. Toppunktet som en kant går fra er et halepunkt.

hendelse

En kant forbinder to hjørner. Kanten sies å være hendende i begge toppene. Kanten trenger ikke å ha en pilspiss. De to toppunktene er kjent som endepunktene på kanten. Det er mulig å ha en graf der et toppunkt ikke tilhører noen kant, men det vil ikke bli vurdert i denne opplæringen.

Udirigert graf

En kant kan være en pil, eller den kan ikke. En graf der ingen kant er en pil er en ikke-rettet graf. En kant kan representeres av en rett linje eller en kurve eller en sløyfe.

Regissert graf

En graf der hver kant er en pil (retning) er en rettet graf. En pilkant kan representeres av en rett linje med en pilspiss eller en kurve med en pilspiss eller en løkke med en pilspiss.

Fraværet av en retning på kanten av en ikke-rettet graf, betyr at hver kant av den ikke-rettet grafen er toveis.

Grad av en Vertex

Antall kanter som rammer et toppunkt er graden av toppunktet. En sløyfe har to forekomster i toppunktet, så en løkke telles to ganger.

Bestilling av en graf

Rekkefølgen til en graf er antall hjørner i grafen.

Multigraf

Et multigrafi er en graf der det for flere par av hjørner er mer enn én kant. Et ikke-rettet multigrafi er en slik graf der kantene ikke har noen retninger (er ikke piler). En rettet multigrafi er en der hver kant er en pil, og for par av hjørner som har mer enn en pil, er ett toppunkt halen på disse pilene, og det andre toppunktet er hodet til de samme pilene. Følgende diagram viser et ikke-rettet multigrafi:

Flere enn en kant (i.e. flere kanter) for et par hjørner kalles også parallelle kanter.

Kogger

En kogger er et multigraf som tillater sløyfer (en eller flere sløyfer). Noen multigrafier tillater ikke sløyfer.

Enkel graf

En enkel graf er en graf der ikke to par av hjørner har flere kanter. Sløyfer er ikke tillatt i en enkel graf.

Tom graf

En tom graf er en graf uten hjørner og så ingen kanter.

Blandet graf

En blandet graf er en graf der noen kanter er piler, og andre ikke er; med andre ord: noen kanter har retninger, og andre er ikke rettet.

Vektet vekt

Det er mulig å ha en graf der et tall, kjent som vekt, tildeles hver kant. Noen kanter har samme nummer, men tallene er generelt forskjellige. En slik graf kalles en vektet graf. Tallene for en bestemt graf kan representere lengder eller kostnader (priser) eller størrelse av noe slag, avhengig av problemet.

Indegree og Outdegree

Ordforrådet, indegraden og utgraden gjelder kun for en rettet graf. Grafen kan være multigraf eller ikke. Grafen har eller ikke sløyfer.

Antall pilspisser koblet til et toppunkt er indegraden til toppunktet. En pil med en enkelt pilspiss har en hodeende og en haleende. Antallet haler som er koblet til et toppunkt er utegraden av toppunktet.

Merk: En graf med flere kanter for toppunktparet, der flere kanter er i motsatt retning, er ikke adressert i denne opplæringen.

Programvare representasjon av en graf

En graf kan vises i programvaren slik den er tegnet på diagrammet. En graf kan også representeres i programvaren av en matematisk matrise (todimensjonalt array). En av slike matriser kalles adjacency matrix.

Adjacency Matrix

En tilknytningsmatrise er en kvadratmatrise. Overskriftene på radene er alle hjørnene, skrevet i stigende rekkefølge. Overskriftene for kolonnene er fortsatt de samme hjørnene, skrevet i stigende rekkefølge. Telling av radene eller kolonnene i en matrise begynner fra 1 og ikke null som med matriser. Når du identifiserer et element i en matrise, skrives radnummeret først før kolonnenummeret.

For en ikke-rettet graf er hver oppføring (element) i tilknytningsmatrisen antall kanter som forbinder de to tilsvarende hjørnene. En løkke skal telles to ganger. For en rettet graf er hver oppføring i tilknytningsmatrisen enten antall kanter som forlater en radhode og går inn i tilsvarende kolonnehode, eller er antallet kanter som forlater en kolonnehode og går inn i tilsvarende radhode. Valget er programmørens. I denne situasjonen (i begge tilfeller) bør en løkke fortsatt telles en gang.

Merk: En graf er et diagram som er en datastruktur i seg selv. En tilknytningsmatrise er også en datastruktur i seg selv.

Udirigert graf- og tilgrensende matrise

Følgende diagrammer viser en ikke-rettet graf og tilhørende nærhetsmatrise:

Den ledende diagonalen til en matrise er diagonalen fra øverst til venstre til nederst til høyre. En ikke-rettet matrise er symmetrisk om den ledende diagonalen. Matriseoppføringen for rad A og kolonne C er 1, noe som betyr at det er en kant som forbinder toppunkt A og toppunkt C. Matriseoppføringen for rad C og kolonne B er 3, noe som betyr at det er 3 kanter som forbinder toppunkt C og toppunkt B. De andre oppføringene forklares på samme måte.

Summen av oppføringene for en rad gir antall kanter (grad) for det tilsvarende toppunktet. Summen av oppføringene for rad A er 2, noe som betyr at to kanter er koblet til toppunkt A. Summen av oppføringene for rad B er 6, noe som betyr at 6 kanter er koblet til toppunkt B. Resten av oppføringene er tilsvarende forklart.

Regissert graf og tilstøtende matrise

Følgende diagrammer viser en rettet graf og tilhørende nærhetsmatrise:

Tilstøtningsmatrisen for en rettet graf er ikke nødvendigvis symmetrisk om den ledende diagonalen. Matriseoppføringen for rad A og kolonne C er 1, noe som betyr at den ene kanten går fra toppunkt A til toppunkt C. Matriseoppføringen for rad C og kolonne B er 3, noe som betyr at 3 kanter går fra toppunkt C til toppunkt B. De andre oppføringene er tilsvarende forklart.

Summen av oppføringene for en kolonne gir indegraden for (kolonne) toppunktet. Summen av oppføringene for en rad gir utgraden for toppunktet (rad). Summen av oppføringene for kolonne A er 1, noe som betyr at den ene kanten er rettet mot toppunkt A. Summen av oppføringene for rad B er 2, noe som betyr at to kanter går fra toppunkt B. Resten av oppføringene er tilsvarende forklart.

Grafoperasjoner

En datastruktur, for eksempel en graf, består av et sett med dataverdier eller et sett med objekter, pluss forholdet mellom objektene, pluss operasjonene (funksjonene) mellom objektene. Forholdene i en graf er angitt med kantene. På det, bør en graf ha minst følgende operasjoner:

tilstøtende (G, x, y)

G betyr graf. Denne operasjonen verifiserer om en kant forbinder toppunkt x og toppunkt y. Verdien og posisjonen til en oppføring i en matrise indikerer forbindelsen til en kant (og dens type).

naboer (G, x)

Denne operasjonen returnerer en liste over alle toppunktene som er direkte koblet til toppunktet x. Verdien og posisjonen til en oppføring i en matrise indikerer forbindelsen til en kant.

remove_vertex (G, x)

Denne operasjonen fjerner et toppunkt, x fra en graf. Hvis toppunktet ikke hadde noen kant, er det ikke noe problem. Imidlertid, hvis toppunktet hadde lenker, bør koblingene (kantene) også fjernes. Verdien og posisjonen til en oppføring i en matrise indikerer tilstedeværelsen av et bestemt toppunkt. Hvis et toppunkt blir fjernet, må matrisen justeres på nytt.

add_vertex (G, x)

Dette legger til et toppunkt, x uten å legge til kanter, eller erstatter et toppunkt som hadde kanter, men som var fjernet. Verdien og posisjonen til en oppføring i en matrise indikerer tilstedeværelsen av et bestemt toppunkt. Hvis et toppunkt legges til, må matrisen justeres på nytt.

add_edge (G, x, y)

Denne operasjonen legger til en ny kant mellom toppunktet x og toppunktet y hvis kanten ikke var der. Verdien og posisjonen til en oppføring i en matrise indikerer tilstedeværelsen av en bestemt kant. Hvis en kant legges til, må matrisen justeres på nytt.

remove_edge (G, x, y)

Denne operasjonen vil fjerne kanten mellom toppunktet x og toppunktet y hvis kanten var der. Verdien og posisjonen til en oppføring i en matrise indikerer tilstedeværelsen av en bestemt kant. Hvis en kant fjernes, må matrisen justeres på nytt.

get_vertex_value (G, x)

Denne operasjonen returnerer verdien, v assosiert med toppunktet, x. For å oppnå dette trenger du et maktsett med delmengder for toppunktetiketter og deres verdier.

set_vertex_value (G, x, v)

Denne operasjonen gir en ny verdi, v for verdien assosiert med toppunktet, x. For å oppnå dette trenger du et maktsett med delmengder for toppunktetiketter og deres verdier.

Noen grafer knytter også verdier til kantene. Slike grafer trenger følgende tilleggsoperasjoner:

get_edge_value (G, x, y)

Denne operasjonen returnerer verdien, v assosiert med kanten, (x, y). For å oppnå dette trenger du et maktsett med delmengder for kanter og deres verdier.

set_edge_value (G, x, y, v)

Denne operasjonen gir en ny verdi, v for verdien assosiert med kanten, (x, y). For å oppnå dette trenger du et maktsett med delmengder for kanter og deres verdier.

Konklusjon

En graf er et sett med hjørner forbundet med kanter. En graf kan ikke rettes eller rettes. Kantene kan være ikke-retningsbestemte eller retningsbestemte. Sløyfer kan være til stede eller fraværende i en graf. Det du bør lære deg videre er satt, kraft og multisett relatert til grafer. Etter det bør du lære de forskjellige typene grafer, for eksempel en orientert graf, vanlig graf, fullstendig graf, todelt graf, turneringsgraf, flytnettgraf osv.

Chrys

Om forfatteren

Chrysanthus Forcha

Oppdageren av matematikkintegrasjon fra første prinsipper og relaterte serier. Mastergrad i teknisk utdanning, med spesialisering i elektronikk og dataprogramvare. BSc Elektronikk. Jeg har også kunnskap og erfaring på masternivå innen databehandling og telekommunikasjon. Av 20.000 forfattere var jeg den 37. beste forfatteren på devarticles.com. Jeg har jobbet innen disse feltene i mer enn 10 år.

Vis alle innlegg
Mus Hvordan endre musepekeren og markørstørrelse, farge og skjema på Windows 10
Hvordan endre musepekeren og markørstørrelse, farge og skjema på Windows 10
Musepekeren og markøren i Windows 10 er veldig viktige aspekter ved operativsystemet. Dette kan sies også for andre operativsystemer, så i sannhet er ...
Gratis og åpen kildekode-spillmotorer for utvikling av Linux-spill
Denne artikkelen vil dekke en liste over gratis og open source-spillmotorer som kan brukes til å utvikle 2D- og 3D-spill på Linux. Det er mange slike ...
Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider er det tolvte tilskuddet til Tomb Raider-serien - et action-eventyrspill-franchise opprettet av Eidos Montreal. Spillet ble ...