1. Cours de Recherche
opérationnelle 2&3
Filière : Développeur d’ApplicationsWeb & Mobile
Mohammed EL KARKRAOUI
mohammed.elkarkraoui@etu.uae.ac.ma
Nador, 2023-2024
2. Complexité algorithmique
• La complexité algorithmique est une mesure de l'efficacité d'un
algorithme en termes de ressources informatiques (principalement le
temps et l'espace) qu'il utilise pour résoudre un problème donné.
Elle permet d'évaluer comment la performance d'un algorithme
évolue en fonction de la taille de l'entrée du problème. La complexité
algorithmique est essentielle pour comparer et choisir les meilleurs
algorithmes pour résoudre des problèmes dans des domaines tels
que l'informatique, les mathématiques, la science des données.
• Exemple multiplication de deux matrices
• O(n3) complexité polynomiale
3. Complexité algorithmique
• O(1) : Complexité constante, où le temps ou l'espace est indépendant de la
taille de l'entrée.
• O(log n) : Complexité logarithmique, où la performance s'améliore à
mesure que la taille de l'entrée augmente.
• O(n) : Complexité linéaire, où le temps ou l'espace augmente linéairement
avec la taille de l'entrée.
• O(n log n) : Complexité quasi-linéaire, couramment observée dans des
algorithmes de tri efficaces comme le tri fusion et le tri rapide.
• O(n²) : Complexité quadratique, généralement associée à des algorithmes
qui effectuent des comparaisons exhaustives, tels que le tri par sélection et
le tri à bulles.
• O(2ⁿ) : Complexité exponentielle, généralement associée à des algorithmes
non efficaces pour les problèmes NP-complets.
• O(n!) : Complexité factorielle, généralement associée à des algorithmes qui
examinent toutes les permutations ou combinaisons possibles.
5. Problèmes classiques de la RO
:Voyageur de commerce
Le Problème duVoyageur de Commerce (TSP, pour Traveling Salesman
Problem) est un problème d'optimisation combinatoire classique.
L'objectif est de trouver le plus court circuit (ou la plus courte
tournée) qui passe par un ensemble donné de villes (ou points) en
visitant chaque ville exactement une fois et en revenant à la ville de
départ.Voici une modélisation mathématique typique du TSP :
6. Problèmes classiques de la RO
:Voyageur de commerce
• Notations :
• N : L'ensemble des villes à visiter, avec N={1,2,…,n}
• dij : La distance (ou le coût) de déplacement entre la ville i et la ville j.
• Variables de Décision :
• xij :Variable binaire qui prend la valeur 1 si le chemin va de la ville i à la ville j
dans la tournée, et 0 sinon.
• Objectif : Minimiser la longueur totale de la tournée, c'est-à-dire la
somme des distances parcourues :
• Min σ𝑖 ,𝑗 ∈𝑁 𝑖≠𝑗 𝑑𝑖𝑗 ∗ 𝑥𝑖𝑗
7. Problèmes classiques de la RO
:Voyageur de commerce
• Contraintes :
• Chaque ville doit être visitée exactement une fois :
• σ𝑖 ∈𝑁 𝑖≠𝑗 𝑥𝑖𝑗 = 1 ∀ 𝑗 ∈ 𝑁
• σ𝑗 ∈𝑁 𝑗≠𝑖 𝑥𝑖𝑗 = 1 ∀ 𝑖 ∈ 𝑁
• Sous-tour interdit (pour éviter les boucles et les circuits incomplets)
∑i∈S∑j∈S,j≠i xij ≤ ∣S∣−1 ,∀S⊂N, 2 ≤ ∣S∣ ≤ n−1
8. Problèmes classiques de la RO
:Problème du Sac à Dos
Problème du Sac à Dos (Knapsack Problem) : Le problème du
sac à dos consiste à déterminer la combinaison d'objets à placer dans
un sac à dos de capacité limitée afin de maximiser la valeur totale des
objets sans dépasser la capacité du sac.
9. Problèmes classiques de la RO
:Problème du Sac à Dos
• Notations :
• N : L'ensemble des objets disponibles, avec N={1,2,…,n}
• vi : La valeur (ou le profit) de l'objet i.
• wi : Le poids de l'objet i.
• C : La capacité maximale du sac à dos.
• Variables de Décision :
• xi :Variable binaire qui prend la valeur 1 si l'objet i est inclus dans le sac à dos,
et 0 sinon.
• Objectif : Maximiser la valeur totale des objets sélectionnés :
• Max ∑i∈N vi⋅xi
10. Problèmes classiques de la RO
:Problème du Sac à Dos
• Contraintes : La contrainte principale est que la somme des poids
des objets sélectionnés ne peut pas dépasser la capacité du sac à dos
• ∑ i∈N wi⋅xi ≤ C
11. Problèmes classiques de la RO
:Problème d'Affectation
• Problème d'Affectation (Assignment Problem) : Le problème
d'affectation est un problème d'optimisation combinatoire qui
consiste à attribuer des tâches à des agents de manière optimale.
Chaque agent peut réaliser une unique tâche pour un coût donné et
chaque tâche doit être réalisée par un unique agent. Si les nombres
d'agents et de tâches sont égaux, alors le problème est appelé
affectation équilibrée
12. Problèmes classiques de la RO
:Circuit Eulerien
• Problème de Circuit Eulerien : Ce problème implique la
recherche d'un circuit qui passe par chaque arête d'un graphe
exactement une fois
13. Graphes : notions de base
• Les graphes sont des structures de données mathématiques et
informatiques largement utilisées pour représenter et analyser des
relations entre des objets. Un graphe est composé d'un ensemble de
nœuds (ou sommets) et d'un ensemble d'arêtes (ou arcs) qui relient
ces nœuds. Les graphes sont utilisés pour modéliser des relations
dans divers domaines, tels que les réseaux informatiques, les réseaux
sociaux, la planification de trajets, la biologie, la chimie..
14. Graphes : notions de base
• Nœud (ou Sommet) : Un nœud représente un objet ou une
entité, et il est généralement représenté par un point ou un cercle
dans un graphe.
• Arête (ou Arc) : Une arête est une ligne ou un lien qui connecte
deux nœuds et représente une relation entre ces nœuds. Les arêtes
peuvent être orientées (avec une direction) ou non orientées (sans
direction).
15. Graphes : notions de base
• Graphe Non Orienté : Dans un graphe non orienté, les arêtes ne
sont pas associées à une direction spécifique. Si un nœud A est relié à
un nœud B, cela signifie que B est également relié à A.
• Graphe Orienté : Dans un graphe orienté, chaque arête a une
direction spécifique. Si un nœud A est relié à un nœud B, cela ne
signifie pas nécessairement que B est relié à A.
16. Graphes : notions de base
• Voisin : Dans un graphe non dirigé, les nœuds connectés à un nœud
donné sont appelés ses voisins. Dans un graphe orienté, on parle de
prédécesseurs (nœuds entrants) et de successeurs (nœuds sortants).
• Chemin : Un chemin est une séquence d'arêtes qui permet de relier
un nœud de départ à un nœud d'arrivée dans le graphe.
17. Graphes : notions de base
• Cycle : Un cycle est un chemin fermé qui commence et se termine
au même nœud.
• Graphe Connexe : Un graphe est dit connexe s'il existe un chemin
entre chaque paire de nœuds.
18. Graphes : notions de base
• Mathématiquement, un graphe est une paire ordonnée G = (V, E) où :
• V est un ensemble fini de nœuds
• E est un ensemble d'arêtes, qui sont des paires non ordonnées ou
ordonnées de nœuds qui indiquent des relations entre les nœuds.
• Exemple :
• V = {A,B,C,D,E}
• E = ({A,B},{ A,D} , {B,B} , {B,E} , {B,C}
, {C,D} ,{C,D} , {D,E})
19. Graphes : notions de base
• Graphe non orienté : G = (V, E), où E est un ensemble de paires non
ordonnées {x, y}.
• Graphe orienté : G = (V, E), où E est un ensemble de paires
ordonnées (x, y).
20. Graphes : Matrice d'adjacence
• La matrice d'adjacence est une représentation mathématique d'un
graphe. Dans une matrice d'adjacence, chaque élément de la matrice
indique s'il existe une arête (relation) entre deux nœuds (sommets)
du graphe.
A B C
A 0 1 0
B 1 1 1
C 1 0 1
21. Graphes :Algorithmes de Parcours de
Graphes
• Parcours en Largeur (BFS, Breadth-First Search)) :Le parcours en largeur commence par
un nœud de départ (souvent appelé nœud source) et explore tous les nœuds voisins de ce
nœud avant de passer aux voisins de ces voisins, et ainsi de suite
Fonction BFS(graphe, noeudDepart):
Créer une file vide Q
Créer un ensemble visited pour suivre les nœuds visités
Enfiler noeudDepart dans Q
Ajouter noeudDepart à l'ensemble visited
Tant que Q n'est pas vide:
courant = Défiler de Q
[Traiter le nœud courant]
Pour chaque voisin dans graphe[courant]:
Si le voisin n'est pas dans visited:
Enfiler le voisin dans Q
Ajouter le voisin à l'ensemble visited
22. Graphes :Algorithmes de Parcours de
Graphes
• Le parcours en profondeur (DFS, Depth-First Search) commence également par un
nœud de départ, mais il explore autant en profondeur que possible le long d'une branche
avant de revenir en arrière pour explorer d'autres branches :
Fonction DFS(graphe, noeudDepart):
Créer une pile vide S
Créer un ensemble visited pour suivre les nœuds visités
Empiler noeudDepart sur S
Tant que S n'est pas vide:
courant = Dépiler de S
[Traiter le noeud courant]
Si le courant n'a pas été visité:
Marquer courant comme visité
Pour chaque voisin dans graphe[courant]:
Si le voisin n'a pas été visité:
Empiler le voisin sur S
23. Graphes : Parcours Eulerien
• Un graphe admet un parcours Eulerien si et seulement si ses nœuds
sont tous de degré pair sauf au plus deux.
24. Graphes :Arbre
• Un arbre peut être considéré comme un type spécial de graphe
acyclique (c'est-à-dire sans cycle) Un arbre a exactement une arête
entre chaque paire de nœuds, de telle sorte qu'il n'y a pas de boucles
ou de cycles. Chaque nœud, à l'exception du nœud racine, est relié à
un unique nœud parent par une arête, et un nœud peut avoir
plusieurs nœuds enfants, mais il n'y a qu'un seul chemin pour
atteindre chaque nœud à partir du nœud racine.
25. Graphes :Arbre
• Racine : Un arbre a un nœud spécial appelé "racine". C'est le nœud
de départ à partir duquel tous les autres nœuds sont accessibles.
• Feuilles : Les nœuds qui n'ont pas d'enfants sont appelés "feuilles".
Ce sont les nœuds terminaux de l'arbre.
• Nœud Parent et Enfants : Chaque nœud, à l'exception de la
racine, a un nœud parent (le nœud à partir duquel il est accessible) et
peut avoir un ou plusieurs nœuds enfants.
26. Graphes :Arbre
• un arbre est défini par un triplet (V, E, r) où :
• V est un ensemble fini de nœuds (ou sommets).
• E est un ensemble d'arêtes qui relient les nœuds de l'arbre. Chaque arête
relie un nœud à son nœud parent.
• r est le nœud racine de l'arbre, qui est le seul nœud de l'arbre sans nœud
parent.
• Un graphe est un arbre s’il est connexe et contiens exactement n-1
(nombre de nœuds - 1) arêtes.
27. Graphes : Parcours d’un arbre
A
B
C D
E
F
1
2
3 4
5
6
1
2 3
4 5 6
Parcours en largeur
BFS
28. Graphes : Parcours d’un arbre
A
B
C D
E
F
1
2
3 4
5
6
Parcours en
profondeur DFS