Je résous de nombreux problèmes, principalement avec Top Coder. J'obtiendrai des réponses pour beaucoup, mais la plupart du temps je me retrouve avec une solution inefficace.
Dans les implémentations réelles - est-il vraiment important qu'une solution au problème soit efficace? Si oui, comment puis-je l'améliorer?
problem-solving
Fourmis
la source
la source
Réponses:
La meilleure solution est celle qui est (par ordre d'importance croissante) efficace, maintenable et faite .
^^^ C'est la seule chose que vous devez vraiment retenir de cette réponse. ^^^
L'efficacité est importante . Peut-être un peu moins qu'auparavant en raison de notre abondance de matériel, mais les performances sont une fonctionnalité . Dans un concours, l'efficacité est évidemment importante. Vous devez savoir comment écrire du code efficace. Plus important encore, vous devez connaître les meilleures pratiques qui produiront un code efficace et performant sans sacrifier la rapidité ou la maintenabilité d'une application. C'est vraiment là que la profondeur de l'expérience avec une plate-forme et un langage renvoie de nombreux rendements.
Mais le plus important (dans 95% des cas) est d'avoir une solution finie et maintenable. Sans produit fini , peu importe l' efficacité ou la maintenabilité de la solution. S'il vous faut un temps extraordinaire pour suivre et corriger un bogue ou ajouter une nouvelle fonctionnalité, peu importe l'efficacité de la solution. Mais, l'efficacité et les performances sont sans aucun doute importantes, quoi que l'on puisse dire.
la source
Je suis d'accord avec Mike Cellini, la seule chose que j'ajouterais est.
Quelque chose est-il "assez efficace"? Par exemple, du point de vue de l'utilisateur, il n'y a pas beaucoup de différence entre une fonction qui se termine en 0,00001 seconde ou une qui se termine en 0,1 seconde même si l'une est beaucoup plus efficace que l'autre. Une fonction qui se termine en 10 minutes n'est pas très différente (pour l'utilisateur) d'une fonction qui se termine en 12 minutes. Dans les deux cas, l'utilisateur prendrait une tasse de café ou entreprendrait une autre tâche.
J'en suis venu à voir l'efficacité comme «un utilisateur efficace» et non comme un algorithme efficace.
la source
En général, la solution la plus importante à un problème sera celle qui existe réellement et est valable pour les cas tels qu'ils existent pour votre problème. En d'autres termes, évitez l' optimisation prématurée jusqu'à ce que vous sachiez réellement que vous disposez d'un code inefficace ou d'un code efficace qui doit être plus rapide.
N'oubliez pas non plus que la meilleure solution pour votre application n'est peut-être pas la solution générale. Cas et point, il y a quelques années, un professeur a donné à notre classe un problème dans lequel nous devions imprimer les 10 premiers numéros d'un type donné (désolé, ma mémoire me fait défaut quant au type, mais c'était l'un des nombres les plus inhabituels classes) et on nous a donné un test pour vérifier que le nombre était le type donné. C'était l'étendue du problème qui nous a été donné et on nous a dit que c'était dû le lendemain avec la solution la plus efficace recevant le plein crédit. La conférence suivante, le professeur a résumé les résultats:
La solution finale a été jugée la plus efficace par le professeur. Il s'avère que le problème était en fait un exercice pour bien comprendre le problème et pas seulement pour sortir et trouver la solution la plus efficace.
Le point de ce qui précède est que, lorsqu'il s'agit de trouver une solution efficace à un problème, il est généralement préférable de passer du temps à vous assurer que vous comprenez vraiment quel est le problème avant de partir et d'écrire du code, ou d'essayer d'optimiser le code. Si vous pouvez stocker un ensemble de valeurs de référence dans un tableau constant, il vaut mieux le faire du point de vue des performances que d'essayer d'écrire un algorithme sophistiqué.
De même, n'oubliez pas que pour la plupart des applications, les développeurs eux-mêmes sont les seules personnes qui ont tendance à voir du code inefficace (quand il n'est pas inutilement inefficace!). Si vous écrivez du code propre qui ne fait exactement que ce qu'il doit faire, il y a de fortes chances que la plupart du temps, les utilisateurs ne remarquent pas de problèmes de performances lorsqu'ils travaillent avec votre programme et lorsqu'ils optimisent simplement les parties qu'ils mentionnent. vous.
la source
Cela dépend de la structure du concours, mais généralement, oui: la performance est une considération la plupart du temps, selon leur documentation . Parfois, comme dans le lien suivant, vous devez chasser, mais pour citer:
La meilleure façon de s'améliorer est d'écrire du code efficace, ce que vous faites déjà. Même si vous terminez le travail, passez du temps à en améliorer l'efficacité - même après la compétition - et cela sera payant.
Vous voulez probablement aussi investir dans la théorie, comme les livres sur les algorithmes , qui peuvent vous donner deux choses: des outils plus efficaces pour résoudre un problème spécifique et des mécanismes plus efficaces pour identifier quel est le problème que vous devez résoudre.
Enfin, les cours d'informatique sont de plus en plus disponibles en ligne et couvriront le contexte que vous devez améliorer.
la source
L'efficacité d'une solution doit dépendre d'un certain nombre de facteurs. Le plus important est de savoir ce que veut votre utilisateur. Voici quelques exemples.
Comment rendre votre code plus efficace:
Il y a tout un domaine à l'optimisation, mais les deux conseils ci-dessus devraient au moins vous aider à démarrer.
la source
Pour un concours, vous devez comprendre qui sont les juges et en quoi ils consistent - s'ils recherchent de bons codeurs et rien de plus, vous obtiendrez des félicitations pour un code plus efficace.
En règle générale, dans le monde réel, cela n'a pas d'importance. L'une des idées clés du développement de logiciels est "N'optimisez pas ce que vous ne savez pas doit être optimisé", puis "Optimisez uniquement lorsqu'il a été prouvé qu'il est nécessaire"
De nombreux praticiens soutiendront que cela conduit à un code gonflé et inefficace qui ne peut pas être facilement corrigé, et dans certains cas marginaux (ce qu'ils croiseront comme si c'est ce que font la plupart des codeurs toute la journée), ils sont corrects. Cependant, peu de projets de développement de logiciels ont des résultats mesurés "Performance: Plus rapide que nécessaire, Coût: Peu importe, Délai de livraison: Parfois cette décennie", Dans le monde réel, c'est généralement "Je le veux pas cher, je le veux hier, je veux ça marche ".
la source