MATHMATIQUES DISCRTES Chapitre 2 section 1 Franois Meunier

  • Slides: 32
Download presentation
MATHÉMATIQUES DISCRÈTES Chapitre 2 (section 1) François Meunier DMI

MATHÉMATIQUES DISCRÈTES Chapitre 2 (section 1) François Meunier DMI

Algorithmes Fondement de la programmation et du développement de logiciel. l Généralement, un algorithme

Algorithmes Fondement de la programmation et du développement de logiciel. l Généralement, un algorithme représente une procédure définie effectuant une tâche donnée. l Un programme est une description d’un algorithme, écrit dans un language qu’un ordinateur peut interpréter, utilisant que des opérations que l’ordinateur peut exécuter. l Un programme est l’implémentation de son algorithme correspondant. l

Algorithmes déjà utilisés l Arithmétique: Addition de deux nombres naturels sous forme décimale, en

Algorithmes déjà utilisés l Arithmétique: Addition de deux nombres naturels sous forme décimale, en utilisant la retenue. l Similaire: Soustraction en utilisant l’emprunt. l Multiplication & division. l l Votre recette de cuisine préférée. l Comment vous inscrire aux cours de l’UQTR. l Comment voter au. X élection. S.

Langages de programmation l Langages programmation communs: Récents: Java, C, C++, C#, Visual Basic,

Langages de programmation l Langages programmation communs: Récents: Java, C, C++, C#, Visual Basic, Java. Script, Perl, Tcl, Pascal, et autres… l Anciens: Fortran, Cobol, Lisp, Basic l Assembleurs, codage de bas-niveau. l l Dans ce cours, nous utiliserons un langage “pseudo-code”.

Exemple d’Algorithme (Français) l Tâche: Avec une séquence {ai}=a 1, …, an, ai N,

Exemple d’Algorithme (Français) l Tâche: Avec une séquence {ai}=a 1, …, an, ai N, trouver le plus grand élément. l Algorithme correspondant, en Français: Initialiser une variable temporaire v (valeur la plus grande actuelle) à la valeur de a 1. l Inspecter les prochains éléments ai dans la séquence. l SI ai>v, Alors ré-initialiser v avec la valeur de a i. l Répéter les 2 dernières étapes tant qu’il y a des éléments dans la séquence, & retourner v. l

Execution d’un Algorithme Quand un logiciel est démarré, son programme ou son algorithme est

Execution d’un Algorithme Quand un logiciel est démarré, son programme ou son algorithme est alors exécuté par un ordinateur. l Avec un algorithme, nous pouvons aussi faire l’exécution à la main, en parcourant chacune des étapes de façon crayon-papier. l Avant ~1940, “ordinateur” signifiait une personne dont la tâche était d’exécuter des algorithmes. l

Exécution de l’algorithme Max l Avec {ai}=1, 7, 12, 3, 15, 8, 5. Trouver

Exécution de l’algorithme Max l Avec {ai}=1, 7, 12, 3, 15, 8, 5. Trouver le maximum… l Initialiser v = a 1 = 1. l Inspecter l’élément: a 2 = 7. l SI a 2>v? OUI, alors v est initialisé à 7. l Inspecter l’élément : a 3 = 12. l SI 12>7? OUI, v est initialisé à 12. l SI 3>12? NON, v reste inchangé. l SI 15>12? OUI, v est initialisé à 15.

Caractéristiques d’un Algorithme l l l l Input: Informations entrantes. Output: Informations sortantes. Précision:

Caractéristiques d’un Algorithme l l l l Input: Informations entrantes. Output: Informations sortantes. Précision: Algorithme définit précisément. Correctitude: Outputs reliés aux inputs. Finitude: Exécutable dans un temps fini. Efficacité: Chaque instruction est exécutable. Généralité: Fonctionne pour différents inputs. Efficience: Utilise un minimun de ressources (CPU, mémoire).

Langage Pseudocode procédure nom(argument: type) variable : = expression Énoncés informels début énoncés fin

Langage Pseudocode procédure nom(argument: type) variable : = expression Énoncés informels début énoncés fin {commentaires} si condition alors énoncés [sinon énoncés] pour variable : = valeur initiale à valeur finale faire énoncés tant que condition faire énoncés nomproc(arguments) retourne expression

procédure nomproc(arg: type) l Permet de définir une procédure nomproc avec comme inputs (arguments)

procédure nomproc(arg: type) l Permet de définir une procédure nomproc avec comme inputs (arguments) arg qui sont des objets de type. l Exemple: procédure maximum(L: liste d’entiers) [énoncés cherchant le maximum…]

variable : = expression l Un énoncé d’assignation évalue l’expression, et réassigne la variable

