Слияние пропущенных списков - PullRequest
6 голосов
/ 08 мая 2011

Как я могу объединить 2 с заданными Skip lists (каждый с n ключами) в один Skip List за O(n) сложность времени (наихудший случай)?

Просто ищу алгоритм - без конкретной реализации / языка.

1 Ответ

7 голосов
/ 08 мая 2011
store the two skip lists in two arrays: A,B
merge the arrays.
repeat until getting into root ('top' is a linked list containing only one element): 
   for each second entry in the skip list 'top' add a 'tag' (link 'upstairs' of the previous level)

это действительно O (n), потому что store и merge - это O (n), и в цикле вам нужно выполнить итерации:

n+n/2+n/4+n/8+... = sigma(n/2^k) where k in (0,infinity) = 2n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...