
1 Introduction
[[information]] | Ce tutoriel a été initialement rédigé par bluestorm, lastsseldon et Cygal
Vous venez d’apprendre les bases d’un langage de programmation ? Vous vous êtes peut-être
rendu compte que parfois, en modifiant un peu votre programme, vous pouvez obtenir le même
résultat mais 2, 10 ou 1000 fois plus vite ?
De telles améliorations ne sont pas le fruit du hasard, ni même dues à une augmentation de la mé-
moire vive ou à un changement de processeur : il y a plusieurs manières de programmer quelque
chose et certaines sont incroyablement meilleures que d’autres.
Avec un peu de réflexion, et des outils théoriques de base, vous serez vous aussi en mesure de faire
de bons choix pour vos programmes. À la fin de ce tutoriel, vous serez de meilleurs développeurs,
en mesure de comprendre, corriger et concevoir des programmes plus efficaces.
1.1 But du tutoriel
Les deux notions clés de ce tutoriel sont les suivantes : la complexité, et les structures de don-
nées. La complexité est une manière d’estimer les performances d’un algorithme. Les structures
de données sont la manière dont vous organisez les informations dans votre programme. En choi-
sissant une structure de données adaptée, vous serez capables de coder des opérations très per-
formantes (de faible complexité).
Chaque algorithme résout un problème donné. Pour chaque problème, il existe un ou plusieurs
algorithmes intéressants (mais on en découvre de nouveaux tous les ans !). Nous vous présente-
rons, dans ce tutoriel, un petit panorama de problèmes “courants”, dans le but de vous familiari-
ser avec la complexité et les structures de données. Vous apprendrez par exemple à chercher un
élément qui vous intéresse à l’intérieur d’un ensemble d’éléments, à trier un ensemble, ou même
à trouver le plus court chemin d’un “endroit” à un autre.
1.2 Prérequis
Le but de ce tutoriel n’est pas de vous apprendre à programmer. Pour le lire, vous devez déjà
savoir programmer. L’apprentissage de l’algorithmique n’utilise pas de concepts bas niveau (as-
sembleur, etc.) ou de bibliothèques logicielles spécialisées (SDL, Qt…), mais vous devez être à
l’aise avec les variables, conditions, boucles et fonctions. La connaissance du concept de ‘récursi-
vité’ (si vous vous sentez en manque, il y a déjà un tuto à ce sujet sur le ZDS) est aussi un avantage.
Le langage que vous utilisez n’est pas très important, car on tentera de formuler les algorithmes
d’une manière qui en est indépendante. Nous donnerons aussi, pour les curieux, des exemples
dans quelques langages de programmation. Si vous n’y voyez pas le vôtre, trouvez-en un suffi-
samment proche, et faites un petit effort. :)
5