Corrigé Mines-Ponts 2025 Informatique commune MP-PC-PSI — Partie 4 (Q7 à Q11) : Glouton par rapport profit sur ressource, tri par insertion, contre-exemple
Sujet officiel du concours Mines-Ponts, session 2025, épreuve Informatique commune MP-PC-PSI. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Stratégie gloutonne (un choix fait n'est jamais remis en cause) :
- on calcule pour chaque objet le rapport , rangé dans une liste
Lqi, et l'on crée la listeLides indices, initialementLi[i]; - on trie
Lqipar ordre décroissant en déplaçantLide la même façon, de sorte queLi[j]reste l'indice dansobjde l'objet dont le rapport est en position ; - partant de la ressource disponible , on choisit l'objet de plus grand rapport tel que ;
- on remplace par et l'on recommence en 3 tant qu'un objet peut encore être ajouté.
La fonction construitLi(obj) réalise les étapes 1 et 2 : une première boucle remplit Lqi (ligne 5 à compléter) et Li ; la seconde est un tri par insertion décroissant de Lqi (pour de à : x=Lqi[i], puis tant que j>0 et Lqi[j-1]<x, décalage de Lqi[j-1] en Lqi[j]), où les mises à jour de Li sont à compléter (lignes 12 et 15). Un second programme (lignes 1 à 8) réalise les étapes 3 et 4 : S=len(obj)*[0], Li=construitLi(obj), j=0, une boucle while (ligne 4) contenant un test if …<=b (ligne 5), deux affectations de S et de b (lignes 6, 7), puis j+=1. On admet qu'un tri optimal coûte dans le pire des cas.
Q7. Pour obj=[(2,3),(1,4),(4,4)] et , expliquer quelle solution le glouton construit.
Q8. Compléter les lignes 5, 12 et 15 de construitLi.
Q9. Identifier le meilleur et le pire des cas du tri employé, avec leurs complexités justifiées.
Q10. Compléter les lignes 4, 5, 6 et 7 du programme glouton.
Q11. Sur le même exemple, donner la solution optimale ; conclure sur la pertinence du glouton.
Corrigé
Q7. Les rapports profit/ressource valent
d'où l'ordre décroissant : objet , objet , objet (Li ).
- Objet : , on le prend ; il reste .
- Objet : , on le prend ; il reste .
- Objet : , on ne peut pas le prendre ; plus aucun objet n'est ajoutable.
Le glouton construit , de profit pour ressources consommées sur .
Q8. Fonction complétée (les lignes ajoutées sont commentées) :
def construitLi(obj):
Lqi=[]
Li=[]
for i in range(len(obj)):
Lqi.append(obj[i][1] / obj[i][0]) # ligne 5 : q_i = p_i / r_i
Li.append(i)
for i in range (1,len(Lqi)):
x=Lqi[i]
j=i
while j>0 and Lqi[j-1]<x:
Lqi[j]=Lqi[j-1]
Li[j]=Li[j-1] # ligne 12
j-=1
Lqi[j]=x
Li[j]=i # ligne 15
return Li100 % 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é.