Полезны ли вероятностные структуры данных поиска?

9

SkipList предоставляет те же границы для поиска, что и сбалансированное дерево, с тем преимуществом, что перебалансировка не требуется. Поскольку SkipList создается с использованием случайных бросков монет, эти границы сохраняются только до тех пор, пока структура SkipList достаточно «сбалансирована». В частности, с вероятностью 1 / n c для некоторой константы c > 0 сбалансированная структура может быть потеряна после вставки элемента.О(журналN)1/Nсс>0

Допустим, я хочу использовать список пропусков в качестве серверной части хранилища в веб-приложении, которое потенциально работает вечно. Таким образом, после некоторого полиномиального числа операций сбалансированная структура SkipList, скорее всего, будет потеряна.

Правильно ли мои рассуждения? Имеют ли такие вероятностные структуры данных поиска / хранения практическое применение, и если да, то как избежать вышеуказанной проблемы?

Редактировать: Мне известно, что существуют детерминированные варианты SkipList, которые гораздо сложнее реализовать по сравнению с (классическим) рандомизированным SkipList.

кто-то
источник
1
Какое конкретное приложение вы имеете в виду?
Pratik Deoghare

Ответы:

6

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

Таким образом, у вас есть слои с меньшим количеством элементов по мере достижения вершины. Поскольку башня имеет высоту с вероятностью 2 - k , на высоте k имеется элемент с вероятностью (объединенной границей) менее n / 2 k . Следовательно, наличие элемента на уровне c log n имеет пробалитий менее 1 / n c . Башни высотой ω ( log n ) имеют субполиномиальную вероятность. Пусть М будет максимальным уровнем, тогда мы имеемК2-ККN/2КсжурналN1/Nсω(журналN)M

Е[M]знак равноΣК1пр(MК)журнал(N)+ΣКжурнал(N)N/2Кзнак равножурнал(N)+2.

Кроме того, на уровне есть n / 2 k элементов с очень высокой вероятностью, так как это сумма n независимых случайных величин, и вы можете использовать черновскую оценку.КN/2КN

Поскольку вы также можете показать, что вы делаете только постоянное количество шагов на уровень (с очень высокой вероятностью!), Затраты на поиск являются логарифмическими.

Таким образом, вам действительно нужно быть очень невезучим, чтобы получить несбалансированный список. Обратите внимание, что «удача» здесь не зависит от ваших данных, в отличие, например, от несбалансированных деревьев поиска. Скины монет в Пропускающих списках всегда случайны.

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

adrianN
источник
Ожидаемая глубина двоичных деревьев поиска также является логарифмической; почему ситуация здесь лучше? (Кроме того, вы допускаете случайные перестановки, верно?)
Рафаэль
2
В деревьях поиска глубина зависит от данных. Если вы кормите его случайными числами, он имеет логарифмическую глубину с очень высокой вероятностью. Однако на практике данные не случайны. Пропуск списков не использует данные в качестве источника случайности, поэтому такой проблемы не существует.
adrianN
1

У списков пропуска есть и другие свойства, которые могут сделать их привлекательными в ситуациях, когда используются операции, отличные от просто insert / lookup / delete.

О(1)О(1)

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

jbapple
источник