Enveloppe convexe
Enveloppe convexe
Point extremal
Point extremal
Premier algorithme : Jarvis
Premier algorithme : Jarvis
Le point le plus bas est extr´emal
Premier algorithme : Jarvis
Premier algorithme : Jarvis
Premier algorithme : Jarvis
Premier algorithme : Jarvis
Premier algorithme : Jarvis
On trouve le suivant
Premier algorithme : Jarvis
On trouve le suivant Puis le suivant
Premier algorithme : Jarvis
On trouve le suivant Puis le suivant
Et ainsi de suite
Premier algorithme : Jarvis
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
Premier algorithme : Jarvis Complexit´e ?
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
u.suivant=v;
Faire
S =S\ {v}
Pour toutw∈S min=∞
siangle(v.pred v, vw)< min alors
min=angle(v.pred v, vw); v.suivant=w;
v =v.suivant;
Tant que v 6=u
Premier algorithme : Jarvis Complexit´e ?
O(n)
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
O(n) Premier algorithme : Jarvis
Complexit´e ?
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
u.suivant=v;
Faire
S =S\ {v}
Pour toutw∈S min=∞
siangle(v.pred v, vw)< min alors
min=angle(v.pred v, vw); v.suivant=w;
v =v.suivant;
Tant que v 6=u
Premier algorithme : Jarvis Complexit´e ?
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
Premier algorithme : Jarvis Complexit´e ?
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
u.suivant=v;
Faire
S =S\ {v}
Pour toutw∈S min=∞
siangle(v.pred v, vw)< min alors
min=angle(v.pred v, vw); v.suivant=w;
v =v.suivant;
Tant que v 6=u O(n)
Premier algorithme : Jarvis Complexit´e ?
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
O(n2)
Premier algorithme : Jarvis Complexit´e ?
entr´ee : S un ensemble de points.
u=le point le plus bas de S;
min=∞
Pour toutw∈S\ {u}
siangle(ux, uw)< min alorsmin=angle(ux, uw);v =w;
u.suivant=v;
Faire
S =S\ {v}
Pour toutw∈S min=∞
siangle(v.pred v, vw)< min alors
min=angle(v.pred v, vw); v.suivant=w;
v =v.suivant;
Tant que v 6=u
O(nh)
Deuxi`eme algorithme : Graham
Deuxi`eme algorithme : Graham Un point int´erieur
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
Deuxi`eme algorithme : Graham
Un point int´erieur
Tri autour de ce point
Parcours depuis le point le plus bas
Deuxi`eme algorithme : Graham Un point int´erieur
Tri autour de ce point
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
v = u;
tant que v.suivant 6= u
si (v, v.suivant, v.suivant.suivant) tourne `a gauche v = v.suivant;
sinon
v.suivant = v.suivant.suivant;
si v 6= u v = v.precedent;
Deuxi`eme algorithme : Graham
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
Deuxi`eme algorithme : Graham Complexit´e
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
v = u;
tant que v.suivant 6= u
si (v, v.suivant, v.suivant.suivant) tourne `a gauche v = v.suivant;
sinon
v.suivant = v.suivant.suivant;
si v 6= u v = v.precedent;
Deuxi`eme algorithme : Graham Complexit´e
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n)
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
v = u;
tant que v.suivant 6= u
si (v, v.suivant, v.suivant.suivant) tourne `a gauche v = v.suivant;
sinon
v.suivant = v.suivant.suivant;
si v 6= u v = v.precedent;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1)
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1) O(n)
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
v = u;
tant que v.suivant 6= u
si (v, v.suivant, v.suivant.suivant) tourne `a gauche v = v.suivant;
sinon
v.suivant = v.suivant.suivant;
si v 6= u v = v.precedent;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1) O(n)
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1) O(n)
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
v = u;
tant que v.suivant 6= u
si (v, v.suivant, v.suivant.suivant) tourne `a gauche v = v.suivant;
sinon
v.suivant = v.suivant.suivant;
si v 6= u v = v.precedent;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1) O(n)
au plus n suppressions
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1) O(n)
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
v = u;
tant que v.suivant 6= u
si (v, v.suivant, v.suivant.suivant) tourne `a gauche v = v.suivant;
sinon
v.suivant = v.suivant.suivant;
si v 6= u v = v.precedent;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1) O(n)
au plus n suppressions
au plus n fois
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n) O(1) O(n)
entr´ee : S un ensemble de points.
origine = barycentre de 3 points de S;
trier S autour de l’origine;
u = le point le plus bas de S;
v = u;
tant que v.suivant 6= u
si (v, v.suivant, v.suivant.suivant) tourne `a gauche v = v.suivant;
sinon
v.suivant = v.suivant.suivant;
si v 6= u v = v.precedent;
Deuxi`eme algorithme : Graham Complexit´e
O(n log n)
Variante: origine en y = −∞
Variante: origine en y = −∞
Tri en x
Variante: origine en y = −∞
Tri en x
Variante: origine en y = −∞
Tri en x
Enveloppe sup´erieure
Variante: origine en y = −∞
Autre algorithme par tri en x
Autre algorithme par tri en x
Autre algorithme par tri en x
Autre algorithme par tri en x
Autre algorithme par tri en x
Autre algorithme par tri en x
Autre algorithme par tri en x
Autre algorithme par tri en x
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
tant que (v, u, u.suivant) tourne `a droite u= u.suivant;
v.suivant = u; u.pred = v;
tant que (v, w, w.pred) tourne `a gauche w = w.pred;
v.pred = w; w.suivant= v;
u= v;
Autre algorithme par tri en x
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
u v Autre algorithme par tri en x
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
tant que (v, u, u.suivant) tourne `a droite u= u.suivant;
v.suivant = u; u.pred = v;
tant que (v, w, w.pred) tourne `a gauche w = w.pred;
v.pred = w; w.suivant= v;
u= v;
u v Autre algorithme par tri en x
u
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
u v Autre algorithme par tri en x
u u
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
tant que (v, u, u.suivant) tourne `a droite u= u.suivant;
v.suivant = u; u.pred = v;
tant que (v, w, w.pred) tourne `a gauche w = w.pred;
v.pred = w; w.suivant= v;
u= v;
u v Autre algorithme par tri en x
w
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
u v Autre algorithme par tri en x
ww
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
tant que (v, u, u.suivant) tourne `a droite u= u.suivant;
v.suivant = u; u.pred = v;
tant que (v, w, w.pred) tourne `a gauche w = w.pred;
v.pred = w; w.suivant= v;
u= v;
Autre algorithme par tri en x
ww u
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
Autre algorithme par tri en x
Complexit´e
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
tant que (v, u, u.suivant) tourne `a droite u= u.suivant;
v.suivant = u; u.pred = v;
tant que (v, w, w.pred) tourne `a gauche w = w.pred;
v.pred = w; w.suivant= v;
u= v;
Autre algorithme par tri en x
Complexit´e O(n log n)
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
Autre algorithme par tri en x
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
tant que (v, u, u.suivant) tourne `a droite u= u.suivant;
v.suivant = u; u.pred = v;
tant que (v, w, w.pred) tourne `a gauche w = w.pred;
v.pred = w; w.suivant= v;
u= v;
Autre algorithme par tri en x
Complexit´e
Dessiner une arˆete dans la triangulation
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
Autre algorithme par tri en x
Complexit´e
entr´ee : S un ensemble de points.
trier S en x;
initier une liste circulaire avec les 3 points les plus `a gauche tel queu`a droite etu, u.suivant, u.suivanttourne `a gauche; Pour v le prochain en x
w=u
tant que (v, u, u.suivant) tourne `a droite u= u.suivant;
v.suivant = u; u.pred = v;
tant que (v, w, w.pred) tourne `a gauche w = w.pred;
v.pred = w; w.suivant= v;
u= v;
Autre algorithme par tri en x
Complexit´e O(n log n)
Un algorithme division fusion
Un algorithme division fusion
Un algorithme division fusion
Un algorithme division fusion
Tangentes communes
Tangente sup´erieure
Tangente sup´erieure
Points les plus hauts
Tangente sup´erieure
Tangente sup´erieure
Tangente sup´erieure
O(n)
Un algorithme division fusion
Complexit´e
f(n) =
Un algorithme division fusion
Complexit´e
f(n) = A · n + f(n2) + f(n2)
Un algorithme division fusion
Complexit´e
f(n) = A · n + f(n2) + f(n2)
= O(n logn)
Un algorithme division fusion
Complexit´e
f(n) = A · n + f(n2) + f(n2)
Cas particulier : polygone simple
Cas particulier : polygone simple
(d´ej`a vu : chaine polygonale monotone)
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Graham marche pas
Cas particulier : polygone simple
Cas particulier : polygone simple Principe : boucher les poches
Cas particulier : polygone simple
Cas particulier : polygone simple
Cas particulier : polygone simple
A B
Cas particulier : polygone simple
B C
Cas particulier : polygone simple
A
B C
D
Cas particulier : polygone simple
Cas particulier : polygone simple
Cas particulier : polygone simple
B
Cas particulier : polygone simple
D C
Cas particulier : polygone simple
C
Cas particulier : polygone simple
A B
Cas particulier : polygone simple
B
Cas particulier : polygone simple
A B
Cas particulier : polygone simple
B
Cas particulier : polygone simple
Cas particulier : polygone simple
B C
Cas particulier : polygone simple
A
B C
D
Cas particulier : polygone simple
B C
Cas particulier : polygone simple
A
B C
D
O(1)
Cas particulier : polygone simple
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un d´ecoupage du plan
Un algorithme incr´emental
Un d´ecoupage du plan
Un algorithme incr´emental
Un d´ecoupage du plan selon la tangente `a droite
Un algorithme incr´emental
Un d´ecoupage du plan selon la tangente `a droite
Un algorithme incr´emental Un d´ecoupage du plan
Un algorithme incr´emental Un d´ecoupage du plan
Un algorithme incr´emental Un d´ecoupage du plan
Un algorithme incr´emental Un d´ecoupage du plan
Un algorithme incr´emental Un d´ecoupage du plan
Un algorithme incr´emental Un d´ecoupage du plan
Un algorithme incr´emental Un d´ecoupage du plan
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
sym´etriquement
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Un algorithme incr´emental
Complexit´e
Un algorithme incr´emental
Complexit´e
Complexit´e d’un nœud
Un algorithme incr´emental
Complexit´e
Complexit´e d’un nœud O(1)
Un algorithme incr´emental
Complexit´e
Complexit´e d’un nœud O(1)
Arbre ´equilibr´e
Un algorithme incr´emental
Complexit´e
Complexit´e d’un nœud O(1)
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
L’algorithme du paquet cadeau
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
Algorithme division fusion
O(n)
Algorithme division fusion
O(n)
O(n logn)
C’est tout pour aujourd’hui