La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Information, Communication, Calcul

Présentations similaires


Présentation au sujet: "Information, Communication, Calcul"— Transcription de la présentation:

1 Information, Communication, Calcul
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie du cours d’introduction à l’information, à la communication, et au calcul. Il est le 4e de 7 videoclips portant sur les notions de calcul et d’information. Information, Communication, Calcul Module 1: Calcul & Information – Leçon 1: Algorithmes – Clip 4: Recherche R. Guerraoui, J. Sam, J-C. Chappelier, R. Boulic, commentaire: P. Janson

2 Plan de la leçon Qu’est-ce qu’un algorithme?
Quelles structures existent pour contrôler un algorithme? Quelques grandes familles d’algorithms Recherche Exemple: recherche par dichotomie Comment quantifier et exprimer la complexité d’un algorithme Tri Plus court chemin Plus spécifiquement il porte l’attention sur une première catégorie parmi les grandes familles d’algorithmes: les algorithmes de recherche.

3 Exemples d’algorithmes
Il existe évidemment une infinité de problèmes Comment résoudre une équation? Comment calculer un PGCD? Comment classer des objets par ordre alphabétique? Comment trouver une information sur la toile? Comment trouver le chemin de l’EPFL? Pour beaucoup de problèmes il existe des solutions algorithmiques x1, x2 = −b± b 2 −4ac 2a Algorithme d’Euclide pour le calcul du PGCD Multiples algorithmes de tri (alphabétique ou autres) Multiples algorithmes de recherche Google PageRank ( Facebook EdgeRank ( Multiples algorithmes de calcul d’un plus court chemin entre deux points Il existe évidemment une infinité de problèmes que l’on peut résoudre de façon algorithmique. Par exemple la recherche des solutions d’une équation … … le calcul d’un plus grand commun diviseur … … le classement de livres ou tous autres objets de façon alphabétique ou selon tout autre ordre … … la recherche d’une information sur la toile … … ou le calcul du plus court chemin en temps ou en km entre deux points donnés. - Pour tous ces problèmes et bien d’autres il existe une ou même souvent plusieurs solutions algorithmiques. Par exemple, comme suggéré dans le videoclip précédent, le calcul des racines d’une équation du second degré … … l’algorithme d’Euclide pour le calcul d’un PGCD … … une multitude d’algorithmes de tri ou de classement … … une multitude d’algorithmes de recherche parmi lesquels on peut citer quelques exemples illustres tels que … L’algorithme PageRank de Google qui fournit les résultats les plus utiles à la recherche de mots-clés donnés … … ou l’algorithme EdgeRank de Facebook qui choisit les informations les plus utiles à présenter à chaque utilisateur … … ou encore plusieurs algorithmes de calcul du plus court chemin entre deux points donnés.

4 Principales familles d’algorithmes
Recherche Tri Calcul d’un plus court chemin Le présent videoclip va explorer superficiellement le sujet des algorithmes de recherche. Un videoclip ultérieur donnera une idée des algorithmes de tri et de calcul d’un plus court chemin.

5 Algorithmes de recherche
Exemple: rechercher un élément x dans un ensemble E Il faut commencer par spécifier clairement le problème E peut-il être vide? E peut-il varier pendant la recherche? E est-il ordonné? Le problème type que tente de résoudre un algorithme de recherche est de retrouver un objet donné X parmi un ensemble d’éléments E. - Encore faut-il définir précisément de quoi se compose l’ensemble E: Est-on assuré qu’il n’est pas vide? Sait-on si son contenu peut évoluer pendant la recherche? Ses éléments sont-ils déjà pré-arrangés selon un ordre quelconque?

6 Algorithmes de recherche
Exemple: rechercher un élément x dans un ensemble E => 2 algorithmes parmi plusieurs possibilités (Algorithme calculant la taille de E) Appartient1 entrée: x,E sortie: x ∈ E ? i ← 1 Répéter Si x = E[i] sortir x ∈ E i ← i+1 t ← taille(E) jusque i > t sortir x ∉ E Appartient2 entrée: x,E sortie: x ∈ E ? t ← taille(E) Pour i de 1 à t Si x = E[i ] sortir : x ∈ E sortir : x ∉ E Considérons à titre d’exemple deux algorithmes différents Capables de rechercher un élément x dans un ensemble E. Appartient1, à gauche, commence par initialiser un compteur i des éléments de E. Il entre alors dans une boucle qui compare le ième élément de E avec x et sort positivement de la recherche s’ils sont égaux. Sinon il incrémente i, invoque un autre algorithme pour calculer la taille t de E, et répète la boucle tant que i de dépasse pas t. Si x n’est pas trouvé dans E au terme de la boucle l’algorithme sort négativement de la recherche. Appartient2, à droite, calcule d’abord la taille t de E. Ensuite pour un compteur d’éléments i allant de 1 à t, il compare en boucle le ième élément de E avec x et sort positivement de la recherche s’il est égal à x. Sinon il sort négativement au terme de la boucle.

7 Evaluation critique Ces algorithmes sont-ils corrects?
Se terminent-ils dans tous les cas? Donnent-ils la bonne réponse? Quid de Appartient1 si E est vide? Quid de Appartient2 si E change pendant la recherche? => Répondre à ces questions exige des démonstrations mathématiques Ces algorithmes sont-ils efficaces? => Répondre à ces questions fait appel à la notion de complexité = espace et temps nécessaires à un algorithme dans le pire des cas = nombre d’instructions élémentaires à exécuter (hors du cadre de cette leçon) = fonctions de la taille des données Une première question qu’il convient de se poser à propos d’un algorithme est de savoir s’il est correct, s’il se termine dans tous les cas, et s’il donne la bonne réponse. Que ferait par exemple Appartient1 si E était vide? Que ferait par exemple Appartient2 si le contenu de E évoluait pendant la recherche? Répondre à ces questions exigerait des démonstrations mathématiques. - Une deuxième question intéressante est de savoir si un algorithme est efficace. Répondre à cette question demande d’évaluer ce qu’on appelle sa complexité. Cette complexité est une mesure de l’espace et du temps que demande son exécution. La question de l’espace requis par l’exécution d’un algorithme est hors du cadre de cette leçon. La question du temps est liée au nombre d’instructions élémentaires de l’algorithme. Les deux questions dépendent évidemment de la taille des données de l’algorithme. La complexité est conventionnellement calculée pour le pire des cas, c’est-à-dire le cas où les données sont présentées sous la forme la plus compliquée.

8 Complexité de Appartient1
Soit taille(E) = n 1 instruction 2 instructions (lire E[i] et comparer à x) n instructions (1 incrément par élément) exécutées n fois dans le pire des cas => C(Appartient1, n) = 1 + n (n+4) Appartient1 entrée: x,E sortie: x ∈ E ? i ← 1 Répéter Si x = E[i] sortir x ∈ E i ← i+1 t ← taille(E) jusque i > t sortir x ∉ E Essayons de compter le nombre d’instructions de l’algorithme Appartient1. - Imaginons que la taille de E soit de n éléments. L’initialisation de i coute 1 instruction. La comparaison de i à un élément de E coute 2 instructions, 1 pour lire le ième élément de E et 1 pour le comparer à x. L’incrémentation de i coute 1 instruction. L’algorithme taille(E) doit assurément couter au moins une instruction pour incrémenter un compteur dont la valeur finale sera assignée à t, soit au moins n instructions au total (et cela pourrait être un peu plus). La comparaison de i à t pour sortir de boucle en cas de recherche négative coute aussi une instruction. Ces 4 dernières instructions sont donc exécutées en boucle n fois dans le pire des cas où x ne figurerait pas dans E. La complexité C de l’algorithme Appartient1 pour E contenant n éléments est donc égale à 1 + n x (n+4).

9 Complexité de Appartient2
Soit taille(E) = n n instructions (1 incrément par élément) 2 instructions (calculer i et comparer à t) 2 instructions (lire E(i) et comparer à x) exécutées n fois dans le pire des cas => C(Appartient2, n) = n + 4n Appartient2 entrée: x,E sortie: x ∈ E ? t ← taille(E) Pour i de 1 à t Si x = E[i ] sortir : x ∈ E sortir : x ∉ E Essayons maintenant de compter les d’instructions de l’algorithme Appartient2. - Nous imaginons toujours que la taille de E soit de n éléments. Comme dans le cas Appartient1, le calcul de la taille t coute au minimum n instructions. L’initialisation ou l’incrémentation de i coute ensuite 1 instruction, suivie d’une 2e instruction pour comparer i à t. Viennent ensuite 2 autres instructions pour lire le ième élément de E et le comparer à x. Ces 4 dernières instructions sont exécutées n fois dans le pire des cas. La complexité C de l’algorithme Appartient2 pour E contenant n éléments est donc égale à n + 4n.

10 Comparaison de Appartient1 et Appartient2
=> C(Appartient1, n) = 1 + n(n+4) = n2 + 4n + 1 => C(Appartient2, n) = n + 4n = 5n => C(Appartient1, n) >> C(Appartient2, n) pour n >> ce qui est vrai dans tous les cas qui valent la peine d’être automatisés ! => Nouvelle question: peut-on faire encore mieux que 5n ? => Réponse: oui si E est une liste pré-triée -> voir clip suivant - En résumé la complexité de Appartient1 est au pire de n2 + 4n + 1 instructions … … alors que celle de Appartient2 est au pire de 5n instructions. Il est donc évident que celle de Appartient1 est supérieure à celle de Appartient2. Elle est même d’autant plus supérieure que n est grand. Or un automate qui appliquerait un algorithme automatiquement ne vaut la peine que pour de grands n. Donc en pratique Appartient2 est bien plus efficace que Appartient1. La question suivante est de se demander si Appartient2 est le plus efficace de tous les algorithmes de recherche ou si on peut faire encore mieux que 5n? Et la réponse est oui si les éléments de E ont été préalablement rangés dans une liste pré-triée par ordre alphabétique ou autre. C’est le sujet du videoclip suivant.


Télécharger ppt "Information, Communication, Calcul"

Présentations similaires


Annonces Google