\documentclass[12pt,a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{amsmath,amssymb,amsthm} \usepackage{geometry} \usepackage{enumitem} \usepackage{xcolor} \usepackage{listings} \geometry{margin=2cm} \pagestyle{empty} \lstset{ language=Python, basicstyle=\ttfamily\small, showstringspaces=false, frame=single, breaklines=true } \newcommand{\R}{\mathbb{R}} \newcommand{\N}{\mathbb{N}} \newcommand{\C}{\mathbb{C}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\K}{\mathbb{K}} \newcommand{\M}{\mathcal{M}} \newcommand{\tr}{\operatorname{tr}} \newcommand{\rg}{\operatorname{rg}} \newcommand{\vect}{\operatorname{Vect}} \newcommand{\cd}{\operatorname{cd}} \newcommand{\im}{\operatorname{Im}} \newcommand{\keru}{\operatorname{Ker}} \newcommand{\mat}{\operatorname{Mat}} \newcommand{\comatrice}{\operatorname{com}} \newcommand{\diag}{\operatorname{diag}} \begin{document} \begin{center} \textbf{\large Proposition de Corrig\'e}\\[2mm] \textbf{Concours Commun INP 2025}\\[1mm] \textbf{Math\'ematiques 2 (Fili\`ere MP)} \end{center} \section*{EXERCICE 1} \subsection*{Q1.} \'Ecrire une fonction \texttt{degreMax(d: dict) -> int} qui prend en argument un dictionnaire d'adjacence repr\'esentant un graphe orient\'e et renvoie le degr\'e (nombre de successeurs) maximal. \lstinputlisting[firstline=1,lastline=5]{} \begin{lstlisting} def degreMax(d: dict) -> int: if not d: return 0 return max(len(voisins) for voisins in d.values()) \end{lstlisting} \subsection*{Q2.} \'Ecrire une fonction \texttt{grapheInverse(d: dict) -> dict} qui renvoie le graphe inverse (chaque arc $(u,v)$ devient $(v,u)$). \begin{lstlisting} def grapheInverse(d: dict) -> dict: inv = {s: [] for s in d} for u in d: for v in d[u]: inv[v].append(u) return inv \end{lstlisting} \subsection*{Q3.} \'Ecrire une fonction \texttt{colorationValide(d: dict, L: list) -> bool} qui v\'erifie si une coloration $L$ (liste de couleurs index\'ee par les sommets dans l'ordre des cl\'es du dictionnaire) est valide, c'est-\`a-dire que deux sommets adjacents n'ont jamais la m\^eme couleur. \begin{lstlisting} def colorationValide(d: dict, L: list) -> bool: for u in d: for v in d[u]: if L[u] == L[v]: return False return True \end{lstlisting} \subsection*{Q4.} Discuter la complexit\'e dans le pire des cas de l'algorithme \texttt{colorationValide}. Soit $N$ le nombre de sommets et $M$ le nombre d'arcs. La boucle ext\'erieure parcourt les $N$ sommets. Pour chaque sommet $u$, la boucle int\'erieure parcourt ses voisins. Au total, on examine chaque arc une seule fois, soit $M$ it\'erations. L'acc\`es \`a $L[u]$ et $L[v]$ est $O(1)$. La complexit\'e dans le pire des cas est donc $\boxed{O(N+M)}$. \subsection*{Q5.} On consid\`ere une base de donn\'ees comportant deux tables~: \begin{itemize} \item \texttt{FILMS} (codefilm: int, nomfilm: text, ...)~; \item \texttt{LOCATIONS} (codeloc: int, codefilm: int, duree: int, ...). \end{itemize} \'Ecrire une requ\^ete SQL renvoyant la dur\'ee maximale de location. \begin{lstlisting}[language=SQL] SELECT MAX(duree) FROM LOCATIONS; \end{lstlisting} \subsection*{Q6.} \'Ecrire une requ\^ete SQL renvoyant le code, le nom et la dur\'ee moyenne de location des films dont la dur\'ee moyenne de location est inf\'erieure \`a 2 jours, class\'es par dur\'ee moyenne d\'ecroissante. \begin{lstlisting}[language=SQL] SELECT FILMS.codefilm, FILMS.nomfilm, AVG(LOCATIONS.duree) AS duree_moy FROM FILMS JOIN LOCATIONS ON FILMS.codefilm = LOCATIONS.codefilm GROUP BY FILMS.codefilm, FILMS.nomfilm HAVING AVG(LOCATIONS.duree) < 2 ORDER BY duree_moy DESC; \end{lstlisting} \section*{EXERCICE 2} Dans cet exercice, on d\'efinit une suite de polyn\^omes $(P_n)_{n\in\N}$ par~: \[ P_0(X)=1,\qquad P_1(X)=X,\qquad P_{n+2}(X)=2X\,P_{n+1}(X)-P_n(X)\;\;(n\ge0). \] \subsection*{Q7.} Montrer par r\'ecurrence double que, pour tout $n\ge1$, $P_n$ est de degr\'e $n$ et son coefficient dominant est $2^{n-1}$. Pour $n=1$~: $P_1(X)=X$ est bien de degr\'e $1$ et de coefficient dominant $1=2^{0}$. La propri\'et\'e est vraie au rang $1$. Pour $n=2$~: $P_2(X)=2X\cdot X-1=2X^2-1$ est de degr\'e $2$ et de coefficient dominant $2=2^{1}$. La propri\'et\'e est vraie au rang $2$. Supposons la propri\'et\'e vraie aux rangs $n$ et $n+1$. Alors \[ P_{n+2}=2X\,P_{n+1}-P_n. \] Par hypoth\`ese de r\'ecurrence, $\deg(P_{n+1})=n+1$ et $\deg(P_n)=n$, donc $\deg(2X\,P_{n+1})=n+2$ tandis que $\deg(P_n)=n$. Comme $n