5

Czy to O (1) lub O (logN), ale o mniejszym współczynniku?Jaka jest złożoność mapy/zestawu :: wstawić, jeśli podałeś poprawną wskazówkę iteratora?

Jeśli nie jest to określone, chciałbym przynajmniej znać odpowiedź na podstawie rozsądnego przypuszczenia, że ​​mapa/zestaw jest zaimplementowana przy użyciu drzewa czerwono-czarnego lub AVL. Ogólny algorytm, aby wstawić element, myślę, że jest coś takiego:

  • znaleźć odpowiednie miejsce - O (logn)
  • zrobić rzeczywiste wprowadzenie -
  • przywrócić równowagę drzewa w razie potrzeby -?

Jeśli teraz dostarczyć właściwą wskazówkę iteracyjnej, następnie pierwszy etap staje O (1). Czy inne kroki są również O (1) lub O (logN)?

+0

Pomyśl o tym. Jakie czynności zrobiłbyś, gdybyś pisał metodę wstawiania? Jakie czynności zrobiłbyś, gdybyś ponownie zbalansował drzewo? Czy kroki są zależne od liczby węzłów? –

+1

Oto kilka odpowiedzi, które mogą być pomocne: [stl-map-performance] (http://stackoverflow.com/questions/10165708/stl-map-performance), [why-is-stdmap-applied-as-red -black-tree] (http://stackoverflow.com/questions/5288320/why-is-stdmap-implemented-as-red-black-tree), [różnica między czerwonymi-czarnymi-drzewami-i-avl- drzewa] (http: // stackoverflow.com/questions/16257761/difference-between-red-black-trees-and-avl-trees) – nouney

Odpowiedz

5

Standard nie określa, w jaki sposób kontenery mają zostać wdrożone, więc nie można liczyć na drzewo RB lub AVL. W praktyce ... złożoność ograniczeń jest taka, że ​​nie znam żadnych innych implementacji, które pasowałyby do rachunku. Ale w ograniczeniach złożoności, że znajdziesz odpowiedź: “ logarytmiczne w ogóle, ale amortyzowane stałą , jeśli t jest włożona tuż przed p. ” Więc jeśli wskazówka jest poprawna , implementacja musi być taka, że ​​wstawienie jest O (1).

+2

Oto, jak rozwinęło się to zagadnienie z C++ 03 na C++ 11: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html –

0

Pierwszy standard nigdy nie powiedział dokładnie, jakiego rodzaju struktura danych używa do wdrożenia zestawu. To tylko złożoność operacji na nich, które pomagają nam skierować się w kierunku pewnego rodzaju zrównoważonego drzewka binarnego wyszukiwania.

Tak, jeśli podasz poprawną wskazówkę do wstawienia przez wstawienie prawego iteratora, wszystkie kroki zostaną zamortyzowane jako O (1) jako krok 2 i 3 i nie będą zależne od niczego.

2
  • znaleźć odpowiednie miejsce - O (logn)
  • zrobić rzeczywiste wprowadzenie - O (1), bez względu na to czy jest to AVL lub RB drzewo
  • zrównoważenia drzewa, jeśli to konieczne - Nie znam dokładnej notacji BIG-O dla drzewa AVL, ale dla drzewa RB jest to O (1).

Przy wskazówce dotyczącej iteratora nie ma to wpływu na krok nr 2 (wstawienie) i krok nr 3 (rebalans). Dostarczając iteratora, wykonujesz sam krok 1 ("znajdź właściwe miejsce"), ogólna złożoność jest taka sama.

+0

"Złożoność tej operacji dla drzewa RB to O (1)." -? –

+0

@ n.m. ---------? – nouney

+1

Skąd masz tę złożoność? –

Powiązane problemy