Wir unterscheiden (hier):
alle Kanten sind gerichtet, z.B.
Ein Kante ist ein (geordnetes) Paar, z.B. $(a, b)$ mit Schwanz (tail) $a$ und Kopf (head) $b$.
$$ V = \{a,b,c,d,e\} $$$$ E = \{(a,b), (b,c), (c,d), (d, a), (a,d), (a,e)\} $$alle Kanten sind ungerichtet, z.B.
Ein Kante ist ein (ungeordnetes) Paar, z.B. $\{a, b\}$.
$$ V = \{a,b,c,d,e\} $$$$ E = \{ \{a,b\}, \{b,c\}, \{c,d\}, \{d, a\}, \{a,d\}, \{a,e\}\} $$Betrachten wir einen ungerichteten Graphen ohne parallele Kanten. Außerdem sei der Graph verbunden, d.h. alle Knoten sind über Kanten (direkt oder indirekt) verbunden.
Was ist die minimale und die mögliche maximale Anzahl von Kanten (in Abhängigkeit von $n$)?
Wir unterscheiden:
Abhängig davon können verschiedene Algorithmen besser geeignet sein.
Aus dem obigen Quiz:
D.h. ein verbundener, ungerichteten Graph ohne parallele Kanten hat eine Kantenanzahl zwischen linear und quadratisch in Bezug auf die Knotenanzahl.
Unformal gilt:
"Teilweise dichte" Graphen mit z.B. $\approx n^{3/2}$ sind sparse oder dense in Abhängigkeit von der speziellen Anwendung.
Ausführlich Adjazenzliste:
Also zwei Arrays (oder verkettete Listen) für die Knoten und Kanten, die sich jeweils (kreuz-)referenzieren.
Im einfachsten Fall wird für jeden Knoten einfach eine Liste der über Kanten verbundenen Nachbarknoten gespeichert:
Beachte: Hier wurde kein explizites Kantenarray angegeben.
Wieviel Speicherbedarf benötigt die (ausführliche) Adjazenzlisten-Repräsentation:
$\Theta(?)$ das '?' ist eine Funktion von $m$ und $n$.
Quadratische $n \times n$-Matrix.
Für ungerichtete Graphen: $$ A_{ij} = \left\{ \begin{array}{ll} 1 & \textrm{falls Kante } \{i,j\} \textrm{ zum Graphen gehört} \\ 0 & \, \textrm{sonst} \\ \end{array} \right. $$
Beispiel:
Kann erweitert werden für
Wieviel Speicherbedarf benötigt die Adjazenzmatrix-Repräsentation:
$\Theta(?)$ das '?' ist eine Funktion von $m$ und $n$.
Für viele Anwendungsfälle sind die Graphen dünnbesetzt (Webgraph, soziale Netze, Straßennetz etc.).