Une SkipList fournit les mêmes limites pour la recherche qu'un arbre équilibré avec l'avantage qu'un rééquilibrage n'est pas nécessaire. Étant donné que la SkipList est construite à l'aide de retournements de pièces aléatoires, ces limites ne tiennent que tant que la structure de la SkipList est suffisamment "équilibrée". En particulier, avec probabilité 1 / n c pour une constante c > 0 , la structure équilibrée peut être perdue après l'insertion d'un élément.
Supposons que je souhaite utiliser une liste de sauts comme backend de stockage dans une application Web qui s'exécute potentiellement pour toujours. Ainsi, après un certain nombre d'opérations polynomiales, la structure équilibrée de la SkipList est très susceptible d'être perdue.
Mon raisonnement est-il correct? Ces structures probabilistes de données de recherche / stockage ont-elles des applications pratiques et si oui, comment éviter le problème ci-dessus?
Edit: Je suis conscient qu'il existe des variantes déterministes de la SkipList, qui sont beaucoup plus compliquées à mettre en œuvre par rapport à la SkipList aléatoire (classique).
Réponses:
Je ne pense pas qu'il existe une probabilité polynomiale de perdre «l'équilibre». Après avoir inséré un élément dans une liste de sauts, vous construisez une tour de copies au-dessus en retournant une pièce jusqu'à ce qu'elle monte en tête.
Vous avez donc des calques avec de moins en moins d'éléments lorsque vous atteignez le sommet. Puisqu'une tour a une hauteur avec une probabilité 2 - k , il existe un élément à une hauteur k avec une probabilité (liée à l'union) inférieure à n / 2 k . Par conséquent, avoir un élément au niveau c log n a probablement moins de 1 / n c . Tours de hauteurk 2−k k n/2k clogn 1/nc ont une probabilité sous-polynomiale. Soit M le niveau maximum, alors nous avonsω(logn) M
De plus, au niveauk il y a éléments avec une probabilité très élevée, car il s'agit de la somme de n variables aléatoires indépendantes et vous pouvez utiliser la borne de Chernov.n/2k n
Comme vous pouvez également montrer que vous ne faites qu'un nombre constant d'étapes par niveau (avec une probabilité très élevée!), Les coûts de recherche sont logarithmiques.
Il faudrait donc être très malchanceux pour aboutir à une liste déséquilibrée. Notez que la «chance» ici est indépendante de vos données, contrairement par exemple aux arbres de recherche déséquilibrés. Les lancers de pièces dans les Skip Lists sont toujours aléatoires.
Pour autant que je sache, les listes de sauts sont d'un grand intérêt pratique, car il est relativement facile de les mettre en œuvre en tant que structures de recherche sans verrouillage, avec les avantages évidents. Les arbres B, en revanche, sont assez difficiles à rendre performants sous des accès simultanés.
la source
Les listes de sauts ont d'autres propriétés qui pourraient les rendre attrayantes dans des situations où des opérations autres que simplement insérer / rechercher / supprimer sont utilisées.
De plus, les listes de sauts ont été un moyen populaire d'implémenter des structures de recherche simultanées basées sur des comparaisons. Historiquement, les arborescences de recherche équilibrées ne se sont pas aussi bien comportées dans le cadre de conflits concurrents élevés.
la source