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

Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, 2002. Tous droits réservés.

Présentations similaires


Présentation au sujet: "Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, 2002. Tous droits réservés."— Transcription de la présentation:

1 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page Algorithmique et programmation en gestion Leçon 6 Les algorithmes énumératifs Retour-arrière («Backtracking»)

2 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 2 Qu’est-ce qu’un problème énumératif?  C’est un problème où la question à résoudre est:  Compter de combien de façons…  Lister toutes les façons de …  Une certaine exaustivité est exigée  Exemple: Le problème de la monnaie  Trouver toutes les façons de payer un certain montant  Problème des 8 reines…

3 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 3 Découvrir le phénomène des boucles imbriquées

4 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 4 Comprendre le concept de profondeur d'une imbrication de boucle  Une boucle à l’intérieur de laquelle il n’y a aucune autre boucle est de profondeur 1  Une boucle contenant une boucle intérieure de profondeur 1 est de profondeur 2  De manière générale, une imbrication de boucles est de profondeur n, si la boucle extérieure contient une boucle imbriquée de profondeur n-1  Une structure d’imbrications de boucles de profondeur n, dont chaque boucle tourne n fois, fait en sorte que l’instruction la plus imbriquée est exécutée n n fois

5 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 5 Découvrir le phénomène des boucles imbriquées  La structure algorithmique suivante provoque une imbrication de boucles de profondeur p  Algorithme bouclesImbriquées(n,i) 1.Si i<=p alors 2. Pour j Allant de 1 à n 3. bouclesImbriquées(n,i+1) 4. Fin Pour 5.FinSi  Cet algorithme comporte 2 paramètres  Le paramètre i sert à contrôler les appels et donc la profondeur  Le paramètre n contrôle le nombre d’appels à un niveau donné

6 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 6 Découvrir le phénomène des boucles imbriquées  L’effet combiné peut être illustré comme suit 1.Pour j Allant de1 à n Pour j' Allant de 1 à n 7. Pour j'' Allant de 1 à n 8. Imbrication(n, p) 9. Fin Pour 10. Fin Pour FinPour

7 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 7 Découvrir en quoi consiste le backtracking

8 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 8 Découvrir en quoi consiste le backtracking  Nous avons à faire ici à n boucles imbriquées, chaque boucle comptant k exécutions  L’algorithme se présente donc comme suit  Algorithme tousLesMots(i,k,n) 1.Si i > n Alors 2. Écrire mot 3.Sinon 4. Pour j Allant de 1 à k 5. mot[i] ← jème lettre 6. tousLesMots(i+1,k,n) 7. FinPour 8.FinSi

9 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 9 Découvrir en quoi consiste le backtracking  Lorsque la boucle au niveau i se termine, la boucle de niveau i-1 s’exécute une fois  Cela fait exécuter de nouveau la boucle de niveau i k fois  C’est l’approche dite par « backtracking » ou retour arrière  L’effet retour arrière correspond au fait suivant  Ayant épuisée tous les choix de la position i, l'algorithme  Revient sur la position i-1  Change le choix de cette position  Repart fabriquer toutes les solutions dont les i-1 premiers choix restent les mêmes  Dans notre exemple, pour utiliser effectivement les caractères d’un alphabet, on utilise un tableau stockant les lettres de cet alphabet  Supposons un tableau alphabet tel que alphabet[i] soit le ième caractère de l’alphabet  Alors mot[i] ← jème lettre devient mot[i] ← alphabet[j]

10 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 10 Découvrir en quoi consiste le backtracking sélectif

11 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 11 Découvrir en quoi consiste le backtracking sélectif  On doit modifier l’algorithme précédent comme suit  Algorithme tousLesMotsSansRépétition(i,k,n) 1.Si i > n Alors 2. Écrire mot 3.Sinon 4. Pour j Allant de 1 à k 5. Si alphabet[j] ne fait pas partie de mot[1],…mot[i-1] Alors 6. mot[i] ← alphabet[j] 7. tousLesMotsSansRépétition(i+1,k,n) 8. FinSi 9. FinPour 10.FinSi

12 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 12 Découvrir en quoi consiste le backtracking sélectif  On arrive à la structure de programmation suivante :  L’algorithme comporte une boucle  La boucle comporte un appel récursif  L’appel récursif est dans la boucle  L’appel récursif est conditionnel  On nomme cette structure algorithmique par le nom de « Backtracking sélectif» ou « Retour arrière sélectif »  Dans notre exemple, lorsque la longueur des mots correspond au nombre de caractère de l’alphabet, on parle alors de permutation

13 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 13 Comprendre le fonctionnement général d'un algorithme de backtracking

14 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 14 Comprendre le fonctionnement général d'un algorithme de backtracking Description Algorithme générique de backtracking. L'algorithme utilise 5 fonctions utilitaires :  essayerChoix()  succesSolution()  solutionPartielleOK()  retirerChoix()  traitementSolution() Variables  sol (...) : structure de la solution courante  n (entier) : nombre maximum de niveaux  niveau (entier) : niveau courant de la solution partielle  choix (entier) : choix à tenter au niveau courant  k (entier) : indice pour les essais des niveaux suivants Logique prolongerSolution (sol, n, niveau, choix) 1.essayerChoix(sol, niveau, choix) 2.Si succesSolution(sol, n, niveau) alors 3. traitementSolution(sol) 4.Sinon si solutionPartielleOK(sol, niveau) alors 5. Pour k = 1 à n faire 6. prolongerSolution(sol, n, niveau+1, k) 7. Fin-pour 8.Fin-si 9.retirerChoix(sol, niveau, choix)

15 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 15 Construire et défaire les solutions partielles  Pour qu'une approche par backtracking fonctionne correctement, il faut que la structure de données utilisée permette  L'ajout rapide d'une solution partielle pour le prochain niveau à tenter  Le retrait rapide d'une solution partielle une fois la tentative terminée  Les variables niveau et choix permettent de contrôler quelle est la solution partielle à tenter (choix) et où placer cette solution partielle (niveau)

16 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 16 Programmer une solution avec backtracking en Java void essayerChoix(... sol, int niveau, int choix) {... } boolean succesSolution(... sol, int n, int niveau) {... } void traitementSolution(... sol) {... } boolean solutionPartielleOK(... sol, int niveau) {... } void retirerChoix(... sol, int niveau, int choix) {... } void prolongerSolution (... sol, int n, int niveau, int choix) { essayerChoix(sol, niveau, choix); if (succesSolution(sol, n, niveau)) { traitementSolution(sol); } else if (solutionPartielleOK(sol, niveau)) { for (int k=1; k <= n; k++) { prolongerSolution(sol, n, niveau+1, k); } retirerChoix(sol, niveau, choix); }

17 Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, Tous droits réservés. page 17 Programmer une solution avec backtracking en Java  Ce n'est pas plus compliquer que de développer une solution avec récursivité  On doit déterminer une structure appropriée, puis l'utiliser de façon raisonnable avec les méthodes de l'algorithme générique  On ajustera les méthodes et paramètres selon cette structure de données.


Télécharger ppt "Dernière mise à jour: 14 septembre 2014, Service de l'enseignement des technologies de l'information © École des HEC de Montréal, 2002. Tous droits réservés."

Présentations similaires


Annonces Google