{"id":1226,"date":"2020-06-09T22:43:13","date_gmt":"2020-06-09T20:43:13","guid":{"rendered":"http:\/\/labodemaths.fr\/WordPress3\/?p=1226"},"modified":"2020-09-09T19:17:06","modified_gmt":"2020-09-09T17:17:06","slug":"algorithme","status":"publish","type":"post","link":"https:\/\/labodemaths.fr\/WordPress3\/algorithme\/","title":{"rendered":"Algorithme ?"},"content":{"rendered":"\n<h2>1. Qu&rsquo;est-ce qu&rsquo;un algorithme ?<\/h2>\n\n\n\n<p><a rel=\"noreferrer noopener\" aria-label=\"Un article du Monde du 27 Janvier 2017 (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/www.lemonde.fr\/blog\/binaire\/2017\/01\/27\/les-algorithmes-en-question\/\" target=\"_blank\">Un article du Monde du 27 Janvier 2017<\/a> relevait cette d\u00e9finition d&rsquo;un algorithme propos\u00e9e par la CNIL ( Commission Nationale de l&rsquo;Informatique et des Libert\u00e9s ).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"495\" height=\"216\" src=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2020\/06\/fake-definition-algo.png\" alt=\"\" class=\"wp-image-1227\" srcset=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2020\/06\/fake-definition-algo.png 495w, https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2020\/06\/fake-definition-algo-300x131.png 300w\" sizes=\"(max-width: 495px) 100vw, 495px\" \/><\/figure>\n\n\n\n<p>Cette d\u00e9finition incorrecte et probl\u00e9matique amena la CNIL \u00e0 la <a href=\"https:\/\/www.cnil.fr\/fr\/definition\/algorithme\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"modifier (s\u2019ouvre dans un nouvel onglet)\">modifier<\/a> <\/p>\n\n\n\n<p>On peut largement pr\u00e9f\u00e9rer la d\u00e9finition propos\u00e9e par le site Interstice :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>Le mot \u00ab&nbsp;algorithme&nbsp;\u00bb vient du nom du grand math\u00e9maticien persan Al Khwarizmi (vers l\u2019an 820), qui introduisit en Occident la num\u00e9ration d\u00e9cimale (rapport\u00e9e d\u2019Inde) et enseigna les r\u00e8gles \u00e9l\u00e9mentaires des calculs s\u2019y rapportant. La notion d\u2019algorithme est donc historiquement li\u00e9e aux manipulations num\u00e9riques, mais elle s\u2019est progressivement d\u00e9velopp\u00e9e pour porter sur des objets de plus en plus complexes, des textes, des images, des formules logiques, des objets physiques, etc.<br>Un algorithme, tr\u00e8s simplement, c\u2019est une m\u00e9thode. Une fa\u00e7on syst\u00e9matique de proc\u00e9der pour faire quelque chose : trier des objets, situer des villes sur une carte, multiplier deux nombres, extraire une racine carr\u00e9e, chercher un mot dans le dictionnaire\u2026&nbsp;<\/p><cite><a href=\"https:\/\/interstices.info\/quest-ce-quun-algorithme\/\">https:\/\/interstices.info\/quest-ce-quun-algorithme\/<\/a><\/cite><\/blockquote>\n\n\n\n<p>Un des probl\u00e8mes majeur de l&rsquo;algorithmique est de s&rsquo;assurer avant de le mettre en oeuvre qu&rsquo;un algorithme va r\u00e9pondre au probl\u00e8me auquel il est cens\u00e9 apporter une solution.<\/p>\n\n\n\n<p>Pour cela, on peut utiliser les notions li\u00e9es d&rsquo;invariant et de variant d&rsquo;algorithme ( ou de boucle ).<\/p>\n\n\n\n<p>Un algorithme est d\u00e9montr\u00e9 correct par rapport \u00e0 une sp\u00e9cification \u00e0 l&rsquo;aide :<br> &#8211; d&rsquo;un invariant qui est une propri\u00e9t\u00e9 pr\u00e9serv\u00e9e par l&rsquo;algorithme, <br> -d&rsquo;un variant qui est une quantit\u00e9 qui d\u00e9cro\u00eet \u00e0 chaque it\u00e9ration de l&rsquo;algorithme et assure sa terminaison.<\/p>\n\n\n\n<h2>2. Variant et invariant d&rsquo;un algorithme.<\/h2>\n\n\n\n<p>Consid\u00e9rons l&rsquo;algorithme de tri par s\u00e9lection d&rsquo;une liste ci-dessous :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def tri_selection(a):\n    liste=a.copy()\n    for i in range(len(liste)-1):\n        indice_min=i\n        for j in range(i,len(liste)):\n            if liste[j]&lt;liste[indice_min]:\n                indice_min=j\n        liste[i],liste[indice_min]=liste[indice_min],liste[i]\n    return liste\n<\/code><\/pre>\n\n\n\n<p>Quel est l&rsquo;invariant de cet algorithme ?<br>Quel est le variant ?<br>Qu&rsquo;est ce qui assure la terminaison de cette algorithme et qu&rsquo;il est correct ?<\/p>\n\n\n\n<p><strong>L&rsquo;invariant<\/strong> est :<br>les i premiers \u00e9l\u00e9ments sont class\u00e9s par ordre croissant.<br><strong>Le variant<\/strong> est :<br>Il reste n-i \u00e9l\u00e9ments \u00e0 classer ( n d\u00e9signant la longueur de la liste ). Il est clairement d\u00e9croissant.<br><strong>La terminaison<\/strong> :<br>A la fin de l&rsquo;algorithme, il ne reste plus d&rsquo;\u00e9l\u00e9ments \u00e0 classer et la liste compl\u00e8te est donc bien class\u00e9e.<\/p>\n\n\n\n<h3>Exercice 1<\/h3>\n\n\n\n<p>D\u00e9terminer l&rsquo;invariant, le variant de l&rsquo;algorithme et la terminaison pour le tri bulle  ou tri par propagation.<\/p>\n\n\n\n<h2>2. Tris par insertion<\/h2>\n\n\n\n<h3>Exercice 2<\/h3>\n\n\n\n<ol><li>En vous r\u00e9f\u00e9rant \u00e0 l&rsquo;article <a href=\"https:\/\/interstices.info\/les-algorithmes-de-tri\/\">https:\/\/interstices.info\/les-algorithmes-de-tri\/<\/a>, d\u00e9terminer les conditions qui assurent que l&rsquo;algorithme par insertion est bien un algorithme de tri.<\/li><li>Ecrire une fonction tri_insertion() permettant de trier une liste par ordre croissant.<\/li><\/ol>\n\n\n\n<h2>3. Efficacit\u00e9 et complexit\u00e9 d&rsquo;un algorithme.<\/h2>\n\n\n\n<p>Pour d\u00e9terminer lequel des 3 algorithmes de tris que l&rsquo;on a mis en place est le plus efficace, on peut comparer :<\/p>\n\n\n\n<ul><li>leur temps d&rsquo;ex\u00e9cution,<\/li><li>leur complexit\u00e9 en calcul ( le nombre de comparaisons ( de test ) et d&rsquo;\u00e9changes de valeurs ( affectation de variables ) qu&rsquo;il y a eu.<\/li><\/ul>\n\n\n\n<p>Pour comparer leur efficacit\u00e9 en terme de temps, on peut utiliser le module timeit de Python.<br>On peut ajouter les commandes suivantes \u00e0 la fin du script comportant vos diff\u00e9rentes fonctions sur les listes.<br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import timeit\n\ntemp=timeit.timeit('tri_selection(liste_aleatoire(100))',number=10, globals=globals())\nprint(temp)<\/code><\/pre>\n\n\n\n<p>Cette commande affiche le temps mis pour trier 10 listes par la m\u00e9thode tri_selection, chaque liste \u00e9tant une liste al\u00e9atoire de longueur 100.<\/p>\n\n\n\n<h3>Exercice 3<\/h3>\n\n\n\n<p>Cr\u00e9er une fonction analyse_temp affichant le temps mis par vos 3 algorithmes de tris pour trier 100 listes al\u00e9atoires de longueur 10, 100, 1000, 10000.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Qu&rsquo;est-ce qu&rsquo;un algorithme ? Un article du Monde du 27 Janvier 2017 relevait cette&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/labodemaths.fr\/WordPress3\/algorithme\/\">Read the post<span class=\"screen-reader-text\">Algorithme ?<\/span><\/a><\/div>\n","protected":false},"author":2,"featured_media":1227,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1226"}],"collection":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/comments?post=1226"}],"version-history":[{"count":2,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1226\/revisions"}],"predecessor-version":[{"id":1231,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1226\/revisions\/1231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media\/1227"}],"wp:attachment":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media?parent=1226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/categories?post=1226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/tags?post=1226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}