Article de reference

Algorithme de sélection

En informatique , un algorithme de sélection est un algorithme permettant de trouver la i-ème plus petite valeur dans une collection de valeurs ordonnables, telles que des nombr...

Cet article est intéressant. Cliquez ici pour en savoir plus.
informatique , un algorithme de sélection est un algorithme permettant de trouver la i-ème plus petite valeur dans une collection de valeurs ordonnables, telles que des nombres. La valeur trouvée est appelée statistique d'ordre minimum , de la médiane et du maximum de la collection. Parmi les algorithmes de sélection, on trouve quickselect et l' algorithme de la médiane des médianes . Appliqués à une collection de valeurs, ces algorithmes ont une complexité temporelle linéaire , notée O(n) . Pour des données déjà structurées, des algorithmes plus rapides peuvent exister ; dans un cas extrême, la sélection dans un tableau déjà trié s'effectue en

Algorithmes

Tri et sélection de tas

L'algorithme de base pour sélectionner la

Le temps d'exécution de cette méthode est principalement dû à l'étape de tri, qui nécessite un temps d'exécution important avec un tri par comparaisonde tri d'entiers peuvent être utilisés, ils sont généralement plus lents que le temps linéaire pouvant être atteint avec des algorithmes de sélection spécialisés. Néanmoins, la simplicité de cette approche la rend attrayante, notamment lorsqu'une routine de tri hautement optimisée est fournie par la bibliothèque d'exécution, contrairement à l'algorithme de sélection. Pour des entrées de taille modérée, le tri peut être plus rapide que les algorithmes de sélection non aléatoires, en raison des facteurs constants plus faibles dans son

Pour un algorithme de tri qui génère un élément à la fois, comme le tri par sélection , le parcours peut être effectué simultanément au tri, et ce dernier peut être interrompu une fois le tournoi à élimination directe , où les équipes perdantes s'affrontent lors d'un mini-tournoi pour déterminer la deuxième place, illustre cette tri par tas donne l' algorithme de sélection par tas , capable de sélectionner la

Pivotement

De nombreuses méthodes de sélection reposent sur le choix d'un élément « pivot » spécifique dans l'ensemble d'entrée, puis sur la comparaison avec cet élément pour diviser les valeurs restantes en deux sous-ensembles : l'ensemble des éléments inférieurs au pivot et l'ensemble des éléments supérieurs au pivot. L'algorithme peut alors déterminer la

Comme pour l'algorithme de tri rapide par pivot , la partition de l'entrée en ensembles peut être réalisée en créant de nouvelles collections pour ces ensembles, ou par une méthode partitionnant directement une liste ou un tableau. Les détails varient selon la

  • Si le pivot était exactement à la médiane de l'entrée, chaque appel récursif renverrait au maximum deux fois moins de valeurs que l'appel précédent, et le nombre total d'itérations augmenterait de géométrique
  • Quickselect choisit le pivot de manière aléatoire et uniforme parmi les valeurs d'entrée. Il peut être décrit comme un algorithme d'élagage et de recherche , une variante de quicksort , avec la même stratégie de pivotement, mais là où quicksort effectue deux appels récursifs pour trier les deux sous-collections temps d'exécution moyen
  • L' algorithme de Floyd-Rivest , une variante de quickselect, choisit un pivot en échantillonnant aléatoirement un sous-ensemble de valeurs de données, pour une générateur de nombres véritablement aléatoires , il a été prouvé qu'une version de l'algorithme de Floyd-Rivest utilisant un générateur de nombres pseudo-aléatoires initialisé avec seulement un nombre logarithmique de bits véritablement aléatoires s'exécute en temps linéaire avec une probabilité élevée.
Visualisation du choix du pivot pour la méthode de la médiane des médianes . Chaque ensemble de cinq éléments est représenté par une colonne de points, triés par ordre croissant de haut en bas. Si leurs médianes (points verts et violets de la rangée centrale) sont triées par ordre croissant de gauche à droite, et que la médiane des médianes est choisie comme pivot, alors les éléments du quadrant supérieur gauche seront inférieurs au pivot, et ceux du quadrant inférieur droit seront supérieurs, ce qui indique que le pivot permet d'éliminer de nombreux éléments.
  • La méthode de la médiane des médianes partitionne l'entrée en ensembles de cinq éléments et utilise une autre méthode non récursive pour trouver la médiane de chacun de ces ensembles en temps constant par ensemble. Elle s'appelle ensuite récursivement pour trouver la médiane de ces médianes. L'utilisation de la médiane des médianes ainsi obtenue comme pivot produit une partition avec diviser pour régner qui ne se divise pas en deux
  • Des algorithmes hybrides tels que introselect peuvent être utilisés pour atteindre les performances pratiques de quickselect avec un repli sur les médianes des médianes garantissant

