Merci à tous pour vos retours ! Je m’attendais quelque peu à ce genre de retours et je les comprends et reçoit parfaitement. En tout cas, c’est extrêmement constructif et j’espère arriver à une situation qui vous (et à moi) conviendra davantage au final, je perçois mieux les problèmes intrinsèques. Je vais laisser reposer ma tête pour revenir avec une vision plus fraîche sur le sujet et étoffer les parties qui font défaut en essayant d’aller moins vite sur certains points et tentant de mieux expliquer. Le problème c’est que c’est un sujet qui me passionne et que j’ai trop de choses à exprimer sur ce sujet :/
Gasche:
Qui est le public cible pour cet article ? J’ai l’impression qu’il vise les personnes ayant déjà un bon bagage scientifique. Je pense qu’il serait utile de le préciser dans l’introduction.
J’avais aussi l’impression que cela s’adressait davantage à des bacheliers plutôt qu’à des enthousiastes à la fin des secondaires. Je souhaitais quand même toucher un public plus large en les invitant à réfléchir sur la nature des choses, quel problème on essaye de définir, comment on le définit et comment on construit à partir de lui-même. Il est vrai qu’il faut un bagage scientifique un peu plus conséquent pour ce genre de démarches.
Je pense qu’il faut être réaliste sur le fait que l’article sera indigeste pour les gens n’ayant pas ce bagage; les paragraphes qui contiennent des rappels de notion (par exemple la notion de "comportement asymptotique") doivent être compris comme des rappels de choses que les lecteurs ont probablement déjà vues mais un peu oubliées. En effet, leur traitement ne permet pas à une personne qui découvre complètement le domaine de les comprendre (et il y a trop de notions nouvelles pour qu’une personne débutante puisse suivre).
Cela me gêne que vous ayez eu cette impression parce que c’est une notion assez centrale dans ce domaine et j’ai un sentiment d’échec à cet égard. Je vais chercher à étoffer cette partie en vue de palier aux défauts soulevés. De mon point de vue personnel, j’ai observé que les étudiants avaient tendance à oublier extrêmement vite ce genre de notions parce que: 1) Ils comprennent bien que ce sont des complexités théoriques et qu’il faudra toujours mesurer en réalité. 2) On a des ordinateurs suffisamment puissants que pour ne pas s’en soucier, et on ne revient à ces notions que si l’on a un souci. 3) L’algorithmique n’est pas très populaire par rapport à d’autres branches de l’informatique, rares sont ceux qui vont voir plus loin que leur cours à son sujet.
Je ne suis qu’à demi convaincu par la partie "histoire des idées" du document. Je ne suis pas sûr de ce que tu veux dire au sujet de la thèse de Church-Turing, mais je ne comprends pas le sens que tu donnes à la phrase que tu cites, "Il est possible d’exprimer, par un ensemble de règles de calcul, tout ce qui est calculable en suivant un traitement systématique, un algorithme." J’ai l’impression que c’est soit tautologique (on peut calculer ce qui est calculable), soit difficilement compréhensible puisque les notions mentionnées ne sont pas définies. Pour moi le résultat central autour de Church-Turing est l’équivalence en terme de calculabilité entres machines de Turing, lambda-calculs et fonctions récursives, qui n’a pas la portée que tu présentes.
C’était justement le sens de ma phrase, l’équivalence de la calculabilité est définie par la construction d’un modèle (machines de Turing, …) qui obéit à un traitement systématique => on est capable de définir ce qui est calculable en employant un système simple. Je vais rajouter cela dans la partie à clarifier/étoffer.
Le document est concentré sur la calculabilité et la complexité comme sciences, et en particulier leur théorie et les problématiques de recherche qui en découle. C’est dit relativement clairement dans l’introduction, et c’est un choix intéressant. Mais il est peut-être un peu dommage d’occulter complètement le fait que la complexité est un outil utile, au jour le jour, pour les programmeurs qui réfléchissent à l’efficacité de leur code. Ce n’est clairement pas le point de vue central dans le document, donc je ne dis pas qu’il faudrait faire des tartines à ce sujet, mais je trouve un peu curieux de faire comme si ça n’existait pas du tout, un peu comme si on lisait un document introductif à la chimie ou à la physique qui occulte complètement le travail des gens qui appliquent ces sciences à l’industrie.
Si j’étais méchant, je dirais que le monde de l’industrie ne va jamais demander d’aller plus loin qu’une boucle for =) Parce qu’il faut, et des problèmes compliqués, et des gens qui veulent se renseigner pour savoir comment on peut résoudre le problème; sachant que son ego personnel est évidemment bien plus intelligent que tous les scientifiques. Fondamentalement, je veux bien rajouter une partie concernant les enjeux plus globaux de ce domaine. Ce n’est pas par pure volonté que je n’aborde pas ces points-là, c’est plus que ça ne m’était pas venu à l’esprit car hors propos par rapport à ce que je voulais mettre en avant.
P.S.: J’ai co-rédigé un document sur la complexité avec un point de vue très très différent, Algorithmique pour l’apprenti programmeur. Notre but était d’être accessible au plus grand nombre (on ne suppose rien de plus que les maths niveau collège), et de se concentrer sur l’usage concret en programmation. Je trouve ça très bien que les contenus ZdS s’élargissent avec des présentations complémentaires, qui couvrent d’autres aspects de la discipline. Merci pour ton travail !
J’avais suivi l’écriture de ce tutoriel à l’époque d’un certain site dont il ne faut plus prononcer le nom (sdz) =). J’avais trouvé dommage qu’ils s’arrêtaient si tôt.
(C’est un petit détail mais j’ai un peu tiqué sur l’abus de notation O(f(n)) = { g(n) \mid \dots }O(f(n))={g(n)∣…}, où on écrit f(n) pour dire f. Je préférerais faire sans, que ce soit pour les gens qui connaissent le sujet et vont préférer la définition rigoureuse, ou les gens qui ne connaissent pas peuvent se perdre avec des variables n quantifiées ou définies nulles part, au milieu d’une définition un peu subtile.)
Je reçois l’argument, mais il est très rare de présenter ces définitions sans l’apparition explicite d’une variable pour insister qu’on étudie la manière dont évolue cette complexité en fonction de la taille du problème. Mais oui, n n’est défini nulle part chez moi =)
Lucas-84:
Je trouve que c’est une super initiative. Le problème essentiel, je pense, c’est qu’il y a un décalage entre ce que tu annonces au départ et les thèmes que tu traites. Le passage subtil sur les modèles de calcul est assez expéditif (ça commence par "les fameuses machines de Turing" et ça continue directement avec un enchaînement de remarques beaucoup trop abstraites pour que ce soit compréhensible, à mon avis), alors que la partie "algorithmique pour l’industrie" est beaucoup plus détaillée.
Je comptais agrandir la partie concernant les modèles de calcul. Mais j’étais bloqué dans ma tête par l’envie de ne pas présenter un modèle en particulier mais d’avoir quand même un élément sur lequel se baser. Et personnellement, je pense que la machine de Turing a fait son temps … Mais oui, je comptais certainement revoir cette partie-là en particulier.
Par exemple, les notations asymptotiques pourraient être remplacées par des \lesssim≲ et \gtrsim≳ intuitifs sans que ça ne dérange personne. Et au risque de choquer les fans du CLRS, je trouve aussi que le théorème maître n’a pas d’intérêt scientifique — il ne comporte pas vraiment d’idée fondamentale sous-jacente et c’est un calcul technique qu’on imagine faisable a priori. Au passage, j’ai l’impression que tu mélanges un peu bornes inférieures et supérieures dans ton passage sur \log(n!).
≲ et ≳ pour moi c’est un non catégorique. Je n’ai vu que dans de très rares occasions ce genre de notations. Je ne trouve pas non plus le Master Theorem intéressant, mais c’est une clef de voûte beaucoup trop importante pour ne pas le mentionner, les seuls intérêts que j’y vois est la démonstration relativement simple (si on secoue les mains suffisamment forts, combien d’articles ont été écrits sur son manque de rigueur ?) et que cela met en évidence une manière de concevoir la complexité d’un problème de manière plus concrète avec cet arbre de complexité.
En bref, je pense que tu gagnerais à sélectionner quelques points que tu mentionnes dans ton "pour aller plus loin" (ils sont très intéressants mais ils ne peuvent pas être expliqués en 2 lignes) et à taper dans le champ des idées plutôt que dans les aspects techniques — ou alors à annoncer clairement ce que tu vas présenter au départ.
Personnellement, j’ai envie d’écrire des articles sur ces notions plus avancées. Mais oui, il y a un rush beaucoup trop important qui est lié au fait que je ne souhaitais faire qu’un survol pour susciter l’émergence de questions chez le lecteur et qu’il ait également de pistes pour voir ce qui a déjà été étudié.
Merci à vous deux !