SkipList предоставляет те же границы для поиска, что и сбалансированное дерево, с тем преимуществом, что перебалансировка не требуется. Поскольку SkipList создается с использованием случайных бросков монет, эти границы сохраняются только до тех пор, пока структура SkipList достаточно «сбалансирована». В частности, с вероятностью 1 / n c для некоторой константы c > 0 сбалансированная структура может быть потеряна после вставки элемента.
Допустим, я хочу использовать список пропусков в качестве серверной части хранилища в веб-приложении, которое потенциально работает вечно. Таким образом, после некоторого полиномиального числа операций сбалансированная структура SkipList, скорее всего, будет потеряна.
Правильно ли мои рассуждения? Имеют ли такие вероятностные структуры данных поиска / хранения практическое применение, и если да, то как избежать вышеуказанной проблемы?
Редактировать: Мне известно, что существуют детерминированные варианты SkipList, которые гораздо сложнее реализовать по сравнению с (классическим) рандомизированным SkipList.
Ответы:
Я не думаю, что есть полиномиальная вероятность потери «баланса». После того, как вы вставили элемент в список пропуска, вы строите башню копий над ним, подбрасывая монету, пока она не поднимется головой.
Таким образом, у вас есть слои с меньшим количеством элементов по мере достижения вершины. Поскольку башня имеет высоту с вероятностью 2 - k , на высоте k имеется элемент с вероятностью (объединенной границей) менее n / 2 k . Следовательно, наличие элемента на уровне c log n имеет пробалитий менее 1 / n c . Башни высотой ω ( log n ) имеют субполиномиальную вероятность. Пусть М будет максимальным уровнем, тогда мы имеемК 2- к К н / 2К с логN 1 / nс ω ( журналн ) M
Кроме того, на уровне есть n / 2 k элементов с очень высокой вероятностью, так как это сумма n независимых случайных величин, и вы можете использовать черновскую оценку.К н / 2К N
Поскольку вы также можете показать, что вы делаете только постоянное количество шагов на уровень (с очень высокой вероятностью!), Затраты на поиск являются логарифмическими.
Таким образом, вам действительно нужно быть очень невезучим, чтобы получить несбалансированный список. Обратите внимание, что «удача» здесь не зависит от ваших данных, в отличие, например, от несбалансированных деревьев поиска. Скины монет в Пропускающих списках всегда случайны.
Насколько я знаю, списки пропусков представляют большой практический интерес, потому что их относительно легко реализовать как поисковые структуры без блокировок с очевидными преимуществами. С другой стороны, B-деревья довольно сложно сделать быстродействующими при одновременном доступе.
источник
У списков пропуска есть и другие свойства, которые могут сделать их привлекательными в ситуациях, когда используются операции, отличные от просто insert / lookup / delete.
Кроме того, списки пропусков были популярным способом реализации параллельных структур поиска на основе сравнения. Исторически сбалансированные деревья поиска не работали так же хорошо в условиях высокой конкуренции.
источник