2023-Inp-OptionInfo-Mp-Corrigé

Partie I – Programmation en OCaml :

sélection du (k + 1)e plus petit élément La sélection du (k + 1)e plus petit élément d’une liste d’entiers L, non nécessairement triée, consiste à trouver le (k + 1)e élément de la liste obtenue en triant L dans l’ordre croissant.

Par exemple, si L = [9; 1; 2; 4; 7; 8] le 3e plus petit élément de L est 4. On pourra remarquer que si la liste L est triée dans l’ordre croissant, le (k + 1) e plus petit élément est l’élément de rang k dans L.

On présente un algorithme permettant de résoudre ce problème de sélection avec une complexité temporelle linéaire dans le pire cas. Celui-ci est basé sur le principe de ”diviser pour régner” et sur le choix d’un bon pivot pour partager la liste en deux sous-listes.

Dans cette partie, les fonctions demandées sont à écrire en OCaml et ne doivent faire intervenir aucun trait impératif du langage (références, tableaux ou autres champs mutables ou exception par exemple). Étant donné un réel a, on note {\lfloor a\rfloor} le plus grand entier inférieur ou égal à a.

I.1 – Fonctions utiles

Dans cette section, on écrit des fonctions auxiliaires qui sont utiles pour la fonction principale.

Q 1. Écrire une fonction récursive de signature :

et telle que longueur l est la longueur de la liste l.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 2. Écrire une fonction récursive de signature :

et telle que insertion l a est la liste triée dans l’ordre croissant obtenue en ajoutant l’élément a dans la liste croissante l.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 3. En déduire une fonction récursive de signature :

et telle que tri_insertion l est la liste obtenue en triant l dans l’ordre croissant.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 4. Écrire une fonction récursive de signature :

et telle que selection_n l n est l’élément de rang n de la liste l.

Par exemple, selection_n [4;2;6;4;1;15] 3 est égal à 4.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 5. Écrire une fonction récursive de signature :

et telle que paquets_de_cinq l est une liste de listes obtenue en regroupant les éléments de la liste l par paquets de cinq sauf éventuellement le dernier paquet qui est non vide et qui contient au plus cinq éléments.

Par exemple :

– paquets_de_cinq [] est égal à [],

– paquets_de_cinq [2;1;2;1;3] est égal à [[2;1;2;1;3]],

– paquets_de_cinq [3;4;2;1;5;6;3] est égal à [[3;4;2;1;5];[6;3]].

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 6. Écrire une fonction récursive de signature :

et telle que medians l est la liste m obtenue en prenant dans chaque liste lk apparaissant dans la liste de listes l l’élément médian de lk.

On convient que pour une liste A dont les éléments sont exactement {a_0\le a_1\le\cdots\le a_{n-1}}, l’élément médian désigne {a_{\lfloor n/2\rfloor}}. Dans le cas où la liste L n’est pas triée, l’élément médian désigne l’élément médian de la liste obtenue en triant L par ordre croissant.

Par exemple : medians [[3;1;5;3;2];[4;3;1];[1;3];[5;1;2;4]] est égal à [3;3;1;2].

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 7. Écrire une fonction de signature :

telle que partage p l est un quadruplet l1,l2,n1,n2 où l1 est la liste des éléments de l plus petit que p, l2 est la liste des éléments de l strictement plus grand que p, n1 et n2 sont respectivement les longueurs de l1 et l2.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

I.2 – La fonction de sélection et sa complexité

On détaille la fonction de sélection :

Q 8. Écrire une fonction récursive de signature :

telle que selection l k est le (k + 1) e plus petit élément de la liste l.

L’écriture de la fonction sera une traduction en OCaml de l’Algorithme 1 présenté en page 4.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

On cherche à déterminer la complexité en nombre de comparaisons de la fonction selection. Pour tout {n\in\mathbb N}, on note T (n) le nombre maximum de comparaisons entre éléments lors d’une sélection d’un élément quelconque dans des listes L sans répétition de taille n.