variable : = expression l Un énoncé d’assignation évalue l’expression, et réassigne la variable à la valeur du résultat. l Exemple d’assignation: v : = 3 x+7 (si x est 5, v devient 22. ) l En pseudocode, une expression peut être exprimée de façon informelle: l x : = entier le plus grand de la liste L

Énoncé Informel l Nous pouvons écrire un énoncé informel en français, si son sens

Énoncé Informel l Nous pouvons écrire un énoncé informel en français, si son sens reste clair et précis: ex: “permuter x et y” l Seulement possible en pseudo-code. l Un algorithme ne doit pas être trop général, trop vague. l Décomposer un algorithme en étapes assez detaillées.

début énoncés fin l Grouper une séquence d’énoncés ensemble: début énoncé 1 énoncé 2

début énoncés fin l Grouper une séquence d’énoncés ensemble: début énoncé 1 énoncé 2 … énoncé n fin Parenthèses {} sont utilisées dans plusieurs langages. Cette séquence est utilisée comme un seul énoncé. l Peut être utilisé: l l Après la déclaration d’une procédure. Dans un énoncé si après le alors ou le sinon. Dans le corps des boucles pour ou tant que.

{commentaire} l Pas exécuté (ne fait rien). l Texte en Langage-Naturel exprimant certains aspects

{commentaire} l Pas exécuté (ne fait rien). l Texte en Langage-Naturel exprimant certains aspects de la procédure aux lecteurs humains. l Aussi appelé remarque (REM) dans des langages de programmation, ex: . BASIC. l Exemple, du programme max: l {Noter que v est le plus grand entier trouvé actuellement pour un i donné. }

si condition alors énoncé l Évaluation condition. de l’expression propositionelle Si le résultat de

si condition alors énoncé l Évaluation condition. de l’expression propositionelle Si le résultat de la proposition est VRAIE, alors exécuter les énoncés; l autrement, passer aux énoncés suivant l’énoncé si. l l Variante: énon 2 l si cond alors énon 1 sinon ssi cond est Fause, exécuter énon 2.

tant que condition énoncés l Évaluer l’expression propositionelle (Booléenne) condition. l Si le résultat

tant que condition énoncés l Évaluer l’expression propositionelle (Booléenne) condition. l Si le résultat est Vrai, alors exécuter énoncés. l Répéter ces deux actions tant que condition n’est pas Fause; alors poursuivre au prochain énoncé.

pour var : = début à fin énoncés début une expression entière. l fin

pour var : = début à fin énoncés début une expression entière. l fin une expression entière. l Sens: Répéter l’exécution des énoncés, avec la variable var : = début, ensuite avec var : = début+1, ensuite avec var : = début+2, etc. , avec finallement var : = fin. l Question: Qu’arrive-t-il si énoncés changent la valeur de var, ou les valeurs des expressions de début ou fin ? l

pour var : = début à fin énoncés l Le pour peut être exprimé

pour var : = début à fin énoncés l Le pour peut être exprimé en terme du tant que: début var : = début tant que var fin début énoncés var : = var + 1 fin

procédure(argument) l Un appel de la procédure, en fournissant en input les valeurs des

procédure(argument) l Un appel de la procédure, en fournissant en input les valeurs des expressions argument. l Plusieurs langages de programmation réfèrent à la notion de fonctions (un appel de procédure est similaire à l’application d’une fonction f(x)), ou sousroutines, sous-programmes, ou méthodes.

Procédure Max en pseudocode procédure max(a 1, a 2, …, an: entiers) v :

Procédure Max en pseudocode procédure max(a 1, a 2, …, an: entiers) v : = a 1 {premier élément plus grand} pour i : = 2 à n {visiter les autres éléments} si ai > v alors v : = ai {autre plus grand} { v correspond à la valeur la plus grande de la liste} retourner v

Exemple de création d’algorithme l Supposons que nous voulons écrire un algorithme qui évalue

Exemple de création d’algorithme l Supposons que nous voulons écrire un algorithme qui évalue le prédicat: Est. Premier: N→{T, F} l Détermine si un nombre naturel donné est premier. l Définir une première forme de cette fonction en logique des prédicats: n: Est. Premier(n) ¬ 1<d<n: d|n d divise n sans reste

Exemple Est. Premier , suite… l Notez que la forme existentielle peut être réécrite

Exemple Est. Premier , suite… l Notez que la forme existentielle peut être réécrite sous forme universelle : ¬ 1<d<n: d|n l 1<d<n: d | n 2≤ d ≤ n− 1: d | n d ne divise pas n de façon entière (reste ≠ 0) La forme universelle peut être traduite directement sous forme d’un énoncé de boucle pour: pour d : = 2 to n− 1 { Tester les diviseurs >1 & <n } si d|n alors retourner F {n a un diviseur d; non premier} retourner V { aucun diviseur; n est premier}

