Que sait-on des structures de données qui peuvent maintenir une séquence d'éléments soumis aux deux opérations suivantes?
- Appuyez sur (x): ajoutez x à la fin de la séquence et renvoyez un identifiant pour sa position dans la séquence
- Extraire (S): étant donné un ensemble d'identificateurs non ordonné, supprimer les éléments dans ces positions de la séquence et renvoyer une liste des éléments supprimés dans l'ordre de séquence
Si vous le souhaitez, vous pouvez considérer cela comme une pile ou une file d'attente avec une opération de fractionnement qui la divise en deux piles: l'opération d'extraction peut être utilisée pour implémenter une opération de pop ou de mise en file d'attente, et la séquence d'extraits d'éléments pourrait également être mise à nouveau dans une autre pile ou file d'attente.
Ce que je sais déjà: on peut maintenir la séquence comme une liste doublement liée, où chaque identifiant n'est qu'un pointeur vers un nœud de liste liée, et chaque nœud stocke également un numéro de position qui permet des comparaisons rapides entre les positions de deux éléments non liés dans la séquence. Il n'est pas difficile de mettre à jour les numéros de position à mesure que la structure de données progresse afin qu'ils soient tous des entiers positifs de valeur maximale , où est le nombre actuel d'éléments dans la liste. Avec cette structure de données, la seule partie difficile d'une opération d'extraction consiste à trier les éléments extraits par leur numéro de position. Une extraction de éléments prend le temps aléatoire attendu en utilisant l'algorithme de tri d'entiers de Han et Thorup de FOCS 2002, par exemple, et une opération de poussée prend un temps constant.
Ce que je ne sais pas: est-il possible de gérer l'extrait en temps et de pousser en temps constant? Existe-t-il de la littérature sur ce problème? Est-ce aussi difficile que le tri entier?
Motivation: c'est l'étape de base nécessaire pour commander les articles dans l'algorithme d'ordonnancement Coffman-Graham, qui a également des applications dans le dessin de graphiques. La partie difficile de Coffman-Graham est un ordre topologique lexicographique. Cela peut être fait en maintenant, pour chaque degré différent, une séquence des sommets avec ce degré dans le sous-graphique induit par les sommets restants. Ensuite, supprimez à plusieurs reprises le premier sommet de la séquence des sommets zéro degré et ajoutez-le à l'ordre topologique; extraire les voisins de des degrés auxquels ils appartenaient auparavant et les pousser sur la séquence pour le degré plus petit suivant. Donc un le temps nécessaire aux opérations d'extraction dans cette structure de données conduirait à une implémentation temporelle linéaire de l'algorithme Coffman-Graham.
Depuis que j'ai posé cette question à l'origine, j'ai trouvé un article de Sethi de 1976 qui permet à l'algorithme Coffman – Graham d'être implémenté en temps linéaire, et je l' ai inclus dans mon article Wikipedia sur l'algorithme Coffman – Graham , de sorte que la motivation d'origine est moins significative. Je suis toujours curieux de savoir quelle est la réponse, cependant.
la source
Réponses:
Je pense que c'est au moins aussi difficile que de trier un ensemble d'entiers avec des "conseils aléatoires" de taille polynomiale en . Par conseil aléatoire, je veux dire que pour tout il existe une distribution fixe (dépendant uniquement de ) sur des chaînes de taille poly ( ) et que notre algorithme (modélisé par une machine RAM) a un accès aléatoire à un échantillon unique de . est la structure de données (randomisée) après avoir poussé dans l'ordre, avec une table de hachage qui mappe les entiers aux identificateurs dans le temps attendu .S⊆[n] n n Dn n n Dn Dn [n] O(1)
Étant donné que la configuration, pour une instance du problème de tri d'entiers, nous pouvons émettre un extrait ( ) (en fait, nous avons besoin des identifiants de mais ce mappage peut être effectué en fois par élément en utilisant le table de hachage qui fait partie de l'avis) et l'entrée sera triée dans le temps nécessaire pour exécuter l'extraction.S⊆[n] S S O(1)
Ainsi, le message est que, à moins que certaines informations latérales "libres" qui ne dépendent que de la limite supérieure des entiers puissent faciliter le tri des entiers, l'extraction est aussi difficile que le tri des entiers.
Cela implique-t-il une relation entre les deux problèmes sans le modèle étrange? Cette notion de conseil aléatoire est-elle connue? C'est un peu comme un protocole MA, mais le message de Merlin n'est pas autorisé à dépendre de l'entrée et nous nous soucions du temps d'exécution d'Arthur.
la source