En analysant l’Algorithme 1, il est possible de démontrer que, pour tout {n\ge55} : {T(n)\le T\left(\left\lfloor\frac{n+4}5\right\rfloor\right)+T\left(\left\lfloor\frac{8n}{11}\right\rfloor\right)+4n\;(I)}

Q 9. En admettant la proposition ( I), montrer que pour tout entier n supérieur à 1, on a : {T(n)\le(200+T(55))n.} Pour l’initialisation, on pourra remarquer que T est une fonction croissante.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Algorithme 1 – Sélection du (k + 1)e plus petit élément

Partie II – Recherche d’une clique de célébrités

II.1 – Définitions et propriétés

Définition 1 (Graphe). On appelle graphe un couple {G=(S,A)} où S est un ensemble fini appelé ensemble des sommets et A est une partie de {S\times S} , appelée ensemble des arêtes. On pourra remarquer que, dans cette définition de graphe, les éléments de la forme (s, s) où {s\in S} sont des arêtes possibles.

Définition 2 (Clique). Soit {G=(S,A)} un graphe. Soit {S'} une partie de S . On dit que {S'} est une clique si : {\forall(s_1,s_2)\in S^\prime\times S^\prime,\ (s_1,s_2)\in A.} Définition 3 (Clique de célébrités, célébrité). Soient {G=(S,A)} un graphe et C une partie de S .

On dit que C est une clique de célébrités si C est une clique et : {\begin{array}{l}\forall(c,s)\in C\times S,\\[4pt]((s,c)\in A)\land((c,s)\in A\Longrightarrow s\in C)\end{array}} Un élément de l’ensemble C est alors appelé célébrité.

Le terme ”célébrité” provient de l’interprétation suivante : l’ensemble des sommets correspond à un ensemble de personnes et une arête (s, c) représente le fait que s connaît c. Ainsi, une célébrité est connue de tous et elle connaît uniquement les autres célébrités.

Q 10. Dans cette question, on pose {S=\{0,1,2,\ldots,6\}}. Pour chacun des graphes suivants, préciser s’ils contiennent une clique de célébrités non vide. Dans le cas où il y en a une, l’expliciter.

1. G1 = (S , A1) avec {A_1=\{(1,2),(1,3),(1,5),(2,6)\}}.

2. G2 = (S , A2) avec {A_2=\left\{\begin{array}{l}(0,3),(0,5),(1,2),(1,3),\\[8pt](2,2),(2,3),(3,3),(4,1),\\[8pt](4,3),(4,5),(5,1),(5,3),\\[8pt](6,1),(6,3)\end{array}\right\}.}

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 11. Soit {G=(S,A)} un graphe quelconque. Montrer que s’il existe une clique de célébrités non vide C dans G, alors celle-ci est unique.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Dans la suite, on note {C_G} l’unique clique de célébrités non vide du graphe G. Dans le cas où celle-ci n’existe pas,{C_G} désigne alors l’ensemble vide qui est noté {\varnothing}.

