J'aime la façon dont "Introduction aux algorithmes" par Cormen et al. transmet des connaissances. L'une des raisons est que tout a à voir avec les problèmes de programmation et que le livre n'est pas implémenté dans un langage de programmation particulier. Cette indépendance linguistique met l'accent sur les idées en général.
Donc ma question est, comme il est dit dans le titre. Est-ce que chaque problème de programmation résoluble peut être résolu en pensant de cette manière algorithmique. Peu importe la langue, le domaine, etc.? Si oui, donnez des arguments, sinon, donnez des arguments!
Je n'ai pas implémenté de nombreux programmes complexes avec GUI, AI, Graphics, etc ... Mais ces types de problèmes sont-ils aussi une question de réflexion sur de bons algorithmes?
la source
Réponses:
Cela dépend de la façon dont vous définissez "Problème de programmation".
Dans les projets du monde réel, la réponse est définitivement un NON clair. La plupart des problèmes ne sont même pas des problèmes techniques, mais des problèmes de communication, des exigences qui ne sont pas claires, etc.
Ensuite, vous avez des sujets entiers de classes de problèmes qui ne nécessitent pratiquement aucun algorithme. Par exemple, les interfaces graphiques sont souvent simples à "programmer", mais le problème réel impliqué est d'avoir une bonne conception (du point de vue de l'utilisabilité, pas seulement de l'apparence graphique).
Il y a certains domaines, où les problèmes ont tendance à être beaucoup plus algorithmiques de par la nature de ce champ. Par exemple, l'IA est un sujet primordial, où les algorithmes sont au cœur. Les graphiques peuvent nécessiter beaucoup d'algorithmes, mais cela dépend de ce que l'on entend exactement par "Programmation graphique".
En général, si le problème que vous résolvez par programme convient à une représentation mathématique, vous entrez dans la zone algorithmique. Bien sûr, ce n'est qu'un indicateur approximatif, car vous pouvez créer des modèles mathématiques pour à peu près tout. Mais pour la plupart des choses, vous n'envisageriez pas normalement de le faire.
Dernier exemple: si le problème est de créer une interface graphique qui permet de saisir des données pour des objets métier, vous ne pensez pas beaucoup aux formulations mathématiques. Si, cependant, le problème est de créer une interface graphique qui change dynamiquement et déplace des éléments en fonction d'une valeur d'importance, vous êtes beaucoup plus susceptible de vous retrouver avec un modèle mathématique et une implémentation algorithmique.
la source
i++
comme notre nouvel algorithme de suzerain .. euh ..Qu'entendez-vous par problème de programmation?
Selon Wikipedia:
ce qui signifie que la programmation en général est intrinsèquement plus volumineuse que la traduction d'algorithmes via du code.
Pour vous donner un exemple, un problème de programmation que j'ai en ce moment est que je dois gérer un code source spaghetti hérité en ajoutant des tests unitaires, puis en le refactorisant . Cela implique également d'ajouter des commentaires aux bons endroits, de normaliser la capitalisation des noms, etc. Cela n'a rien ou peu à voir avec les algorithmes.
De la même manière, de nombreuses tâches de développeur ne sont pas liées aux algorithmes. Exemple: l'internationalisation. De la même manière, de nombreuses applications (CRUD, par exemple) n'utilisent pas trop d'algorithmes dans leur code source (sans parler du code sous-jacent du framework).
Maintenant, si vous supposez que dans "problème de programmation", "programmation" est synonyme de traduction d'algorithmes à travers du code, alors oui, logiquement tout problème serait un problème d'algorithme:
A × n = B × n
siA = B
.la source
Je pense que la réponse est catégoriquement non . Les algorithmes ne sont que des blocs de construction dans un ensemble de compétences beaucoup plus large.
J'ai obtenu mon diplôme en CS, spécialisé en IA
Là, le problème fondamental, du moins tel que je l'ai vu, était de trouver de bonnes représentations pour l'information. Ces représentations devraient essayer d'être de bonnes correspondances avec les structures de connaissances qui sont dans la tête des gens, et devraient faciliter les types de manipulations et de modifications qui y sont faites.
En termes de programmation au jour le jour, cela signifie que le problème de base est d'identifier le langage spécifique au domaine (DSL) adapté à la situation actuelle. Il existe de nombreuses façons de créer des DSL. La programmation ordinaire, où les classes, les variables et les méthodes sont définies, crée en fait un DSL car elle vous permet de dire des choses (mapper vos structures mentales au code) que vous ne pourriez pas dire sans elles.
Les algorithmes sont également importants, mais ils ne sont qu'une partie de l'histoire.
la source
Je suppose que vous pourriez dire que tous les programmes informatiques sont des algorithmes, car vous prescrivez une séquence d'instructions pour obtenir le résultat souhaité. Cependant, certains des problèmes les plus difficiles ne sont pas liés à la communication d'un programme à un ordinateur, mais à la communication d'un programme à des humains qui testeront et modifieront le logiciel.
En d'autres termes, les ordinateurs se moquent de savoir si votre code est complètement incompréhensible pour les humains. Ils le feront très bien de toute façon. Le défi consiste à rendre le code suffisamment clair pour que tous les bogues ressortent comme un pouce endolori.
Fait intéressant, les choses techniques que j'ai apprises au collège sur les algorithmes ont longtemps été éclipsées par ce que j'ai appris par moi-même depuis lors. À ce stade, si je voulais obtenir un 3e diplôme universitaire pour m'aider dans mon travail, ce serait en composition anglaise.
la source
La plupart des problèmes de programmation sont en fait des problèmes d'administration système.
C'est une sorte de réponse désinvolte, mais j'ai trouvé que c'est vrai plus souvent qu'on ne pourrait s'y attendre. Je ne sais pas combien de fois j'ai rencontré des échecs parce que DNS a été mal configuré sur la machine de test, un processus obsolète est toujours en cours qui accapare CPU / mémoire / ports, le programme fonctionne avec le mauvais ID utilisateur et a donc le mauvais autorisations, le disque a été partitionné de manière incorrecte et donc l'espace est épuisé, la mauvaise version du fichier de configuration a été installée, etc.
Obtenir les bons algorithmes n'est généralement qu'une petite partie du problème. Le reste du problème consiste à mettre le programme au travail pour résoudre de vrais problèmes dans le monde réel.
la source
Je pense que oui, tous les problèmes de programmation peuvent être résolus en pensant de manière algorithmique. Après tout, un algorithme n'est qu'un ensemble d'instructions qui indique à l'ordinateur quoi faire.
Prenant certains des exemples ci-dessus
En termes de programmation et même de conception, vous connaîtrez les modèles / règles qui conduisent à des conceptions GUI efficaces, conviviales et efficaces. Ces règles doivent être réduites à un algorithme qui, s'il est suivi, devrait aider à produire une interface graphique conviviale. En fait, les étapes réelles de placement des contrôles sur l'interface graphique peuvent également être réduites à un algorithme
Mais la manière dont vous envisagez d'ajouter des tests unitaires peut être décrite par un algorithme tel que
Le problème avec la plupart des réponses Oui est que les gens pensent aux algorithmes en termes de tri rapide, de tri par bulles au lieu d'un ensemble d'instructions qui réduit une description vague et verbeuse d'un problème à un ensemble de logiques / règles clairement définies.
la source