Je répondais juste à une question sur les différentes approches pour choisir la partition dans une implémentation quicksort et j'ai trouvé une question à laquelle je ne sais honnêtement pas comment répondre. C'est un peu lourd en maths, et ce n'est peut-être pas le bon site pour poser cette question, donc si elle doit être déplacée, faites-le moi savoir et je serai heureux de la transférer ailleurs.
Il est bien connu qu'une implémentation de quicksort qui choisit ses pivots uniformément au hasard finira par s'exécuter en temps O(n lg n) (il existe une belle preuve de cela sur Wikipédia ). Cependant, en raison du coût de la génération de nombres aléatoires, de nombreuses implémentations de quicksort ne choisissent pas les pivots de manière aléatoire, mais s'appuient plutôt sur une approche de type "médiane des trois" dans laquelle trois éléments sont choisis de manière déterministe et parmi lesquels la médiane est choisie comme pivot. Cette approche est connue pour dégénérer en O(n 2 ) dans le pire des cas (voir ce grand papier sur la façon de générer ces entrées dans le pire des cas, par exemple).
Maintenant, supposons que nous moissonneuse-batteuse ces deux approches en choisissant trois éléments aléatoires dans la séquence et en utilisant leur médiane comme choix du pivot. Je sais que cela garantit également un temps d'exécution moyen de O(n lg n) en utilisant une preuve légèrement différente de celle pour le quicksort aléatoire régulier. Cependant, je n'ai aucune idée de ce qu'est le facteur constant devant le terme n lg n dans cette implémentation particulière du quicksort. Pour le tri rapide aléatoire régulier, Wikipedia indique que le temps d'exécution réel du tri rapide aléatoire nécessite au maximum 1,39 n lg n comparaisons (en utilisant lg comme logarithme binaire).
Ma question est la suivante : quelqu'un connaît-il un moyen de dériver le facteur constant pour le nombre de comparaisons effectuées en utilisant un quicksort aléatoire "median-of-three" ? ? Si nous allons encore plus généralement, existe-t-il une expression pour le facteur constant sur quicksort en utilisant une approche aléatoire de la médiane de k ? Je suis curieux parce que je pense qu'il serait fascinant de voir s'il y a un "sweet spot" de cette approche qui fait moins de comparaisons que d'autres implémentations aléatoires de quicksort. Je veux dire, ne serait-il pas cool de pouvoir dire que le quicksort aléatoire avec un choix de pivot médian-de-six aléatoire fait le moins de comparaisons ? Ou être capable de dire de manière concluante que vous devriez juste choisir un élément pivot au hasard ?