Jaka jest różnica między Hash
i Dictionary
?
Pochodząc ze scenariusza, czuję, że są do siebie podobne, ale chciałem znaleźć dokładne różnice. Googling niewiele mi pomógł.
Jaka jest różnica między Hash
i Dictionary
?
Pochodząc ze scenariusza, czuję, że są do siebie podobne, ale chciałem znaleźć dokładne różnice. Googling niewiele mi pomógł.
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.
unordered_map
aby pokazać, co robią, a nie czym są.Hash
klasy z tabelą skrótów, ponieważ Ruby 1.9Hash
zachowuje kolejność wstawiania, podczas gdy tabela skrótów nie. Tak więc w Ruby 1.9 nazwaHash
nie odzwierciedla już nawet implementacji.„Słownik” to nazwa tego pojęcia. Możliwe jest wdrożenie hashtable.
źródło
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.
źródło
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 )
źródło