Complexité temporelle - Tri fusion
Objectif : Expliquer pourquoi lors d'un tri par fusion, la complexité temporelle, est égale à
n×log2n
Définition : Complexité temporelle
On appelle, complexité temporelle, le nombre d'opérations élémentaires (affectations, comparaisons, opérations
arithmétiques) effectuées par un algorithme
Partie A : La dichotomie ou «couper les cheveux en deux»
Définition : Dichotomie dans le cas continue
On considère un nombre réel
contenu dans un intervalle
[a;b]
de .
L'objectif de la dichotomie est de trouver une approximation de
, c'est à dire de trouver un intervalle
contenant
d'amplitude inférieure ou égale à e donnée.
Pour cela, on découpe l'intervalle
[a;b]
en 2 intervalles de même amplitude, on garde celui qui contient
et
on recommence cette opération avec ce nouvel intervalle, ainsi de suite. On s'arrête lorsqu'on a obtenu un
intervalle d'amplitude inférieure ou égale à e.
Exemple : Fonction continue ; Théorème des valeurs intermédiaires et continuité
Soit la fonction f telle que
fx=x3x – 14
a. Montrer que l'équation f(x)=0 admet une unique solution réelle.
b. On s'intéresse maintenant à l'algorithme ci-contre, tapé encore une fois avec algobox.
En quelques lignes expliquer à quoi sert cet algorithme.
Tester le avec
a=0
et
b=2
puis avec
a=3
et
b=5
.
Quelles précautions faut-il prendre lorsqu'on choisit
a
et
?
Modifier cet algorithme de manière à éviter le problème rencontré lors de vos tests.
c. Modifier cet algorithme de manière à ce qu'il permette de donner un encadrement de la solution de l'équation
fx=k
dans .
ALGORITHME "Fonction continue et dichotomie"
VARIABLES
REEL : a, b, ampli, milieu
DEBUT
FONCTION F(x) : REEL
REEL : x
DEBUT
RETOURNE x^3+x-14
FIN
ECRIRE("Entrez les bornes de l'intervalle")
LIRE(a)
LIRE(b)
ECRIRE("Entrez l'amplitude")
LIRE(ampli)
TANT_QUE (b-a>=ampli)
milieu (a+b)/2
SI (F(a)*F(milieu)<=0) ALORS
b milieu
SINON
a milieu
FIN_SI
FIN_TANT_QUE
ECRIRE("a")
ECRIRE("b")
FIN
Dans la suite, on s'intéresse à la dichotomie dans le cas discret et on cherche à trouver le nombre de découpages
maximum à faire pour trouver
. http://fr.wikipedia.org/wiki/Dichotomie
Commençons par un jeu :
Arthur demande à Dick : « Choisis un nombre entier dans l'ensemble {1 ; 2 ; … ; 32} mais ne me dis rien».
Dick choisit 24.
Arthur ajoute : « je vais deviner ce nombre en te posant des questions. Tu va me répondre par oui ou par non. »
Question 1 :
Arthur : « Est-ce que ce nombre est strictement supérieur à 16 ? »
Dick : « oui »
Arthur : «J'ai scindé en deux l'ensemble précédent. Le nombre est dans l'ensemble {17 ; …; 32} qui contient
32
2=16
éléments. »
Question 2 :
Arthur : « Est-ce que ce nombre est strictement supérieur à 24 ? »
Dick : « non »
Arthur : «J'ai scindé en deux l'ensemble précédent. Le nombre est dans l'ensemble {17 ; …;24} qui contient
32
22=8
éléments.»
Question 3 :
Arthur : « Est-ce que ce nombre est strictement supérieur à 20 ? »
Dick : « oui »
Arthur : «J'ai scindé en deux l'ensemble précédent. Le nombre est dans l'ensemble {21 ; …;24} qui contient
32
23=4
éléments.»
Question 4 :
Arthur : « Est-ce que ce nombre est strictement supérieur à 22 ? »
Dick : « oui »
Arthur : «J'ai scindé en deux l'ensemble précédent. Le nombre est dans l'ensemble {23 ; 24} qui contient
32
24=2
éléments. »
Question 5 :
Arthur : « Est-ce que ce nombre est strictement supérieur à 23 ? »
Dick : « oui »
Arthur : « Le nombre est dans l'ensemble {24} dans lequel il y a
32
25=1
éléments. C'est donc 24 ! J'ai trouvé
ce résultat en posant 5 questions.»
Pour trouver le nombre minimum de questions qu'Arthur doit poser pour être sûr de trouver
dans tous les
cas, on doit trouver le plus petit entier naturel
N
tel que le nombre d'éléments dans l'ensemble soit inférieur ou
égal à 1, c'est à dire tel que
32
2N1
ou encore
322N
.
On doit donc résoudre l'équation
322N
322N
ln 32ln2N
car la fonction ln est strictement croissante sur
]0 ;[
ln 32N×ln 2
car N∈ℕ a
]0 ;[
,
ln aN=N×lna
ln32
ln2N
car
ln 20
car
21
log232 N
car on pose x
]0 ;[
log2x= ln x
ln2
La calculatrice nous dit que
log232=5
Partie B : La description de l'algorithme de tri par fusion
L'algorithme peut être décrit récursivement :
1. On découpe en deux parties à peu près égales les données à trier
2. On trie les données de chaque partie
3. On fusionne les deux parties
La récursivité s'arrête car on finit par arriver à des listes composées d'un seul élément et le tri est alors trivial.
Partie C : La complexité temporelle d'une fusion
http://fr.wikipedia.org/wiki/Tri_fusion
Commençons par des exemples de fusions :
1. Cas trivial de la fusion d'un nombre
Tableau avant Tableau trié
3 /
Comparaison 1 : On compare 3 et _ . On obtient 3
Tableau avant Tableau trié
_ 3
2. Cas de la fusion de 2 nombres
Tableau avant Tableau trié
6 ; 1 _ ; _
Comparaison 1 : On compare 6 et 1. On obtient 1
Tableau avant Tableau trié
6 ; _ 1 ; _
Comparaison 2 : On compare 6 et _ . On obtient 6
Tableau avant Tableau après
_ ; _ 1 ; 6
3. Cas général : fusion de (
a1
;
a2
; …
an
) et de (
b1
;
b2
;
b3
;… ;
bm
)
Tableau avant Tableau trié
(
a1
;
a2
; …
an
) ; (
b1
;
b2
; … ;
bm
) _ ; …; _
Comparaison 1 : On compare
a1
et
b1
on obtient, par exemple
b1
Tableau avant Tableau trié
(
a1
;
a2
; …
an
) ; (
b2
; ; … ;
bm
)
b1
; _ ; … ; _
Comparaison 2 : On compare
a1
et
b2
on obtient, par exemple
a1
Tableau avant Tableau trié
(
a2
; …
an
) ; (
b2
; ; … ;
bm
)
b1
;
a1
Etc...
Bilan : Pour remplir le «tableau trié» par fusion, on a eu besoin de faire
nm
comparaisons.
Ainsi, lorsqu'on fusionne un n-uplet et un m-uplet, on a besoin de faire
nm
comparaisons.
Partie D : La complexité temporelle du tri par fusion :
N×log2N
fusionner c'est le contraire de scinder !
Supposons que l'on nous demande de trier N nombres par la méthode de tri par fusion.
D'après la partie C, à chaque fusion, on aura N comparaisons.
D'après la partie A, il y aura
log2N
fusions car le nombre de fusions est égale au nombre de scissions (« en
deux ») de la liste à trier nécessaire pour obtenir des singletons et donc pouvoir commencer le tri par fusion.
...car fusionner c'est le contraire de scinder...
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !