commit d429be2b5409fa1050cfca7a5087237cd886ece6 Author: augustin64 Date: Fri Sep 13 09:02:48 2024 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3eec47d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.aux +*.log +*.pdf diff --git a/DM1.tex b/DM1.tex new file mode 100644 index 0000000..ac1c105 --- /dev/null +++ b/DM1.tex @@ -0,0 +1,241 @@ +\documentclass{exam} +\usepackage[utf8]{inputenc} +\usepackage[french]{babel} +\usepackage[]{amsthm} %lets us use \begin{proof} +\usepackage{amsmath,amsfonts} +\usepackage[]{amssymb} %gives us the character \varnothing +\usepackage{graphicx} +\usepackage[langfont=caps]{complexity} +\usepackage[T1]{fontenc} +\usepackage{setspace} +\usepackage{stmaryrd} % For llbracket && rrbracket + + +\setstretch{1.5} + +\title{Algo1 - Devoir Maison} +\author{Augustin LUCAS} +\date\today +%This information doesn't actually show up on your document unless you use the maketitle command below + +\begin{document} +\maketitle %This command prints the title based on information entered above + +%Section and subsection automatically number unless you put the asterisk next to them. +\section*{Exercice 1} +\begin{questions} + \question On considère l'algorithme glouton suivant: + \begin{verbatim} + Glouton(G=(V, E)): + V' = V + IS = {} + Tant que V' n'est pas vide + Soit v dans V' + IS = IS u {v} + V' = V'\{v et tous ses voisins} + Renvoyer IS + \end{verbatim} + + Alors, à chaque élément ajouté, on enlève au plus $d$ éléments. + Donc $IS \geq \frac{\lvert V \rvert}{d+1}$ où $d$ est le degré maximum dans le graphe $G$. + + Alors, $IS \geq \frac{\lvert V \rvert}{d+1} \geq \frac{OPT}{d+1}$, donc est une $d+1$ approximation pour MIS. + + \question On considère l'algorithme glouton suivant: + \begin{verbatim} + Glouton(G=(V, E)): + V' = V + IS = {} + Tant que V' n'est pas vide + Soit v l'élément de plus petit degré de V' + IS = IS u {v} + V' = V'\{v et tous ses voisins} + Renvoyer IS + \end{verbatim} + + Alors, à chaque élément ajouté, on enlève au plus $d$ éléments car $G$ est $d$-dégénéré, et le sommet + considéré est de degré minimal. + Donc $IS \geq \frac{\lvert V \rvert}{d+1}$ où $d$ est le degré maximum dans le graphe $G$. + + Alors, $IS \geq \frac{\lvert V \rvert}{d+1} \geq \frac{OPT}{d+1}$, donc est une $d+1$ approximation pour MIS. + + \question On raisonne par induction sur $n$, le nombre de sommets du graphe. + Pour tout $n \in \mathbb{N}^*$, on pose $H_n$: "Tout graphe $G=(V, E)$ tel que $\vert V \rvert = n$ est $\Delta(G)+1$-colorable". + + \paragraph{} + Initialisation $(n=1)$: + \\Soit $G$ le graphe à $1$ sommet. Alors, $\Delta(G) = 0$, et on vérifie bien que $G$ est $1$-colorable. + On a donc $H_1$ vérifiée. + + \paragraph{} + Hérédité: Supposons qu'il existe $n \in \mathbb{N}^*$ tel que $H_n$ soit vérifié. Montrons $H_{n+1}$. + \\Soit $G=(V, E)$ un graphe à $n+1$ sommets. Soit $v \in V$, de degré quelconque. + \\Par hypothèse d'induction, $G' = (V\backslash\{v\}, E\backslash\{vx, x \in V\})$ admet + une $\Delta(G')+1$-coloration, on la note $c$, $c \subset V \times \llbracket 0; \Delta(G') \rrbracket$. + Comme $\Delta(G') \leq \Delta(G)$, c'est (dans le pire cas) une $\Delta(G)+1$-coloration pour $G'$. + \\On considère à nouveau $v$, comme il a au plus $\Delta(G)$ voisins, on peut choisir $n \in \llbracket 0; \Delta(G) \rrbracket$ + tel que $c \cup \{(v, n)\}$ soit une $\Delta(G)+1$-coloration valide pour $G$. + + Alors, par principe d'induction, tout graphe $G$ est $\Delta(G)+1$-colorable. + + \question On raisonne par induction sur $n$, le nombre de sommets du graphe. + Pour tout $n \in \mathbb{N}^*$, on pose $H_n$: "Tout graphe $G=(V, E)$ $d$-dégénéré tel que $\vert V \rvert = n$ est $d+1$-colorable". + + \paragraph{} + Initialisation $(n=1)$: + \\Soit $G$ le graphe à $1$ sommet. Alors, il est $0$-dégénéré et $1$-colorable. + On a donc $H_1$ vérifiée. + + \paragraph{} + Hérédité: Supposons qu'il existe $n \in \mathbb{N}^*$ tel que $H_n$ soit vérifié. Montrons $H_{n+1}$. + \\Soit $G=(V, E)$ un graphe $d$-dégénéré pour un certain $d \in \mathbb{N}$, tel que $\lvert V \rvert = n+1$. + Soit $v \in V$, de degré $d$. Un tel $v$ existe car $G$ est $d$-dégénéré. + \\On pose $G' = (V\backslash\{v\}, E\backslash\{vx, x \in V\})$. $G'$ est $d$-dégénéré car est un sous graphe de $G$. Il admet donc + une $d+1$-coloration par hypothèse d'induction, on la note $c$, $c \subset V \times \llbracket 0; d \rrbracket$. + \\On considère à nouveau $v$. Comme il a exactement $d$ voisins, on peut choisir $n \in \llbracket 0; d \rrbracket$ + tel que $c \cup \{(v, n)\}$ soit une $d+1$-coloration valide pour $G$. + + Alors, par principe d'induction, tout graphe $G$ $d$-dégénéré est $d+1$-colorable. +\end{questions} + + +\section*{Exercice 2} +\begin{questions} + \question La méthode naïve consiste à demander $M(\{s\})$ pour tout $s \in V$ + jusqu'à trouver $s$ tel que $M(\{s\})$ renvoie "oui". + \question (Pour un arbre binaire) On procède par diviser pour régner: pour traiter un noeud $a = N(r, g, d)$, + On demande à l'oracle $M(\{r\})$, puis $M(\{g\})$, et en fonction du résultat, + on effectue un appel récursif sur $g$, sur $d$, ou bien on renvoie $r$. + + En pseudocode, cela donne: + \begin{verbatim} + TrouverJeton: + Entrée: a = N(r, g, d) + Si M({r}) == "oui": + Renvoyer r + Si M(g) == "oui": + Renvoyer TrouverJeton(g) + Renvoyer TrouverJeton(d) + \end{verbatim} + À chaque appel de l'oracle, les ensembles interrogés induisent bien un sous-graphe de $T$. + De plus, dans le pire cas, on aura fait $2 \log_2(\lvert V \rvert)$ appels à l'oracle, donc + bien $\Theta(\log_2(\lvert V \rvert))$. +\end{questions} + +\section*{Exercice 3} +\begin{questions} + \question On reprend les notations de l'énoncé, c'est à dire que l'on considère le triangle $T = u_0 u_1 u_2$, + et que l'on rajoute deux sommets $v_1, v_2$ de sorte à + remplacer l'arête $(u_0, u_1)$ par ($u_0, v_1), (v_1, v_2), (v_2, u_1)$ + \begin{parts} + \part En remplaçant l'arête $(u_0, u_1)$, on a supprimé autant de + triangles dans $G$ qu'il y a de voisins communs à $u_0$ et $u_1$. + De plus, aucun nouveau triangle n'a pu être formé, donc on a bien + réduit le nombre total de triangles de $G$. + + Notons alors $G'$ le graphe $G$ après cette modification. Montrons que $\alpha(G') = \alpha(G) +1$ + où $\alpha(G)$ est la taille du plus grand ensemble indépendant dans $G$. + + + $\boxed{\geq}$ On considère $I$ un indépendant de $G$ tel que $\lvert I \rvert = \alpha(G)$. + En particulier, on va s'intéresser à qui de $u_0$ et $u_1$ est dans $I$ + (il y en au plus une). Alors, on pose: + \[ + I' = + \left\{ + \begin{aligned} + & I\cup\{v_1\} \text{ si } u_1 \in I \\ + & I\cup\{v_2\} \text{ sinon} + \end{aligned} + \right. + \] + On a bien $I'$ indépendant de $G'$, et $\lvert I' \rvert = \alpha(G) +1$. + Donc $\alpha(G') \geq \alpha(G)+1$ + + + $\boxed{\leq}$ Supposons par l'absurde que $\alpha(G') > \alpha(G) +1$. + \\ Soit alors $I'$ indépendant de $G'$, $\lvert I' \rvert = \alpha(G) +k$ ($k > 1$) + + On procède alors par disjonction de cas: + \begin{itemize} + \item si $u_0, u_1 \in I'$, alors $v_1, v_2 \notin I'$. + Donc $I \backslash \{u_0\}$ est un indépendant de $G$, + \\de taille $\alpha(G)+k-1 > \alpha(G)$. Absurde ! + \item si $u_0 \in I', u_1 \notin I'$, alors parmi, $v_1$ et $v_2$, au plus $v_2 \in I'$ + On a alors $I \backslash \{v_2\}$ indépendant de $G$, + \\de taille $\geq \alpha(G)+k-1 > \alpha(G)$. Ce qui est également absurde. + \item le cas $u_0 \notin I', u_1 \in I'$ est similaire au cas précédent. + \item enfin, si $u_0, u_1 \notin I'$, on a au maximum $v_1$ ou $v_2$ dans $I'$, donc + l'indépendant $I'\backslash\{v_1, v_2\}$ de $G$ donne à nouveau une absurdité. + \end{itemize} + + Finalement, $\alpha(G') = \alpha(G)+1$ + + \part Montrons que \textsc{IndependantSet} est NP-complet même si le graphe en entrée ne contient pas de triangle. + Notons \textsc{IndependantSet$_\Delta$} ce nouveau problème. + On a un certificat: un indépendant de taille au moins $k$. + \\Montrons que\textsc{IndependantSet} $\leq_P$ \textsc{IndependantSet$_\Delta$} + + Soit $G=(V, E), k$ une instance du problème \textsc{IndependantSet}. + Notons $\delta$ le nombre de fois que l'on doit appliquer la question 1a) pour obtenir un graphe $G'$ + par $G$. + \\On a que $\alpha(G') = \alpha(G)+\delta$. + Donc \textsc{IndependantSet}$(G', k+\delta) \Longleftrightarrow$ \textsc{IndependantSet}$(G, k)$. + Or $G'$ est sans triangles donc \textsc{IndependantSet}$_\Delta(G', k+\delta) \Longleftrightarrow \textsc{IndependantSet}(G, k)$. + Alors, comme \textsc{IndependantSet} est NP-complet, \textsc{IndependantSet}$_\Delta$ est NP-complet. + + + \end{parts} + \question Montrons que \textsc{$\alpha$-And-$\omega$} est NP-Complet. + On a un certificat: une clique et un indépendant de taille au moins $k$. + Il s'agit maintenant d'établir une réduction. + + + Montrons que \textsc{Clique} $\leq_{P}$ $\alpha$-AND-$\omega$. + \\Soit $G = (V, E), k \in \mathbb{N}$ une instance de \textsc{Clique}. + On pose $G' = (V\cup\{x_i\}_{i \in \llbracket 1; k \rrbracket}, E)$. + \\On a alors un indépendant de taille $k$ de $G'$ évident: $(x_i)_{i \in \llbracket 1; k \rrbracket}$. + Donc \textsc{$\alpha$-And-$\omega$}$(G') \Longleftrightarrow$ \textsc{Clique}$(G)$ + + Alors, comme \textsc{Clique} est NP-complet, on a que \textsc{$\alpha$-And-$\omega$} est NP-complet. + + \question Montrons que \textsc{$\alpha$-Or-$\omega$} est NP-Complet. + On a un certificat: une clique ou un indépendant de taille au moins $k$. + Il s'agit maintenant d'établir une réduction. + + Montrons que \textsc{IndependantSet} $\leq_{P}$ \textsc{$\alpha$-Or-$\omega$}. + \\Soit $G = (V, E), k \in \mathbb{N}$ une instance de \textsc{IndependantSet}. + On pose $G' = (V\cup\{x_i\}_{i \in \llbracket 1, \lvert E \rvert +1\rrbracket}, E)$. + \\Alors, $G'$ ne peut pas contenir de clique de taille $k+\lvert E \rvert +1$, et contient + un indépendant de taille au moins $k+\lvert E \rvert +1$ ssi $G$ + contient un indépendant de taille au moins $k$. + \\Donc \textsc{$\alpha$-Or-$\omega$}$(G', k+\lvert E \rvert +1) \Longleftrightarrow$ \textsc{IndependantSet}$(G, k)$ + + Alors, comme \textsc{IndependantSet} est NP-complet, \textsc{$\alpha$-Or-$\omega$} est NP-complet. + + \question $\star$ +\end{questions} + +\section*{Exercice 4} + On note donc $P[i]$ le prix d'un sandwich de longueur $i$ cm, + et $n$ la longueur d'une baguette entière. + Alors, on pose $T[i]:$ "le prix maximum que l'on puisse tirer d'une baguette de $i$ cm". + On initialise $T[0] = 0$, puis + pour tout $i$, $T[i] = \underset{j \in [i]}{max}(T[i-j]+T[j])$ + + On a donc l'algorithme suivant: + \begin{verbatim} + MeilleurPrix: + Entrée: P tableau des prix de taille n + T = Tableau de taille n + T[0] := 0 + Pour i allant de i à n: + T[i] = max(T[i-j]+T[j]), j allant de 1 à i + Renvoyer T[n] + \end{verbatim} + + Le maximum s'effectue en $\mathcal{O}(n)$ donc l'algorithme est au total en $\mathcal{O}(n^2)$ + + + +\end{document}