Oto wyjaśnienie w kategoriach laika.
Załóżmy, że chcesz wypełnić bibliotekę książkami, a nie tylko je tam umieścić, ale chcesz łatwo znaleźć je ponownie, gdy będziesz ich potrzebować.
Więc decydujesz, że jeśli osoba, która chce przeczytać książkę, zna tytuł książki i dokładny tytuł do uruchomienia, to wszystko, co powinien wziąć. Dzięki tytułowi osoba z pomocą bibliotekarza powinna łatwo i szybko znaleźć książkę.
Jak możesz to zrobić? Cóż, oczywiście możesz zachować jakąś listę miejsc, w których umieścisz każdą książkę, ale wtedy masz taki sam problem jak przeszukiwanie biblioteki, musisz przeszukać listę. To prawda, że lista byłaby mniejsza i łatwiejsza do przeszukiwania, ale nadal nie chcesz szukać sekwencyjnie od jednego końca biblioteki (lub listy) do drugiego.
Chcesz czegoś, co z tytułem książki może od razu dać ci właściwe miejsce, więc wystarczy, że przejdziesz na właściwą półkę i podniesiesz książkę.
Ale jak można to zrobić? Cóż, z odrobiną ostrożności, kiedy zapełnisz bibliotekę i dużo pracy, kiedy zapełnisz bibliotekę.
Zamiast po prostu zapełniać bibliotekę od jednego końca do drugiego, wymyślacie sprytną, małą metodę. Ty bierzesz tytuł książki, przeglądasz mały program komputerowy, który wypluwa numer półki i numer miejsca na półce. Tutaj umieścisz książkę.
Piękno tego programu polega na tym, że później, gdy ktoś wraca, aby przeczytać książkę, ponownie podajesz tytuł w programie i odzyskujesz ten sam numer półki i numer miejsca, które pierwotnie podano, a to jest gdzie znajduje się książka.
Program, jak już wspomniano inni, nazywa się algorytmem mieszającym lub obliczeniem skrótu i zwykle działa na podstawie pobranych do niego danych (w tym przypadku tytułu książki) i oblicza z niego liczbę.
Dla uproszczenia załóżmy, że po prostu konwertuje każdą literę i symbol na liczbę i sumuje je wszystkie. W rzeczywistości jest to o wiele bardziej skomplikowane, ale na razie zostawmy to.
Piękno takiego algorytmu polega na tym, że jeśli wielokrotnie wprowadzasz do niego te same dane wejściowe, za każdym razem będzie wyrzucał tę samą liczbę.
Ok, więc w zasadzie tak działa tabela skrótów.
Następują rzeczy techniczne.
Po pierwsze, jest to liczba. Zwykle dane wyjściowe takiego algorytmu mieszającego mieszczą się w zakresie pewnej dużej liczby, zwykle znacznie większej niż miejsce w tabeli. Powiedzmy na przykład, że mamy w bibliotece miejsce na dokładnie milion książek. Wynik obliczeń skrótu może mieścić się w zakresie od 0 do miliarda, co jest wartością znacznie wyższą.
Więc co robimy? Używamy czegoś, co nazywa się obliczaniem modułu, co w zasadzie mówi, że jeśli policzyłeś do pożądanej liczby (tj. Miliarda), ale chciałeś pozostać w znacznie mniejszym zakresie, za każdym razem, gdy osiągniesz limit tego mniejszego zakresu, zaczniesz od nowa 0, ale musisz śledzić, jak daleko w dużej sekwencji doszedłeś.
Powiedz, że wynik algorytmu skrótu jest w zakresie od 0 do 20, a wartość 17 pochodzi z określonego tytułu. Jeśli biblioteka ma tylko 7 książek, liczysz 1, 2, 3, 4, 5, 6, a kiedy dojdziesz do 7, zaczynasz od 0. Ponieważ musimy liczyć 17 razy, mamy 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, a ostateczna liczba to 3.
Oczywiście obliczenia modułu nie są wykonywane w ten sposób, lecz z podziałem i resztą. Pozostała część podzielenia 17 przez 7 wynosi 3 (7 przechodzi 2 razy w 17 przy 14, a różnica między 17 a 14 wynosi 3).
W ten sposób umieścisz książkę w polu nr 3.
To prowadzi do następnego problemu. Kolizje Ponieważ algorytm nie ma sposobu na rozmieszczenie książek w taki sposób, aby dokładnie wypełniały bibliotekę (lub tablicę skrótów, jeśli chcesz), niezmiennie kończy się obliczaniem liczby, która była wcześniej używana. W sensie bibliotecznym, kiedy dojdziesz do półki i numeru miejsca, w którym chcesz umieścić książkę, już tam jest książka.
Istnieją różne metody obsługi kolizji, w tym uruchamianie danych w jeszcze innym obliczeniu, aby uzyskać inne miejsce w tabeli ( podwójne haszowanie ) lub po prostu znaleźć miejsce w pobliżu miejsca, które otrzymałeś (tj. Tuż obok poprzedniej książki, zakładając miejsce było również znane jako sondowanie liniowe ). Oznaczałoby to, że masz trochę do roboty przy próbie znalezienia książki później, ale nadal jest to lepsze niż po prostu rozpoczynanie na jednym końcu biblioteki.
Wreszcie, w pewnym momencie możesz chcieć umieścić w bibliotece więcej książek, niż pozwala biblioteka. Innymi słowy, musisz zbudować większą bibliotekę. Ponieważ dokładne miejsce w bibliotece zostało obliczone na podstawie dokładnego i aktualnego rozmiaru biblioteki, wynika z tego, że jeśli zmienisz rozmiar biblioteki, może być konieczne znalezienie nowych miejsc dla wszystkich książek, ponieważ obliczenia zostały wykonane w celu znalezienia ich miejsc zmienił się.
Mam nadzieję, że to wyjaśnienie było trochę bardziej przyziemne niż wiadra i funkcje :)