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