Si la variante C nécessite x heures de moins, alors j'investirais ce temps pour laisser les algorithmes fonctionner plus longtemps/encore une fois.
"Investir" n'est pas le bon mot ici.
-
Construire une implémentation fonctionnelle en Python. Vous terminerez cela bien avant de terminer une version C.
-
Mesurer les performances avec le profileur Python. Corrigez les problèmes que vous trouvez. Modifiez les structures de données et les algorithmes si nécessaire pour vraiment faire cela correctement. Vous aurez terminé ce travail bien avant de terminer la première version en C.
-
Si c'est toujours trop lent, traduisez manuellement le Python bien conçu et soigneusement construit en C.
En raison de la façon dont le recul fonctionne, faire la deuxième version à partir de Python existant (avec les tests unitaires existants, et avec les données de profilage existantes) sera toujours plus rapide que d'essayer de faire le code C à partir de zéro.
Cette citation est importante.
La règle de Thompson pour les constructeurs de télescopes débutants
Il est plus rapide de faire un miroir de quatre pouces, puis un miroir de six pouces, que de faire un miroir de six pouces.
Bill McKeenan
Institut Wang
54 votes
Même si Python perd sur les benchmarks, gardez à l'esprit que ce ralentissement de 50x ou 100x est toujours négligeable si le calcul se termine en quelques secondes en Python, et n'est même pas vrai si vous faites beaucoup d'E/S ou si vous avez un algorithme horrible. Plutôt que de demander "combien Python est plus lent ?", vous devriez demander "Python est-il assez rapide ?". (et il l'est très probablement, honnêtement) - c'est aussi plus rapide que de faire un benchmark ou de demander ici.
4 votes
L'implémentation d'un algorithme en python est assez rapide et directe... il suffit de le faire et de vérifier s'il est assez rapide. La plupart du temps, vous pouvez optimiser l'algorithme pour fonctionner beaucoup plus rapidement en utilisant des structures de données différentes (dict/sets au lieu de listes...) ou des opérations différentes. Quoi qu'il en soit, l'optimisation doit se faire après vous avez déjà mis en œuvre une première version de l'algorithme et l'avez étalonnée/profilée.
0 votes
@delnan : dans mon cas, tout est question de temps de calcul. Si la variante C nécessite x heures de moins, alors j'investirai ce temps pour laisser les algorithmes s'exécuter plus longtemps/encore. Je veux simplement savoir (approximativement) combien Python serait plus lent - si ce n'est que quelques heures, je n'utiliserais certainement pas un langage avec lequel je ne suis pas à l'aise (on peut ruiner les meilleures solutions aux problèmes avec de mauvaises implémentations :P).
0 votes
@delnan a raison de dire que Python est probablement assez rapide pour beaucoup de choses. Même s'il est plus lent, la facilité de développement, de maintenance et d'amélioration future sont des facteurs importants à prendre en compte.
0 votes
"x heures" ? Quelle est l'importance de ce chiffre ? Avez-vous fait une analyse comparative d'une mise en œuvre ? Avez-vous des mesures ? Avez-vous établi le profil de la mise en œuvre ? Ou essayez-vous d'optimiser prématurément la solution ?
0 votes
@user395760 si vous ne vous souciez pas des coûts du nuage, bien sûr !
0 votes
Python est peut-être assez rapide, mais est-il assez lisible ? Avez-vous déjà vu le code numpy de l'algorithme complexe ?