Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry...

33

Transcript of Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry...

Page 1: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Algorithmique avancée

Théorie des graphes

Mme Henry Gros-Désormeaux

Professeur agrégé de Mathématiques, docteur en informatique

Université des Antilles

Février 2020

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 1 / 33

Page 2: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

1. Introduction

2. Généralités sur les graphes

2.1 Vocabulaire

2.2 Représentation d'un graphe

2.3 Algorithmes de parcours de graphes

3. Arbres

3.1 Vocabulaire

3.2 Arbre binaire

Pré requis : liste, tableau

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 2 / 33

Page 3: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Problème des 7 ponts de Könisgberg, Euler, 1736

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 3 / 33

Page 4: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 4 / 33

Page 5: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Problème du voyageur de commerce, Hamilton

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 5 / 33

Page 6: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 6 / 33

Page 7: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Dé�nition 2.1

Graphe non orienté G = (V ,E ), n sommets, m arêtes

V : ensemble non vide et �ni de sommets

E : ensemble d'arêtes (paire d'éléments de V , éventuellement valuée)

Si e = (x , y), x et y sont les extrémité de e et x , y sont dits adjacents

ou voisins

e est incidente à x et y

ordre d'un graphe : nombre de sommets, degré d'un sommet : nombre

de voisins, notion de sommet isolé

Propriétés 1∑x∈V d(x) = 2|E |

Cadre : Graphe simple

Graphe orienté : arcs, degré intérieur, degré extérieur

Graphe pondéré : arêtes valuées

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 7 / 33

Page 8: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Exemple 2.1

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 8 / 33

Page 9: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Chaîne, cycle, chemin, circuit

Graphe non orienté

chaîne [x , y ] : suite �nie consécutives d'arêtes reliant les sommets x et

y

chaîne élémentaire : sommets distincts, chaîne simple : arêtes

distinctes

cycle : chaîne simple dont les 2 extrémités sont identiques

Graphe orienté

chemin [x , y ] : suite �nie d'arcs consécutifs reliant x à y

chemin élémentaire, chaîne élémentaire

circuit

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 9 / 33

Page 10: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

chemin, chaîne eulérien : toutes les arêtes sont présentes une seule fois

cycle, circuit hamiltonien: tous les sommets sont présents une seule fois

longueur : nombre d'arêtes

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 10 / 33

Page 11: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Matrice d'adjacenceTableau à double entrée M[i ][j ], de dimension N(nombre de sommets)

M[i , j ] = 1 ou 0

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 0 0 0

0 1 1 0 0

import numpy as np

G=np.array(

[[0,1,1,0,0],[1,0,1,1,1],[1,1,0,1,1],[0,1,0,0,0],[0,1,1,0,0]])

Occupation mémoire O(n2)Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 11 / 33

Page 12: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Matrice d'incidence

Pour un graphe orienté Tableau à double entrée M[i ][j ], de dimension

N(nombre de sommets)

M[i , j ] = 1 si i est l'origine de l'arc, -1 si i est l'extrémité , 0 sinon

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 12 / 33

Page 13: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Liste d'adjacence

0→ 1, 2, 1→ 0, 2, 3, 4, 2→ 0, 1, 3, 4, 3→ 1, 4→ 1, 2

S=[0,1,2,3,4]

G=[[1,2],[0,2,3,4],[0,1,3,4],[1],[1,2]]

Graphe orienté : liste de successeurs ou liste de prédecesseurs

Occupation mémoire O(n +m)Autre représentation possible : liste des sommets et liste des arêtes ou liste

des arcs

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 13 / 33

Page 14: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Représentation par classe en Python

class Graph:

def __init__(self,nbsommets,listeAdj):

self.n=nbsommets

self.adjacence=listeAdj

def nbsommets(self):

return self.n

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 14 / 33

Page 15: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Introduction

Exploration globale du graphe

Dé�nition 2.2

Un graphe non orienté est connexe si deux sommets quelconques peuvent

être reliés par une chaîne.

Un graphe orienté est fortement connexe, s'il existe un chemin entre tous

sommets x et y .

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 15 / 33

Page 16: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Exploration en largeur

Sommet initial r : racine de l'exploration

Un sommet marqué est exploré quand on a marqué tous ses voisins

FIFO : premier marqué, premier traité

exemple : r : sommet a

[[b, c][a, c , d , e], [a, b, e], [b], [b, c]] Ordre d'exploration :a b c d e

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 16 / 33

Page 17: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Entrée : G: graphe, s: racine

début

file : liste vide

marque : liste de n booléens initialisés à Faux

marque[s]=vrai

enfiler(s,file)

Tant que file non vide:

u=défiler(file)

pour chaque sommet v adjacent au sommet u:

si marque[v] est faux alors

marque[v]=vrai

enfiler(v)

fin si

fin pour

Fin tant que

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 17 / 33

Page 18: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Exploration en profondeur

Sommet initial s : racine de l'exploration

Un sommet marqué est exploré quand on a marqué tous ses voisins

LIFO : dernier marqué, premier traité

exemple : s : sommet A

Ordre d'exploration :

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 18 / 33

Page 19: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Parcours en profondeur récursif

Entrée : G: graphe, s: racine\\

marque : liste initialisée avec n booléens à False

Début

parcours_profondeur(G,s,marque)

marque[s]=True

