Список с пропусками — различия между версиями
GosuGDR (обсуждение | вклад) (Новая страница: «'''Список с пропусками''' (''skip-list'') — одна из вероятностных структур данных, на ряде паралл...») |
GosuGDR (обсуждение | вклад) (→Поиск элемента) |
||
Строка 8: | Строка 8: | ||
В таком случае алгоритм поиска в этой структуре будет представлять из себя следующие операции: | В таком случае алгоритм поиска в этой структуре будет представлять из себя следующие операции: | ||
− | + | # Начинаем поиск элемента в верхнем левом углу | |
− | + | # Передвигаться будем по списку <tex>L_2</tex>, пока значение в следующей ячейке меньше или равно ключу | |
− | + | # Переместиться в нижний уровень и продолжить аналогичный метод поиска по списку <tex>L_1</tex> | |
Тогда время работы алгоритма поиска будет зависеть от количества элементов на уровне <tex>L_2</tex>. Представим, что на этот уровень у нас случайным образом попало несколько элементов. Следовательно в худшем случае поиска мы получим следующую оценку на время работы: | Тогда время работы алгоритма поиска будет зависеть от количества элементов на уровне <tex>L_2</tex>. Представим, что на этот уровень у нас случайным образом попало несколько элементов. Следовательно в худшем случае поиска мы получим следующую оценку на время работы: |
Версия 17:35, 29 мая 2012
Список с пропусками (skip-list) — одна из вероятностных структур данных, на ряде параллельных отсортированных связных списков с эффективностью, сравнимой с бинарными деревьями поиска. Все операции со списком с пропусками осуществляются за
с большой вероятностью.Отсортированный связный список является простейшей структурой со временем поиска
. Одним из способов улучшить асимптотику данной структуры является добавление дополнительного уровня, обеспечивающего быстрый доступ через несколько элементов.Операции над структурой
Поиск элемента
Допустим, что в нашем списке с пропусками существуют два уровня:
, в котором содержатся все элементы и , в котором присутствует только часть из них. Между одинаковыми элементами этих двух списков существуют ссылки.В таком случае алгоритм поиска в этой структуре будет представлять из себя следующие операции:
- Начинаем поиск элемента в верхнем левом углу
- Передвигаться будем по списку , пока значение в следующей ячейке меньше или равно ключу
- Переместиться в нижний уровень и продолжить аналогичный метод поиска по списку
Тогда время работы алгоритма поиска будет зависеть от количества элементов на уровне
. Представим, что на этот уровень у нас случайным образом попало несколько элементов. Следовательно в худшем случае поиска мы получим следующую оценку на время работы:
Минимизируя, мы получаем, что
В итоге время за которое мы найдем элемент в списке с пропусками с двумя уровнями будет равняться:
Делая аналогичные подсчеты для списков с пропусками, в которых содержится больше уровней, получаем:
- Для трех уровней:
- Для четырех уровней:
- Для пяти уровней:
- Для уровней:
В списках с пропусками, в которых содержится
уровней будет себя вести очень похоже на сбалансированные бинарные деревья поиска. В идеальной данной структуре соотношение между соседними уровнями будет равняться двум. Поиск в списке с пропусками будет осуществляться за асимптотическое время .Вставка элемента
Todo
Удаление элемента
Todo