background preloader

Algorithmie

Facebook Twitter

OpenClassrooms - La récursivité. J'utiliserai dans cette dernière partie un langage plus adapté à la programmation récursive, nommé OCaml.

OpenClassrooms - La récursivité

Polyvalent, il est entre autres utilisé pour l'enseignement de la programmation en France, dans certaines universités, écoles d'ingénieurs ou classes préparatoires. Les exemples n'utiliseront que peu de concepts de ce langage, vous pourrez donc les lire même si vous ne le connaissez pas. Les deux seules règles à connaître pour l'instant sont les suivantes : une fonction n'est pas déclarée par le mot-clé function comme en PHP, mais par le mot-clé let, qui sert aussi à déclarer les autres variables. Si la fonction est récursive, on ajoute après le let le mot-clé recon n'utilise pas la forme if (...) { ... } else {... } du C ou du PHP, mais simplement if ... then ... else ...

Voici par exemple une fonction factorielle codée en OCaml : let rec fac(n) = if n = 0 then 1 else n * fac(n-1) Récursion terminale La pile d'appels <? Function rebours($n) if ($n == 0) echo "partez ! OpenClassrooms - Algorithmique : tri et complexité. Tri rapide (ou Quick Sort) Principe L'algorithme de tri rapide (ou Quick Sort) a un fonctionnement fort différent des algorithmes précédents et un peu plus compliqué (certains diront beaucoup plus).

OpenClassrooms - Algorithmique : tri et complexité

Le principe de base est simple mais bizarre a priori : on choisit une valeur dans le tableau appelée pivot (nous prendrons ici la première valeur du tableau) et on déplace avant elle toutes celles qui lui sont inférieures et après elle toutes celles qui lui sont supérieures. Puis, on réitère le procédé avec la tranche de tableau inférieure et la tranche de tableau supérieure à ce pivot. Voici un exemple : Nous prenons le premier nombre en pivot : 13 et nous plaçons les nombres 9 et 7 avant le 13, les nombres 15 et 18 après le 13. Il ne reste plus ensuite qu'à réitérer l'algorithme sur les deux sous-tableaux. Le premier aura comme pivot 9 et sera réorganisé, le second aura comme pivot 15 et ne nécessitera aucune modification. On trouve 18 et 7. Mise en œuvre Tri fusion (ou Merge Sort) Ah ! Hein ?!? OpenClassrooms - Algorithmique pour l'apprenti programmeur. Vous venez d'apprendre les bases d'un langage de programmation ?

OpenClassrooms - Algorithmique pour l'apprenti programmeur

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. But du tutoriel Les deux notions clés de ce tutoriel sont les suivantes : la complexité, et les structures de données. Chaque algorithme résout un problème donné. Prérequis Le but de ce tutoriel n'est pas de vous apprendre à programmer.

Historique. OpenClassrooms - Le tri à bulles. OpenClassrooms - Le tri-fusion. Le tri par insertion. Comment peut-on évaluer la rapidité de cet algorithme ?

Le tri par insertion

On pourrait mesurer son temps d'exécution sur mon ordinateur, mais cela n'est pas fiable parce que si on change d'ordinateur, le temps d'exécution change aussi : il peut être très rapide chez mon voisin (qui a un super PC) et très lent chez moi. Une mesure plus rigoureuse de la "rapidité" de l'algorithme serait de mesurer le "nombre d'opérations" qu'il effectue : que ce soit chez moi ou chez mon voisin, pour trier le même tableau, il va effectuer le même nombre d'opérations, mais pas à la même vitesse.

L'avantage de ce critère est qu'il permet de comparer efficacement les algorithmes entre eux, indépendamment de l'ordinateur qui les exécute : si un algorithme fait plus d'opérations que le mien, il sera plus lent et chez moi, et chez mon voisin ; même si le nouvel algorithme est plus rapide chez mon voisin que l'algorithme actuel chez moi, je saurais qu'il est moins bon. Il reste à définir ce qu'est une "opération". Approche Remarque.