\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}
