Hashmap to zestaw tablicy asocjacyjnej. Tak więc tablica wartości wejściowych jest gromadzona w zasobnikach. W otwartym schemacie adresowania masz wskaźnik do zasobnika i za każdym razem, gdy dodajesz nową wartość do zasobnika, dowiadujesz się, gdzie w zasobniku są wolne miejsca. Można to zrobić na kilka sposobów - zaczynasz od początku segmentu i za każdym razem zwiększasz wskaźnik i sprawdzasz, czy jest zajęty. Nazywa się to sondowaniem liniowym. Następnie możesz przeprowadzić wyszukiwanie binarne, takie jak add, gdzie podwajasz różnicę między początkiem segmentu a miejscem, w którym podwajasz lub cofasz za każdym razem, gdy szukasz wolnego miejsca. Nazywa się to sondowaniem kwadratowym. DOBRZE. Teraz problem w obu tych metodach polega na tym, że jeśli wiadro przepełnia się do następnego adresu wiadra, to musisz:
- Podwoić rozmiar każdego segmentu - malloc (N pojemników) / zmienić funkcję skrótu - Wymagany czas: zależy od implementacji malloc
- Przenieś / skopiuj wszystkie wcześniejsze dane zasobników do nowych danych zasobników. Jest to operacja O (N), w której N reprezentuje wszystkie dane
DOBRZE. ale jeśli używasz listy linkowanej, nie powinno być takiego problemu, prawda? Tak, na połączonych listach nie masz tego problemu. Biorąc pod uwagę, że każdy zasobnik zaczyna się od połączonej listy, a jeśli masz 100 elementów w zasobniku, musisz przejść przez te 100 elementów, aby dotrzeć do końca połączonej listy, dlatego List.add (Element E) zajmie trochę czasu -
- Haszuj element do zasobnika - normalny, jak we wszystkich implementacjach
- Poświęć trochę czasu, aby znaleźć ostatni element we wspomnianej operacji wiadra O (N).
Zaletą implementacji połączonej listy jest to, że nie jest potrzebna operacja alokacji pamięci i przesyłanie / kopiowanie O (N) wszystkich zasobników, jak w przypadku otwartej implementacji adresowania.
Tak więc sposobem na zminimalizowanie operacji O (N) jest przekonwertowanie implementacji na implementację drzewa wyszukiwania binarnego, w którym operacje wyszukiwania to O (log (N)) i dodanie elementu w jego pozycji na podstawie jego wartości. Dodatkową cechą BST jest to, że jest posortowany!