Adjacency List och Matrix Representation of Graph
โก Smart sammanfattning
Adjacenslista och matrisrepresentation av grafer lagrar noder och kanter i minnet, vilket gรถr att algoritmer kan korsa nรคtverk. Adjacenslista anvรคnder lรคnkade listor per nod medan adjacensmatriser anvรคnder ett kvadratiskt tvรฅdimensionellt rutnรคt.

รven om de ser olika ut, alla typer av grafer kan representeras pรฅ ett liknande sรคtt. Det finns generellt tvรฅ typer av grafrepresentation:
- Adjacency matris
- Angrรคnsningslista
Angrรคnsningslista
En adjacenslista bestรฅr av lรคnkade listor. Varje nodpunkt betraktas som ett arrayindex, och varje element representerar en lรคnkad lista. Dessa lรคnkade listor innehรฅller de noder som delar en kant med indexnoden.
Hรคr รคr ett exempel pรฅ en angrรคnsningslista:
Lรฅt en graf innehรฅlla V antal noder och E antal kanter. Rumskomplexiteten fรถr adjacenslistan รคr O(V + E), som skalas med antalet reella kanter snarare รคn alla mรถjliga par av noder.
Vรคrsta tรคnkbara rymdkomplexitet blir O(Vยฒ) om den givna grafen รคr en komplett graf, eftersom varje nodpunkt sedan ansluter till varje annan nodpunkt.
Adjacency matris
En adjacentmatris bestรฅr av en 2D-matris. Fรถr en graf med V noder blir matrisens storlek V ร V.
Sรคga matrix[i][j] = 5Det betyder att det finns en kant mellan nod i och nod j dรคr vikten รคr 5.
Lรฅt oss titta pรฅ fรถljande graf och dess adjacentmatris:
Vi byggde 2D-array med dessa steg:
Steg 1) Punkt A har en rak kant med B, och vikten รคr 5. Sรฅ cellen i rad A och kolumn B kommer att fyllas med 5. Resten av cellerna i rad A kommer att fyllas med noll.
Steg 2) Nod B har en rak kant med C, och vikten รคr 4. Sรฅ cellen i rad B och kolumn C kommer att fyllas med 4. De รฅterstรฅende cellerna i rad B kommer att fyllas med noll, eftersom B inte har nรฅgon utgรฅende kant till nรฅgon annan nod.
Steg 3) Punkt C har inga direkta kanter med nรฅgra andra noder. Sรฅ rad C kommer att fyllas med nollor.
Steg 4) Vertex D har en riktad kant med A och C.
- Cellen i rad D och kolumn A kommer att ha vรคrdet 7. Cellen i rad D och kolumn C kommer att ha vรคrdet 2.
- Resten av cellerna i rad D kommer att fyllas med nollor.
Steg 5) Punkt E har en riktad kant med B och D. Cellen i rad E och kolumn B kommer att ha vรคrdet 6. Cellen i rad E och kolumn D kommer att ha vรคrdet 3. Resten av cellerna i rad E kommer att fyllas med nollor.
Hรคr รคr nรฅgra punkter att lรคgga mรคrke till:
- Grafen har inga sjรคlvloopar nรคr den primรคra diagonalen fรถr adjacentmatrisen รคr 0.
- Grafen รคr en riktad graf om cellerna vid (a, b) och (b, a) inte har samma vรคrde. Annars รคr grafen oriktad.
- Grafen รคr en viktad graf om vรคrdet i nรฅgon cell รคr stรถrre รคn 1.
Det stรถrsta problemet med adjacentmatrisen รคr att den krรคver kvadratiskt utrymme. รven kanter som inte existerar allokerar fortfarande celler i minnet.
Om vi โโtill exempel har en graf med 100 noder, behรถvs 10 000 celler fรถr att lagra den i RAMMed fรคrre kanter i grafen kan allokering av sรฅ mycket minne vara slรถseri. Sรฅ rymdkomplexiteten med hjรคlp av adjacentmatrisen รคr O(Nยฒ), dรคr N รคr antalet noder i grafen.
Angrรคnsningslista vs. Angrรคnsningsmatris
Innan man vรคljer en representation รคr det bra att jรคmfรถra bรฅda modellerna sida vid sida รถver de operationer som dominerar verkliga grafarbetsbelastningar:
| Operation | Adjacency matris | Angrรคnsningslista |
|---|---|---|
| Rymdkomplexitet | O(Vยฒ) | O(V + E) |
| Lรคgg till ett hรถrn | O(Vยฒ) | O (1) |
| Lรคgg till en kant | O (1) | O (1) |
| Ta bort en kant | O (1) | O(E) |
| Kontrollera om kanten (i, j) existerar | O (1) | O (grad av i) |
| Iterera รถver grannar till i | O (V) | O (grad av i) |
| Bรคst fรถr | Tรคta grafer, frekventa kantfrรฅgor | Glesa grafer, traverseringstunga uppgifter |
Kort sagt vinner adjacensmatrisen pรฅ kantsรถkningar i konstant tid, medan adjacenslistan vinner pรฅ minnes- och granniteration, vilket รคr anledningen till att algoritmer som BFS, DFS och Dijkstra vanligtvis parar ihop med adjacenslistor.
Fรถrdelar och nackdelar med grafrepresentation
Varje representation har sina egna avvรคgningar. Att kรคnna till styrkorna och svagheterna hos bรฅda modellerna hjรคlper dig att vรคlja rรคtt modell fรถr det problem du lรถser.
Fรถrdelar med adjacency-matris:
- Konstanttids-O(1) kantexistensfrรฅgor mellan valfritt par av noder.
- Fast indexering gรถr matrisbaserade algoritmer som Floyd-Warshall och transitiv stรคngning enkla att implementera.
- Viktade kanter passar naturligt i en enda matriscell.
Nackdelar med adjacency-matris:
- Slรถsar bort O(Vยฒ) minne nรคr grafen รคr gles.
- Att lรคgga till ett nytt hรถrn krรคver att hela matrisen รคndras i storlek.
- Iterering รถver grannar till en enda vertex tar O(V) รคven nรคr vertexen bara har ett fรฅtal kanter.
Fรถrdelar med angrรคnsningslista:
- Anvรคnder endast O(V + E)-minne, vilket ligger nรคra det verkliga kantantalet i glesa grafer.
- Att lรคgga till en ny hรถrn eller kant รคr O(1).
- Traversalalgoritmer som BFS och DFS itererar grannar i O(grad), vilket ger den totala kรถrtiden fรถr O(V + E).
Nackdelar med angrรคnsningslista:
- Att kontrollera om en specifik kant existerar tar O(grader) tid istรคllet fรถr O(1).
- Cache-lokaliteten รคr svagare eftersom lรคnkade listor รคr utspridda รถver minnet.
- Viktade kanter behรถver ett kompletterande fรคlt eller en lista med par, vilket komplicerar datastrukturen nรฅgot.
Nรคr man ska anvรคnda en adjacency-lista kontra en adjacency-matris
Valet av representation beror pรฅ grafens densitet och de operationer du kรถr oftast. Anvรคnd den hรคr snabbguiden fรถr att vรคlja rรคtt struktur:
- Fรถredra adjacensmatrisen nรคr grafen รคr tรคt (E รคr nรคra Vยฒ), nรคr kanterna sรคllan รคndras, och nรคr din algoritm frรฅgar "finns det en kant mellan i och j?" mรฅnga gรฅnger.
- Fรถredra angrรคnsningslistan nรคr grafen รคr gles (E รคr mycket mindre รคn Vยฒ), nรคr vertex- eller kantmรคngden vรคxer under exekvering, och nรคr man passerar grafen med BFS, DFS eller Dijkstras kortaste vรคgalgoritm.
- Fรถredrar en blandad modell (adjacency-lista plus en hash-uppsรคttning av kanter) nรคr du behรถver bรฅde snabb granniteration och O(1) kantfrรฅgor, pรฅ bekostnad av extra minne.
Moderna grafbibliotek som NetworkX och igraph anvรคnder som standard angrรคnsande listor eftersom de flesta verkliga grafer โ sociala nรคtverk, vรคgkartor, webbsidor, paketberoenden โ รคr glesa och krรคver mycket traversering.


