CCINP Informatique Commune TSI 2020Sujet, corrigé et rapport du jury
- Manipulation de chaînes de caractères
- Complexité et terminaison d'algorithmes
- Algorithmes dichotomiques
- Tri par insertion
- Récursivité
- Bases de données et requêtes SQL
Téléchargements
Présentation du sujet
Informatique commune TSI : autour du séquençage du génomeAfficher ou masquer la section
Présentation du sujet
Le sujet, construit autour du séquençage du génome, comporte trois parties indépendantes. La première génère une séquence d'ADN, la seconde recherche un motif dans une séquence par plusieurs algorithmes (naïf, Knuth-Morris-Pratt, fonctions de hachage), la troisième exploite une base de données de bactéries phytopathogènes.
- 1Partie I : génération d'une séquence d'ADNpremière annéeManipulation de chaînes de caractères pour générer et manipuler une séquence.
- 2Partie II : recherche d'un motifdeuxième annéeComparaison de l'algorithme naïf, de l'algorithme de Knuth-Morris-Pratt, d'un algorithme sur liste et des fonctions de hachage (Karp-Rabin, évaluation de polynôme par la méthode de Horner).
- 3Partie III : Collection française de bactéries phytopathogènespremière annéeManipulation d'une base de données simple à l'aide de requêtes.
L'épreuve en chiffres
Moyenne 10,68 / 20 · écart-type 4,11 · 1 230 présents · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 10,68/ 20
- Écart-type
- 4,11
- Présents
- 1 230
- Coefficient
- 5
- Durée
- 3 h
Votre note sur 20 à ce sujet, en conditions de concours.
Source : document officiel du concours, épreuve du 4 juillet 2020. Notes publiées par le concours (après harmonisation le cas échéant). Courbe : estimation par une loi normale.
Ce qu'a observé le jury
5 erreurs relevéesNotion de terminaison mal maîtrisée · Confusion chaîne de caractères / liste · Tri par insertion mal appliquéAfficher ou masquer la section
Ce qu'a observé le jury
5 erreurs relevéesLes correcteurs constatent une nette progression sur la qualité et le volume des réponses données, l'ensemble des questions du sujet étant souvent abordé. Ils regrettent toutefois que trop de candidats ne lisent pas le sujet avec attention et relèvent encore de nombreuses erreurs de syntaxe Python.
Les erreurs les plus sanctionnées
- 1Notion de terminaison mal maîtriséeQ4
De nombreux candidats ne connaissent pas la notion de terminaison, et seule la moitié de ceux qui la connaissent réussissent à la justifier correctement.
- 2Confusion chaîne de caractères / listeQ10
Trop de confusions entre chaîne de caractères et liste ; ce n'est pas au correcteur de choisir la bonne réponse.
- 3Tri par insertion mal appliquéQ14
L'algorithme de tri par insertion est un tri sur place, il ne s'agit donc pas de créer une liste annexe pour récupérer des données triées.
- 4Complexité de la dichotomie non justifiéeQ16
Certains candidats confondent la méthode dichotomique avec la recherche du zéro d'une fonction, et affirment qu'un algorithme est meilleur sans connaître sa complexité en log(n).
- 5Oubli du group byQ24
Beaucoup de candidats ont oublié le group by dans la rédaction de la requête.
Ce qui a été bien réussi
- Les bases de données étaient intentionnellement simples et ont permis à de nombreux candidats de gagner des points en faisant preuve de rigueur dans la syntaxe.
- Les questions 8, 9, 12 et 15 ont été très bien ou bien traitées.
- La question 22, très facile, a été réussie par la plupart des candidats.
Conseils du jury
- Lire le sujet avec attention avant de répondre, en particulier pour la précision des entrées et sorties attendues.
- Soigner l'indentation, la syntaxe des affectations et des tests, et ne pas confondre procédure et fonction.
- Justifier précisément l'intérêt ou la complexité d'un algorithme plutôt que de se contenter d'une affirmation générale.
Synthèse rédigée par WikiPrépa à partir du rapport officiel du jury (à télécharger en PDF). Les citations sont extraites du rapport.
Ces sujets peuvent vous intéresser
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
ÉPREUVE SPÉCIFIQUE - FILIÈRE TSI
INFORMATIQUE
Mercredi 6 mai : 8 h-11 h
RAPPEL DES CONSIGNES
- Utiliser uniquement un stylo noir ou bleu foncé non effaçable pour la rédaction de votre composition ; d'autres couleurs, excepté le vert, peuvent être utilisées, mais exclusivement pour les schémas et la mise en évidence des résultats.
- Ne pas utiliser de correcteur.
- Écrire le mot FIN à la fin de votre composition.
Les calculatrices sont interdites
Le sujet est composé de trois parties, toutes indépendantes.
Seul le document réponse est à rendre.
- le texte du sujet et une annexe, 7 pages,
- le Document Réponse (DR) à rendre en fin d'épreuve, 12 pages.
Autour du séquençage du génome
Partie I - Génération d'une séquence d'ADN
Q1. Que renvoie la commande seq [3] ? Que renvoie la commande seq [2:6] ?
Les fonctions que nous allons construire par la suite devront prendre en paramètre une chaîne de caractères ne contenant que des '
- On commence par créer une chaîne de caractères vide.
- Puis on tire aléatoirement
n chiffres compris entre 1 et 4 et
- si on obtient un 1, alors on ajoute un 'A' à notre chaîne de caractères;
- si on obtient un 2, alors on ajoute un 'C' à notre chaîne de caractères;
- si on obtient un 3, alors on ajoute un 'G' à notre chaîne de caractères;
- si on obtient un 4, alors on ajoute un 'T' à notre chaîne de caractères.
- On renvoie la chaîne de caractères ainsi construite.
Q3. Que fait la fonction mystere(seq) qui prend en argument une séquence d'ADN'seq' (une chaîne de caractères ne contenant que des 'A', 'C', 'G' et 'T')? Le code de la fonction mystere() se trouve dans le DR 3.
Q4. Quelle est la complexité de la fonction mystere()? Donner le nom de la variable permettant de montrer la terminaison de l'algorithme (on justifiera le raisonnement).
Partie II - Recherche d'un motif
On trouve plus de 100 algorithmes différents pour cette même tâche, les plus célèbres datant des années 1970, mais plus de la moitié ont moins de 10 ans.
II. 1 - Algorithme naïf
Principe de l'algorithme naïf
Cet algorithme doit correspondre à l'algorithme naïf.
Q6. Combien faut-il d'opérations pour chercher un motif de 50 caractères dans une séquence d'ADN en utilisant l'algorithme naïf ? On supposera qu'une séquence d'ADN est composée de
En combien de temps un ordinateur réalisant
- découper la première séquence d'ADN en morceaux de taille 50;
- rechercher chaque morceau dans la deuxième séquence d'ADN.
II. 2 - Algorithme de Knuth-Morris-Pratt (1970)
II.2.a Préfixe et suffixe
Par exemple, 'mo' et 'm' sont des préfixes de 'mot', mais 'o' n'est pas un préfixe de 'mot' .
Un suffixe d'un motif
Par exemple, 'ot' et 't' sont des suffixes de 'mot', mais 'mot' n'est pas un suffixe de 'mot'.
Q8. Donner tous les préfixes et les suffixes du motif 'ACGTAC'.
Q9. Quel est le plus grand préfixe de 'ACGTAC' qui soit aussi un suffixe?
Quel est le plus grand préfixe de 'ACAACA' qui soit aussi un suffixe?
II.2.b Algorithme de Knuth-Morris-Pratt
Cette fonction annexe, appelée fonctionannexe(), doit permettre, pour chaque lettre à la position i , de trouver le plus grand sous-mot de M qui finit par la lettre
Le code de fonctionannexe() se trouve à la question Q11 du DR 6.
Q10. Quel est le type de la sortie de la fonction fonctionannexe()?
Q11. Une ou des erreurs de syntaxe s'est (se sont) glissée(s) dans la fonction fonctionannexe(). Identifier la ou les erreur(s) et corriger la fonction pour qu'il n'y ait plus de message d'erreur quand on compile la fonction.
Q12. Décrire l'exécution de la fonction fonctionannexe() lorsque M='ACAACA' en précisant sur le DR 6, pour les six premiers tours dans la boucle while, à la sortie de la boucle, le contenu des variables :
Q13. Expliquer et commenter les groupements de lignes de l'algorithme KMP donnés dans le DR 7.
II. 3 - Algorithme utilisant la structure de liste
Par exemple, à la chaîne 'CATCG', on peut lui associer la liste :
['C','A','T','G','CA','AT','TC','CG','CAT','ATC','TCG','CATC','ATCG','CATCG'] que l'on peut ensuite trier pour obtenir la liste :
['A','AT','ATC','ATCG','C','CA','CAT','CATC','CATCG','CG','G','T','TC','TCG'].
La première étape de cette méthode est donc de trier une liste.
Q14. Écrire une fonction triinsertion() de tri par insertion d'une liste de nombres.
Q15. Comment peut-on adapter la fonction triinsertion() à une liste de chaîne de caractères?
Q16. Écrire une fonction recherchedichotomique() de recherche dichotomique dans une liste de nombres triés.
Quel est l'intérêt de ce type d'algorithme (on parlera de complexité)?
II. 4 - Fonction de hachage et évaluation de polynôme
II.4.a Fonction de hachage, algorithme de Karp-Rabin
Voici un exemple de fonction de hachage :
- à chaque caractère de l'alphabet, on associe une valeur. Ici, on va associer à 'A' la valeur 0 , à 'C' la valeur 1, à 'G' la valeur 2 et à 'T' la valeur 3. Pour un motif de taille
n , on obtient donc une suite de chiffrea_(n − 1)…a_1 a_0 . Par exemple, à la chaîne 'TAGC', on lui associe la suite de chiffre 3021; - cette suite de chiffre est considérée comme l'écriture d'un entier en base
b , oùb est le nombre de caractères présents dans l'alphabet. On a donc icib = 4 ; - on calcule ensuite cet entier en base 10 (on calcule donc
a_(n − 1)b^(n − 1) + … + a_1 b^1 + a_0 b^0 ); - puis on calcule le reste de la division euclidienne de ce nombre par 13.
Dans cette fonction de hachage, nous avons besoin de transformer un entier en base
II.4.b Évaluation de polynôme, Algorithme de Hörner
Q18. Écrire une fonction
Q20. Compléter la fonction hornerrec() pour avoir une fonction récursive qui évalue un polynôme en utilisant l'algorithme de Hörner.
Partie III - Collection Française de Bactéries Phytopathogènes
- l'une, appelée Echantillon, qui permet de stocker les différents échantillons d'ADN;
- l'autre, appelée Sequence, qui permet de mémoriser quelle personne est responsable de l'obtention de la séquence (i.e. de l'extraction d'un gène particulier dans les différents échantillons d'ADN).
Des extraits des tables Echantillon et Sequence sont données par les tableaux 1 et 2.
| Echantillon | |||
| ADN | Genre | Espèce | Sous-espèce |
| 309 | Pseudomonas | syringae | morsprunorum |
|
|
|||
| 3589 | Pseudomonas | syringae | vignae |
|
|
|||
| Sequence | |||||
| Code | Date | ADN | Gène | Protocole | Employé |
| A |
|
309 | gyrB | Spilker | Dupont |
| B |
|
2028 | recA | Cesbron and Manceau | Martin |
|
|
|
|
|
|
|
| AGZ |
|
2028 | leuS | Deletoile | Martin |
|
|
|
|
|
|
|
SELECT count(*) FROM Sequence WHERE Date='01-03-2018'
Q22. Écrire en SQL la requête(2), donnée en algèbre relationnel :
Q24. Écrire en SQL la requête(4) permettant d'obtenir le nombre d'échantillons prélevés par chaque employé.
ANNEXE - Librairie numpy
FIN

J. 201173
Autour du séquençage du génome
Document Réponse
Q1
seq='ATCGTACGTACG'
seq[3]
seq='ATCGTACGTACG'
seq[2:6]
NE RIEN ÉCRIRE DANS CE CADRE
Q2
2 seq =
def mystere(seq):
$a, b, c, d=0,0,0,0$
i = len(seq)-1
while $\mathrm{i}>=0$ :
if seq[i]=='A':
a += 1
i -= 1
elif seq[i]=='C':
b += 1
i -= 1
elif seq[i]=='G':
C $+=1$
i -= 1
else:
d += 1
i -= 1
return $\left[a_{*} 100 / l e n(s e q), b_{*} 100 / l e n(s e q), c_{*} 100 / l e n(s e q), d_{*} 100 / l e n(s e q)\right]$
Réponse :
Q4
Terminaison : nom de la variable :
justification :
Q5
Q6
Q7

J. 201173
Q8
Q9
Plus grand préfixe de 'ACAACA' qui soit aussi un suffixe :
Q10
Q11
def fonctionannexe(M):
F=[0]
i=1
j=0
while i <m :
if M[i]=M[j] :
F.append(j+1)
i=i+1
j=j+1
else
if j>0 :
j=F[j-1]
else:
F.append(0)
i=i+1
return F
Q12
Fin du premier passage dans la boucle while :
Fin du deuxième passage dans la boucle while :
Fin du troisième passage dans la boucle while :
Fin du quatrième passage dans la boucle while :
Fin du cinquième passage dans la boucle while :
Fin du sixième passage dans la boucle while :
def KMP(M,T):
F=fonctionannexe(M)
i=0
j=0
while i < len(T) :
if T[i]==M[j]:
if j==len(M)-1:
return(i-j)
else:
i=i+1
j=j+1
else:
if j > 0:
j=F[j-1]
else:
i=i+1
return -1
Explication des lignes 3 et 4 :
Quelles lignes correspondent au cas où on a trouvé le mot?
Que fait le programme dans ce cas ?
Quelles lignes correspondent au cas où on a trouvé deux lettres identiques?
Que fait le programme dans ce cas?
Quelles lignes correspondent au cas où on a trouvé deux lettres différentes?
Que fait le programme dans ce cas ?
1 def triinsertion(L):

J. 201173
1 def recherchedichotomique(a,L):
h('CCC') :
h('ACG') :
h('GAG') :
1 def eval(P,b):
1 def hornerrec(P,b):
2 if
if
return
3
4 else:
5
6
s1 = P[0:len(P)-1]
7
return
Q21
Questions fréquentes
3 questionsSur quels chapitres porte l'épreuve d'informatique commune TSI 2020 ?Afficher ou masquer la section
Questions fréquentes
3 questionsSur quels chapitres porte l'épreuve d'informatique commune TSI 2020 ?
Elle porte sur la manipulation de chaînes de caractères, la complexité et la terminaison d'algorithmes, la recherche de motifs (algorithme naïf, Knuth-Morris-Pratt, hachage), le tri par insertion, la récursivité et les bases de données.
Quelles erreurs le jury a-t-il le plus relevées à l'informatique commune TSI 2020 ?
Une notion de terminaison mal maîtrisée, des confusions entre chaîne de caractères et liste, un tri par insertion mal appliqué et de nombreuses erreurs de syntaxe Python comme l'oubli des deux-points après if.
Le sujet d'informatique commune TSI 2020 est-il faisable en première année ?
Une partie du sujet mobilise des notions de première année comme la manipulation de chaînes de caractères et les bases de données, mais il recourt aussi au tri et à la récursivité, vus en deuxième année.
Pas de description pour le moment