Optimiser Est. Premier l Optimisation possible: l Théorème soujacent: Si n a des diviseurs

Optimiser Est. Premier l Optimisation possible: l Théorème soujacent: Si n a des diviseurs entiers, d ≤ n 1/2. Notez un intervalle de pour d : = 2 à n 1/2 si d|n alors retourner F recherche plus petit. retourner V Preuve: Supposons un diviseur de n, a > 1, avec b : ≡ n/a. Alors n = ab, mais si a > n 1/2 alors b < n 1/2 (sachant que a est le plus petit diviseur) et n = ab = (n 1/2)2 = n, donc b serait alors un diviseur < que a ce qui est une contradiction.

Autre exemple l Problème de recherche dans une liste ordonnée. Avec une liste L

Autre exemple l Problème de recherche dans une liste ordonnée. Avec une liste L de n éléments triés dans un ordre donné (ex: numérique, alphabétique), l Avec un élément x donné, l Déterminez si x est dans la liste, l Si présent, retourner la position de x dans la liste. l

Algo. #1: Recherche Linéaire procédure recherche linéaire (x: entier, a 1, a 2, …,

Algo. #1: Recherche Linéaire procédure recherche linéaire (x: entier, a 1, a 2, …, an: suite d’entiers) i : = 1 {commencer au début de la liste} tant que (i n x ai) faire {TTQ non trouvé} i : = i + 1 {prochaine position} fin si i n alors position : = i {trouvé} sinon position : = 0 {non trouvé} retourner position {0 si non trouvé}

Algo. #2: Recherche Binaire lÀ chaque étape, inspecter l’élément milieu de la liste résiduelle

Algo. #2: Recherche Binaire lÀ chaque étape, inspecter l’élément milieu de la liste résiduelle pour la séparer en deux et en éliminer aussi la moitié pour ainsi converger vers l’élément recherché. <x <x <x >x

Algo. #2: Recherche Binaire procédure recherche binaire (x: entier, a 1, a 2, …,

Algo. #2: Recherche Binaire procédure recherche binaire (x: entier, a 1, a 2, …, an: suite d’entiers) i : = 1 {extrémité gauche de l’intervalle} j : = n {extrémité droite de l’intervalle} tant que i<j début {TTQ intervalle >1 élément} m : = (i+j)/2 {point milieu} si x>am alors i : = m+1 sinon j : = m fin si x = ai alors position : = i sinon position : = 0 retourner position

Autres exercises l Algorithme qui calcule la somme des valeurs entières d’un liste. l

Autres exercises l Algorithme qui calcule la somme des valeurs entières d’un liste. l procédure somme(a 1, a 2, …, an: entiers) s : = 0 {accumulateur} pour i : = 1 à n faire {parcourir la liste} s : = s + ai {+ l’élément ai} {s est la somme de tous les éléments} retourner s

Algorithme de tri l Les opérations de tri sont communes dans plusieurs applications. l

Algorithme de tri l Les opérations de tri sont communes dans plusieurs applications. l Ex: tableurs, BD l Aussi utiliser comme fonction dans des algorithmes de traitement de données. l Deux algorithmes de tri: Tri à bulle l Tri par insertion l Peu efficaces, ne devraient pas être utilisés sur de larges BDs

Tri à bulle l Les éléments les plus petits montent en haut de la

Tri à bulle l Les éléments les plus petits montent en haut de la liste. 30 31 1 32 33 2 34 3 30 1 31 32 2 33 3 34 1 30 31 2 32 3 33 34 1 30 2 31 3 32 33 34 1 2 30 3 31 32 33 34 1 2 3 30 31 32 33 34

Tri par insertion l Description l de l’algorithme: Pour chaque élément de la liste,

Tri par insertion l Description l de l’algorithme: Pour chaque élément de la liste, l “Insérer” cet élément à la position appropriée dans la liste triée générée actuellement: l l l Faire une recherche binaire pour trouver la position où doit être inséré le nouvel élément. Déplacer les éléments déjà triés de une position vers le bas. Insérer le nouvel élément à la position laissée vacante.

Revue: Algorithmes l Caractéristiques des algorithmes. l Pseudocode. l Exemples: Algorithmes Max, nombre premier,

Revue: Algorithmes l Caractéristiques des algorithmes. l Pseudocode. l Exemples: Algorithmes Max, nombre premier, recherche linéaire & binaire, de tri. l Comment évaluer formellement l’efficacité des algorithmes?