variables et types - centralesupelecbebert/slides algo total.pdf · variables et types 4 (+1) types...

399

Upload: others

Post on 27-Oct-2020

4 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bonnes révisions à tous !