Corrigé CCINP 2026 Informatique PC-PSI — Partie II (Q6 à Q14) : Classification de spectres de galaxies par les k-moyennes
Sujet officiel du concours CCINP, session 2026, épreuve Informatique PC-PSI. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Un spectre est une liste de flottants. La distance entre deux spectres est
Les fonctions min, max, sum, .sort() sont interdites.
Q6. Principe de l'algorithme des -moyennes ; rôle de .
Q7. Écrire distance(S1, S2).
Certaines valeurs défectueuses sont remplacées par None.
Q8. Écrire positions_a_rejeter(S1, S2) : liste des indices où S1[i] ou S2[i] vaut None.
Q9. Écrire est_absent(element, L) ; complexité en fonction de len(L).
Deux fonctions ignorent les positions de a_rejeter (longueur ) ; toutes deux posent m = N - len(a_rejeter) et renvoient (d/m)**0.5 :
distance2: pouridansrange(N), siest_absent(i, a_rejeter), ajoute(S1[i]-S2[i])**2àd;distance3: copieS1etS2(.copy()), met à0dans les deux copies chaque position dea_rejeter, puis ajoute àdles carrés des différences des copies pour toutiderange(N).
Q10. Énoncer un invariant de boucle utile pour prouver distance2.
Q11. Complexités de distance2 et distance3 en fonction de et .
On suppose désormais les spectres sans défaut. spectres est une liste de spectres, centroides une liste de centroïdes (barycentres de groupes, listes de flottants), partitionnement une liste de entiers : partitionnement[i] est l'indice du centroïde le plus proche de spectres[i]. On dispose de calcule_centroides(partitionnement, spectres) (barycentres des groupes), initialise(k, spectres) ( spectres tirés au hasard) et trouve_centroide_le_plus_proche(S, centroides) (un indice).
Q12. Écrire produit_partition(spectres, centroides), qui renvoie le partitionnement (exemple : [1, 2, 1, 1, 0]).
Q13. Écrire k_moyennes(spectres, k), qui renvoie centroides et partitionnement ; on s'arrête quand le partitionnement ne change plus.
Nombre de groupes inconnu : (1) partir de spectres ; (2) appliquer les -moyennes ; (3) retirer des spectres le groupe le plus peuplé ; (4) s'il reste plus de spectres, revenir en (1). On dispose de principal_et_reste(partitionnement, spectres), qui renvoie la liste des spectres du groupe majoritaire et la liste des autres.
Q14. Écrire groupes_de_spectres(spectres), qui renvoie la liste des groupes extraits (les spectres restants sont abandonnés).
Corrigé
Q6. Les -moyennes sont un algorithme de classification non supervisée (partitionnement, « clustering ») : on dispose de points (ici des spectres, vus comme des vecteurs de ) sans étiquette, et l'on cherche à les répartir en groupes de points proches les uns des autres. L'algorithme :
- choisir centroïdes initiaux (par exemple points tirés au hasard) ;
- affecter chaque point au groupe du centroïde le plus proche ;
- remplacer chaque centroïde par le barycentre (la moyenne) des points de son groupe ;
- recommencer en 2 jusqu'à ce que les affectations ne changent plus.
Chaque étape fait décroître (au sens large) l'inertie ; l'algorithme converge, mais vers un minimum local qui dépend de l'initialisation. Le paramètre est le nombre de groupes (de classes) recherchés, fixé à l'avance par l'utilisateur.
Ce que le correcteur attend : ne pas confondre avec les plus proches voisins (Q15) : ici n'est pas un nombre de voisins, et il n'y a pas de données de référence étiquetées.
Q7. Une boucle sur les indices, un accumulateur, puis la moyenne et la racine :
def distance(S1, S2):
N = len(S1)
somme = 0
for i in range(N):
somme = somme + (S1[i] - S2[i]) ** 2
return (somme / N) ** 0.5
Coût . Test : distance([0,0,0,0], [1,1,1,1]) renvoie 1.0.
Q8. Une seule condition composée par indice, pour ne pas ajouter deux fois un indice où les deux valeurs manquent :
def positions_a_rejeter(S1, S2):
a_rejeter = []
for i in range(len(S1)):
if S1[i] is None or S2[i] is None:
a_rejeter.append(i)
return a_rejeter
Les indices sont ajoutés dans l'ordre croissant et sans doublon ; coût .
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.