Список з пропусками

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Список з пропусками
Тип Список
Винайдено 1989
Винайшли Вільям П'ю
Обчислювальна складність
у записі великого О
Середня Найгірша
Простір O(n) O(n log n)[1]
Пошук O(log n) O(n)[1]
Вставляння O(log n) O(n)
Видалення O(log n) O(n)

В інформатиці, список з пропусками (англ. skip list) — структура даних, яка дозволяє швидкий пошук в упорядкованій послідовності елементів. Швидкий пошук стає можливим через утримання зв'язаної ієрархії підпослідовностей, кожна з яких пропускає кілька елементів з попереднього списку. Пошук стартує в найрозрідженішому списку, і триває допоки не знайдені два послідовних елементи один менший і один більший від шуканого елементу. Через ієрархічні зв'язки ці два елементи зв'язані з елементами наступного по щільності списку, в якому пошук продовжується. Таким чином ми доходимо до повного списку, без пропусків. Елементи пропущені у розріджених списках можуть обиратись імовірнісно.[2][3]

Список з пропусками будується пошарово. Нижній шар це звичайний впорядкований зв'язаний список. Кожен наступний шар поводиться як «експрес-лінія» для нижнього списку, де елементи з шару з'являються в шарі з певною ймовірністю (найуживанішими значеннями для є і ). В середньому, кожний елемент з'являється в списках, найвищий елемент (зазвичай особливий елемент на початку списку з пропусками) в списках.

Пошук цільового елементу починається з головного елемента верхнього списку, і продовжується горизонтально доки поточний елемент є більшим або рівним цільовому. Якщо поточний елемент дорівнює цільовому, пошук завершується. якщо поточний елемент більший ніж цільовий або пошук досяг кінця списку зв'язного списку, процедуру повторюють після повернення до попереднього елемента і спуску на один рівень нижче. Сподіване число кроків в кожному зв'язаному списку становить не більше ніж Вибір різних значень для дає можливість досягти необхідного балансу між швидкість пошуку і місцем на диску.

Вставляння елемента у список з пропусками

Аналіз вартості пошуку

[ред. | ред. код]

З високою імовірністю[4], кожен пошук у списку з пропусками коштує

З високою імовірністю, список з пропусками з елементами має рівнів.

Доведення:

  • елемент досяг вищого рівня ніж
  • Застосовуючи нерівність Буля для імовірності об'єднання подій:
    будь-який елемент досяг вищого рівня ніж
  • Отже, імовірність помилки[4] поліноміально мала і експоненту можна зробити як завгодно великою через відповідний вибір сталої в

Доведення теореми (нарис)

[ред. | ред. код]
  • Ідея: Аналізувати пошук у зворотньому напрямку — від листа до кореня
    • Пошук починається з елемента найнижчого рівня
    • На кожному відвіданому вузлі:
      • Якщо вершина не підвищували до наступного рівня, тоді ми рухаємось (прийшли) ліворуч
      • Якщо вершина підвищували до наступного рівня, тоді ми рухаємось (прийшли) вгору
    • Пошук завершується в корені
  • Відомо, що висота становить з високою імовірністю, наприклад
  • Отже, кількість рухів догори є щонайбільше , з високою імовірністю
  • Звідси, вартість пошуку є кількістю подій необхідних, щоб досягнути рівня (якщо тоді скільки підкидань монети потрібно, щоб отримати аверсів)
    • Інтуїтивно,

Примітки

[ред. | ред. код]
  1. а б http://www.cs.uwaterloo.ca/research/tr/1993/28/root2side.pdf
  2. П'ю, Вільям (червень 1990). Skip lists: a probabilistic alternative to balanced trees. Communications of the ACM. ACM. 33 (6): 668—676. doi:10.1145/78973.78977. Процитовано 15.11.2014.
  3. Детерміністичні списки з пропусками(англ.)
  4. а б Параметризована подія відбувається з високою імовірністю якщо, для будь-якого відбувається з імовірністю не менше ніж де є сталою залежною тільки від Терм називається імовірністю помилки.

Див. також

[ред. | ред. код]