Q 12. Soient {G=(S,A)} un graphe et p un sommet de G. On note {G'=(S\setminus\{p\},A\cap((S\setminus\{p\})\times(S\setminus\{p\})))}. Montrer les propositions suivantes :

a) Montrer que si {C_{G'}} est égal à l’ensemble vide, alors {C_G\in\{\varnothing,\{p\}\}}.

b) Montrer que si {C_G\setminus\{p\}\ne\varnothing}, alors {C_{G'}=C_G\setminus\{p\}}.

c) On suppose que {C_{G'}} n’est pas l’ensemble vide et on fixe {c'} un élément de {C_{G'}} .

i) Montrer que si (p, {c'}) n’est pas un élément de A, alors {C_G\in\{\varnothing,\{p\}\}}. ii) Montrer que si ({c'}, p) n’est pas un élément de A, alors {C_G\in\{\varnothing,C_{G'}\}}. iii) Montrer que si (p, {c'}) et ({c'}, p) sont des éléments de A, alors {C_G\in\{\varnothing,\{p\}\cup C_{G'}\}}.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

II.2 – Algorithmique et programmation en Python (Informatique Commune)

Dans la suite, l’ensemble des sommets est de la forme {0, 1,…, n − 1} où n est un entier supérieur à 1 et un graphe {G=(S,A)} est représenté en Python par sa liste d’adjacence que l’on note LG et qui est définie par : [[j | j ∈ S et (i, j) ∈ A ] i ∈ S ].

Par exemple, si G = ({0, 1, 2, 3} , {(0, 1) , (3, 2) , (3, 1) , (1, 2)}), alors LG = [[1], [2], [], [1, 2]]. On pourra remarquer que si l’ensemble des sommets d’un graphe G est égal à {0, 1,…, n − 1}, alors la longueur de la liste LG est égale à n.

Q 13. Écrire une fonction Python est_clique(L,R) prenant en argument une liste L qui est une liste d’adjacence d’un graphe {G=(S,A)} et une liste R sans répétition d’éléments de S et qui renvoie True si l’ensemble des éléments de R constitue une clique de G et False sinon.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 14. On considère le graphe G ayant comme liste d’adjacence : LG = [[1, 3, 5], [0, 2], [4, 6], [2, 4, 5, 6], [2], [2, 3, 4], [2, 4, 6]]. Décrire l’évolution de la variable C à chaque étape de l’Algorithme 2 décrit en page 6.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 15. Écrire une fonction Python Clique_possible_C(G) prenant en argument une liste G représentant un graphe et qui renvoie la liste C construite à l’aide de l’Algorithme 2.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 16. Montrer par récurrence sur le nombre de sommets que si G est un graphe où {C_G} est non vide, alors Clique_possible_C(G) est égale à {C_G}.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Algorithme 2 – Construction d’une clique de célébrités possibles

Partie III – Étude d’une famille d’automates

Dans cette partie, l’alphabet {\Sigma} désigne l’ensemble{0, 1}, le symbole {\varepsilon} désigne le mot vide et on rappelle que {\Sigma^\star} désigne l’ensemble des mots sur l’alphabet {\Sigma}. Étant donné un mot w, on rappelle que {|w|} désigne la longueur du mot w et l’indexation des lettres de w commence par 0.

La première lettre de w est donc {w_0}. La notation Card (E) désigne le cardinal d’un ensemble E. Étant donnés un entier n et un entier non nul m, la notation n mod m désigne le reste de la division euclidienne de n par m.

III.1 – Définitions

Définition 4 (Automate déterministe ). Un Automate déterministe est un quintuplet {A=(Q,\Sigma,\delta,q_0,F)} avec :

– Q un ensemble fini non vide appelé ensemble des états,

– {\Sigma} est un ensemble fini appelé alphabet,

– {\delta:Q\times\Sigma\to Q} une application appelée application de transition,

– {q_0} un élément de Q appelé état initial,

– F une partie de Q appelée ensemble des états finaux. Définition 5 (Application de transition étendue aux mots). Soit {A=(Q,\Sigma,\delta,q_0,F)} un automate déterministe. On définit de manière récursive {\delta^\star:Q\times\Sigma^\star\to Q} par : {\forall q\in Q,\ \delta^\star(q,\varepsilon)=q,} {\begin{array}{l}\forall q\in Q,\ \forall a\in\Sigma,\ \forall w\in\Sigma^\star,\\[8pt]\delta^\star(q,aw)=\delta^\star(\delta(q,a),w).\end{array}} Définition 6 (Reconnaissance d’un mot par un automate).

Soient w = {w_0w_1\cdots w_n} un mot sur un alphabet {\Sigma} et {A=(Q,\Sigma,\delta,q_0,F)}. On dit que w est reconnu par l’automate A si {\delta^\star(q_0,w)\in F}. Définition 7 (Automate {A_{k,p}}, fonction indicatrice {L_{k,p}}). Soient p et k deux entiers vérifiant {0\le k\le p-1}. L’automate {A_{k,p}} est défini par :

– {Q=\{0,1,\ldots,p-1\}\times\{0,1\}},

– {\Sigma}= {0, 1},

– {\forall(c,e)\in Q,\ \delta((c,e),0)=((c+1)\bmod p,e)},

– {\forall(c,e,)\in Q},

{\begin{array}{rl}\delta((c,e),1)\\[8pt]\quad\displaystyle=\left\{\begin{array}{ll}((c+1)\bmod p,1-e)&\text{si }c=k\bmod p,\\[8pt]((c+1)\bmod p,e)&\text{sinon}.\end{array}\right.\end{array}}– {q_0=(0,0)} ,

– {F=\{0,1,\ldots,p-1\}\times\{1\}}.

On note {L_{k,p}} la fonction indicatrice de l’ensemble des mots reconnus par {A_{k,p}}. Soit autrement : {\forall u\in\Sigma^\star,\ L_{k,p}(u)=\left\{\begin{array}{ll}1&\text{si }A_{k,p}\text{ reconnaît }u,\\[8pt]0&\text{sinon}.\end{array}\right.}

III.2 – Exemples et propriétés élémentaires des {A_{k,p}}

Q 17. Soit {w\in\Sigma^\star}. Expliciter sans démonstration l’état {\delta^\star(q_0,w)}, la lecture du mot étant effectuée dans l’automate {A_{1,3}}. On pourra s’aider d’une représentation graphique de l’automate.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Dans les questions Q18 à Q22, p et k désignent des entiers tels que {p>2} et {k\in\{0,1,\ldots,p-1\}}.

Q 18. Soit {w\in\Sigma^\star}. Expliciter l’état {\delta^\star(q_0,w)}, la lecture du mot étant effectuée dans l’automate {A_{k,p}}.

On ne demande pas de démonstration.

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Un corollaire direct du résultat de la question Q18 est que l’ensemble des mots reconnu par l’automate {A_{k,p}} est égal à : {\!\!\!\!\begin{array}{l}\left\{w\in\Sigma^\star\ \middle|\ \operatorname{Card}\left(\left\{m\ge0\middle|\begin{array}{l}pm\!+\!k\le|w|\!-\!1\\[4pt]\text{et }w_{pm+k}=1\end{array}\!\!\!\!\!\!\right\}\!\right)\!\right\}\\[16pt]\qquad\qquad\text{ est impair}\end{array}} Dans la suite du problème, on admet ce résultat.

Q 19. Soit w un mot reconnu par un automate {A_{k,p}}. Montrer que w est reconnu par au moins un autre automate parmi {A_{0,2}}, {A_{1,2}}, {A_{l,p}} avec {l\ne k}.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Définition 8 (Ou exclusif étendu aux mots binaires) . On rappelle que le Ou exclusif qu’on note {\oplus} est une opération définie sur {0, 1} par : {0\oplus0=1\oplus1=0} et {0\oplus1=1\oplus0=1}. Soient {n\in\mathbb N}, u et v deux éléments de {\{0,1\}^n}. On définit le Ou exclusif de u et v, noté {u\oplus v}, le mot de longueur n défini par : {\forall i\in\{0,1,\ldots,n-1\},\ (u\oplus v)_i=u_i\oplus v_i}.

Q 20. Soient u et v deux mots de {\Sigma^\star} de même longueur. Montrer que : {L_{k,p}(u\oplus v)=L_{k,p}(u)\oplus L_{k,p}(v)} .
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 21. Soit w un mot binaire vérifiant : {L_{0,2}(w)=L_{1,2}(w)=0}
et {\forall k\in\{1,2,\ldots,p-1\},\ L_{k,p}(w)=0}.

a) Montrer que {L_{0,p}(w)=0}.

b) En déduire que pour tout mot {w'\in0^\star\cdot w}, on a : {\begin{array}{l}L_{0,2}(w')=L_{1,2}(w')=0\\[8pt]\forall k\in\{1,\ldots,p-1\},\ L_{k,p}(w')=0\end{array}}

Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :
Q 22. Montrer que pour tout {w\in\Sigma^\star} et {w'\in w\cdot0^\star}, on a {L_{k,p}(w)=L_{k,p}(w')}.
Cliquer ici pour voir (ou cacher) la réponse
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Remarque. Ces égalités permettent la construction d’une relation d’équivalence sur les mots qui est utilisée pour montrer que deux mots de longueur N peuvent être séparés par un automate de la forme {A_{k,p}} ayant {O(\sqrt N\ln(N))} états.