Raisonner avec des arbres MPSI Option info MPSI Option info Raisonner avec des arbres 1 / 28 Recherche d’un minimum On souhaite trouver le minimum d’un tableau de n 6= 0 entiers. Quel est le plus petit nombre de comparaisons nécessaires? MPSI Option info Raisonner avec des arbres 2 / 28 Recherche d’un minimum On souhaite trouver le minimum d’un tableau de n 6= 0 entiers. Quel est le plus petit nombre de comparaisons nécessaires? MPSI Option info Raisonner avec des arbres 2 / 28 Recherche d’un minimum On souhaite trouver le minimum d’un tableau de n 6= 0 entiers. Quel est le plus petit nombre de comparaisons nécessaires? minimum réalise n − 1 comparaisons. Est-ce optimal? MPSI Option info Raisonner avec des arbres 2 / 28 Erreur classique « Si un algorithme mettait moins de n − 1 comparaisons pour trouver le minimum d’un tableau de taille n, un élément ne serait jamais comparé » MPSI Option info Raisonner avec des arbres 3 / 28 Erreur classique « Si un algorithme mettait moins de n − 1 comparaisons pour trouver le minimum d’un tableau de taille n, un élément ne serait jamais comparé » C’est faux: en comparant les éléments par paires, on effectue que b n2 c comparaisons et chaque élément est comparé. MPSI Option info Raisonner avec des arbres 3 / 28 Recherche d’un minimum Si un algorithme calcule le minimum m d’un tableau, alors chaque élément e 6= m doit avoir été comparé supérieur à un autre au moins une fois (sinon, on ne pourra pas savoir si e ou m est le minimum). MPSI Option info Raisonner avec des arbres 4 / 28 Recherche d’un minimum Si un algorithme calcule le minimum m d’un tableau, alors chaque élément e 6= m doit avoir été comparé supérieur à un autre au moins une fois (sinon, on ne pourra pas savoir si e ou m est le minimum). Donc le nombre minimum de comparaisons pour trouver un minimum est bien n − 1. MPSI Option info Raisonner avec des arbres 4 / 28 Recherche d’un minimum Si un algorithme calcule le minimum m d’un tableau, alors chaque élément e 6= m doit avoir été comparé supérieur à un autre au moins une fois (sinon, on ne pourra pas savoir si e ou m est le minimum). Donc le nombre minimum de comparaisons pour trouver un minimum est bien n − 1. En général, pour prouver une borne inférieur sur la complexité d’un algorithme, il est utile de considérer l’arbre d’exécution de cet algorithme. MPSI Option info Raisonner avec des arbres 4 / 28 Recherche d’un minimum Considérons un algo. quelconque calculant le minimum d’un tableau t. Cet algo. effectue une première comparaison, disons entre les éléments t.(i) et t.(j). MPSI Option info Raisonner avec des arbres 5 / 28 Recherche d’un minimum Considérons un algo. quelconque calculant le minimum d’un tableau t. Cet algo. effectue une première comparaison, disons entre les éléments t.(i) et t.(j). Cet algo. va ensuite effectuer une 2ème comparaison entre 2 éléments t.(k) et t.(l). Le choix de k et l dépend à priori du résultat de la comparaison de t.(i) et t.(j). Ainsi de suite... jusqu’au moment où l’algo. s’arrête et renvoie le minimum. MPSI Option info Raisonner avec des arbres 5 / 28 Arbre de décision On peut dessiner l’arbre dont les noeuds sont les comparaisons, la racine est la comparaison initiale et les feuilles correspondent aux valeurs de retour de l’algorithme. Le sous-arbre gauche (resp. droit) correspond au cas où la comparaison est false (resp. true) MPSI Option info Raisonner avec des arbres 6 / 28 Arbre de décision Arbre de décision de minimum sur un tableau de taille 4: t.(0) > t.(1) true false t.(0) > t.(2) t.(1) > t.(2) t.(0) > t.(3) t.(2) > t.(3) t.(1) > t.(3) t.(2) > t.(3) t.(0) t.(2) t.(1) t.(2) t.(3) MPSI Option info t.(3) Raisonner avec des arbres t.(3) t.(3) 7 / 28 Arbre de décision Exemple d’exécution sur t = [|5; 1; 3; 2|]: t.(0) > t.(1) t.(0) > t.(2) t.(1) > t.(2) t.(0) > t.(3) t.(2) > t.(3) t.(1) > t.(3) t.(2) > t.(3) t.(0) t.(2) t.(1) t.(2) t.(3) MPSI Option info t.(3) Raisonner avec des arbres t.(3) t.(3) 8 / 28 Arbre de décision Exemple d’exécution sur t = [|5; 1; 3; 2|]: t.(0) > t.(1) t.(0) > t.(2) t.(1) > t.(2) t.(0) > t.(3) t.(2) > t.(3) t.(1) > t.(3) t.(2) > t.(3) t.(0) t.(2) t.(1) t.(2) t.(3) t.(3) t.(3) t.(3) Complexité dans le pire des cas = hauteur de l’arbre de décision. MPSI Option info Raisonner avec des arbres 8 / 28 Arbre de décision Exemple d’exécution sur t = [|5; 1; 3; 2|]: t.(0) > t.(1) t.(0) > t.(2) t.(1) > t.(2) t.(0) > t.(3) t.(2) > t.(3) t.(1) > t.(3) t.(2) > t.(3) t.(0) t.(2) t.(1) t.(2) t.(3) t.(3) t.(3) t.(3) Complexité dans le meilleur des cas = profondeur minimum d’une feuille. MPSI Option info Raisonner avec des arbres 9 / 28 Arbre de décision Exemple d’exécution sur t = [|5; 1; 3; 2|]: t.(0) > t.(1) t.(0) > t.(2) t.(1) > t.(2) t.(0) > t.(3) t.(2) > t.(3) t.(1) > t.(3) t.(2) > t.(3) t.(0) t.(2) t.(1) t.(2) t.(3) t.(3) t.(3) t.(3) Complexité en moyenne = profondeur moyenne des feuilles. MPSI Option info Raisonner avec des arbres 10 / 28 Arbre de décision Nous avons montré qu’un arbre de décision d’un algo. qui calcule un minimum dans un tableau de taille n a une hauteur ≥ n − 1. Et même mieux: que toutes les feuilles sont de profondeur ≥ n − 1. MPSI Option info Raisonner avec des arbres 11 / 28 Minimum ET maximum Quel est le nombre optimal de comparaisons effectuées par un algo. calculant le minimum et maximum d’un tableau de taille n? MPSI Option info Raisonner avec des arbres 12 / 28 Minimum ET maximum Quel est le nombre optimal de comparaisons effectuées par un algo. calculant le minimum et maximum d’un tableau de taille n? Naïf: on calcule minimum, puis maximum en 2(n − 1) comparaisons. MPSI Option info Raisonner avec des arbres 12 / 28 Minimum ET maximum Quel est le nombre optimal de comparaisons effectuées par un algo. calculant le minimum et maximum d’un tableau de taille n? Naïf: on calcule minimum, puis maximum en 2(n − 1) comparaisons. Mieux: on conserve le minimum mini et maximum maxi vu jusqu’à présent, on regarde les éléments par paires (a, b), qu’on compare (disons a < b), puis on compare a avec mini et b avec maxi. MPSI Option info Raisonner avec des arbres 12 / 28 Minimum ET maximum Nombre de comparaisons: MPSI Option info Raisonner avec des arbres 13 / 28 Minimum ET maximum Nombre de comparaisons: b 3n 2 c. On peut montrer qu’on ne peut pas faire mieux: exercice de vacances. MPSI Option info Raisonner avec des arbres 13 / 28 Trouver le 2ème minimum On veut maintenant trouver le 2ème plus petit élément d’un tableau de taille n. Combien faut-il de comparaisons? MPSI Option info Raisonner avec des arbres 14 / 28 Trouver le 2ème minimum On veut maintenant trouver le 2ème plus petit élément d’un tableau de taille n. Combien faut-il de comparaisons? (1ère idée) utiliser un tri en Θ(n log(n)), bof. MPSI Option info Raisonner avec des arbres 14 / 28 Trouver le 2ème minimum On veut maintenant trouver le 2ème plus petit élément d’un tableau de taille n. Combien faut-il de comparaisons? (1ère idée) utiliser un tri en Θ(n log(n)), bof. (2ème idée) parcourir le tableau en stockant le minimum et le deuxième minimum vu jusqu’à présent, en 2(n − 1). MPSI Option info Raisonner avec des arbres 14 / 28 Trouver le 2ème minimum On veut maintenant trouver le 2ème plus petit élément d’un tableau de taille n. Combien faut-il de comparaisons? (1ère idée) utiliser un tri en Θ(n log(n)), bof. (2ème idée) parcourir le tableau en stockant le minimum et le deuxième minimum vu jusqu’à présent, en 2(n − 1). (3ème idée) d’abord calculer le minimum, de la façon suivante: comparer les éléments par paire, puis comparer les d n2 e éléments minimum par paire, ..., jusqu’à obtenir le minimum. MPSI Option info Raisonner avec des arbres 14 / 28 Trouver le 2ème minimum 1 3 1 4 5 3 4 8 1 3 7 2 1 9 2 t = [|5; 4; 8; 3; 7; 1; 9; 2|] MPSI Option info Raisonner avec des arbres 15 / 28 Trouver le 2ème minimum 1 3 1 4 5 3 4 8 1 3 7 2 1 9 2 t = [|5; 4; 8; 3; 7; 1; 9; 2|] C’est un arbre binaire «presque» complet (il peut y avoir 2p − 1 sommets de profondeur p). MPSI Option info Raisonner avec des arbres 15 / 28 Trouver le 2ème minimum 1 3 1 4 5 3 4 8 1 3 7 2 1 9 2 t = [|5; 4; 8; 3; 7; 1; 9; 2|] MPSI Option info Raisonner avec des arbres 16 / 28 Trouver le 2ème minimum 1 3 1 4 5 3 4 8 1 3 7 2 1 9 2 t = [|5; 4; 8; 3; 7; 1; 9; 2|] Le nombre de comparaisons effectuées est: MPSI Option info Raisonner avec des arbres 16 / 28 Trouver le 2ème minimum 1 3 1 4 5 3 4 8 1 3 7 2 1 9 2 t = [|5; 4; 8; 3; 7; 1; 9; 2|] Le nombre de comparaisons effectuées est: nb de noeuds = nb feuilles - 1 = n − 1. MPSI Option info Raisonner avec des arbres 16 / 28 Trouver le 2ème minimum Le 2ème minimum a forcément MPSI Option info Raisonner avec des arbres 17 / 28 Trouver le 2ème minimum Le 2ème minimum a forcément été comparé au minimum m. Il suffit dont de trouver le minimum parmi les éléments ayant été comparé à m. MPSI Option info Raisonner avec des arbres 17 / 28 Trouver le 2ème minimum Le 2ème minimum a forcément été comparé au minimum m. Il suffit dont de trouver le minimum parmi les éléments ayant été comparé à m. Le nombre d’éléments comparés à m est égal à MPSI Option info Raisonner avec des arbres 17 / 28 Trouver le 2ème minimum Le 2ème minimum a forcément été comparé au minimum m. Il suffit dont de trouver le minimum parmi les éléments ayant été comparé à m. Le nombre d’éléments comparés à m est égal à la hauteur de m dans l’arbre précédent: MPSI Option info Raisonner avec des arbres 17 / 28 Trouver le 2ème minimum Le 2ème minimum a forcément été comparé au minimum m. Il suffit dont de trouver le minimum parmi les éléments ayant été comparé à m. Le nombre d’éléments comparés à m est égal à la hauteur de m dans l’arbre précédent: dlog2 (n)e MPSI Option info Raisonner avec des arbres 17 / 28 Trouver le 2ème minimum Le 2ème minimum a forcément été comparé au minimum m. Il suffit dont de trouver le minimum parmi les éléments ayant été comparé à m. Le nombre d’éléments comparés à m est égal à la hauteur de m dans l’arbre précédent: dlog2 (n)e L’algorithme total effectue donc n + dlog2 (n)e − 2 comparaisons. Exercice: le programmer. MPSI Option info Raisonner avec des arbres 17 / 28 Trouver le kème plus petit élément Il existe un algorithme (compliqué) en Θ(n) comparaisons calculant le kème plus petit élément dans un tableau de n éléments. Il utiliser un partitionnement similaire au tri rapide (méthode diviser pour régner). MPSI Option info Raisonner avec des arbres 18 / 28 Complexité des tris 1 Tri fusion: MPSI Option info Raisonner avec des arbres 19 / 28 Complexité des tris 1 Tri fusion: Θ(n log(n)) 2 Tri à bulles: MPSI Option info Raisonner avec des arbres 19 / 28 Complexité des tris 1 Tri fusion: Θ(n log(n)) 2 Tri à bulles: Θ(n2 ) 3 Tri rapide: MPSI Option info Raisonner avec des arbres 19 / 28 Complexité des tris 1 Tri fusion: Θ(n log(n)) 2 Tri à bulles: Θ(n2 ) 3 Tri rapide: O(n2 ) dans le pire des cas mais Θ(n log(n)) en moyenne. Peut-on faire mieux que Θ(n log(n)), dans le pire des cas? MPSI Option info Raisonner avec des arbres 19 / 28 Complexité des tris Considérons un algorithme triant un tableau de taille n en effectuant des comparaisons et regardons son arbre de décision. MPSI Option info Raisonner avec des arbres 20 / 28 Complexité des tris Considérons un algorithme triant un tableau de taille n en effectuant des comparaisons et regardons son arbre de décision. Une feuille correspond à MPSI Option info Raisonner avec des arbres 20 / 28 Complexité des tris Considérons un algorithme triant un tableau de taille n en effectuant des comparaisons et regardons son arbre de décision. Une feuille correspond à un résultat de l’algorithme. Combien a t-il de feuilles? MPSI Option info Raisonner avec des arbres 20 / 28 Complexité des tris Considérons un algorithme triant un tableau de taille n en effectuant des comparaisons et regardons son arbre de décision. Une feuille correspond à un résultat de l’algorithme. Combien a t-il de feuilles? au moins n! (nombre de permutations) MPSI Option info Raisonner avec des arbres 20 / 28 Complexité des tris Considérons un algorithme triant un tableau de taille n en effectuant des comparaisons et regardons son arbre de décision. Une feuille correspond à un résultat de l’algorithme. Combien a t-il de feuilles? au moins n! (nombre de permutations) Donc h ≥ log2 (f ) ≥ log2 (n!) MPSI Option info Raisonner avec des arbres 20 / 28 Complexité des tris Considérons un algorithme triant un tableau de taille n en effectuant des comparaisons et regardons son arbre de décision. Une feuille correspond à un résultat de l’algorithme. Combien a t-il de feuilles? au moins n! (nombre de permutations) Donc h ≥ log2 (f ) ≥ log2 (n!) ∼ n log2 (n) . MPSI Option info Raisonner avec des arbres 20 / 28 Complexité des tris Considérons un algorithme triant un tableau de taille n en effectuant des comparaisons et regardons son arbre de décision. Une feuille correspond à un résultat de l’algorithme. Combien a t-il de feuilles? au moins n! (nombre de permutations) Donc h ≥ log2 (f ) ≥ log2 (n!) ∼ n log2 (n) . Conclusion: il n’est pas possible de trier un tableau de taille n en moins de n log2 (n) comparaisons, dans le pire des cas. MPSI Option info Raisonner avec des arbres 20 / 28 Complexité des tris Et quelle est la profondeur minimum d’une feuille d’un arbre de décision d’un algorithme de tri? MPSI Option info Raisonner avec des arbres 21 / 28 Complexité des tris Et quelle est la profondeur minimum d’une feuille d’un arbre de décision d’un algorithme de tri? n − 1: trier un tableau permet de trouver un minimum, et on a vu qu’on ne peut pas trouver un minimum en moins de n − 1 comparaisons. MPSI Option info Raisonner avec des arbres 21 / 28 Complexité des tris Et quelle est la profondeur minimum d’une feuille d’un arbre de décision d’un algorithme de tri? n − 1: trier un tableau permet de trouver un minimum, et on a vu qu’on ne peut pas trouver un minimum en moins de n − 1 comparaisons. De plus si le tableau est déjà trié alors l’algorithme peut se contenter de comparer les paires d’éléments consécutives pour s’assurer que le tableau est bien trié et le renvoyer. MPSI Option info Raisonner avec des arbres 21 / 28 Tri par dénombrement Si on dispose d’hypothèses supplémentaires sur le tableau t en entrée, ou si l’algorithme effectue autre chose que des comparaisons pour réaliser le tri, le minorant n log2 (n) ne s’applique plus. MPSI Option info Raisonner avec des arbres 22 / 28 Tri par dénombrement Si on dispose d’hypothèses supplémentaires sur le tableau t en entrée, ou si l’algorithme effectue autre chose que des comparaisons pour réaliser le tri, le minorant n log2 (n) ne s’applique plus. Ex: le tri par dénombrement trie un tableau dont les entrées sont des entiers entre 0 et k en complexité Θ(n + k). MPSI Option info Raisonner avec des arbres 22 / 28 Complexité en moyenne des tris Le minorant Θ(n log2 (n)) a été établi pour la complexité dans le pire des cas. Est-ce que l’on peut trier avec une meilleur complexité en moyenne? MPSI Option info Raisonner avec des arbres 23 / 28 Complexité en moyenne des tris Le minorant Θ(n log2 (n)) a été établi pour la complexité dans le pire des cas. Est-ce que l’on peut trier avec une meilleur complexité en moyenne? Définition Soit E l’ensemble des entrées possibles pour un algorithme A. Si C (e) est le nombre d’opérations réalisées par A sur e ∈ E , alors la complexité en moyenne de A est: P C (e) |E | e∈E MPSI Option info Raisonner avec des arbres 23 / 28 Complexité en moyenne des tris Il faudrait donc minorer la somme des profondeurs des feuilles d’un arbre de décision pour un tri. MPSI Option info Raisonner avec des arbres 24 / 28 Complexité en moyenne des tris Il faudrait donc minorer la somme des profondeurs des feuilles d’un arbre de décision pour un tri. Soit d(k) la valeur minimum de cette somme pour un arbre de décision à k feuilles. MPSI Option info Raisonner avec des arbres 24 / 28 Complexité en moyenne des tris Il faudrait donc minorer la somme des profondeurs des feuilles d’un arbre de décision pour un tri. Soit d(k) la valeur minimum de cette somme pour un arbre de décision à k feuilles. d(k) = min {d(i) + d(k − i) + k} 1≤i<k MPSI Option info Raisonner avec des arbres 24 / 28 Complexité en moyenne des tris d(k) = min {d(i) + d(k − i) + k} 1≤i<k Supposons, par récurrence, qu’il existe une constante A telle que: d(i) ≥ Ai log2 (i), ∀i < k MPSI Option info Raisonner avec des arbres 25 / 28 Complexité en moyenne des tris d(k) = min {d(i) + d(k − i) + k} 1≤i<k Supposons, par récurrence, qu’il existe une constante A telle que: d(i) ≥ Ai log2 (i), ∀i < k Hérédité: d(k) = min {d(i) + d(k − i) + k} 1≤i<k d(k) ≥ min {Ai log2 (i) + A(k − i) log2 (k − i) + k} 1≤i<k MPSI Option info Raisonner avec des arbres 25 / 28 Complexité en moyenne des tris d(k) = min {d(i) + d(k − i) + k} 1≤i<k Supposons, par récurrence, qu’il existe une constante A telle que: d(i) ≥ Ai log2 (i), ∀i < k Hérédité: d(k) = min {d(i) + d(k − i) + k} 1≤i<k d(k) ≥ min {Ai log2 (i) + A(k − i) log2 (k − i) + k} 1≤i<k k k k k d(k) ≥ A log2 ( ) + A(k − ) log2 (k − ) + k 2 2 2 2 MPSI Option info Raisonner avec des arbres 25 / 28 Complexité en moyenne des tris k d(k) ≥ Ak log2 ( ) + k = Ak log2 (k) + k(1 − A) 2 MPSI Option info Raisonner avec des arbres 26 / 28 Complexité en moyenne des tris k d(k) ≥ Ak log2 ( ) + k = Ak log2 (k) + k(1 − A) 2 Donc si A < 1, l’hérédité fonctionne. L’initialisation est évidente donc on a bien: d(k) ≥ Ak log2 (k), ∀k ∈ N∗ MPSI Option info Raisonner avec des arbres 26 / 28 Complexité en moyenne des tris Un arbre de décision pour un tri a n! feuilles, donc la profondeur moyenne de ses feuilles est au moins: MPSI Option info Raisonner avec des arbres 27 / 28 Complexité en moyenne des tris Un arbre de décision pour un tri a n! feuilles, donc la profondeur moyenne de ses feuilles est au moins: d(n!) An! log2 (n!) ≥ ∼ An log2 (n) n! n! MPSI Option info Raisonner avec des arbres 27 / 28 Complexité en moyenne des tris Un arbre de décision pour un tri a n! feuilles, donc la profondeur moyenne de ses feuilles est au moins: d(n!) An! log2 (n!) ≥ ∼ An log2 (n) n! n! Conclusion: il n’est pas possible de trier un tableau de taille n avec moins de n log2 (n) comparaisons en moyenne. MPSI Option info Raisonner avec des arbres 27 / 28 Pour ne pas vous ennuyer pendant l’été... Livres: 1 Algorithmique, de Cormen et al. 2 Les clés pour l’Info : ENS-Agrégation, de Mansuy, Vie, Belghiti. 3 Algorithmique, de Quercia (aussi sur le net). Sites de cours: 1 http://info-llg.fr/ 2 http://lorenzi.marc.pagesperso-orange.fr/optionInfo/optinfo.html 3 http://mathprepa.fr/caml-option-informatique-mpsi-mp/ 4 http://pauillac.inria.fr/˜cheno/ Sites de problèmes: 1 http://www.france-ioi.org/algo/index.php 2 https://projecteuler.net/ MPSI Option info Raisonner avec des arbres 28 / 28