variables et types - centralesupelecbebert/slides algo total.pdf · variables et types 4 (+1) types...
TRANSCRIPT
![Page 1: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/1.jpg)
![Page 2: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/2.jpg)
Variables et types
4 (+1) types de base :
•Booléens : True, False
•Entiers
•Flottants
•Caractères
•Pointeurs
On construit d’autres types :
•Listes
•Tableaux
•Chaînes de caractères
•Etc.
![Page 3: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/3.jpg)
Variables et types Variable : quelque chose en mémoire, d’un des types précédents
Opérations :
•Initialiser (Obligatoire)
•Modifier sa valeur
•La supprimer
•Exemple :
fct inutile ():
a ← 0 # initialisation
a ← 1
return a
![Page 4: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/4.jpg)
Syntaxe du pseudo-code
•Affecta4ons : ← , pas =
•Comparaisons : =, ≠, ≤, ≥, etc.
•Pour une fonction : fct nom_de _la fonction (arguments)
•On termine avec : return
•Délimiteurs : indentation (comme en Python)
![Page 5: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/5.jpg)
Syntaxe du pseudo-code
•Structures de contrôle : if, for, while
•Opérateurs logiques sur les booléens : and, or, not, xor
•Pour s’amuser :
a ← 5
b ← 4
res ← ( a = b ) xor a < 10 )
![Page 6: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/6.jpg)
Structure des données
•Piles (FILO ou LIFO)
•Files (FIFO)
•Files de priorité
•Dictionnaires
•Ensembles
•Arbres
•Graphes
![Page 7: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/7.jpg)
Attention
•Les « listes » de Python ne sont ni des piles, ni des files, ni des tableaux,
ni des listes
•Elles ont une structure hybride, mélangeant les propriétés des
structures de données précédentes
![Page 8: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/8.jpg)
Piles•Priorité LIFO ou FILO
•Push()
•Pop()
Exemple :
res ← CreerPileVide() # res=[]
res.push(n) # res=[n]
res.push(p) #res=[p,n]
tmp ← res.pop() # tmp=p ; res=[n]
Push
Pop
![Page 9: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/9.jpg)
Files•Priorité FIFO
•Enqueue()
•Dequeue()
Exemple :
res ← CreerFileVide() # res=[]
res.enqueue(n) # res=[n]
res.enqueue(p) #res=[p,n]
tmp ← res.dequeue () # tmp=n ; res=[p]
Enqueue Dequeue
![Page 10: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/10.jpg)
Files et piles en pratique•Pile : liste chaînée
•File : liste double-chaînée
![Page 11: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/11.jpg)
Files de priorité•Un élément : (valeur, priorité)
•Ordre dans la file : donné par la priorité
•Créer_file_de_priorite_vide()
•Enqueue()
•Dequeue()
•Enqueue en O( log(n) ) ou O(n)
•Dequeue en O ( log(n) )
Enqueue Dequeue2 5 7 91
Enqueue4
![Page 12: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/12.jpg)
Implémentation par tas maximum
•Invariant de tas : fils ≤ père
•D ≤ B et E ≤ B
•F ≤ C
•B ≤ A et C ≤ A
A
B C
D E F
![Page 13: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/13.jpg)
Enqueue
9
7
4 2 1 8
5
![Page 14: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/14.jpg)
Enqueue
9
8
4 2 1 7
5
![Page 15: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/15.jpg)
Dequeue
9
8
4 2 1 7
5
![Page 16: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/16.jpg)
Dequeue
9
8
4 2 1 7
5
![Page 17: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/17.jpg)
Dequeue
7
8
4 2 1
5
![Page 18: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/18.jpg)
Dequeue
7
8
4 2 1
5
![Page 19: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/19.jpg)
Dequeue
8
7
4 2 1
5
![Page 20: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/20.jpg)
Tableaux•Un élément : une valeur repérée par son indice
•Creer_tableau( taille )
•Accéder à un élément
•Modifier un élément
•Intérêt :
� Rapide
� semblable aux vecteurs/matrices
•/!\ : la multiplication usuelle est la multiplication terme à terme
![Page 21: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/21.jpg)
Tableaux : un exemplefct exemple (n) :
res ← creer_tableau(n)
res[0] ← 1
for i=1 to n-1 :
res[i] ← 2 * res[i-1]
return res
![Page 22: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/22.jpg)
Dictionnaires•Un élément : (clé : valeur)
•Add( clé : valeur )
•Pop( clé )
•Accès comme sur un tableau : dict[ clé ]
•Add en O(1)
•Accès et Pop en O( 1 + α ) (α : taux de remplissage du dictionnaire)
•Intérêt :
� Indexer par autre chose que des entiers
� De taille variable
![Page 23: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/23.jpg)
Dictionnaires : un exemplecita4ons ← { ‘Hervé Biausser’ : ‘Nous sommes la meilleure école
d’ingénieurs de France.’ ; ‘John Cagnol’ : ‘Vous pensez aller où comme ça
?’ }
citations.add( ‘Luca Pacioli’ : ‘Résultat et trésorerie ne sont pas
synonymes.’ )
citations[ ‘John Cagnol’ ]
>>> ‘Vous pensez aller où comme ça ?’
![Page 24: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/24.jpg)
Ensembles•Comme en mathématiques
•Opérations ensemblistes usuelles
•AUB en O( #(AUB) )
•A∩B en O( #(AUB) )
![Page 25: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/25.jpg)
Syntaxe du pseudo-code•Listes, files, files de priorité : variable.méthode( argument_si_besoin )
•Tableaux : tab[indice]
•Dictionnaires : dict.add( clé : valeur ), dict.pop( clé ), dict[ clé ]
•Ensembles
![Page 26: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/26.jpg)
Compléxité•Tn = O(f)
•Tn = Ω(f) ssi f = O(Tn)
•Tn = Ɵ(f) ssi Tn = O(f) et f = O(Tn)
En pratique, on utilise pour f :
•1•log2(n)
•n•n.log2(n)
•n2, n3…
•2n et pire…
![Page 27: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/27.jpg)
Compléxité : exemplesfct fact (n) :
res ← 1
for i=1 to n :
res ← res * i
return res
fct fact_rec (n) :
if n=0 or n=1 :
return 1
else :
return n * fact_rec(n-1)
![Page 28: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/28.jpg)
Compléxité : exemplesfct mult (vect_A, vect_B) :
n ← vect_A.taille()
res ← matrice(n,n)
for i=1 to n :
for j=1 to n :
res[i][j] ← vect_A[i] * vect_B[j]
return res
![Page 29: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/29.jpg)
Compléxité : les réflexes à avoir
•On ne cherche que des ordres de grandeur, asymptotiquement
•C’est plus simple avec un O qu’avec Ɵ, mais moins précis
•2 complexités : temporelle (par défaut, la plus courante) et spatiale
•En général :
�1 boucle : O(n)
�2 boucles imbriquées : O(n2)
•On n’aime pas les complexités exponentielles.
![Page 30: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/30.jpg)
Complexité : le réflexeSi la question demande une complexité en n.log(n) :
Il existe des tris en n.log(n)
C’est souvent un tri des données qu’il faut utiliser
![Page 31: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/31.jpg)
Quelques conseils
•Expliquer l’idée, le principe d’un algorithme avant de l’écrire
•Commenter le code (de préférence d’une autre couleur)
•Donner des noms explicites aux variables
•Attention aux collisions (espaces de noms réservé)
�Exemple : “mini” et pas “a”, ni “min”
•Soigner la présentation (indentation, laisser des espaces…)
![Page 32: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/32.jpg)
Méthodes vues en cours
Méthode gloutonneMéthode récursiveDiviser pour mieux régnerProgrammation dynamique
![Page 33: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/33.jpg)
Méthodes vues en cours
Méthode gloutonneMéthode récursiveDiviser pour régnerProgrammation dynamique
![Page 34: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/34.jpg)
Méthode gloutonne
Principe : Construction d’une solution par une suite de choix optimaux localement, sans retour en arrière ni exploration de plusieurs possibilités
![Page 35: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/35.jpg)
Méthode gloutonne
Méthode souvent simple voire intuitiveRésout un problème rapidement (complexité faible)Ne donne pas nécessairement la solution optimale
Principe : Construction d’une solution par une suite de choix optimaux localement, sans retour en arrière ni exploration de plusieurs possibilités
![Page 36: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/36.jpg)
Exemple : vous avez une courbe, vous voulez un algorithme qui vous en donne un maximum
Qu’est-ce que vous faites ?
![Page 37: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/37.jpg)
Exemple : vous avez une courbe, vous voulez un algorithme qui vous en donne un maximum
Qu’est-ce que vous faites ?
Vous vous placez en un point, et vous cherchez à monter jusqu’à ce que vous ne puissiez plus monter plus haut.
![Page 38: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/38.jpg)
Exemple : vous avez une courbe, vous voulez un algorithme qui vous en donne un maximum
Qu’est-ce que vous faites ?
Vous vous placez en un point, et vous cherchez à monter jusqu’à ce que vous ne puissiez plus monter plus haut.
Et comment choisir par quel côté monter ?
![Page 39: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/39.jpg)
Exemple : vous avez une courbe, vous voulez un algorithme qui vous en donne un maximum
Qu’est-ce que vous faites ?
Vous vous placez en un point, et vous cherchez à monter jusqu’à ce que vous ne puissiez plus monter plus haut.
Et comment choisir par quel côté monter ?
A chaque itération, vous montez du côté où la pente est la plus forte
![Page 40: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/40.jpg)
En partant de A avec cette méthode : en quel point arrive-t-on ?
![Page 41: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/41.jpg)
En partant de A avec cette méthode : en quel point arrive-t-on ?
![Page 42: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/42.jpg)
En partant de A avec cette méthode : en quel point arrive-t-on ?
On a trouvé un maximum
MAIS
Ce n’est pas le meilleur maximum
![Page 43: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/43.jpg)
Exemple : le rendu de monnaie
on dispose d’un système monétaireon doit rendre une certaine somme en utilisant cette monnaieon cherche à minimiser le nombre de pièces utilisées
ex : en eurosS = (1 ; 2 ; 5 ; 10 ; 20 ; 50)
rendre 18 =
![Page 44: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/44.jpg)
Exemple : le rendu de monnaie
on dispose d’un système monétaireon doit rendre une certaine somme en utilisant cette monnaieon cherche à minimiser le nombre de pièces utilisées
ex : en eurosS = (1 ; 2 ; 5 ; 10 ; 20 ; 50)
rendre 18 = 10 + 5 + 2 + 1
![Page 45: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/45.jpg)
Exemple : le rendu de monnaie
on dispose d’un système monétaireon doit rendre une certaine somme en utilisant cette monnaieon cherche à minimiser le nombre de pièces utilisées
ex : en eurosS = (1 ; 2 ; 5 ; 10 ; 20 ; 50)
rendre 18 = 10 + 5 + 2 + 1
ex : en monnaie plus exotiqueS = (1 ; 3 ; 7 ; 19 ; 51)
rendre 18 =
![Page 46: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/46.jpg)
Exemple : le rendu de monnaie
on dispose d’un système monétaireon doit rendre une certaine somme en utilisant cette monnaieon cherche à minimiser le nombre de pièces utilisées
ex : en eurosS = (1 ; 2 ; 5 ; 10 ; 20 ; 50)
rendre 18 = 10 + 5 + 2 + 1
ex : en monnaie plus exotiqueS = (1 ; 3 ; 7 ; 19 ; 51)
rendre 18 = 7 + 7 + 3 + 1
Plutôt facile, vous le faites naturellement à chaque fois que vous rendez la monnaie.Quel algorithme utilisez-vous intuitivement pour trouver ces réponses ?
![Page 47: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/47.jpg)
Vous prenez la pièce la plus grande qui ne dépasse pas le montant à rembourserVous la donnez, il vous reste maintenant une somme plus petite à rembourserVous recommencez
Par exemple : Je dois 18€
![Page 48: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/48.jpg)
Vous prenez la pièce la plus grande qui ne dépasse pas le montant à rembourserVous la donnez, il vous reste maintenant une somme plus petite à rembourserVous recommencez
ETAPE 1 :Plus grande pièce : 10€Je dois : 18 - 10 = 8€
Par exemple : Je dois 18€
![Page 49: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/49.jpg)
Vous prenez la pièce la plus grande qui ne dépasse pas le montant à rembourserVous la donnez, il vous reste maintenant une somme plus petite à rembourserVous recommencez
ETAPE 1 :Plus grande pièce : 10€Je dois : 18 - 10 = 8€
ETAPE 2 :Plus grande pièce : 5€Je dois : 8 - 5 = 3€
Par exemple : Je dois 18€
![Page 50: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/50.jpg)
Vous prenez la pièce la plus grande qui ne dépasse pas le montant à rembourserVous la donnez, il vous reste maintenant une somme plus petite à rembourserVous recommencez
ETAPE 1 :Plus grande pièce : 10€Je dois : 18 - 10 = 8€
ETAPE 2 :Plus grande pièce : 5€Je dois : 8 - 5 = 3€
ETAPE 3 :Plus grande pièce : 2€Je dois : 3 - 2 = 1€
Par exemple : Je dois 18€
![Page 51: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/51.jpg)
Vous prenez la pièce la plus grande qui ne dépasse pas le montant à rembourserVous la donnez, il vous reste maintenant une somme plus petite à rembourserVous recommencez
ETAPE 1 :Plus grande pièce : 10€Je dois : 18 - 10 = 8€
ETAPE 2 :Plus grande pièce : 5€Je dois : 8 - 5 = 3€
ETAPE 3 :Plus grande pièce : 2€Je dois : 3 - 2 = 1€
ETAPE 4 :Plus grande pièce : 1€Je dois : 1 - 1 = 0€
Par exemple : Je dois 18€
C’est fini !
![Page 52: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/52.jpg)
fct rendu_monnaie_glouton(v,S):
n ← S.longueur()
solution ← créer_pile_vide()
while v=!0 :
p ← plus_grande_pièce(v,S)
v ← v–p
solution.push(p)
return solution
Arguments :v est la valeur à rendre, un entier positifS est un tableau contenant les valeurs du système monétaire
![Page 53: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/53.jpg)
fct plus_grande_pièce(v,S):
n ← S.longueur()-1
p ← S[n]
while v<p and n≥0
n ← n-1
p ← S[n]
return p
Arguments :v est la valeur à rendre, un entier positifS est un tableau contenant les valeurs du système monétaire
![Page 54: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/54.jpg)
Quelles sont les limites de la méthode gloutonne ?
![Page 55: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/55.jpg)
Quelles sont les limites de la méthode gloutonne ?
Elle ne rend pas systématiquement la solution optimale
![Page 56: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/56.jpg)
Quelles sont les limites de la méthode gloutonne ?
Elle ne rend pas systématiquement la solution optimale
Dans notre système monétaire, c’est pourtant le cas : il est canonique.Prenons l’exemple d’un autre système :
S = (1 ; 3 ; 4)rendre 6 = 4 + 1 + 1
une solution optimale aurait été 6 = 3 + 3
![Page 57: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/57.jpg)
Quelles sont les limites de la méthode gloutonne ?
Elle ne rend pas systématiquement la solution optimale
Dans notre système monétaire, c’est pourtant le cas : il est canonique.Prenons l’exemple d’un autre système :
S = (1 ; 3 ; 4)rendre 6 = 4 + 1 + 1
une solution optimale aurait été 6 = 3 + 3
Cependant, on trouve une solution généralement satisfaisante en peu de temps
![Page 58: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/58.jpg)
Méthodes vues en cours
Méthode gloutonneMéthode récursiveDiviser pour régnerProgrammation dynamique
![Page 59: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/59.jpg)
Récursivité
Principe : la fonction s’appelle elle-même, mais sur un problème plus simple à chaque itération jusqu’à atteindre une condition d’arrêt
![Page 60: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/60.jpg)
Récursivité
Principe : la fonction s’appelle elle-même, mais sur un problème plus simple à chaque itération jusqu’à atteindre une condition d’arrêt
fct factorielle(n)
if n=1 or n=0
return 1
else
return n*factorielle(n-1)
Exemple : la fonction factorielle
![Page 61: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/61.jpg)
L’algorithme du rendu de monnaie en récursif :
![Page 62: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/62.jpg)
L’algorithme du rendu de monnaie en récursif :
fct rendu_monnaie_recursif(v,S,solution)
n ← S.longueur()-1
p ← S[n]
if v=0
return solution
else
while v>p
v ← v-p
solution.push(p)
return rendu_monnaie_recursif(v,S[0:n-1],solution)
Arguments : v est un entier positifS est un tableau contenant les valeurs du système monétairesolution est une pile vide
![Page 63: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/63.jpg)
On remarque que l’algorithme précédent était à la fois récursif et glouton
![Page 64: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/64.jpg)
On remarque que l’algorithme précédent était à la fois récursif et glouton
Le récursivité est plus un choix de style qu’une véritable méthode de programmationEn général, elle est équivalente aux boucles while/for
Cependant, n’hésitez pas à la privilégier aux boucles car il est souvent plus aisé d’en vérifier la terminaison et la complexité
![Page 65: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/65.jpg)
Méthodes vues en cours
Méthode gloutonneMéthode récursiveDiviser pour régnerProgrammation dynamique
![Page 66: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/66.jpg)
Diviser pour régner
Principe : Le problème est divisé en sous-problèmes, et on choisit de n’en traiter qu’une partie
![Page 67: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/67.jpg)
Diviser pour régner
Principe : Le problème est divisé en sous-problèmes, et on choisit de n’en traiter qu’une partie
Exemple :la dichotomie
fct dichotomie(L,a)
n ← L.longueur()
if n=1
return L[0]
else
if L[n//2]>a
return dichotomie(L[0:(n//2)-1],a)
else
return dichotomie(L[n//2:n-1],a)
![Page 68: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/68.jpg)
Chiffre choisi : 7
![Page 69: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/69.jpg)
Chiffre choisi : 7
Premier pivot : 6
![Page 70: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/70.jpg)
Chiffre choisi : 7
Premier pivot : 6
Plus grand ? nonOn en élimine 5
![Page 71: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/71.jpg)
Chiffre choisi : 7
Premier pivot : 6
Plus grand ? nonOn en élimine 5
Deuxième pivot : 8
![Page 72: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/72.jpg)
Chiffre choisi : 7
Premier pivot : 6
Plus grand ? nonOn en élimine 5
Deuxième pivot : 8
Plus grand ? ouiOn en élimine 3
![Page 73: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/73.jpg)
Situation précédente :
![Page 74: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/74.jpg)
Situation précédente :
Troisième pivot : 7
![Page 75: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/75.jpg)
Situation précédente :
Troisième pivot : 7
Plus grand ? nonOn en élimine un
![Page 76: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/76.jpg)
Situation précédente :
Troisième pivot : 7
Plus grand ? nonOn en élimine un
La liste restante est de longueur 1, c’est fini !
A chaque étape, on a abandonné une moitié du problème
![Page 77: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/77.jpg)
Le tri rapideUn autre exemple :
![Page 78: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/78.jpg)
Le tri rapide
Complexité en nlog(n)
Principe : choix d’un pivotséparation de la liste en deux : la partie avant le pivot, et celle aprèstri des deux sous-listesconcaténation des sous-listes
![Page 79: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/79.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
![Page 80: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/80.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
![Page 81: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/81.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
![Page 82: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/82.jpg)
Théorème maîtres’applique dans le cadre du “diviser pour régner” uniquement
énoncé : dans le cas d’un problème de dimension n, résolu par un algorithme qui le divise en a sous-problèmes de taille n/b, on a :
avec f la complexité de la division puis recombinaison du problème
![Page 83: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/83.jpg)
f(n)
f(n/b) f(n/b) f(n/b)
… … … … … … … … …
O(1) O(1) O(1) O(1) O(1) O(1) O(1)
a = 3
![Page 84: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/84.jpg)
Théorème maîtres’applique dans le cadre du “diviser pour régner” uniquement
énoncé : dans le cas d’un problème de dimension n, résolu par un algorithme qui le divise en a sous-problèmes de taille n/b, on a :
avec f la complexité de la division puis recombinaison du problème
![Page 85: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/85.jpg)
Théorème maîtres’applique dans le cadre du “diviser pour régner” uniquement
énoncé : dans le cas d’un problème de dimension n, résolu par un algorithme qui le divise en a sous-problèmes de taille n/b, on a :
avec f la complexité de la division puis recombinaison du problème
on a : si et alors
si et alors
si et alors
et pour n assez grand,
![Page 86: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/86.jpg)
Mais qui est f ?
![Page 87: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/87.jpg)
Mais qui est f ?
f est le coût de gestion en dehors des appels récursifsc’est-à-dire la complexité de tout ce qui n’est pas lié à l’appel de la fonction
Pour bien comprendre, prenons un exemple.
![Page 88: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/88.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
![Page 89: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/89.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
Qu’est-ce qui est lié à l’appel récursif ?
![Page 90: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/90.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
Qu’est-ce qui est lié à l’appel récursif ?
![Page 91: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/91.jpg)
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
Le tri rapide
Qu’est-ce qui est lié à l’appel récursif ?
Que vaut donc f ?
![Page 92: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/92.jpg)
Le tri rapide
Qu’est-ce qui est lié à l’appel récursif ?
Que vaut donc f ?
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
![Page 93: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/93.jpg)
Le tri rapide
Qu’est-ce qui est lié à l’appel récursif ?
Que vaut donc f ?
On doit donc calculer la complexité de ces fonctions annexes
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2 Concaténation : en O(n)
![Page 94: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/94.jpg)
Fonctions annexes
fct plus_grand_strict_que_le_pivot(pivot,T)
n ← T.longueur()
i ← 0
S ← créer_tableau(n,0)
for element in T
if element > pivot
S[i] ← element
i ← i + 1
return S[0:i]
![Page 95: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/95.jpg)
fct plus_grand_strict_que_le_pivot(pivot,T)
n ← T.longueur()
i ← 0
S ← créer_tableau(n,0)
for element in T
if element > pivot
S[i] ← element
i ← i + 1
return S[0:i]
Fonctions annexes
une boucle for
Complexité en O(n)
![Page 96: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/96.jpg)
Le tri rapide
On a trouvé f(n), quelle est la suite ?
f(n) = O(n)
![Page 97: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/97.jpg)
Théorème maîtres’applique dans le cadre du “diviser pour régner” uniquement
énoncé : dans le cas d’un problème de dimension n, résolu par un algorithme qui le divise en a sous-problèmes de taille n/b, on a :
avec f la complexité de la division puis recombinaison du problème
on a : si et alors
si et alors
si et alors
et pour n assez grand,
![Page 98: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/98.jpg)
Le tri rapide
On a trouvé f(n), quelle est la suite ?
f(n) = O(n)
log𝑏(𝑎) ?
![Page 99: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/99.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
![Page 100: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/100.jpg)
Le tri rapide
fct tri_rapide(T)
n ← T.longueur()
if n=1
return T
else
pivot ← T[0]
T1 ← plus_petit_que_le_pivot(pivot,T[1:n-1])
T2 ← plus_grand_strict_que_le_pivot(pivot,T[1:n-1])
tri1 ← tri_rapide(T1)
tri2 ← tri_rapide(T2)
return tri1 + [pivot] + tri2
On a deux listes, de taille moyenne n/2
a=2b=2
![Page 101: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/101.jpg)
Le tri rapide
On a trouvé f(n), quelle est la suite ?
f(n) = O(n)
log𝑏(𝑎) = log2(2) = 1
On est donc dans le cas 2 avec k = 0 donc…
![Page 102: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/102.jpg)
Théorème maîtres’applique dans le cadre du “diviser pour régner” uniquement
énoncé : dans le cas d’un problème de dimension n, résolu par un algorithme qui le divise en a sous-problèmes de taille n/b, on a :
avec f la complexité de la division puis recombinaison du problème
on a : si et alors
si et alors
si et alors
et pour n assez grand,
![Page 103: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/103.jpg)
Le tri rapide
On a trouvé f(n), quelle est la suite ?
f(n) = O(n)
log𝑏(𝑎) = log2(2) = 1
On est donc dans le cas 2 avec k = 0 donc…
![Page 104: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/104.jpg)
Le tri rapide
On a trouvé f(n), quelle est la suite ?
f(n) = O(n)
log𝑏(𝑎) = log2(2) = 1
On est donc dans le cas 2 avec k = 0 donc…
On retrouve la fameuse complexité en nlog(n) !
![Page 105: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/105.jpg)
Méthodes vues en cours
Méthode gloutonneMéthode récursiveDiviser pour régnerProgrammation dynamique
![Page 106: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/106.jpg)
Programmation dynamique
Principe : on cherche la solution la plus optimale au problème, en divisant le problème en sous-problèmes et en cherchant la solution optimale pour chacun d’eux
« toute politique optimale est composée de sous-politiques optimales »Richard Bellman
![Page 107: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/107.jpg)
Programmation dynamique
Principe : on cherche la solution la plus optimale au problème, en divisant le problème en sous-problèmes et en cherchant la solution optimale pour chacun d’eux
Quelle différence avec diviser pour régner ?
« toute politique optimale est composée de sous-politiques optimales »Richard Bellman
![Page 108: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/108.jpg)
Programmation dynamique
Principe : on cherche la solution la plus optimale au problème, en divisant le problème en sous-problèmes et en cherchant la solution optimale pour chacun d’eux
Quelle différence avec diviser pour régner ?
« toute politique optimale est composée de sous-politiques optimales »Richard Bellman
Les sous-problèmes ne sont pas nécessairement indépendants !
![Page 109: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/109.jpg)
Qu’est-ce que ça veut dire ?
mettons qu’on veuille calculer 3 parmi 5 en utilisant le triangle de Pascal, on a :
si on veut le calculer simplement par “diviser pour régner”, qu’est-ce qui se passe ?
![Page 110: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/110.jpg)
fct Pascal(k,n)
if k=0 or k=n
return 1
else
return Pascal(k-1,n-1)+Pascal(k-1,n)
Calcul de k parmi n
![Page 111: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/111.jpg)
l’algorithme veut calculer : il fait appel à lui-même et calcule et
Pour calculer , il calcule et
Pour calculer , il calcule et
5
2
4
2
5
3
fct Pascal(k,n)
if k=0 or k=n
return 1
else
return Pascal(k-1,n-1)+Pascal(k-1,n)
5
2
4
2
5
1
4
1
4
1
3
1
Calcul de k parmi n
![Page 112: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/112.jpg)
Quel est l’inconvénient de l’algorithme utilisé ?
5
3
5
1
5
2
4
1
3
1
4
2
4
1
![Page 113: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/113.jpg)
Quel est l’inconvénient de l’algorithme utilisé ?
5
3
5
1
5
2
4
1
3
1
4
2
4
1
Le calcul de 1 parmi 4 est effectué deux fois !
![Page 114: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/114.jpg)
Quelle serait la solution ?
5
3
5
1
5
2
3
1
4
2
4
1
Faire en sorte que cette valeur soit stockée en mémoireEt réutilisée pour le calcul de la deuxième branche
![Page 115: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/115.jpg)
fct Pascal_dynamique(k,n)
T ← créer_matrice(k,n,0)
for i=0 to n
T[0][i] ← 1
T[i][i] ← 1
for j=0 to n
i=1
while i≤k and i<n
T[i][j] ← T[i-1][j-1]+T[i-1][j]
i ← i+1
return T[k][n]
Le triangle de Pascal en programmation dynamique :
![Page 116: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/116.jpg)
Un autre exemple : la pyramide de nombre
Objectif : En partant du sommet, arriver à la base en maximisant le total des nombres traversés
![Page 117: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/117.jpg)
comment feriez-vous avec un algorithme glouton ?
Solution de cette pyramide :
Total : 3 + 7 + 4 + 9 = 23
![Page 118: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/118.jpg)
On choisit le plus grand nombre à chaque embranchement
Pour le sommet :on n’a pas le choix
![Page 119: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/119.jpg)
On choisit le plus grand nombre à chaque embranchement
Pour le sommet :on n’a pas le choix
7 > 4 donc on choisitd‘aller à gauche
![Page 120: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/120.jpg)
On choisit le plus grand nombre à chaque embranchement
Pour le sommet :on n’a pas le choix
7 > 4 donc on choisitd‘aller à gauche
4 > 2 donc on choisit d’aller à droite
![Page 121: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/121.jpg)
On choisit le plus grand nombre à chaque embranchement
Pour le sommet :on n’a pas le choix
7 > 4 donc on choisitd‘aller à gauche
4 > 2 donc on choisit d’aller à droite
9 > 5 donc on choisitd‘aller à droite
On remarque qu’on a trouvé la solution optimale. Est-ce toujours le cas ?
![Page 122: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/122.jpg)
Non ! La méthode gloutonne donne une solution "presque" optimale
Par exemple :
![Page 123: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/123.jpg)
Non ! La méthode gloutonne donne une solution "presque" optimale
Par exemple :
Algorithme glouton : 19
![Page 124: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/124.jpg)
Non ! La méthode gloutonne donne une solution "presque" optimale
Par exemple :
Algorithme glouton : 19 Solution optimale : 23
![Page 125: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/125.jpg)
Première solution : algorithme naïf
Comment trouver la solution optimale ?
![Page 126: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/126.jpg)
Première solution : algorithme naïf
on parcourt toutes les branches et on voit ce que donne chaque possibilité
Comment trouver la solution optimale ?
![Page 127: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/127.jpg)
Première solution : algorithme naïf
on parcourt toutes les branches et on voit ce que donne chaque possibilité
Quelle est sa complexité ?
Comment trouver la solution optimale ?
![Page 128: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/128.jpg)
Première solution : algorithme naïf
on parcourt toutes les branches et on voit ce que donne chaque possibilité
Quelle est sa complexité ?
Si on note n la hauteur de la pyramide, il y a2^(n-1) chemins possibles, on a donc une complexité exponentielle…
Comment trouver la solution optimale ?
![Page 129: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/129.jpg)
Première solution : algorithme naïf
on parcourt toutes les branches et on voit ce que donne chaque possibilité
Quelle est sa complexité ?
Si on note n la hauteur de la pyramide, il y a2^(n-1) chemins possibles, on a donc une complexité exponentielle…
On peut mieux faire.
Comment trouver la solution optimale ?
![Page 130: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/130.jpg)
Solution :
Programmation dynamique
![Page 131: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/131.jpg)
Comme pour le calcul de k parmi n, on remarque que certains calculs sont exécutés
plusieurs fois
Programmation dynamique
![Page 132: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/132.jpg)
Comme pour le calcul de k parmi n, on remarque que certains calculs sont exécutés
plusieurs fois
Programmation dynamique
Astuce : ne pas partir du sommet mais de la base de la pyramide
![Page 133: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/133.jpg)
Certains calculs sont inutiles
Quel que soit le chemin choisi pourarriver en 4…
![Page 134: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/134.jpg)
Certains calculs sont inutiles
… les chemins possibles à partir de 4 sontLes même
Quel que soit le chemin choisi pourarriver en 4…
![Page 135: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/135.jpg)
Certains calculs sont inutiles
… les chemins possibles à partir de 4 sontLes même
Quel que soit le chemin choisi pourarriver en 4…
On ne va donc pas s’intéresser aux chemins menant à 4 !
![Page 136: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/136.jpg)
On garde juste en mémoire la valeur du meilleur chemin possible pour arriver en 4
![Page 137: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/137.jpg)
On garde juste en mémoire la valeur du meilleur chemin possible pour arriver en 4
Ici, c’est celui de gauche : on remplace donc 4 par 9 = 4+5
![Page 138: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/138.jpg)
Et on obtient…
![Page 139: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/139.jpg)
Et on obtient…
![Page 140: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/140.jpg)
Et on obtient…
![Page 141: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/141.jpg)
Et on obtient…
![Page 142: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/142.jpg)
Et on obtient…
![Page 143: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/143.jpg)
Et on obtient…
![Page 144: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/144.jpg)
Et on obtient…
![Page 145: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/145.jpg)
Et on obtient…
![Page 146: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/146.jpg)
Et on obtient…
![Page 147: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/147.jpg)
Et on obtient…
![Page 148: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/148.jpg)
Et on obtient…
![Page 149: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/149.jpg)
Et on obtient…
![Page 150: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/150.jpg)
Et on obtient…
… 23 : on a bien trouvé le résultat optimal en seulement 7 étapes !
![Page 151: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/151.jpg)
Programmation dynamique
Procédé permettant de trouver une solution optimale
![Page 152: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/152.jpg)
Programmation dynamique
Procédé permettant de trouver une solution optimale
Fonctionne bien lorsque le problème est basé sur des sous-problèmes identiques
![Page 153: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/153.jpg)
Programmation dynamique
Procédé permettant de trouver une solution optimale
Fonctionne bien lorsque le problème est basé sur des sous-problèmes identiques
Calcul ascendant : on part des sous-problèmes les plus petits
![Page 154: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/154.jpg)
Programmation dynamique
Procédé permettant de trouver une solution optimale
Fonctionne bien lorsque le problème est basé sur des sous-problèmes identiques
Calcul ascendant : on part des sous-problèmes les plus petits
On les stock dans un tableau
![Page 155: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/155.jpg)
Petit bilan :
![Page 156: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/156.jpg)
Petit bilan :
A utiliser quand vous cherchez un optimum local et non global
Donne un résultat rapidement et simplement
Méthode gloutonne
![Page 157: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/157.jpg)
Petit bilan :
A utiliser quand vous voulez
A privilégier dans beaucoup de cas car la terminaison et la complexité sont plus simples à démontrer
A utiliser quand vous cherchez un optimum local et non global
Donne un résultat rapidement et simplement
Méthode gloutonne Récursion
![Page 158: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/158.jpg)
Petit bilan :
A utiliser quand vous pouvez scinder le problème en sous-problèmes indépendants
Penser au Théorème Maître et à la complexité en nlog(n) du tri rapide
A utiliser quand vous voulez
A privilégier dans beaucoup de cas car la terminaison et la complexité sont plus simples à démontrer
A utiliser quand vous cherchez un optimum local et non global
Donne un résultat rapidement et simplement
Méthode gloutonne Récursion
Diviser pour régner
![Page 159: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/159.jpg)
Petit bilan :
A utiliser quand vous cherchez un optimum globalETque vous pouvez scinder le problème en sous-problèmes dépendants
A utiliser quand vous pouvez scinder le problème en sous-problèmes indépendants
Penser au Théorème Maître et à la complexité en nlog(n) du tri rapide
A utiliser quand vous voulez
A privilégier dans beaucoup de cas car la terminaison et la complexité sont plus simples à démontrer
A utiliser quand vous cherchez un optimum local et non global
Donne un résultat rapidement et simplement
Méthode gloutonne
Programmation dynamique
Récursion
Diviser pour régner
![Page 160: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/160.jpg)
GRAPHES ET ALGORITHMES- GRAPHES
- ARBRES
- REPRÉSENTATION MACHINE
- PARCOURS ET RECOUVREMENT
![Page 161: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/161.jpg)
LES GRAPHESGRAPHES
ARBRES
![Page 162: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/162.jpg)
Un graphe ? C’est quoi ?Formellement : Un couple G = (V,E) où V (vertices) représente les sommets et E (edges) représente les arêtes entre chaque sommet
En SI , les réseaux sont souvent représentés par des graphes
Réseaux routiers, …
![Page 163: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/163.jpg)
Différents types de graphes
![Page 164: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/164.jpg)
Exemple : Amis facebookNous avons 5 personnes : A,B,C,D et E
Les personnes mises en amis sur Facebook sont reliées par une arête
Si le lien d’amitié est important (copine, famille, etc) , l’arête est pondérée à 2
![Page 165: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/165.jpg)
Propriétés et vocabulaire des graphesDegré (d’un sommet) : nombre d’arête auxquelles appartiennent le sommet
Adjacence : Reliés par une arête
Chemin : Suite de sommet reliant deux sommets
Longueur : somme des poids d’un chemin
Cycle : Chemin entre un sommet et lui-même (sans repasser par la même arête)
Différence connexe / fortement connexe :
- Connexe : Graphe non orienté ; tout les sommets sont reliés par un chemin
- Fortement connexe : Graphe orienté ; tout les sommets sont reliés par un chemin
Composante connexe : Sous-graphe connexe d’un graphe général
![Page 166: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/166.jpg)
Un type particulier de graphe :Les arbres
Un arbre est un graphe connexe , acyclique et non orienté souvent doté d’un sommet particulier appelé racine. Chaque sommet est appelé un nœud
Vocabulaire des Arbres :
Racine : Nœud sans antécédent
Feuille : Nœud sans successeur
Forêt : Chaque nœud a au plus un antécédent
Arborescence : Arbre avec une unique racine
Profondeur d’un nœud : Distance à la racine
Hauteur d’un arbre : Plus grande hauteur entre une feuille et la racine
![Page 167: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/167.jpg)
Exemple d’arbre
Arbre de type Forêt , Arborescence
Feuilles = F1, … , F13
![Page 168: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/168.jpg)
Exemple d’arbre
Arbre de type Forêt , Arborescence
Feuilles = F1, … , F13
Profondeur de F8 = 3
![Page 169: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/169.jpg)
Exemple d’arbre
Arbre de type Forêt , Arborescence
Feuilles = F1, … , F13
Profondeur de F8 = 3
Hauteur de l’arbre = 5
![Page 170: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/170.jpg)
Exemple d’arbre
Arbre de type Forêt , Arborescence
Feuilles = F1, … , F13
Profondeur de F8 = 3
Hauteur de l’arbre = 5
Profondeur entre les Nœuds A et B = 2
![Page 171: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/171.jpg)
Propriétés et Arbres particuliersChaque nœud est accessible depuis la racine par un chemin unique
ARBRES PARTICULIERS:
Arbre binaire
Arbre binaire de recherche
Arbre équilibré
Arbre complet
Arbre presque complet
![Page 172: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/172.jpg)
ARBRE BINAIRE
Chaque nœud a au plus deux successeurs
Soit h la hauteur et N le nombre de nœuds :
On a toujours : ℎ ≤ 𝑁 ≤ 2ℎ − 1
![Page 173: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/173.jpg)
ARBRE BINAIRE DE RECHERCHE
C’est un arbre binaire ordonné :
Le fils gauche a toujours une valeur inférieur au père,
Le fils droit une valeur supérieur au père.
Rechercher une valeur dans un tel arbre est très facile !
![Page 174: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/174.jpg)
ARBRE équilibréA chaque nœud, la différence de profondeur entre les sous arbres n’excède pas 1
Graphe équilibré
Graphe non équilibré
![Page 175: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/175.jpg)
ARBRE Complet
Un arbre est complet si toutes les feuilles sont à la profondeur h depuis la racine
Tout les nœuds ont une profondeur 3 depuis la racine
![Page 176: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/176.jpg)
ARBRE PRESQUE COMPLETSoit un arbre de F feuilles. Soit 1 ≤ 𝑝 ≤ 𝐹:
Les p premières feuilles ont une profondeur h depuis la racine
Les autres ont une profondeur h-1 depuis la racine
Exemple d’arbre presque complet :En gros , tout les étages sont pleins sauf le dernier
![Page 177: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/177.jpg)
IMPLEMENTATION DES GRAPHES
![Page 178: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/178.jpg)
MATRICE D’ADJACENCE
0 1 1 1 1 01 0 1 0 0 01 1 0 1 0 11 0 1 0 0 01 0 0 0 0 10 0 1 0 1 0
A B C D E F
F E
D
C
B
A
Si u et v sont lié ,M(u,v)=M(v,u)=1Sinon M(u,v)=M(v,u)=0
Complexité spatiale en 𝑂(|𝑉|2)
![Page 179: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/179.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,F
![Page 180: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/180.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,FVoisins:A B,C,D,E
![Page 181: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/181.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,FVoisins:A B,C,D,EB A,C
![Page 182: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/182.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,FVoisins:A B,C,D,EB A,CC A,B,D,F
![Page 183: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/183.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,FVoisins:A B,C,D,EB A,CC A,B,D,FD A,C
![Page 184: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/184.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,FVoisins:A B,C,D,EB A,CC A,B,D,FD A,CE A,F
![Page 185: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/185.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,FVoisins:A B,C,D,EB A,CC A,B,D,FD A,CE A,FF C,E
![Page 186: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/186.jpg)
Liste d’adjacence
Ordre : A,B,C,D,E,FVoisins:A B,C,D,EB A,CC A,B,D,FD A,CE A,FF C,E
Liste d’adjacence du graphe :[ [ B,C,D,E ] , [ A,C ] , [ A,B,D,F ] , [ A,C ] , [ A,F ] , [ C,E ]]
Complexité spatiale en 𝑂(2|𝐸|)
![Page 187: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/187.jpg)
Implémentation des arbres
Principe du même genre que liste d’adjacence :
Liste de relation père/fils (antécédent/successeur)
Racine[ fils1[ . , . ] , fils2[ . , . ] ]
![Page 188: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/188.jpg)
Implémentation des arbres
4[]6[]5[]4[]
On crée d’abord les feuilles :
4, 5, 6 et 7
![Page 189: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/189.jpg)
Implémentation des arbres
7[]6[]5[]4[]
On crée ensuite l’étage du dessus
On écrit toujours les successeurs du poids le plus petit vers le plus grand (de la gauche vers la droite)
3[ 6[], 7[] ]2[ 4[], 5[] ]
![Page 190: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/190.jpg)
Implémentation des arbres
7[]6[]5[]4[]
On crée enfin la racine3[ 6[], 7[] ]2[ 4[], 5[] ]
1[ 2[ 4[], 5[] ], 3[ 6[], 7[] ] ]
![Page 191: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/191.jpg)
CAS PARTICULIER : Graphe d’état
Prenons une situation initiale S avec des variables a, b, c :
Le but est de représenter les différentes évolutions possibles de S avec un ensemble d’opérations possibles sur les variables pour atteindre un objectif.
![Page 192: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/192.jpg)
CAS PARTICULIER : Graphe d’étatExemple: On dispose d’un sac a dos qui peut transporter 15 kilos, et de divers objets de poids différent, le but est de remplir le sac avec le plus d’objets possible.
Objets : 3kg , 4kg , 5kg et 11kg Représentation du sac:[ . , . , . , . ]3 4 5 11
Opération possible : ajouter un objet
![Page 193: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/193.jpg)
CAS PARTICULIER : Graphe d’état
S = [0,0,0,0]
S = [0,1,0,0] S = [0,0,1,0]S = [1,0,0,0] S = [0,0,0,1]
Etape 0 : Etat initial
Etape 1 : On met un objet dans le sac
3kg 4kg 5kg 11kg
![Page 194: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/194.jpg)
CAS PARTICULIER : Graphe d’état
S = [0,0,0,0]
S = [0,1,0,0] S = [0,0,1,0]S = [1,0,0,0] S = [0,0,0,1]
Etape 0 : Etat initial
S = [0,0,2,0]
S = [1,1,0,0]
S = [0,1,0,1]
S = [0,0,3,0] P = 15kg
P = 15kg
…
S = [5,0,0,0] P = 15kg
![Page 195: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/195.jpg)
ALGORITHMES SUR LES GRAPHES
- PARCOURS
- ARBRE COUVRANT DE POIDS MINIMAL
- PLUS COURT CHEMIN
![Page 196: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/196.jpg)
Remarque essentielle:Pour des raisons de simplicités évidentes :
Dans tout les algorithmes, seront considérées déjà implantées les fonctions de bases associées aux graphes, comme Neighbors() (voisins) , Weight(u,v) ou w(u,v) (poids de l’arête reliant u à v).
On considérera également dans le cas des algorithmes traités que tout les graphes sont à un état initial où les sommets sont non traités (sinon on rajoute une boucle en début de code pour initialiser le graphe)
![Page 197: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/197.jpg)
PARCOURS DE GRAPHE- DEPTH FIRST SEARCH
- BREADTH FIRST SEARCH
![Page 198: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/198.jpg)
Parcours en profondeur (DFS) Le parcours en profondeur d’un arbres est le plus simple à coder car on peut l’implémenter de manière récursive
Principe : On part d’un sommet et on prend un chemin. Lorsqu’on arrive dans une impasse (fils déjà traités ou en traitements) , on revient au sommet précédent et on examine les autres fils.
Fct DFS-Iterativ(G,s):P <- CreateStack()P.push(s)Processed(s)WHILE (NOT P.Empty()) DO
P.pop(s)IF NotLabelled(s)
Label(s)FOR v IN Neighbour(s) DO
P.push(v)Processed(v)
![Page 199: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/199.jpg)
Parcours en profondeur récursif:De manière récursive, on fait le parcours en profondeur de tout les fils du nœud , et on recommence jusqu’à tomber sur un sommet déjà marqué:
Fct DFS (G):
FOR s IN Vertices(G) DO
SI NotLabelled(s) DO
DFS_Recursiv(G,s);
Processed(s);
Fct DFS_Recursiv (G,s):
Label(s);
FOR s_son IN Neighbour(s) DO
IF NotLabelled(s_son)
DFS_Recursiv(G,s_son);
Processed(s);
![Page 200: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/200.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
En traitementTraitéNon traité
![Page 201: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/201.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
En traitementTraitéNon traité
![Page 202: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/202.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
En traitementTraitéNon traité
![Page 203: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/203.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
En traitementTraitéNon traité
![Page 204: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/204.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
Tout les voisins de D sont déjà marqués :On revient on dernier sommet avec un voisin non marqué.
En traitementTraitéNon traité
![Page 205: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/205.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
En traitementTraitéNon traité
![Page 206: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/206.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
En traitementTraitéNon traité
![Page 207: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/207.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
En traitementTraitéNon traité
![Page 208: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/208.jpg)
Parcours en profondeur récursif:Exemple : Supposons qu’on parte du sommet A, et que pour chaque sommet, on suive l’ordre alphabétique.
Tout les sommets sont traités !
Ordre de traitement avec algorithme DFS:A,B,C,D,F,E
Complexité temporelle en 𝑂(|𝐸| + |𝑉| )
![Page 209: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/209.jpg)
Tri TopologiqueExemple d’application du parcours en profondeur sur des Graphes Orientés Acycliques
Il permet d’ordonner les sommets de telle sorte que chaque sommet apparaisse avant ses successeurs dans cet ordonnancement
Il est nécessaire lors de l’implémentation avec un algorithme DFS de rajouter dans celui-ci une variable de « temps » pour savoir quand chaque sommet a été traiter et les ordonner
Des Tris topologiques de ce graphe donneraient par exemple:
- 5,7,11,3,8,2,9,10- 7,5,3,11,10,8,2,9- 3,7,8,5,11,10,9,2
![Page 210: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/210.jpg)
Parcours en largeur (BFS)Principe : On part d’un sommet S, on liste ses voisins et on les explore un par un, et on continue jusqu’à ce que l’arbre soit totalement traité (peut servir a déterminer la connexité d’un graphe).
On y utilise la structure de file.Fct BFS(G,s):
F <- CreateQueue();F.Enqueue(s);Label(s);WHILE (NOT F.Empty()) DO
v <- F.Dequeue();Processed(v);Print(v); FOR u IN Neighbour(v) DO
IF NotLabeled(u) DOF.Enqueue(u);Label(u);
![Page 211: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/211.jpg)
Parcours en largeur (BFS)Reprenons notre exemple de tout à l’heure en partant toujours du sommet A:
En traitementTraitéNon traité
File de traitement:[A]
![Page 212: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/212.jpg)
Parcours en largeur (BFS)Reprenons notre exemple de tout à l’heure en partant toujours du sommet A:
En traitementTraitéNon traité
On explore tout les voisins de A :B,C,D et EFile de traitement:
[A,B,C,D,E]
![Page 213: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/213.jpg)
Parcours en largeur (BFS)Reprenons notre exemple de tout à l’heure en partant toujours du sommet A:
En traitementTraitéNon traité
On considère A traitéPuis on explore les voisins de BFile de traitement:
[B,C,D,E]File traitée:[A]
![Page 214: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/214.jpg)
Parcours en largeur (BFS)Reprenons notre exemple de tout à l’heure en partant toujours du sommet A:
En traitementTraitéNon traité
B est ensuite TraitéOn explore les voisins de C:On ajoute F à la file
File de traitement:[C,D,E,F]File traitée:[A,B]
![Page 215: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/215.jpg)
Parcours en largeur (BFS)Reprenons notre exemple de tout à l’heure en partant toujours du sommet A:
En traitementTraitéNon traité
C est traitéOn passe à DFile de traitement:
[D,E,F]File traitée:[A,B,C]
![Page 216: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/216.jpg)
Parcours en largeur (BFS)Reprenant notre exemple de tout à l’heure en partant toujours du sommet A:
En traitementTraitéNon traité
Puis à EFile de traitement:[E,F]File traitée:[A,B,C,D]
![Page 217: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/217.jpg)
Parcours en largeur (BFS)Reprenons notre exemple de tout à l’heure en partant toujours du sommet A:
En traitementTraitéNon traité
Et Enfin à FFile de traitement:[F]File traitée:[A,B,C,D,E]
![Page 218: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/218.jpg)
Parcours en largeur (BFS)Reprenons notre exemple de tout à l’heure en partant toujours du sommet A:
On a traité le Graphe dans cet ordre : A,B,C,D,E,F
Alors qu’avec le DFS, on avait:A,B,C,D,F,E
Complexité temporelle en 𝑂 |𝐸| + |𝑉|Même que l’algorithme DFS
![Page 219: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/219.jpg)
Propriétés de l’algorithme BFS
L’algorithme BFS peut être utilisé comme algorithme de plus court chemin (on en reparlera dans la partie appropriée)
Sur le problème du rendu de monnaie, l’algorithme BFS donne toujours la solution optimale (se vérifie par récurrence) lorsque l’on modélise le problème par un graphe d’état comme expliqué précédemment :
Rendu : R = [ . , . , . ]
1 2 5
A chaque étape on rajoute un pièce jusqu’à avoir le rendu désiré (7€ par exemple)
![Page 220: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/220.jpg)
Remarques sur les structures utiliséesDans les deux algorithmes, on peut remarquer l’utilisation des fonctions « Label() » , « NotLabelled() » et « Processed() »
Il est important de savoir comment on peut les implémenter.
Comme dans mes exemples, le plus simple est de donner une couleur (ou une valeur) à chaque sommet où chacune représente un état entre Non traité , En traitement et Traité.
De plus, un peut créer une liste « parents » où l’on insère les sommets dans l’ordre où ils sont traités afin d’obtenir « l’arbre parent » , qui représente le chemin suivi lors du parcours
(ou liste « Traités »)
En traitementTraitéNon traité
![Page 221: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/221.jpg)
ARBRE COUVRANT DE POIDS MINIMAL (ARPM ou MST)
![Page 222: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/222.jpg)
Définition et propriétésPrenons un graphe pondéré :
![Page 223: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/223.jpg)
Définition et propriétésPrenons un graphe pondéré :
Celui-ci par exemple
![Page 224: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/224.jpg)
Définition et propriétésPrenons un graphe pondéré :
Notre but est de relier tout les sommets, avec un arbre (donc sans aucun cycle) composé a partir d’arêtes du graphe.Cet arbre « couvrant » devant être minimal, l’objectif est de trouver un arbre dont le poids est minimisé par rapport à tout les arbres couvrants possibles.
![Page 225: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/225.jpg)
Définition et propriétés
Un arbre couvrant minimalP = 4
![Page 226: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/226.jpg)
Définition et propriétés
Un arbre couvrant minimalP = 4
Un arbre couvrant non minimalP = 6
![Page 227: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/227.jpg)
Pourquoi rechercher un tel Arbre?Certains problèmes de la vie de tout les jours nécessitent de trouver de tels arbres:
Par exemple, connecter un réseau téléphonique en utilisant le moins de longueur de câble possible , au choix pour joindre des pattes sur un circuit imprimé, etc …
Dans des domaines plus abstrait ils peuvent servir au partitionnement de données ou au traitement d’image
![Page 228: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/228.jpg)
Algorithme de PrimUn premier algorithme pour chercher de tels arbres est l’algorithme de Prim du nom de son auteur Robert C. Prim.
C’est une sorte d’algorithme glouton qui garantie de toujours donner une solution optimal (donc un arbre couvrant minimal).
Principe:
On part d’un sommet A quelconque du graphe, et on sélectionne l’arête de plus faible poids connecté à ce sommet (on a donc 2 sommets A et B dans notre arbre).
On sélectionne parmi toutes les arêtes n’appartenant pas a notre arbre connectées à A ou à B celle de poids minimal.
On continue jusqu’à contenir tout les sommets du graphe.
![Page 229: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/229.jpg)
Algorithme de PrimPseudo-Code : Fct Prim(G,w,s)
FOR v IN V(G)color(v) <- WHITEkey(v) <- infinityp(v) <- NIL
Q <- øcolor(s) <- GRAYInsert(Q, s)key(s) <- 0WHILE (NOT Q.Empty() ) DO
u <- ExtractMin(Q)FOR v IN Neighbors(u)
IF color(v) = WHITE color(v) <- GRAYInsert(Q,v)key(v) <- w(u,v)p(v) <- u
ELSEIF color(v) = GRAYIF key(v) > w(u,v)
key(v) <- w(u,v)p(v) <- u
color(v) <- BLACKRETURN(p)
Complexité temporelle en:
Avec une liste d’adjacence𝑂 |𝐸||𝑉|
Avec un tas binaire en file de priorité𝑂 |𝐸|𝑙𝑜𝑔|𝑉|
Avec un tas de Fibonacci𝑂 𝐸 + |𝑉|𝑙𝑜𝑔|𝑉|
![Page 230: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/230.jpg)
Algorithme de PrimExemple: Reprenons notre graphe pondéré du tout début
A
E
D
C
B
On choisit un sommet au hasard, par exemple, le sommet A (sur une liste plus ou moins ordonné, on prendra le premier élément par exemple)
En traitementTraitéNon traité
![Page 231: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/231.jpg)
Algorithme de PrimExemple: Reprenons notre graphe pondéré du tout début
A
E
D
C
B
On sélectionne l’arête de poids la plus faible sur notre sous ensemble ( ici singleton A)Et on rajoute le sommet B au sous ensemble
En traitementTraitéNon traité
![Page 232: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/232.jpg)
Algorithme de PrimExemple: Reprenons notre graphe pondéré du tout début
A
E
D
C
B
Sur le sous ensemble (A,B) , on sélectionne l’arête de poids le plus faibleEt on ajoute le sommet D au sous ensemble (et l’arête)
En traitementTraitéNon traité
![Page 233: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/233.jpg)
Algorithme de PrimExemple: Reprenons notre graphe pondéré du tout début
A
E
D
C
B
On continueUne fois que tout les voisins d’un sommets sont ajoutés au sous ensemble, le sommet est traité
En traitementTraitéNon traité
![Page 234: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/234.jpg)
Algorithme de PrimExemple: Reprenons notre graphe pondéré du tout début
A
E
D
C
B
Et enfin, on ajoute le dernier sommetEt on obtient un arbre couvrant de poids minimal (MST , Minimum Spanning Tree)
En traitementTraitéNon traité
![Page 235: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/235.jpg)
Algorithme de KruskalL’algorithme Kruskal est un autre algorithme de recherche d’arbre couvrant minimal mais il utilise une structure de donnée particulière non vue en cours le Union-Find
Principe:
A chaque sommet s du graphe, on créé un singleton {s} . Ensuite on ordonne toutes les arêtes du graphe par ordre croissant de poids.
On prend la première, dont les sommets sont u et v et on forme l’ensemble {u}U{v}.
On continue, mais si en choisissant une arête, on tombe sur un sommet qui appartient déjà à un ensemble plus gros, on fait l’union entre les ensembles des deux sommets.
Grossièrement , on crée des sous arbres qu’on réunis en utilisant des arêtes de faible poids
![Page 236: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/236.jpg)
Algorithme de KruskalPseudo-Code:
Fct Kruskal(G,w):A <- ∅FOR v IN V(G)
Makeset(v)E <- sort(E(G)) # on trie les arêtes par poids croissant
FOR (u,v) IN EIF Find(u) ≠ Find(v)
A <- A U {(u,v)}Union(u,v)
RETURN(A)
Les fonctions Makeset, Find et Union sont des fonctions de la structure Union-Find
Makeset() = créé une classe d’équivalenceFind() = détermine la classe d’équivalence d’un élémentUnion() = Réunit deux classes d’équivalences
Complexité temporelle en 𝑂 |𝐸|𝑙𝑜𝑔|𝐸|
![Page 237: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/237.jpg)
Algorithme de KruskalExemple:
Ordre des arêtes :1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (C,H) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
On génère le Find-Union :
[ {A}, {B}, {C}, {D}, {E}, {F}, {G}, {H} ]
2
![Page 238: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/238.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (C,H) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A}, {B}, {C}, {D}, {E}, {F}, {G}, {H} ]
On prend la première arête de la liste et on modifie le Find-Union
2
![Page 239: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/239.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (C,H) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A, B}, {C}, {D}, {E}, {F}, {G}, {H} ]
On prend la suivanteEt on remodifie le tout
2
![Page 240: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/240.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (C,H) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A, B, C}, {D}, {E}, {F}, {G}, {H} ]
Et ainsi de suite
2
![Page 241: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/241.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (C,H) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A, B, C}, {D}, {E, G}, {F}, {H} ]
A et C sont dans le même sous ensemble, donc on ne prend pas (A,C), on passe à la suivante
2
![Page 242: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/242.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (C,H) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A, B, C}, {D}, {E, G, F}, {H} ]
On continue
2
![Page 243: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/243.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (D,E) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A, B, C , H}, {D}, {E, G, F} ]
On continue
2
![Page 244: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/244.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (D,E) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A, B, C , H}, {D, E, G, F} ]
A partir d’ici, tout les sommets sont dans le même ensemble
2
![Page 245: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/245.jpg)
Algorithme de KruskalExemple: Ordre des arêtes :
1 : (A,B) , (B,C) , (E,G)2 : (A,C) , (E,F) , (H,C)3 : (D,E) , (F,H) , (G,H)4 : (G,C)7 : (A,E)
Find-Union :[ {A, B, C , H, D, E, G, F} ]
On obtient donc un arbre couvrant minimal de notre graphe
2
![Page 246: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/246.jpg)
ALGORITHME DE PLUS COURT CHEMIN
![Page 247: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/247.jpg)
Définition et propriétésSoit un graphe G(V,E) pondéré (ou non).
Le poids d’un chemin est la somme des poids des arêtes qui le constituent ( nombre d’arêtes si le graphe n’est pas pondéré)
Soit u et v deux sommet d’une même composante connexe de G, le plus court chemin de v à u est le chemin dont le poids est minimal
Plusieurs algorithmes donnent de tels chemin, mais on a besoin de quelques propriétés.
![Page 248: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/248.jpg)
Définition et propriétésSous chemin d’un plus court chemin :
Notons 𝑐 = (𝑢0, 𝑢1, … , 𝑢𝑛−1, 𝑢𝑛) un plus court chemin de 𝑢0 à 𝑢𝑛 .
Alors ∀ 𝑖, 𝑗 ∈ 0, 𝑛 , 𝑐𝑖,𝑗 = 𝑢𝑖 , … , 𝑢𝑗 est un plus court chemin de 𝑢𝑖 à 𝑢𝑗
(se démontre par l’absurde assez facilement)
Propriété :
Dans un graphe pondéré positif, un plus court chemin ne peut pas contenir de cycle
On peut donc se contenter d’étudier les chemin de tailles 𝑉 − 1 (Arbres)
![Page 249: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/249.jpg)
RelaxationPrenons un graphe pondéré simple A l’état initial, en partant, du sommet s (on a pas
exploré le graphe) , on a les distances aux sommets adjacents :
d(s,a)=3d(s,b)=2d(s,c)=7
La relaxation consiste à regarder parmi les adjacents des voisins de s s’il ne sont pas plus proches des autres voisins de s
Par exemple, ici, on peut regarder b le voisin de s pour voir si en passant par b, on est pas plus proche de c
![Page 250: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/250.jpg)
RelaxationPrenons un graphe pondéré simple C’est en effet le cas :
d(s,c) > d(s,a) + w(b,c)
En pseudo code, on obtient cette fonction :
Fct Relax (c,b,w):IF d(s,c) > d(s,b) + w(b,c)
d(s,c) <- d(s,b) + w(b,c)c.parent <- b;
Remarque :Un plus court chemin est invariant par relaxation
Une fois la relaxation réalisée pour tout les sommets, on obtient un arbre de plus court chemin de racine s
Complexité:𝑂 1
![Page 251: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/251.jpg)
Algorithme de DijkstraL’algorithme de Dijkstra en s s’applique sur un graphe pondéré positif et crée un arbre de plus court chemin enraciné en s , appelé arbre de Dijkstra en s.
Le principe est d’effectuer un parcours en largeur et une relaxation de chaque voisins à chaque sommet traité.
Nous auront besoin pour cela d’une fonction qui initialise les distance à l’infinie
Fct InitGraph (G,s):FOR v IN V(G)
d(s,v) <- infinityv.parent <- NIL
d(s,s) = 0
Complexité:
𝑂 |𝑉|
![Page 252: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/252.jpg)
Algorithme de Dijkstra
Pseudo – Code :
Fct Dijkstra(G,w,s):InitGraph(G,s)DT <- ∅Q <- V(G)WHILE (NOT Q.Empty()) DO
u <- ExtractMin(Q)T <- T U {u}FOR v IN Neighbors(u)
Relax(u,v,w)
Cette algorithme créé un arbre (modélisé par la relation parent de la fonction Relax) enraciné en s qui donne les plus courts chemins entre s et les autres sommets.
Complexité :
Si Q est réalisé par une liste𝑂 |𝑉|²
Si Q est réalisé par un tas 𝑂 |𝐸|𝑙𝑜𝑔|𝑉|
![Page 253: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/253.jpg)
Algorithme de DijkstraReprenons ce graphe et créons son arbre de Dijkstra enraciné en A
On créé notre file de priorité
A 0
B ∞
C ∞
D ∞
E ∞
F ∞
G ∞
H ∞
2
![Page 254: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/254.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
B ∞
C ∞
D ∞
E ∞
F ∞
G ∞
H ∞
0
2
![Page 255: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/255.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
B 1
C ∞
D ∞
E ∞
F ∞
G ∞
H ∞
0
2
![Page 256: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/256.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
B 1
E 7
C ∞
D ∞
F ∞
G ∞
H ∞
0
2
![Page 257: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/257.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
B 1
E 7
C 2
D ∞
F ∞
G ∞
H ∞
0
2
![Page 258: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/258.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
C 2
E 7
D ∞
F ∞
G ∞
H ∞0
1
2
![Page 259: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/259.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
E 7
D ∞
F ∞
G ∞
H ∞
0
1
2
2
![Page 260: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/260.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
H 4
E 7
D ∞
F ∞
G ∞
0
1
2
2
![Page 261: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/261.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
H 4
E 7
G 6
D ∞
F ∞
0
1
2
2
![Page 262: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/262.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
G 6
E 7
D ∞
F ∞
0
1
2
2
4
![Page 263: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/263.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
G 6
E 7
F 7
D ∞
0
1
2
2
4
![Page 264: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/264.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
E 7
F 7
D ∞
0
1
2
2
46
![Page 265: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/265.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
F 7
D 10
0
1
2 F 7
D ∞2
46
7
![Page 266: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/266.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
F 7
D 10
0
1
2
2
46
7
![Page 267: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/267.jpg)
Algorithme de DijkstraOn traite le haut de la file de priorité
D 10
0
1
2
2
46
7
7
![Page 268: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/268.jpg)
Algorithme de DijkstraOn obtient notre arbre de Dijkstra enraciné en A
0
1
2
2
46
7
7
10 0
1 2 7
1046
7
![Page 269: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/269.jpg)
Graphes pondérés quelconquesDe manière général :
Les graphes pondérés peuvent être orientés, voire pondérés de poids négatifs (ce qui complique particulièrement leur étude)
Dans le cas d’un arbre pondéré de poids négatifs, Dijkstra ne fonctionne plus !
Particulièrement si dans le graphe il existe un cycle de poids total négatif, Dijkstra boucle à l’inifni.
![Page 270: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/270.jpg)
Algorithme de Bellman FordC’est un algorithme de plus court chemin non limité aux arêtes de poids positifs. De plus il détecte s’il y a un cycle négatif dans le graphe.
Inconvénient : Complexité plus élevé que Dijkstra
Principe :
On relaxe toutes les arêtes 𝑉 − 1 fois
Si la situation est stable, on a les plus courts chemin à la source
Si on peut encore relaxer les arêtes, c’est qu’on a un cycle de poids négatif
![Page 271: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/271.jpg)
Algorithme de Bellman FordPseudo – Code:
Fct BellmanFord (G,w,s):InitGraph(G,s)FOR i <-1 TO 𝑉 − 1
FOR (u,v) IN 𝐸(𝐺)Relax (u,v,w)
FOR (u,v) IN 𝐸(𝐺)IF d(s,v) < d(s,u) + w(u,v)
RETURN FalseRETURN True
Complexité en 𝑂(|𝐸||𝑉| )
Par exemple sur ce Graphe:
![Page 272: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/272.jpg)
Algorithme de Floyd WarshallAlgorithme de plus court chemin :
Programmation dynamique avec une Matrice de pondération !
(Peu utile pour le CF)
![Page 273: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/273.jpg)
QUELQUES EXERCICES
![Page 274: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/274.jpg)
Plus courts chemins et Arbres couvrant
A B C D E F
0 6 9 11 5 9
6 0 3 6 5 2
9 3 0 0 4 4
11 6 0 0 5 6
5 5 4 5 0 8
9 2 4 6 8 0
Déterminer un arbre recouvrant de poids minimal par application de l'algorithme de Kruskal.
Déterminer un arbre recouvrant de poids minimal par application de l'algorithme de Prim partant du nœud F.
Déterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
![Page 275: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/275.jpg)
Plus courts chemins et Arbres couvrant
A B C D E F
0 6 9 11 5 9
6 0 3 6 5 2
9 3 0 0 4 4
11 6 0 0 5 6
5 5 4 5 0 8
9 2 4 6 8 0
![Page 276: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/276.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Kruskal.
Première arête : (B,F)
Tri des arêtes :2 : (B,F)3 : (B,C)4 : (C,E) , (C,F)5 : (B,E) , (D,E) , (A,E)6 : (B,A) , (B,D) , (D,F)8 : (E,F)9 : (A,F) , (C,A)11 : (A,D)
![Page 277: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/277.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Kruskal.
2ème arête : (B,C)
Tri des arêtes :2 : (B,F)3 : (B,C)4 : (C,E) , (C,F)5 : (B,E) , (D,E) , (A,E)6 : (B,A) , (B,D) , (D,F)8 : (E,F)9 : (A,F) , (C,A)11 : (A,D)
![Page 278: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/278.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Kruskal.
3ème arête : (C,E)
Tri des arêtes :2 : (B,F)3 : (B,C)4 : (C,E) , (C,F)5 : (B,E) , (D,E) , (A,E)6 : (B,A) , (B,D) , (D,F)8 : (E,F)9 : (A,F) , (C,A)11 : (A,D)
![Page 279: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/279.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Kruskal.
4ème arête : (D,E)
Tri des arêtes :2 : (B,F)3 : (B,C)4 : (C,E) , (C,F)5 : (B,E) , (D,E) , (A,E)6 : (B,A) , (B,D) , (D,F)8 : (E,F)9 : (A,F) , (C,A)11 : (A,D)
![Page 280: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/280.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Kruskal.
Dernière arête : (A,E)
Tri des arêtes :2 : (B,F)3 : (B,C)4 : (C,E) , (C,F)5 : (B,E) , (D,E) , (A,E)6 : (B,A) , (B,D) , (D,F)8 : (E,F)9 : (A,F) , (C,A)11 : (A,D)
![Page 281: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/281.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Kruskal.
Résultat :
Tri des arêtes :2 : (B,F)3 : (B,C)4 : (C,E) , (C,F)5 : (B,E) , (D,E) , (A,E)6 : (B,A) , (B,D) , (D,F)8 : (E,F)9 : (A,F) , (C,A)11 : (A,D)
![Page 282: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/282.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Primpartant du nœud F.
![Page 283: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/283.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Primpartant du nœud F.
![Page 284: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/284.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Primpartant du nœud F.
![Page 285: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/285.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Primpartant du nœud F.
![Page 286: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/286.jpg)
Plus courts chemins et Arbres couvrantDéterminer un arbre recouvrant de poids minimal par application de l'algorithme de Primpartant du nœud F.
c
Remarque : on a le même arbre que par Kruskal
![Page 287: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/287.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
F 0
A ∞
B ∞
C ∞
D ∞
E ∞
0
![Page 288: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/288.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
A 9
B ∞
C ∞
D ∞
E ∞0
![Page 289: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/289.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
B 2
A 9
C ∞
D ∞
E ∞0
![Page 290: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/290.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
B 2
A 9
C 4
D ∞
E ∞0
![Page 291: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/291.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
B 2
A 9
C 4
D 6
E ∞0
![Page 292: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/292.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
B 2
A 9
C 4
D 6
E 50
![Page 293: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/293.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
C 4
A 9
D 6
E 8
2 0
![Page 294: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/294.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
C 4
A 8
D 6
E 7
2 0
![Page 295: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/295.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
D 6
A 8
E 7
2 0
4
![Page 296: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/296.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
E 7
A 8
2 0
4
6
![Page 297: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/297.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
A 8
2 0
4
6
7
![Page 298: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/298.jpg)
Plus courts chemins et Arbres couvrantDéterminer les plus courts chemins de F à tout autre nœud du graphe en utilisant l'algorithme de Dijkstra.
On obtient notre arbre de Dijkstra enraciné en F
2 0
4
6
7
8
![Page 299: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/299.jpg)
Plus courts chemins et Arbres couvrantDonner un exemple d'un graphe pondéré tel que un arbre recouvrant de poids minimal de ce graphe diffère de tous ses arbres de Dijkstra.
![Page 300: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/300.jpg)
Plus courts chemins et Arbres couvrantDonner un exemple d'un graphe pondéré tel que un arbre recouvrant de poids minimal de ce graphe diffère de tous ses arbres de Dijkstra.
L’arbre en vert est un arbre recouvrant de poids minimal pour le graphe G
Et pourtant aucun de ses arbres de Dijkstra ne pourra être égal à cet arbre.
Cela se démontre par l’absurde en supposant que cet arbre est un de ses arbres de Dijkstra (peu importe le sommet, on arrive à une contradiction)
![Page 301: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/301.jpg)
Plus courts chemins et Arbres couvrantProuver qu'un arbre de Dijkstra et un arbre recouvrant de poids minimal (ARPM) ont toujours au minimum une arête en commun.
Démonstration par l’absurde :
Supposons qu’un arbre de Dijkstra et un arbre recouvrant minimal n’aient aucune arête en commun.
Soit s tel que l’arbre de Dijkstra soit enraciné en s. Soit (𝑢0, 𝑢1, … , 𝑢𝑛−1, 𝑢𝑛) l’ensemble des voisins de s tels que l’arête entre eux et s soit dans l’arbre de Dijkstra.
Par définition, ces trois arêtes sont les plus court chemins entre les 𝑢𝑖 𝑑𝑒 (𝑢0, 𝑢1, … , 𝑢𝑛−1, 𝑢𝑛) et s.
Or si aucune de ces trois arêtes n’est dans l’ARPM , alors il existe un chemin plus court pour atteindre s
Contradiction !
![Page 302: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/302.jpg)
Chemin de fer
Demain, Mario doit voyager de Rennes à Grenoble pour participer à un concours de programmation. Mario a peur d'arriver en retard, et cherche donc le train qui arrive à Grenoble le plus tôt possible. Mario ne veut pas non plus arriver en avance à la gare, donc si plusieurs trains arrivent à Grenoble à la même heure, il prendra celui qui part le plus tard de Rennes. Mario vous demande de l'aider pour choisir son train.
On vous donne une table des horaires des trains à partir de laquelle vous devez calculer le train avec l'horaire d'arrivée au plus tôt et le temps de parcours le plus court. Heureusement, Mario voyage souvent et sait donc changer de train sans perdre de temps (pour un coût 0 !).
![Page 303: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/303.jpg)
Chemin de ferEn entrée, vous prendrez une description du problème consistant en 3 parties :
1) description des villes interconnectées par train:
Une première ligne donne V le nombre de villes, puis V lignes avec un nom de ville par ligne.
2) description des lignes:
Une première ligne avec un nombre T indiquant le nombre de lignes de chemin de fer, puis pour chacune des T lignes de chemin de fer, une ligne avec Ti indiquant le nombre de villes sur la ligne de chemin de fer suivie de Ti lignes avec sur chaque ligne, l'heure de passage au format hhmmsuivi du nom de la ville.
3) les données spécifiques:
Une ligne avec l'heure de départ au plus tôt, puis une ligne avec la ville de départ de Mario, puis une ligne avec l'heure d'arrivée.
![Page 304: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/304.jpg)
Chemin de fer
En graphe (V=3 et T=3):Structure du fichier (Comme proposé au dessus)
VNomV1.NomVvTT1Hhmm NomVilleT1,1.Hhmm NomVilleT1,T1.TtHhmm NomVilleTt,1.Hhmm NomVilleTt,TtDépart plus tôtVille départHeure arrivée
V lignes
T1 lignes
Tt lignes
T paquets
![Page 305: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/305.jpg)
Chemin de ferEn graphe (V=3 et T=3):
Les arêtes sont pondérées par les temps de trajets
On a de plus des contraintes supplémentaire dont on tiens compte dans l’algorithme:
Heure d’arrivée Ville de départHeure de départ au plus tôt
Solution : Faire du backtracking(Partie 4 )
![Page 306: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/306.jpg)
Problèmes avec les graphesOn a peu parlé des Graphes pondérés , mais deux notions essentielles apparaissent:
Les puits
Les sources
Si un graphe admet une source, il n’y a aucun chemin menant à s (donc pas de plus court):
Une source est une composante connexe à elle seule
Un autre problème sur les graphe (tel que celui du chemin de fer) ne peut être résolu avec les algorithmes présentés ici : La coloration (Ce problème est présenté en partie 4)
![Page 307: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/307.jpg)
Coloration de graphe,backtracking,
branch and bound
par Aymeric ‘Bébert’ Bernard
![Page 308: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/308.jpg)
Coloration de graphe
![Page 309: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/309.jpg)
Coloration de graphe : définitions
Comment colorer un graphe de telle sorte que deux nœuds adjacents soient de couleur différente ?
Couleur : nombre entier, généralement entre 0 et n-1
χ(G) : nombre minimal de couleurs pour colorer G
![Page 310: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/310.jpg)
Coloration de graphe : graphe biparti
Il existe une partition des sommets du graphe en deux ensembles G1, G2 telle que toute arête relie un sommet de G1 à un sommet de G2
Graphe biparti : χ(G) = 2 (graphe colorable avec 2 couleurs)
![Page 311: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/311.jpg)
Coloration de graphe : graphe bipartiComment savoir si un graphe est biparti ?
→ On parcourt le graphe, et à chaque changement de profondeur on changede couleur, Si ce n’est pas possible, le graphe n’est pas biparti
![Page 312: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/312.jpg)
Coloration de graphe : comment faire ?
Quel algorithme permet de colorer un graphe ?Quid de l’optimalité ?
Deux algorithmes principaux :- Algorithme glouton, naïf, non optimal mais rapide- Backtracking, complexité élevée mais permet d’avoir
un résultat optimal
![Page 313: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/313.jpg)
Coloration de graphe : algorithme glouton
Algorithme glouton : avance étape par étape, choisit une solution optimale localement, sans souci d’optimalité globale.
Principe : on parcourt le graphe, et à chaque nœud on assigne la première couleur possible (en fonctions des voisins déjà colorés).
Problème : le nombre de couleurs dépend du nœud de départ, de la manière de parcourir le graphe…
![Page 314: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/314.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées :
![Page 315: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/315.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées :
![Page 316: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/316.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées :
![Page 317: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/317.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0
![Page 318: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/318.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0
![Page 319: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/319.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1
![Page 320: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/320.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1
![Page 321: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/321.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 322: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/322.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 323: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/323.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 324: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/324.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 325: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/325.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 326: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/326.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 327: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/327.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2, 3
![Page 328: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/328.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2, 3 → 4 couleurs
![Page 329: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/329.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Et pourtant…
![Page 330: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/330.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 331: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/331.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 332: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/332.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 333: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/333.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 334: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/334.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2
![Page 335: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/335.jpg)
Coloration de graphe : algorithme glouton
Exemple :
Couleurs utilisées : 0, 1, 2 → 3 couleurs
![Page 336: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/336.jpg)
Coloration de graphe : algorithme gloutonfunction greedyColor(G):| c ← 0| …| …| …| …| …| …| …| …| …| …| …| …| …| return c
![Page 337: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/337.jpg)
Coloration de graphe : algorithme gloutonfunction greedyColor(G):| c ← 0| for i ← 0 to n-1:| | …| | …| | …| | …| | …| | …| | …| | …| | …| | …| | …| | …| return c
![Page 338: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/338.jpg)
Coloration de graphe : algorithme gloutonfunction greedyColor(G):| c ← 0| for i ← 0 to n-1:| | forbiddenColors ← tableau(c,False)| | for n in neighbors(G[i]) if n.color != None:| | | forbiddenColors[n.color] ← True| | …| | …| | …| | …| | …| | …| | …| | …| | …| return c
![Page 339: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/339.jpg)
Coloration de graphe : algorithme gloutonfunction greedyColor(G):| c ← 0| for i ← 0 to n-1:| | forbiddenColors ← tableau(c,False)| | for n in neighbors(G[i]):| | | if n.color != None:| | | | forbiddenColors[n.color] ← True| | k ← c| | for j ← c-1 downto 0 if not(forbiddenColors[j]):| | | k ← j| | …| | …| | …| | …| | …| return c
![Page 340: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/340.jpg)
Coloration de graphe : algorithme gloutonfunction greedyColor(G):| c ← 0| for i ← 0 to n-1:| | forbiddenColors ← tableau(c,False)| | for n in neighbors(G[i]):| | | if n.color != None:| | | | forbiddenColors[n.color] ← True| | k ← c| | for j ← c-1 downto 0 if not(forbiddenColors[j]):| | | k ← j| | if k = c:| | | c = c+1| | | G[i].color ← c| | else:| | | G[i].color ← k| return c
![Page 341: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/341.jpg)
Coloration de graphe : algorithme glouton
Le nombre de couleurs utilisé ≤ Δ(G) +1(Δ(G) = degré de G = nombre maximal d’arêtes partant d’un nœud)
Complexité : Θ(|V|+|E|)
![Page 342: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/342.jpg)
Le backtracking(et son application à la coloration de graphe)
![Page 343: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/343.jpg)
Le backtracking : schéma général
Principe général : revenir légèrement en arrière sur les décisions prises en cas de blocage
Utilisé surtout dans la programmation sous contraintes :- Colorer un graphe- Problème des n dames- Résolution d’une grille de sudoku- Mise en place d’emplois du temps- …
![Page 344: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/344.jpg)
Le backtracking : schéma général
On veut créer un algorithme qui renvoie True si une solution à notre problème (avec ses contraintes) existe, et False sinon(variante : stocker une ou toutes les solutions trouvées et les renvoyer).
« revenir légèrement en arrière » : par récursivité, on ne crée pas de fonction que revient explicitement sur une étape précédente !
![Page 345: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/345.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d): # s situation courante, d profondeur courante| …
![Page 346: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/346.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| -- si s est solution, on renvoie True --
![Page 347: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/347.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| if isSolution(s):| | return True # ou stocker si on veut stocker toutes les solutions| …
![Page 348: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/348.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d): | if isSolution(s):| | return True| -- sinon, on veut parcourir les situations de profondeur d+1 --| …
![Page 349: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/349.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d): | if isSolution(s):| | return True| for n in nextSituations(s):| | …| …
![Page 350: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/350.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| if isSolution(s):| | return True| for n in nextSituations(s):| | -- appel récursif pour la situation n, à une profondeur d+1 --| …
![Page 351: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/351.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| if isSolution(s):| | return True| for n in nextSituations(s):| | if backtrack(n,d+1): # solution trouvée dans cette branche !| | | …| …
![Page 352: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/352.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| if isSolution(s):| | return True| for n in nextSituations(s):| | if backtrack(n,d+1):| | | -- on fait remonter l’information dans la recursion --| …
![Page 353: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/353.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| if isSolution(s):| | return True| for n in nextSituations(s):| | if backtrack(n,d+1):| | | return True| …
![Page 354: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/354.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| if isSolution(s):| | return True| for n in nextSituations(s):| | if backtrack(n,d+1):| | | return True| -- si aucune de ces situations n’est possible, renvoyer False --
![Page 355: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/355.jpg)
Le backtracking : schéma général
Schéma de l’algorithme :
function backtrack(s,d):| if isSolution(s):| | return True| for n in nextSituations(s):| | if backtrack(n,d+1):| | | return True| return False
![Page 356: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/356.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 357: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/357.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 358: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/358.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 359: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/359.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 360: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/360.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 361: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/361.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 362: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/362.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 363: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/363.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 364: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/364.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 365: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/365.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 366: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/366.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 367: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/367.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 368: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/368.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 369: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/369.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 370: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/370.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 371: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/371.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 372: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/372.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 373: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/373.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 374: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/374.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 375: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/375.jpg)
Le backtracking : illustration du principe
1 function backtrack(s,d):2 | if isSolution(s):3 | | return True4 | for n in nextSituations(s):5 | | if backtrack(n,d+1):6 | | | return True7 | return False
![Page 376: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/376.jpg)
Le backtracking : attention
Lors d’une mise en place d’un algorithme de backtracking, faire attention aux points suivants :- Soigner la situation d’arrêt (valable pour tout algorithme récursif )- Si le problème peut présenter un cycle (on peut revenir à un état déjà traité),
il faut trouver un moyen de repérer les états déjà parcourus (attribut, stockage dans un dictionnaire,…)
- La complexité du backtracking est exponentielle, en Θ(bd) avec `b` le facteur de branchement et `d` la profondeur maximale de récursion.
![Page 377: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/377.jpg)
Le backtracking : coloration de graphe
function backtrack(s,d):| if isSolution(s):| | return True| for n in nextSituations(s):| | if backtrack(n,d+1):| | | return True| return False
maxColor = n
function backtrackColor(G,k): # k : noeud courant| if k = |V(G)|:| | return True| for c ← 0 to maxColor:| | V(G)[k].color ← c| | if not c in [n.color for n in neighbors(V(G)[k])]:| | | if backtrackColor(G,k+1):| | | | return True| V(G)[k].color ← -1 # décolorer le sommet| return False
L’algorithme renvoie True si le graphe est colorable avec maxColor couleurs.
![Page 378: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/378.jpg)
Le backtracking : coloration de graphe optimale
A partir de cet algorithme, il est possible d’obtenir χ(G)
maxColor = n
function backtrackColor(G,k):| if k = |V(G)|:| | return True| for c ← 0 to maxColor:| | V(G)[k].color ← c| | if not c in [n.color for n in neighbors(V(G)[k])]:| | | if backtrackColor(G,k+1):| | | | return True| V(G)[k].color ← -1| return False
maxColor ← ∞
function backtrackColorOpt(G,k):| if k = |V(G)|:| | maxColor ← min(maxColor,countColors(G))| for c ← 0 to maxColor:| | V(G)[k].color ← c| | if not c in [n.color for n in neighbors(V(G)[k])]:| | | backtrackColorOpt(G,k+1):| V(G)[k].color ← -1
![Page 379: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/379.jpg)
Branch and bound(séparation et évaluation)
![Page 380: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/380.jpg)
Branch and bound : principeBranch : séparer l’ensemble des solutions en ensembles plus petitsBound : évaluer ces sous-ensembles et n’explorer que ceux pouvant contenir une solution meilleure que la meilleure solution courante (par majoration).
Cela nous donne encore une fois une structure d’arbre, dans lequel seules les branches les plus prometteuses vont être parcourues (on parle d’élagage, d’arbre de décision,…)
« solution courante » : on stocke la meilleure solution trouvée jusqu’à présent par l’algorithme.
![Page 381: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/381.jpg)
Branch and bound : comment s’y prendre ?Comment savoir si un ensemble de solutions ne contient pas de solution optimale ?
→ Déterminer une borne inférieure pour le coût des solutions de cet ensemble (s'il s'agit d'un problème de minimisation).Si cette borne inférieure est de coût supérieur au coût de la meilleure solution courante, le sous-ensemble ne contient pas d'optimum.
![Page 382: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/382.jpg)
Branch and bound : complexité
Utilisations :- Problèmes d’optimisation- IA (échecs,…)
En théorie la même que celle du backtracking : exponentielle, en Θ(bd)En pratique, on peut arriver bien plus vite à une solution optimale (ou acceptable, on peut s’arrêter quand on veut)
![Page 383: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/383.jpg)
Branch and bound : exemple
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32Nombre x1 x2 x3 x4
Poids maximal : 130Nombre d’objet maximal : 4
On veut maximiser :4x1 + 5x1 + 6x1 + 2x1
Sous la contrainte :33x1 + 49x1 + 60x1 + 32x1 ≤ 130
![Page 384: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/384.jpg)
Branch and bound : exemple
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32Nombre x1 x2 x3 x4
Fonction d’évaluation pour ce problème (critère de choix pour le prochain nœud) : maximiser coût/poids
Ici item 1 a un coût/poids maximal, on va commencer par ajouter des items 1
![Page 385: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/385.jpg)
Branch and bound : exemple
> x1 = 3 : on ne peut plus rien mettre dans le sac, on a donc une (meilleure) solution à 12
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32
12
Meilleure solution : 12
![Page 386: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/386.jpg)
Branch and bound : exemple
> x1 = 2 : item 2 a maintenant le meilleur coût/poids.Evaluation : 2*4 + 5/49 x (130 - 2x33) = 14,5314,53 > 13 = 12+1 donc on a potentiellement une meilleure solution, on sépare le nœud
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32
Meilleure solution : 12
14,53
12
![Page 387: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/387.jpg)
Branch and bound : exemple
>> x1 = 2, x2 = 1 : on ne peut plus rien ajouter, solution à 2x4 + 5 = 13, c’est une meilleure solution
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32
Meilleure solution : 13
14,53
12
13
![Page 388: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/388.jpg)
Branch and bound : exemple
>> x1 = 2, x2 = 0 : l’item 3 a maintenant le meilleur coût/poids.Evaluation : 2*4 + 0 + 6/60 x (130 - 2x33) = 14,414 > 13+1 donc on a potentiellement une meilleure solution, on sépare le nœud
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32
Meilleure solution : 13
12
14,5313
14,4
![Page 389: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/389.jpg)
Branch and bound : exemple
>>> x1 = 2, x2 = 0, x3 = 1 : on ne peut plus rien ajouter, solution à 2x4 + 6 = 14, c’est une meilleure solution
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32
Meilleure solution : 14
12
14,5313
14,4 14
![Page 390: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/390.jpg)
Branch and bound : exemple
> x1 = 1 : évaluation 4 + 5/49 x (130 – 33) = 13,89On n’aura pas de meilleure solution dans cette branche (branche élaguée)
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32
Meilleure solution : 14
12
14,5313
14,4 14
13,89
![Page 391: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/391.jpg)
Branch and bound : exemple
> x1 = 0 : évaluation 5/49 x 130 = 13,27On n’aura pas de meilleure solution dans cette branche (branche élaguée)
item 1 item 2 item 3 item 4coût 4 5 6 2
poids 33 49 60 32
Meilleure solution : 14
12
14,5313
14,4 14
13,89
13,27
![Page 392: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/392.jpg)
Branch and bound : algorithme
function solveBB(problem):| activeNodes ← getActiveNodes(problem)| best ← -∞| while activeNodes != []:| | n = choseActiveNode(activeNodes) # à définir| | if estSolution(n):| | | best ← max(best,n)| | else:| | | children ← split(n)| | | for f in children:| | | | e ← eval(f) # à définir| | | | if e > best:| | | | | activeNodes.add(f)| return best
![Page 393: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/393.jpg)
Indécidabilité
Propriété indécidable : on ne peut ni la démontrer, ni la réfuter
Un exemple en informatique : le problème de l’arrêt
Existe-t-il un programme qui, étant donné en entrée un programme
informatique quelconque, détermine si ce programme termine ?
![Page 394: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/394.jpg)
Problème de l’arrêt
���� ���, �� = �1siprogs′arrêtepourl′entréech0sinon
On pose alors :
"#�$%&��' (ch) :
Si ���� ��, �� = 1Alors Faire une boucle infinie
Sinon Terminer
![Page 395: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/395.jpg)
10ème problème de Hilbert
•23 problèmes proposés par Hilbert en 1900
•10ème : Existe-t-il un algorithme permettant de trouver toutes les
solutions d’une équation diophantienne ?
•1970 : théorème de Matiiassevitch -> impossible
![Page 396: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/396.jpg)
Problèmes P et NP
•Classe P
� On connaît un algorithme de résolution en temps polynomial
•Classe NP
� On sait vérifier une solution en temps polynomial
� On ne connaît pas d’algorithme de résolution en temps polynomial
� On ne sait pas s’il en n’existe pas
•Classe NP-complète
� Tous les problèmes de classe NP se ramènent à un de ceux-ci par
réduction polynomiale
![Page 397: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/397.jpg)
Problème du voyageur de commerce
![Page 398: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/398.jpg)
P = NP ?
Prix de 1 000 000 $
![Page 399: Variables et types - CentraleSupelecbebert/Slides Algo Total.pdf · Variables et types 4 (+1) types de base : •Booléens : True, False •Entiers •Flottants •Caractères •Pointeurs](https://reader033.vdocuments.pub/reader033/viewer/2022052808/60741340fbbb096f6c1b4f80/html5/thumbnails/399.jpg)
Bonnes révisions à tous !