Datastructuren voor grafen Algoritmiek
2 Grafen Model van o.a.: –Wegennetwerk –Elektrische schakeling –Structuur van een programma –Computernetwerk –… a b c d e f g h
Algoritmiek3 Sinds 1736 Euler: –Bruggen van Kö nigsberg –1736 –Verhandeling in Latijn: wanneer kan je een wandeling maken waarbij precies een keer over elke brug loopt?
Algoritmiek4 Ongerichte Graaf G=(N,A) –N: verzameling knopen (vertices, nodes) –A: verzameling kanten (edges, undirected edges): deelverzamelingen van N met precies twee elementen a b c d e f g h Of: G=(V,E)
Algoritmiek5 Gerichte Graaf G=(N,A) –N weer verzameling knopen (vertices, nodes) –A verzameling pijlen: geordende paren knopen (arcs, directed edges) Of: G=(V,A)
Algoritmiek6 Begrippen en notatie n: aantal knopen a: aantal kanten Graad van knoop: aantal kanten van of naar knoop Ingraad Uitgraad Pad Cycle Knoop 3 heeft ingraad 3 en uitgraad 1 pad cycle
Algoritmiek7 Algoritmen willen iets uitrekenen op een gegeven graaf Bereikbaarheid Kortste afstand (routeplanning) Handelsreizigers- probleem Samenhangendheid Is er een cycle? … Subroutines bij ingewikkelder problemen Modellering en oplossen of benaderen van o.a. planningsproblemen
Algoritmiek8 Belangrijke basisoperaties op grafen Adjacency test: gegeven knopen v, w: is er een kant (pijl) van v naar w ? Ga alle kanten vanuit (of naar) een knoop v langs (iterator) Ook: opsommen alle knopen, kanten, gegeven een kant, geef de eindpunten, evt.: voeg knoop toe; voeg kant toe, etc.
Algoritmiek9 1 e datastructuur voor grafen: Adjacency matrix Twee dimensionale array
Algoritmiek nil Edge object In array posities kan staan: -true of false -Pointer naar object voor kant -Getal, bijv. lengte.
Algoritmiek Ongerichte graaf: Symmetrische matrix
Algoritmiek12 Adjacency matrix datastructuur: eigenschappen Bepalen of er een kant is van v naar w (voor input v, w) O(1) tijd Afgaan van alle kanten vanuit een knoop O(n) tijd Alleen relatief snel als graaf `veel kanten’ heeft – niet grenzende paren knopen `verknoeien’ tijd. Geheugenruimte: O(n 2 ) (wel: eenvoudig).
Algoritmiek13 2 e datastructuur voor grafen: Adjacency lists Per knoop een gelinkte lijst met alle kanten met die knoop als eindpunt. Gerichte grafen: lijst voor uitgaande en/of lijst voor inkomende kanten. … In de objecten kan extra info staan
Algoritmiek14 Adjacency lists: voorbeeld
Algoritmiek15 Adjacency list: voorbeeld gerichte grafen en evt.: Structuur met pijlen `andersom’
Algoritmiek16 Eigenschappen van adjacency list datastructuur Afgaan van alle kanten vanuit een knoop: –Snel: O(d), d de graad van de knoop Bepalen of twee knopen grenzen: –Langzaam … kan (n) tijd kosten Geheugenruimte: O(n+a) …
Algoritmiek17 Voors en tegens Adjacency matrices –Eenvoudig –Snelle adjacency test –Langzaam aflopen van de graaf –Als graaf `ijl’ is: veel geheugen Adjacency lists –Niet erg ingewikkeld –Langzame adjacency test –Snel aflopen van de graaf –Minder geheugen voor ijle grafen –Wellicht meer geheugen voor dichte grafen.