From 11feb823ac14af10bbfd2e14b897a46b1b3d8b15 Mon Sep 17 00:00:00 2001 From: couchot Date: Tue, 25 Mar 2014 15:50:25 +0100 Subject: [PATCH 1/1] t --- ensembles/IntroAuxEnsembles13.tex | 31 +- graphes/S2MD.tex | 508 +++++++++++++++--------------- main13.aux | 4 +- main13.blg | 2 +- main13.log | 45 +-- main13.out | 2 +- main13.pdf | Bin 358833 -> 361094 bytes main13.toc | 2 +- 8 files changed, 292 insertions(+), 302 deletions(-) diff --git a/ensembles/IntroAuxEnsembles13.tex b/ensembles/IntroAuxEnsembles13.tex index 7439ae9..bf41543 100755 --- a/ensembles/IntroAuxEnsembles13.tex +++ b/ensembles/IntroAuxEnsembles13.tex @@ -1,4 +1,4 @@ -\section{Rappels de théorie des ensembles} +\section{Des Définitions} \subsection{Notion première d'ensemble} @@ -44,13 +44,13 @@ On note $\N_n$ l'ensemble des entiers inférieurs ou égaux à $n$. L'ensemble vide ne correspond pas à rien ; c'est en fait un ensemble qui ne contient rien, mais en tant qu'ensemble il n'est pas rien : un sac vide est vide, mais le sac en lui même existe. -\paragraph{Dernière règle de fonctionnement des ensembles.} \textcolor{red}{Un ensemble ne peut pas s'appartenir à lui-même}. +\paragraph{Dernière règle de fonctionnement des ensembles.}Un ensemble ne peut pas s'appartenir à lui-même. \subsection{Sous-ensembles, ensemble des parties} -Les sous-ensembles sont définis par la relation d'inclusion\index{inclusion}... +Les sous-ensembles sont définis par la relation d'inclusion\index{inclusion}. \begin{Def} $A$ est un sous-ensemble de $B$ ($A \subset B$)\fg{} si et seulement si tout élément de $A$ appartient à $B$. On dit aussi que $A$ est une partie de $B$. @@ -81,7 +81,8 @@ Soit $A$ un ensemble. L'ensemble des parties de $A$, noté $\mathcal{P}(A)$, est \begin{Th} -Pour tout ensemble $A$, on a $\varnothing, A \in \mathcal{P}(A)$. +Pour tout ensemble $A$, on a $\varnothing\in \mathcal{P}(A)$ et +$A \in \mathcal{P}(A)$. \end{Th} @@ -134,15 +135,15 @@ Deux ensembles sont \emph{égaux} si et seulement si ils ont les mêmes élémen -$A \subset B$ et $B \subset A \Longleftrightarrow A = B$. +$ A = B\Longleftrightarrow A \subset B \land B \subset A$. \begin{Exo} Dans chacun des cas suivants, déterminer si les ensembles sont égaux : \begin{enumerate} \item $A = \{ x \in \R | x > 0 \}$ et $ B = \{x \in \R | x \geqslant |x| \}$; \item $A = \{ x \in \R | x > 0 \}$ et $ B = \{x \in \R | x \leqslant |x| \}$; -\item $A = \Z$ et $B = \{ x \in \Z | x(x-1) \textrm{ pair } \}$; -on pourra réfléchir sur la parité de $x(x-1)$. +\item $A = \Z$ et $B = \{ x \in \Z | x^2-x \textrm{ pair } \}$; +on pourra réfléchir sur la parité de $x^2-x$. \end{enumerate} \end{Exo} @@ -183,12 +184,15 @@ La réunion de deux ensembles possède certaines propriétés : \end{Exo} \begin{Exo} -Faire la réunion des ensembles $A$ et $B$, quand $A = \{x \in \N | x \textrm{ impair } \}$, et $B = \{ x \in \N | x \textrm{ pas divisible par 3 } \}$. +Construire la réunion des ensembles $A$ et $B$ +définis par +$$A = \{x \in \N | x \textrm{ est impair } \} \textrm{ et } +B = \{ x \in \N | x \textrm{ n'est pas divisible par 3 } \}.$$ \end{Exo} \begin{Th}[Distributivités de $\cup$ et $\cap$] -On a les distributivités : +On a les distributivités suivantes: \begin{itemize} \item de $\cup$ sur $\cap$ : $A \cup (B \cap C) = (A \cup B) \cap (A \cup C)$ \item de $\cap$ sur $\cup$ : $A \cap (B \cup C) = (A \cap B) \cup (A \cap C)$ @@ -221,12 +225,11 @@ La complémentation a plusieurs propriétés remarquables : \begin{Exo} Pour deux ensembles $A$ et $B$ inclus dans $E$, on appelle différence symétrique, note $A\Delta B$, -l'ensemble défini par -$A \Delta B = (A \cup B) \setminus (A \cap B)$ -c'est-à-dire que $A \Delta B$ est constitué des éléments qui appartiennent soit à $A$, soit à $B$, mais pas aux deux. +l'ensemble constitué des éléments de $E$ qui appartiennent soit à $A$, +soit à $B$, mais pas aux deux. \begin{enumerate} -\item Montrez que $A\Delta B = [A\inter(E\moins B)]\union[(E\moins A) \inter B]$. -\item Simplifier les expressions $A \Delta A$, $A \Delta (E\moins A)$, $A \Delta E$ et $E\moins (A\triangle B)$. +\item Montrez que $A\Delta B = (A\inter \overline{B})\union(\overline{A} \inter B)$. +\item Simplifier les expressions $A \Delta A$, $A \Delta \overline{A}$, $A \Delta E$ et $\overline{A\triangle B}$. \item Montrer que, si $A\triangle B=C$, alors $A\triangle C=B$ et $B\triangle C=A$. \item Montrer que si $A \Delta B = A \Delta C$ alors $B = C$. \end{enumerate} diff --git a/graphes/S2MD.tex b/graphes/S2MD.tex index 0db9d34..5c52021 100644 --- a/graphes/S2MD.tex +++ b/graphes/S2MD.tex @@ -1,12 +1,10 @@ \documentclass[]{report} \usepackage[a4paper]{geometry} \geometry{hmargin=1.5cm, vmargin=1.5cm } -\usepackage[latin1]{inputenc} +\usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{amsmath,amssymb,latexsym,eufrak,euscript,array} - - \usepackage{pgf} \usepackage{tikz} \usepackage{pdfpages} @@ -19,8 +17,8 @@ -\newtheorem{definition}{Definition} -\newtheorem{theoreme}[definition]{Théorème} +\newtheorem{definition}{Définition} +\newtheorem{theoreme}[definition]{Théorème} \newtheorem{proposition}[definition]{Proposition} \newtheorem{exemple}[definition]{Exemple} @@ -34,8 +32,8 @@ \def \A {\mathcal{A}} \def \B {\mathcal{B}} -\title{Cours Mathématiques Discrètes - \\IUT Belfort Montbéliard} +\title{Cours Mathématiques Discrètes + \\IUT Belfort Montbéliard} \author{{\sc Pierre-Cyrille HEAM}} @@ -50,30 +48,30 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\chapter{Graphes finis orientés} +\chapter{Graphes finis orientés} %%%%%%%%%%%%%%%% -\section{Premières définitions} +\section{Premières définitions} -Un {\bf graphe fini orienté} est un couple $(V,E)$ où +Un {\bf graphe fini orienté} est un couple $(V,E)$ où \begin{itemize} -\item $V$ est un ensemble fini dont les éléments sont appelés {\bf sommets} - ou {\bf noeuds} ou {\bf états}. -\item $E\subseteq V\times V$ est un ensemble de couples d'éléments de $V$, - appelés {\bf arêtes} ou {\bf transitions}. +\item $V$ est un ensemble fini dont les éléments sont appelés {\bf sommets} + ou {\bf noeuds} ou {\bf états}. +\item $E\subseteq V\times V$ est un ensemble de couples d'éléments de $V$, + appelés {\bf arêtes} ou {\bf transitions}. \end{itemize} Par exemple $\left(\{1,2,3\},\{(1,2),(2,2),(3,1)\}\right)$ est un graphe -fini orienté. Le choix des lettres $V$ et $E$ viennent de l'anglais pour +fini orienté. Le choix des lettres $V$ et $E$ viennent de l'anglais pour {\it vertice} et {\it edge}. On rappelle que dans un ensemble (entre $\{\}$) -les éléments ne sont pas ordonnés et n'apparaissent qu'au plus une fois. En -revanche dans un couple (deux éléments entre parenthèse), les éléments sont -ordonnés. Le couple $(1,2)$ est différent du couple $(2,1)$. +les éléments ne sont pas ordonnés et n'apparaissent qu'au plus une fois. En +revanche dans un couple (deux éléments entre parenthèse), les éléments sont +ordonnés. Le couple $(1,2)$ est différent du couple $(2,1)$. \begin{exo} -Les couples $(V,E)$ suivants sont-ils des graphes finis orienté~? +Les couples $(V,E)$ suivants sont-ils des graphes finis orienté~? \begin{enumerate} \item $V=\{1,2,3\}$ et $E=\{(1,3)\}$~? \item $V=\{1,2,3\}$ et $E=\{(1,6),(2,4)\}$~? @@ -83,20 +81,20 @@ Les couples $(V,E)$ suivants sont-ils des graphes finis orient \end{enumerate} \end{exo} -{\bf Sauf mention contraire, tous les graphes étudiés dans ce polycopié - seront des graphes finis orientés, que nous appellerons simplement {\it +{\bf Sauf mention contraire, tous les graphes étudiés dans ce polycopié + seront des graphes finis orientés, que nous appellerons simplement {\it graphes} par la suite.} -Un graphe se représente souvent par un dessin où les sommets sont des points -(parfois entourés d'un cercle) et les arêtes des flèches~: si $(x,y)$ est -une arête, on dessine une flèche entre $x$ et $y$. Par exemple le graphe +Un graphe se représente souvent par un dessin où les sommets sont des points +(parfois entourés d'un cercle) et les arêtes des flèches~: si $(x,y)$ est +une arête, on dessine une flèche entre $x$ et $y$. Par exemple le graphe $$(\{1,2,3,4\},\{(1,1),(1,2),(3,1),(2,4),(3,4)\})$$ peut se dessiner comme sur la -figure~\ref{fig:g1}. Comme on peut le voir, il n'y a pas unicité de la façon +figure~\ref{fig:g1}. Comme on peut le voir, il n'y a pas unicité de la façon de dessiner un graphe. \begin{figure}[h] \begin{center} -\subfigure[première possibilité]{ +\subfigure[première possibilité]{ \begin{tikzpicture} \node (1) at (0,0) {$1$}; \node (2) at (4,0) {$2$}; @@ -109,7 +107,7 @@ de dessiner un graphe. \path[->,>=triangle 90] (2) edge[] node [above] {} (4); \end{tikzpicture} }\hspace*{3cm} -\subfigure[deuxième possibilité]{ +\subfigure[deuxième possibilité]{ \begin{tikzpicture} \node (1) at (0,0) {$1$}; @@ -124,7 +122,7 @@ de dessiner un graphe. \end{tikzpicture} } \end{center} -\caption{Représentation d'un graphe}\label{fig:g1} +\caption{Représentation d'un graphe}\label{fig:g1} \end{figure} @@ -151,7 +149,7 @@ Donner sous forme ensembliste ($V$ et $E$) le graphe suivant~: \end{tikzpicture} \end{center} -Le dessin ci-dessous représente-t-il un graphe~? Si oui le donner +Le dessin ci-dessous représente-t-il un graphe~? Si oui le donner explicitement, sinon dire pourquoi. \begin{center} @@ -269,24 +267,24 @@ sont les voisins de $3$~? de $7$~? Quels sommets ont $9$ pour voisin~? \begin{exo} -On considère la fonction $f$ de $\{0,\ldots,7\}$ dans $\{0,\ldots,7\}$ qui à -$x$ associe son reste modulo $3$. Dessiner le graphe où $V=\{0,\ldots,7\}$ et -$(x,y)\in E$ si et seulement si $y=f(x)$. Mêmes question avec $(x,y)\in E$ -ssi $x^2=y \mod 5$ (c'est-à-dire si $x^2-y$ est un multiple de $5$). Même question avec $(x,y)\in E$ ssi $xy=1 \mod 6$. +On considère la fonction $f$ de $\{0,\ldots,7\}$ dans $\{0,\ldots,7\}$ qui à +$x$ associe son reste modulo $3$. Dessiner le graphe où $V=\{0,\ldots,7\}$ et +$(x,y)\in E$ si et seulement si $y=f(x)$. Mêmes question avec $(x,y)\in E$ +ssi $x^2=y \mod 5$ (c'est-à-dire si $x^2-y$ est un multiple de $5$). Même question avec $(x,y)\in E$ ssi $xy=1 \mod 6$. \end{exo} \begin{exo} -On considère $V=\{maison, voiture, poisson, porte, cartable, grue\}$ et +On considère $V=\{maison, voiture, poisson, porte, cartable, grue\}$ et $(x,y)\in E$ si et seulement $x$ est avant $y$ dans l'ordre du dictionnaire. Dessiner le graphe $(V,E)$. -Même question mais cette fois ci $(x,y)\in E$ si et seulement $x$ et +Même question mais cette fois ci $(x,y)\in E$ si et seulement $x$ et $y$ ont au moins deux lettres en commun. \end{exo} \begin{exo} Soit $G=(V,E)$ un graphe. Comment voit-on sur un dessin de $G$ que la relation $E$ est une application bijective~? que la relation $E$ est transitive~? -réflexive~? +réflexive~? \end{exo} @@ -296,24 +294,24 @@ r Soit $G=(V,E)$ un graphe. Un {\bf chemin} est une suite finie -$(x_1,x_2),(x_2,x_3),\ldots,(x_{n},x_{n+1})$ d'arêtes consécutives. L'entier -$n$ est appelé {\bf taille} ou {\bf longueur} du chemin. Le sommet $x_1$ est l'{\bf origine} +$(x_1,x_2),(x_2,x_3),\ldots,(x_{n},x_{n+1})$ d'arêtes consécutives. L'entier +$n$ est appelé {\bf taille} ou {\bf longueur} du chemin. Le sommet $x_1$ est l'{\bf origine} du chemin et $x_n$ sa {\bf destination}. On dit aussi que ce chemin part de $x_1$ pour arriver en $x_n$. Dans le graphe de la figure~\ref{fig:grapheexo1}, $(0,1),(1,2),(2,6)$ est un chemin partant de $0$, arrivant en $6$ et de longueur $3$. Par convention, -de tout point part un chemin vers lui même de longueur $0$ (qui n'utilise -aucune arête). +de tout point part un chemin vers lui même de longueur $0$ (qui n'utilise +aucune arête). Une {\bf boucle} est un chemin dont le sommet d'origine est aussi le sommet -d'arrivée. Une boucle qui ne passe pas deux fois par le même sommet (sauf à -l'origine et à la destination) est appelé un {\bf circuit}. Dans le graphe +d'arrivée. Une boucle qui ne passe pas deux fois par le même sommet (sauf à +l'origine et à la destination) est appelé un {\bf circuit}. Dans le graphe de la figure~\ref{fig:grapheexo1}, $(5,12),(12,10),(10,5)$ est un circuit. Le chemin $$(0,1),(1,7)(7,13)(13,0),(0,3),(3,7),(7,13),(13,0)$$ est une boucle mais n'est pas un circuit. -Un chemin qui ne passe jamais deux fois par le même sommet est dit {\bf sans +Un chemin qui ne passe jamais deux fois par le même sommet est dit {\bf sans boucle}. @@ -322,20 +320,20 @@ Dans le graphe de la figure~\ref{fig:grapheexo1} donner \begin{enumerate} \item Un circuit de taille $1$, \item Une boucle de longueur $9$ passant par $4$, -\item Un chemin sans boucle de $0$ à $18$, +\item Un chemin sans boucle de $0$ à $18$, \item Un chemin sans boucle de taille au moins $10$. \end{enumerate} \end{exo} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ùù -\section{Graphe et modélisation} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ùù +\section{Graphe et modélisation} -L'objectif de ce chapitre est de voir comment passer d'un problème concret à -un problème de graphe. +L'objectif de ce chapitre est de voir comment passer d'un problème concret à +un problème de graphe. \begin{exo} -On considère le plan ci-dessous d'un musée. La porte d'entrée est en bas à +On considère le plan ci-dessous d'un musée. La porte d'entrée est en bas à gauche. \bigskip @@ -366,24 +364,24 @@ gauche. \end{tikzpicture} \begin{enumerate} -\item Représenter sous forme de graphe ce musée, en mettant un sommet par +\item Représenter sous forme de graphe ce musée, en mettant un sommet par salle. \item On suppose qu'un gardien peut surveiller la salle dans laquelle il se trouve ainsi que les salles voisines. Combien faut-il de gardiens au minimum~? -Formuler ce problème, d'une manière générale, dans le vocabulaire des +Formuler ce problème, d'une manière générale, dans le vocabulaire des graphes. -\item Un groupe de visiteurs souhaite admirer toutes les salles du musée. -Peut-il le faire sans jamais passer deux fois par la même salle (on ne +\item Un groupe de visiteurs souhaite admirer toutes les salles du musée. +Peut-il le faire sans jamais passer deux fois par la même salle (on ne compte pas le chemin de retour; le groupe peut partir de n'importe quelle -salle aussi)~? Proposer une formulation générale de ce -problème en utilisant le vocabulaire des graphes. +salle aussi)~? Proposer une formulation générale de ce +problème en utilisant le vocabulaire des graphes. -\item Le soir, le conservateur souhaite avant de fermer le musée passer dans +\item Le soir, le conservateur souhaite avant de fermer le musée passer dans toutes les salles puis ressortir, tout en minimisant le trajet (il part de - l'entrée et ressort par l'entrée/sortie). Quel - chemin doit-il prendre~? Formuler ce problème de façon général en + l'entrée et ressort par l'entrée/sortie). Quel + chemin doit-il prendre~? Formuler ce problème de façon général en utilisant le vocabulaire des graphes. \end{enumerate} @@ -393,77 +391,77 @@ probl %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{exo} -On considère un ensemble fini $V$ de joueurs de tennis, et le graphe orienté -$(V,E)$ tel que $(x,y)\in E$ si et seulement si $x$ a déjà gagné un match -contre $y$. Donner des formulations dans le vocabulaire de la théorie des -graphes des propriétés suivantes. +On considère un ensemble fini $V$ de joueurs de tennis, et le graphe orienté +$(V,E)$ tel que $(x,y)\in E$ si et seulement si $x$ a déjà gagné un match +contre $y$. Donner des formulations dans le vocabulaire de la théorie des +graphes des propriétés suivantes. \begin{enumerate} \item Il y a un joueur qui n'a jamais perdu. -\item Il y a un joueur qui n'a jamais gagné. -\item Un joueur ne joue jamais contre lui-même. -\item Tous les joueurs ont déjà joué au moins un match conte un autre +\item Il y a un joueur qui n'a jamais gagné. +\item Un joueur ne joue jamais contre lui-même. +\item Tous les joueurs ont déjà joué au moins un match conte un autre joueur. -\item Il y a un joueur qui a déjà joué contre tout le monde. -\item Il y a un joueur qui a déjà gagné contre tout le monde. -\item Il y a un joueur qui a joué contre tout le monde et perdu tous +\item Il y a un joueur qui a déjà joué contre tout le monde. +\item Il y a un joueur qui a déjà gagné contre tout le monde. +\item Il y a un joueur qui a joué contre tout le monde et perdu tous ses matchs. \end{enumerate} \end{exo} \begin{exo} -On considère un graphe représentant la carte d'une ville~: chaque n\oe{}ud est -un croisement, chaque arête un tronçon de rue, codant le sens de -circulation. On considère de plus que les neouds sont coloriés, en rouge +On considère un graphe représentant la carte d'une ville~: chaque n\oe{}ud est +un croisement, chaque arête un tronçon de rue, codant le sens de +circulation. On considère de plus que les neouds sont coloriés, en rouge (s'il y a un feu de signalisation au croisement) ou en bleu (s'il n'y a pas de feu). -Exprimer, dans le vocabulaire de la théorie des graphes les -propriétés suivantes. +Exprimer, dans le vocabulaire de la théorie des graphes les +propriétés suivantes. \begin{enumerate} \item Il n'y a pas de sens unique. \item Il n'y a pas d'impasse. -\item De n'importe où, je peux aller partout. -\item De n'importe où, je peux aller partout en passant par au plus trois +\item De n'importe où, je peux aller partout. +\item De n'importe où, je peux aller partout en passant par au plus trois feux de signalisation. -\item Deux croisements consécutifs ne peuvent avoir tout deux des feux. -\item Il n'y a jamais plus de deux rues qui se croisent à la fois. +\item Deux croisements consécutifs ne peuvent avoir tout deux des feux. +\item Il n'y a jamais plus de deux rues qui se croisent à la fois. \item Il n'y a ni pont, ni tunnel. \end{enumerate} \end{exo} \begin{exo} -On considère le graphe $G$ dont les sommets sont les configurations possible -d'un rubics cube, et il y a une arête entre deux configurations si l'on peut -passer de l'une à l'autre en jouant un coup (c'est-à-dire une rotation d'un -quart de tour d'un coté). Exprimer avec le vocabulaire de la théorie des -graphes les propriétés suivantes (on ne cherche pas à savoir si elles sont +On considère le graphe $G$ dont les sommets sont les configurations possible +d'un rubics cube, et il y a une arête entre deux configurations si l'on peut +passer de l'une à l'autre en jouant un coup (c'est-à-dire une rotation d'un +quart de tour d'un coté). Exprimer avec le vocabulaire de la théorie des +graphes les propriétés suivantes (on ne cherche pas à savoir si elles sont vraies ou fausse)~: \begin{itemize} \item Il y a toujours une solution. \item A partir de certaines configurations, il n'y a pas de solution. -\item De toute position, si je modifie le cube, je peux revenir à cette +\item De toute position, si je modifie le cube, je peux revenir à cette position. -\item Il existe une position dans laquelle je peux résoudre le rubics cube, +\item Il existe une position dans laquelle je peux résoudre le rubics cube, mais pas en moins de 30 coups. -\item Si dans une position je peux résoudre le rubics cube, alors je peux le - résoudre en moins de 30 coups. +\item Si dans une position je peux résoudre le rubics cube, alors je peux le + résoudre en moins de 30 coups. \end{itemize} \end{exo} \begin{exo} -On considère un ensemble de $n$ enfants portant chacun un dossard différent, -numéroté de $1$ à $n$, et jouant à cache-cache. On considère le graphe dont -les sommets sont les entiers de $1$ à $n$ et il y a une arête entre $i$ et +On considère un ensemble de $n$ enfants portant chacun un dossard différent, +numéroté de $1$ à $n$, et jouant à cache-cache. On considère le graphe dont +les sommets sont les entiers de $1$ à $n$ et il y a une arête entre $i$ et $j$ si l'enfant avec le dossard $i$ peut voir l'enfant avec le dossard $j$. -Exprimer dans le vocabulaire de la théorie des graphes les propriétés +Exprimer dans le vocabulaire de la théorie des graphes les propriétés suivantes~: \begin{enumerate} -\item Il y a un enfant bien caché qu'aucun autre ne peut voir. +\item Il y a un enfant bien caché qu'aucun autre ne peut voir. \item Il y a un enfant qui ne voit personne. -\item Un enfant se voit toujours lui-même. +\item Un enfant se voit toujours lui-même. \item Il y a deux enfants qui se voient l'un l'autre. \item Tout enfant voit au moins un autre enfant. \end{enumerate} @@ -471,29 +469,29 @@ suivantes~: \begin{exo} -Un homme se trouve au bord d'une rivière avec un choux, une chèvre et loup. -Il possède une barque et veut traverser la rivière. Cependant, il ne peut -mettre en même temps, en plus de lui, dans la barque qu'un des trois. Et, +Un homme se trouve au bord d'une rivière avec un choux, une chèvre et loup. +Il possède une barque et veut traverser la rivière. Cependant, il ne peut +mettre en même temps, en plus de lui, dans la barque qu'un des trois. Et, malheureusement aussi, il ne peut laisser sur une rive seul le loup avec la -chèvre, ni la chèvre avec le choux. +chèvre, ni la chèvre avec le choux. -Modéliser le problème avec un graphe et proposer une solution. +Modéliser le problème avec un graphe et proposer une solution. \end{exo} \begin{exo} -On considère un site Web statique, installé sur un serveur. On se pose les -questions suivantes, liées à l'ergonomie du site~: +On considère un site Web statique, installé sur un serveur. On se pose les +questions suivantes, liées à l'ergonomie du site~: \begin{enumerate} -\item Puis-je à l'aide de la souris uniquement accéder à toutes les pages du - site à partir de la page d'accueil~? -\item Puis-je toujours en un clic retourner à la page d'accueil~? -\item Puis-je, à partir de n'importe quelle page, accéder à n'importe quelle +\item Puis-je à l'aide de la souris uniquement accéder à toutes les pages du + site à partir de la page d'accueil~? +\item Puis-je toujours en un clic retourner à la page d'accueil~? +\item Puis-je, à partir de n'importe quelle page, accéder à n'importe quelle autre page en moins de 3 clics~? \end{enumerate} -Proposer une modélisation de cette situation par un graphe, puis décrire des -algorithmes pour répondre aux questions posées. +Proposer une modélisation de cette situation par un graphe, puis décrire des +algorithmes pour répondre aux questions posées. \end{exo} @@ -524,20 +522,20 @@ algorithmes pour r \draw (1.5-0.1,3.25) [fill=white]rectangle +(0.2,.5); \draw (1.5-0.1,2.25) [fill=white]rectangle +(0.2,.5); \end{tikzpicture} -\caption{Plan du musée 1}\label{m1} +\caption{Plan du musée 1}\label{m1} \end{figure} \begin{exo} -On considère le musée décrit dans la figure~\ref{m1}. Le directeur +On considère le musée décrit dans la figure~\ref{m1}. Le directeur souhaite, pour une exposition exceptionnelle, placer un gardien dans chaque salle. Il recrute pour cela des gardiens espagnols (qui ne parlent que l'espagnol) et des gardiens italiens (qui ne parlent qu'italien). Afin qu'il -ne discutent pas entre eux, il ne veut pas que deux gardiens de la même -nationalité soient dans des salles voisines. Est-ce possible~? +ne discutent pas entre eux, il ne veut pas que deux gardiens de la même +nationalité soient dans des salles voisines. Est-ce possible~? \bigskip -Même question avec le musée de la figure~\ref{m2}. +Même question avec le musée de la figure~\ref{m2}. \begin{figure}[h] \begin{tikzpicture} @@ -564,33 +562,33 @@ M %\draw (1.5-0.1,3.25) [fill=white]rectangle +(0.2,.5); \draw (1.5-0.1,2.25) [fill=white]rectangle +(0.2,.5); \end{tikzpicture} -\caption{Plan du musée 2}\label{m2} +\caption{Plan du musée 2}\label{m2} \end{figure} \bigskip -Généraliser ce problème sur les graphes. Décrire un algorithme pour le -résoudre~? +Généraliser ce problème sur les graphes. Décrire un algorithme pour le +résoudre~? \end{exo} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Codage des graphes} -On s'intéresse maintenant à coder les graphes (en machine). Il y a deux -méthodes principales (qui admettent des variantes), le codage par liste +On s'intéresse maintenant à coder les graphes (en machine). Il y a deux +méthodes principales (qui admettent des variantes), le codage par liste d'adjacence et le codage par matrice d'adjacence. \subsection{Codage par matrices d'adjacence} -Soit $G=(V,E)$ un graphe. On suppose, sans perte de généralité, que +Soit $G=(V,E)$ un graphe. On suppose, sans perte de généralité, que $V=\{1,\ldots,n\}$. On appelle {\bf matrice d'adjacence} de $V$ le tableau (matrice) de taille $n$ sur $n$ ne contenant que des $0$ ou des $1$ et -défini par~: la case de la $i$-ème ligne et de la $j$-ième colonne contient +défini par~: la case de la $i$-ème ligne et de la $j$-ième colonne contient un $1$ si et seulement si $(i,j)\in E$. -On considère par exemple le graphe -$(\{1,2,3,4\},\{(1,1),(1,2),(3,1),(2,4),(3,4)\})$ dessiné sur la +On considère par exemple le graphe +$(\{1,2,3,4\},\{(1,1),(1,2),(3,1),(2,4),(3,4)\})$ dessiné sur la figure~\ref{fig:g1}. Sa matrice d'adjacence est $$\left( \begin{array}{cccc} @@ -602,7 +600,7 @@ $$\left( \right). $$ -Réciproquement, le graphe dont la matrice d'adjacence est +Réciproquement, le graphe dont la matrice d'adjacence est $\left( \begin{array}{cccc} 0 & 0 & 1 & 0\\ @@ -643,20 +641,20 @@ Dessiner le graphe dont la matrice d'adjacence est $\left( \right)$. \noindent -Quel est la matrice d'adjacence du graphe où $V=\{1,\ldots,7\}$ et +Quel est la matrice d'adjacence du graphe où $V=\{1,\ldots,7\}$ et $$E=\{(1,2),(4,2),(3,5),(7,1),(6,4),(1,5),(5,0) \}~?$$ \end{exo} \begin{exo} Soit $(V,E)$ un graphe. Comment lit-on sur la matrice d'adjacence de ce -graphe que la relation $E$ est réflexive~? symétrique~? antisymétrique~? +graphe que la relation $E$ est réflexive~? symétrique~? antisymétrique~? \end{exo} \begin{exo} -Pour tout graphe orienté $G$, on note $G^R$ le graphe défini par~: les -sommets de $G^R$ sont les mêmes que ceux de $G$ et $(x,y)$ est une arête de - $G^R$ si et seulement si $(y,x) $ est une arête de $G$. Le graphe $G^R$ +Pour tout graphe orienté $G$, on note $G^R$ le graphe défini par~: les +sommets de $G^R$ sont les mêmes que ceux de $G$ et $(x,y)$ est une arête de + $G^R$ si et seulement si $(y,x) $ est une arête de $G$. Le graphe $G^R$ s'appelle {\it miroir} de $G$. \begin{figure}[h] @@ -689,12 +687,12 @@ s'appelle {\it miroir} de $G$. \subsection{Codage par liste d'adjacence} -Le codage d'un graphe par liste d'adjacence consiste à coder, pour chaque +Le codage d'un graphe par liste d'adjacence consiste à coder, pour chaque sommet du graphe, l'ensemble de ses voisins par une liste {\it - triée}\footnote{Attention, le fait qu'elle soit triée n'est pas toujours - imposé dans la littérature, mais c'est le choix que nous prendrons.}. -On considère encore que $V=\{1,\ldots,n\}$. On dispose alors d'un tableau de -taille $n$ dont la première case contient la liste des voisins de $1$, la + triée}\footnote{Attention, le fait qu'elle soit triée n'est pas toujours + imposé dans la littérature, mais c'est le choix que nous prendrons.}. +On considère encore que $V=\{1,\ldots,n\}$. On dispose alors d'un tableau de +taille $n$ dont la première case contient la liste des voisins de $1$, la seconde la liste des voisins de $2$, etc. Par exemple, le graphe de la figure~\ref{fig:g1} se code par le tableau de @@ -743,7 +741,7 @@ liste~: \begin{exo} -Dessiner le graphe dont la représentation par liste d'adjacence est~: +Dessiner le graphe dont la représentation par liste d'adjacence est~: \medskip \begin{center} @@ -820,47 +818,47 @@ Dessiner le graphe dont la repr \end{exo} \begin{exo} -Dessiner la représentation par liste d'adjacence du graphe de la +Dessiner la représentation par liste d'adjacence du graphe de la figure~\ref{fig:grapheexo1}. \end{exo} \begin{exo}\label{titi} -On considère que l'on code en Python un graphe par liste d'adjacence de la -manière suivante~: +On considère que l'on code en Python un graphe par liste d'adjacence de la +manière suivante~: \begin{itemize} \item Un graphe un un couple de la forme $(V,E)$, -\item $V$ est une liste d'éléments tous différents, triés, -\item $E$ est un dictionnaire qui à chaque élément de $V$ associe la liste - triée de ses voisins. +\item $V$ est une liste d'éléments tous différents, triés, +\item $E$ est un dictionnaire qui à chaque élément de $V$ associe la liste + triée de ses voisins. \end{itemize} \begin{enumerate} -\item Dessiner le graphe correspondant à \\ +\item Dessiner le graphe correspondant à \\ {\tt ([1,2,3],\{1:[2],2:[2,3],3:[1,3]\})} -\item Écrire une fonction qui teste si un coupe $(V,E)$ où $V$ est une liste - d'entiers et $E$ un dictionnaire, représente bien un graphe par liste +\item Écrire une fonction qui teste si un coupe $(V,E)$ où $V$ est une liste + d'entiers et $E$ un dictionnaire, représente bien un graphe par liste d'adjacence. -\item Écrire une fonction qui compte le nombre d'arêtes d'un graphe. +\item Écrire une fonction qui compte le nombre d'arêtes d'un graphe. -\item Écrire une fonction qui teste si $(i,j)$ est une arête d'un graphe. +\item Écrire une fonction qui teste si $(i,j)$ est une arête d'un graphe. \item On appelle {\it sommet bloquant} un sommet $i$ tel que pour tout - sommet $j$, $(i,j)$ n'est pas une arête. Écrire une fonction qui teste + sommet $j$, $(i,j)$ n'est pas une arête. Écrire une fonction qui teste si un sommet est bloquant. \item On appelle {\it sommet puits} un sommet $i$ tel que pour tout - sommet $j\neq i$, $(i,j)$ n'est pas une arête et tel que $(i,i)$ soit - une arête. Écrire une fonction qui teste + sommet $j\neq i$, $(i,j)$ n'est pas une arête et tel que $(i,i)$ soit + une arête. Écrire une fonction qui teste si un sommet est un puits. -\item Écrire une fonction qui ajoute une arête $(i,j)$ à un graphe. +\item Écrire une fonction qui ajoute une arête $(i,j)$ à un graphe. -\item Écrire une fonction qui supprime une arête $(i,j)$ à un graphe (on - rappelle que la méthode {\tt remove} de python retire la première - occurrence d'une valeur donnée en paramètre). +\item Écrire une fonction qui supprime une arête $(i,j)$ à un graphe (on + rappelle que la méthode {\tt remove} de python retire la première + occurrence d'une valeur donnée en paramètre). \end{enumerate} @@ -883,40 +881,40 @@ mani L'exercice suivant est une introduction aux parcours de graphes. \begin{exo} -On considère le graphe de la figure~\ref{fig:zomb}. Il y a une flèche entre -$x$ et $y$ si $x$ connaît l'adresse de $y$. On considère aussi que certains -individus dans cette liste peuvent être des zombies. +On considère le graphe de la figure~\ref{fig:zomb}. Il y a une flèche entre +$x$ et $y$ si $x$ connaît l'adresse de $y$. On considère aussi que certains +individus dans cette liste peuvent être des zombies. \begin{enumerate} -\item On considère que chaque nuit, un zombie va mordre et donc transformer - en zombie des individus dont il connaît l'adresse et qui ne sont pas encore +\item On considère que chaque nuit, un zombie va mordre et donc transformer + en zombie des individus dont il connaît l'adresse et qui ne sont pas encore zombies. Si c'est possible, chaque zombie transforme au moins - un zombie par nuit. En supposant qu'au départ seule Karina est un zombie, - donner quelques possibilités indiquant, in fine, qui zombifie qui? - Dessiner les solutions à l'aide d'un graphe où $(x,y)$ est une arête si - $x$ a zombifié $y$. + un zombie par nuit. En supposant qu'au départ seule Karina est un zombie, + donner quelques possibilités indiquant, in fine, qui zombifie qui? + Dessiner les solutions à l'aide d'un graphe où $(x,y)$ est une arête si + $x$ a zombifié $y$. -\item On considère maintenant que chaque nuit, chaque zombie va transformer - tous les individus dont il connaît l'adresse et qui ne sont pas encore - zombies. En supposant qu'au départ seule Karina est un zombie, - donner quelques possibilités indiquant, in fine, qui zombifie qui? +\item On considère maintenant que chaque nuit, chaque zombie va transformer + tous les individus dont il connaît l'adresse et qui ne sont pas encore + zombies. En supposant qu'au départ seule Karina est un zombie, + donner quelques possibilités indiquant, in fine, qui zombifie qui? \item On suppose maintenant que chaque zombie doit non seulement transformer - tous les individus dont il connaît l'adresse et qui ne sont pas encore - zombies, mais aussi dans l'ordre croissant de leur numéros. Par exemple, + tous les individus dont il connaît l'adresse et qui ne sont pas encore + zombies, mais aussi dans l'ordre croissant de leur numéros. Par exemple, Karina transformera dans l'ordre Raph, Mike puis David. On suppose de plus - que chaque nuit les zombies vont mordre à tour de rôle, en commençant par - celui qui à été transformé en zombies le plus anciennement. En supposant - qu'au départ seule Karina est un zombie. Écrire qui zombifie qui, et dans + que chaque nuit les zombies vont mordre à tour de rôle, en commençant par + celui qui à été transformé en zombies le plus anciennement. En supposant + qu'au départ seule Karina est un zombie. Écrire qui zombifie qui, et dans quel ordre. \item On suppose maintenant que chaque nuit, un zombie dont aucun voisin (au sens des graphes) - n'est zombie va mordre le premier (par ordre de numéro) des individus non - zombies qu'il connaît qui n'est pas encore zombie. Un zombie qui a au moins + n'est zombie va mordre le premier (par ordre de numéro) des individus non + zombies qu'il connaît qui n'est pas encore zombie. Un zombie qui a au moins un voisin zombie ne fait rien la nuit, il attend. Un zombie dont tous les - voisins sont devenus eux aussi des zombies se transforme en poussière. + voisins sont devenus eux aussi des zombies se transforme en poussière. En supposant - qu'au départ seule Karina est un zombie, Écrire qui a zombifié qui, et dans + qu'au départ seule Karina est un zombie, Écrire qui a zombifié qui, et dans quel ordre. @@ -961,8 +959,8 @@ individus dans cette liste peuvent \end{exo} -Les graphes obtenus dans les questions de l'exercice précédent s'appellent -des {\it arbres couvrants}. La façon de procéder de la question~3 s'appelle +Les graphes obtenus dans les questions de l'exercice précédent s'appellent +des {\it arbres couvrants}. La façon de procéder de la question~3 s'appelle {\it parcours en largeur} et celle de la question~4 s'appelle {\it parcours en profondeur}. @@ -979,39 +977,39 @@ Un {\bf arbre} est un graphe $G=(V,E)$ tel que~: \item[(2)] Si $(x,y)$ et $(z,y)$ sont dans $E$, alors $x=z$. -\item[(3)] Il existe un sommet $x_0$, appelé {\bf racine}, tel que pour - tout sommet $y$, il existe une chemin de $x_0$ à $y$. +\item[(3)] Il existe un sommet $x_0$, appelé {\bf racine}, tel que pour + tout sommet $y$, il existe une chemin de $x_0$ à $y$. \end{enumerate} -Un exemple d'arbre dont la racine est $1$ est dessiné sur la +Un exemple d'arbre dont la racine est $1$ est dessiné sur la figure~\ref{fig:arbre}. \begin{exo} -Dessiner trois arbres différents à 6 sommets. +Dessiner trois arbres différents à 6 sommets. \end{exo} \begin{exo} -Dessiner un graphe qui vérifie $(1)$ et $(2)$ de la définition mais qui -n'est pas un arbre. Même question avec $(2)$ et $(3)$. Même question avec +Dessiner un graphe qui vérifie $(1)$ et $(2)$ de la définition mais qui +n'est pas un arbre. Même question avec $(2)$ et $(3)$. Même question avec $(3)$ et $(1)$. \end{exo} \medskip -Dans un arbre, on utilise à la fois une terminologie de type -\og {\it végétal}\fg{} et +Dans un arbre, on utilise à la fois une terminologie de type +\og {\it végétal}\fg{} et aussi -de type \og {\it arbre généalogique}\fg{}. +de type \og {\it arbre généalogique}\fg{}. On appelle {\bf feuille} tout sommet d'un arbre qui n'a pas de voisin. Tout -chemin de la racine à une feuille est appelée {\bf branche}. Les voisins -d'un noeud sont appelés ses {\bf fils}. +chemin de la racine à une feuille est appelée {\bf branche}. Les voisins +d'un noeud sont appelés ses {\bf fils}. Tous les sommets atteignables depuis un sommet $x$ sont dits les {\bf - descendants} de $x$ et ils constituent le {\bf sous-arbre} enraciné en $x$. -Si $y$ est atteignable depuis $x$, alors $x$ est un {\bf ancêtre} de $y$. -Si $y$ est un voisin de $x$, alors $x$ est le {\bf père} de $y$. Deux sommets -qui ont le même père sont {\bf frères}. + descendants} de $x$ et ils constituent le {\bf sous-arbre} enraciné en $x$. +Si $y$ est atteignable depuis $x$, alors $x$ est un {\bf ancêtre} de $y$. +Si $y$ est un voisin de $x$, alors $x$ est le {\bf père} de $y$. Deux sommets +qui ont le même père sont {\bf frères}. Par exemple, dans le dessin de la figure~\ref{fig:arbre}, -$6$ est le père de $7$, $3$ est un frère de $2$ et $5$ est une descendant de +$6$ est le père de $7$, $3$ est un frère de $2$ et $5$ est une descendant de $1$. \begin{figure} @@ -1046,19 +1044,19 @@ $1$. \begin{exo} Dans le graphe de la figure~\ref{fig:arbre}, quels sont les descendants de -$3$? Les fils de $1$? Les ancêtres de $6$? les feuilles? +$3$? Les fils de $1$? Les ancêtres de $6$? les feuilles? \end{exo} \begin{exo} -On considère dans cet exercice des arbres codés par liste d'adjacence comme +On considère dans cet exercice des arbres codés par liste d'adjacence comme dans l'exercice en Python de la page~\pageref{titi}. On suppose que la racine est le premier sommet de la liste $V$. \begin{enumerate} -\item Écrire une fonction qui compte le nombre de feuille d'un arbre. -\item Écrire une fonction qui compte le nombre de descendants d'un sommet - donné. +\item Écrire une fonction qui compte le nombre de feuille d'un arbre. +\item Écrire une fonction qui compte le nombre de descendants d'un sommet + donné. \end{enumerate} \end{exo} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1067,11 +1065,11 @@ racine est le premier sommet de la liste $V$. Parcourir un arbre, c'est appliquer un algorithme qui va visiter, une et une seule fois chaque sommet de l'arbre. Les deux parcours les plus connus, sont -les parcours préfixes et suffixes. A chaque visite de noeud, une fonction -{\tt Traiter} est appliquée, selon ce que l'on souhaite faire. +les parcours préfixes et suffixes. A chaque visite de noeud, une fonction +{\tt Traiter} est appliquée, selon ce que l'on souhaite faire. -Le parcours Préfixe est l'algorithme récursif suivant. Initialement, le -parcours est lancé à la racine. +Le parcours Préfixe est l'algorithme récursif suivant. Initialement, le +parcours est lancé à la racine. \begin{verbatim} Parcours-Prefixe(V,E,x): @@ -1098,7 +1096,7 @@ $2$ $4$ $5$ \noindent -De même {\tt Parcours-Prefixe(3)} retourne +De même {\tt Parcours-Prefixe(3)} retourne $3$ $6$ $7$ $8$ $9$ @@ -1109,7 +1107,7 @@ $1$ $2$ $4$ $5$ $3$ $6$ $7$ $8$ $9$ \begin{exo} -Que retourne l'algorithme de parcours préfixe sur l'arbre de la figure~\ref{fig:arbre2}. +Que retourne l'algorithme de parcours préfixe sur l'arbre de la figure~\ref{fig:arbre2}. \begin{figure} @@ -1144,8 +1142,8 @@ Que retourne l'algorithme de parcours pr \end{exo} \medskip -La parcours suffixe est identique à la différence près que le traitement se -fait après l'appel récursif. +La parcours suffixe est identique à la différence près que le traitement se +fait après l'appel récursif. \begin{verbatim} Parcours-Suffixe(V,E,x): @@ -1160,28 +1158,28 @@ Que donne le parcours suffixe sur les arbres des figures~\ref{fig:arbre} et~\ref \end{exo} \begin{exo} -Avec le même codage que précédemment, écrire en Python des fonctions de -parcours préfixe et suffixe. +Avec le même codage que précédemment, écrire en Python des fonctions de +parcours préfixe et suffixe. \end{exo} %%%%%%%%%%%%%%%%%%%%% \subsection{Arbres couvrants} -Attention, ici, on parle d'arbres couvrants de graphes orientés. +Attention, ici, on parle d'arbres couvrants de graphes orientés. -Soit $G=(V,E)$. Un arbre couvrant pour $G$, enraciné en $x\in V$, est un +Soit $G=(V,E)$. Un arbre couvrant pour $G$, enraciné en $x\in V$, est un arbre $(V^\prime,E^\prime)$ tel que \begin{enumerate} \item[(1)] $V^\prime\subseteq V$ et $E^\prime\subseteq E$. \item[(2)] $x$ est la racine de $(V^\prime,E^\prime)$. -\item[(3)] On ne peut pas rajouter à l'arbre un sommet ou une arête de sorte +\item[(3)] On ne peut pas rajouter à l'arbre un sommet ou une arête de sorte que les conditions - $(1)$ et $(2)$ soient toujours vérifiées: l'arbre est maximal. + $(1)$ et $(2)$ soient toujours vérifiées: l'arbre est maximal. \end{enumerate} Intuitivement un arbre couvrant est un arbre que l'on peut calquer sur un graphe -- conditions (1) et (2) -- sans pouvoir le prolonger. -Considérons par exemple le graphe de la figure~\ref{fig:graphcouvrant}. +Considérons par exemple le graphe de la figure~\ref{fig:graphcouvrant}. \begin{figure}[h] \begin{center} @@ -1237,7 +1235,7 @@ Consid \end{figure} Dans ce graphe, l'arbre de gauche de la figure~\ref{fig:graphcouvrant2} -vérifie bien $(1)$ et $(2)$ mais +vérifie bien $(1)$ et $(2)$ mais pas $(3)$. En revanche celui de droite est bien un arbre couvrant. @@ -1298,41 +1296,41 @@ pas $(3)$. En revanche celui de droite est bien un arbre couvrant. \end{figure} \begin{exo} -Écrire une fonction qui étant donné un graphe et un arbre codé en Python -comme précédemment, teste si l'arbre est un arbre couvrant du graphe (on ne +Écrire une fonction qui étant donné un graphe et un arbre codé en Python +comme précédemment, teste si l'arbre est un arbre couvrant du graphe (on ne testera pas si c'est bien un arbre). \end{exo} L'objectif des algorithmes de parcours de graphes est de construire des arbres couvrants de graphes afin, ensuite, d'appliquer des parcours (type -préfixe/suffixe) sur les arbres obtenus. Il existe deux constructions -d'arbres couvrant très utilisées, appelées {\it parcours en largeur} et {\it +préfixe/suffixe) sur les arbres obtenus. Il existe deux constructions +d'arbres couvrant très utilisées, appelées {\it parcours en largeur} et {\it parcours en profondeur}. %%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Parcours en largeur} -On ne donne pas explicitement l'algorithme de parcours en largeur à partir +On ne donne pas explicitement l'algorithme de parcours en largeur à partir de $x$ qui -demanderait l'introduction des structures de données. On se contente d'un -pseudo-algorithme expliquant la méthode~: +demanderait l'introduction des structures de données. On se contente d'un +pseudo-algorithme expliquant la méthode~: \begin{enumerate} \item $x$ est la racine de l'arbre. -\item On insère dans l'arbre tous les voisins de $x$ (sauf éventuellement +\item On insère dans l'arbre tous les voisins de $x$ (sauf éventuellement $x$), dans l'ordre. -\item On insère (dans l'ordre) dans l'arbre tous les voisins de la feuille +\item On insère (dans l'ordre) dans l'arbre tous les voisins de la feuille la plus anciennement introduite dans l'arbre et pour laquelle c'est possible. -\item On recommence l'étape précédente tant que c'est possible. +\item On recommence l'étape précédente tant que c'est possible. \end{enumerate} -Si l'on exécute le parcours sur le graphe de la -figure~\ref{fig:graphcouvrant}, en partant du sommet $3$. Après les étapes +Si l'on exécute le parcours sur le graphe de la +figure~\ref{fig:graphcouvrant}, en partant du sommet $3$. Après les étapes $1$ et $2$ on a l'arbre $A_1$ de la figure~\ref{fig:parcourslargeur}. La feuille introduite le plus anciennement -(attention à l'ordre qui est l'ordre des numéro des sommets) est $2$. On -ajoute donc $1$ et $6$ -- et pas $7$ qui y est déjà. On obtient alors +(attention à l'ordre qui est l'ordre des numéro des sommets) est $2$. On +ajoute donc $1$ et $6$ -- et pas $7$ qui y est déjà. On obtient alors l'arbre $A_2$ de la figure~\ref{fig:parcourslargeur}. \begin{figure}[h] @@ -1389,11 +1387,11 @@ l'arbre $A_2$ de la figure~\ref{fig:parcourslargeur}. Ensuite, la feuille la plus anciennement introduite est $4$. Son seul voisin est $9$ qui n'est pas encore dans l'arbre. On obtient donc l'arbre $A_3$ de la figure~\ref{fig:parcourslargeurA3}. -Ensuite il s'agit du sommet $5$ dont l'unique fils $3$ est déjà dans -l'arbre. La construction n'évolue donc pas pour $5$. Ensuite, on a fini les -fils de $3$, on passe donc aux fils du premier fils de $3$, à savoir $2$. -Les fils de $1$ sont $2$, $6$ et $7$, qui sont déjà dans l'arbre. En -continuant ainsi, on voit qu'il n'y a plus rien à ajouter. On obtient donc +Ensuite il s'agit du sommet $5$ dont l'unique fils $3$ est déjà dans +l'arbre. La construction n'évolue donc pas pour $5$. Ensuite, on a fini les +fils de $3$, on passe donc aux fils du premier fils de $3$, à savoir $2$. +Les fils de $1$ sont $2$, $6$ et $7$, qui sont déjà dans l'arbre. En +continuant ainsi, on voit qu'il n'y a plus rien à ajouter. On obtient donc l'arbre de la figure~\ref{fig:parcourslargeurA3} \begin{figure}[ht] @@ -1435,8 +1433,8 @@ l'arbre de la figure~\ref{fig:parcourslargeurA3} \begin{exo} \begin{enumerate} \item Sur le graphe de la figure ci-dessous, dessiner les arbres -obtenus par un parcours en largeur à partir de $2$. Même question en partant -de $6$. Même question en partant de $9$. +obtenus par un parcours en largeur à partir de $2$. Même question en partant +de $6$. Même question en partant de $9$. \begin{center} \begin{tikzpicture}[scale = 0.8] @@ -1490,7 +1488,7 @@ de $6$. M \end{center} -\item Même question à partir de $3$, puis de $0$, puis de $8$ sur le graphe de +\item Même question à partir de $3$, puis de $0$, puis de $8$ sur le graphe de la figure~\ref{fig:exo}. \begin{figure}[h] @@ -1584,29 +1582,29 @@ la figure~\ref{fig:exo}. \begin{exo} -Écrire en Python l'algorithme de parcours en largeur pour un graphe codé par +Écrire en Python l'algorithme de parcours en largeur pour un graphe codé par liste d'adjacence. \end{exo} \begin{exo} -Écrire en Python une fonction qui teste si un graphe donné par liste +Écrire en Python une fonction qui teste si un graphe donné par liste d'adjacence est un arbre dont la racine est le plus petit sommet. \end{exo} \begin{exo} Les {\em composantes fortement connexes} d'un graphe sont des sous-ensembles de -sommets telles que~: (1) tout sommet appartient à une composante fortement +sommets telles que~: (1) tout sommet appartient à une composante fortement connexe, (2) s'il existe un chemin de $p$ vers $q$ et un chemin de $q$ vers -$p$, alors $p$ et $q$ doivent appartenir à la même composante fortement -connexe~; et réciproquement. +$p$, alors $p$ et $q$ doivent appartenir à la même composante fortement +connexe~; et réciproquement. \begin{enumerate} -\item Deux composantes fortement connexes sont-elles forcément +\item Deux composantes fortement connexes sont-elles forcément disjointes? Pourquoi? \item Quels sont les composantes fortement connexes du graphe de la figure~\ref{fig:exo}. -\item Décrire une méthode algorithmique pour trouver les composantes +\item Décrire une méthode algorithmique pour trouver les composantes fortement connexe d'un graphe. \end{enumerate} \end{exo} @@ -1614,7 +1612,7 @@ connexe~; et r % \begin{exo} % Comment utiliser un parcours en largeur pour trouver un chemin de taille la -% plus courte possible entre deux sommets donnés? +% plus courte possible entre deux sommets donnés? % \end{exo} %%%%%%%%%%%%%%% @@ -1647,23 +1645,23 @@ connexe~; et r \end{figure} -On ne donne pas explicitement l'algorithme de parcours en profondeur à partir +On ne donne pas explicitement l'algorithme de parcours en profondeur à partir de $x$ qui -demanderait l'introduction des structures de données. On se contente d'un -pseudo-algorithme expliquant la méthode~: +demanderait l'introduction des structures de données. On se contente d'un +pseudo-algorithme expliquant la méthode~: \begin{enumerate} \item $x$ est la racine de l'arbre. -\item On insère dans l'arbre le premier voisin de $x$ (sauf éventuellement +\item On insère dans l'arbre le premier voisin de $x$ (sauf éventuellement $x$). -\item On insère dans l'arbre le premier voisins du sommet - le plus récemment introduit dans l'arbre et pour lequel c'est possible. -\item On recommence l'étape précédente tant que c'est possible. +\item On insère dans l'arbre le premier voisins du sommet + le plus récemment introduit dans l'arbre et pour lequel c'est possible. +\item On recommence l'étape précédente tant que c'est possible. \end{enumerate} -On va appliquer la méthode sur l'arbre de la figure~\ref{fig:graphcouvrant}, -en partant du sommet $3$. L'arbre commence par $3$ à la racine. Puis on -introduit le plus petit fils de $3$, c'est-à-dire $2$. La feuille la plus -récente de l'arbre est $2$, donc on introduit le plus petit fils de $2$, à +On va appliquer la méthode sur l'arbre de la figure~\ref{fig:graphcouvrant}, +en partant du sommet $3$. L'arbre commence par $3$ à la racine. Puis on +introduit le plus petit fils de $3$, c'est-à-dire $2$. La feuille la plus +récente de l'arbre est $2$, donc on introduit le plus petit fils de $2$, à savoir $1$. A nouveau, on va introduire $6$, puis $9$. On obtient alors l'arbre de la figure~\ref{fig:prof1}. @@ -1671,7 +1669,7 @@ l'arbre de la figure~\ref{fig:prof1}. \pagebreak[3] \begin{exo} -Donner les parcours en profondeur obtenus à partir de $0$, puis $8$, puis $7$ +Donner les parcours en profondeur obtenus à partir de $0$, puis $8$, puis $7$ sur le graphe de la figure~\ref{fig:exo}. @@ -1762,12 +1760,12 @@ sur le graphe de la figure~\ref{fig:exo}. \begin{exo} -Écrire en Python l'algorithme de parcours en profondeur pour un graphe codé par +Écrire en Python l'algorithme de parcours en profondeur pour un graphe codé par liste d'adjacence. \end{exo} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ù -%\input{automates} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ù +\input{automates} \end{document} diff --git a/main13.aux b/main13.aux index 9eb2c17..83da33a 100644 --- a/main13.aux +++ b/main13.aux @@ -171,7 +171,7 @@ \@writefile{toc}{\contentsline {chapter}{\numberline {3}Introduction \IeC {\`a} la th\IeC {\'e}orie des ensembles}{20}{chapter.3}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {I}Rappels de th\IeC {\'e}orie des ensembles}{20}{section.3.1}} +\@writefile{toc}{\contentsline {section}{\numberline {I}Des D\IeC {\'e}finitions}{20}{section.3.1}} \@writefile{toc}{\contentsline {subsection}{\numberline {I.1}Notion premi\IeC {\`e}re d'ensemble}{20}{subsection.3.1.1}} \@writefile{thm}{\contentsline {Notation}{{Notation}{3.{1}}{}}{20}{Notation.3.1}} \@writefile{thm}{\contentsline {Exo}{{Exercice}{3.{1}}{}}{20}{Exo.3.1}} @@ -344,8 +344,8 @@ \@writefile{thm}{\contentsline {Exo}{{Exercice}{5.{30}}{}}{35}{Exo.5.30}} \@writefile{toc}{\contentsline {part}{IV\hspace {1em}Annexes}{36}{part.4}} \@input{PPN.aux} +\@writefile{toc}{\contentsline {chapter}{Index}{38}{chapter.6}} \bibstyle{alpha} \bibdata{biblio} \bibcite{Dowek07}{Dow07} -\@writefile{toc}{\contentsline {chapter}{Index}{38}{chapter.6}} \@input{Bibliographie.aux} diff --git a/main13.blg b/main13.blg index d1b653f..8bab2e0 100644 --- a/main13.blg +++ b/main13.blg @@ -1,4 +1,4 @@ -This is BibTeX, Version 0.99d (TeX Live 2012/Debian) +This is BibTeX, Version 0.99d (TeX Live 2013/Debian) Capacity: max_strings=35307, hash_size=35307, hash_prime=30011 The top-level auxiliary file: main13.aux A level-1 auxiliary file: Remerciements.aux diff --git a/main13.log b/main13.log index da137fa..fd7c6ad 100644 --- a/main13.log +++ b/main13.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) (format=pdflatex 2013.11.13) 12 FEB 2014 09:14 +This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) (format=pdflatex 2013.11.13) 21 MAR 2014 10:57 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -1232,20 +1232,8 @@ m/it/10.95 H$ \T1/ptm/m/n/10.95 est une cons Chapitre 3. (./ensembles/IntroAuxEnsembles13.tex [20 -] [21] -Overfull \hbox (37.774pt too wide) in paragraph at lines 186--187 -[]\T1/ptm/m/it/10.95 Faire la réunion des en-sembles $\OML/lmm/m/it/10.95 A$ \T -1/ptm/m/it/10.95 et $\OML/lmm/m/it/10.95 B$\T1/ptm/m/it/10.95 , quand $\OML/lmm -/m/it/10.95 A \OT1/lmr/m/n/10.95 = \OMS/lmsy/m/n/10.95 f\OML/lmm/m/it/10.95 x \ -OMS/lmsy/m/n/10.95 2 \U/msb/m/n/10.95 N\OMS/lmsy/m/n/10.95 j\OML/lmm/m/it/10.95 - x[]\OMS/lmsy/m/n/10.95 g$\T1/ptm/m/it/10.95 , et $\OML/lmm/m/it/10.95 B \OT1/l -mr/m/n/10.95 = \OMS/lmsy/m/n/10.95 f\OML/lmm/m/it/10.95 x \OMS/lmsy/m/n/10.95 2 - \U/msb/m/n/10.95 N\OMS/lmsy/m/n/10.95 j\OML/lmm/m/it/10.95 x[]\OMS/lmsy/m/n/10 -.95 g$\T1/ptm/m/it/10.95 . - [] - -[22] -Overfull \hbox (2.81169pt too wide) in paragraph at lines 301--302 +] [21] [22] +Overfull \hbox (2.81169pt too wide) in paragraph at lines 304--305 []\T1/ptm/m/it/10.95 On ap-pelle fonc-tion ca-rac-té-ris-tique de la par- [] @@ -1339,9 +1327,10 @@ Chapitre 6. ) [37 -] -No file main13.ind. -(./main13.bbl) [38 +] (./main13.ind [38 + + +]) (./main13.bbl) [39 ] @@ -1350,7 +1339,7 @@ No file main13.ind. (./Bibliographie.tex LaTeX Font Info: Font shape `T1/ptm/bx/it' in size <10.95> not available (Font) Font shape `T1/ptm/b/it' tried instead on input line 5. -) [39 +) [40 ] @@ -1359,17 +1348,17 @@ LaTeX Font Info: Font shape `T1/ptm/bx/it' in size <10.95> not available Package atveryend Info: Empty hook `BeforeClearDocument' on input line 336. Package atveryend Info: Empty hook `AfterLastShipout' on input line 336. - (./main13.aux -(./Remerciements.aux) (./PPN.aux) (./Bibliographie.aux)) + +(./main13.aux (./Remerciements.aux) (./PPN.aux) (./Bibliographie.aux)) Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 336. Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 336. Package rerunfilecheck Info: File `main13.out' has not changed. -(rerunfilecheck) Checksum: 549A97A69E00F57B1ED5A217AD3094DF;3888. +(rerunfilecheck) Checksum: 641176623C294C8C81EC22757596E698;3871. Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 336. ) Here is how much of TeX's memory you used: - 12343 strings out of 495002 - 166720 string characters out of 6180261 + 12346 strings out of 495002 + 166749 string characters out of 6180261 281698 words of memory out of 5000000 14728 multiletter control sequences out of 15000+600000 109807 words of font info for 113 fonts, out of 8000000 for 9000 @@ -1394,10 +1383,10 @@ mb8a.pfb> -Output written on main13.pdf (40 pages, 358833 bytes). +Output written on main13.pdf (41 pages, 361094 bytes). PDF statistics: - 1076 PDF objects out of 1200 (max. 8388607) - 1003 compressed objects within 11 object streams - 523 named destinations out of 1000 (max. 500000) + 1132 PDF objects out of 1200 (max. 8388607) + 1058 compressed objects within 11 object streams + 524 named destinations out of 1000 (max. 500000) 417 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/main13.out b/main13.out index 9e54e84..2b10539 100644 --- a/main13.out +++ b/main13.out @@ -19,7 +19,7 @@ \BOOKMARK [2][]{subsection.2.3.5}{Simplification du calcul des fonctions de v\351rit\351}{section.2.3}% 19 \BOOKMARK [-1][]{part.2}{II Th\351orie des ensembles}{}% 20 \BOOKMARK [0][]{chapter.3}{Introduction \340 la th\351orie des ensembles}{part.2}% 21 -\BOOKMARK [1][]{section.3.1}{Rappels de th\351orie des ensembles}{chapter.3}% 22 +\BOOKMARK [1][]{section.3.1}{Des D\351finitions}{chapter.3}% 22 \BOOKMARK [2][]{subsection.3.1.1}{Notion premi\350re d'ensemble}{section.3.1}% 23 \BOOKMARK [2][]{subsection.3.1.2}{R\350gles de fonctionnement}{section.3.1}% 24 \BOOKMARK [2][]{subsection.3.1.3}{Sous-ensembles, ensemble des parties}{section.3.1}% 25 diff --git a/main13.pdf b/main13.pdf index 40466c7690d2b733595376e3710de88bc48a686d..2c1e0c4713e2dac0a6778dedd456af40cba2644f 100644 GIT binary patch delta 36540 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 a^>eGbR(k9mc3EC+=D{70q9V%NnCEW-`Rv62 delta 34304 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