Supposons que nous voulons trier une liste de n nombres réels. Supposons que l'on nous donne une boîte noire qui peut trier √ nombres réels instantanément. Quel avantage pouvons-nous gagner en utilisant cette boîte noire?
Par exemple, pouvons-nous trier les nombres avec seulement appels à la boîte noire? Le meilleur algorithme que j'ai trouvé utilisenappels à la boîte noire. Mais je n'ai pas pu l'améliorer davantage. Voici mon algorithme qui est similaire au tri par fusion:
Première partition de la liste en √ listess1,s2,. . . ,s √ avec environ√taille n . Utilisez ensuite √ appelle la boîte noire pour trier ces listes. Enfin, fusionnez les listes triées à l'aide de la boîte noire comme suit:
Mettez les plus petits éléments des listes dans une nouvelle liste , puis appelez la boîte noire pour la trier. Le nombre de L [ 1 ] (premier et plus petit élément de L ) sera le plus petit nombre dans S . Nous pouvons le mettre à la première place de la liste de sortie.
En supposant que l'élément a été choisi parmi les s j , on remplace L [ 1 ] avec le deuxième plus petit élément de la liste de tri de j , et d' exécuter à nouveau la boîte noire sur elle pour calculer le deuxième plus petit élément de S .
Nous continuons jusqu'à ce que tous les éléments soient triés. Le nombre total d'appels en boîte noire pour cette partie sera . Par conséquent, dans l'ensemble, le nombre total d'appels seran.
D'un autre côté, il semble que nous devrions pouvoir obtenir une borne inférieure en utilisant la borne inférieure sur les comparaisons de nombres nécessaires pour le tri comme suit: Nous pouvons implémenter la boîte noire en utilisant comparaisons. Si nous pouvons résoudre le problème aveco( √appels à la boîte noire et en fusionnant en temps linéaire on peut triernnombres réels avec descomparaisonso(nlgn)ce qui est impossible.
Je suppose que nous pourrions prouver que est une limite inférieure pour le nombre d'appels à la boîte noire, car de nombreuses comparaisons utilisant dans la boîte noire seraient partagées et sont donc racontées dans notre argument.
MISE À JOUR: Comme le suggèrent les autres articles, un est également réalisable.
Réponses:
Il est possible de trier avec appels à la boîte noire et aucune comparaison.O ( n--√Journaln )
Considérons d'abord le problème de partitionnement équilibré suivant: étant donné éléments A [ 1 .. m ] (où √m A [ 1 .. m ] ), divisez-les en deux groupes, le plus petit de taille au moins environm/4, de sorte que tous les éléments du premier groupe soient plus petits que tous les éléments du deuxième groupe. Cela peut être fait avecO(m/ √n--√≤ m ≤ n m / 4 appels à la boîte noire. (Je le décrirai plus tard.) Utilisez ensuite quicksort avec cet algorithme de partitionnement:O ( m / n--√)
En supposant que chaque étape de partition prend appels à la boîte noire, l'algorithme ci-dessus, étant donné l'entréeA[1 ..n], feraO( √O(m/n−−√) A[1..n] appelle la boîte noire, car l'arbre de récursivité a la profondeur O ( log n ) et chaque niveau de l'arbre a un total de O ( n / √O(n−−√logn) O(logn) appels à la boîte noire.O(n/n−−√)=O(n−−√)
Effectuez l'étape de partitionnement comme suit:
la source
Je pense que votre question a été abordée dans l'article de Beigel et Gill " Tri d'objets n à l'aide de k-sorter " de 1990 et le résumé de l'article dit tout:
la source
la source