Les structures de données de recherche probabilistes sont-elles utiles?

9

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 > 0O(logn)1/ncc>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).

quelqu'un
la source
1
Quelle application spécifique avez-vous en tête?
Pratik Deoghare

Réponses:

6

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 hauteurk2kkn/2kclogn1/nc ont une probabilité sous-polynomiale. Soit M le niveau maximum, alors nous avonsω(logn)M

E[M]=k1Pr(Mk)log(n)+klog(n)n/2k=log(n)+2.

De plus, au niveau k 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/2kn

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.

adrianN
la source
La profondeur attendue des arbres de recherche binaires est également logarithmique; pourquoi la situation est-elle meilleure ici? (De plus, vous supposez des permutations aléatoires, n'est-ce pas?)
Raphael
2
Dans les arbres de recherche, la profondeur dépend des données. Si vous lui donnez des nombres aléatoires, il a une profondeur logarithmique avec une probabilité très élevée. Cependant, dans la pratique, les données ne sont pas aléatoires. Les listes à sauter n'utilisent pas les données comme source d'aléatoire, donc ce problème n'existe pas.
adrianN
1

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.

O(1)O(1)

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.

jbapple
la source