CNC Info 2018 MP
CNC Info 2018 MP
CNC Info 2018 MP
Les candidats sont informés que la précision des raisonnements algorithmiques ainsi que le soin apporté
à la rédaction et à la présentation des copies seront des éléments pris en compte dans la notation. Il
convient en particulier de rappeler avec précision les références des questions abordées. Si, au cours de
l'épreuve, un candidat repère ce qui peut lui sembler être une erreur d'énoncé, il le signale sur sa copie et
poursuit sa composition en expliquant les raisons des initiatives qu'il est amené à prendre.
Remarques générales :
L'épreuve se compose de deux parties indépendantes.
Toutes les instructions et les fonctions demandées seront écrites en Python.
Les questions non traitées peuvent être admises pour aborder les questions ultérieures.
Toute fonction peut être décomposée, si nécessaire, en plusieurs fonctions.
~~~~~~~~~~~~~~~~~~~~~~~~~~
Dans cette partie, on suppose que les modules suivants sont importés :
from numpy import *
from matplotlib.pyplot import *
Les équations différentielles (ED) apparaissent très souvent dans la modélisation de la physique et des
sciences de l'ingénieur. Trouver la solution d'une ED ou d'un système d'ED est ainsi un problème courant,
souvent difficile ou impossible à résoudre de façon analytique. Il est alors nécessaire de recourir à des
méthodes numériques pour les résoudre.
Le problème de Cauchy consiste à trouver une fonction y(t) définie sur l'intervalle [a, b] telle que :
= , ( ) ; ∀ ∈[ , ]
( )=
Pour obtenir une approximation numérique de la solution y(t) sur l'intervalle [a, b], nous allons estimer la
valeur de cette fonction en un nombre fini de points ti, pour i = 0, 1, … , n, constituants les nœuds du
maillage. La solution numérique obtenue aux points ti est notée yi = y(ti). L'écart entre deux abscisses, noté
h, est appelé : le pas de discrétisation.
Page 1 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Les principales méthodes de résolution numérique des ED sont séparées en deux grandes catégories :
les méthodes à un pas : Le calcul de la valeur yn+1 au nœud tn+1 fait intervenir la valeur yn obtenue à
l'abscisse précédente. Les principales méthodes sont celles de : Euler, Runge-Kutta, Crank-
Nicholson …
les méthodes à multiples pas : Le calcul de la valeur yn+1 au nœud tn+1 fait intervenir plusieurs
valeurs yn , yn-1 , yn-2 , … obtenues aux abscisses précédentes. Les principales méthodes sont celles
de : Nyström, Adams-Bashforth, Adams-Moulton, Gear …
= + ∗ ∗ ,
Dans la suite de cette partie, nous nous intéressons aux méthodes d'Adams-Bashforth et d’Adams-Moulton
d’ordre 2.
y0 donné ;
y1 calculé par la méthode Euler ;
= + ( ∗ ( , )− ( , ))
y0 donné ;
= + ( ( , )+ ( , ))
En pratique, les schémas d’Adams-Moulton ne sont pas utilisés comme tels, car ils sont implicites. On
utilise plutôt conjointement un schéma d’Adams-Moulton et un schéma d’Adams-Bashforth de même
ordre, pour construire un schéma prédicteur-correcteur : Dans le schéma d’Adams-Moulton, on utilise la
valeur de yn+1 prédite (calculée) par le schéma d’Adams-Bashforth.
Le schéma prédicteur-correcteur d’ordre 2, d'Adams-Bashforth et Adams-Moulton est :
y0 donné ;
y1 calculé par la méthode d’Euler ;
= + ( ( , )+ ( , ))
avec ∶ = + ( ∗ ( , )− ( , ))
Page 2 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Q. 1 : Écrire une fonction ABM2 (f, a, b, y0, h), qui reçoit en paramètres :
f est la fonction qui représente une équation différentielle du premier ordre ;
a et b sont les deux bornes de l’intervalle d’intégration ;
y0 est la valeur initiale à l’instant a (y(a) = y0) ;
h est le pas de discrétisation.
Si l’objet suspendu est tiré verticalement vers le bas, celui-ci effectue un mouvement harmonique. La forme
générale de l’équation différentielle modélisant ce mouvement harmonique est :
(E) ∗ ̈( )+ ∗ ̇( )+ ∗ ( )= ( )
Page 3 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Q. 2 : On suppose que les valeurs des paramètres de l’équation différentielle (E), sont :
b=1 ; k = 12.5 ; m = 1.5 et F(t) = 0
Écrire l’équation différentielle (E) sous la forme z' = G(t, z), avec G(t, z) une fonction à deux variables (t, z)
dont z est un tableau de longueur 2.
Q. 3 : On suppose avoir tiré l’objet suspendu verticalement vers le bas, avant de le relâcher sans vitesse
initiale.
En utilisant le schéma prédicteur-correcteur d'ordre 2, d'Adams-Bashforth et Adams-Moulton, écrire le code
Python qui permet de tracer la courbe ci-dessous, représentant la position y(t) de l’objet m suspendu, toutes
les 10-3 secondes.
Q. 4 : Écrire la fonction racines (P), qui reçoit en paramètre la liste (ou le tableau) P des positions y(t) de
l’objet suspendu, à intervalles de temps de 10-3 secondes. La fonction affiche les valeurs des zéros de la
fonction y(t) : les valeurs des t tels que y(t) = 0, ou y(t) ≈ 0 avec la précision 10-3.
Exemple :
La fonction affiche les valeurs suivantes :
0.589 , 1.684 , 2.78 , 3.875 , 4.971 , 6.067 , 7.162
*******************************
Page 4 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Partie II :
Bioinformatique : Recherche d’un motif
Q. 1 : Quel est le nombre minimum de bits nécessaires pour coder quatre éléments ?
Q. 3 : Écrire une fonction prefixe (M, S), qui reçoit en paramètres deux chaînes de caractères M et S non
vides, et qui retourne True si la chaîne M est un préfixe de S, sinon, elle retourne False.
Page 5 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Q. 4 : Quel est le nombre de comparaisons élémentaires effectuées par la fonction prefixe (M, S), dans le
pire cas ? Déduire la complexité de la fonction prefixe (M, S), dans le pire cas.
Q. 5 : Écrire une fonction liste_suffixes (S), qui reçoit en paramètre une chaîne de caractères S non vide, et
qui renvoie une liste de tuples. Chaque tuple de cette liste est composé de deux éléments : un suffixe de S, et
la position p de ce suffixe dans S (0 ≤ p < taille de S).
Exemple : S = 'TATCTAGCTA'
La fonction liste_suffixes (S) renvoie la liste :
[('TATCTAGCTA', 0), ( 'ATCTAGCTA', 1), ( 'TCTAGCTA', 2), ('CTAGCTA', 3), ('TAGCTA', 4),
('AGCTA', 5), ('GCTA', 6), ('CTA', 7), ('TA', 8), ('A', 9)]
Page 6 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Q. 7 : Écrire une fonction recherche_dichotomique (M, L), qui utilise le principe de la recherche
dichotomique, pour rechercher le motif M dans la liste des suffixes L, triée dans l’ordre alphabétique des
suffixes : Si M est un préfixe d’un suffixe dans un tuple de L, alors la fonction retourne la position de ce
suffixe. Si la fonction ne trouve pas le motif M recherché, alors la fonction retourne None.
Exemple :
La liste des suffixes de 'TATCTAGCTA', triée dans l’ordre alphabétique des suffixes est :
L = [ ('A', 9) , ('AGCTA', 5) , ('ATCTAGCTA', 1) , ('CTA', 7) , ('CTAGCTA', 3) , ('GCTA', 6) , ('TA', 8) ,
('TAGCTA', 4) , ('TATCTAGCTA', 0) , ('TCTAGCTA', 2) ]
recherche_dichotomique ('CTA', L) renvoie la position 3 ; 'CTA' est préfixe de 'CTAGCTA'
recherche_dichotomique ('TA', L) renvoie la position 0 ; 'TA' est préfixe de 'TATCTAGCTA'
recherche_dichotomique ('CAGT', L) renvoie None. 'CAGT' n’est préfixe d’aucun suffixe
Page 7 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
La racine de l’arbre '#' se trouve au niveau 0 de l’arbre, ses fils se trouvent au niveau 1, … . En
parcourant une branche de l’arbre depuis le niveau 1, et en effectuant la concaténation des sous-chaînes des
nœuds, on obtient un suffixe de la chaîne S ; et dans la feuille, on trouve la position de ce suffixe dans S.
Exemples :
En parcourant les nœuds de la première branche à droite de l’arbre 'T' + 'CTAGCTA', on obtient le
suffixe 'TCTAGCTA'. La feuille contient la position 2 de ce suffixe ;
En parcourant les nœuds de la troisième branche à partir de la droite de l’arbre 'T' + 'A' + 'GCTA',
on obtient le suffixe 'TAGCTA'. La feuille contient la position 4 de ce suffixe.
Pour représenter l’arbre des suffixes, on utilise une liste composée de deux éléments : Le nœud, et une
liste contenant tous les fils de ce nœud :
Un nœud N est représenté par la liste : [ N , [ f1 , f2 , … , fn ] ] ;
Chaque fils fk est représenté par la liste : [ fk , [ tous les fils de fk ] ] ;
Une feuille F est représentée par la liste : [ F , [ ] ].
On suppose que la fonction arbre_suffixes (S), reçoit en paramètre une chaîne de caractères S non vide,
et construit et renvoie l’arbre des suffixes de S, représenté par une liste, selon le principe décrit ci-dessus.
Exemple :
arbre_suffixes ('TATCTAGCTA') renvoie la liste R suivante :
R = [ '#', [ [ 'A', [ [ 9, [ ] ], [ 'GCTA', [ [ 5,[ ] ] ] ], [ 'TCTAGCTA', [ [ 1, [ ] ] ] ] ] ], [ 'CTA',[ [ 7, [ ] ], [
'GCTA', [ [ 3, [ ] ] ] ] ] ], [ 'GCTA', [ [ 6, [ ] ] ] ], [ 'T', [ [ 'A', [ [ 8, [ ] ], [ 'GCTA', [ [ 4, [ ] ] ] ], [
'TCTAGCTA', [ [ 0, [ ] ] ] ] ] ], [ 'CTAGCTA', [ [ 2, [ ] ] ] ] ] ] ] ]
Q. 9 : Écrire une fonction feuilles (R), qui reçoit en paramètre une liste R représentant l’arbre des suffixes
d’une chaîne de caractères non vide, et qui retourne la liste contenant toutes les feuilles de l’arbre R.
Exemple : feuilles (R) revoie la liste [ 9 , 5 , 1 , 7 , 3 , 6 , 8 , 4 , 0 , 2 ]
L’intérêt, de l’arbre des suffixes, c’est qu’il permet d’effectuer une recherche de toutes les occurrences
d’un motif dans un temps qui dépend uniquement de la longueur du motif, et non de la chaîne dans
laquelle on effectue la recherche. En effet, la recherche d’un motif se réalise par la lecture du motif recherché
et par le parcours simultané de l’arbre des suffixes. Trois cas peuvent survenir :
On se retrouve sur un nœud, et le motif est un préfixe de ce nœud : Dans ce cas, les feuilles du
sous arbre de ce nœud, correspondent aux positions de toutes les occurrences du motif dans la
chaîne.
On se retrouve sur un nœud, et ce nœud est un préfixe du motif : Dans ce cas, on continue la
recherche parmi les fils de ce nœud.
On ne peut plus descendre dans l’arbre : Dans ce cas, il n’y a pas d’occurrence du motif recherché
dans la chaîne.
Q. 10 : Écrire une fonction recherche_arbre (M, R), qui reçoit en paramètres un motif M non vide, et une
liste R représentant l’arbre des suffixes d’une chaîne de caractères non vide. La fonction retourne une liste
contenant les positions de toutes les occurrences de M dans cette chaîne de caractères.
Page 8 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Exemples :
R est la liste qui représente l’arbre des suffixes de la chaîne S = 'TATCTAGCTA'.
recherche_arbre ('TA', R) renvoie la liste : [ 8 , 4 , 0 ]
recherche_arbre ('TCTAG', R) renvoie la liste : [ 2 ]
recherche_arbre ('CTA', R) revoie la liste : [ 7 , 3 ]
recherche_arbre ('TACG', R) renvoie la liste : [ ]
Exemple : Codes des nœuds internes de l’arbre des suffixes de la chaîne S = 'TATCTAGCTA'
Dans cet exemple, la taille de S est 10. Chaque feuille est identifiée par un entier compris entre 0 et 9, et
qui correspond à un indice dans S. Chaque nœud interne est identifié par un entier positif unique supérieur à
10. Le choix et la répartition des codes des nœuds sont effectués de façon aléatoire.
La base de données de l’arbre des suffixes est composée de deux tables : Nœuds et Liens.
a- Structure de la table Nœuds :
Nœuds ( code (entier) , nom (texte), niveau (entier) )
La table Nœuds contient les nœuds internes de l’arbre des suffixes, et elle est composée de trois
champs :
Le champ code contient un entier positif unique pour chaque nœud interne ;
Le champ nom contient le nom du nœud interne ;
Le champ niveau contient un entier positif qui représente le niveau du nœud interne dans l’arbre.
Page 9 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Q. 12 : Écrire une requête SQL, qui renvoie les noms des nœuds, sans répétition, tels que le motif
'GCTA' est un préfixe ou suffixe des noms de ces nœuds, triés dans l’ordre croissant du champ niveau.
Q. 15 : Le degré d'un arbre est égal au plus grand des degrés de ses nœuds.
Écrire une requête SQL, qui renvoie le degré de l’arbre.
Q. 16 : Écrire une requête SQL, qui renvoie les feuilles de l’arbre ayant le niveau maximal.
Q. 17 : Écrire une requête, en algèbre relationnelle, qui renvoie les feuilles ayant le niveau supérieur à 2.
Page 10 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Pour rechercher le plus long motif commun à deux chaînes de caractères P et Q non vides, on commence
par créer une matrice M remplie par des zéros : Le nombre de lignes de M est égal à la taille de P, et le
nombre de colonnes de M est égal à la taille de Q. Ensuite, on compare les caractères de P avec ceux de Q,
et on écrit le nombre de caractères successifs identiques, dans la case correspondante de la matrice M.
Exemple : P = 'GCTAGCATT' et Q = 'CATTGTAGCT'
La matrice M, de comparaison des caractères de P avec ceux de Q, est la suivante :
À partir de cette matrice M, On peut extraire les plus longs motifs communs à P et Q : 'CATT' et 'TAGC'
Q-18 : Écrire une fonction : matrice (P, Q), qui reçoit en paramètres deux chaînes de caractères P et Q non
vides, et qui retourne la matrice M de comparaison des caractères de P avec ceux de Q, selon le principe
décrit dans l’exemple ci-dessus.
Exemple : P = 'GCTAGCATT' et Q = 'CATTGTAGCT'
matrice (P, Q) renvoie la matrice M suivante :
[ [0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 2, 0], [0, 0, 1, 1, 0, 1, 0, 0, 0, 3], […] , … ]
Q-19 : Écrire une fonction plus_long_mc (P, M), qui reçoit en paramètres une chaîne de caractères P non
vide, et la matrice M de comparaison des caractères de la chaîne P avec ceux d’une autre chaîne Q non vide
aussi, selon le principe décrit dans l’exemple ci-dessus. La fonction renvoie la liste, sans doublons, de tous
les plus longs motifs communs à P et Q.
Exemple :
P = 'GCTAGCATT' et M est la matrice de comparaison des caractères de P avec ceux de la chaîne
'CATTGTAGCT'.
plus_long_mc (P, M) retourne la liste des plus longs motifs communs : [ 'TAGC' , 'CATT' ]
Page 11 sur 12
Épreuve d’Informatique – Session 2018 – Filière MP
Q-20 : Écrire le code python qui permet d’afficher les plus longs motifs communs, à toutes les lignes de ce
fichier texte, sans doublons.
Exemple :
On suppose que le fichier 'C:\génomes.txt' est composé des lignes suivantes :
GATTCGAGGCTAAACTAGCTAA
GATTCGAGGCTCTAGCTATTCGAGGG
CTAGCTATAGGCTAGCTACCATTATTCGAG
CGCTAGCTACATTCGAGGCTAAAC
ATTCGAGAGGGCTAACTAGCTAAGCCA
Le programme affiche les plus longs motifs communs à toutes les lignes de ce fichier :
'ATTCGAG' , 'CTAGCTA'
Page 12 sur 12