Adloun

Ce qui casse quand les activités sont pondérées

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 16 — Algorithmes gloutons

Énoncé

On reprend la sélection d'activités, mais chaque activité rapporte un poids et l'on veut maximiser le poids total. Le glouton « fin la plus tôt » reste-t-il optimal ?

Corrigé

Non, et il s'effondre. Le plus petit contre-exemple tient en deux activités :

Instanceglouton « fin la plus tôt »optimum
de poids ; de poids 1100
; ; 25
; ; ; 1118

Sur la première, le glouton prend parce qu'elle finit plus tôt, et perd un facteur . Sur instances de quatre activités tirées au hasard, il s'est trompé fois, soit .

Pourquoi la preuve du cours ne survit pas. L'argument d'échange remplaçait par « sans diminuer le cardinal ». Avec des poids, l'échange remplace par , et rien ne dit que : l'activité qui finit le plus tôt peut être la moins rémunératrice. L'étape 2 du patron — « substituer sans perdre en qualité » — est fausse, et le patron tombe avec elle.

Aucun glouton ne marche. On pourrait essayer « le poids le plus fort d'abord » : il échoue sur de poids contre de poids et de poids , qui totalisent . Ou « le meilleur rapport poids/durée » : il échoue aussi. C'est structurel, et non un manque d'imagination.

La méthode qui résout ce problème est la programmation dynamique du chapitre chap:dynamique — le programme cite d'ailleurs l'« ordonnancement de tâches pondérées » précisément dans cette rubrique. On trie par fin croissante, on note le plus grand indice compatible avec , et

en — le tri, plus une recherche dichotomique par activité pour .

La leçon. Le cas non pondéré est le cas pondéré avec tous les poids égaux à . Un glouton exact peut donc être exactement le cas particulier d'un problème que la méthode gloutonne ne sait pas résoudre. Devant un problème d'optimisation, avant d'écrire un glouton, il faut donc chercher si une généralisation naturelle le casse : si oui, l'optimalité tenait à une coïncidence, et il faut la démontrer avec soin — ou bien changer de méthode.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.