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

Introduction à l’algorithmique

Présentations similaires


Présentation au sujet: "Introduction à l’algorithmique"— Transcription de la présentation:

1 Introduction à l’algorithmique
Définition et formulation d’un algorithme. Applications à différents types de problèmes. Opérations élémentaires. Choix d’un algorithme. Efficacité d’un algorithme. Analyse en pire cas et analyse en moyenne. Décomposition fonctionnelle : identification des tâches principales à accomplir et découpage en sous-tâches. Méthodologie de résolution de problème.

2 Définition d’un algorithme
Procédure de calcul non ambigüe, finie, déterministe et exprimée en termes d’instructions élémentaires exécutables. Méthode de solution d’un problème en termes d’opérations élémentaires exécutables. Aucune place pour l’interprétation, l’intuition et la créativité. Différents algorithmes peuvent résoudre un même problème et différents programmes peuvent servir à décrire un même algorithme. Le choix d’un algorithme pour résoudre un problème peut dépendre de plusieurs facteurs.

3 Définition d’un algorithme
Aucune ambiguïté : On doit tout spécifier dans le moindre détail. Absence de mémoire de son expérience passée. Exemple : Explications pour trouver une maison de campagne. Imprimer les résultats d’un programme résolvant un mot-mystère. Déterministe : L’exécution d’un algorithme avec les mêmes données d’entrée doit toujours réaliser exactement les mêmes tâches et fournir les mêmes résultats. Exemple : À chaque jour, miser tout votre avoir sur le cheval le plus coté jusqu’à ce que vous soyez millionnaire ou ruiné. Cela dépend du jour où vous commencez à miser. Cela dépend du montant d’argent que vous avez ce jour-là. Fini : L’exécution d’un algorithme nécessite un nombre fini d’opérations élémentaires. Exemple : Deviner un nombre entier positif, négatif ou nul. Deviner un nombre réel. Évaluer la racine carrée du nombre 2.

4 Définition d’une opération élémentaire
Lors de la conception d’un algorithme, le niveau de détail doit être bien défini ou encore, le jeu d’instructions ou d’opérations élémentaires disponible. Le temps d’exécution d’une opération élémentaire est borné par une constante qui ne dépend pas des données à manipuler. Exemple : OUI NON Valeur absolue d’un nombre. Tri d’une suite de n entiers. Addition de 2 entiers.

5 Un peu d’histoire … Entre 400 et 300 avant Jésus-Christ, un mathématicien grec Euclide a inventé un algorithme qui détermine le plus grand commun diviseur de 2 entiers positifs. Il s’agit du premier algorithme non trivial. Le mot algorithme est dérivé du nom d’un mathématicien de Perse, Mohammed alKhowârizmî (en latin Algorismus), qui a vécu au 9ième siècle. Contribution : algorithmes pour additionner, soustraire, multiplier ou diviser des nombres décimaux.

6 Composantes de base d’un algorithme
Lecture d’une donnée. Écriture d’une donnée. Conservation d’une donnée en mémoire. Test qui vérifie si une condition est remplie avec une action à entreprendre sur la base du résultat de ce test. Répétition ou itération d’une suite d’étapes élémentaires. Exemple : Affichage de la somme des éléments d’une suite d’entiers. Lire un entier positif n. 1. Conserver en mémoire la valeur 0 identifiée par somme. 2. Tant et aussi longtemps que les n nombres ne sont pas lus 3. Lire un entier. 3.1. Ajouter cet entier à la valeur identifiée par somme. 3.2. Écrire la valeur identifiée par somme. 4.

7 Exemple – Tri d’une pile de feuilles
Trier une grosse pile de feuilles sur un petit bureau avec en main uniquement un stylo. Placer la pile de feuilles à gauche du bureau. 1. Enlever le capuchon du stylo. 2. Tant et aussi longtemps que la pile de feuilles de gauche contient au moins 2 feuilles alors 3. 3.1. Choisissez les 2 premières feuilles de la pile. Si les 2 feuilles ne sont pas en ordre, remettre le capuchon du stylo. 3.2. Ordonner les 2 feuilles. 3.3. Prendre la feuille du dessus de la pile de gauche et la placer dans la pile de droite. 3.4. 4. Placer la dernière feuille de la pile de gauche dans la pile de droite.

