Adloun

Algorithme, ou programme ?

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 3 — Algorithmes, programmes et complexité

Énoncé

Chacune de ces six affirmations porte sur un algorithme ou sur un programme. Laquelle, et comment le sait-on ?

Corrigé

Le critère est simple : une affirmation porte sur l'algorithme si elle reste vraie quand on change de langage et de machine. Sinon elle porte sur le programme, ou sur son exécution.

Porte surPourquoi
1l'algorithmeUn comptage d'opérations, indépendant de toute réalisation.
2l'exécutionDépend de la machine, du compilateur, de la charge. Le même programme donnera un autre chiffre demain.
3l'algorithmeLa complexité en espace est une propriété de la méthode.
4le programmeLe seuil vient du type `int` choisi. En OCaml, la limite serait ; avec des entiers de taille arbitraire, il n'y en aurait pas.
5le programmeL'algorithme mathématique s'arrête ; c'est sa mise en {œ}uvre en flottants qui ne s'arrête pas. Le chapitre l'énonce ainsi : « la boucle théorique termine ; le programme, non ».
6l'algorithmeLe pire cas est un maximum sur les entrées, pas une mesure.

Le cas 4 mérite un mot, parce qu'on le range volontiers du mauvais côté. Le débordement n'appartient pas à l'algorithme : l'algorithme d'Euclide, de la somme ou du tri ne connaît pas de . Il appartient au type choisi lors de la mise en {œ}uvre, et il disparaît si l'on en change. C'est précisément pourquoi il faut le documenter en tête de fonction : rien dans la méthode ne le laisse deviner.

Le cas 5 est le plus instructif. Il montre qu'un programme peut échouer alors que l'algorithme est correct — c'est exactement la « divergence entre le calcul théorique d'un algorithme et les valeurs calculées par un programme » que le programme officiel demande d'illustrer. Prouver un algorithme ne dispense donc jamais de tester son programme, et le chapitre chap:discipline en fait une règle.

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.