Próbuję wymienić czasową złożoność operacji wspólnych struktur danych, takich jak tablice, drzewo wyszukiwania binarnego, sterta, lista połączona itp., A zwłaszcza mam na myśli Javę. Są bardzo częste, ale wydaje mi się, że niektórzy z nas nie są w 100% pewni dokładnej odpowiedzi. Każda pomoc, zwłaszcza referencje, jest bardzo mile widziana.
Np. Dla listy pojedynczo połączonej: Zmiana elementu wewnętrznego to O (1). Jak możesz to zrobić? Ty MASZ szukać element przed zmianą. Również w przypadku wektora dodanie elementu wewnętrznego jest podane jako O (n). Ale dlaczego nie możemy tego zrobić w zamortyzowanym stałym czasie przy użyciu indeksu? Proszę, popraw mnie, jeśli czegoś mi brakuje.
Jako pierwszą odpowiedź zamieszczam moje ustalenia / domysły.
źródło
Odpowiedzi:
Tablice
Delete
dostępna żadna operacja. Możemy symbolicznie usunąć element ustawiając mu określoną wartość np. -1, 0 itd. W zależności od naszych wymagańInsert
dla tablic jest w zasadzieSet
jak wspomniano na początkuArrayList:
Połączona lista:
Lista podwójnie połączona:
Stos:
Queue / Deque / Circular Queue:
Drzewo wyszukiwania binarnego:
Drzewo czerwono-czarne:
Heap / PriorityQueue (min / max):
HashMap / Hashtable / HashSet:
źródło