usines

Les algorithmes de sélection déterministes nécessitant le plus petit nombre de comparaisons connu, pour des valeurs très éloignées de Arnold Schönhage , Mike Paterson et Nick Pippenger des ordres partiels de certains types spécifiés, sur de petits sous-ensembles de valeurs d'entrée, en combinant des ordres partiels plus petits par comparaison. À titre d'exemple très simple, une fabrique peut prendre en entrée une séquence d'ordres partiels à un seul élément, comparer les éléments de ces ordres par paires et produire en sortie une séquence d'ensembles totalement ordonnés à deux éléments. Les éléments utilisés comme entrées de cette fabrique peuvent être soit des valeurs d'entrée n'ayant encore été comparées, soit des valeurs « inutilisées » produites par d'autres fabriques. L'objectif d'un algorithme de type « usine » est de combiner différentes usines, les sorties de certaines usines alimentant les entrées d'autres, afin d'obtenir un ordre partiel dans lequel un élément (le

Algorithmes parallèles

Les algorithmes parallèles de sélection sont étudiés depuis 1975, date à laquelle Leslie Valiant a introduit le modèle d'arbre de comparaison parallèle pour analyser ces algorithmes. Il a démontré que, dans ce modèle, la sélection par un nombre linéaire de comparaisons nécessite des étapes parallèles, même pour sélectionner le minimum ou de RAM parallèle plus réaliste , utilisant un accès mémoire exclusif en lecture et en écriture, la sélection peut être effectuée en un temps O(n) processeurs , ce qui est optimal à la fois en termes de temps et de nombre de

Structures de données sous-linéaires

Lorsque les données sont déjà organisées dans une structure de données , il est possible d'effectuer une sélection en un temps sous-linéaire par rapport au nombre de valeurs. À titre d'exemple simple, pour des données déjà triées dans un tableau, la sélection du

La sélection de données dans un tas binaire prend Ce temps est indépendant de la taille du tas et plus rapide que la limite de temps obtenue par la recherche du meilleur d'abordoptimisation combinatoire , comme la recherche des plus courts chemins dans un graphe pondéré, en définissant un espace d'états des solutions sous la forme d'un arbre ordonné de type tas implicite , puis en appliquant cet algorithme de sélection à cet de type file de priorité associée au tas, améliorant le temps d'extraction du i logarithme itéré

Pour un ensemble de données subissant des insertions et des suppressions dynamiques, l' arbre de statistiques d'ordre enrichit une structure d'arbre binaire de recherche auto-équilibrée d'une quantité constante d'informations supplémentaires par nœud, permettant ainsi d'effectuer les insertions, les suppressions et les requêtes de sélection demandant le Un algorithme de flux avec une complexité mémoire sous-linéaire en n et n ne peut pas résoudre exactement les requêtes de sélection pour des données dynamiques, mais l' algorithme de comptage-minimum permet de les résoudre approximativement, en trouvant une valeur dont la position dans l'ordre des éléments (si elle y était ajoutée) serait à un pas près de n , pour un algorithme dont la taille est à un facteur logarithmique près de n .

limites inférieures

Le temps d'exécution des algorithmes de sélection décrits ci-dessus est nécessaire, car un algorithme capable de traiter des entrées dans un ordre arbitraire doit consacrer ce temps à l'examen de toutes ses entrées. Si l'une de ses valeurs d'entrée n'est pas comparée, il se peut que cette valeur soit celle qui aurait dû être sélectionnée, et l'algorithme risque alors de produire une réponse incorrecte. Au-delà de ce simple argument, de nombreuses recherches ont porté sur le nombre exact de comparaisons nécessaires à la sélection, tant dans le cas aléatoire que déterministe.

La sélection de la valeur minimale nécessite des comparaisons, car les valeurs non retenues doivent chacune avoir été jugées non minimales, étant les plus grandes dans au moins une comparaison, et deux de ces valeurs ne peuvent être les plus grandes dans la même comparaison. Le même raisonnement s'applique symétriquement à la sélection de la

