CCINP Informatique Commune TSI 2024Sujet et rapport du jury
- Graphes : représentation par listes d'adjacence
- Algorithmes gloutons
- Complexité des algorithmes
- Bases de données relationnelles et SQL (jointures, agrégation)
- Manipulation de listes en Python
Téléchargements
- Corrigé : pas encore disponible
Présentation du sujet
Difficulté moyenneColoration de graphes (algorithmes gloutons, Welsh-Powell, DSATUR) et interrogation d'une base de données géographiques en SQLAfficher ou masquer la section
Présentation du sujet
Difficulté moyenneLe sujet aborde la thématique des graphes, une nouveauté du programme d'informatique. La première partie étudie trois algorithmes gloutons de coloration de graphe, chacun raffinant le précédent (un algorithme intuitif, puis Welsh-Powell, puis DSATUR plus difficile à implémenter), avant un détour par la notion de clique. La seconde partie propose des requêtes SQL classiques sur une base de données géographiques : requête simple, jointure, agrégation et une question plus difficile à plusieurs approches possibles.
- 1Partie I : des algorithmes pour colorer un grapheTrois algorithmes gloutons de coloration (intuitif, Welsh-Powell, DSATUR) visant à minimiser le nombre de couleurs, puis la notion de clique.
- 2Partie II : interrogation d'une base de données géographiquesRequêtes SQL : une requête simple, une requête avec jointure, une agrégation, et une question plus difficile.
Difficulté moyenne. Le rapport qualifie le sujet de long pour un candidat standard de TSI, mais indique qu'un barème adapté permettait d'obtenir une note honorable sans le traiter en totalité.
L'épreuve en chiffres
Moyenne 10,3 / 20 · écart-type 4,76 · 1 122 présents · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 10,3/ 20
- Écart-type
- 4,76
- Présents
- 1 122
- Coefficient
- 4
- Durée
- 3 h
Votre note sur 20 à ce sujet, en conditions de concours.
Source : document officiel du concours, épreuve du 24 avril 2024. 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
6 erreurs relevéesStructure de données pour un graphe mal justifiée · Mauvaise position du return dans une boucle · Doublons de couleurs non gérésAfficher ou masquer la section
Ce qu'a observé le jury
6 erreurs relevéesL'énoncé a été jugé clair et de difficulté croissante, portant sur une partie nouvelle du programme à laquelle les candidats ont plutôt bien réagi. Le jury note une bonne maîtrise de la manipulation des graphes par liste d'adjacence chez de nombreux candidats, mais relève aussi une maîtrise parfois approximative des bases de Python et une mauvaise gestion du temps chez certains, qui ont négligé la partie SQL plus simple.
Les erreurs les plus sanctionnées
- 1Structure de données pour un graphe mal justifiéeQ3
Il fallait discuter la complexité selon la structure choisie : test d'adjacence, liste des voisins, encombrement mémoire, ajout ou suppression d'un sommet.
« Quelle est la structure de données qui permet »
- 2Mauvaise position du return dans une boucleQ5, Q6
Le return doit être placé au sein de la boucle pour conclure à l'adjacence, mais après la boucle pour conclure à la non-adjacence.
« Attention à la position des « return »
- 3Doublons de couleurs non gérésQ9
De nombreux candidats oublient de gérer les doublons dans la liste des couleurs des voisins.
« De nombreux candidats ont oublié de gérer les doublons dans les couleurs des voisins. »
- 4Complexité incohérente avec le codeQ18
La complexité annoncée doit être cohérente avec le code réellement proposé par le candidat.
« Question de complexité mal traitée ; là aussi les correcteurs attendaient une cohérence avec le code »
- 5Jointure SQL mal maîtriséeQ29
La technique de jointure entre deux tables n'est pas toujours maîtrisée.
« cette technique n'est pas toujours maîtrisée »
- 6Fonction SUM peu connueQ30
La fonction d'agrégation SUM n'est pas toujours connue des candidats.
« La fonction « SUM » n'est pas toujours connue. »
Ce qui a été bien réussi
- Les questions 1, 2, 4, 8, 10 et 11 sont bien traitées par de nombreux candidats.
- La première requête SQL (Q28) est bien traitée.
- Certains candidats montrent une belle finesse dans la manipulation des objets et des concepts.
Conseils du jury
- Justifier le choix d'une structure de données pour un graphe par sa complexité (adjacence, voisinage, mémoire).
- Vérifier la position du "return" dans une boucle de test.
- Gérer son temps : ne pas négliger la partie SQL plus simple au profit de la partie graphes plus difficile.
- Soigner la présentation des requêtes SQL (mots-clés en majuscules, retours à la ligne réguliers).
- Justifier une complexité en cohérence avec le code écrit, sans se contenter de mentionner une "simple boucle".
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
Pas encore de corrigé pour ce sujet : voici des sujets proches corrigés.
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
INFORMATIQUE
Durée : 3 heures
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, bleu clair ou turquoise, 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 deux parties indépendantes.
- Texte du sujet : page 2 à page 7
- Annexes : page 7 à page 8
- Document Réponse : 12 pages
Colorer un graphe
Étudier ces techniques de coloration revient de façon plus abstraite à travailler sur des graphes.
Le champ d'applications de la coloration de graphes est très vaste et couvre des domaines aussi variés que le problème de l'attribution de fréquences dans les télécommunications, la conception de puces électroniques ou l'allocation de registres en compilation.
Quelques rappels de syntaxe Python figurent dans l'annexe 2.
Partie I - Des algorithmes pour colorer un graphe
I. 1 - Introduction sur un exemple
Comme les pays, les couleurs sont numérotées à partir de zéro.
À titre d'exemple, on considèrera la carte suivante (figure 1), comportant 8 pays numérotés de 0 à 7 ,

