Odpowiedzi:
Hash
jest wyjątkowo źle nazwaną strukturą danych, w której programista pomylił interfejs z implementacją ( i był zbyt leniwy, aby napisać pełną nazwę, tzn. HashTable
zamiast tego używał skrótu Hash
).
Dictionary
to „poprawna” nazwa interfejsu (= ADT ), tj. kontener asocjacyjny odwzorowujący (zwykle unikatowy) klucze na (niekoniecznie unikatowe) wartości.
Tabela skrótów jest jedną z możliwych implementacji takiego słownika, która zapewnia dość dobrą charakterystykę dostępu (pod względem czasu działania) i dlatego często jest domyślną implementacją.
Taka implementacja ma dwie ważne właściwości:
(Aby klucz mógł być haszowalny, oznacza to, że możemy obliczyć wartość liczbową z klucza, który jest następnie używany jako indeks w tablicy).
Istnieją alternatywne implementacje struktury danych słownikowych, które narzucają porządek na klawiszach - często nazywane są słownikiem posortowanym (i zwykle są implementowane w kategoriach drzewa wyszukiwania, chociaż istnieją inne wydajne implementacje).
Podsumowując: słownik to narzędzie ADT, które mapuje klucze na wartości. Istnieje kilka możliwych implementacji tego narzędzia ADT, z których jedna to tablica skrótów . Hash
jest mylące, ale w kontekście jest równoważne słownikowi, który jest implementowany w postaci tabeli skrótów.
Hash
klasy z tabelą skrótów, ponieważ Ruby 1.9 Hash
zachowuje kolejność wstawiania, podczas gdy tabela skrótów nie. Tak więc w Ruby 1.9 nazwa Hash
nie odzwierciedla już nawet implementacji.
„Słownik” to nazwa tego pojęcia. Możliwe jest wdrożenie hashtable.
Słownik to zbiorowy termin określający dowolną implementację struktury danych używaną do szybkiego wyszukiwania / wstawiania. Można to osiągnąć / wdrożyć za pomocą różnych struktur danych, takich jak tablica skrótów, listy pominięć, drzewo rb itp. Tablica skrótów to specjalna struktura danych przydatna do wielu celów, w tym do implementacji słownika.
Słownika wykorzystuje klucz do referencyjnych wartości bezpośrednio wewnątrz z tablicy asocjacyjnej .
to znaczy (KEY => VALUE)
Mieszania jest często opisywany jako tabeli mieszania , który wykorzystuje funkcję mieszania do obliczania położenia w pamięci (lub więcej łatwo macierzy), w której wartość będzie. Hash pobierze KEY jako dane wejściowe i da wartość jako wynik. Następnie podłącz tę wartość do indeksu pamięci lub tablicy.
to znaczy KEY => HASH FUNCTION => VALUE
Myślę, że jedno jest bezpośrednie, a drugie nie. Funkcje skrótu również mogą nie być idealne i mogą czasami zapewniać indeks odwołujący się do niewłaściwej wartości. Ale można to poprawić.
Najlepsze miejsce do zobaczenia: Wikipedia ( tablica asocjacyjna i tabela skrótów )
unordered_map
aby pokazać, co robią, a nie czym są.