Quelqu'un connaît-il les algorithmes , espace linéaire, algorithmes de tri des nombres de Yijie Han ? Ce résultat apparaît dans un article assez court ( Tri déterministe en temps linéaire et en espace . J. Alg. 50: 96-105, 2004) qui regroupe essentiellement de nombreux résultats antérieurs, avec des adaptations. Mon problème est que c'est écrit d'une manière plutôt vague, sans entrer dans les détails. Il s’appuie largement sur des documents antérieurs, notamment un autre de Han ( Amélioration du tri des entiers rapides dans l’espace linéaire).O ( n log log n ). Information and Computation 170 (1): 81–94) écrit dans le même style. J'ai beaucoup de difficulté à comprendre ces deux documents, en particulier la manière dont ils adaptent et utilisent les résultats précédents. J'apprécierais toute aide.
Ceci est bien sûr trop large et vague pour être considéré comme une question appropriée, mais j'espère développer une discussion à travers plusieurs questions et réponses bien définies.
Pour commencer, voici ma première question précise. Dans la lemme 2 de l'info. Comp. papier, il existe un algorithme récursif de temps permettant de trouver le plus petit nombre entier dans un ensemble de petits nombres entiers emballés chacun dans des mots RAM. La description de l'algorithme ne mentionne pas comment le cas de base est traité. Dans ce cas, il est nécessaire de faire la sélection en temps . Comment cela peut-il être fait?n k k = O ( n ) O ( log k )
Réponses:
Je me demandais juste la même chose.
Heureusement, j'ai pu trouver un article de journal publié en 2011 qui explique tout cela; De plus, vous n'avez pas besoin d'un abonnement pour le visualiser: Analyse d'implémentation et de performance du tri d'arbres exponentiel
Je recommande de lire l'intégralité de l'article pour apprendre comment le mettre en œuvre et mieux comprendre la théorie sous-jacente. Il montre également comment les arbres exponentiels se comparent aux arbres à tri rapide et aux arbres binaires. Voici l'extrait pertinent lié à Han le temps, l' espace linéaire, entier algorithme de triO ( n logbûchen ) :
[6] Y. Han, Tri déterministe en temps linéaire et en espace linéaire O (n log log n), 34e STOC, 2002.
[8] A. Andersson, Tri rapide déterministe et recherche dans l'espace linéaire, Symposium IEEE sur les fondements de l'informatique, 1996.
la source
Je ne suis pas sûr de la réponse (je ne suis pas passé par le papier) mais je pense que cela devrait aider. Les nombres sont regroupés dans un seul mot, de sorte que les opérations sur un seul mot prennent un temps O (1). S'il y a, par exemple, k nombres de h bits, la taille des mots dépend de k, h, qui dépend également de la plage de nombres. Nous utilisons donc des techniques de réduction de plage qui peuvent réduire la plage de nombres de manière à ce que plusieurs nombres puissent tenir dans un seul mot. Ensuite, en créant les masques de bits appropriés, nous pouvons trouver des entiers plus grands distincts des plus courts en considérant deux mots à la fois. Cela peut être fait en un temps O (1). (Ontuition: pour cela, chaque numéro stocké dans word est associé à un bit de drapeau, puis nous soustrayons deux mots ... si le bit de drapeau disparaît, son nombre est plus petit).
De même, en utilisant ce qui précède, nous pouvons également trier tout mot contenant k nombres en temps O (log k) (tri bitonique).
Édition: Algorithme pour trier 2k nombres compris entre 0 et m-1 dans un mot où chaque nombre prend la taille L de = log (m + k) +2.
Répétez l'opération pour t = log k à 0.
Partie 1 - séparez le mot original Z en deux mots A et B.
B = Z- (Z & M).
Partie 2
M = M- (M décalé à gauche L-1 places).
MIN = (B & M) OU (A- (A & M))
MAX = (A & M) OU (B- (B & M))
Pour finir, ORing MAX et MIN nous renvoyons Z.
J'ai donné le croquis, j'espère que vous pourrez remplir les détails nécessaires requis.
la source