Jestem zdezorientowany co do złożoności czasu tablicy hash wielu artykułów stwierdza, że są one "zamortyzowanym O (1)" niepoprawnym porządkiem O (1), co to oznacza w prawdziwych aplikacjach. Jaka jest przeciętna złożoność czasu operacji w tabeli mieszania, w rzeczywistości nie w teorii, i dlaczego operacje nie są prawdziwe O (1)?Złożoność czasowa tabeli mieszania
Odpowiedz
W przypadku niektórych zastosowań tabel mieszania niemożliwe jest wcześniejsze utworzenie ich z "właściwym" rozmiarem, ponieważ nie wiadomo, ile elementów będzie musiało być przechowywanych jednocześnie podczas okresu istnienia tabeli. Jeśli chcesz zachować szybki dostęp, musisz zmieniać rozmiar tabeli od czasu do czasu, gdy liczba elementów rośnie. To zmienianie rozmiaru zajmuje liniowy czas w odniesieniu do liczby elementów już znajdujących się w tabeli i jest zwykle wykonywane przy wstawianiu, gdy elementy liczbowe przekraczają próg.
Te operacje zmiany rozmiaru mogą być wykonywane na tyle rzadko, że zamortyzowany koszt wstawienia jest nadal stały (postępując geometrycznie dla rozmiaru tabeli, na przykład podwajając rozmiar przy każdej zmianie rozmiaru). Ale jedno wstawienie od czasu do czasu zabiera O (n), ponieważ powoduje zmianę rozmiaru.
W praktyce nie stanowi to problemu, jeśli nie tworzysz twardych aplikacji czasu rzeczywistego.
Nie chodzi tylko o rozmiar - to także mieszania mieszania. Są różne sposoby radzenia sobie z nimi, ale cokolwiek zrobisz, nie wydarzy się w O (1) czasie. Przeciętny przypadek jest w praktyce nadal bliski O (1), chyba że tablica hash staje się całkiem pełna. – Jords
@Jords Nie wiem, co znaczy "blisko O (1)".Poza tym jestem całkiem pewny, że "zamortyzowany O (1)" znaleziony w literaturze odpowiada hipotezom na funkcji mieszania, gdzie głębokość wiadra pozostaje poniżej ustalonego związanego, a więc stałego czasu. Ponieważ jeśli wyszukiwanie bez zmiany rozmiaru nie było stałym czasem, amortyzowane wyszukiwanie nie byłoby również stałym czasem. –
Nie można z góry wiedzieć, ile kolizji dostaniesz za pomocą funkcji skrótu, a także takich, które wymagają zmiany rozmiaru. Może to dodać element nieprzewidywalności do wydajności tabeli mieszającej, powodując, że nie jest to prawda O (1). Jednak praktycznie wszystkie implementacje tabel hash oferują O (1) na ogromnej, ogromnej większości wkładek. Jest to to samo, co wstawianie tablicy - jest to O (1), chyba że musisz zmienić rozmiar, w takim przypadku jest to O (n), a także niepewność kolizji.
W rzeczywistości kolizje hash są bardzo rzadkie i jedynym warunkiem, w którym trzeba by się martwić o te szczegóły, jest sytuacja, gdy określony kod ma bardzo wąskie okno czasowe, w którym musi działać. Dla praktycznie każdego przypadku użycia, tablice skrótów to O (1). Bardziej imponujące niż wstawianie O (1) jest wyszukiwanie O (1).
cóż, wyszukiwanie O (1) dotyczy również tablic –
Wkładanie wartość do tabeli mieszania trwa, w przypadku przeciętnego, O (1) Czas. Funkcja hash jest obliczana, bucked jest wybierany z tabeli skrótów, a następnie element jest wstawiany. W najgorszym przypadku, wszystkie elementy będą miały przypisaną wartość do tej samej wartości, co oznacza, że cała lista zasobników musi być przesuwana lub, w przypadku adresowania otwartego, cała tabela musi być sondowana aż do pustego miejsca jest znalezione. więc w najgorszym przypadku, wprowadzenie trwa O (n)
patrz: http://www.cs.unc.edu/~plaisted/comp550/Neyer%20paper.pdf (tablica mieszająca Sekcja)
- 1. Złożoność czasowa Math.Sqrt()?
- 2. Złożoność czasowa random.sample
- 3. Złożoność czasowa podłoży Javy()
- 4. Złożoność czasowa funkcji permutacji
- 5. Złożoność czasowa liczenia sortowania
- 6. Złożoność czasowa metod HashMap
- 7. Złożoność czasowa detektora krawędzi Canny
- 8. Złożoność czasowa operacji zestawu Pythona?
- 9. Konstruowanie tabeli mieszania/funkcji mieszania
- 10. Jaka jest złożoność czasowa inicjowania macierzy?
- 11. Złożoność czasowa indeksu javascriptJeśli chodzi o metodę
- 12. Złożoność czasowa wyszukiwania binarnego dla nieposortowanej tablicy
- 13. Czy złożoność czasowa tego algorytmu Θ (n)?
- 14. Złożoność czasowa algorytmu wykresu głębi-pierwszego
- 15. Algorytm mieszania dla implementacji tabeli mieszania
- 16. czas przeszukania tabeli mieszania
- 17. Implementacja tabeli trwałej mieszania
- 18. Złożoność środowiska wykonawczego tabeli haszów (wstawianie, wyszukiwanie i usuwanie)
- 19. DEKLARACJA GLOBALNA TABELA CZASOWA V Tworzenie tabeli globalnej w DB2
- 20. Tableview UiDesign złożoność
- 21. Jaka jest złożoność czasowa indeksowania, wstawiania i usuwania z typowych struktur danych?
- 22. Asymptotyczna złożoność czasowa wstawiania n elementów do binarnych stert zawierających już elementy n
- 23. jak dostać klucz od wartości w tabeli mieszania
- 24. Jak powinienem zrobić optymalizację tabeli mieszania dla danej populacji?
- 25. Sortowanie tabeli mieszania programu PowerShell dla właściwości o wartości
- 26. Złożoność algorytmu
- 27. Złożoność algorytmu
- 28. `złożoność złożoności
- 29. C++ - złożoność nieuporządkowanej mapy
- 30. Różne struktury danych i Złożoność
Wiąże się to, ale nie dokładnie w tej samej kwestii: http://stackoverflow.com/ pytania/2369467/dlaczego-są-tabliczki-ekspansje-zwykle-zrobione przez podwojenie-size –
To pomaga odpowiedzieć na wstawienie, ale nie wyjaśnia nic na temat innych operacji, jestem najbardziej zainteresowany wyjaśnieniem, jak złożoność czasowa odnośników w tablicy mieszającej – marme
W niektórych hipotezach funkcji mieszającej wyszukiwanie jest prawdziwym czasem O (1) dla większości implementacji tablic mieszańcowych. Rzeczywiście, w niektórych implementacjach z ograniczoną głębokością czerpaka jest on stały z założenia. –