Grafer og grafalgoritmer
Jeanette Nielsen dm67
Agenda
• Begreber og terminologi
• Anvendelse
• Implementering
• Traverseringsalgoritmer
• Minimum spanning tree
• Dijkstra’s Algorithm
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)
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
Anvendelser af grafer
• C# og java Garbage Collection
• Ruteplanlægning
• Netværk
• Projektstyring /planlægning/tidsplan
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
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’?
Traverseringsalgoritmer
• Dybde-først:
• gå så langt som muligt og så backtrack
• Brede-først:
• besøg først alle nabo vertices før man går dybere
• 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)
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
Dijkstra’s Algorithm
• Finder den hurtigste vej til alle Vertex fra en
given start vertex

2 Grafer

  • 1.
  • 2.
    Agenda • Begreber ogterminologi • Anvendelse • Implementering • Traverseringsalgoritmer • Minimum spanning tree • Dijkstra’s Algorithm
  • 3.
    Begreber og terminologiI • 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)
  • 5.
    Begreber og terminologiII • 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
  • 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’?
  • 10.
    Traverseringsalgoritmer • Dybde-først: • gåså langt som muligt og så backtrack • Brede-først: • besøg først alle nabo vertices før man går dybere
  • 11.
    • BFS StartHobart => 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
  • 13.
    Dijkstra’s Algorithm • Finderden hurtigste vej til alle Vertex fra en given start vertex

Editor's Notes

  • #9 Kan implementere med en dobbelt array [] []
  • #10 Kan implementeres som en list, hvor hver knude har en list med adjencencies Implementeres med Hashmap, key: Vertex, value: Adjencie list
  • #12 BFS Start Hobart => H –> M -> C -> (A,,S,B)-> P -> X -> D Undirected => H -> M ->(A,C, S)->(P,D,B,) ->X
  • #13 Optimistiske algoritmer Garantere ikke den bedste løsning
  • #14 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.