Chciałbym zaimplementować sobie tablicę asocjacyjną. Czy jest możliwość stworzenia takiej tablicy bez iterowania po całej tablicy kluczy przy odczytywaniu wartości o danym indeksie-kluczu? A może jest jakiś sposób na zoptymalizowanie takiej iteracji? Bo przejeżdżanie za każdym razem po całej tablicy za bardzo zwiększy złożoność mojego kodu, a potrzebuję czegoś co działa szybko.
Musisz to implementować samemu? Takie rzeczy są w bibliotece standardowej: chociażby std::map
i std::unordered_map
. (Szukaj pod Associative containers)
Metod jest kilka:
#sortujesz klucze a potem robisz binarny search (przeszukiwanie ma złożonośc o(ln n)
)
#budujesz drzewo binarne
#liczysz hash dla klucza, odnajdujesz i na podstawie hasha, gdzie masz zacząć poszukiwania (najszybsze ale najwięcej kodu do napisania).
@Hysterus zbalansowane drzewa binarne mają O(log(n)) czasu szukania klucza, hashmapa daje O(1)
Teoretycznie mogę skorzystać, lecz jest to zadanie na studia i na kolejny etap będę musiał i tak użyć tylko własnych struktur danych.
Kurcze, wyczytałem tam, że klasa "map" przy szukaniu ma złożoność logarytmiczną. Przy iterowaniu całej tablicy złożoność jest n, jak to uzyskali? :P
Oj, zacząłem odpisywać i zanim odpisałem pojawiły się dwa posty :)
Dzięki za podpowiedź, spróbuję w takim razie coś wykombinować :)
Hysterus napisał(a):
Kurcze, wyczytałem tam, że klasa "map" przy szukaniu ma złożoność logarytmiczną. Przy iterowaniu całej tablicy złożoność jest n, jak to uzyskali?
To się jeszcze bardziej zdziwisz - nawet stos i lista przy iterowaniu całości złożoność jest n!