Algorithmique pour
l'apprenti
programmeur
Par bluestorm ,
Cygal
et lastsseldon
www.openclassrooms.com
Licence Creative Commons 7 2.0
Dernière mise à jour le 10/08/2011
Sommaire
2Sommaire ...........................................................................................................................................
2Partager ..............................................................................................................................................
4 Algorithmique pour l'apprenti programmeur .......................................................................................
4But du tutoriel ....................................................................................................................................................................
4Prérequis ...........................................................................................................................................................................
4Historique ..........................................................................................................................................................................
5Partie 1 : Présentation de la notion de complexité algorithmique .......................................................
6Qu'est-ce qu'un algorithme ? ............................................................................................................................................
6Omniprésence des algorithmes ..................................................................................................................................................................................
6Rôle privilégié des ordinateurs ....................................................................................................................................................................................
6Notion de structure de données ..................................................................................................................................................................................
7Les grenouilles partent en vacances ................................................................................................................................
8Situation ......................................................................................................................................................................................................................
8Les deux possibilités ...................................................................................................................................................................................................
8Tous les ans : choix personnalisé ...............................................................................................................................................................................
9Cette année : choix de groupe ....................................................................................................................................................................................
9Comparaison ...............................................................................................................................................................................................................
11La notion de complexité ...................................................................................................................................................
11Correction de l'algorithme ..........................................................................................................................................................................................
11Complexité .................................................................................................................................................................................................................
12Mesure 'asymptotique' ...............................................................................................................................................................................................
12Notation "grand O" ....................................................................................................................................................................................................
13Complexité en temps, complexité mémoire ..............................................................................................................................................................
13Complexité dans le pire des cas ...............................................................................................................................................................................
15Un peu de pratique ..........................................................................................................................................................
15Qu'est-ce qu'on attend de vous ? ..............................................................................................................................................................................
15Chercher le plus grand / petit élément ......................................................................................................................................................................
16Trouver les éléments uniques ...................................................................................................................................................................................
16Solution proposée .....................................................................................................................................................................................................
17Complexité ................................................................................................................................................................................................................
18Trouver les éléments uniques : autre solution ...........................................................................................................................................................
20Partie 2 : Premiers exemples de structures de données et d'algorithmes courants ..........................
20Notions de structures de données : tableaux et listes chaînées .....................................................................................
20Définition ...................................................................................................................................................................................................................
20Tableaux ....................................................................................................................................................................................................................
21Listes .........................................................................................................................................................................................................................
22Ajout / retrait, taille, accès à un élément ...................................................................................................................................................................
22Ajout / Retrait .............................................................................................................................................................................................................
24Taille ..........................................................................................................................................................................................................................
24Accès à un élément ...................................................................................................................................................................................................
25Concaténation, filtrage ..............................................................................................................................................................................................
25Concaténation ...........................................................................................................................................................................................................
27Filtrage ......................................................................................................................................................................................................................
28Synthèse ...................................................................................................................................................................................................................
28Opérations .................................................................................................................................................................................................................
28Conversions ..............................................................................................................................................................................................................
29Attention aux langages de moches ..........................................................................................................................................................................
30Une classe d'algorithme non naïfs : diviser pour régner .................................................................................................
30Gagner au jeu du 'Plus ou Moins' ..............................................................................................................................................................................
30Dichotomie : Recherche dans un dictionnaire ...........................................................................................................................................................
31Calcul de la complexité .............................................................................................................................................................................................
32Trouver un zéro d'une fonction ..................................................................................................................................................................................
35Diviser pour régner : exponentiation rapide ..............................................................................................................................................................
37Introduction au problème du tri .......................................................................................................................................
37Formuler le problème du tri .......................................................................................................................................................................................
37Question de la structure de donnée ..........................................................................................................................................................................
37Tri par sélection .........................................................................................................................................................................................................
38Complexité ................................................................................................................................................................................................................
39Implémentation du tri par sélection ...........................................................................................................................................................................
39Pour une liste ............................................................................................................................................................................................................
40Pour un tableau .........................................................................................................................................................................................................
42Comparaison .............................................................................................................................................................................................................
42Tri par insertion .........................................................................................................................................................................................................
42Le retour du "diviser pour régner" : Tri fusion ............................................................................................................................................................
43Algorithme .................................................................................................................................................................................................................
44Implémentation avec des listes .................................................................................................................................................................................
48Implémentation avec des tableaux ............................................................................................................................................................................
49Complexité ................................................................................................................................................................................................................
50Efficacité en pratique .................................................................................................................................................................................................
52Partie 3 : Quelques autres structures de données courantes ...........................................................
53Piles et files .....................................................................................................................................................................
53Concept .....................................................................................................................................................................................................................
2/70
www.openclassrooms.com
54Mise en pratique ........................................................................................................................................................................................................
54Piles ..........................................................................................................................................................................................................................
55Files ...........................................................................................................................................................................................................................
58Arbres ..............................................................................................................................................................................
59Définition ...................................................................................................................................................................................................................
62Quelques algorithmes sur les arbres ........................................................................................................................................................................
62Taille ..........................................................................................................................................................................................................................
64Hauteur ......................................................................................................................................................................................................................
64Liste des éléments ....................................................................................................................................................................................................
65Parcours en profondeur .............................................................................................................................................................................................
66Parcours en largeur ...................................................................................................................................................................................................
66En mettant des couches ............................................................................................................................................................................................
67Avec une file ..............................................................................................................................................................................................................
68Comparaison des méthodes de parcours .................................................................................................................................................................
68Une symétrie assez surprenante ...............................................................................................................................................................................
68Choix de l'implémentation .........................................................................................................................................................................................
68Analyse de complexité ..............................................................................................................................................................................................
69Utilisation en pratique ................................................................................................................................................................................................
Sommaire 3/70
www.openclassrooms.com
Algorithmique pour l'apprenti programmeur
Par bluestorm et lastsseldon et Cygal
Mise à jour : 10/08/2011
Difficul : Facile
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 meilleursveloppeurs, en mesure de comprendre, corriger et concevoir des
programmes plus efficaces.
But du tutoriel
Les deux notions clés de ce tutoriel sont les suivantes : la complexité, et les structures de donné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 choisissant une structure de données adaptée, vous serez capables de coder des opérations très
performantes (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ésenterons, dans ce tutoriel, un petit panorama de problèmes "courants",
dans le but de vous familiariser 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.
Prérequis
Le but de ce tutoriel n'est pas de vous apprendre à programmer. Pour le lire, vous devezjà savoir programmer. L'apprentissage
de l'algorithmique n'utilise pas de concepts bas niveau (assembleur, 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écursivi' (si
vous vous sentez en manque, il y a déjà un tuto à ce sujet sur le SDZ) 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 suffisamment proche, et faites un petit effort.
La complexité algorithmique est une mesure formelle de la complexité d'un algorithme. Elle s'exprime donc en langage
mathématique. Le calcul de certains algorithmes avancés est très compliqué et demande des connaissances mathématiques
poussées. Cependant, notre tutoriel se concentre sur des choses simples, et devrait être largement accessible : une connaissance
des puissances et des racines (carrées) devrait suffire à être à l'aise. Un objet plus avancé, la fonction logarithme, sera présenté
et expliqué avant son utilisation.
Historique
Ce tutoriel est en cours d'écriture. Vous l'avez déjà lu, et vous voulez savoir si quelque chose a été rajouté ?
Voici un historique des modifications, les plus récentes en premier :
08 août 2011 : correction d'une bévue repérée par Arnolddu51, et clarification par Cygal de la recherche de racine par
Sommaire 4/70
www.openclassrooms.com
1 / 70 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !