Le developpeur doit faire face a des problematiques au quotidien. Concevoir et realiser un programme informatique commence par analyser, comprendre, puis decouper les differents processus qui compose une action aussi simple soit-elle.
La tache de se laver les mains represente a elle seule une succession de 8 etapes, des lors ont comprends vite que les choses peuvent paraitre tres simple mais finalement elle ne sont pas. Cette action mais en evidance une notion tres importante de l'algorithmie, le fait d'identifier et de decomposer une action en plusieurs petit processus facilitant ainsi le devellopement de celui-ci. C'est aussi lors de cette etape que l'ont peut identifier des etapes dite intermediaire auquels nous ne somme pas confronter directement lors de notre premiere approche.
De nombreux outils formels ou théoriques ont été développés pour décrire les algorithmes, les étudier, exprimer leurs qualités, pouvoir les comparer. Les concepts en œuvre en algorithmique, pour les langages les plus répendus sont en petit nombre. Ils appartiennent à deux classes :
- séquences
- conditionnelles
- boucles
- constantes
- variables
- tableaux
- structures récursives (listes, arbres, graphes)
Un algorithme énonce une solution à un problème sous la forme d’un enchaînement d’opérations à effectuer.
algorithme glouton : un premier algorithme peut souvent être proposé en étudiant le problème très progressivement : on résout chaque sous-problème localement en espérant que l'ensemble de leurs résultats composera bien une solution du problème global. On parle alors d'algorithme glouton. L'algorithme glouton n'est souvent qu'une première étape dans la rédaction d'un algorithme plus performant ; diviser pour régner : pour améliorer les performances des algorithmes, une technique usuelle consiste à diviser les données d'un problème en sous-ensembles de tailles plus petites, jusqu'à obtenir des données que l'algorithme pourra traiter au cas par cas. Une seconde étape dans ces algorithmes consiste à « fusionner » les résultats partiels pour obtenir une solution globale. Ces algorithmes sont souvent associés à la récursivité ; recherche exhaustive (ou combinatoire) : une méthode utilisant l'énorme puissance de calcul des ordinateurs consiste à regarder tous les cas possibles. Cela n'est pour autant possible que dans certains cas particuliers (la combinatoire est souvent plus forte que l'énorme puissance des ordinateurs, aussi énorme soit-elle) ; décomposition top-down / bottom-up : (décomposition descendante, décomposition remontante) les décompositions top-down consistent à essayer de décomposer le problème en sous-problèmes à résoudre successivement, la décomposition allant jusqu'à des problèmes triviaux faciles à résoudre. L'algorithme global est alors donné par la composée des algorithmes définis au cours de la décomposition. La démarche bottom-up est la démarche inverse, elle consiste à partir d'algorithmes simples, ne résolvant qu'une étape du problème, pour essayer de les composer pour obtenir un algorithme global ; pré-traitement / post-traitement : parfois, certains algorithmes comportent une ou deux phases identifiées comme des pré-traitements (à faire avant l'algorithme principal), ou post-traitement (à faire après l'algorithme principal), pour simplifier l'écriture de l'algorithme général ; programmation dynamique : elle s'applique lorsque le problème d'optimisation est composé de plusieurs sous-problèmes de même nature, et qu'une solution optimale du problème global s'obtient à partir de solutions optimales des sous-problèmes.