Marzyłem o strukturze danych, czy ona istnieje?


27

Nie udało mi się znaleźć tej struktury danych, ale nie jestem ekspertem w tej dziedzinie.

Struktura implementuje zestaw i jest w zasadzie szeregiem porównywalnych elementów z niezmiennikiem. Niezmiennikiem jest to (zdefiniowane rekurencyjnie):

Tablica o długości 1 jest tablicą scalającą.

Tablica o długości 2 ^ n (dla n> 0) jest tablicą scalającą iff:

  • pierwsza połowa jest tablicą scalającą, a druga połowa jest pusta lub
  • pierwsza tablica jest pełna i posortowana, a druga połowa to tablica scalająca.

Zauważ, że jeśli tablica jest pełna, jest sortowana.

Aby wstawić element, mamy dwa przypadki:

  • Jeśli pierwsza połowa nie jest pełna, włóż rekurencyjnie do pierwszej połowy.
  • Jeśli pierwsza połowa jest pełna, włóż rekurencyjnie do drugiej połowy.
  • Po zakończeniu cyklu rekurencyjnego, jeśli cała tablica jest pełna, połącz połówki (które są posortowane) i zmień jej rozmiar do dwukrotności pierwotnej długości.

Aby znaleźć element, powtórz w obu połowach, używając wyszukiwania binarnego, gdy tablica jest pełna. (Powinno to być skuteczne, ponieważ istnieje najwyżej rosnących fragmentów).O(log(n))

Strukturę można traktować jako statyczną wersję scalania.

Nie jest jasne, co należy zrobić, aby usunąć element.

Edycja: po poprawieniu mojego zrozumienia struktury.


5
Zdefiniowałeś to, dlatego istnieje. Myślę jednak, że musicie wygładzić niektóre punkty. Po pierwsze, niezmiennik nr 2 wprawia mnie w zakłopotanie, ponieważ wydaje się, że nie stosuje się do stanów pośrednich podczas ich opisywania. Po drugie, co robisz po usunięciu elementów?
Raphael,

7
Śniłeś się strukturę danych, nie marzył o niej ...
Andrej Bauer

@Raphael Dzięki za komentarze, poprawiłem definicję podążając za twoimi przemyśleniami. Nie myślałem o algorytmie do usuwania, chciałem tylko sprawdzić, czy ta struktura jest w literaturze, zanim poświęciłem jej więcej czasu (i nie mogłem znaleźć niczego w Google). W pierwszym zdaniu możesz zdefiniować Boga, ale czy on istnieje? :)
pbaren,

@Andrej Dzięki, angielski nie jest moim językiem ojczystym. (
Wydaje

3
@Andrej: PO pierwotnie miał „marzył o ”, który jest prawie na pewno nie to, co myśli. Zmieniłem to na „z” zamiast „w górę”. Oba są poprawne gramatycznie, ale oba również zmieniają znaczenie. „Of” było ciekawszą opcją…
András Salamon,

Odpowiedzi:


31

ABABO(logn)n), ale zwiększa przestrzeń tylko o stały współczynnik. Tak, można to zdemontować dzięki Overmars i van Leeuwen, ale tak naprawdę nie chcesz tego robić, jeśli nie musisz.

Te uwagi dotyczą podstaw.

Tablice wyprzedzające pamięć podręczną to zmutowane potomstwo drzew Bentley-Saxe i van Emde Boas na sterydach.


4
Są to pięknie napisane i zilustrowane notatki, z których wielokrotnie korzystałem. Dziękujemy za udostępnienie ich!
jbapple,

Widzę, w jaki sposób drzewa wahadłowe (z pierwszej połowy artykułu przedstawiającego pamięć podręczną niewidzialne tablice wyprzedzające) są powiązane z drzewami vEB, ale jaki jest związek między COLA a drzewami vEB?
jbapple,

2
Dzięki, ten materiał wydaje się bardzo interesującym uogólnieniem pomysłu. Zawsze myślałem, że struktury danych to zamrożone algorytmy, które można uruchomić krok po kroku, ale nigdy nie znalazłem przydatnej formalizacji tej intuicji.
pbaren,

Czy pierwszy link działał dla kogoś innego?
AT

Tak, właśnie tego spróbowałem. (Niestety, chodzi o
zaporę

11

Jest to podobne do drzew scalonych o strukturze dziennika lub pamięci podręcznej niewiadomych tablic wyprzedzających (lub COLA).

2k12i0i<k

2021

O(lgn)O(n)O(lg2n)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.