Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Information, Calcul, Communication
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie de son cours d’introduction à l’information, à la communication, et au calcul. Il s’inscrit dans le 1er module du cours qui offre une 1e approche des notions de calcul et d’information. Information, Calcul, Communication 1. Information & Calcul – Leçon 3: Théorie du Calcul Clip 2: Notion de Dénombrement B. Moret, J-C. Chappelier, R. Boulic, commentaire: P. Janson
2
Plan de la leçon Formalisation de la notion de calcul: les machines de Turing Problème = question + données Théorie du calcul Dénombrement et calculabilité Calculabilité et décidabilité Théorie de la complexité Complexité des problèmes Problèmes de complexité P = calculables avec coût polynomial Problèmes de complexité NP = vérifiables avec coût polynomial Le 2e videoclip de cette leçon sur la théorie du calcul va d’abord expliquer que tout problème consiste à poser une question concernant un ensemble de données. Il s’attaquera ensuite aux notions de comptage et de dénombrement.
3
Problème = Question + données Solution = algorithme
En leçons 1 et 2 nous avons vu des algorithmes de recherche, de tri, de calcul du plus court chemin Un algorithme répond toujours à la même question Appliquer un algorithme à un ensemble spécifique de données fournit la réponse à cette question pour ces données Appliquer un algorithme n’est pas la solution du problème La solution est l’algorithme lui-même L’appliquer ne résout qu’une instance du problème Dans les 2 1es leçons de ce cours nous avons montré quelques algorithmes s’adressant à des problèmes classiques de recherche, tri, calcul d’un plus court chemin, etc. 1 Chacun de ces algorithmes offre une façon de calculer une réponse à une question spécifique. 2 Appliquer un tel algorithme à un ensemble de données spécifiques permet de calculer la réponse à cette question pour ces données particulières. 3 Appliquer l’algorithme n’est cependant pas une solution du problème. La solution est l’algorithme lui-même. Son application à des données résout une instance spécifique du problème.
4
Problèmes intéressants et inintéressants
=> Problème = question + ensemble d’instances (= données possibles) Solution = algorithme répondant à la question pour n’importe quelle instance => Observation Si l’ensemble des instances (de données possibles) est fini, on peut toujours définir une table donnant la réponse pour chaque instance (de données possibles) L’algorithme de solution consulte simplement la table et fournit la réponse qui s’y trouve => il n’y a pas de réel calcul ! => Conclusion Les problèmes qui demandent un calcul intéressant sont ceux qui présentent des ensembles infinis d’instances = ceux qui posent une question sur un ensemble infini de données possibles => Ce sont les seuls problèmes qui nous intéressent dans ce cours Un problème est donc caractérisé par une question qui peut porter sur une multitude de données possibles, chacune définissant une instance du problème. 1 Une solution au problème est un algorithme capable de répondre à la question pour n’importe quelle instance du problème, c.à.d. n’importe quelles données d’entrée. 2 Une observation s’impose donc: Si l’ensemble des instances d’un problème (toutes ses données possibles) est fini … 3 … on peut pré-calculer et tabuler les réponses pour chaque instance (de données possibles). 4 Dans ce cas, « l’algorithme » consiste uniquement à consulter la table pré-calculée pour retrouver la réponse qui s’y trouve. 5 Il n’y a pas de réel « calcul » ! 6 En conclusion, les seuls problèmes qu’il soit réellement intéressant de calculer sont ceux qui présentent une infinité d’instances (de données d’entrée possibles) … 7 … c.à.d. ceux qui posent une question sur un ensemble infini de données possibles, telles que les réponses ne puissent pas être tabulées. 8 Ce sont aussi les seuls problèmes qui nous intéressent dans ce cours.
5
Comptage et dénombrement
Compter est facile: 1,2,3,4,5,... Question: mais comment compter un ensemble infini ? Outil de comptage: les entiers positifs, N={1,2,3,...} Définition: un ensemble S est dénombrable si et seulement si tout élément de S peut être numéroté par un entier, c'est-à-dire qu'il existe une surjection f: N→S Exemple: l'ensemble des nombres naturels Z={...,−3,−2,−1, 0, 1, 2, 3, ...} est dénombrable car on peut définir f: N→Z telle que si l'entier naturel i est pair, alors f(i)=i/2 si l'entier naturel i est impair, alors f(i)=−(i−1)/2 Le numérotage est le suivant (entier naturel en bleu, f(i) ∈ Z en rouge): 1, 2, 3, 4, 5, 6, 7,... 0, 1,-1, 2,-2, 3,-3,... Les problèmes pour toutes les instances desquels les réponses peuvent être tabulées ne nous intéressent donc plus. Ceci dit, parmi les problèmes intéressants il en est qui sont calculables et d’autres qui ne le sont pas. Pour appréhender ce qui est calculable et ce qui ne l’est pas il est nécessaire de recourir à la notion de comptage ou dénombrement. 1 Compter est trivial … 1, 2, 3, 4, 5, etc. 2 La question est comment compter les éléments d’un ensemble infini. 3 Par compter nous entendons associer un nombre entier positif à chaque élément. 4 On dit alors qu’en ensemble S infini est dénombrable SSI tout élément de S peut être repéré par une nombre entier, c.à.d. s’il existe une fonction surjective f de l’ensemble des entiers positifs N sur l’ensemble S. 5 On peut ainsi dire, par exemple, que l’ensemble Z des nombres naturels, comprenant le zéro et tous les entiers positifs et négatifs, est dénombrable car on peut définir une fonction surjective f de N dans Z telle que 6 si l'entier naturel i est pair, alors f(i)=i/2 7 si l'entier naturel i est impair, alors f(i)=−(i−1)/2 8 Avec cette fonction, le numérotage fait correspondre à chaque entier naturel (ici en bleu) un élément de Z (ici en rouge).
6
Dénombrement des paires d’entiers positifs
Il y a un nombre infini de paires qui ont toutes le même 1er élément Pourtant si on range les paires dans un tableau on peut les dénombrer sur la base de leur somme puisque pour chaque somme il y a un nombre fini de paires 2 -> (1,1) 3 -> (1,2), (2,1) 4 -> (1,3), (2,2), (3,1) 5 -> (1,4), (2,3), (3,2), (4,1) etc… => Chaque paire reçoit son numéro unique => cet ensemble est dénombrable Par contre les nombres réels ne sont PAS dénombrables (voir 1,1 1,2 1,3 1,4 1,5 … 2,1 2,2 2,3 2,4 2,5 3,1 3,2 3,3 3,4 3,5 4,1 4,2 4,3 4,5 5,1 5,2 5,3 5,4 5,5 Pour bien illustrer cette notion de dénombrabilité, prenons un autre exemple: Le dénombrement de toutes les paires d’entiers positifs. 1 Il y a certes un nombre infini de paires qui ont toutes le même 1er élément et une infinité de 2nd éléments 2 Mais si on range toutes ces paires dans un tableau où chaque ligne a le même 1er élément et chaque colonne le même 2nd élément … 3 … on peut néanmoins dénombrer tous les éléments du tableau sur base de leur somme. 4 En effet pour chaque somme possible il y a un nombre fini de paires correspondantes. 5 Seule 1 paire, (1,1), ici en rose, correspond à une somme de 2. 6 Seules 2 paires, (1,2) et (2,1), ici en orange, correspondent à une somme de 3. 7 Seules 3 paires, (1,3), (2,2), (3,1), ici en vert, correspondent à une somme de 4. 8 Seules 4 paires, (1,4), (2,3), (3,2), (4,1), ici en bleu, correspondent à une somme de 5 et ainsi de suite… 9 Chaque paire correspond donc à un entier positif spécifique. L’ensemble des paires est donc bien dénombrable. 10 Les nombres réels, par contre, ne sont PAS dénombrables, comme l’explique ce joli clip du Prof. Guerraoui
7
Tous les programmes sont dénombrables
Un programme est simplement un texte fini écrit dans un alphabet choisi On peut énumérer (dénombrer) tous les textes possibles par ordre alphabétique Tous les textes d’un seul caractère: 1: a, 2: b, 3: c, ...,26: z Puis tous les textes de deux caractères: 27: aa, 28: ab, 29: ac, ..., 52: az, 53: ba, 54: bb, ..., 677: za, 678: zb, 679: zc, ..., 702: zz Puis tous les textes de trois caractères: 703: aaa, 704: aab, 705: aac, ..., 18’278: zzz, Et ainsi de suite … Même avec le bon choix d’alphabet certain des textes ainsi énumérés ne sont pas des programmes vraiment fonctionnels mais tous les programmes fonctionnels ont été énumérés De la même façon on peut démontrer que l’ensemble de tous les programmes informatiques, quel que soit le langage de programmation dans lequel ils sont écrits, est dénombrable. 1 Pour cela il faut réaliser qu’un programme n’est rien d’autre qu’un texte fini écrit dans un certain langage avec un certain alphabet. 2 On peut donc énumérer (dénombrer) tous les textes possibles en les classant par ordre alphabétique … 3 … d’abord tous les textes d’un caractère … 4 … puis tous les textes de 2 caractères … 5 … puis tous les textes de 3 caractères … … et ainsi de suite … 6 Il est évident que la majorité des textes ainsi énumérés sont du pur charabia, ne représentant aucun programme réel dans un quelconque langage de programmation. 7 Il n’en reste pas moins que par cette méthode tous les programmes réellement fonctionnels dans tous les langages de programmation existants auront été énumérés et sont donc dénombrables.
8
Peut-on aussi dénombrer toutes les fonctions ?
Considérons l’ensemble des fonctions entières d’une variable entière, c'est à dire qui produisent une valeur entière f(n) pour tout entier n Pour essayer de dénombrer ces fonctions on les range dans un tableau (infini) avec une fonction par ligne: la fonction fi est définie sur la ligne i sa valeur pour n=j est définie par la colonne j Tous les programmes sont dénombrables mais que dire de toutes les fonctions? 1 Considérons par exemple toutes les fonctions f d’un nombre entier n qui donnent un résultat entier. 2 Pour essayer de dénombrer ces fonctions rangeons-les dans un tableau infini. 3 Chaque ligne i de ce tableau définit la ie de ces fonctions alors que … 4 … chaque colonne j du tableau donne la valeur de toutes les fonctions pour n=j. fn \ n 1 2 … j f0 f0(0) f0(1) f0(2) f0(j) f1 f1(0) f1(1) f1(2) f1(j) fi fi(0) fi(1) fi(2) fi(j)
9
Toutes les fonctions ne sont pas dénombrables
On définit maintenant la fonction entière g(n) = fn(n)+1 => g(n) est en fait construite en ajoutant 1 aux termes de la diagonale => Aucune ligne du tableau ne peut représenter g(n) puisque son terme diagonal ne serait pas correct vu que pour chaque i possible g(i) ≠ fi(i) => Pour toute tentative de dénombrement on peut toujours imaginer une fonction g exclue de ce dénombrement => Les fonctions – même les fonctions entières – ne sont PAS dénombrables 1 Définissons maintenant une nouvelle fonction entière g(n) = fn(n)+1 2 On voit aisément qu’aucune ligne du tableau ne peut décrire g(n) puisque la diagonale du tableau vaut toujours fn(n) alors que g(n) vaut toujours fn(n)+1. 3 En d’autres termes, pour toute tentative de dénombrement on peut toujours facilement imaginer une nouvelle fonction qui ne peut pas se trouver parmi les fonctions dénombrées. 4 Les fonctions – même les simples fonctions entières de nombres entiers – ne sont donc PAS dénombrables.
10
Il n’y a donc pas assez de programmes pour implémenter toutes les fonctions
L’ensemble de tous les programmes (quel que soit le langage) est dénombrable mais L’ensemble des fonctions entières d’une variable entière n’est pas dénombrable => Il existe beaucoup plus de fonctions entières que de programmes => Il n’y a tout simplement pas assez de programmes possibles pour décrire toutes les fonctions => Il existe un nombre infini de fonctions qui ne sont pas calculables – par aucun programme! Il n’y a donc pas assez de programmes pour calculer toutes les fonctions possibles!... 1 … puisque tous les programmes, quel que soit leur langage, sont dénombrables … 2 … alors que toutes les fonctions imaginables ne le sont pas. 3 En d’autres termes il existe beaucoup plus de fonctions que de programmes possibles. 4 Il n’y a tout simplement pas assez de programmes pour décrire toutes les fonctions imaginables. 5 Une infinité de fonctions ne sont pas calculables, par aucun programme.
11
Une infinité de fonctions ne sont pas «calculables»
Une fonction produit une valeur pour un nombre infini d’entrées Exprimer une fonction sous forme d’une table demande donc une table infinie Certaines tables infinies peuvent être exprimées par un calcul tel que 𝑓(𝑛)= 𝑘=0 𝑚 𝑎𝑘 𝑛 𝑘 Seules les fonctions correspondant à une telle table peuvent être décrites par un programme de longueur finie Les autres demanderaient un programme de longueur infinie => impossible => Elles ne sont donc pas «calculables» Par exemple, les fonctions dites aléatoires, dont les valeurs successives sont imprévisibles, ne peuvent pas être produites par un programme fini Pour mieux comprendre cette état de fait, il faut réaliser … 1 … qu’une «simple» fonction d’un nombre entier produit une valeur pour tout nombre entier … et il y en a une infinité. 2 Une telle fonction peut donc toujours être définie par une table infinie donnant la valeur de la fonction pour chacun nombre entier de cette infinité. 3 Certaines de ces tables infinies peuvent assurément être résumées par des formules telle que celle représentée ici. 4 Toutes les fonctions correspondant à ces tables «formulables» peuvent être décrites par des programmes de longueur finie implémentant ladite formule. 5 Par contre toutes les autres fonctions, qui sont la majorité, et dont les tables ne peuvent être résumées par une formule, demanderaient pour être calculées un programme de longueur infinie, ce qui est évidemment impossible – un programme étant par définition de longueur finie. Ces fonctions ne sont donc pas calculables. 6 Le meilleur exemple d’une telle fonction incalculable est une fonction aléatoire. Par définition, une fonction aléatoire produit à chaque invocation – c.à.d. pour chaque valeur de n – un résultat imprévisible. Il est évident que tous les résultats étant imprévisibles, il est impossible de les calculer. On ne peut que les décrire par une table infinie qui ne pourrait être exprimée que par un programme infini – donc inexistant.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.