Proseminar „Algorithmen auf Graphen“
Zufälliges Erzeugen
von Graphen und
Bayes-Netzen
Björn Schapitz, CV04, 20.06.2006
Gliederung
(1)
(2)
(3)
Einleitung
Geschichtliches
Algorithmen / Beispiele
(1)
(2)
(3)
(4)
(5)
(4)
(5)
2
Anschauliches Vorgehen
Zufällige Adjazenzmatrix
Zufällige Kantenanordnung
Rekursive Erzeugung
One-Pass-Algorithm
Zufällige Bayes-Netze
Zusammenfassung
Gründe zur Beschäftigung mit zufälligen
Graphen
1. Beweise führen (Nachweise der Existenz von
Graphen mit bestimmten Eigenschaften)
2. Modellierung von großen, unüberschaubaren
Strukturen (z.B. Netzwerke, Internet)
3
Einleitung
Arten zufälliger Graphen


echt zufällige Graphen
Oft bestimmte Eigenschaften benötigt:
–
–
–
4
Begrenzt maximale Cliquen
Verhältnis Kanten/Knoten (Dichte)
Zusammenhängend ?
Geschichtliches

Paul Erdös
–
–

5
ungarischer Mathematiker
* 26.03.1913, † 20.09.96
Entwickelte die „Probabilistische
Methode“ zum Beweis seines
Satzes:
„Es gibt Graphen, die gleichzeitig
beliebig hohe Taillenweite und
beliebig hohe chromatische Zahl
haben.“
Anschauliches Vorgehen




6
Leeren Graphen mit n Knoten erzeugen
Wahrscheinlichkeitszahl p mit 0 ≤ p ≤ 1erzeugen
Für jedes Tupel (n1,n2) mit (n1≠n2) entscheiden, ob Kante
gesetzt wird
Beispiel:
Zufällige Adjazenzmatrix




n Knoten: n x n Matrix erzeugen
Mit Nullen füllen
Wahrscheinlichkeitszahl p erzeugen: 0 ≤ p ≤ 1
Für jedes Element der oberen Dreiecksmatrix (ohne
Hauptdiagonale):
–
–
7
Zufallszahl x erzeugen: 0 ≤ x ≤ 1
Wenn x > p, Element auf 1 setzen
Beispiel 1


8
Zufallsgraph mit 5 Knoten
5 x 5 Matrix erzeugen
n1 n2 n3 n4 n5
n1 0
0
0
0
0
n2 0
0
0
0
0
n3 0
0
0
0
0
n4 0
0
0
0
0
n5 0
0
0
0
0
Beispiel 1




Wahrscheinlichkeit p erzeugen
p = 0.5
Für jedes Element oberhalb
der Hauptdiagonalen
Zufallszahl x erzeugen
falls x > p, Matrixelement
anpassen
n1 n2 n3 n4 n5
n1 0 1 0 1 1
n2 0 0 1 1 0
n3 0 0 0 0 1
n4 0 0 0 0 1
n5 0 0 0 0 0
9
Beispiel 1

Graph anhand Adjazenzmatrix aufbauen
n1
10
n1 n2 n3 n4 n5
0 1 0 1 1
n2 0
n3 0
n4 0
0
0
0
1
0
0
1
0
0
0
1
1
n5 0
0
0
0
0
Eigenschaften so erzeugter Graphen




11
Erzeugt echt zufällige Graphen
Anzahl der Kanten über p beeinflussbar
Nicht immer zusammenhängend
Komplexität: O(n2)
Zufällige Kantenanordnung



Leeren Graphen mit n Knoten erzeugen
Anzahl der Kanten e zwischen 0 und emax wählen
1 bis e mal:
–
–
12
p und q von 1..n wählen, so dass p<q
Kante von p nach q erzeugen
Beispiel 2



