J'ai rêvé d'une structure de données, existe-t-elle?

27

Je n'ai pas réussi à trouver cette structure de données, mais je ne suis pas un expert dans le domaine.

La structure implémente un ensemble et est essentiellement un tableau d'éléments comparables avec un invariant. L'invariant est le suivant (défini récursivement):

Un tableau de longueur 1 est un tableau de fusion.

Un tableau de longueur 2 ^ n (pour n> 0) est un tableau de fusion ssi:

  • la première moitié est un tableau de fusion et la seconde moitié est vide ou
  • le premier tableau est plein et trié, et la seconde moitié est un tableau de fusion.

Notez que si le tableau est plein, il est trié.

Pour insérer un élément, nous avons deux cas:

  • Si la première moitié n'est pas pleine, insérez récursivement dans la première moitié.
  • Si la première moitié est pleine, insérez récursivement dans la seconde moitié.
  • Après l'étape récursive, si le tableau entier est plein, fusionnez les moitiés (qui sont triées) et redimensionnez-le au double de sa longueur d'origine.

Pour trouver un élément, récursivement dans les deux moitiés, en utilisant la recherche binaire lorsque le tableau est plein. (Cela devrait être efficace car il y a au plus fragments ascendants).O(bûche(n))

La structure peut être considérée comme une version statique de mergesort.

Il n'est pas clair ce que l'on doit faire pour effacer un élément.

Edit: après avoir amélioré ma compréhension de la structure.

pbaren
la source
5
Vous l'avez défini, donc il existe. Je pense que vous devez cependant aplanir certains points. Tout d'abord, l'invariant n ° 2 m'embrouille car il ne semble pas s'appliquer aux états intermédiaires tels que vous les décrivez. Deuxièmement, que faites-vous lorsque des éléments sont supprimés?
Raphael
7
Vous en rêviez jusqu'à une structure de données, pas rêvé ...
Andrej Bauer
@Raphael Merci pour vos commentaires, j'ai amélioré la définition en suivant vos pensées. Je n'ai pas pensé à un algorithme de suppression, je voulais juste vérifier si cette structure était dans la littérature avant d'y consacrer plus de temps (et je n'ai rien trouvé dans Google). Sur votre première phrase, vous pouvez définir Dieu, mais existe-t-il? :)
pbaren
@Andrej Merci, l'anglais n'est pas ma langue maternelle. (Je suppose que ce n'est pas le vôtre non plus :)
pbaren
3
@Andrej: l'OP avait à l'origine "rêvé avec ", ce qui n'est certainement pas ce que l'on voulait dire. Je l'ai changé en "de" au lieu de "haut". Les deux sont corrects grammaticalement, mais les deux changent également le sens. "Of" était l'option de sondage la plus intéressante ...
András Salamon

Réponses:

31

Vous décrivez la méthode logarithmique classique de Bentley-Saxe , appliquée aux tableaux triés statiques. La même idée peut être utilisée pour ajouter la prise en charge des insertions à toute structure de données statique (pas d'insertions ou de suppressions) pour tout problème de recherche décomposable. (Un problème de recherche est décomposable si la réponse pour n'importe quelle union peut être calculée facilement à partir des réponses pour les ensembles A et B. ) La transformation augmente le temps de requête amorti d'un facteur O ( log n ) (sauf si elle était déjà plus grand que certains polynômes en nUNEBUNEBO(bûchen)n), mais n'augmente l'espace que d'un facteur constant. Oui, il peut être désamorti, grâce à Overmars et van Leeuwen, mais vous ne voulez vraiment pas le faire si vous n'êtes pas obligé.

Ces notes couvrent les bases.

Les tableaux d'anticipation sans cache sont la progéniture mutante des arbres Bentley-Saxe et van Emde Boas sur les stéroïdes.

Jeffε
la source
4
Ce sont des notes magnifiquement écrites et illustrées, et je les ai utilisées à plusieurs reprises comme référence. Merci de les avoir mis à disposition!
jbapple
Je vois comment les arbres de navette (de la première moitié de l'article présentant les tableaux d'anticipation sans cache) sont liés aux arbres vEB, mais quelle est la relation entre les COLA et les arbres vEB?
jbapple
2
Merci, ce matériel semble une généralisation très intéressante de l'idée. J'ai toujours pensé que les structures de données sont des algorithmes figés, que vous pouvez exécuter pas à pas, mais je n'avais jamais trouvé de formalisation utile de cette intuition.
pbaren
Le premier lien a-t-il fonctionné pour quelqu'un d'autre?
AU
Oui, je viens de l'essayer. (Malheureusement, il va à un paywall Elsevier; désolé!)
Jeffε
11

Ceci est similaire à une arborescence de fusion à structure logarithmique ou à un cache de tableaux d'anticipation inconscients (ou COLA).

2k-12je0je<k

2021

O(lgn)O(n)O(lg2n)

jbapple
la source