Algorithmique II PDF
Algorithmique II PDF
Algorithmique II PDF
PLAN DU COURS
üNotion de graphes
© medbecha 2010-2016
3
NOTION DE GRAPHES
üUn graphe est un type abstrait de donnnées implémentant les concepts
mathématiques de graphes orientés et de graphes non orientés.
üUn graphe orienté G est représenté par un couple (S,A) où S est un
ensemble fini et A une relation binaire sur S (sous-ensemble du produit
cartésien S x S). L’ensemble S est l’ensemble des sommets de G et A est
l’ensemble des arcs (arrows) de G.
üUn graphe non orienté est un couple G=(S,A) où S est un ensemble fini
représentant les sommets du graphe et A est un ensemble de pairs inclus
dans l’ensemble { 𝑥 , 𝑦 ; 𝑥 ∈ 𝑆, 𝑦 ∈ 𝑆, 𝑥 ≠ 𝑦 } et représentant les arêtes
(lines) du graphe.
© medbecha 2010-2016
4
NOTION DE GRAPHES
üDans le cas général, le terme lien (edge) désigne un arc ou une arête
üUn graphe avec des liens pouvant être multiples entre deux sommets
distincts est appelé multi-graphe.
üL’ordre d’un graphe est le nombre de ses sommets :|S| ≧1
üLa taille d’un graphe est le nombre de ses liens : |A|≧0
© medbecha 2010-2016
5
© medbecha 2010-2016
6
© medbecha 2010-2016
8
© medbecha 2010-2016
9
© medbecha 2010-2016
10
© medbecha 2010-2016
11
© medbecha 2010-2016
12
© medbecha 2010-2016
13
© medbecha 2010-2016
14
GRAPHES SPÉCIAUX
üUn arbre est un graphe non orienté connexe et acyclique
Toutes ces assertions sont équivalentes :
ü𝛀 est un arbre
ü𝛀 est un graphe connexe et |A| = |S| - 1
ü𝛀 est un graphe acyclique et |A| = |S| - 1
üIl existe exactement une chaine entre chaque paire de sommets de 𝛀
ü𝛀 est un graphe acyclique mais si on ajoute une arête il devient cyclique
ü𝛀 est un graphe connexe mais si on supprime une arête il ne l’est plus
© medbecha 2010-2016
16
GRAPHES SPÉCIAUX
üGraphe Bipartite
üL’ensemble S des sommets peut être partitionné en deux sous-
ensembles (disjoints) tel que chaque lien du graphe relie un
sommet de l’un des sous-ensembles à l’un des sommets de l’autre
sous-ensembles.
© medbecha 2010-2016
17
© medbecha 2010-2016
18
© medbecha 2010-2016
19
© medbecha 2010-2016
20
© medbecha 2010-2016
21
© medbecha 2010-2016
23
üThéorème d’existence :
© medbecha 2010-2016
24
üAlgorithme de Floyd-Warshall
üCalcule les plus courts chemins entre chaque pair de sommets
üUtilise la représentation du graphe avec une matrice d’adjacence
üGénère une matrice D où 𝑑78 est la plus courte distance entre le
nœud i et nœud j
üPeut détecter un cycles / circuit absorbant
üS’exécute en une temps de 𝜣(𝒏𝟑 )
üTrès facile à coder
üApplications : routage optimal, Maximisation de la bande
passante
© medbecha 2010-2016
25
© medbecha 2010-2016
27
ü𝑓 𝑖, 𝑗, 0 = 𝑐𝑜𝑠𝑡(𝑖 , 𝑗)
ü𝑓 𝑖, 𝑗, 𝑘 = min( 𝑓 𝑖, 𝑘, 𝑘 − 1 + 𝑓 𝑘, 𝑗, 𝑘 − 1 , 𝑓 𝑖, 𝑗, 𝑘 − 1 )
© medbecha 2010-2016
28
Procedure Path(u, v)
Begin
if next[u][v] = null then
return []
path ← [u]
while u ≠ v
u ← next[u][v]
path.append(u)
return path
End
© medbecha 2010-2016
30
üAlgorithme de Dijkstra
üNe marche que sur les graphes valués avec des poids positifs (sans
poids négatifs)
üCalcule les plus courts chemins entre un sommet particulier et les
autres sommets
üGénère un tableau d où 𝑑7 est la distance la plus courte du
sommet de départ au sommet 𝑖
üAlgorithme glouton
ü Idée similaire à l’algorithme de Prim
ü Peut être implémenté en 𝜣(𝒏𝟐 + 𝒎) ou 𝜣(𝒎 𝐥𝐨𝐠 𝒏) ou 𝜣(𝒏 𝒍𝒐𝒈 𝒏)
ü Choix glouton : trouver le plus proche sommet de s puis celui le proche de
ce dernier, …
© medbecha 2010-2016
31
üAlgorithme de Bellman-Ford
ü Calcule les plus courts chemins entre un sommet particulier et les autres sommets
ü Génère un tableau d où 𝑑7 est la distance la plus courte du sommet de départ
au sommet 𝑖
ü Peut détecter un cycle/circuit absorbant
ü S’exécute en une temps de 𝜣(𝒏𝒎)
ü Facile à coder
ü Applications :
ü Protocole de routage : Routing Information Protocol (version distribuée)
ü Systèmes d’inégalités linéaires sur les différences de variables
© medbecha 2010-2016
33
© medbecha 2010-2016
35
© medbecha 2010-2016
36
üPour chaque arc de j vers i avec un coût c, le vecteur d des plus courts
chemins satisfera 𝒅𝒊 ≤ 𝒄 + 𝒅𝒋
© medbecha 2010-2016
37
© medbecha 2010-2016
38
© medbecha 2010-2016
40
2
a b
5 6
2
8 c
f
3 1
d
4
7
e
© medbecha 2010-2016
41
2
a b
5
8 c
f
© medbecha 2010-2016
42
2
a b
5 6
2
8 c
f
© medbecha 2010-2016
43
2
a b
5 6
2
8 c
f
3 1
d
© medbecha 2010-2016
44
2
a b
5 6
2
8 c
f
3 1
d
4
7
e(c, 5) e d(c, 7) f(b, 8)
© medbecha 2010-2016
45
2
a b
5 6
2
8 c
f
3 1
d
4
7
d(c, 7) e f(b, 8)
© medbecha 2010-2016
46
2
a b
6
2
c
f
3 1
d
© medbecha 2010-2016
47
Où
© medbecha 2010-2016
49
ü Arbre 2-3 :
üTas de Fibonacci :
𝑇(𝑛, 𝑚) = Θ(𝑛× log 𝑛 + 𝑚×1) = Θ(𝑛 log 𝑛 + 𝑚)
© medbecha 2010-2016
50
© medbecha 2010-2016
52
𝑥’ − 𝑥2 ≤ 0
𝑥’ − 𝑥“ ≤ −1
𝑥2 − 𝑥“ ≤ 1
𝑥” − 𝑥’ ≤ 5
𝑥– − 𝑥’ ≤ 4
𝑥– − 𝑥” ≤ −1
𝑥“ − 𝑥” ≤ −3
𝑥“ − 𝑥– ≤ −3
© medbecha 2010-2016
53
© medbecha 2010-2016
54
üLa solution :
© medbecha 2010-2016
56
TRI TOPOLOGIQUE
üEntrée : un graphe orienté acyclique (DAG) G = (S, A)
üSortie : un ordre partiel des sommets tel que ∀ (𝑢, 𝑣) ∈ 𝐴 𝑢 vient avant 𝑣 dans
l’ordre
üIl peut exister plusieurs solutions :
ü {6, 1, 3, 2, 7, 4, 5, 8} et {1, 6, 2, 3, 4, 5, 7, 8} sont deux ordres possibles pour ce
graphe:
© medbecha 2010-2016
57
TRI TOPOLOGIQUE
ü Pré-calculer le degré entrant deg(𝑣) de chaque sommet 𝑣
ü Mettre tous les sommets ayant un degré zéro dans une file d’attente
ü Répéter tant que la file n’est pas vide :
ü Défiler un sommet 𝑣 de la file
ü Pour chaque arc de 𝑣 à 𝑢
ü Décrémenter deg(𝑢) (comme si on supprimait l’arc de v à u)
ü Si deg(𝑢) devient zéro alors enfiler 𝑢 dans la file d’attente
ü Les sommets sont défilés de la file d’attente dans un ordre topologique
ü Complexité : 𝜣(n+m)
© medbecha 2010-2016
58
© medbecha 2010-2016
59
ALGORITHME DE KOSARAJU
üInitialiser un compteur 𝑐 ← 0
üTant qu’il y a des sommets sans labels:
ü Choisir un sommet v sans label arbitraire
ü Commencer un DFS récursif à partir de v
ü Marquer x comme visité
ü Appeler récursivement le DFS sur les voisins non visités de x
ü Incrémenter c et assigner à x le label c
ü Inverser la direction de tous les arcs et marquer tous les sommets comme non visités
ü Pour chaque sommet v non visité en commençant par celui avec le plus fort label
ü Commencer un DFS depuis v en marquant tous les sommets atteints comme visités les
labélisés comme appartenant au même sous-graphe fortement connexe
© medbecha 2010-2016
60
POINTS D’ARTICULATION
© medbecha 2010-2016
61
POINTS D’ARTICULATIONS
Procedure GetArticulationPoints(i, d)
visited[i] ← true ; depth[i] ← d ; low[i] ← d ; childCount ← 0 ; isArticulation ← false
for each ni in adj[i] do
if not visited[ni] then
parent[ni] ← i
GetArticulationPoints(ni, d + 1)
childCount ← childCount + 1
if low[ni] >= depth[i] then
isArticulation ← true
low[i] ← Min(low[i], low[ni])
else if ni <> parent[i] then
low[i] ← Min(low[i], depth[ni])
if (parent[i] <> null and isArticulation) or (parent[i] == null and childCount > 1)
then Output i as articulation point
© medbecha 2010-2016