Nous avons un ensemble, , de listes d'éléments de l'ensemble . Chaque élément de apparaît dans une liste unique en . Je recherche une structure de données pouvant effectuer les mises à jour suivantes:N = { 1 , 2 , 3 , . . . , n }
: concatène la liste contenant à la fin de la liste contenant
: divise la liste contenant directement après
Il doit également effectuer les requêtes suivantes:
: retourne si et sont dans la même liste et vient après (mais n'est pas nécessairement adjacent à )
: retourne le premier élément de la liste contenant
: renvoie l'élément suivant après dans la liste contenant
J'ai déjà trouvé une structure de données qui effectue ces mises à jour en et les requêtes en O (lg (n)) . Je suis surtout intéressé à savoir s'il existe déjà une structure de données qui peut le faire (je l'espère plus rapide?)
Motivation: les forêts dirigées enracinées peuvent être représentées avec deux de ces ensembles de listes et elles permettent un calcul rapide de l'accessibilité dans ces forêts. Je veux voir à quoi d'autre ils peuvent servir et si tout cela est déjà connu.
Le problème d' ancêtre le moins courant peut être utilisé pour résoudre le problème d'accessibilité dans les arbres enracinés dynamiques, donc j'imagine que vous serez également intéressé par les éléments suivants: Algorithmes optimaux pour trouver les ancêtres communs les plus proches dans les arbres dynamiques , par Alstrup et Thorup. Cet article donne une limite de temps de pour n liens et m nca requêtes sur une machine à pointeur.O(n+mloglogn) n m
la source