Le cas suivant, le plus simple, consiste à sélectionner la deuxième plus petite valeur. Après plusieurs tentatives infructueuses, la première borne inférieure précise pour ce cas a été publiée en 1964 par le mathématicien soviétique Sergueï Kislitsyn . On peut le démontrer en observant que la sélection de la deuxième plus petite valeur nécessite également de distinguer la plus petite valeur des autres, et en considérant le nombre de comparaisons impliquant la plus petite valeur effectuées par un algorithme pour ce problème. Chaque élément comparé à la plus petite valeur est un candidat pour la deuxième plus petite valeur, et parmi ces valeurs, il faut qu'elles soient supérieures à une autre valeur lors d'une seconde comparaison pour les éliminer. Avec des valeurs supérieures dans au moins une comparaison, et des valeurs supérieures dans au moins deux comparaisons, il y a au total au moins comparaisons. Un argument adverse , dans lequel le résultat de chaque comparaison est choisi de manière à maximiser (sous réserve de cohérence avec au moins un ordre possible) plutôt que par les valeurs numériques des éléments donnés, montre qu'il est possible de contraindre à être algorithme aléatoire avec un nombre moyen de

Plus généralement, la sélection du les permutations possibles des le principe de Yao , il s'applique également au nombre moyen de comparaisons pour un algorithme randomisé sur son entrée la plus défavorable

Pour les algorithmes déterministes, il a été démontré que la sélection du fonction d'entropie binaire

Nombre exact de comparaisons

Calcul de la médiane de cinq valeurs par six comparaisons. Chaque étape est représentée par des segments de droite jaunes, et par un diagramme de Hasse bleu illustrant les relations d'ordre établies (plus petit = inférieur, plus grand = supérieur). Les éléments rouges étant supérieurs à trois autres, ils ne peuvent constituer la médiane. La plus grande des deux valeurs de la dernière comparaison est la médiane.

Knuth fournit le triangle de nombres suivant, récapitulant les paires de valeurs pour lesquelles le nombre exact de comparaisons nécessaires à un algorithme de sélection optimal est connu. La

Milton Sobel , apparentée à heapselect, qui trouve la plus petite valeur à l'aide d'un tournoi à élimination directe, puis utilise de manière itérative un tournoi plus petit parmi les valeurs éliminées par les vainqueurs des tournois précédents afin de trouver les valeurs suivantes jusqu'à atteindre la

Soutien linguistique

Très peu de langages intègrent la sélection générale, bien que beaucoup offrent des fonctionnalités pour trouver le plus petit ou le plus grand élément d'une liste. Les bibliothèques standard de C++ et de Rust constituent des exceptions notables . La bibliothèque de modèles standard (STL ) de C++ fournit une nth_elementméthode générique garantissant un temps d'exécution linéaire. La bibliothèque standard de Rust propose plusieurs variantes de la select_nth_unstablefonction membre pour le slicetype de données. Ces variantes garantissent toutes un temps d'exécution linéaire pour toutes les entrées.

La bibliothèque standard de Pythonheapq.nsmallest inclut des heapq.nlargestfonctions permettant de retourner les éléments les plus petits ou les plus grands d'une collection, triée par ordre croissant. L'implémentation utilise un tas binaire , limité à un certain nombre d'éléments, initialisé avec le premier élément de la collection. Ensuite, chaque élément suivant de la collection peut remplacer l'élément le plus grand ou le plus petit du tas s'il est respectivement plus petit ou plus grand. L'utilisation de la mémoire par cet algorithme est inférieure à celle de `heapselect` (le premier ne stocke en mémoire que des éléments à la fois, tandis que le second nécessite de charger l'ensemble des données en mémoire). Le temps d'exécution dépend de l'ordre des données. Il est optimal pour des données déjà triées, et maximal pour des données triées en ordre inverse. En moyenne, les mises à jour du tas sont peu nombreuses et la plupart des éléments d'entrée sont traités en une seule comparaison. Par exemple, extraire les 100 plus grandes ou plus petites valeurs parmi 10 000 000 d'entrées aléatoires nécessite en moyenne 10 009 401 comparaisons.

Depuis 2017, Matlab inclut maxk()des mink()fonctions qui renvoient les valeurs maximales (minimales) d'un vecteur ainsi que leurs indices. La documentation de Matlab ne précise ni l'algorithme utilisé par ces fonctions ni leur

Histoire

L'algorithme Quickselect a été présenté sans analyse par Tony Hoare 42 ] et analysé pour la première fois dans un rapport technique de 1971 par Donald Knuth de la médiane des médianes , publiée en 1973 par Manuel Blum , Robert W. Floyd , Vaughan Pratt , Ron Rivest et Robert Tarjan . Ces auteurs font remonter la formulation du problème de sélection aux travaux de Charles L. Dodgson (plus connu sous le nom de Lewis Carroll ), qui, en 1883, a souligné que la conception habituelle des tournois sportifs à élimination directe ne garantit pas que le deuxième meilleur joueur remporte la deuxième place , et aux travaux d' Hugo Steinhaus vers 1930, qui a poursuivi cette réflexion en proposant une conception de tournoi permettant d'assurer cette garantie, avec un nombre minimal de matchs joués (c'est-à-dire de 5 ] .