Graph
Transcription
Graph
9 Graphen alp3-9.1 1 Graph = (E,K), E = Menge von Ecken (Knoten, nodes) (meist endlich), K = Menge von Kanten (edges) = 2-stellige Relation über E: K ⊆ E×E b a d c gerichteter Graph "d ist Nachfolger von a" "a ist Vorgänger von d" alp3-9.1 2 Graph = (E,K), E = Menge von Ecken (Knoten, nodes)(meist endlich), K = Menge von Kanten (edges) = 2-stellige Relation über E: K ⊆ E×E b b a a d c gerichteter Graph d c ungerichteter Graph Relation K ist symmetrisch: (a,b) ∈ K ⇔ (b,a) ∈ K "d ist Nachfolger von a" "a ist Vorgänger von d" alp3-9.1 "d ist Nachbar von a" 3 Def.: Weg (path) ist eine Folge von Ecken e0 , e1 , e2 , . . ., en, n ≥ 0 , mit (ei-1, ei) ∈ K für 1≤i≤n . Länge des Wegs = Anzahl der Kanten , n Meist interessieren einfache Wege, bei denen alle Ecken voneinander verschieden sind (außer evtl. e0=en). alp3-9.1 ( gerichteter Graph ) ( ungerichteter Graph ) Zyklus: - einfacher Weg -n≥2 - e0 = en Kreis: - einfacher Weg -n≥3 - e0 = en 4 Isolierte Ecke: hat keine Kante (wird i.d.R. ignoriert) Multigraph: Eckenpaar kann auch durch mehrere gleichartige Kanten verbunden sein (K = Multimenge!) Wenn jedes Eckenpaar durch einen Weg verbunden ist, heißt der Graph - falls ungerichtet - falls gerichtet Planarer Gr.: zusammenhängend (S. 3) streng zusammenhängend (nicht S. 2!) Die Ecken können im Zweidimensionalen so arrangiert werden, dass keine Überschneidungen von Kanten vorkommen. Markierter G.: Den Ecken und/oder Kanten sind gewisse Werte zugeordnet. alp3-9.1 5 Anwendungsgebiete: Verkehrsnetze Kommunikationsnetze Energienetze Netzpläne Spiele und ... und ... Wichtig: Operationen wie Erweitern/Ändern/Abfragen sind für Graphen eher untypisch typisch sind komplexe Algorithmen auf unveränderlichen Graphen; (Analogie bei Baumstrukturen: Operatorbaum, genealogischer Baum nicht Suchbaum als Repräsentation einer Menge, Relation,... (collection)) alp3-9.1 6 Typische Probleme für Graph-Algorithmen: Eckensuche: Breitensuche Tiefensuche Wegsuche: existiert ein Weg von a nach b? der günstigste Weg von a nach b? * der ungünstigste Weg von a nach b? * der günstigste Rundweg? * alle Wege [beginnend bei a]? ..... Struktur: zyklisch? zusammenhängend? minimaler Spannbaum? ..... alp3-9.1 * für markierte Graphen 7 9.1 Spezifikation Modell eines eckenmarkierten gerichteten Graphen: type Graph t m = ({(t,t)}, t->Maybe m) (unmarkierte Ecken zugelassen) 2 Deutungen: Ecken sind alle t-Werte isolierte Ecken werden ignoriert Invariante für ungerichtete Graphen: inv(edges,_) = map swap edges == edges alp3-9.1 8 Signatur und Semantik: empty empty :: Graph t m = ({},\x->Nothing) add :: (t,t) -> Graph t m -> Graph t m add(a,b)(edges,m) = (edges++{(a,b)}++{(b,a)} , m) falls ungerichteter Graph domark :: Eq t => (t,m) -> Graph t m -> Graph t m domark(a,x)(edges,m) = (edges,m') where m' n = if n==a then Just x else m n mark :: t -> Graph t m -> Maybe m mark a(_,m) = m a succ :: t -> Graph t m -> {t} succ a(edges,_) = { y | (x,y) <- edges, x==a } alp3-9.1 9 ... und in Java mit fester Knotenmenge, durchnumeriert mit 0,1,2,... Kante ist Zahlenpaar (i,k) interface Graph<E,N> { // with edge marks of type E // node marks of type N void add (int a, int b, E e); E mark(int a, int b); void mark(int a, N n); N mark(int a); Set<Integer> succ(int a); } (zuzüglich Ausnahmen IndexOutOfBoundsException ) E = Zahlentyp: gewichteter Graph (weighted graph) alp3-9.1 10 Komplexere Operationen auf Graphen: Vereinigung Kartesisches Produkt ..... Graph Rewriting (hier nicht behandelt) alp3-9.1 11