2. Agenda
• Begreber og terminologi
• Anvendelse
• Implementering
• Traverseringsalgoritmer
• Minimum spanning tree
• Dijkstra’s Algorithm
3. Begreber og terminologi I
• Vertex/node (knude)
• Edge (kant) – forbindelse mellem to vertieces
• Adjacent (nabo-knude)
• Path - gennemgang af grafens knuder.
• Cycle – gennmgang der starter og slutter i
samme knude (mere end en knude i grafen)
4.
5. Begreber og terminologi II
• Connected graph – der er en sti mellem alle
vertices
• Complete graph – alle vertices er naboer
• Weighted graph – edges har en værdi
• Directed graph – hver edge går kun en
bestemt vej.
• Planar graph – grafen kan tegnes uden at
edges krydser over hinanden
6. Anvendelser af grafer
• C# og java Garbage Collection
• Ruteplanlægning
• Netværk
• Projektstyring /planlægning/tidsplan
7.
8. Implementering I
• Nabo-Matrix
Fordele:
Directed grafer
Grafer med mange
edges
‘Does x know y?’
- spørgsmål
Ulemper:
ᵡ Mange tomme felter
ᵡ Svært af finde naboer
9. Implementering II
• Nabo-Liste
Fordele:
Grafer med få edges
Få overflødige felter
‘Hvem er nabo til x?’
- spørgsmål
Ulemper:
ᵡ Svært at besvære ‘kender x til y’?
11. • BFS Start Hobart => H –> M -> C -> (A,S,B)-> P -> X -> D
– Undirected => H -> M ->(A,C, S)->(P,D,B,) ->X
• DFS Start Hobart => H -> M -> C -> (A ->P->X ->D) , (B -> S )
| (S), (B)
12. Minimum spanning tree
• Prim
– Vælg en start vertex
– Vælg altid den edge med den mindste vægt
• Kruskal
– Kik på alle edges, start med den med lavest vægt
– Gentage følgende step indtil træet er færdigt:
• Kik på alle edges, vælg den med laveste vægt
• Tjek om den laver en cycle ellers forbind den til
spanning træet
Kan implementeres som en list, hvor hver knude har en list med adjencencies
Implementeres med Hashmap, key: Vertex, value: Adjencie list
BFS
Start Hobart => H –> M -> C -> (A,,S,B)-> P -> X -> D
Undirected => H -> M ->(A,C, S)->(P,D,B,) ->X
Optimistiske algoritmer
Garantere ikke den bedste løsning
The algorithm works as follows:
A set of selected vertices (S = Solution) is constructed:
At any point S contains the vertices to which the shortest path are known.
Initially S only contains the source
In each step a vertex is added to S
On termination S contains all vertices
An array (W) of weights of the shortest path through S known to each vertices is maintained:
Initial W is set to the first row of the adjacency matrix
W is adjusted as new vertices are added to S
At each step a vertex (u) with minimum weight in W and not in S is selected and added to S:
For every vertex not in S check, if it is cheaper to get to them through u. If this is the case, adjust W accordingly.