8 Exemple – Tri d’une pile de feuilles (suite)
Tant et aussi longtemps que la pile de feuilles de droite n’est pas vide alors 5. Prendre la feuille du dessus de la pile de droite et la placer dans la pile de gauche. 5.1. Si le capuchon du stylo est remis alors retourner à l’étape 2. 6. Terminé. 6.

9 Exemple – Lister les indices d’un sac de billes
Vous avez en main 3 sacs, l’un est rempli de billes numérotées. Les 2 autres sont vides. But : lister les indices des billes en ordre décroissant. { Initialisation. } 1. Le sac # 1 est rempli; les sacs # 2 et #3 sont vides. { À l’aide des sacs # 1 et #2 uniquement, conservez dans la main gauche la bille d’indice le plus élevé tandis que les autres billes auront été transférées du sac # 1 au sac # 2. } 2. Imprimer l’indice de la bille de la main gauche. 3. Placer la bille d’indice le plus élevé (de la main gauche) dans le sac # 3. 4. Si le sac # 2 n’est pas vide alors 5. Interchanger les sacs # 1 et # 2. 5.1. Retourner à l’étape # 2. 5.2.

10 Lister les indices d’un sac de billes (suite)
{ À l’aide des sacs # 1 et #2 uniquement, conservez dans la main gauche la bille d’indice le plus élevé tandis que les autres billes seront transférées du sac # 1 au sac # 2. } 2. Prendre une bille du sac # 1 dans la main gauche. 2.1. Tant et aussi longtemps que le sac # 1 n’est pas vide alors 2.2. Prendre une bille du sac # 1 dans la main droite. 2.2.1 Si l’indice de la bille de la main gauche est plus petit que l’indice de la bille de la main droite alors échanger les 2 billes des mains gauche et droite. 2.2.1 Placer la bille de la main droite dans le sac # 2. 2.2.3

11 Remplacement d’une ampoule grillée par un robot ménager
{ Enlever l’ampoule grillée. } 1. Placer l’escabeau sous l’ampoule grillée. 1.1 { Grimper jusqu’à ce qu’on puisse atteindre l’ampoule. } 1.2 Tant et aussi longtemps que nous n’avons pas atteint l’ampoule gravir l’escabeau d’un échelon. 1.2.1 1.3 { Dévisser l’ampoule jusqu’à ce qu’elle se dégage. } 1.3.1 Tant et aussi longtemps que l’ampoule ne se libère pas dévisser l’ampoule d’un tour. { Mettre en place une nouvelle ampoule. } 2. Choisir une nouvelle ampoule de même puissance. 2.1 Aligner le culot de l’ampoule et le réceptacle du lustre. 2.2

12 Remplacement d’une ampoule grillée par un robot ménager (suite)
{ Vissez l’ampoule à fond. } 2.3 Tant et aussi longtemps que l’ampoule n’est pas vissé fermement visser l’ampoule d’un tour. 2.3.1 { Descendre de l’escabeau. } 2.4 2.4.1 Tant et aussi longtemps que vous n’avez pas atteint le sol descendre l’escabeau d’un échelon.

13 Multiplication de 2 entiers positifs (méthode à la russe)
Écrire le multiplicateur et le multiplicande l’un à côté de l’autre. 1. multiplicateur multiplicande 45 19 Si le multiplicateur est impaire alors écrire comme résultat la valeur du multiplicande à droite de la colonne multiplicande sinon écrire comme résultat 0 à droite de la colonne multiplicande 2. multiplicateur multiplicande résultat 45 19 19 Tant et aussi longtemps que le nombre sous le multiplicateur est > 1 3. Diviser par 2 le nombre sous le multiplicateur, sans tenir compte du reste éventuel. 3.1 Doubler par addition le nombre sous le multiplicande. 3.2 Si le multiplicateur est impaire alors écrire comme résultat la valeur du multiplicande à droite ajoutée au résultat précédent sinon écrire comme résultat la valeur précédente. 3.3

14 Multiplication de 2 entiers positifs (suite)
multiplicateur multiplicande résultat 45 19 19 22 38 19 11 76 95 5 152 247 2 304 247 1 608 855 Écrire le résultat. 4. résultat 855 Note : Les opérations élémentaires sont : multiplication et division par 2, addition.

15 Algorithme qui vérifie si un nombre entier positif est premier
Lire un entier positif n. 1. Pour chaque valeur de i entre 2 et n 2. Si le reste de la division de n par i est égale à 0 (i est facteur de n) alors 2.1 Écrire que le nombre n n’est pas premier. 2.1.1 2.1.2 L’algorithme prend fin. Écrire que le nombre n est premier. 3. L’algorithme prend fin. 4. Démonstration d’Euclide en grec que l’ensemble des nombres premiers est infini.

16 Algorithme qui vérifie si une année est bissextile
Une année est bissextile tous les 400 ans; les siècles ne sont pas bissextiles et une année sur 4 est bissextile. Lire une année n. 1. Si n possède comme facteur 400 alors 2. Écrire que n est une année bissextile. 2.1 L’algorithme prend fin. 2.2 Si n possède comme facteur 100 alors 3. Écrire que n n’est pas une année bissextile. 3.1 L’algorithme prend fin. 3.2 Si n possède comme facteur 4 alors écrire que n est une année bissextile. sinon écrire que n n’est pas une année bissextile. 4. Les femmes étaient censées profiter des années bissextiles pour faire la grande demande. L’algorithme prend fin. 5.

17 Estimé de . Un joueur de dards se pratique sur une surface carrée où chaque côté est de longueur c. Un cercle de rayon r est inscrit dans ce carré. Son entraîneur constate qu’il ne rate jamais la surface carrée mais ses dards sont répartis uniformément sur le carré. Voici un bon moyen d’estimer , se dit-il en lui-même car # d’essais à l’intérieur du cercle =  # total d’essais 4

18 Estimé de . 1. Mémoriser dans ECHEC la valeur 0. 2.
Mémoriser dans REUSSITE la valeur 0. 2. Tant et aussi longtemps que le joueur n’a pas terminé sa pratique, si le lancer est une réussite alors augmenter la valeur de REUSSITE de 1 alors augmenter la valeur de ECHEC de 1. 3. Écrire « Voici l’estimé : ». 4. Écrire la valeur de l’expression : 4 * REUSSITE / (REUSSITE + ECHEC). 5.

19 Jour d’élection Dans un pays où le baobab est roi, il existe 4 partis politiques, le Bleu, le VERT, le Rouge et le Blanc. C’est jour d’élection, chaque électeur doit classer le candidat de chaque parti en commençant par le préféré et en terminant avec celui qui est rejeté avec le plus de vigueur. Lorsqu’un candidat est choisi en première position, il gagne 3 points; lorsqu’un candidat est choisi en deuxième position, il gagne 2 points; lorsqu’un candidat est choisi en troisième position, il gagne 1 point; lorsqu’un candidat est choisi en quatrième position, il gagne aucun point. Déterminer le parti qui prendra le pouvoir dans ce pays d’Afrique.

20 Jour d’élection (choix d’un président)
Conserver dans Bleu la valeur 0. 1. Conserver dans Blanc la valeur 0. Conserver dans Rouge la valeur 0. Conserver dans Vert la valeur 0. Tant et aussi longtemps qu’il reste des bulletins de vote dans les boîtes de scrutin, procédez comme suit : 2. 2.1 Prendre un bulletin de vote. Ajouter 3 points au parti en 1e position. 2.2 Ajouter 2 points au parti en 2ième position. 2.3 Ajouter 1 point au parti en 3ième position. 2.4 Si le nombre de points du parti Bleu > le nombre de points du parti Vert alors mémoriser dans Gagnant le nombre de points du parti Bleu sinon mémoriser dans Gagnant le nombre de points du parti Vert. 3. 4. Si Gagnant < le nombre de points du parti Rouge alors mémoriser dans Gagnant le nombre de points du parti Rouge.

21 Jour d’élection (choix d’un président)
Si Gagnant < le nombre de points du parti Blanc alors mémoriser dans Gagnant le nombre de points du parti Blanc. 5. Conserver dans Nombre_de_gagnants la valeur 0. 6. Si Gagnant est égale au nombre de points du parti Blanc alors ajouter 1 à Nombre_de_gagnants sinon le candidat Blanc est éliminé. 7. Si Gagnant est égale au nombre de points du parti Bleu alors ajouter 1 à Nombre_de_gagnants sinon le candidat Bleu est éliminé. 8. Si Gagnant est égale au nombre de points du parti Vert alors ajouter 1 à Nombre_de_gagnants sinon le candidat Vert est éliminé. 9. Si Gagnant est égale au nombre de points du parti Vert alors ajouter 1 à Nombre_de_gagnants sinon le candidat Vert est éliminé. 10. Si Nombre_de_gagnants > 1 alors un 2ième scrutin est effectué avec les candidats non éliminés sinon le candidat non éliminé est le nouveau président de ce pays. 11.

22 Algorithme pour résoudre une équation du second degré
Il s’agit de trouver les racines si elles existent de l’équation a x2 + b x + c = 0. Lire les coefficients a, b et c. 1. Si a est égale à 0 alors Écrire " Nous avons une équation du premier degré où b doit être différent de 0. La racine est : ". Calcul de - c / b. Écrire le résultat du calcul. 2. 2.1 2.2 2.3 Si a est différent de 0 alors Calcul du discriminant b2 – 4 a c. Mémoriser dans DELTA la valeur du résultat. Si DELTA est plus petit que 0 alors écrire " Il n’existe pas de racines réelles. " sinon calcul de (– b + DELTA) / (2 a). mémoriser dans RACINE1 le résultat du calcul. calcul de (– b - DELTA) / (2 a). mémoriser dans RACINE2 le résultat du calcul. écrire " Les racines réelles sont : ". écrire les valeurs de RACINE1 et RACINE2. 3.

23 Calcul de la moyenne et de la variance des notes des étudiants
Soient x1, x2, …, xn les notes obtenues à un examen en Mathématiques du Ministère par des étudiants de sec. IV, il s’agit de calculer les 2 mesures suivantes : n Moyenne arithmétique (échantillonnale) : x = 1  xi n i = 1 n Variance échantillonnale (mesure de dispersion) : s2 = 1  (xi -x)2 n-1 i = 1 Le calcul de la variance échantillonnale crée une difficulté carx n’est pas connu à priori. Solution : Réécrire s2 comme suit : n s2 =  xi2 - nx2 i = 1 n - 1

24 Algorithme permettant de calculer la moyenne et la variance des notes
Mémoriser dans n la valeur 0. 1. Mémoriser dans SOMME la valeur 0. 2. Mémoriser dans CARRE la valeur 0. 3. Tant et aussi longtemps que des notes n’ont pas été considérées 4. Lire une note dans x. 4.1 Ajouter à SOMME la valeur de x. 4.2 Ajouter à CARRE la valeur de x*x. 4.3 Ajouter à n la valeur de 1. 4.4 Écrire " La moyenne échantillonnale est : " . 5. Écrire SOMME / n . 6. Écrire " La variance échantillonnale est : " . 7. Écrire la valeur de l’expression : (CARRE – SOMME * SOMME / n) / (n - 1). 8.

25 Recherche le no. de la page renfermant un mot dans un dictionnaire
ALGORITHME SÉQUENTIEL Supposons que les pages du dictionnaire sont numérotées de 1 à n et que le mot recherché existe dans le dictionnaire. Lire le mot m à rechercher. 1. Lire le nombre n de pages du dictionnaire. 2. Se positionner à la première page du dictionnaire. 3. Si m est plus petit ou égal au dernier mot de la page courante alors 4. 4.1 Écrire le numéro de la page courante. L’algorithme prend fin. 4.2 Se positionner à la page suivante dans le dictionnaire. 5. Retourner à l’étape 4. 6.

26 Recherche le no. de la page renfermant un mot dans un dictionnaire
ALGORITHME DE RECHERCHE DICHOTOMIQUE Supposons que les pages du dictionnaire sont numérotées de 1 à n et que le mot recherché existe dans le dictionnaire. Lire le mot m à rechercher. 1. Lire le nombre n de pages du dictionnaire. 2. Mémoriser dans i la valeur de 1. 3. Mémoriser dans j la valeur de n. 4. Tant et aussi longtemps que i < j faire 5. Calcul de [(i + j) / 2] où [x] désigne la partie entière de x. 5.1 Mémoriser ce résultat dans k. 5.2 Si m < 1e mot de la page k alors mémoriser k–1 dans j. 5.3 Si m  dernier mot de la page k alors mémoriser k dans i et j. 5.4 Si m > dernier mot de la page k alors mémoriser k+1 dans i. 5.5 Écrire la valeur conservée dans i. 6.

27 Efficacité d’un algorithme
Il existe habituellement plusieurs algorithmes pour résoudre un problème. Lequel choisir ? Il faut choisir habituellement celui qui exige le moins de ressources pour trouver la solution à votre problème. Qu’entend-on par ressource ? Le temps nécessaire pour trouver la solution. La quantité d’information à mémoriser. Le meilleur algorithme est-il toujours le même peu importe les données du problème ? Non, car certains algorithmes ont un bon comportement lorsque le problème est de petite taille tandis que leur performance est réduite lorsque la taille du problème augmente sensiblement. L’inverse est aussi vrai. Exemple : Les algorithmes de recherche précédents sont-ils aussi efficaces avec un feuillet de quelques pages vs un gros dictionnaire ?

28 Comment choisir l’algorithme le plus efficace ?
1e approche : approche empirique Construire chaque algorithme d’intérêt permettant de résoudre notre problème. Appliquer à chaque algorithme différentes données du problème tout en faisant varier la taille du problème. Sélectionner l’algorithme qui nous semble le plus performant en fonction des résultats obtenus. Exemple : Considérer les algorithmes de recherche précédents avec des dictionnaires de différentes tailles ainsi que différents mots à rechercher. Inconvénient : Il faut implanter et exécuter chaque algorithme sur des données différentes.

29 Comment choisir l’algorithme le plus efficace ?
2ième approche : approche théorique Calculer le nombre d’opérations élémentaires nécessaires à l’algorithme pour résoudre le problème. Avantages : Évite d’implanter des algorithmes inefficaces et ainsi perdre du temps. Évite d’appliquer aux algorithmes différentes données du problème tout en faisant varier la taille du problème. Cette analyse ne dépend pas de l’ordinateur utilisé le cas échéant. Analyse en pire cas : # d’opérations élémentaires nécessaires à l’algorithme pour résoudre le problème dans le pire cas (les données du problème où l’algorithme est le plus coûteux). Analyse en moyenne : # d’opérations élémentaires en moyenne nécessaires à l’algorithme selon la fréquence des données.

30 Analyse de l’algorithme de recherche séquentiel dans un dictionnaire
Supposons que les pages du dictionnaire sont numérotées de 1 à n et que le mot recherché existe dans le dictionnaire. Lire le mot m à rechercher. 1. Lire le nombre n de pages du dictionnaire. 2. Se positionner à la première page du dictionnaire. 3. 4. Si m est plus petit ou égal au dernier mot de la page courante alors 4.1 Écrire le numéro de la page courante. 4.2 L’algorithme prend fin. Se positionner à la page suivante dans le dictionnaire. 5. Retourner à l’étape 4. 6. # d’opérations élémentaires = (k – 1) + 2 = 3 k + 2 où k désigne le no. de page recherché. Analyse en pire cas : 3 n + 2. Analyse en moyenne* : n / 2. * On suppose que la fréquence des mots recherchés est la même ainsi que le nombre de mots dans chaque page.

31 Analyse de l’algorithme de recherche dichotomique dans un dictionnaire
Lire le mot m à rechercher. 1. Lire le nombre n de pages du dictionnaire. 2. Mémoriser dans i la valeur de 1. 3. Mémoriser dans j la valeur de n. 4. Tant et aussi longtemps que i < j faire 5. Calcul de [(i + j) / 2] où [x] désigne la partie entière de x. 5.1 Mémoriser ce résultat dans k. 5.2 Si m < 1e mot de la page k alors mémoriser k–1 dans j. 5.3 Si m  dernier mot de la page k alors mémoriser k dans i et j. 5.4 Si m > dernier mot de la page k alors mémoriser k+1 dans i. 5.5 Écrire la valeur conservée dans i. 6. # d’opérations élémentaires en pire cas = … = log2n log2n fois

32 Évaluation d’un polynôme de degré n
Il s’agit de calculer f(x) = a0 + a1 x + a2x2 + … + an xn pour une valeur de x. { Lecture des données du problème. } 1. Lire le degré n du polynôme. 1.1 Pour chaque valeur de i allant de 0 à n lire le coefficient ai. 1.2 Lire la valeur de x. 1.3 { Calcul de f(x). } 2. Mémoriser dans SOMME le coefficient a0. 2.1 Pour chaque valeur de j allant de 1 à n 2.2 Mémorisez dans TERME le coefficient aj. 2.2.1 Répétez j fois les opérations suivantes : 2.2.2 Multiplier TERME par x. Mémoriser dans TERME le résultat de la multiplication. Additionner la valeur de SOMME à celle de TERME. 2.2.3 Mémoriser dans SOMME le résultat de l’addition. 2.2.4

33 Évaluation d’un polynôme de degré n : analyse de l’algorithme
{ Écrire la valeur de f(x). } 3. Écrire la valeur mémorisée dans SOMME. Calcul du # d’opérations élémentaires { Lecture des données du problème. } 1. n + 3 opérations de lecture. { Calcul de f(x). } 2. n 1 +  (3 + 2 j) opérations de calcul. j=1 { Écrire la valeur de f(x). } 3. Algorithme quadratique 1 opération d’écriture. Total : n2 + 5 n + 5 opérations élémentaires.

34 Évaluation d’un polynôme de degré n : Règle de Horner
{ Calcul de f(x). } 2. Mémoriser dans SOMME le coefficient an. 2.1 Pour chaque valeur de j allant de n-1 à 0 2.2 Multiplier SOMME par x. 2.2.1 Additionner le résultat de la multiplication à aj. 2.2.2 Mémoriser dans SOMME le résultat de l’addition. 2.2.2 Calcul du # d’opérations élémentaires { Lecture des données du problème. } n + 3 opérations de lecture. 1. { Calcul de f(x). } 2. n-1 1 +  3 opérations de calcul. j=0 Algorithme linéaire { Écrire la valeur de f(x). } 1 opération d’écriture. 3. Total : 4 n + 5 opérations élémentaires.

35 Comparaison des deux algorithmes
# d’opérations élémentaires Courbe quadratique Courbe linéaire 100 50 10 n 1 5 10 15 20 Cas particulier : n = 10 45 vs 155 opérations élémentaires.

36 Calcul de x  [a, b]  f(x) = f (une valeur fixée à priori), f étant croissante
Il s’agit de calculer l’intervalle [u, v]  [a, b] tel que v – u   , étant le degré de précision demandé (une valeur fixée à priori), où il existe un x  [u, v] tel que f(x) = f. f une fonction croissante f a x b u v Note : Pour qu’il y ait une solution au problème, f(a)  f  f(b).

37 Calcul de x  [a, b]  f(x) = f (une valeur fixée à priori), f étant croissante
Approche séquentielle { Initialisation. } 1. Lire les valeurs de a, b, f et  > 0. { Recherche de l’intervalle. } 2. Mémoriser dans w la valeur de a. 2.1 Tant et aussi longtemps que f(w + ) < f alors ajouter à w la valeur de . 2.2 Si b > w +  alors écrire l’intervalle [w, w + ] sinon écrire l’intervalle [w, b]. 2.3 Total en pire cas : (b – a) /  opérations élémentaires + (b – a) /  évaluations de la fonction f.

38 Calcul de x  [a, b]  f(x) = f (une valeur fixée à priori), f étant croissante
Approche binaire { Initialisation. } 1. Lire les valeurs de a, b, f et  > 0. { Recherche de l’intervalle. } 2. Mémoriser dans u et v les valeurs de a et b. 2.1 Mémoriser dans MILIEU la valeur de (u + v) / 2. 2.2 Calculer f(MILIEU) et conserver dans VALEUR_DE_F le résultat obtenu. 2.3 Si v – u >  alors si VALEUR_DE_F > f alors conserver dans v la valeur de MILIEU sinon conserver dans u la valeur de MILIEU. Retourner à l’étape 2.2. 2.4 2.4.1 2.4.2 2.5 Écrire l’intervalle [u, v]. Total : log2((b – a) / ) opérations élémentaires + log2((b – a) / ) évaluations de la fonction f.

39 Comparaison des 2 algorithmes

40 Présence d’un mot dans un texte
Déterminer si un mot de longueur m se retrouve au moins une fois dans un texte de longueur n (m  n). Pour chaque position i allant de 1 à n – m + 1 1. Mémoriser dans j la valeur de 1. 1.1 Tant et aussi longtemps que j  m faire Si le (i+j-1)ième caractère du texte est égale au jième caractère du mot alors augmenter la valeur de j de 1 sinon j prend la valeur m + 2. 1.2 Si j est égale à m + 1 alors 1.3 Écrire « Il existe au moins une occurrence du mot. ». 1.3.1 L’algorithme prend fin. 1.3.2 Écrire « Le mot ne se retrouve pas dans le texte. ». 2. L’algorithme prend fin. 3.

41 Analyse de l’algorithme
Total en pire cas : (n – m + 1) (2 + 6m) opérations élémentaires Quelle est la valeur de m pour laquelle la performance de l’algorithme est la moins bonne ? F(m) = (n – m + 1) (2 + 6m)  F'(m) = 6 (n – m + 1) – (2 + 6m) = 0  6n – 12 m + 4 = 0  m = (3n + 2) / 6.

42 Jeu SUDOKU (algorithme difficile à concevoir)
Le point de départ est un tableau de dimension 9 x 9 où chaque case est soit, vide, soit, elle contient un chiffre entre 1 et 9. Exemple : Règles du jeu Il s’agit pour jouer de placer un chiffre de 1 à 9 dans chaque case vide. Chaque ligne, chaque colonne et chaque boîte 3 x 3 délimitée par un trait plus épais doivent contenir tous les chiffres de 1 à 9. Chaque chiffre apparaît donc une seule fois dans une ligne, dans une colonne et dans une boîte 3 x 3.

43 Jeu KAKURO (algorithme encore plus difficile à concevoir)
Solution du jeu

44 Algorithmique : méthode de raffinement successif
Problème I: Imaginons un robot domestique à qui nous devons fournir un algorithme lui permettant de préparer une tasse de café. Une première version de l'algorithme pourrait être: (1) faire bouillir de l'eau (2) mettre le café dans la tasse (3) ajouter l'eau dans la tasse. Les étapes de cet algorithme ne sont probablement pas assez détaillées pour que le robot puisse les interpréter. Chaque étape doit donc être affinée en une suite d'étapes plus élémentaires, chacune étant spécifiée d'une manière plus détaillée que dans la première version. (1) faire bouillir l'eau peut être affinée en (1.1) remplir la bouilloire d'eau (1.2) brancher la bouilloire sur le secteur (1.3) attendre l'ébullition (1.4) débrancher la bouilloire

45 Algorithmique : méthode de raffinement successif
(2) mettre le café dans la tasse pourrait être affiné en (2.1) ouvrir le pot à café (2.2) prendre une cuiller à café (2.3) plonger la cuiller dans le pot (2.4) verser le contenu de la cuiller dans la tasse (2.5) fermer le pot à café (3) ajouter de l'eau dans la tasse pourrait être affiné en (3.1) verser de l'eau dans la tasse jusqu'à ce que celle-ci soit pleine. Certaines étapes étant encore trop complexes et sans doute incompréhensibles pour notre robot, il faut les affiner davantage. (1.1) remplir la bouilloire d'eau (1.1.1) mettre la bouilloire sous le robinet (1.1.2) ouvrir le robinet (1.1.3) attendre que la bouilloire soit pleine (1.1.4) fermer le robinet

46 Raffinement successif: degré de raffinement
Quand il procède à des raffinements des différentes étapes, le concepteur d'un algorithme doit naturellement savoir où s'arrêter. Autrement dit, il doit savoir quand une étape constitue une primitive adéquate au point de ne pas avoir besoin de raffinement supplémentaire. Cela signifie évidemment qu'il doit connaître quelle sorte d'étape le processeur peut interpréter. Exemple : Le concepteur de l'algorithme précédent doit savoir que le robot peut interpréter "brancher la bouilloire" ce qui de ce fait n'exige pas de raffinement, mais qu'en revanche, il ne peut pas interpréter "remplir la bouilloire" et que dès lors un raffinement devient nécessaire.

47 Méthode de raffinement successif : problème II
Problème II : Impression d’une suite de nombres entiers. Soit la suite G définie de la manière suivante : G(0) = 1 G(1) = N où N est un entier positif, G(2) = N + 2 G(i) = G(i-1) + N * G(i-2) + 3 G(i-3) i > 2. À partir de chaque valeur lue pour N (au nombre de 3), faites imprimer les 21 premiers nombres de la suite G. Vous devez les faire imprimer en « escalier », c’est-à-dire que les nombres de la suite seront disposés de la façon suivante : G(0) G(1) G(2) G(3) G(4) G(5) G(6) . . . Il y aura donc 3 escaliers. 2 lignes vides devront séparer 2 escaliers consécutifs.

48 Méthode de raffinement successif : problème II
Problème II : Impression d’une suite de nombres entiers. 1. Répétez trois fois 1.1 { Lecture d’une valeur entière N. } Lire une valeur entière et conserver cette valeur dans N. 1.2 {Calcul et affichage en «escalier» des 21 premiers nombres de G. 1.3 Répétez 2 fois l’opération qui consiste à faire un saut de ligne. 1.2 { Calcul et affichage en « escalier » des 21 premiers nombres de G. Afficher la valeur de 1. Faire un saut de ligne. Pour chaque ligne i allant de 2 à 6 1.2.1 { Calcul et affichage de la iième ligne. } 1.2.2 Faire un saut de ligne. 1.2.1 { Calcul et affichage de la iième ligne. } Pour chaque indice k allant de j=1,2,…, i-1 j à (j=1,2,…, i-1 j) + i - 1 { Calculer G(k) et conserver cette valeur dans Resultat. } Afficher la valeur de Resultat suivie de 5 espaces.

49 Méthode de raffinement successif : problème II
Problème II : Impression d’une suite de nombres entiers. {Calculer G(k) et conserver cette valeur dans Resultat. } Si k est égale à 0 alors Resultat prend la valeur 1. Si k est égale à 1 alors Resultat prend la valeur N. Si k est égale à 2 alors Resultat prend la valeur N + 2. Si k est plus grand que 2 alors Conserver dans u, v et w les valeurs de 1, N et N+2 resp. Pour chaque valeur de m allant de 3 à k Conserver dans Resultat la valeur de w + N*v + 3*u. Placer dans u la valeur de v. Placer dans v la valeur de w. Placer dans w la valeur de Resultat. Y a-t-il une méthode plus efficace de calculer chaque élément de la suite G ?


Télécharger ppt "Introduction à l’algorithmique"

Présentations similaires


Annonces Google