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.

  • ๐Ÿ“ Angrรคnsande lista: En array av V lรคnkade listor dรคr varje lista vid index i lagrar varje noddel intill noddel i, vilket ger O(V + E) minne.
  • ๐Ÿ—บ๏ธ Nรคrhetsmatris: AV ร— V tvรฅdimensionell array dรคr matris[i][j] har kantvikten eller 1 nรคr en kant finns mellan hรถrn i och hรถrn j.
  • โšก Uppsรถkningshastighet: Adjacensmatrisen svarar pรฅ "finns det en kant mellan i och j?" i O(1)-tid, medan adjacenslistan behรถver O(grader)tid fรถr att skanna grannlistan.
  • ๐Ÿ’พ Minne: Adjacensmatrisen fรถrbrukar alltid O(Vยฒ) minne รคven fรถr glesa grafer, medan en adjacenslista skalar med det faktiska kantantalet.
  • ๐Ÿ” Bรคsta passform: Vรคlj adjacensmatrisen fรถr tรคta grafer med frekventa kantfrรฅgor och adjacenslistan fรถr glesa grafer och traversal-tunga arbetsbelastningar.
  • ๐Ÿ› ๏ธ Program: Bรฅda representationerna driver BFS, DFS, Dijkstra, PageRank, vรคgnรคtverksrutning och Graph Neural Network-pipelines som anvรคnds i AI-system.

Adjacency List och Matrix Representation of Graph

ร„ven om de ser olika ut, alla typer av grafer kan representeras pรฅ ett liknande sรคtt. Det finns generellt tvรฅ typer av grafrepresentation:

  1. Adjacency matris
  2. 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:

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:

Adjacency matris

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:

OperationAdjacency matrisAngrรคnsningslista
RymdkomplexitetO(Vยฒ)O(V + E)
Lรคgg till ett hรถrnO(Vยฒ)O (1)
Lรคgg till en kantO (1)O (1)
Ta bort en kantO (1)O(E)
Kontrollera om kanten (i, j) existerarO (1)O (grad av i)
Iterera รถver grannar till iO (V)O (grad av i)
Bรคst fรถrTรคta grafer, frekventa kantfrรฅgorGlesa 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.

Vanliga frรฅgor

En adjacenslista รคr en array av V lรคnkade listor dรคr varje lista vid index i lagrar varje noddel intill noddel i. Minnesanvรคndningen รคr O(V + E), vilket passar glesa grafer och traversalalgoritmer som BFS och DFS.

En adjacentmatris รคr en V ร— V tvรฅdimensionell array dรคr matris[i][j] har kantvikten eller 1 om en kant finns mellan hรถrn i och hรถrn j. Kantsรถkning รคr O(1) men minnet รคr alltid O(Vยฒ).

Adjacency-matrisen svarar pรฅ kantexistensfrรฅgor i O(1). Adjacency-listan itererar grannar i O(grad), vilket รคr snabbare fรถr traversalalgoritmer som BFS, DFS och Dijkstra. Det bรคsta valet beror pรฅ de operationer som dominerar din arbetsbelastning.

Anvรคnd en angrรคnsningslista nรคr grafen รคr gles, nรคr noder och kanter รคndras under kรถrning och nรคr algoritmen ofta passerar grannar. Sociala nรคtverk, vรคgkartor och webbsidesgrafer passar alla in i denna profil.

Anvรคnd en adjacentmatris nรคr grafen รคr tรคt, nรคr vertexmรคngden รคr fast och nรคr algoritmen frรฅgar samma kant upprepade gรฅnger. Floyd-Warshall och transitiv stรคngning fungerar bรฅda naturligt pรฅ adjacentmatriser.

Ja. Fรถr riktade grafer รคr matrisen inte symmetrisk och listan lagrar endast utgรฅende grannar. Fรถr viktade grafer innehรฅller matriscellen vikten medan listan lagrar par av granne och vikt.

Grafiska neurala nรคtverk matar in adjacensmatriser eller glesa kanttensorer i maskininlรคrningslager fรถr bedrรคgeridetektering, fรถrutsรคgelse av molekylegenskaper och rekommendationssystem. Kunskapsgrafer fรถrlitar sig ocksรฅ pรฅ adjacenslistkodningar fรถr hรคmtningsutรถkad AI.

Ja. GitHub Copilot och ChatGPT genererar angrรคnsningslista och matrisstandard fรถr Python, C++och JavaUtvecklare behรถver fortfarande verifiera kantfall sรฅsom duplicerade kanter, sjรคlvloopar och korrekt hantering av riktade eller viktade grafer.

Sammanfatta detta inlรคgg med: