Czy istnieje struktura danych umożliwiająca utrzymanie uporządkowanej listy, która obsługuje następujące operacje w zamortyzowanym czasie ?
GetElement (k) : zwraca ty element listy.
InsertAfter (x, y) : Wstaw nowy element y do listy natychmiast po x.
Usuń (x) : Usuń x z listy.
W przypadku dwóch ostatnich operacji można założyć, że x jest podane jako wskaźnik bezpośrednio w strukturze danych; InsertElement zwraca odpowiedni wskaźnik dla y. InsertAfter (NULL, y) wstawia y na początku listy.
Na przykład, zaczynając od pustej struktury danych, następujące operacje aktualizują uporządkowaną listę, jak pokazano poniżej:
- InsertAfter (NULL, a) [za]
- InsertAfter (NULL, b) [b, a]
- Wstaw po (b, c) [b, c, a]
- Wstaw po (a, d) [b, c, a, d]
- Usuń (c) [b, a, d]
Po tych pięciu aktualizacjach GetElement (2) powinien zwrócić d, a GetElement (3) powinien zwrócić błąd.
Odpowiedzi:
NIE.
Fredman i Saks udowodnili, że każda struktura danych, która obsługuje te operacje, wymaga co najmniej zamortyzowanego czasu na operacjęΩ(logn/loglogn) . (Jest to odniesienie [1] w artykule Dietza, o którym wspominasz w swoim pierwszym komentarzu.) Dolna granica zawiera bardzo wydajny model obliczeniowy sondy komórkowej, który uwzględnia tylko liczbę różnych adresów pamięci dostępnych przez aktualizację i zapytanie algorytmy.
Bez dodatkowych założeń dotyczących operacji aktualizacji i zapytań struktura danych Dietza jest najlepsza z możliwych (przynajmniej do stałych czynników).
źródło
Wygląda jak barierę pokonano modyfikując analizę z techniki chronogramu.Ω(lognloglogn)
Nowa granica [dolna] została udowodniona dla podobnych problemów w modelu sonda-komórka [1]. Z lektury tego artykułu; rozumiem, że ta granica dotyczy również problemu reprezentacji listy .Ω(logn)
[1] Patrascu, Mihai i Erik D. Demaine. „Logarytmiczne dolne granice w modelu sondy komórkowej.” SIAM J. Comput. 35, nr 4 (kwiecień 2006 r.): 932–963. doi: 10.1137 / S0097539705447256.
źródło