{"id":829,"date":"2012-04-18T14:16:41","date_gmt":"2012-04-18T14:16:41","guid":{"rendered":"http:\/\/nicotupe.fr\/Blog\/?p=829"},"modified":"2012-05-29T14:19:15","modified_gmt":"2012-05-29T14:19:15","slug":"podcastscience-82-algorithmes-ou-lhistoire-de-la-recette-de-cuisine","status":"publish","type":"post","link":"http:\/\/nicotupe.fr\/Blog\/2012\/04\/podcastscience-82-algorithmes-ou-lhistoire-de-la-recette-de-cuisine\/","title":{"rendered":"PodcastScience 82 &#8211; Algorithmes ou l&#8217;histoire de la recette de cuisine"},"content":{"rendered":"<p>Cet article est une reproduction du dossier que j&#8217;ai \u00e9crit pour <a href=\"http:\/\/www.podcastscience.fm\/dossiers\/2012\/04\/18\/dossier-algorithmes\/\">Podcastscience<\/a> et je vous engage \u00e0 vous abonner \u00e0 ce podcast. Pour les plus flemmards, le texte et l&#8217;audio dans la suite&#8230;<\/p>\n[audio:http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/82-Les-algorithmes.mp3]\n<p>Pour un troisi\u00e8me dossier, on s&#8217;attaque aujourd&#8217;hui \u00e0 un sujet tr\u00e8s vaste, sans aucun doute le plus vieux de l&#8217;histoire des sciences&#8230; Lors du <a title=\"Pi, le dossier\" href=\"http:\/\/www.podcastscience.fm\/dossiers\/2012\/03\/14\/dossier-pi\/\" target=\"_blank\">dossier sur Pi<\/a>, nous avions pu d\u00e9couvrir que d\u00e8s que l&#8217;homme a su \u00e9crire, il a parl\u00e9 de la constante c\u00e9l\u00e8bre. Force est de constater que depuis que l&#8217;homme existe, il existe des algorithmes m\u00eame si ce n&#8217;est que tr\u00e8s r\u00e9cemment (au d\u00e9but du XX<sup>e<\/sup> si\u00e8cle) qu&#8217;une d\u00e9finition formelle \u00e0 commenc\u00e9 \u00e0 se montrer. Je serais m\u00eame tent\u00e9 d&#8217;affirmer que certains animaux usent d&#8217;algorithmes, mais devant ma m\u00e9connaissance du sujet, je laisserai des personnes plus comp\u00e9tentes apporter leur contribution une fois le dossier assimil\u00e9!<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><strong style=\"font-style: normal; font-weight: bold;\">Un algorithme? Mais koikeskec\u00e9donc?<\/strong><\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Depuis que l&#8217;homme existe donc et encore aujourd&#8217;hui, tout le monde utilise tous les jours, toutes les heures des algorithmes&#8230; Pour autant peu de personnes connaissent le mot et moins encore la d\u00e9finition exacte et cela est bien compr\u00e9hensible tant elle est finalement complexe! Pourtant, l&#8217;id\u00e9e est assez simple, voire m\u00eame naturelle : <strong style=\"font-style: normal; font-weight: bold;\">une m\u00e9thode qui, \u00e0 partir de plusieurs donn\u00e9es permet d&#8217;obtenir un r\u00e9sultat<\/strong>. Si cette d\u00e9finition n&#8217;est pas suffisamment pr\u00e9cise pour b\u00e2tir une th\u00e9orie math\u00e9matique, elle est suffisante pour donner \u00e0 ce stade quelques exemples.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Commen\u00e7ons donc par le plus c\u00e9l\u00e8bre des algorithmes, celui que l&#8217;on a tous utilis\u00e9 au moins une fois, celui qui est aussi vieux que l&#8217;invention du feu (ou presque) : la recette de cuisine! Dans toute bonne recette, \u00e0 l&#8217;image de celle ci-dessous (provenant de l&#8217;excellent blog <a title=\"\" href=\"http:\/\/www.lafoodbox.com\/2011\/04\/chou-romanesco.html\" target=\"_blank\">la foodbox<\/a>), on a exactement les m\u00eames \u00e9l\u00e9ments&#8230;<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center; padding: 0px; margin: 0px;\"><a style=\"margin-left: 1em; margin-right: 1em;\" href=\"http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/wpid-Photo-11-avr.-2012-1906.jpg\" target=\"_blank\" rel=\"lightbox[829]\"><img loading=\"lazy\" decoding=\"async\" id=\"blogsy-1334652091178.2744\" class=\"aligncenter\" src=\"http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/wpid-Photo-11-avr.-2012-1906.jpg\" alt=\"Romanesco\" width=\"225\" height=\"300\" \/><\/a><\/div>\n<div class=\"separator\" style=\"clear: both; text-align: center; padding: 0px; margin: 0px;\"><a style=\"margin-left: 1em; margin-right: 1em;\" title=\"\" href=\"http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/wpid-Photo-11-avr.-2012-18471.jpg\" target=\"_blank\" rel=\"lightbox[829]\"><img loading=\"lazy\" decoding=\"async\" id=\"blogsy-1334652091226.4207\" class=\"aligncenter\" src=\"http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/wpid-Photo-11-avr.-2012-18471.jpg\" alt=\"Recette\" width=\"494\" height=\"500\" \/><\/a><\/div>\n<p>Le nom nous permet de savoir \u00e0 quoi sert cette recette, la liste d&#8217;ingr\u00e9dients assure que l&#8217;on ait tous les outils et \u00e9l\u00e9ments n\u00e9cessaires \u00e0 sa r\u00e9alisation. La proc\u00e9dure \u00e0 suivre permet \u00e0 n&#8217;importe qui, cuisinier ou non, intelligent ou non, de produire cette r\u00e9alisation complexe. Les variantes et autres tests permettent de s&#8217;adapter \u00e0 la situation et \u00e0 l&#8217;envie.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Cet exemple traduit tr\u00e8s bien l&#8217;id\u00e9e partag\u00e9e par nombre de scientifiques de la notion d&#8217;algorithme apr\u00e8s l&#8217;apparition de ce mot au IX<sup>e<\/sup> si\u00e8cle. L&#8217;origine du mot algorithme est arabe, il correspond \u00e0 la traduction du nom du math\u00e9maticien <a title=\"\" href=\"http:\/\/en.wikipedia.org\/wiki\/Mu\u1e25ammad_ibn_M\u016bs\u0101_al-Khw\u0101rizm\u012b\" target=\"_blank\">Al-Khw\u0101rizm\u012b<\/a> qui a accessoirement \u00e9crit un ouvrage qui a permis de propager en Europe <a title=\"\" href=\"http:\/\/fr.wikipedia.org\/wiki\/\u00c9criture_d\u00e9cimale_positionnelle\" target=\"_blank\">l&#8217;\u00e9criture d\u00e9cimale positionnelle<\/a> des nombres invent\u00e9e par les Indiens (c&#8217;est celle que nous utilisons encore aujourd&#8217;hui). S&#8217;il n&#8217;y a pas aujourd&#8217;hui de d\u00e9finition simple commun\u00e9ment accept\u00e9e de la notion d&#8217;algorithme, on y retrouve toujours les id\u00e9es suivantes :<\/p>\n<ul style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 25px; list-style-type: disc; list-style-position: initial; list-style-image: initial; overflow-x: hidden; overflow-y: hidden; clear: both;\">\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">Le dictionnaire de symboles, de mots est limit\u00e9. Il se veut aussi simple et pr\u00e9cis que possible. Dans le cas de la recette, ce dictionnaire de symboles est l&#8217;alphabet occidental accompagn\u00e9 de la ponctuation et des chiffres;<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">On doit obtenir le r\u00e9sultat en un nombre fini d&#8217;\u00e9tapes;<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">Il doit pouvoir \u00eatre suivi par un humain en ne n\u00e9cessitant aucune intelligence, tout au plus, la capacit\u00e9 d&#8217;ex\u00e9cuter les diff\u00e9rentes instructions. Cet aspect est particuli\u00e8rement important pour les recettes. Si elles sont largement diffus\u00e9es et utilis\u00e9es, c&#8217;est entre autres parce qu&#8217;elles permettent d&#8217;obtenir un r\u00e9sultat proche du restaurant sans aucune connaissance pr\u00e9alable de cuisine.<\/li>\n<\/ul>\n<p>\u00c0 partir d&#8217;une d\u00e9finition aussi g\u00e9n\u00e9rale, vous comprendrez pourquoi j&#8217;affirme sans peur que c&#8217;est le plus vieux sujet scientifique : partout o\u00f9 il y a routine, m\u00e9thode, transmission d&#8217;un savoir-faire, il y a algorithme! On pourrait donc pousser le vice jusqu&#8217;\u00e0 consid\u00e9rer que les m\u00e9thodes de chasse de nos anc\u00eatres pr\u00e9historiques, qu&#8217;ils inscrivaient selon certaines th\u00e9ories sur les murs des grottes, \u00e9taient bel et bien des algorithmes.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><strong style=\"font-style: normal; font-weight: bold;\">Quelques algorithmes au cours de l&#8217;histoire<\/strong><\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Pour autant, ce n&#8217;est que beaucoup plus tard qu&#8217;est g\u00e9n\u00e9ralement plac\u00e9e la date des premiers algorithmes principalement parce qu&#8217;il fallut attendre l&#8217;apparition de l&#8217;\u00e9criture pour avoir des traces des m\u00e9thodes employ\u00e9es et non seulement de leur r\u00e9sultat. Dans le <a href=\"http:\/\/www.podcastscience.fm\/dossiers\/2012\/03\/14\/dossier-pi\/\">dossier sur Pi<\/a>, je vous avais pr\u00e9sent\u00e9 une des premi\u00e8res apparitions du nombre sur le <a title=\"le papyrus de Rhind\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Papyrus_Rhind\" target=\"_blank\">papyrus de Rhind<\/a>. Ce papyrus, qui date de -2000, contient aussi des traces d&#8217;un algorithme pour r\u00e9duire plusieurs fractions au m\u00eame d\u00e9nominateur. De mani\u00e8re plus g\u00e9n\u00e9rale, toutes les m\u00e9thodes pour calculer Pi sont des algorithmes et sont un bon exemple de la diversit\u00e9 du sujet.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Datant cette m\u00eame p\u00e9riode des d\u00e9buts de l&#8217;\u00e9criture, entre -3500 et -1500 av. J.-C., on a retrouv\u00e9 des tablettes babyloniennes indiquant comment calculer un inverse, effectuer une division, etc. Ces op\u00e9rations peuvent para\u00eetre simples aujourd&#8217;hui, mais en tant qu&#8217;algorithmes, les m\u00e9thodes devenaient applicables par n&#8217;importe qui (sans culture ni \u00e9ducation n\u00e9cessaire). Ces m\u00e9thodes permettaient de faire facilement des multiplications, des r\u00e8gles de trois, etc. Pour l&#8217;anecdote, cette civilisation ne comptait pas en base 10 (avec 10 chiffres), mais en base 60, cela simplifie les divisions. Le choix de la base 60 s&#8217;explique probablement du nombre de phalanges des doigts d&#8217;une main (sans compter le pouce) et du nombre de doigts de la main (5&#215;12=60). \u00c0 titre d&#8217;anecdotes \u00e0 ressortir en d\u00eener de famille, c&#8217;est parce que les Babyloniens comptaient en base 60 que nous comptons 60 minutes dans une heure.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Il n&#8217;y a pas que ces vieilles civilisations qui s&#8217;aidaient d&#8217;algorithmes pour effectuer des op\u00e9rations simples. Lorsque vous posez une division, vous effectuez des \u00e9tapes m\u00e9caniques sans forc\u00e9ment savoir pourquoi elles fonctionnent, mais au contraire, vous avez appris par c\u0153ur un rituel qui permet de vite effectuer l&#8217;op\u00e9ration. Parmi les outils originaux pour effectuer des op\u00e9rations simples, l&#8217;image ci-dessous (provenant de Wikipedia) repr\u00e9sente <a title=\"Le d\u00e9tail sur Wikip\u00e9dia :)\" href=\"http:\/\/fr.wikipedia.org\/wiki\/R%C3%A9glettes_de_Genaille-Lucas\" target=\"_blank\">l&#8217;invention de Lucas-Genaille<\/a> : un syst\u00e8me de r\u00e9glettes pour effectuer la multiplication de deux grands nombres.<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center; padding: 0px; margin: 0px;\"><a style=\"margin-left: 1em; margin-right: 1em;\" href=\"http:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/7\/77\/Genaille-Lucas_rulers_full.pdf\/page1-699px-Genaille-Lucas_rulers_full.pdf.jpg\" target=\"_blank\" rel=\"lightbox[829]\"><img loading=\"lazy\" decoding=\"async\" id=\"blogsy-1334652091145.3252\" class=\"aligncenter\" src=\"http:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/7\/77\/Genaille-Lucas_rulers_full.pdf\/page1-699px-Genaille-Lucas_rulers_full.pdf.jpg\" alt=\"LucasGenaille\" width=\"419\" height=\"360\" \/><\/a><\/div>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Pour effectuer la multiplication, il suffit de placer les r\u00e9glettes correspondant au nombre choisi et de suivre les fl\u00e8ches noires comme sur la figure ci-dessous (provenant tout autant de Wikipedia).<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><a href=\"http:\/\/nicotupe.fr\/Blog\/?attachment_id=1252\" rel=\"attachment wp-att-1252\"><img loading=\"lazy\" decoding=\"async\" id=\"blogsy-1334652091157.3984\" class=\"aligncenter size-full wp-image-1252\" src=\"http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/Genaille-Lucas_rulers_example_5.png\" alt=\"\" width=\"450\" height=\"360\" \/><\/a><\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Dans cet exemple, on effectue la multiplication de 52749 par 4 : en suivant les fl\u00e8ches noires, on trouve 210996. Ces r\u00e9glettes furent commercialis\u00e9es jusqu&#8217;en 1911! Ce syst\u00e8me aussi amusant qu&#8217;ing\u00e9nieux est une goutte d&#8217;eau au milieu des autres m\u00e9thodes permettant de faire des op\u00e9rations arithm\u00e9tiques.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">De tout temps, les algorithmes ont donc \u00e9t\u00e9 au centre de l&#8217;activit\u00e9 humaine, mais il fallut attendre 1900 pour voir appara\u00eetre un d\u00e9but de formalisation de ce concept avec le 10<sup>e<\/sup> probl\u00e8me de Hilbert, nous y revenons dans la prochaine partie. Il n&#8217;a pas fallu attendre la formalisation pour voir appara\u00eetre des algorithmes tr\u00e8s complexes. Jusqu&#8217;\u00e0 cette p\u00e9riode, le mot algorithme \u00e9tait le plus souvent associ\u00e9 \u00e0 Euclide et une mani\u00e8re simple de pr\u00e9senter la notion d&#8217;algorithme \u00e9tait de donner l&#8217;exemple du c\u00e9l\u00e8bre calcul.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><strong style=\"font-style: normal; font-weight: bold;\">Algorithme d&#8217;Euclide<\/strong><\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><a href=\"http:\/\/fr.wikipedia.org\/wiki\/Euclide\">Euclide<\/a> \u00e9crit au troisi\u00e8me si\u00e8cle \u00a0av. J.-C. 13 livres &#8220;<a href=\"http:\/\/fr.wikipedia.org\/wiki\/%C3%89l%C3%A9ments_d'Euclide\">les \u00e9l\u00e9ments<\/a>&#8220;. Les premiers traitent de g\u00e9om\u00e9trie alors que les livres VII, VIII et IX posent les bases de la th\u00e9orie des nombres. C&#8217;est justement dans le 7<sup>e<\/sup> livre qu&#8217;Euclide pr\u00e9sente une m\u00e9thode pour calculer le plus grand diviseur commun \u00e0 deux nombres. Le plus grand diviseur commun de a et b, <a title=\"tout tout tout, vous saurez tout sur le pgcd\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Pgcd\" target=\"_blank\">PGCD<\/a> pour les intimes, est le plus grand nombre qui divise a et b (c&#8217;est-\u00e0-dire le plus grand nombre p tel que a\/p et b\/p soient entiers). Nous ne reviendrons pas ici sur la preuve du fonctionnement de l&#8217;algorithme ni sur la th\u00e9orie des nombres, car ce n&#8217;est pas le sujet.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Bien qu&#8217;il soit tr\u00e8s vieux, cet algorithme reste d&#8217;actualit\u00e9 et contient tous les \u00e9l\u00e9ments d&#8217;un algorithme &#8220;moderne&#8221;. Son fonctionnement tel que d\u00e9crit dans le livre est r\u00e9sum\u00e9 par la figure suivante. Pour les puristes, l&#8217;algorithme pr\u00e9sent\u00e9 ici est celui d\u00e9crit par Euclide dans son livre et non l&#8217;am\u00e9lioration utilisant la division euclidienne g\u00e9n\u00e9ralement pr\u00e9sent\u00e9e.<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center; padding: 0px; margin: 0px;\"><a style=\"margin-left: 1em; margin-right: 1em;\" title=\"\" href=\"http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/wpid-Photo-13-avr.-2012-0941.jpg\" target=\"_blank\" rel=\"lightbox[829]\"><img loading=\"lazy\" decoding=\"async\" id=\"blogsy-1334652091151.055\" class=\"aligncenter\" src=\"http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/wpid-Photo-13-avr.-2012-0941.jpg\" alt=\"\" width=\"500\" height=\"406\" \/><\/a><\/div>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">C&#8217;est un algorithme tr\u00e8s utile et encore tr\u00e8s utilis\u00e9, car il \u00e0 \u00e9t\u00e9 g\u00e9n\u00e9ralis\u00e9 pour plusieurs r\u00e9sultats, par exemple, il permet de calculer les coefficients de l&#8217;<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Th%C3%A9or%C3%A8me_de_Bachet-B%C3%A9zout\">identit\u00e9 de bezout <\/a>qui sert dans le syst\u00e8me de cryptage <a title=\"Rivest, Shamir, Adleman pour les intimes...\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Rivest_Shamir_Adleman\" target=\"_blank\">RSA<\/a>, \u00e9norm\u00e9ment utilis\u00e9 pour la s\u00e9curisation du e-commerce. C&#8217;est l&#8217;un des plus vieux algorithmes encore en activit\u00e9.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">On y retrouve encore nombre d&#8217;\u00e9l\u00e9ments de la recette de cuisine :<\/p>\n<ul style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 25px; list-style-type: disc; list-style-position: initial; list-style-image: initial; overflow-x: hidden; overflow-y: hidden; clear: both;\">\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">Des d\u00e9clarations : trois variables sont d\u00e9clar\u00e9es (a, b et c) m\u00eame si avec le seul sch\u00e9ma ci-dessus, cela est sous-entendu. Dans la recette, la liste d&#8217;ingr\u00e9dients joue ce r\u00f4le de d\u00e9claration. En plus de cela, est comme c&#8217;est parfois pr\u00e9cis\u00e9, il faudrait &#8220;d\u00e9clarer&#8221; quels sont les ustensiles n\u00e9cessaires.<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">Des affectations : les trois variables se voient affecter plusieurs r\u00e9sultats tout au long de l&#8217;algorithme. Dans la recette, c&#8217;est le contenu des bols et autres assiettes qui joue ce r\u00f4le d&#8217;affectation.<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">Une s\u00e9quence d&#8217;instruction : les fl\u00e8ches sur le diagramme permettent de savoir dans quel ordre effectuer les op\u00e9rations. Dans la recette, c&#8217;est l&#8217;ordre des phrases.<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">Des tests : &#8220;c=1&#8221; par exemple. Dans la recette, on trouvait le test &#8220;est-ce que le chou est croquant?&#8221;<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">Une boucle : dans cet algorithme, la m\u00eame op\u00e9ration est r\u00e9p\u00e9t\u00e9e jusqu&#8217;\u00e0 ce que l&#8217;on trouve le PGCD. Dans la recette, on fait cuire le chou tant qu&#8217;il est &#8220;croquant&#8221; jusqu&#8217;\u00e0 ce qu&#8217;il devienne &#8220;un peu croquant&#8221;.<\/li>\n<\/ul>\n<p>Et surtout, l&#8217;algorithme d&#8217;Euclide correspond bien \u00e0 l&#8217;id\u00e9e de ce qu&#8217;est un algorithme pr\u00e9sent\u00e9 en d\u00e9but de dossier. Les souhaits pr\u00e9sent\u00e9s dans la premi\u00e8re liste correspondent \u00e0 ce que l&#8217;on attend d&#8217;un algorithme alors que cette nouvelle liste correspond \u00e0 5 outils qui permettent de construire des objets correspondant \u00e0 la premi\u00e8re intention. Deux questions s&#8217;imposent alors : ces 5 outils sont-ils indispensables? Et surtout est-ce qu&#8217;avec ces seuls 5 outils, on peut construire tous les algorithmes correspondants aux d\u00e9sirs \u00e9nonc\u00e9s? Avant de r\u00e9pondre \u00e0 ces deux questions, nous allons faire un petit \u00e9cart historique pour dire deux mots sur l&#8217;\u00e9v\u00e9nement qui amena \u00e0 une meilleure d\u00e9finition des algorithmes et d\u00e9clencha les nombreux travaux qui aboutirent \u00e0 leur r\u00e9ponse.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><strong style=\"font-style: normal; font-weight: bold;\">La fin du formalisme de Hilbert<\/strong><\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">En 1900, au <a title=\"Si si, \u00e7a existe!\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Congr%C3%A8s_international_des_math%C3%A9maticiens\" target=\"_blank\">congr\u00e8s international des math\u00e9maticiens<\/a>, <a title=\"Notre ami David Hilbert sur Wikip\u00e9dia\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Hilbert\" target=\"_blank\">Hilbert<\/a> pr\u00e9senta 23 probl\u00e8mes non r\u00e9solus qui selon lui \u00e9taient les plus importants du moment. Un certain nombre sont aujourd&#8217;hui r\u00e9solus : c&#8217;est-\u00e0-dire que l&#8217;on a montr\u00e9 qu&#8217;ils \u00e9taient soit vrais soit faux. Ou alors on a prouv\u00e9 qu&#8217;ils \u00e9taient ind\u00e9cidables, qu&#8217;on ne peut pas dire s&#8217;ils sont vrais ou faux; ils sont ind\u00e9pendants de la th\u00e9orie consid\u00e9r\u00e9e. Un \u00e9quivalent aujourd&#8217;hui de cette d\u00e9marche est les probl\u00e8mes du <a title=\"Encore des probl\u00e8mes, sur Wikip\u00e9dia\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Probl%C3%A8mes_du_prix_du_mill%C3%A9naire\" target=\"_blank\">prix du mill\u00e9naire<\/a> pour lesquels l&#8217;<a title=\"ou Clay Mathematical Institute\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Clay_Mathematical_Institute\" target=\"_blank\">institut math\u00e9matique Clay<\/a> offre un million de dollars \u00e0 qui apporte une solution (et pour information, cette somme ne serait qu&#8217;un pourboire tant la plupart de ces probl\u00e8mes sont importants et ont plusieurs applications cruciales telles que la cryptographie).<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Hilbert dans sa d\u00e9marche visait \u00e0 montrer une certaine &#8220;perfection&#8221; des math\u00e9matiques en demandant la d\u00e9monstration de trois r\u00e9sultats :<\/p>\n<ul style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 25px; list-style-type: disc; list-style-position: initial; list-style-image: initial; overflow-x: hidden; overflow-y: hidden; clear: both;\">\n<ul style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 25px; list-style-type: disc; list-style-position: initial; list-style-image: initial; overflow-x: hidden; overflow-y: hidden; clear: both;\">\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">La compl\u00e9tude des math\u00e9matiques : c&#8217;est-\u00e0-dire que tout \u00e9nonc\u00e9 peut \u00eatre confirm\u00e9 ou infirm\u00e9. En d&#8217;autres termes que l&#8217;on peut construire une th\u00e9orie sans aucune proposition ind\u00e9cidable;<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">La consistance des math\u00e9matiques : c&#8217;est-\u00e0-dire qu&#8217;il n&#8217;existe pas d&#8217;\u00e9nonc\u00e9 contradictoire, qui serait vrai ainsi que son contraire;<\/li>\n<li style=\"padding-top: 2px; padding-right: 0px; padding-bottom: 6px; padding-left: 5px; overflow-x: visible; overflow-y: visible; clear: both; margin: 0px;\">La d\u00e9cision des propositions math\u00e9matiques : c&#8217;est-\u00e0-dire qu&#8217;il existe une proc\u00e9dure s&#8217;ex\u00e9cutant en un temps fini permettant de d\u00e9montrer qu&#8217;un \u00e9nonc\u00e9 math\u00e9matique est vrai.<\/li>\n<\/ul>\n<\/ul>\n<p>Ironie de l&#8217;histoire, alors qu&#8217;Hilbert souhaitait que tous ces \u00e9nonc\u00e9s soient vrais, il fallut moins de 50 ans pour d\u00e9montrer qu&#8217;il n&#8217;existait pas de th\u00e9orie math\u00e9matique suffisamment complexe pour contenir les op\u00e9rations \u00e9l\u00e9mentaires (addition, multiplication, inverse&#8230;) \u00e0 la fois consistante et compl\u00e8te. Et surtout qu&#8217;une proc\u00e9dure qui permet de d\u00e9cider si un \u00e9nonc\u00e9 est vrai en un temps fini n&#8217;existe pas. Une d\u00e9faite pour la pens\u00e9e de Hilbert, mais gr\u00e2ce \u00e0 ses probl\u00e8mes, une avanc\u00e9e exceptionnelle des math\u00e9matiques et de la connaissance de leurs limites.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">La derni\u00e8re question, qui correspond au<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Dixi%C3%A8me_probl%C3%A8me_de_Hilbert\"> 10<sup>e<\/sup> probl\u00e8me de Hilbert<\/a>, parle sans s&#8217;en rendre compte d&#8217;algorithme. En effet, Hilbert souhaite trouver une m\u00e9thode qui s&#8217;ex\u00e9cute en un nombre fini d&#8217;\u00e9tapes pour obtenir son r\u00e9sultat. Et pour apporter une solution \u00e0 ce probl\u00e8me (la solution est que c&#8217;est impossible, mais \u00e7a reste une solution), il fallut bien d\u00e9finir la notion d&#8217;algorithme. Et gr\u00e2ce \u00e0 cette bonne d\u00e9finition, on put en cerner certaines limites.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">La caract\u00e9risation pr\u00e9cise des algorithmes a pu se faire en d\u00e9finissant la notion de fonction calculable, c&#8217;est-\u00e0-dire une fonction qui co\u00efncide avec la description faite en d\u00e9but de dossier. Beaucoup de tr\u00e8s grands noms des math\u00e9matiques du XX<sup>e<\/sup> si\u00e8cle ont propos\u00e9 une d\u00e9finition de la calculabilit\u00e9. Il y a d&#8217;abord <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Kurt_G%C3%B6del\">Godel<\/a>, qui apr\u00e8s avoir d\u00e9truit les r\u00eaves de Hilbert sur l&#8217;incompl\u00e9tude et la coh\u00e9rence pr\u00e9senta une d\u00e9finition de &#8220;<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Fonction_r%C3%A9cursive\">fonctions r\u00e9cursives<\/a>&#8221; con\u00e7ues sur quelques r\u00e8gles simples. <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Alonzo_Church\">Alonzo Church<\/a> d\u00e9montra l&#8217;impossibilit\u00e9 du probl\u00e8me de d\u00e9cision pos\u00e9 par Hilbert, <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Probl%C3%A8me_de_la_d%C3%A9cision\">r\u00e9sultat qui a aujourd&#8217;hui son nom<\/a>. Il cr\u00e9a de son c\u00f4t\u00e9 le <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Lambda-calcul\">lambda calcul<\/a>, qui tout comme les fonctions r\u00e9cursives de Godel, avait pour but de repr\u00e9senter les algorithmes. Enfin, <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Alan_Turing\">Turing<\/a> proposa encore une autre construction, les machines de Turing, dont nous allons reparler tout de suite.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Entre 1931 et 1936, divers scientifiques brillants ont propos\u00e9 plusieurs d\u00e9finitions de fonctions calculables qui paraissaient toutes aussi pertinentes. En fait toutes ces constructions sont \u00e9quivalentes, les algorithmes que l&#8217;on peut construire avec sont les m\u00eames! Il n&#8217;y avait donc en fait qu&#8217;un ensemble de fonctions, de m\u00e9thodes que l&#8217;on pouvait fabriquer et c&#8217;est ce que l&#8217;on appelle aujourd&#8217;hui les algorithmes. Dans la partie suivante, nous allons voir l&#8217;une de ces constructions, sans aucun doute la plus c\u00e9l\u00e8bre : la machine de Turing.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><strong style=\"font-style: normal; font-weight: bold;\">Machine de Turing<\/strong><\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Il n&#8217;a pas \u00e9t\u00e9 facile de choisir la d\u00e9finition de fonction calculable que j&#8217;allais pr\u00e9senter pour ce dossier. \u00c0 vrai dire, je ne savais pas qu&#8217;il y en avait autant et surtout celle des machines de Turing \u00e9tait de loin celle qui me parlait le moins, me paraissait la moins intuitive. Puis, j&#8217;ai lu l&#8217;extrait traduit de &#8220;<a href=\"http:\/\/www.cs.virginia.edu\/~robins\/Turing_Paper_1936.pdf\">on the computable numbers, with an application to the Entscheidungsproblem<\/a>&#8221; que vous pourrez trouver dans &#8220;histoires d&#8217;algorithmes&#8221;, livre dont la r\u00e9f\u00e9rence compl\u00e8te est donn\u00e9e en fin de dossier. Si vous le pouvez, lisez le texte directement, c&#8217;est limpide et explique tr\u00e8s simplement la construction de ces &#8220;machines&#8221;.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Turing cherche donc \u00e0 formaliser l&#8217;op\u00e9ration que l&#8217;on appelle intuitivement &#8220;calcul&#8221;. Il commence par \u00e9num\u00e9rer les diff\u00e9rents \u00e9l\u00e9ments n\u00e9cessaires pour faire un calcul. Le calcul est fait sur une feuille o\u00f9 l&#8217;on \u00e9crit les symboles les uns apr\u00e8s les autres sur une ligne. Il propose donc de mod\u00e9liser cela par un ruban de papier quadrill\u00e9. Il explique ensuite qu&#8217;on doit se limiter \u00e0 un nombre fini de symboles tels que dans notre alphabet et pr\u00e9cise que l&#8217;un de ces symboles doit \u00eatre rep\u00e9r\u00e9 comme \u00e9tant le &#8220;0&#8221;, la case vierge.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Tout comme nous ne regardons qu&#8217;une \u00e9tape de recette \u00e0 la fois, Turing poursuit en disant qu&#8217;un calculateur ne peut observer qu&#8217;un nombre de symboles fini fix\u00e9 \u00e0 chaque \u00e9tape. Et tout comme le plat est dans un \u00e9tat bien d\u00e9termin\u00e9 et le cuisinier dans un \u00e9tat d&#8217;esprit bien pr\u00e9cis avant le d\u00e9but d&#8217;une \u00e9tape, il pr\u00e9cise que sa machine est dans un nombre fini d&#8217;\u00e9tats au moment de l&#8217;observation.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Il explique ensuite que la donn\u00e9e de l&#8217;\u00e9tat du calculateur et de l&#8217;observation des symboles permet d&#8217;effectuer deux op\u00e9rations :<\/p>\n<ul>\n<li>changer l&#8217;ordre des cases en \u00e9changeant une case observ\u00e9e par une case voisine ;<\/li>\n<li>remplacer le symbole dans une case du ruban par un nouveau.<\/li>\n<\/ul>\n<p>Lorsque l&#8217;on suit une recette de cuisine, on n&#8217;effectue pas autre chose, on ajoute et retire des ingr\u00e9dients, on les m\u00e9lange&#8230; Si l&#8217;on d\u00e9compose la recette au maximum en op\u00e9rations simples, on arrive \u00e0 rester dans la mod\u00e9lisation de Turing.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Et&#8230; C&#8217;est tout! \u00c0 partir de cette construction, on arrive \u00e0 mod\u00e9liser toutes les choses que nous appelons ou soup\u00e7onnons\u00a0\u00eatre\u00a0\u00e0 ce jour des &#8220;algorithmes&#8221;. En fait, ce que nous appelons aujourd&#8217;hui une <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Machine_de_Turing\">machine de Turing<\/a> est encore plus simple et permet de fabriquer exactement les m\u00eames syst\u00e8mes : l&#8217;alphabet n&#8217;a que deux symboles (0 et 1), on observe une seule case \u00e0 la fois et on ne peut utiliser que les cases directement voisines \u00e0 la case observ\u00e9e.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Il fut montr\u00e9 que les machines de Turing sont \u00e9quivalentes \u00e0 toutes les autres fonctions &#8220;calculables&#8221; de l&#8217;\u00e9poque et on ne conna\u00eet pas \u00e0 ce jour de &#8220;m\u00e9thode&#8221; ex\u00e9cutable par une machine, un humain ou un animal qui ne soit pas mod\u00e9lisable par l&#8217;une d&#8217;elles. Mais pour autant, est-ce que ces fonctions calculables correspondent bien \u00e0 l&#8217;intuition de la notion d&#8217;algorithme? Alonzo Church en \u00e9tait convaincu et cette hypoth\u00e8se est aujourd&#8217;hui connue sous le nom de &#8220;<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Th%C3%A8se_de_Church\">th\u00e8se de Church<\/a>&#8220;. Autant dire tout de suite que cette\u00a0conjecture\u00a0\u00e0 peu d&#8217;espoir d&#8217;\u00eatre d\u00e9montr\u00e9e tant elle est plus proche de la philosophie que des sciences (allez donc jeter un oeil \u00e0 la conf\u00e9rence mise en lien en fin de dossier si le sujet vous int\u00e9resse)&#8230; D&#8217;autant plus que gr\u00e2ce aux <a href=\"http:\/\/www.podcastscience.fm\/dossiers\/2012\/02\/22\/dossier-linfini-quand-il-ny-en-a-plus-il-y-a-cantor\/\">raisonnements de Cantor<\/a>, on peut d\u00e9montrer que l&#8217;ensemble des fonctions calculables est d\u00e9nombrable. Comme l&#8217;ensemble des nombres r\u00e9els est ind\u00e9nombrable, il existe une infinit\u00e9 de nombres non calculables par des algorithmes! Reste \u00e0 savoir si ce sont des nombres atteignables dans le monde &#8220;r\u00e9el&#8221;.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><strong style=\"font-style: normal; font-weight: bold;\">Savoir calculer ne suffit pas<\/strong><\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Une fois la notion de fonction calculable pos\u00e9e et la th\u00e8se de Church avanc\u00e9es, nous savions que nous avions en main tous les outils pour cr\u00e9er des algorithmes des plus complexes. Pourtant, cela est encore trop th\u00e9orique. Dans les faits, avec l&#8217;arriv\u00e9e des ordinateurs, pourtant dot\u00e9s d&#8217;une capacit\u00e9 de calcul \u00e9norme (tout en \u00e9tant parfaitement stupides, ce qui colle bien avec la d\u00e9finition d&#8217;un algorithme), on s&#8217;est rendu compte qu&#8217;une autre limitation emp\u00eachait de finir certains calculs.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Dans le cher monde r\u00e9el, dire que l&#8217;on obtiendra un r\u00e9sultat en un temps fini ne suffit pas, parce que cela n&#8217;emp\u00eache pas par exemple que le temps d&#8217;ex\u00e9cution d&#8217;un algorithme prenne plusieurs fois l&#8217;\u00e2ge de l&#8217;univers pour s&#8217;ex\u00e9cuter (sisi, c&#8217;est tr\u00e8s grand, mais c&#8217;est fini).\u00a0\u00a0Dans <a href=\"http:\/\/www.amazon.fr\/Le-Guide-voyageur-galactique-H2G2\/dp\/2070319016\">le guide du voyageur galactique<\/a> par exemple, des habitants d&#8217;une plan\u00e8te construisent une machine pour r\u00e9pondre \u00e0 <a href=\"http:\/\/fr.wikipedia.org\/wiki\/La_grande_question_sur_la_vie,_l%27univers_et_le_reste\">la grande question sur la vie l&#8217;univers et tout le reste<\/a> et ce n&#8217;est que 7 millions et demi d&#8217;ann\u00e9es plus tard que la r\u00e9ponse, 42, est obtenue!<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">La complexit\u00e9 algorithmique est l&#8217;objet de l&#8217;un des 7 probl\u00e8mes \u00e0 un million de dollars et d\u00e9j\u00e0 trait\u00e9 dans le <a href=\"http:\/\/www.podcastscience.fm\/emission\/2010\/09\/01\/podcast-science-01-science-sans-conscience\/\">tout premier \u00e9pisode du podcast<\/a>\u00a0(contrairement \u00e0 ce que l&#8217;on a cru\u00a0bri\u00e8vement\u00a0a l&#8217;\u00e9poque, le probl\u00e8me est toujours ouvert). Ce probl\u00e8me, que l&#8217;on r\u00e9sume\u00a0souvent\u00a0\u00e0 &#8220;<a href=\"http:\/\/fr.wikipedia.org\/wiki\/P%3DNP\">P=NP<\/a>&#8221; est selon la plupart des math\u00e9maticiens \u00e0 la fois le plus important de ceux de l&#8217;institut Clay et le plus \u00e0 m\u00eame \u00e0 \u00eatre r\u00e9solu par un amateur. Certains probl\u00e8mes appartiennent \u00e0 la cat\u00e9gorie P (les plus &#8220;simples&#8221;) et d&#8217;autres a la cat\u00e9gorie NP (les plus complexes), tout l&#8217;enjeu du probl\u00e8me est de prouver que ces cat\u00e9gories sont les m\u00eames. Et pour le d\u00e9montrer, il suffirait soit de prouver qu&#8217;un seul probl\u00e8me NP n&#8217;est pas P (on a alors P different de NP) ou qu&#8217;un seul probl\u00e8me NP-Complet (classe particuli\u00e8re de probl\u00e8mes NP qui sont \u00e9quivalents \u00e0 tous les autres) est en fait dans P (alors P=NP), voil\u00e0 pourquoi beaucoup pensent qu&#8217;un amateur pourrait apporter une solution.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Ce qui diff\u00e9rencie ces probl\u00e8mes, c&#8217;est la complexit\u00e9 des algorithmes que l&#8217;on conna\u00eet pour les r\u00e9soudre. La complexit\u00e9 d&#8217;un algorithme est un ordre de grandeur du temps qu&#8217;il faut pour obtenir un r\u00e9sultat en fonction de la taille des donn\u00e9es du probl\u00e8me dans le pire des cas. Prenons un exemple amusant qui a \u00e9t\u00e9 pos\u00e9 \u00e0 un ami lors d&#8217;un entretien d&#8217;embauche.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Imaginons que vous ayez une noix de coco et devant vous un immeuble de <em>n<\/em> \u00e9tages. Vous souhaitez savoir \u00e0 quel \u00e9tage exactement la noix de coco se casse. La seule solution dans ce cas, et d&#8217;aller \u00e0 chaque \u00e9tage en commen\u00e7ant par le rez-de-chauss\u00e9e et de l\u00e2cher la noix de coco pour voir si elle se casse (on suppose que la noix de coco ne s&#8217;ab\u00eeme pas, soit elle se casse soit elle reste indemne). Dans le pire des cas, c&#8217;est au dernier \u00e9tage que la noix de coco se casse, il faut donc faire <em>n<\/em> tests.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Avec deux noix de coco, le probl\u00e8me devient plus int\u00e9ressant. Ce qui vient tout de suite \u00e0 l&#8217;esprit est de balancer la premi\u00e8re noix de coco \u00e0 la moiti\u00e9 du b\u00e2timent puis en fonction de la casse \u00e0 la moiti\u00e9 de la moiti\u00e9 restante et ainsi de suite jusqu&#8217;\u00e0 ce qu&#8217;elle casse et de finir avec l&#8217;autre en testant tous les \u00e9tages restants.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Mais quitte \u00e0 s\u00e9parer le b\u00e2timent en deux parties, on peut le s\u00e9parer en 3, 4, 5 ou plus g\u00e9n\u00e9ralement <em>k<\/em> parties. Il faudra alors au pire des cas que l&#8217;on effectue <em>k<\/em> tests avec la premi\u00e8re noix de coco puis <em>n<\/em>\/<em>k<\/em> tests (les \u00e9tages restants) avec la deuxi\u00e8me noix de coco. On effectue donc <img src='http:\/\/s0.wp.com\/latex.php?latex=k%2B%5Cfrac%7Bn%7D%7Bk%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='k+\\frac{n}{k}' title='k+\\frac{n}{k}' class='latex' \/> op\u00e9rations. Il s&#8217;agit alors de trouver pour quel <em>k<\/em>\u00a0o<em>n<\/em> effectuera le moins d&#8217;op\u00e9rations.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">C&#8217;est \u00e0 dire de trouver le nombre <em>m<\/em> tel que pour toutes les valeurs de <em>k<\/em>, <img src='http:\/\/s0.wp.com\/latex.php?latex=k%2B%5Cfrac%7Bn%7D%7Bk%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='k+\\frac{n}{k}' title='k+\\frac{n}{k}' class='latex' \/> soit sup\u00e9rieur \u00e0 <em>m<\/em>. Autrement dit que <img src='http:\/\/s0.wp.com\/latex.php?latex=k%2B%5Cfrac%7Bn%7D%7Bk%7D+-m&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='k+\\frac{n}{k} -m' title='k+\\frac{n}{k} -m' class='latex' \/> est sup\u00e9rieur \u00e0 z\u00e9ro pour tous les <em>k<\/em>. Comme <em>k<\/em> est sup\u00e9rieur \u00e0 z\u00e9ro, cela revient \u00e0 trouver le minimum du polyn\u00f4me <img src='http:\/\/s0.wp.com\/latex.php?latex=k%5E2%2Bn-mk&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='k^2+n-mk' title='k^2+n-mk' class='latex' \/>.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Pour r\u00e9soudre un polyn\u00f4me de degr\u00e9 2, rappelez-vous de l&#8217;algorithme appris \u00e0 l&#8217;\u00e9cole ou allez consulter <a href=\"http:\/\/fr.wikipedia.org\/wiki\/%C3%89quation_du_second_degr%C3%A9\">votre m\u00e9moire num\u00e9rique Wikip\u00e9dia<\/a>, il faut calculer le d\u00e9terminant <img src='http:\/\/s0.wp.com\/latex.php?latex=%5CDelta+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\\Delta ' title='\\Delta ' class='latex' \/> qui vaut <img src='http:\/\/s0.wp.com\/latex.php?latex=+b%5E2-4ac+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' b^2-4ac ' title=' b^2-4ac ' class='latex' \/> pour le polyn\u00f4me <img src='http:\/\/s0.wp.com\/latex.php?latex=+ax%5E2%2Bbx%2Bc+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' ax^2+bx+c ' title=' ax^2+bx+c ' class='latex' \/>. Dans notre cas, il vaut donc :<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\"><img src='http:\/\/s0.wp.com\/latex.php?latex=+%5CDelta%3Dm%5E2-4n+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' \\Delta=m^2-4n ' title=' \\Delta=m^2-4n ' class='latex' \/>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Pour qu&#8217;un polyn\u00f4me ne change pas de signe, il faut qu&#8217;il ait une racine double (le fameux cas <img src='http:\/\/s0.wp.com\/latex.php?latex=+%5CDelta%3D0+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' \\Delta=0 ' title=' \\Delta=0 ' class='latex' \/> rappelez vous!), c&#8217;est-\u00e0-dire que <img src='http:\/\/s0.wp.com\/latex.php?latex=+m%5E2%3D4n+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' m^2=4n ' title=' m^2=4n ' class='latex' \/>. Le <em>k<\/em> pour lequel est atteint ce minimum est alors <img src='http:\/\/s0.wp.com\/latex.php?latex=+k%3D%5Csqrt%7Bn%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' k=\\sqrt{n} ' title=' k=\\sqrt{n} ' class='latex' \/>. Il faut donc diviser le b\u00e2timent en racine carr\u00e9e du nombre d&#8217;\u00e9tages pour aller au plus vite \u00e0 la solution (on obtient alors le r\u00e9sultat en <img src='http:\/\/s0.wp.com\/latex.php?latex=2%5Csqrt%7Bn%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='2\\sqrt{n}' title='2\\sqrt{n}' class='latex' \/> op\u00e9rations).<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Ces exemples montrent que l&#8217;on peut r\u00e9soudre un m\u00eame\u00a0probl\u00e8me\u00a0de fa\u00e7on plus ou moins rapide. Dans les cas pr\u00e9sents, si l&#8217;on passe d&#8217;un b\u00e2timent de 10 \u00e9tages \u00e0 un b\u00e2timent qui en a 100 000, dans le premier cas, on multiplie le nombre d&#8217;op\u00e9rations par 10000 alors que dans le second on le multiplie seulement par 100. Cela peut dans certains cas diff\u00e9rencier un algorithme ex\u00e9cutable en temps humain d&#8217;un algorithme dont nous ne verrons jamais la fin.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Pour revenir au probl\u00e8me P=NP, les probl\u00e8mes P sont ceux pour lesquelles ont conna\u00eet un algorithme qui ne n\u00e9cessite &#8220;que&#8221; un nombre polynomial d&#8217;op\u00e9rations par rapport \u00e0 la taille des donn\u00e9es d&#8217;entr\u00e9e. C&#8217;est-\u00e0-dire que le nombre d&#8217;op\u00e9rations qu&#8217;ils n\u00e9cessitent pour des donn\u00e9es de taille <em>n<\/em> est inf\u00e9rieur \u00e0 <img src='http:\/\/s0.wp.com\/latex.php?latex=+n%5Ek+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' n^k ' title=' n^k ' class='latex' \/> pour un certain <em>k<\/em>. Les probl\u00e8mes NP sont quant \u00e0 eux des probl\u00e8mes dont on ne conna\u00eet pas d&#8217;algorithme les r\u00e9solvant en temps polynomial, mais o\u00f9 il est facile de v\u00e9rifier si l&#8217;on a une solution (facile veut dire que cette v\u00e9rification se fait en temps polynomial).\u00a0Dans l&#8217;exemple de la noix de coco, m\u00eame s&#8217;il faut <em>n<\/em> op\u00e9rations pour r\u00e9soudre le probl\u00e8me il n&#8217;en faut qu&#8217;une seule pour voir si la noix de coco est cass\u00e9e.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Les probl\u00e8mes NP sont alors des probl\u00e8mes que l&#8217;on r\u00e9sout facilement avec de la chance : en prenant une configuration au hasard et pour peu qu&#8217;on soit par chance tomb\u00e9 sur la solution, on sait s&#8217;en rendre compte rapidement. Toute la question de P=NP est alors de savoir si des probl\u00e8mes simples \u00e0 v\u00e9rifier sont simples \u00e0 r\u00e9soudre.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Les probl\u00e8mes NP ne sont pas du tout des probl\u00e8mes exotiques mis en avant par un math\u00e9maticien un peu fou, ce sont des probl\u00e8mes que l&#8217;on croise tous les jours. Le plus connu, le voyageur de commerce, demande \u00e0 proposer une m\u00e9thode pour trouver le chemin le plus court \u00e9tant donn\u00e9 une r\u00e9partition de maisons pour que le voyageur de commerce puisse toutes les voir. On sait facilement v\u00e9rifier si l&#8217;on a bien le chemin le plus court, mais on ne sait pas facilement trouver ce chemin.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Plus amusant, \u00e9tant donn\u00e9 une liste de mots et un mot crois\u00e9 vierge, trouver o\u00f9 il faut mettre chaque mot est un probl\u00e8me NP, on sait tr\u00e8s rapidement v\u00e9rifier si la grille est bien remplie, mais on ne sait pas la remplir rapidement.<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Ce probl\u00e8me reste aujourd&#8217;hui compl\u00e8tement ouvert. \u00c0 une \u00e9poque, on pensait qu&#8217;il \u00e9tait vrai, aujourd&#8217;hui beaucoup pensent qu&#8217;il est faux et d&#8217;autres qu&#8217;il serait ind\u00e9cidable&#8230;..<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Ici s&#8217;ach\u00e8ve le dossier sur les algorithmes, j&#8217;esp\u00e8re vous avoir\u00a0\u00e9clair\u00e9\u00a0sur le sujet et surtout vous avoir d\u00e9montr\u00e9 que l&#8217;on pouvait parler d&#8217;algorithmes sans jamais parler d&#8217;ordinateur ni de langage de programmation!<\/p>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">Sources bibliographiques et autres liens pour aller plus loin :<\/p>\n<ul>\n<li>&#8220;<a href=\"http:\/\/www.amazon.fr\/Histoire-dalgorithmes-Nouvelle-%C3%A9dition-caillou\/dp\/2701155185\/ref=sr_1_1?ie=UTF8&amp;qid=1334657339&amp;sr=8-1\">histoires d&#8217;algorithmes : du caillou a la puce<\/a>&#8221; : un excellent livre qui regorge d&#8217;exemples d&#8217;algorithmes. On y trouve le texte original, sa traduction quand c&#8217;est n\u00e9cessaire et des explications historiques, c&#8217;est de loin celui qui m&#8217;al le plus servi a construire ce dossier.<\/li>\n<li>&#8220;<a href=\"http:\/\/www.amazon.fr\/G%C3%B6del-Escher-Bach-Guirlande-Eternelle\/dp\/2100523066\/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1334657443&amp;sr=1-1\">Godel Escher et Bach : Les Brins d&#8217;une Guirlande Eternelle<\/a>&#8221; : un livre r\u00e9f\u00e9rence en diffusion des math\u00e9matiques qui traite sur une grande part de ce sujet. Contrairement au pr\u00e9c\u00e9dent qui a une approche tr\u00e8s historique, celui-ci a une approche plus po\u00e9tique et plus imag\u00e9e tout en restant parfaitement rigoureux.<\/li>\n<li>&#8220;<a href=\"http:\/\/www.amazon.fr\/Les-M%C3%A9tamorphoses-calcul-%C3%A9tonnante-math%C3%A9matiques\/dp\/2746503247\/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1334657620&amp;sr=1-1\">les m\u00e9tamorphoses du calcul : une \u00e9tonnante histoire des math\u00e9matiques<\/a>&#8221; : un livre qui parle de Math et qui a eu le prix de philosophie de l&#8217;acad\u00e9mie fran\u00e7aise! Livre qui parle de l&#8217;histoire du calcul et de la th\u00e8se de Church, ses implications, de la philosophie autour de cette hypoth\u00e8se. Ce livre est \u00e9crit par un tr\u00e8s bon p\u00e9dagogue et est passionnant, pour autant, il ne faut pas oublier \u00e0 la lecture que c&#8217;est le livre d&#8217;un informaticien, parfois un peu trop convaincu de la sup\u00e9riorit\u00e9 du calcul sur les math\u00e9matiques au sens large (calculables ou non).<\/li>\n<li>Gilles Dowek qui a \u00e9crit le livre pr\u00e9c\u00e9dent est \u00e9coutable et visionable dans <a href=\"http:\/\/www-sop.inria.fr\/colloquium\/intervenant.php?nom=Dowek&amp;prenom=Gilles\">une conf\u00e9rence<\/a>. Elle n\u00e9cessite l&#8217;instalation de l&#8217;horreur &#8220;Real Player&#8221; mais je vous assure que cela vaut le coup!<\/li>\n<li>&#8220;<a href=\"http:\/\/www.pourlascience.fr\/ewb_pages\/s\/sommaire_pls.php?art_id=28641&amp;num=74\">Dossier pour la science : Les grands probl\u00e8mes math\u00e9matiques<\/a>&#8221; : un excellent num\u00e9ro sur les probl\u00e8mes a un million de dollars et sur quelques uns des probl\u00e8mes de Hilbert.<\/li>\n<li>&#8220;<a href=\"http:\/\/www.cs.virginia.edu\/~robins\/Turing_Paper_1936.pdf\">on the computable numbers, with an application to the Entscheidungsproblem<\/a>&#8221; Le papier original de Turing en anglais<\/li>\n<li><a href=\" http:\/\/www.lafoodbox.com\/2011\/04\/chou-romanesco.html\">La recette a base de choux fractal <\/a>: je ne suis pas responsable de la qualit\u00e9 de la recette, je ne l&#8217;ai pas test\u00e9!<\/li>\n<\/ul>\n<p style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding: 0px;\">merci \u00e0 S\u00e9bastien pour le probl\u00e8me des noix de coco.<\/p>\n<p><noscript>&amp;lt;A HREF=&#8221;http:\/\/ws.amazon.fr\/widgets\/q?ServiceVersion=20070822&amp;amp;#038;MarketPlace=FR&amp;amp;#038;ID=V20070822%2FFR%2Fpodcascien-21%2F8001%2F933f0f93-7d82-4f3e-8799-ad53fc3a0d4e&amp;amp;#038;Operation=NoScript&#8221;&amp;gt;Widgets Amazon.fr&amp;lt;\/A&amp;gt;<\/noscript><\/p>\n<p class=\"wp-flattr-button\"><a class=\"FlattrButton\" style=\"display:none;\" href=\"http:\/\/nicotupe.fr\/Blog\/2012\/04\/podcastscience-82-algorithmes-ou-lhistoire-de-la-recette-de-cuisine\/\" title=\" PodcastScience 82 &#8211; Algorithmes ou l&#8217;histoire de la recette de cuisine\" rev=\"flattr;uid:nicotupe;language:fr_FR;category:text;tags:nicotupe.fr;\">Cet article est une reproduction du dossier que j&#8217;ai \u00e9crit pour Podcastscience et je vous engage \u00e0 vous abonner \u00e0 ce podcast. Pour les plus flemmards, le texte et l&#8217;audio...<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Cet article est une reproduction du dossier que j&#8217;ai \u00e9crit pour Podcastscience et je vous engage \u00e0 vous abonner \u00e0 ce podcast. Pour les plus flemmards, le texte et l&#8217;audio dans la suite&#8230; [audio:http:\/\/www.podcastscience.fm\/wp-content\/uploads\/2012\/04\/82-Les-algorithmes.mp3] Pour un troisi\u00e8me dossier, on s&#8217;attaque aujourd&#8217;hui \u00e0 un sujet tr\u00e8s vaste, sans aucun doute le plus vieux de l&#8217;histoire des [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":834,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[46,38],"tags":[],"class_list":["post-829","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-podcastscience","category-sciences"],"jetpack_featured_media_url":"http:\/\/nicotupe.fr\/Blog\/wp-content\/uploads\/2012\/05\/illustration_nico_algo_recos-590x834.jpg","_links":{"self":[{"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/posts\/829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/comments?post=829"}],"version-history":[{"count":4,"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/posts\/829\/revisions"}],"predecessor-version":[{"id":1020,"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/posts\/829\/revisions\/1020"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/media\/834"}],"wp:attachment":[{"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/media?parent=829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/categories?post=829"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nicotupe.fr\/Blog\/wp-json\/wp\/v2\/tags?post=829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}