Algorithmique et programmation en gestion

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

La boucle for : init7.c et init71.c
Tris.
Chapitre annexe. Récursivité
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 9 Patrick Reuter.
Introduction à l’Algorithmique
Sensibilisation à l’Algorithmique et structure de données
Calculs de complexité d'algorithmes
Algorithmique Résume.
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
Problème de 8 dames: Sachant que dans un jeu des échecs, une dame peut pendre toute pièce se trouvant sur la colonne ou sur la ligne ou sur les diagonales.
L’ interruption de boucle
Exercices Algorithmiques
Chap. 1 Structures séquentielles : listes linéaires
4. Les structures de tests
Section VIII Modularité Partie II
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Initiation à la programmation et algorithmique cours 3
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Les bases de l’Algorithmique
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
La structure conditionnelle simple
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Introduction à l’algorithmique
Algorithmique et Programmation
8PRO100 Éléments de programmation Comment faire prendre une décision à un ordinateur?
Les éléments de base de l’algorithmique
Les structures de contrôle conditionnelles
Les algorithmes: complexité et notation asymptotique
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Une nouvelle structure de données : les tableaux
Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales.
Instruction sélective switch-case Instruction répétitive do-while For
IFT 6800 Atelier en Technologies d’information
8PRO107 Éléments de programmation
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Programmation logique Le Langage PROLOG
Plan troisième cours Instruction sélective Instruction répétitive
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
INF1101 Algorithmes et structures de données
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
L’essentiel du langage C
Exemple de gestion d'un buffer clavier en liste circulaire
Le langage C Structures de données
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Algorithmique Les structures Rappel L'enchaînement séquentiel
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
Recherche de solutions Leçon 3 0. Modules 3.1 Résumé de la semaine dernière 3.2 Recherche de solutions 3.3 Développement de la clientèle 3.4 Taille du.
CYCLE 6 : FONCTIONS Faire un programme en C avec des FONCTIONS 1- A quoi servent les FONCTIONS ? 2- Comment écrire un programme avec FONCTIONS ? 3- Comment.
Déclaration des données constantes Déclaration des données variables
3 Les instructions. Cours 32 Plan du cours 3 Instruction Bloc Portée L’alternative Affectations =, +=, *=… Comment comparer –Comparer des réels –Comparer.
SIF-1053 Architecture des ordinateurs
Un survol du language C.
 Syntaxe du langage PHP
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
La programmation.
Cours n° 3 Traitements en Java
Méthodes et outils de conception Introduction à la programmation Paramètre de retour Appel d’une fonction Portée des variables Définition Pourquoi les.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Variables et environnement utilisateur W. Barhoumi.
Introduction à la récursivité
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
Scripts et fonctions Instructions de contrôle
Algorithmique Boucles et Itérations
Transcription de la présentation:

2-750-04 Algorithmique et programmation en gestion Leçon 6 Les algorithmes énumératifs Retour-arrière («Backtracking»)

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…

Découvrir le phénomène des boucles imbriquées

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 nn fois

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) Si i<=p alors Pour j Allant de 1 à n bouclesImbriquées(n,i+1) Fin Pour 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é

Découvrir le phénomène des boucles imbriquées L’effet combiné peut être illustré comme suit Pour j Allant de1 à n . . . Pour j' Allant de 1 à n Pour j'' Allant de 1 à n Imbrication(n, p) Fin Pour FinPour

Découvrir en quoi consiste le backtracking

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) Si i > n Alors Écrire mot Sinon Pour j Allant de 1 à k mot[i] ← jème lettre tousLesMots(i+1,k,n) FinPour FinSi

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]

Découvrir en quoi consiste le backtracking sélectif

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) Si i > n Alors Écrire mot Sinon Pour j Allant de 1 à k Si alphabet[j] ne fait pas partie de mot[1],…mot[i-1] Alors mot[i] ← alphabet[j] tousLesMotsSansRépétition(i+1,k,n) FinSi FinPour

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

Comprendre le fonctionnement général d'un algorithme de backtracking

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) essayerChoix(sol, niveau, choix) Si succesSolution(sol, n, niveau) alors traitementSolution(sol) Sinon si solutionPartielleOK(sol, niveau) alors Pour k = 1 à n faire prolongerSolution(sol, n, niveau+1, k) Fin-pour Fin-si retirerChoix(sol, niveau, choix)

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)

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);

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.