pour chaque sommet v adjacent au sommet s:

si v.marque est faux alors

parcours_profondeur(G,v,marque)

fin si

fin pour

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 19 / 33

Page 20: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Recherche de cycles dans un graphe

Théorème 2.1

Soit G un graphe non-orienté de matrice d'adjacence A. Le nombre de

chaines de longueur n joignant le sommet i au sommet j est donné par le

terme d'indice i,j de la matrice An

Conséquences : Méthode pour déterminer l'existence de cycles

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 20 / 33

Page 21: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Algorithme de Dijkstra, 1959

Généralisation de BFS

Graphe Valué avec des coûts positifs

Principe du marquage

sommet non marqué, en cours de traitement, marqué

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 21 / 33

Page 22: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Dé�nition 3.1

Un arbre est un graphe simple non orienté connexe sans cycles

Applications : arbres généalogiques, arbres de décision (météorologie,

domaine médical...)

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 22 / 33

Page 23: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Vocabulaire

racine (→orientation implicite), feuille (degré 1)

Propriétés 2

Pour tout sommet u, il existe un unique chemin de la racine vers u.

Nombre d'arêtes=nombre de sommets −1

Tout sommet a sur ce chemin est un ancêtre de u et u est dit descendant

de a.

père, �ls, arité d'un sommet : nombre de �ls, feuille

profondeur d'un sommet : distance à la racine (3 est à la hauteur 0)

Hauteur d'un arbre : distance maximale d'une feuille à la racine

Le sous-arbre de racine 6 est de hauteur 1

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 23 / 33

Page 24: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Structure d'arbres

class Arbre:

def __init__(self,racine,listeFils):

self.n=racine

self.fils=listeFils

def ajoutfils(self,arbre1):

self.fils=arbre1

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 24 / 33

Page 25: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Les arbres binaires sont dé�nis récursivement.

Un arbre binaire T est une structure :

qui ne contient aucun noeud (arbre vide) ou

qui est formé de 3 ensembles disjoints de noeuds : un noeud racine, un

arbre binaire (sous-arbre gauche) et un arbre binaire (sous-arbre droit)

Vocabulaire : enfant gauche, enfant droit, enfant manquant

Arbre binaire complet : chaque noeud est soit une feuille, soit un noeud

qui a 2 enfants.

A la profondeur p, 2p noeuds.

Si h est la hauteur de l'arbre binaire, le nombre de feuilles est majoré par 2h

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 25 / 33

Page 26: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Implémentation

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 26 / 33

Page 27: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Arbres binaires de recherche

Chaque noeud contient une clé et éventuellement des données satellites.

Les clés sont stockées de manière à satisfaire la propriété suivante :

Propriétés 3

Soit x un noeud d'un arbre binaire.

Si y est un noeud du sous-arbre gauche de x, alors y.clé≤ x.clé

Si y est un noeud du sous-arbre de droite de x, alors x.clé≤y.clé

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 27 / 33

Page 28: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Parcours en largeurA�chage des noeuds niveau par niveau

Entrée : A: arbre

début

file:liste vide

Si A non nul,

enfiler(A,file)

Tant que file non vide:

u=défiler(f)

Si u.filsG non nul

enfiler(u.filsG)

Fin Si

Si u.filsD non nul

enfiler(u.filsD)

Fin Si

Fin tant que

Fin SiMme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 28 / 33

Page 29: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Parcours en profondeur

3 types de parcours :

parcours pré�xe : a�che la racine avant les valeurs de chacun de ses

sous-arbes

parcours su�xe : a�che la racine après la valeur de ses sous-arbres

parcours in�xe : a�che les valeurs du sous-arbre gauche, puis la

racine, puis les valeurs du sous-arbre droit (ordre trié)

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 29 / 33

Page 30: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

pré�xe : r,a,c,h,d,i,j,l,b,e,k,f

su�xe: h,c,i,l,j,d,a,k,e,f,b,r

in�xe: c,h,a,i,d,l,j,r,k,e,b,f

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 30 / 33

Page 31: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Pseudo-code

ParcoursInfixe(x)

Si x non nul

ParcoursInfixe(x.gauche)

Afficher x.clé

ParcoursInfixe(x.droite)

Fin Si

ParcoursPrefixe(x)

Si x non nul

Afficher x.clé

ParcoursPrefixe(x.gauche)

ParcoursPrefixe(x.droite)

Fin Si

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 31 / 33

Page 32: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Recherche d'une clé

Pseudo-code

Version récursive

Rechercher(x,k)

Si x est nul ou k=x.cle

renvoie x

Si k<x.cle

renvoie Rechercher(x.gauche,k)

sinon renvoie Rechercher(x.droite,k)

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 32 / 33

Page 33: Algorithmique avancée - eCursus · Algorithmique avancée Théorie des graphes Mme Henry Gros-Désormeaux Professeur agrégé de Mathématiques, docteur en informatique Université

Insertion d'un élément

Arbre_Inserer(T,z)

y=None

x=T.racine

Tant que x non vide

y=x

si z.cle < x.cle

x=x.gauche

sinon x=x.droite

z.p=y

si y==nul

T.racine=z

sinon si

z.cle<y.cle

y.gauche=z

sinon

y.droite=z

Mme Henry Gros-Désormeaux (UA) Algorithmique avancée Février 2020 33 / 33