Пропустить список: вставки

Пытаюсь понять, как работает скип-лист для вставки, но когда вытягиваю, не получается.

|-inf<---------------------------->+inf|0
|-inf<--------->4<---------------->+inf|1
|-inf<--------->4<--->9<--->11<--->+inf|2
|-inf<--->1<--->4<--->9<--->11<--->+inf|3

Итак, я хочу вставить 5 в приведенный выше связанный список.

Начать с строки 0: начать с -inf, сравнить 5 с +inf, перейти к следующей строке.

Перейти к строке 1:

5 ‹= 4, нет. Сравните с тем, что справа, +инф. Переместитесь вниз от элемента 4 к строке 2.

Перейти к строке 2:

Теперь мы перемещаемся между 4 и 9, поэтому сравнение будет примерно таким: 5 ‹= 4? Нет. 5 ‹= 9? Да. Вставьте между 4 и 9.

Но теперь 5 не отображается в строке 3? Что я делаю не так?


person Community    schedule 14.05.2016    source источник


Ответы (1)


Когда вы видите, что 5 ‹ = 9, вы должны продолжать спускаться, пока не достигнете дна. На одном из нижних уровней может быть любое число от 4 до 9. Когда вы определяете его расположение в нижней строке, вы вставляете его туда, а затем начинаете вставлять его на одну строку выше в зависимости от результата ГСЧ. Полная последовательность для вашей вставки выглядит примерно так:

  1. 5 > +инф? Нет: двигаться вниз.
  2. 5 > 4? Да: двигаться вправо.
  3. 5 > +инф? Нет: двигаться вниз.
  4. 5 > 9? Нет: двигаться вниз.
  5. 5 > 9? Нет: двигаться вниз.
  6. Не удалось перейти вниз на предыдущем шаге, поэтому вставьте от 4 до 9 на нижнем уровне.
  7. Вероятностно добавьте 5 к более высоким строкам.
person Jordi Vermeulen    schedule 14.05.2016