1 / 23

Introduction à l’algorithmique

Introduction à l’algorithmique. Introduction. Algorithme : Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant du nom d’un mathématicien arabe du IXeme siècle El-Khawarizmi C’est la base de tout programme informatique

yin
Download Presentation

Introduction à l’algorithmique

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction à l’algorithmique

  2. Introduction • Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. • Mot provenant du nom d’un mathématicien arabe du IXeme siècle El-Khawarizmi • C’est la base de tout programme informatique Exemple: Recette de la sauce blanche: • Faire revenir l’oignon haché fin dans du beurre, • Ajouter la farine, bien mélanger; • Rajouter le lait chaud, et mélanger pour éviter les grumeaux; • Laisser mijoter 15 minutes

  3. Algorithme: Suite finie d’instructions vérifiant: • Chaque étape est décrite de façon précise; • Chaque étape est déterministe: produit des résultats uniques; • L’algorithme s’arrête après un nb fini d’instructions • Reçoit des données en entrée; • Produit des données en sortie; • Généralité: Applicable à des ensembles différents de données d’entrée

  4. Différence entre problème et instance du problème • Exemple d’un problème: Tri d’un ensemble d’éléments • Entrée: Suite de n éléts a1,…an • Sortie: La suite réordonnée • Instances du problème: • Suite de nombres: 475, 787, 34, 245, 56, 350 • Suite de noms: Pierre, Christine, Sylvie, Samuel, Fabien

  5. Exemple d’un algorithme 1. x := a; 2. Si b>x, alorsx := b; 3. Sic>x, alorsx := c; := Opérateur d’assignation y := z signifie ``copie la valeur de z dans y’’. Valeur de z inchangée Paramètres d’entrée: a, b, c Valeur de sortie: x = max (a,b,c)

  6. Algorithme maximum: Retourne le maximum de 3 entiers Entrée: Trois entiers a, b, c; Sortie: x contenant la valeur maximale parmi a, b, c 1. Procéduremax(a,b,c) 2. x := a; 3. Sib>xalors // Si b plus grand que x, mettre x à jour x := b; 5. Sic>xalors // Si c plus grand que x, mettre x à jour x := c; 7. Retourner (x) 8. Fin max Pseudo-Code Trace de l’algorithme pour: a=1; b=5; c=3 x = 1 x = 5

  7. Pseudo-Code: Notation proche du code des langages de programmation (C, Pascal). Notation standard mais pas rigoureuse • Titre de l’algorithme, description brève, entrées, sorties • Procédures consécutives • Numéroter les lignes (facultatif) • Procédure commence par le mot ``Procédure’’, suivit du nom, suivit des paramètres • Instructions (lignes exécutables) entre ``Procédure’’ et ``Fin’’, exécutées l’une après l’autre • Bloc d’instructions entre ``Début’’ et ``Fin’’ • Ligne de commentaires signalée par // (ou /* */) • ``Retourne (x)’’ termine une procédure et retourne la valeur de x

  8. Instruction Si-Alors-Sinon(If-Then-Else) Sipalors action Si condition p vérifiée, exécuter action. Sipalors action 1; Sinon action 2; Si condition p vérifiée, exécuter action 1. Sinon, exécuter action 2. Bloc de conditions entre Début et Fin. Six ≥ 0 alors Début x := x-1; a := b+c; Fin

  9. Instruction Tant que Tant quepFaire action; Tant que p est vrai exécuter action Algorithme Plus-Grand-Element: Retourne la plus grande valeur d’une liste Entrée: n entiers S1,…, Sn Sortie: grand contenant le plus grand élément Procédureplus-grand (S,n) grand := S1; i:=2; Tant quei ≤ nFaire Début SiSi > grandalors // une plus grande valeur a été trouvée grand := Si; i := i+1; Fin Retourne(grand) Finplus-grand; Trace de l’algorithme: n=4; S1= -2; S2=6; S3=5; S4=6 grand =-2 i = 2 grand = 6 i = 3 i = 4 i = 5

  10. Instruction Pour (For) Pourvar := inità limiteFaire action; À chaque passage dans la boucle, var est incrémenté de 1. On s’arrête dès que var > limite Algorithme Plus-Grand-Element: Réécriture de l’algorithme précédent mais avec une boucle ``Pour’’ Entrée: n entiers S1,…, Sn Sortie: grand contenant le plus grand élément Procédureplus-grand (S,n) grand := S1; Pour i =1 à n Faire SiSi > grandalors // une plus grande valeur a été trouvée grand := Si; Retourne(grand) Finplus-grand;

  11. Subdivision d’un problème en sous-problèmes (plusieurs procédures) • Problème: Trouver le plus petit nombre premier strictement supérieur à un entier positif donné • Procédure pour déterminer si un entier m est un nombre premier. Il suffit de tester si m est divisible par un entier entre 2 et m/2 • Utiliser cette procédure pour trouver le plus petit nombre premier p supérieur à un entier n.

  12. Entrée: Un entier positif m Sortie: Vrai si m est premier, Faux si non. Procédureest-premier (m) Pouri := 2àENT(m/2)Faire Si m mod i = 0alors // i divise m Retourne(Faux) Retourne(Vrai) Finest-premier Entrée: Un entier positif n Sortie: Le plus petit nb premier m > n Procédurepremier-plus-grand (n) m := n+1; Tant que est-premier(m) est Faux Faire m := m+1; Retourne(m) Finest-premier Trace de premier-plus-grand pour n=8: Trace de est-premierpour m=9: Trace de est-premierpour m=11: Trace de est-premierpour m=10: i=2 11 mod 2 = 1 10 mod 2 = 0 9 mod 2 = 1 m = 9 i=3 9 mod 3 = 0 i=5 11 mod 5 = 1 m = 10 m = 11

  13. Algorithme d’Euclide • Trouver le plus grand diviseur commun (pgcd) de deux entiers Définition: q estun diviseur commun de m et n si q divise à la fois m et n (le reste de la division entière est 0) Le pgdc de m et n est le plus grand entier q divisant à la fois m et n. Exemple: pgcd(4, 6) = 2; pgcd(3,8) = 1; pgcd(9, 12) = 3; Utile pour la simplification de fractions: 9/12 = 3.3/4.3 = 3/4

  14. Théorème 1: Soient m, n et c trois entiers • Si c est un diviseur commun de m et n, alors c divise (m+n). • Si c est un diviseur commun de m et n, alors c divise (m-n). • Si c divise m, alors c divise mn Soient a, bdeux entiers >0. Si on divise a par b, on obtient un reste r et un quotient q vérifiants: a = bq+r, avec 0≤r<b, et q≥0 À l’aide du théorème 1 on montre: Théorème 2: Soient a, bdeux entiers positifs. Soient q le quotient et r le reste de la division entière de a par b. Alors pgcd(a,b) = pgcd(b,r)

  15. Trouver le PGCD de a et b Exemple: pgcd(30, 105) • 1ère méthode: Trouver tous les diviseurs de a et b, et trouver le diviseur commun le plus grand • Diviseurs de 30: 1, 2, 3, 5, 6, 10, 15, 30 • Diviseurs de 105: 1, 3, 5, 7, 15, 21, 35, 105 • pgcd(30, 105) = 15 • 2ème méthode: Utiliser le théorème 2 • 105 = 30.3 + 15. Donc pgcd(105, 30) = pgcd(30,15) • 30 = 15.2 + 0. Donc pgcd(30, 15) = pgcd(15,0) • pgcd(15,0)=15 • pgcd(105,30)=pgcd(30,15)=pgcd(15,0)=15 La méthode 2 est la méthode d’Euclide

  16. Méthode d’Euclide Soient r0, r1 deux entiers strictement positifs, tels que r0=r1.q+r2 avec 0≤r2<r1 • Si r2 = 0, pgcd (r0, r1) = r1 • Sinon, rediviser ri par ri+1tant que ri+1 est différent de 0 • Si rn est le premier reste nul, alors pgcd(r0,r1) = pgcd(r1,r2) = … =pgcd(rn-1,rn)= pgcd(rn-1,0) = rn-1

  17. Algorithme d’Euclide Entrée: a, b deux entiers positifs Sortie: pgcd(a,b) Procédurepgcd(a,b) Tant queb pas 0Faire Début diviser a par b: a = b.q+r, 0 ≤ r < b; a:=b; b:=r; Fin Retourner (a) Finpgcd Trace de l’algorithme pour a=504 et b=396 a 504 396 108 1 b 396 108 a 72 3 b a 108 72 36 1 72 36 a b 0 2 b

  18. Procédure récursive • Procédure qui s’invoque elle-même Exemple: n! = n(n-1)(n-2)…2.1 Si n≥0 0! = 1 n! = n(n-1)! pour n≥1 5! = 5.4! 4! = 4.3! 3! = 3.2! 2! = 2.1! 1! = 1.0! = 120 = 24 = 6 = 2 = 1 • Toute procédure récursive doit avoir une condition d’arrêt: cas de base qui permet de ne plus invoquer la procédure. • Ici, la condition d’arrêt est n=0

  19. Entrée: Entier n≥0 Sortie: n! Procédurefactoriel (n) Sin = 0alors Retourne(1) Retourne(n. factoriel(n-1)) Finfactoriel factoriel( 0 ): Retourne: 1 Trace pour n =3: factoriel( 3 ): factoriel( 1 ): factoriel( 2 ): Retourne: 1. factoriel(0) Retourne: 3. factoriel(2) Retourne: 2. factoriel(1) 1.1=1 3.2=6 2.1=2

  20. Trace pour n =3 : Entrée: Entier n≥0 Sortie: n! Procédurefactoriel-iteratif (n) res = 1; courant = n; Tant quecourant>0Faire res := res * courant; courant := courant-1; Fin Tant que Retourne (res) Finfactoriel-iteratif Procédure itérative pour le calcul de n! res = 1 courant = 3 res = 3 courant = 2 res = 6 courant = 1 res = 6 courant = 0

  21. Procédure récursive pour le calcul du pgcd Entrée: a, b deux entiers >0 Sortie: pgcd(a,b) Procédurepgcd-rec (a,b) Sib = 0alors Retourner(a); diviser a par b: a = b.q+r, 0 ≤ r < b; Retourner(pgcd-rec (b,r)) Finpgcd-rec pgcd-rec(108, 72) 108 = 72 . 1 + 36 pgcd-rec(72,36) 36 pgcd-rec(72,36) pgcd-rec(36, 0) 36 pgcd-rec(396, 108) Trace pour a=504 et b=396: pgcd-rec(36, 0) 396 = 108 . 3 + 72 pgcd-rec(504, 396) pgcd-rec(108,72) 36 504 = 396. 1 + 108 36 pgcd-rec(396, 108) 36

  22. Nombres de Fibonacci Exemple: Un robot peu avancer par des pas de 1 ou 2 mètres. Calculer le nombre de façons différentes de parcourir une distance de n mètres

  23. Entrée: n Sortie: Pas(n) Procédurepas-robot (n) Sin=1 ou n=2alors Retourne (n) Retourne(Pas(n-1) + Pas(n-2) ) Fin pas-robot • Pas(n): Nombre de possibilités pour parcourir n mètres. • Pas(1) = 1, Pas(2) = 2; • Pour n>2: • Si premier pas = 1mètres, il reste n-1mètres -> Pas(n-1) • Si premier pas = 2mètres, il reste n-2mètres -> Pas(n-2) Donc, Pas(n) = Pas(n-1)+Pas(n-2) Séquence de Fibonacci: f1 = 1 f2 = 2 fn = fn-1 + fn-2pour n>2

More Related