Adjacency List og Matrise Representation of Graph
โก Smart oppsummering
Adjacensliste og matriserepresentasjon av grafer lagrer noder og kanter i minnet, slik at algoritmer kan krysse nettverk. Adjacensliste bruker koblede lister per node, mens adjacensmatrise bruker et kvadratisk todimensjonalt rutenett.

Selv om de ser forskjellige ut, alle sammen typer grafer kan representeres pรฅ en lignende mรฅte. Det finnes vanligvis to typer grafrepresentasjon:
- Adjacency Matrix
- Tilknytningsliste
Tilknytningsliste
En tilstรธtende liste bestรฅr av lenkede lister. Hvert hjรธrne regnes som en matriseindeks, og hvert element representerer en lenket liste. Disse lenkede listene inneholder hjรธrnene som deler en kant med indeksknutepunktet.
Her er et eksempel pรฅ en liste over tilstรธtende steder:
La en graf inneholde V antall hjรธrner og E antall kanter. Romkompleksiteten til adjacenslisten er O(V + E), som skalerer med antall reelle kanter i stedet for alle mulige par av hjรธrner.
Verst tenkelige romkompleksitet blir O(Vยฒ) hvis den gitte grafen er en fullstendig graf, siden hvert hjรธrne da er koblet til alle andre hjรธrner.
Adjacency Matrix
En adjacensmatrise er satt sammen av en 2D-matrise. For en graf med V hjรธrner vil stรธrrelsen pรฅ matrisen vรฆre V ร V.
Si matrix[i][j] = 5Det betyr at det er en kant mellom node i og node j der vekten er 5.
La oss se pรฅ fรธlgende graf og dens adjacensmatrise:
Vi bygde 2D-array ved รฅ bruke disse trinnene:
Trinn 1) Node A har en direkte kant med B, og vekten er 5. Sรฅ cellen i rad A og kolonne B vil vรฆre fylt med 5. Resten av cellene i rad A vil vรฆre fylt med null.
Trinn 2) Node B har en direkte kant med C, og vekten er 4. Sรฅ cellen i rad B og kolonne C vil bli fylt med 4. De resterende cellene i rad B vil bli fylt med null, siden B ikke har noen utgรฅende kant til noen annen node.
Trinn 3) Node C har ingen direkte kanter med noen andre noder. Sรฅ rad C vil bli fylt med nuller.
Trinn 4) Node D har en rettet kant med A og C.
- Cellen i rad D og kolonne A vil ha verdien 7. Cellen i rad D og kolonne C vil ha verdien 2.
- Resten av cellene i rad D vil bli fylt med nuller.
Trinn 5) Node E har en rettet kant med B og D. Cellen i rad E og kolonne B vil ha verdien 6. Cellen i rad E og kolonne D vil ha verdien 3. Resten av cellene i rad E vil vรฆre fylt med nuller.
Her er noen punkter รฅ legge merke til:
- Grafen har ingen selvlรธkker nรฅr den primรฆre diagonalen til adjacensmatrisen er 0.
- Grafen er en rettet graf hvis cellene i (a, b) og (b, a) ikke har samme verdi. Ellers er grafen ikke-rettet.
- Grafen er en vektet graf hvis verdien i en celle er stรธrre enn 1.
Hovedproblemet med adjacensmatrisen er at den krever kvadratisk plass. Selv kanter som ikke eksisterer, allokerer fortsatt celler i minnet.
Hvis vi for eksempel har en graf med 100 noder, trengs det 10 000 celler for รฅ lagre den i RAMMed fรฆrre kanter i grafen kan det vรฆre slรธsende รฅ allokere sรฅ mye minne. Sรฅ romkompleksiteten ved bruk av adjacensmatrisen er O(Nยฒ), hvor N er antall noder i grafen.
Tilstรธtende liste vs. tilstรธtende matrise
Fรธr du velger en representasjon, er det nyttig รฅ sammenligne begge modellene side om side pรฅ tvers av operasjonene som dominerer reelle grafarbeidsbelastninger:
| Operasjon | Adjacency Matrix | Tilknytningsliste |
|---|---|---|
| Romkompleksitet | O(Vยฒ) | O(V + E) |
| Legg til et hjรธrne | O(Vยฒ) | O (1) |
| Legg til en kant | O (1) | O (1) |
| Fjern en kant | O (1) | O(E) |
| Sjekk om kanten (i, j) eksisterer | O (1) | O (grad av i) |
| Iterer over naboer til i | O(V) | O (grad av i) |
| Best for | Tette grafer, hyppige kantspรธrringer | Sparsomme grafer, traverseringstunge oppgaver |
Kort sagt, adjacensmatrise vinner pรฅ kantoppslag i konstant tid, mens adjacenslisten vinner pรฅ minne- og naboiterasjon, og det er derfor algoritmer som BFS, DFS og Dijkstra vanligvis pares med adjacenslister.
Fordeler og ulemper med grafrepresentasjon
Hver representasjon har sine egne avveininger. ร kjenne styrkene og svakhetene ved begge modellene hjelper deg med รฅ velge den rette for problemet du lรธser.
Fordeler med tilstรธtende matrise:
- Konstanttids O(1) kanteksistensspรธrringer mellom et hvilket som helst par av noder.
- Fast indeksering gjรธr matrisebaserte algoritmer som Floyd-Warshall og transitiv lukking enkle รฅ implementere.
- Vektede kanter passer naturlig i en enkelt matrisecelle.
Ulemper med tilstรธtende matrise:
- Slรธser bort O(Vยฒ) minne nรฅr grafen er sparsom.
- ร legge til et nytt hjรธrne krever endring av stรธrrelsen pรฅ hele matrisen.
- Iterering over naboer til et enkelt hjรธrne tar O(V) selv nรฅr hjรธrnet bare har fรฅ kanter.
Fordeler med tilstรธtende liste:
- Bruker bare O(V + E)-minne, som er nรฆr det reelle kantantallet i sparsomme grafer.
- ร legge til et nytt hjรธrne eller en ny kant er O(1).
- Traverseringsalgoritmer som BFS og DFS itererer naboer i O(grad), noe som gir total kjรธretid for O(V + E).
Ulemper med tilstรธtende liste:
- ร sjekke om en spesifikk kant eksisterer tar O(grader) tid i stedet for O(1).
- Cache-lokalitet er svakere fordi lenkede lister er spredt over minnet.
- Vektede kanter trenger et ledsagerfelt eller en liste over par, noe som kompliserer datastrukturen noe.
Nรฅr skal man bruke tilstรธtende liste kontra tilstรธtende matrise
Valg av representasjon avhenger av grafens tetthet og operasjonene du kjรธrer oftest. Bruk denne hurtigguiden for รฅ velge riktig struktur:
- Foretrekker adjacensmatrisen nรฅr grafen er tett (E er nรฆr Vยฒ), nรฅr kantene sjelden endres, og nรฅr algoritmen din spรธr ยซer det en kant mellom i og j?ยป mange ganger.
- Foretrekker tilstรธtende liste nรฅr grafen er sparsom (E er mye mindre enn Vยฒ), nรฅr hjรธrnet eller kantsettet vokser under utfรธrelse, og nรฅr du krysser grafen med BFS, DFS eller Dijkstras korteste-vei-algoritme.
- Foretrekker en blandet modell (tilstรธtningsliste pluss et hash-sett med kanter) nรฅr du trenger bรฅde rask nabo-iterasjon og O(1) kantspรธrringer, pรฅ bekostning av ekstra minne.
Moderne grafbiblioteker som NetworkX og igraph bruker som standard tilstรธtende lister fordi de fleste grafer i den virkelige verden โ sosiale nettverk, veikart, nettsider, pakkeavhengigheter โ er sparsomme og traversaltunge.


