Структура даних з пошуком, вставленням та видаленням за амортизованим часом ?


25

Чи існує структура даних для підтримки упорядкованого списку, який підтримує наступні операції за амортизований час ?O(1)

  • GetElement (k) : повертає й елемент списку.k

  • InsertAfter (x, y) : Вставте новий елемент y у список відразу після x.

  • Видалити (x) : видалити x зі списку.

Для останніх двох операцій можна припустити, що x задано як вказівник безпосередньо в структуру даних; InsertElement повертає відповідний покажчик на y. InsertAfter (NULL, y) вставляє y на початку списку.

Наприклад, починаючи з порожньої структури даних, наступні операції оновлюють упорядкований список, як показано нижче:

  • InsertAfter (NULL, a) [a]
  • InsertAfter (NULL, b) [b, a]
  • InsertAfter (b, c) [b, c, a]
  • InsertAfter (a, d) [b, c, a, d]
  • Видалити (c) [b, a, d]

Після цих п'яти оновлень GetElement (2) повинен повернути d, а GetElement (3) повернути помилку.


2
В Оптимальних алгоритмах індексації списків та ранжиру підмножини (1989) я знайшов рішення для цієї проблеми. Ω(log nlog log n)
AT

2
@Raphael: Я думаю, що він означає елемент, який би називався якби структура даних була масивом. Масиви підтримують першу операцію в час, але не другу; пов'язані списки підтримують другу операцію в час, але не першу. O ( 1 ) O ( 1 )A[k]O(1)O(1)
JeffE

2
Також врівноважені двійкові дерева підтримують обидві операції в час. O(logn)
JeffE

1
@Raphael: Відредаговано для уточнення.
JeffE

2
@JeffE, динамічний масив підтримує перші два за амортизованим часом ( cs.uwaterloo.ca/research/tr/1999/09/CS-99-09.pdf )O(1)
Дієго

Відповіді:


33

НІ.

Фредман і Сакс довели, що будь-яка структура даних, яка підтримує ці операції, вимагає принаймні амортизований час на операцію . (Це посилання [1] у статті Дітца, яку ви згадуєте у своєму першому коментарі.) Нижня межа має місце у дуже потужній моделі зондування зондування, яка враховує лише кількість різних адрес пам'яті, до яких можна отримати оновлення та запит. алгоритми.Ω(logn/loglogn)

Без додаткових припущень щодо операцій оновлення та запитів, структура даних Дітца є найкращою можливою (принаймні, до постійних факторів).


3
@AT: Це обмеження ніколи не було "неправильним". Бувають ситуації, коли це не застосовується, але це зовсім інше твердження!
Рафаель

5
@AT: Нижня межа сортування була доведена у значно слабшій моделі обчислень, а саме у бінарних деревах рішень. Обмеження було "неправдивим" шляхом розробки більш швидких алгоритмів, які не можна описати як двійкові дерева рішень. Щоб довести нижню межу Фредмена та Сакса, вам доведеться розробити більш швидкий алгоритм, який не має доступу до пам'яті . Удачі.
JeffE

@JeffE та Рафаель; будь ласка, перегляньте мою іншу відповідь та підтвердьте / заперечуйте мій результат, коли отримаєте можливість. Спасибі.
AT

6

Схоже, бар'єр був подоланий, змінивши аналіз з методики хронограми.Ω(lognloglogn)

Доведено, що новий [нижній] пов'язаний із подібними проблемами в моделі клітин-зонда [1]. Від прочитання цієї статті; наскільки я розумію, що ця межа стосується також проблеми представлення списку .Ω(logn)


[1] Патраску, Міхай та Ерік Д. Демен. «Логарифмічні нижні межі в моделі клітинного зонда». SIAM J. Comput. 35, ні. 4 (квітень 2006 р.): 932–963. doi: 10.1137 / S0097539705447256.


1
Ця нижня межа стосується слів постійного розміру, тоді як попередня нижня межа призначена для слів розміру логарифмічного розміру. Ω(logn/loglogn)
Ювал Філімус

Справді. Крім того, чи можете ви підтвердити, що ця межа стосується проблеми представлення списку зі словами постійного розміру?
AT

1
Я можу підтвердити це через зв’язаний Дітц ( hdl.handle.net/1802/5694 ), який ви самі згадали. Це робить складність точно , а отже, не . Ω ( log n )Θ(logn/loglogn) Ω(logn)
jbapple
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.