Ta odpowiedź zawiera podsumowanie części TAoCP tom 3, rozdział 6.4.
Załóżmy, że mamy zestaw wartości , których n chcemy przechowywać w tablicy A o rozmiarze m . Używamy funkcji skrótu h : V → [ 0 .. M ) ; zazwyczaj M ≪ | V | . Nazywamy α = nVnAmh:V→[0..M)M≪|V| owspółczynnik obciążeniaoA. Zakładamy tutaj naturalnem=M; w praktycznych scenariuszach mamym≪Mi musimysamizmapować dom.α=nmAm=Mm≪Mm
Pierwszą obserwacją jest to, że nawet jeśli ma jednolite cechy¹, prawdopodobieństwo dwóch wartości mających tę samą wartość skrótu jest wysokie; jest to w zasadzie przykład niesławnego paradoksu urodzinowego . Dlatego zwykle będziemy musieli radzić sobie z konfliktami i możemy porzucić nadzieję na najgorszy czas dostępu do O ( 1 ) .hO(1)
A co z przeciętnym przypadkiem? Załóżmy, że każdy klucz z występuje z takim samym prawdopodobieństwem. Średnia liczba sprawdzonych wpisów C S n (udane wyszukiwanie) lub. C U n (nieudane wyszukiwanie) zależy od zastosowanej metody rozwiązywania konfliktów.[0..M)CSnCUn
Łańcuch
Każda pozycja tablicy zawiera (wskaźnik do początku) połączonych list. To dobry pomysł, ponieważ oczekiwana długość listy jest niewielka ( ) nawet jeśli prawdopodobieństwo kolizji jest wysokie. Ostatecznie otrzymujemy
C S n ≈1+αnm
Można to nieco poprawić, przechowując listy (częściowo lub całkowicie) wewnątrz tabeli.
CSn≈1+α2 and CUn≈1+α22.
Sondowanie liniowe
v
h(v),h(v)−1,…,0,m−1,…,h(v)+1
vα→1CSn≈12(1+11−α) and CUn≈12(1+(11−α)2).
α<0.75
Podwójne mieszanie
M
CSn≈1αln(11−α) and CUn≈11−α.
Należy pamiętać, że usuwanie elementów i rozszerzanie tabel ma różne stopnie trudności dla poszczególnych metod.
O(1)αh
h
Hashtable