13
Leeren Graph mit 5 Knoten erzeugen
emax = 10
(max. Anzahl Kanten ohne Loops = (n(n-1))/2
e zufällig aus 1 bis 10: e = 8
Beispiel 2

1 bis 8 mal p und q aus 1..n wählen (mit p<q):
p=2 q=3;
p=1 q=4;

14
p=4 q=5;
p=3 q=5;
p=1 q=2;
p=1 q=5;
Kante von np nach nq setzen
p=1 q=3;
p=2 q=5;
Eigenschaften so erzeugter Graphen





15
gezieltes Setzen von e = feste Kantenanzahl
Durch geeignete Wahl von p und q kann die
max. Anzahl der Eltern und Kinder
beeinflusst werden
Sind nicht immer zusammenhängend
Laufzeit: abhängig von e
Komplexität: bis zu O(n2)
Rekursive Erzeugung




16
Basiert auf der Formel von R.W. Robinson,
Anzahl möglicher Graphen mit n Knoten und k
Wurzeln ist an(k), mit
Wiederholte rekursive Zerlegung in Wurzeln und
Rest-Knoten
Für alle möglichen Wurzel-Anzahlen s des
Teilgraphen alle Kombinationen aufsummieren
Rekursive Erzeugung - Algorithmus
-
1.
2.
Umkehrung der Berechnungsformel zur
Berechnung eines Graphen (benötigt
Knotenmenge V und Wurzelanzahl k)
Zufällig k Wurzeln wählen: K V, |K| = k
Zufällig s aus 1..(n-k) wählen, dabei beachten:
(s wird für die Erzeugung von S
17
V\K benötigt)
Rekursive Erzeugung - Algorithmus
3.
4.
5.
Wähle zufällig und unabhängig voneinander s nichtleere
Teilmengen aus K  Eltern für jedes Element aus S
Wähle zufällig und unabhängig voneinander (n-k-s)
Teilmengen (dürfen leer sein) aus K  Eltern für
Elemente aus V\K\S
Benutze diesen Algorithmus rekursiv, um aus V \ K als
Knotenmenge und s als Anzahl der Wurzeln einen
azyklischen Graphen mit den Wurzel-Knoten S zu
erzeugen
Bei zufälliger Bestimmung von k muss P(k)=an(k)/an gelten.
18
Rekursive Erzeugung - Eigenschaften

Vorteile:
–
–

Nachteile:
–
–
–
19
Variation von k und s  hoher/breiter Graph
Rekursive topologische Aufspaltung  einfacheres
Ermitteln von Attribut-Abhängigkeiten
Nicht immer zusammenhängend
an(k) müssen für alle Kombinationen von k und n berechnet
und zwischengespeichert werden (a1=1, a2=3, a3=25, … ,
a7=1.138.779.265!!!)
Komplexität: O(n2)
One-Pass-Algorithm



20
Erzeugt in einem Schritt einen
zusammenhängenden Graphen
Anzahl Knoten n und Wurzeln r muss
bekannt sein
Maximaler Eingangsgrad m ist begrenzt
One-Pass-Algorithm

Notwendige Bedingungen:
–
–
–
21
n ≥ 2  sinnvoller Graph muss mindestens 2
Knoten haben
1 ≤ r < n  mindestens eine Wurzel
1 ≤ m < n  zusammenhängender Graph
One-Pass-Algorithm

Einschränkungen von n, r und m:
–
–
wenn r ≥ m, dann m(n-r) ≥ n-1
sonst m(n-r) + m(m-1)-r(r-1) ≥ n-1
2



22
Eingabe: Knoten n, Wurzeln r und maximaler
Eingangsgrad m
Ausgabe: zusammenhängender azyklischer
gerichteter Graph
Komplexität: O(mn)
One-Pass-Algorithm

Maximale Kantenanzahl berechnen:
–
–



23
emax = m(n-r) falls r ≥ m
emax = m(n-r)+½(m(m-1)-r(r-1)) sonst
Kantenanzahl e zufällig aus Intervall [n, emax]
bestimmen
Für alle Wurzelknoten (v0…vr-1) Eingangsgrad d(vi)=0 setzen
Für restliche Knoten d-(vi) = [1,min(i,m)] setzen
 dabei beachten, dass ∑i=r d-(vi)=e sein muss
One-Pass-Algorithm


Für alle Knoten Anzahl zu verbindender Eltern
p(vi)=d-(vi)
Für i=r bis n-1:
–

Für i=0 bis r-2
–

Kante von vj zu vi setzen (j  [r-1,i-1])
Kante von vi zu x setzen (x  {vj | p(vj)≥1})
Für i=r bis n-1:
–
Solange p(vi) ≥ 1 wiederhole:

24
Kante von x zu vi setzen (x  {vj | 0 ≤ j ≤ i-1, (vj,vi) є E})
Beispiel 3


Graph mit 5 Knoten, 2 Wurzeln und maximalem
Eingangsgrad 2
Bedingungen:
–
–
–

25
n ≥ 2  erfüllt
1 ≤ r < n  erfüllt
1 ≤ m < n  erfüllt
Einschränkung: da r ≥ m, muss m(n-r) ≥ n-1 gelten
 2(5-2) ≥ 5-1  6 ≥ 4
Beispiel 3
1.
2.
3.
4.
emax = m(n-r) = 6
e=6
d-(n0)=0, d-(n1 )=0
restliche Knoten:
–
–
–
n2=[1,min(2,2)]=2
n3=[1,min(3,2)]=2
n4=[1,min(4,2)]=2
5. p(n2)=2
26
p(n3)=2
p(n4)=2
Beispiel 3
6. i=2 bis 4
–
–
–
nj  ni, j[1,1]  n1 n2
nj  ni, j[1,2]  n1 n3
nj  ni, j[1,3]  n1 n4
7. i=0 bis 0
–
27
Kante von ni zu x, wobei
x={nj | p(nj)≥1}  n0  n2
Beispiel 3
8. i=2 bis 4
p(n2) ≥ 1 ? nein
p(n3) ≥ 1 ? ja, x zu n3, x  {nj | 0 ≤ j ≤ 2, (nj,n3) nicht
Element von E  nj=n0, n0n3
p(n4) ≥ 1 ? ja, x zu n4, x  {nj | 0 ≤ j ≤ 3, (nj,n4) nicht
Element von E  nj=n0, n0n4
28
Bayes-Netze

Bayessches Netz:
–
–
–
29
Gerichteter azyklischer Graph
Jeder Knoten besitzt Variable mit Angabe über
ihre statistische Verteilung
Meistens zusammenhängend
Erweitern zum Bayesschen-Netz






30
Jedem Knoten vi Variable Vi zuordnen
Anzahl der möglichen Zustände für Vi bestimmen: Ni=|Vi|
Für jeden Wurzelknoten: Ni Zufallswerte erzeugen und zu ∑=1
normieren
Für alle anderen Knoten in topologischer Reihenfolge: für jede
Belegung der Elternknoten Ni Zufallswerte erzeugen und zu
∑=1 normieren
Bei Bedarf beliebig viele Einzelbelegungen des Netzes
entsprechend den Verteilungen erzeugen
Komplexität: abhängig von Elternknoten-Anzahl, ≈ O(mn)
Zusammenfassung



31
Zufällige Graphen verwendet zur Beweisführung und zur Modellierung
unübersichtlicher Strukturen
Algorithmen:
– Zufällige Adjazenzmatrix:
kaum Variationen möglich
– Zufällige Kantenzuordnung: Variationen bedingt über
Parameter möglich
– Rekursive Erzeugung:
Struktur variierbar, aber komplex
und langsam
– One-Pass-Algorithm:
zusammenhängend, wenige Kanten
 gut für Bayessche-Netze
Bayessche Netze:
– Erweiterungen obiger Algorithmen mit Zustandsvariablen für
Knoten
Quellen





32
Reinhard Diestel: „Graphentheorie“, 1996, Springer
Svante Janson, Tomasz Luczak, Andrzej Rucinski:
„Random Graphs“, 2000, John Wiley & Sons Inc.
Lothar Wenzel: „Wie klein ist doch die Welt“, in:
Toolbox, Ausgabe 6/2002, S. 6 ff.
Ansgar Voigt: „Mathe-Tricks in der Biologie“, in:
RUBIN, 2003
Peter Eichelsbacher: „Die Steinsche Methode“, 2003

Proseminar „Algorithmen auf Graphen“