Bien que d'autres réponses fournissent de bons points, je pense que je suis toujours en désaccord. Je partagerai donc mes propres réflexions sur ce point.
En bref, je pense que présenter la constante «en l'état» est au mieux une opportunité perdue. C'est peut-être le meilleur que nous puissions obtenir pour l'instant, mais c'est loin d'être idéal.
Mais d'abord, je pense qu'une brève excursion est nécessaire.
Quand avons-nous un algorithme efficace?
Quand Daniel Sank m'a demandé ce que je ferais s'il y avait un algorithme pour factoriser les nombres premiers avec un dix6accélération du facteur sur un ensemble de tests d'instances graves, j'ai d'abord répondu que je doute que cela soit dû à des améliorations algorithmiques, mais à d'autres facteurs (soit la machine, soit la mise en œuvre). Mais je pense que j'ai une réponse différente maintenant. Permettez-moi de vous donner un algorithme trivial qui peut factoriser de très grands nombres en quelques millisecondes et est néanmoins très inefficace :
- Prenez un ensemble P de (assez gros) nombres premiers.
- Calculer P2, l'ensemble de tous les composites avec exactement deux facteurs de P. Pour chaque composite, stockez la paire de nombres premiers utilisée pour le construire.
- Maintenant, quand on lui donne une instance de P2, il suffit de regarder la factorisation dans notre tableau et de la rapporter. Sinon, signalez «erreur»
J'espère qu'il est évident que cet algorithme est des ordures, car il ne fonctionne correctement que lorsque notre entrée est en P2. Cependant, pouvons-nous voir cela lorsque l'algorithme est présenté sous la forme d'une boîte noire et que "par coïncidence" teste uniquement avec lesP? Bien sûr, nous pouvons essayer de tester de nombreux exemples, mais il est très facile de faireP très grand sans que l'algorithme soit inefficace sur les entrées de P2 (peut-être que nous voulons utiliser une carte de hachage ou quelque chose).
Donc, il n'est pas déraisonnable que notre algorithme de détritus semble coïncider avec des accélérations «miraculeuses». Maintenant, bien sûr, il existe de nombreuses techniques de conception d'expériences qui peuvent atténuer le risque, mais peut-être des algorithmes «rapides» plus intelligents qui échouent encore dans de nombreux cas, mais pas assez d'exemples peuvent nous tromper! (Notez également que je suppose qu'aucun chercheur n'est malveillant , ce qui aggrave encore les choses!)
Donc, je répondrais maintenant: "Réveillez-moi quand il y a une meilleure mesure de performance".
Comment pouvons-nous faire mieux alors?
Si nous pouvons nous permettre de tester notre algorithme de «boîte noire» dans tous les cas, nous ne pouvons pas nous laisser berner par ce qui précède. Cependant, cela est impossible pour des situations pratiques. (Cela peut être fait dans des modèles théoriques!)
Ce que nous pouvons faire à la place est de créer une hypothèse statistique pour un certain temps d'exécution paramétré (généralement pour la taille d'entrée) pour tester cela, peut-être adapter notre hypothèse et tester à nouveau, jusqu'à ce que nous obtenions une hypothèse que nous aimons et rejeter le null semble raisonnable. (Notez qu'il y a probablement d'autres facteurs impliqués que j'ignore. Je suis pratiquement mathématicien. La conception d'expériences ne fait pas partie de mon expertise)
L'avantage de tester statistiquement un paramétrage (par exemple notre algorithme O ( n3)? ) est que le modèle est plus général et qu'il est donc plus difficile d'être «triché» comme dans la section précédente. Ce n'est pas impossible, mais au moins les affirmations statistiques sur le caractère raisonnable de cette décision peuvent être justifiées.
Alors, que faire des constantes?
Je pense que dire "dix9 speedup, wow! "est une mauvaise façon de traiter cette affaire. Mais je pense aussi que le fait de ne pas tenir compte de ce résultat est également mauvais.
Je pense qu'il est très utile de considérer la constante curieuse comme une anomalie , c'est-à-dire que c'est une affirmation qui en soi mérite une enquête plus approfondie. Je pense que créer des hypothèses basées sur des modèles plus généraux que simplement «notre algorithme prend X fois» est un bon outil pour le faire. Donc, même si je ne pense pas que nous puissions simplement prendre le contrôle des conventions CS ici, ignorer complètement le «dédain» pour les constantes est également une mauvaise idée.