260 lines
10 KiB
TeX
260 lines
10 KiB
TeX
\documentclass[a4paper,french,12pt]{article}
|
|
|
|
\title{Théorie des graphes}
|
|
\author{}
|
|
\date{Dernière compilation~: \today{} à \currenttime}
|
|
|
|
\usepackage{../cours}
|
|
\usepackage{tikz}
|
|
\usetikzlibrary{shapes.multipart}
|
|
\usetikzlibrary{automata, arrows.meta, positioning}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
\tableofcontents
|
|
|
|
\clearpage
|
|
|
|
\section{Définitions}
|
|
|
|
Un graphe est un ensemble de sommets qui possèdent des relations.
|
|
|
|
Quand les relations sont symétriques, le graphe est \emph{non orienté}.
|
|
Les relations sont alors appelées des \emph{arrêtes}.
|
|
L'arrête $(x,y)$ est équivalente à l'arrête $(y,x)$.
|
|
|
|
Quand les relations sont non symétriques, la relation dépend d'une direction.
|
|
Le graphe est alors \emph{orienté} et les relations s'appelent des \emph{arcs}.
|
|
|
|
Un graphe peut contenir des arcs et des arrêtes, mais on dira quand même qu'il est soit \emph{orienté} soit \emph{non orienté}.
|
|
Dès qu'il existe des relations non symétriques, donc des arcs, on parle donc de graphe orienté.
|
|
|
|
On peut ajouter une valeur aux relations (par exemple pour le calcul d'un temps de trajet, ou un coût pour le calcul d'une route OSPF).
|
|
On parle alors de graphe \emph{valué}.
|
|
S'il n'y pas de valeur associée aux relations, le graphe est \emph{non valué}.
|
|
|
|
\subsection{Matrice d'un graphe orienté}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
On peut passer d'une représentation graphique à un tableau~: \\\\
|
|
\begin{tabularx}{\linewidth}{YYYYY}
|
|
& A & B & C & D \\
|
|
A & 0 & 1 & 1 & 1 \\
|
|
B & 0 & 0 & 0 & 0 \\
|
|
C & 0 & 1 & 0 & 1 \\
|
|
D & 0 & 1 & 0 & 0 \\
|
|
\end{tabularx}
|
|
|
|
\begin{center}
|
|
\begin{tikzpicture}[-latex,auto,x=2cm,y=2cm]
|
|
\node(a)[state] at (0,0) {A};
|
|
\node(b)[state] at (2,0) {B};
|
|
\node(c)[state] at (2,-2) {C};
|
|
\node(d)[state] at (0,-2) {D};
|
|
\path
|
|
(a) edge (b)
|
|
(a) edge (c)
|
|
(a) edge (d)
|
|
(c) edge (b)
|
|
(c) edge (d)
|
|
(d) edge (b)
|
|
;
|
|
\end{tikzpicture}
|
|
\end{center}
|
|
|
|
\end{multicols}
|
|
|
|
\subsection{Types de graphes}
|
|
|
|
\subsubsection{Graphe Eulerien}
|
|
|
|
\begin{itemize}
|
|
|
|
\item Il existe un cycle passant par toutes les arrêtes.
|
|
|
|
\item Le degré de tous les sommets est \emph{pair}.
|
|
|
|
\end{itemize}
|
|
|
|
\subsubsection{Graphe semi-Eulerien}
|
|
|
|
\begin{itemize}
|
|
|
|
\item Il existe un chemin avec un départ et une arrivée différents, tel que l'on passe par toutes les arrêtes.
|
|
|
|
\item Seuls deux sommets sont de degrés \emph{impairs}.
|
|
Ce sont le départ et l'arrivée.
|
|
Les autres sommets sont de degré \emph{pair}.
|
|
|
|
\end{itemize}
|
|
|
|
\subsection{Fonction $\Gamma$}
|
|
|
|
\subsubsection{Extrémité, prédécesseur, successeur}
|
|
|
|
Soit $G=(S,A)$ un graphe.
|
|
Soient $x$ et $y$ deux sommets de $S$.
|
|
$a=(x,y)$ (arrête ou arc) étant un élément de l'ensemble $A$, $x$ et $y$ sont alors des \emph{extrémités} de $a$.
|
|
|
|
Si $a$ est un arc (donc orienté) allant de $x$ à $y$, alors $x$ est le \emph{prédécesseur} de $y$ et $y$ est le \emph{successeur} de $x$.
|
|
|
|
\subsubsection{Prédécesseurs et successeurs directs}
|
|
|
|
$\Gamma^{-1}(x)$ désigne l'ensemble des prédécesseurs de $x$. \\
|
|
$\Gamma^{+1}(x)$ désigne l'ensemble des successeurs de $x$.
|
|
|
|
\subsubsection{Prédécesseurs et successeurs indirects}
|
|
|
|
$\Gamma^{-n}(x)$ désigne l'ensemble des prédécesseurs de niveau $n$ de $x$. \\
|
|
$\Gamma^{+n}(x)$ désigne l'ensemble des successeurs de niveau $n$ de $x$.
|
|
|
|
On peut définir $\Gamma^{-n}(x)$ comme étant l'ensemble des prédécesseurs des $\Gamma^{-n+1}(x)$. \\
|
|
On peut définir $\Gamma^{+n}(x)$ comme étant l'ensemble des successeurs des $\Gamma^{+n-1}(x)$.
|
|
|
|
\subsubsection{Prédécesseurs et successeurs directs et/ou indirects}
|
|
|
|
Les ensembles des prédécesseurs et successeurs de $x$ de niveau quelconque sont notés respectivement $\Gamma^{-*}(x)$ et $\Gamma^{+*}(x)$.
|
|
|
|
On peut les calculer avec une somme infinie~:
|
|
|
|
\begin{equation*}
|
|
\Gamma^{+*}(x) = \Gamma^{+1}(x) \cup \Gamma^{+2}(x) \cup \Gamma^{+2}(x) \cup \cdots \cup \Gamma^{+n}(x)
|
|
\end{equation*}
|
|
|
|
Cette somme n'est pas infinie dans la mesure où le nombre de sommets est fini.
|
|
Quand on compte les prédécesseurs ou les successeurs, à chaque étape ajoutant aux ensembles précédents, au bout d'un moment on va trouver quelque chose de stable.
|
|
|
|
\subsection{Connexité}
|
|
|
|
Si pour tout $x$ et tout $y$ d'un graphe il existe un chemin allant de $x$ à $y$, le graphe est dit connexe.
|
|
Si le graphe est orienté, il est alors \emph{fortement connexe}.
|
|
|
|
\subsection{Incidence}
|
|
|
|
\begin{center}
|
|
\begin{tikzpicture}
|
|
\node(x)[state] at (0,0) {x};
|
|
\node(y)[state] at (2,0) {y};
|
|
\path [->] (x) edge (y);
|
|
\end{tikzpicture}
|
|
\end{center}
|
|
|
|
L'arc est incident de $x$ vers l'extérieur (parce qu'il sort de $x$) et de $y$ vers l'intérieur (parce qu'il entre dans $y$).
|
|
|
|
\subsection{Degré d'un sommet}
|
|
|
|
Le degré intérieur $d\text{°}^-(x)$ d'un sommet $x$ est le total d'incidents de $x$ vers l'intérieur. \\
|
|
Le degré extérieur $d\text{°}^+(x)$ d'un sommet $x$ est le total d'incidents de $x$ vers l'extérieur.
|
|
|
|
Le degré $d\text{°}(x)$ d'un sommet $x$ est la somme de $d\text{°}^-(x)$ et de $d\text{°}^+(x)$.
|
|
|
|
\subsection{Point d'entrée}
|
|
|
|
Un point d'entrée n'a pas de prédécesseur ($\Gamma^{-1}(x) = \emptyset$).
|
|
|
|
\subsection{Point de sortie}
|
|
|
|
Un point de sortie n'a pas de successeur ($\Gamma^{+1}(x) = \emptyset$).
|
|
|
|
\subsection{Point isolé}
|
|
|
|
Un point isolé est à la fois un point d'entrée et de sortie.
|
|
Il n'a pas de successeur ni de prédécesseur ($\Gamma^{-1}(x) \cup \Gamma^{+1}(x) = \emptyset$).
|
|
|
|
\subsection{Fermeture transitive}
|
|
|
|
Une fermeture transitive est un ``raccourci'' entre deux sommets.
|
|
Si un arc ou une arrête existe entre $x$ et $y$, la fermeture transitive de $x$ et $y$ est $(x,y)$.
|
|
|
|
\section{Représentation et algorithmes généraux}
|
|
|
|
On définit des matrices pour qu'une machine puisse avoir une représentation du graphe.
|
|
|
|
\subsection{Matrices d'adjacence et d'incidence}
|
|
|
|
\subsubsection{Matrice d'adjacence}
|
|
|
|
On code à 1 quand les sommets sont reliés.
|
|
|
|
\begin{center}
|
|
\begin{tabular}{cc|cccccc|c}
|
|
& & \multicolumn{6}{c}{sommets} & \\
|
|
& & A & B & C & D & E & F & $d^+$ \\
|
|
\hline
|
|
\multirow{6}{*}{sommets} & A & 0 & 1 & 1 & 0 & 0 & 0 & 2 \\
|
|
& B & 0 & 0 & 0 & 1 & 0 & 0 & \\
|
|
& C & 0 & 1 & 0 & 0 & 1 & 0 & \\
|
|
& D & 0 & 0 & 1 & 0 & 0 & 1 & \\
|
|
& E & 0 & 0 & 1 & 0 & 0 & 0 & \\
|
|
& F & 1 & 0 & 0 & 0 & 1 & 0 & \\
|
|
\hline
|
|
& $d^-$ & 1 & & & & & & \\
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
On peut ajouter le degré~: arcs entrants ($d^-$) ou arcs sortants ($d^+$).
|
|
|
|
\paragraph{Exemple}
|
|
|
|
\begin{multicols}{2}
|
|
|
|
Non orienté~:
|
|
|
|
\begin{tikzpicture}
|
|
\node (a)[state] at (0,0) {A};
|
|
\node (b)[state] at (2,0) {B};
|
|
\path
|
|
(a) edge [loop above] (a)
|
|
(a) edge (b)
|
|
;
|
|
\end{tikzpicture}
|
|
\begin{align*}
|
|
\begin{pmatrix}
|
|
1 & 1 \\
|
|
1 & 0 \\
|
|
\end{pmatrix}
|
|
\end{align*}
|
|
|
|
\columnbreak
|
|
|
|
Orienté~:
|
|
|
|
\begin{tikzpicture}[->]
|
|
\node (a)[state] at (0,0) {A};
|
|
\node (b)[state] at (2,0) {B};
|
|
\path
|
|
(a) edge [loop above] (a)
|
|
(a) edge (b)
|
|
;
|
|
\end{tikzpicture}
|
|
\begin{align*}
|
|
\begin{pmatrix}
|
|
1 & 1 \\
|
|
0 & 0 \\
|
|
\end{pmatrix}
|
|
\end{align*}
|
|
|
|
\end{multicols}
|
|
|
|
\subsubsection{Matrice d'incidence}
|
|
|
|
On note -1 pour une transition entrante et +1 pour une transition sortante.
|
|
Pour les boucles, on note 2.
|
|
|
|
\begin{center}
|
|
\begin{tabular}{cc|cccccc}
|
|
& & \multicolumn{6}{c}{nombre d'arcs} \\
|
|
& & 1 & 2 & 3 & 4 & 5 & 6 \\
|
|
\hline
|
|
\multirow{6}{*}{sommets} & A & -1 & 0 & 0 & 0 & 0 & 0 \\
|
|
& B & +1 & +1 & 0 & -1 & 0 & 0 \\
|
|
& C & 0 & 0 & 0 & 0 & 0 & 0 \\
|
|
& D & 0 & -1 & -1 & +1 & 0 & 0 \\
|
|
& E & 0 & 0 & 0 & 0 & 0 & 0 \\
|
|
& F & 0 & 0 & +1 & 0 & 0 & 2 \\
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
\end{document}
|