Soit le problème suivant à résoudre (trouver le principe de codage permettant de dire que SEND+MORE= MONEY.

  S E N D
  M O R E
---------
M O N E Y
Il s'agit de trouver une bijection entre les lettres et des chiffres (S et M ne pouvant être nuls) pour que l'addition soit correcte en base 10. Le seul algorithme que je connaisse consiste à faire 8 boucles imbriquées de 0 à 9 pour essayer toutes les valeurs possibles pour chacune des lettres : il est typiquement exponentiel. Mais, grace à mes connaissances, je vais résoudre ce problème en temps linéaire :


J'ai donc résolu en temps quasi-linéaire un problème pour lequel le seul algorithme connu est exponentiel. Miracle? Non :

 

algorithme heuristiques
temps de calcul 10^n n + epsilonn
taille du programme 3*n ?

 

La taille du "programme " que j'ai utilisé se mesure probablement en téra-octets, puisque j'ai fait appel à des heuristiques (connaissances) extrèmement nombreuses, variées, complexes à mettre en oeuvre, issues de ma formation, de mon expérience, etc.

Peut-on écrire, et maintenir, un tel programme? Non, en général.

Si je veux avoir une chance de pouvoir résoudre ce type de problème, il