.jpg)
Le DR contient la matrice d'adjacence pré-remplie du graphe
La compléter et expliquer le processus de construction.
Donner la liste d'adjacence du graphe
Donner un avantage et un inconvénient d'une représentation par liste d'adjacence.
Le DR fournit le tableau des degrés des différents sommets du graphe
Le compléter.
1.2 - Tester si une coloration est valide
I. 3 - Un algorithme intuitif de coloration
Cette fonction ne renvoie rien mais modifie la liste C en donnant à
Par exemple, pour le graphe
L'appel colore_sommet (
Par exemple, l'application de la fonction colorer1 au graphe
Écrire une fonction colorer2 analogue à colorer1 et avec un argument supplémentaire, une liste ordre fixant l'ordre de coloration des pays.
Par exemple colorer2 (
Combien de couleurs ont-elles été utilisées?
L'objectif des sous-parties suivantes est d'affiner la stratégie pour mieux choisir cet ordre de coloration.
I. 4 - Variante de Welsh-Powell
Comme le degré d'un sommet est un entier positif, il est possible d'écrire un algorithme de tri efficace (dit par répartition).
Q13. Écrire une fonction degre avec pour argument la liste d'adjacence LA d'un graphe quelconque, qui renvoie la liste des degrés des sommets du graphe.
Par exemple, pour un graphe de liste d'adjacence
Par exemple, init (3) renverra [[], [], []].
Ainsi, pour l'exemple de la question Q13, l'appel ranger (LA) renverra la liste
Par exemple, renverse (
Par exemple, pour un graphe de liste d'adjacence
Quelle est la complexité de colorer3 dans le pire des cas pour un graphe à
La méthode suivante, proposée en 1979 par Danier Brélaz de l'École Polytechnique Fédérale de Lausanne, raffine la détermination de l'ordre de coloration. La priorité de coloration est ainsi recalculée après chaque traitement d'un sommet et non plus une fois pour toute au départ. Au final, cette approche fournit rapidement une coloration optimale dans un très grand nombre de cas.
I. 5 - Algorithme DSATUR
Q21. Écrire une fonction degre_satur avec 3 arguments, une liste d'adjacence LA, un sommet s du graphe, une liste C de couleurs. Cette fonction renvoie le degré de saturation du sommet s . On rappelle que le sommet i est coloré si et seulement si C[i] est différent de -1 .
On notera qu'il s'agit d'une liste car plusieurs sommets peuvent avoir le même degré de saturation. On supposera de plus qu'il reste au moins un sommet non coloré.
- déterminer parmi les sommets non colorés ceux de degré de saturation maximale ;
- si plusieurs sommets non colorés ont un degré de saturation maximale, en choisir un parmi ceux-ci qui soit de degré maximal ;
- colorer le sommet choisi en lui attribuant la couleur disponible ayant la plus petite valeur.
l. 6 - Un minorant du nombre de couleurs nécessaires
Par exemple, sur le graphe
Enfin, on note
Q25. Justifier que le nombre minimum de couleurs pour colorer un graphe est supérieur ou égal au nombre
Montrer également que :
Sur le DR, compléter la fonction minoration_nb_couleurs ayant pour argument la liste d'adjacence LA d'un graphe, qui renvoie le cardinal de la plus grande clique du graphe considéré.
Partie II - Interrogation d'une base de données géographiques
- La table Continents constituée des champs suivants :
- nom : nom du continent (chaîne de caractères);
- surface : surface du continent en kilomètres carrés (entier).
- La table Pays constituée des champs suivants :
- nom : nom du pays (chaîne de caractères);
- code_pays : identifiant unique du pays (chaîne de caractères);
- capitale : capitale administrative du pays (chaîne de caractères);
- population : nombre d'habitants du pays (entier).
- La table Inclusion constituée des champs suivants :
- code_pays : identifiant unique du pays (chaîne de caractères);
- continent : nom du continent auquel appartient le pays (chaîne de caractères).
- La table Frontieres constituée des champs suivants :
- code_pays1 : identifiant unique du premier pays (chaîne de caractères);
- code_pays2 : identifiant unique du second pays (chaîne de caractères);
- longueur : longueur en kilomètres de la frontière entre pays1 et pays2 (nombre flottant strictement positif).
On a toujours code_pays1<code_pays2 pour l'ordre lexicographique, ce qui assure que chaque frontière n'apparaît qu'une fois dans la table Frontieres.
ANNEXE 1 - Base de données géographiques
| nom | surface |
| 'Asie' | 44579000 |
| 'Europe' | 9938000 |
|
|
|
| nom | code_pays | capitale | population |
| 'Albanie' | 'AL' | 'Tirana' | 3088385 |
| 'Algerie' | 'DZ' | 'Alger' | 44487616 |
|
|
|
|
|
| code_pays | continent |
| 'AL' | 'Europe' |
| 'DZ' | 'Afrique' |
|
|
|
| code_pays1 | code_pays2 | longueur |
| 'AL' | 'GR' | 282.8 |
| 'AL' | 'MK' | 151.5 |
|
|
|
|
ANNEXE 2 - Rappels de syntaxe Python
| Test d'appartenance |
|
||||||||||||
| Définir une liste |
|
||||||||||||
| Ajouter un élément à la fin d'une liste |
|
||||||||||||
| Ajouter tous les éléments d'une liste L1 à la fin d'une liste L |
|
||||||||||||
| Obtenir les combinaisons d'une taille donnée d'une liste |
|
FIN

DOCUMENT RÉPONSE
| Sommet | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Degré |
Q7. Complexité temporelle dans le pire des cas de coloration_valide
def colore_sommet (C, s, LA) :
\# on détermine la liste des couleurs des voisins de s déjà colorés
coul_vois = []
\# coul_vois est maintenant déterminée et on recherche la
\# plus petite couleur, notée num_coul, absente de coul_vois:
\# la valeur num_coul trouvée devient la couleur du sommet $s$ :

Q12. Liste des couleurs renvoyée par colorer2 pour
NE RIEN ÉCRIRE DANS CE CADRE
Q14. Fonction init
Q15. Fonction ranger
Q16. Fonction renverse
Q17. Fonction trier_sommets
Q19. Fonction colorer3
![]() |
Numéro de table |
|
|||||||||||||
| Prénom:
|
|||||||||||||||
| Né(e) le |
|
|
|
||||||||||||
|
|
||||||||||||||
|
|
||||||||||||||
|
|||||||||||||||
Q22. Fonction liste_satur
def colorer4(LA):
n = # nombre de sommets du graphe
D = # liste des degrés des sommets du graphe
C # initialisation de la liste des couleurs
while :
# liste des sommets non colorés de degré de saturation maximal
Ls =
# en cas d'égalité, recherche du sommet de degré maximal
# coloration du sommet prioritaire
return C
Q26. Fonction est_clique
Q27. Compléter la fonction selon les instructions de l'énoncé
from itertools import combinations
def minoration_nb_couleurs(LA):
n = # nombre de sommets du graphe
S = [ k for k in range(n) ] # liste des sommets du graphe
i =
test = True
while test:
for K in combinations(S,i):
i=i-1
return
Q28. Requête
SQL
Q29. Requête
Questions fréquentes
4 questionsSur quoi porte le sujet d'informatique CCINP TSI 2024 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quoi porte le sujet d'informatique CCINP TSI 2024 ?
Sur la coloration de graphes avec trois algorithmes gloutons (dont Welsh-Powell et DSATUR) et sur l'interrogation en SQL d'une base de données géographiques.
Le sujet d'informatique CCINP TSI 2024 est-il faisable en TSI ?
Le rapport le juge plutôt long pour un candidat standard, mais un barème adapté permettait d'obtenir une bonne note sans tout traiter.
Quelles erreurs reviennent le plus en info CCINP TSI 2024 ?
Une structure de données mal justifiée pour un graphe, des erreurs de placement du "return", un oubli de gestion des doublons et une syntaxe SQL imprécise (jointures, fonction SUM).
Le sujet CCINP info TSI 2024 contient-il des questions de bases de données ?
Oui, la partie II porte sur des requêtes SQL : une requête simple, une jointure, une agrégation et une question plus difficile.
Pas de description pour le moment

