Чи корисні імовірнісні структури даних пошуку?


9

SkipList забезпечує ті самі межі для пошуку як збалансоване дерево з тією перевагою, що перебалансування не потрібне. Оскільки SkipList побудований за допомогою випадкових відкидних монет, ці межі тримаються лише до тих пір, поки структура SkipList є достатньо "збалансованою". Зокрема, з ймовірністю для деякої постійної , врівноважена структура може бути втрачена після вставки елемента.O(logn)1/ncc>0

Скажімо, я хочу використовувати пропускний список як резервний запас даних у веб-додатку, який потенційно працює вічно. Тож після деякої поліноміальної кількості операцій врівноважена структура SkipList дуже втрачена.

Чи мої міркування правильні? Чи мають такі імовірнісні структури даних щодо пошуку / зберігання практичні програми, і якщо так, то як уникнути вищезазначеної проблеми?

Редагувати: Я знаю, що існують детерміновані варіанти SkipList, які набагато складніше реалізувати порівняно з (класичним) рандомізованим SkipList.


1
Яку конкретну програму ви маєте на увазі?
Pratik Deoghare

Відповіді:


6

Я не думаю, що існує поліноміальна ймовірність втратити «рівновагу». Після того, як ви вставите елемент у пропускний список, ви будуєте над ним башту копій, гортаючи монету, доки вона не підійде до голови.

Таким чином, у вас є шари з меншою кількістю елементів, коли ви досягаєте вершини. Оскільки башта має висоту з вірогідністю , на висоті є елемент з вірогідністю (зв'язаний між об'єднанням) менше . Отже, наявність елемента на рівні має пробалітію менше . Вишки висотою мають субполіномічну ймовірність. Нехай - максимальний рівень, тоді ми маємоk2kkn/2kclogn1/ncω(logn)M

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

Крім того, на рівні є елементів з дуже високою ймовірністю, оскільки це сума незалежних випадкових величин, і ви можете використовувати пов'язані Чернова.kn/2kn

Оскільки ви також можете показати, що ви робите лише постійну кількість кроків на рівні (з дуже високою ймовірністю!), Витрати на пошук є логарифмічними.

Тож вам би довелося дуже пощастити, щоб потрапити в незбалансований список. Зауважте, що "удача" тут не залежить від ваших даних, на відміну від, наприклад, у незбалансованих дерев пошуку. Обертання монет у списках пропуску завжди випадкові.

Наскільки я знаю, пропускні списки представляють великий практичний інтерес, тому що реалізувати їх як безблокові пошукові структури порівняно легко з очевидними перевагами. З іншого боку, B-дерева досить важко зробити виконавцями в умовах одночасного доступу.


Очікувана глибина дерев бінарного пошуку також логарифмічна; чому тут ситуація краща? (Крім того, ви припускаєте випадкові перестановки, правда?)
Рафаель

2
У деревах пошуку глибина залежить від даних. Якщо годувати його випадковими числами, він має логарифмічну глибину з дуже високою ймовірністю. Однак на практиці дані не випадкові. Пропускні списки не використовують дані як джерело випадковості, тому цієї проблеми не існує.
adrianN

1

Списки пропуску мають інші властивості, які можуть зробити їх привабливими в ситуаціях, коли використовуються операції, окрім просто вставки / пошуку / видалення.

Наприклад, пропускні списки мають місце очікуваний час локальних оновлень, коли відомо місце модифікації. Це, безумовно, можливо в найгіршому випадку з певними збалансованими деревами бінарного пошуку, але ці структури, як правило, досить складні в реалізації.O(1)O(1)

Крім того, пропуск списків був популярним способом реалізації паралельних пошукових структур на основі порівняння. Історично врівноважені дерева пошуку не виконувались також під великою суперечливою суперечкою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.